(2021年5月13日追記) クリックタイミングによってdeeplウインドウが開くにくい問題を修正しました。
(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 () {
let w = null;
let kDoc = null;
let kObj = null;
let prevText = "";
let separateElement;
let translateElement;
if (typeof window.KindleReaderUI !== 'undefined') {
w = window;
} else if (window.length) {
for (let 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;
let sId = null;
let eId = null;
if (typeof kObj.ACRExtensions === 'undefined') {
kObj.ACRExtensions = true;
let c = function () {
let s = kObj.getSelection();
if (s) {
if (sId != s.start || eId != s.end) {
sId = s.start;
eId = s.end;
$('iframe', kDoc).each(function (j, textIframe) {
let 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));
if (r) {
r = encodeURIComponent(r);
if (r != prevText) {
$('#ACRExtensions_copyC_sep', kDoc).remove();
$('#ACRExtensions_copyC', kDoc).remove();
let styles = $('<style>.spinner, .dictionary.i18n.expanded {display:none !important;} div#kindleReader_menu_contextMenu { max-height: 35px;}</style>');
separateElement = $('<div id="ACRExtensions_copyC_sep" class="kindle_menu_separator"></div>');
translateElement = $('<div id="ACRExtensions_copyC" class="kindle_menu_button button_enabled ui-corner-left">Translate</div>');
$('#kindle_menu_border', kDoc).append(separateElement).append(translateElement).append(styles);
prevText = r;
$('#ACRExtensions_copyC', kDoc).click(function (evt) {
if (r) {
window.open('https://translate.google.com/?hl=ja&ie=utf-8#view=home&op=translate&sl=auto&tl=ja&text=' + r, 'Google Translate', "height=600,width=776,location=0,menubar=0,scrollbars=1,toolbar=0");
}
});
}
}
}
}
}
if (separateElement) {
separateElement.show();
translateElement.removeClass('button_hidden');
}
};
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翻訳のウインドウが開き、翻訳結果が確認できます。
すごすぎます😭公開くださり、ありがとうございます!!やってみます。
試してほしい!洋書を読むハードルをさげるKindleの翻訳機能を活用する方法 | らくるんご