Office アドイン

[Office用アプリ]Microsoft Translator APIを利用して選択文字列を翻訳する。

2012/11/2 追記:
PHPでOAuth認証を行う「[JavaScript API for Office]Microsoft Translator APIを利用して選択文字列を翻訳する(クロスドメイン対応)。」を追加しました。

※ この情報はOffice 2013 カスタマー プレビュー版を元にしています。製品版では変更になる可能性がありますのでご注意ください。

今回はMicrosoft Translator APIを利用して選択文字列を翻訳する方法を紹介します。
コードを実行するにはWindows Azure MarketplaceでMicrosoft Translatorの利用登録をして、クライアントID(client_id)と顧客の秘密(client_secret)を取得する必要があります。詳しい取得手順は「Windows Azure Marketplace の Microsoft Translator API を使ってみる」をご参照ください。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script src="https://az88874.vo.msecnd.net/api/1.0/office.js"></script>
        <script>
            var target;
            Office.initialize = function (reason) {
                $(document).ready(function () {
                    Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, document_SelectionChange);
                });
            }
            function document_SelectionChange(eventArgs) {
                if ($("#action").attr("checked")) {
                    eventArgs.document.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) {
                        if (asyncResult.status != Office.AsyncResultStatus.Failed) {
                            target = asyncResult.value;
                            execTranslate();
                        }
                    });
                }
            }
            
            $(function(){
                $("#result").click(
                    function() {
                        this.focus();
                        this.select();
                        clipboardData.setData("text", this.value);
                    }
                );
                
                $("#fromLng").change(function() {
                    if ($("#action").attr("checked")) {
                        execTranslate();
                    }
                });
                
                $("#toLng").change(function() {
                    if ($("#action").attr("checked")) {
                        execTranslate();
                    }
                });
            });
            
            function execTranslate() {
                if (target) {
                    fncTranslate($("#fromLng").val(), $("#toLng").val(), target);
                }
            }
            
            function fncTranslate(fromLng, toLng, str) {
                //********** 要変更 **********
                var client_id = "(取得したclient_idをここに記述します)"; //クライアントID
                var client_secret = "(取得したclient_secretをここに記述します)"; //顧客の秘密
                //****************************
                
                var scope = "http://api.microsofttranslator.com";
                var grant_type = "client_credentials";
                
                var x = $.ajaxSettings.xhr();
                x.open("POST","https://datamarket.accesscontrol.windows.net/v2/OAuth2-13",true);
                x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                x.send("client_id=" + encodeURIComponent(client_id) + "&client_secret=" + encodeURIComponent(client_secret) + "&scope=" + scope + "&grant_type=" + grant_type);
                x.onreadystatechange = function() {
                    if (x.readyState == 4 && x.status == 200) {
                        var js = eval("(" + x.responseText + ")");
                        var ah = "Bearer " + js.access_token;
                        $.ajax({
                            type: "GET",
                            url: "http://api.microsofttranslator.com/V2/Ajax.svc/Translate",
                            dataType: "jsonp",
                            data: {
                                appId: ah,
                                text: str,
                                from: fromLng,
                                to: toLng
                            },
                            jsonp: "oncomplete",
                            success: function(data, dataType){
                                $("#result").val(data);
                            },
                            error: function() {
                                $("#result").val("エラーが発生しました。");
                            }
                        });
                    } else {
                        $("#result").val("ただいま処理中です。");
                    }
                }
            }
        </script>
        <style>
            body {
                font-family:Arial,sans-serif;
                font-size:0.9em;
            }
            select,textarea {width:100%}
        </style>
    </head>
    <body>
        <input id="action" type="checkbox" title="チェックされている場合のみ翻訳が行われます。">動作
        <table>
            <tr>
                <td>翻訳元言語:</td>
                <td>
                    <select id="fromLng" title="翻訳元言語">
                        <option value="" selected>自動検出</option>
                        <option value="ar">アラビア語</option>
                        <option value="bg">ブルガリア語</option>
                        <option value="ca">カタロニア語</option>
                        <option value="zh-CHS">簡体字中国語</option>
                        <option value="zh-CHT">繁体字中国語</option>
                        <option value="cs">チェコ語</option>
                        <option value="da">デンマーク語</option>
                        <option value="nl">オランダ語</option>
                        <option value="en">英語</option>
                        <option value="et">エストニア語</option>
                        <option value="fi">フィンランド語</option>
                        <option value="fr">フランス語</option>
                        <option value="de">ドイツ語</option>
                        <option value="el">ギリシャ語</option>
                        <option value="ht">ハイチ語</option>
                        <option value="he">ヘブライ語</option>
                        <option value="hi">ヒンディー語</option>
                        <option value="mww">Hmong Daw</option>
                        <option value="hu">ハンガリー語</option>
                        <option value="id">インドネシア語</option>
                        <option value="it">イタリア語</option>
                        <option value="ja">日本語</option>
                        <option value="ko">韓国語</option>
                        <option value="lv">ラトビア語</option>
                        <option value="lt">リトアニア語</option>
                        <option value="no">ノルウェー語</option>
                        <option value="fa">ペルシャ語</option>
                        <option value="pl">ポーランド語</option>
                        <option value="pt">ポルトガル語</option>
                        <option value="ro">ルーマニア語</option>
                        <option value="ru">ロシア語</option>
                        <option value="sk">スロバキア語</option>
                        <option value="sl">スロベニア語</option>
                        <option value="es">スペイン語</option>
                        <option value="sv">スウェーデン語</option>
                        <option value="th">タイ語</option>
                        <option value="tr">トルコ語</option>
                        <option value="uk">ウクライナ語</option>
                        <option value="vi">ベトナム語</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>翻訳先言語:</td>
                <td>
                    <select id="toLng" title="翻訳先言語">
                        <option value="ar">アラビア語</option>
                        <option value="bg">ブルガリア語</option>
                        <option value="ca">カタロニア語</option>
                        <option value="zh-CHS">簡体字中国語</option>
                        <option value="zh-CHT">繁体字中国語</option>
                        <option value="cs">チェコ語</option>
                        <option value="da">デンマーク語</option>
                        <option value="nl">オランダ語</option>
                        <option value="en" selected>英語</option>
                        <option value="et">エストニア語</option>
                        <option value="fi">フィンランド語</option>
                        <option value="fr">フランス語</option>
                        <option value="de">ドイツ語</option>
                        <option value="el">ギリシャ語</option>
                        <option value="ht">ハイチ語</option>
                        <option value="he">ヘブライ語</option>
                        <option value="hi">ヒンディー語</option>
                        <option value="mww">Hmong Daw</option>
                        <option value="hu">ハンガリー語</option>
                        <option value="id">インドネシア語</option>
                        <option value="it">イタリア語</option>
                        <option value="ja">日本語</option>
                        <option value="ko">韓国語</option>
                        <option value="lv">ラトビア語</option>
                        <option value="lt">リトアニア語</option>
                        <option value="no">ノルウェー語</option>
                        <option value="fa">ペルシャ語</option>
                        <option value="pl">ポーランド語</option>
                        <option value="pt">ポルトガル語</option>
                        <option value="ro">ルーマニア語</option>
                        <option value="ru">ロシア語</option>
                        <option value="sk">スロバキア語</option>
                        <option value="sl">スロベニア語</option>
                        <option value="es">スペイン語</option>
                        <option value="sv">スウェーデン語</option>
                        <option value="th">タイ語</option>
                        <option value="tr">トルコ語</option>
                        <option value="uk">ウクライナ語</option>
                        <option value="vi">ベトナム語</option>
                    </select>
                </td>
            </tr>
        </table>
        <textarea id="result" title="クリックすると内容をクリップボードにコピーします。" rows="15">ここに結果が表示されます。</textarea>
    </body>
</html>

上記コードを設定したアプリを挿入すると、「動作」にチェックが入っている場合に自動的に選択文字列の翻訳が行われます。

文字列を選択するだけでシームレスに翻訳できるので、使い勝手はなかなか良いのではないかと思います。

・Translate Method
http://msdn.microsoft.com/en-us/library/ff512406

[Office用アプリ]任意の場所にデータを入力する。前のページ

[Office用アプリ]「あいさつ文の挿入」を作業ウィンドウアプリに移植してみる。次のページ

関連記事

  1. Office関連

    7-Zipで圧縮・解凍を行うVBAマクロ

    「7-Zip VBA」といったキーワード検索でのアクセスがありました。…

  2. Office関連

    起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(DOM編)

    前回の記事で、UI Automationを使って起動中のMicroso…

  3. Windows 10

    SeleniumBasic(Selenium VBA)がMicrosoft Edgeに対応しました。…

    言わずと知れたWebブラウザーの自動制御ツール「Selenium」のV…

コメント

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP