(2021年5月13日追記) クリックタイミングによってdeeplウインドウが開くにくい問題を修正しました。

(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 () {
    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">DeepL</div>');
                                    $('#kindle_menu_border', kDoc).append(separateElement).append(translateElement).append(styles);
                                    prevText = r;

                                    $('#ACRExtensions_copyC', kDoc).click(function (evt) {
                                        if (r) {
                                            window.open('https://www.deepl.com/translator#en/ja/' + r, 'DeepL', "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.');
    }
})();

URLの内容を書き換えたら「完了」でブックマークレットを保存します。

Kindle Cloud Readerをブラウザで開き、その状態でブックマックバーにある先程作ったブックマークレットをクリックします。

これで翻訳機能が有効になりました。文章をドラッグすると表示される「DeepL」をクリックすると、別ウィンドウが開いてDeepLでの検索結果が表示されます。上記のブックマークレットは英語専用なので、他の言語からの翻訳に使いたい場合はブックマークレットの「https://www.deepl.com/translator#en/ja/」の部分の「en」をDeepLの対応言語に変更してください。

関連記事

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. ニック

    はじめまして。
    本記事を拝見してコメントいたします。
    素敵な記事をありがとうございます。あなたの記事のおかげで、大変助かっています。

    ありがたく使わせていただいていますが、
    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翻訳でも同様に発生しておりましたが、同様に改善できました)

    • Drunkar 作成者

      コメントありがとうございます!
      ご指摘の通り、エンコードが必要ですね!コードに修正を反映しました。
      有益なご指摘ありがとうございました。

  2. Naoki

    大変有用な記事を公開頂き、ありがとうございます。
    記事記載の方法で試してみましたが、使用できずにおります。

    ブックマークレットをクリック時に表示されるウィンドウがまず表示されまでん。
    及びテキストドラッグ時に「メモ」と「ハイライト」以外に「DeepL」が表示されません。
    ブラウザをはGoogle Chromeを使用しております(Internet Explorerも試しましたが、実行できまでんせした)

    クロームのURL欄横のサイトの設定を調節してみましたが、変化は起こらず。

    お手数をおかけして大変申し訳ございませんが、使用できない原因や対策等にお心当たりがございましたら、ご教示いただければ幸いです

    よろしくお願い致します。

    • Drunkar 作成者

      ブックマークのURL欄に最初から入っていた文字列(例えばこのページをブックマークしたとしたら、”https://sekailab.com/wp/2020/03/25/deepl-translation-with-kindle-cloud-reader/”)は全部消去されてますでしょうか。残っていると動作しないと思います。
      また、もしかすると環境によってはクォーテーションやダブルクオーテーション(‘ または “)が全角になっていたりするかもしれません。半角でなければ動作しません。
      思い当たるのはそんなところですね・・・

  3. Heineken

    大変有用な情報のご共有ありがとうございます。今の所問題なく使えており、とても便利です!

    • Drunkar 作成者

      嬉しいコメントありがとうございます。お役に立てて何よりです。