(2020年12月26日追記) Kindle Cloud Readerの仕様変更により発生していたエラーに対処しました。旧版はgistに置いてあります。
(2020年3月31日追記) DeepLの記事の方でニックさんにコメントいただいた内容で、コードがよりロバストになりました!ありがとうございました。
(2020年3月25日追記)
より高品質な翻訳だと話題のDeepLを使ったブックマークレットを公開しました。ぜひお試しください:
—
kamiとかxodoを使えば英語pdfにgoogle翻訳を便利に使うことができて爆速に読める、という話を以前しましたが、英語の情報リソースといえば、他にも洋書があります。
kindleで洋書を買うと、アプリ内の翻訳機能を使うことができます(オンライン時のみ)。でも僕はあまりスマホで少しずつ洋書を読むというよりは、pcでガバっと読み進めるというやり方のほうが好きです。
しかしkindle cloud readerではコピー対策なのか、クリップボードを利用することができません。そこで、下記記事を参考にしてブックマークレットを作りました。
もしchromeをお使いなら、このページのままで良いのでurlバーの星マークをクリックしてをブックマークし、「その他」からブックマークの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">Translate</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://translate.google.com/?hl=ja&ie=utf-8#view=home&op=translate&sl=auto&tl=ja&text=' + encodeURIComponent(r), 'Google Translate' , "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.');
}
})();
そしてkindle cloud readerで読みたい本を開いて先ほど保存したブックマークをクリック。
これでgoogle翻訳機能が有効化されました。文をドラッグすると、ポップアップで表示されるメニューに「Translate」が追加されました。これをクリックすると、ポップアップでgoogle翻訳のウインドウが開き、翻訳結果が確認できます。
コメント