(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.KindleReaderContextMenu !== 'undefined') {
    w = window;
} else if (window.length) {
    for (var i=0;i<window.length;i++) {
        if (typeof window[i].KindleReaderContextMenu !== 'undefined') {
            w = window[i];
            break;
        }
    }
}
if (typeof w === 'object') {
    kObj = w.KindleReaderContextMenu;
    kDoc = w.document;
    if (typeof kObj.ACRExtensions === 'undefined') {
        kObj.ACRExtensions = true;
        var oldMethod = kObj.show;
        kObj.show = function () {
            var res = oldMethod.apply(kObj, arguments);
            var txtDoc = null;
            var r = null;
            if (typeof (arguments[3]) !== 'undefined' && typeof (arguments[3]['start']) !== 'undefined') {
                var sId = arguments[3]['start'];
                var eId = arguments[3]['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', 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");
                }
            });
            return res;
        };
        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の対応言語に変更してください。

関連記事

技術同人誌15冊が無料!いますぐライバルに差をつけろ!

え!!17.3インチモバイルモニタをusb-cで繋いでPCレスPC環境を!?

usb-cで甦れ!押入れのmacbook air

『君の名は』はキモいのか

フェイクだった時代の終焉

低解像度動画を高解像度にアプコンする精度がすごいと話題のTecoGANをwindowsで動かしてみた

コメント

  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 作成者

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

コメントを返信する

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