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

関連記事

  1. Office関連

    Excel 2016 Previewで追加された新しい関数

    ※ 下記情報はOffice 2016 Preview版を元にしています…

  2. Office アドイン

    [Officeアドイン]ワークシートで選択範囲を変更したときに発生するイベント

    ワークシート上で選択範囲の変更を検知する際、VBAでは通常「Works…

  3. Office関連

    [リボン・カスタマイズ]dynamicMenu要素から任意のマクロを実行する。

    HPのお問い合わせフォームから下記の質問がありました。「メニュ…

  4. アイコン一覧

    Office 2013 アイコン一覧(M)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    VBAからRegistration-Freeで.NETベースのDLLを呼び出す方法

    C#製のDLLをVBAから呼び出すのにいちいちRegAsmするのも面倒…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP