(2020年12月26日追記) Kindle Cloud Readerの仕様変更により発生していたエラーに対処しました。旧版はgistに置いてあります。
(2020年3月31日追記) ニックさんにコメントいただいた内容で、コードがよりロバストになりました!ありがとうございました。
最近日本語対応したDeepL Translator、確かにgoogle翻訳に比べて圧倒的に正確かつロバストな結果を返してくれます。
https://www.deepl.com/translator
以前このブログでは、ブラウザで読むKindleサービスであるKindle Cloud Readerをgoogle翻訳に対応させるブックマークレットを公開しました:
これはKindle Cloud Readerがコピー対策のためにクリップボードへのコピーを無効にしているためにgoogle翻訳などのブラウザ拡張が使えなくてこまることへの対処でした。今回DeepL翻訳が最高であることがわかったので、DeepL版のブックマークレットも公開します。
追加方法は以前と同じで、まずはこのページで良いのでchromeならURLバーの星型をクリックしてブックマークを作成、場所はブックマックバーが良いでしょう。そのまま「その他」をクリックしてブックマークの編集画面を開き、「URL」の中をすべて削除して以下のスクリプト全文をコピペします。
javascript: (function () { /* Kindle Translator V 0.4*/ /* based on ACRExtensions via https://github.com/binarycrafts/ACRExtensions */
var w = null;
var kDoc = null;
var kObj = null;
if (typeof window.KindleReaderUI !== 'undefined') {
w = window;
} else if (window.length) {
for (var i = 0; i < window.length; i++) {
if (typeof window[i].KindleReaderUI !== 'undefined') {
w = window[i];
break;
}
}
}
if (typeof w === 'object') {
kObj = w.KindleReaderUI;
kDoc = w.document;
var sId = null;
var eId = null;
if (typeof kObj.ACRExtensions === 'undefined') {
kObj.ACRExtensions = true;
var c = function () {
var s = kObj.getSelection();
if (s) {
if (sId != s.start || eId != s.end) {
sId = s.start;
eId = s.end;
$('iframe', kDoc).each(function (j, textIframe) {
var textIFrameDoc = $(textIframe).contents().get(0);
if ($('#' + sId, textIFrameDoc).get(0)) {
txtDoc = textIFrameDoc;
return false;
}
});
if (txtDoc) {
r = txtDoc.createRange();
r.setStartBefore($('#' + sId, txtDoc).get(0));
r.setEndAfter($('#' + eId, txtDoc).get(0));
}
}
$('#ACRExtensions_copyC_sep', kDoc).remove();
$('#ACRExtensions_copyC', kDoc).remove();
var styles = $('<style>.spinner, .dictionary.i18n.expanded {display:none !important;} div#kindleReader_menu_contextMenu { max-height: 35px;}</style>');
var sepEl = $('<div id="ACRExtensions_copyC_sep" class="kindle_menu_separator"></div>');
var copyC = $('<div id="ACRExtensions_copyC" class="kindle_menu_button button_enabled ui-corner-left">DeepL</div>');
$('#kindle_menu_border', kDoc).append(sepEl).append(copyC).append(styles);
setTimeout(function () {
sepEl.show();
copyC.removeClass('button_hidden');
}, 1);
$('#ACRExtensions_copyC', kDoc).click(function (evt) {
if (r) {
var newW = window.open('https://www.deepl.com/translator#en/ja/' + encodeURIComponent(r), 'DeepL', "height=600,width=776,location=0,menubar=0,scrollbars=1,toolbar=0");
}
});
}
};
setInterval(c, 200);
alert('Kindle Translator Extension is now active.');
} else {
alert('Kindle Translator Extension is already active.');
}
} else {
alert('Error: Kindle Translator Extension is not active. The Amazon Cloud Reader window could not be found.');
}
})();
URLの内容を書き換えたら「完了」でブックマークレットを保存します。
Kindle Cloud Readerをブラウザで開き、その状態でブックマックバーにある先程作ったブックマークレットをクリックします。
これで翻訳機能が有効になりました。文章をドラッグすると表示される「DeepL」をクリックすると、別ウィンドウが開いてDeepLでの検索結果が表示されます。上記のブックマークレットは英語専用なので、他の言語からの翻訳に使いたい場合はブックマークレットの「https://www.deepl.com/translator#en/ja/」の部分の「en」をDeepLの対応言語に変更してください。
javascript:(function(){/ * Kindle Translator V 0.4 * / / * https://github.com/binarycrafts/ACRExtensions経由のACRExtensionsに基づく* /
var w = null;
var kDoc = null;
var kObj = null;
if(typeof window.KindleReaderUI!== ‘undefined’){
w =ウィンドウ;
} else if(window.length){
for(var i = 0; i <window.length; i ++){
if(typeof window [i] .KindleReaderUI!== ‘undefined’){
w = window [i];
ブレーク;
}
}
}
if(typeof w === ‘object’){
kObj = w.KindleReaderUI;
kDoc = w.document;
var sId = null;
var eId = null;
if(typeof kObj.ACRExtensions === ‘undefined’){
kObj.ACRExtensions = true;
var c = function(){
var s = kObj.getSelection();
if(s){
if(sId!= s.start || eId!= s.end){
sId = s.start;
eId = s.end;
$( ‘iframe’、kDoc).each(function(j、textIframe){
var textIFrameDoc = $(textIframe).contents()。get(0);
if($( ‘#’ + sId、textIFrameDoc).get(0)){
txtDoc = textIFrameDoc;
falseを返します。
}
});
if(txtDoc){
r = txtDoc.createRange();
r.setStartBefore($( ‘#’ + sId、txtDoc).get(0));
r.setEndAfter($( ‘#’ + eId、txtDoc).get(0));
}
}
$( ‘#ACRExtensions_copyC_sep’、kDoc).remove();
$( ‘#ACRExtensions_copyC’、kDoc).remove();
var styles = $( ‘<style> .spinner、.dictionary.i18n.expanded {display:none!important;} div#kindleReader_menu_contextMenu {max-height:35px;} </ style>’);
var sepEl = $( ‘<div id = “ACRExtensions_copyC_sep” class = “kindle_menu_separator”> </ div>’);
var copyC = $( ‘<div id = “ACRExtensions_copyC” class = “kindle_menu_button button_enabled ui-corner-left”> DeepL </ div>’);
$( ‘#kindle_menu_border’、kDoc).append(sepEl).append(copyC).append(styles);
setTimeout(function(){
sepEl.show();
copyC.removeClass( ‘button_hidden’);
}、1);
$( ‘#ACRExtensions_copyC’、kDoc).click(function(evt){
if(r){
var newW = window.open( ‘https://www.deepl.com/translator#en/ja/’ + encodeURIComponent(r)、 ‘DeepL’、 “height = 600、width = 776、location = 0、menubar = 0、scrollbars = 1、toolbar = 0 “);
}
});
}
};
setInterval(c、200);
alert( ‘Kindle Translator Extensionがアクティブになりました。’);
} そうしないと {
alert( ‘Kindle Translator Extensionはすでにアクティブです。’);
}
} そうしないと {
alert( ‘エラー:Kindle Translator Extensionがアクティブではありません。AmazonCloudReaderウィンドウが見つかりませんでした。’);
}
})();
はじめまして。
本記事を拝見してコメントいたします。
素敵な記事をありがとうございます。あなたの記事のおかげで、大変助かっています。
ありがたく使わせていただいていますが、
Kindleの本文中に%が含まれていると、翻訳が表示されなくなる現象にあたりました。
下記のように修正したら問題なく表示されましたこと、お礼とともにお伝えいたします。
var newW = window.open(‘https://www.deepl.com/translator#en/ja/’ + r, ‘DeepL’ ,
↓
var newW = window.open(‘https://www.deepl.com/translator#en/ja/’ + encodeURIComponent(r), ‘DeepL’ ,
(なお、Google翻訳でも同様に発生しておりましたが、同様に改善できました)
コメントありがとうございます!
ご指摘の通り、エンコードが必要ですね!コードに修正を反映しました。
有益なご指摘ありがとうございました。
大変有用な記事を公開頂き、ありがとうございます。
記事記載の方法で試してみましたが、使用できずにおります。
ブックマークレットをクリック時に表示されるウィンドウがまず表示されまでん。
及びテキストドラッグ時に「メモ」と「ハイライト」以外に「DeepL」が表示されません。
ブラウザをはGoogle Chromeを使用しております(Internet Explorerも試しましたが、実行できまでんせした)
クロームのURL欄横のサイトの設定を調節してみましたが、変化は起こらず。
お手数をおかけして大変申し訳ございませんが、使用できない原因や対策等にお心当たりがございましたら、ご教示いただければ幸いです
よろしくお願い致します。
ブックマークのURL欄に最初から入っていた文字列(例えばこのページをブックマークしたとしたら、”https://sekailab.com/wp/2020/03/25/deepl-translation-with-kindle-cloud-reader/”)は全部消去されてますでしょうか。残っていると動作しないと思います。
また、もしかすると環境によってはクォーテーションやダブルクオーテーション(‘ または “)が全角になっていたりするかもしれません。半角でなければ動作しません。
思い当たるのはそんなところですね・・・
大変有用な情報のご共有ありがとうございます。今の所問題なく使えており、とても便利です!
嬉しいコメントありがとうございます。お役に立てて何よりです。
ありがとうございます!本当に助かりました!
コメントくださり、ありがとうございます!
情報共有がありがとうございます。Kindleの洋書の読書のハードルが下がりました。ただ、Chromeでブックマークを設定して便利に使っていましたが、せかラボのブックマークがすでにアクティブになっていると表示されるにもかかわらず、突然、「ハイライトとメモ」しか表示されなくなり、DeepL翻訳ができなくなってしまいました。何が原因か思い当たることはないのですが、もしこれが原因では、ということがありましたらご教示いただけないでしょうか。
うーむ、難しいですね。F12キーを押してコンソール上のエラーメッセージを見てみるのが一番正確に原因が特定できそうですが、てっとり早く試せるのは以下かなと思います:
– ページのリロード
– ブラウザの再起動
– クッキー、キャッシュの削除(意味がわからない場合は、”クッキーの削除 chrome”などでググってみてください)
はじめまして!探していた情報がこんなわかりやすく説明してくれているページがあったとは、、、とても助かりました!本当にありがとうございます!
お役に立てて嬉しいです。ありがとうございます。
kindleの洋書を読むのに、DeepLで翻訳したかったところこちらを参考にしたら
スムーズに出来て大変助かりました!
youtubeの動画ブログで情報を共有したいと思いますが、
もしダメだったらメッセージいただきましたら取り消しますので、
どうぞよろしくお願いします!
紹介いただいてありがとうございます。動画のリンクもコメントでいただけると嬉しいです。
いつも使わせていただいてます。
同じように本日も使っていたところ、急に使用できなくなったのでコメントさせていただきました。
MACで使用しているのですが、chrome、Safariどちらも使用できない状況です。
再読み込み、ブラウザの再起動、キャッシュの削除すべて行いましたが効果がありません。
ご確認いただけますと幸いです。
windowsのchromeで試してみたところ、依然として使えるようでした。macのデフォルトでなにかブロックされてしまっているのかもしれません。chromeでf12を押してどんなエラーが出ているか確認すれば、なにか手がかりが得られると思います( https://qiita.com/mtanabe/items/e82353c1c6c3ee402a51 )
初めまして。
いつも使わせてもらっています。私もmacでできなくなりましたので、エラーを確認しましたら、以下のエラーが出ていました。
Uncaught TypeError: Cannot read property KindleReaderContextMenu
ご参考になれば、幸いです。
いつもお世話になっております。
上記コメントに続く形の質問です。
windowsのchromeでもうまく出ないようになりました。
以下エラー文です。
Uncaught TypeError: Cannot read property ‘KindleReaderContextMenu’ of null
at :1:479
at :1:2770
はじめまして。私も同様に以下のエラーメッセージが表示されました。解決方法をご存じの方がいらしたら、ご教示いただけると大変助かります。
Uncaught TypeError: Cannot read property ‘KindleReaderContextMenu’ of null
いつもお世話になっております。
大変便利に使わせて頂いております。ありがとうございます。
私も、昨日急に使用不可になってしましました。
Mac、Chromeです。
以下、エラー文です。
Uncaught TypeError: Cannot read property ‘KindleReaderContextMenu’ of null
at :1:479
at :1:2762
どうやら Uncaught TypeError: Cannot read property ‘KindleReaderContextMenu’ of null というエラーは、adblock系の拡張機能が有効であるときに発生するみたいです。kindle cloud readerのページでadblockを無効化してみてください。
迅速なご返信に心より御礼申し上げます。
私の場合も、adblock系の拡張機能は入っておらず、別に原因があるようです。
最初のコメントでは失念しておりましたが、このようなブックマークレットを公開してくださったことに心より御礼申し上げます。Drunkar様のおかげで、諦めていた洋書を読み進めることができております。きっと、多くの方が、私と同じようにこちらのブックマークレットに助けられていることと存じます。
どうか解決法が見つかりますように。こちらでも、何かわかれば情報共有させていただきますね!
対応ありがとうございます。上と同様にUncaught TypeError: Cannot read property ‘KindleReaderContextMenu’ of null
at :1:479
at :1:2770
メッセージがやはり出ます。adblock系の拡張機能は入っておらず別の問題のようです(私の場合ですが)
大変ありがたく使わせていただいております。
本当に助けられております。
私も昨日から
Kindle Translator Extension is now active. OK
の表示が出なくなりました。
win10 chrome adblock的なものなし
です。
トホホ。
ご報告まで。
すみません,なみさんとどうように,お礼を付けていないという状況でした。ほんとうにすばらしく,これで仕事が40倍くらい向上していました。社会的な貢献,日本語を使う人にとっての利はほんとうに大きかったと思います。感謝しております。
なんとか解決が見つかればと思っております。
Kindle Cloud Readerのアップデートが順次行われてるみたいですね。私の方でも問題を確認しました。オブジェクト構造が変わってしまっているので時間がかかるかもしれませんがどうにかアップデートしてみたいと思います。
お待たせしました。新しいKindle Cloud Reader対応を行いました。Windows10 + Chromeで動作確認しています。
Drunkarさん、早速にありがとうございます。Windows10 + Chromeで使用できました!!
善意で公開してくださっているうえ、迅速にご対応くださいましたこと、心より御礼申し上げます。
ryosukeさんも書かれているように、私もこちらのブックマークレットのおかげで飛躍的に効率を上げることができました。今年の嬉しかったことTOP3に入るかもしれないくらいです。心より御礼申し上げます。本当に本当にありがとうございました!
Drunkarさん、早々にありがとうございます。ほんとうに感謝してもしきれません。もちろん自分の英語力を上げることも重要なのですが、それはそれとして、こうしたことが多くの人に外国語(英語に限らず)への情報へのアクセスを飛躍的に高めることにつながると思います。多大な貢献だと思います。もちろん、こうした英語圏と非英語圏の人にとって大きな差異となることをkindleやamazon側が理解を示し、それを解決していくための方法を構築してくれることが大きな願いですが…いずれにしても、心から感謝申し上げます。
Drunkarさん、早々にありがとうございます。ほんとうに感謝してもしきれません。もちろん自分の英語力を上げることも重要なのですが、それはそれとして、こうしたことが多くの人に外国語(英語に限らず)への情報へのアクセスを飛躍的に高めることにつながると思います。多大な貢献だと思います。もちろん、こうした英語圏と非英語圏の人にとって大きな差異となることをkindleやamazon側が理解を示し、それを解決していくための方法を構築してくれることが大きな願いですが…いずれにしても、心から感謝申し上げます。
Mac OS Catalina(10.15.7)でも動作確認しました。ほんとうにありがとうございます。
この記事のおかげで持病に関する英語の本が読めました!ありがとうございます!
ブックマークの作成までは間違っていないと思うのですが、Kindle上でクリックをしてもエラーも出ず、成功したようなポップアップも出ません。
もちろんKindle上で文章を選択しても、DEEPLの選択肢がでてきません。
拡張機能はすべて無効にし、キャッシュとクッキーは削除しましたが、やはり有効にならないようです。
私だけでしょうか。。。
まれに失敗することがあるみたいです。本を開いた状態でブラウザのタブをリロードして、再度ブックマークレットをクリックして有効化してみてください。