(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翻訳のウインドウが開き、翻訳結果が確認できます。

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

  1. amatsukaze3

    すごすぎます😭公開くださり、ありがとうございます!!やってみます。

  2. 試してほしい!洋書を読むハードルをさげるKindleの翻訳機能を活用する方法 | らくるんご

コメントを返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です