Home

Karafuto Blog

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • Comments (Close): -
  • TrackBack (Close): -

Google AJAX Language APIを読みこむブックマークレット

Karafuto Blog - Google AJAX Language APIで翻訳する User JavaScriptではRESTful形式を使ったが、今回は Google AJAX Language APIを読みこみ、作成されたオブジェクトのメソッドを使う。RESTful形式よりは少し面倒だが、やれることは多い。

Google AJAX Language APIを読みこみ、使う手順

  1. Google AJAX API スクリプトを読みこむ。
    http://www.google.com/jsapi?callback=(関数名)
  2. 1で指定したコールバック関数で、googleオブジェクトの loadメソッドを使い、Google AJAX Language APIを読みこむ。
    google.load('language', '1', {'callback': (関数)});
  3. 2のコールバック関数で、languageオブジェクト(google.language)のメソッドを実行する。例えば、translateメソッドで文章を翻訳する。
    google.language.translate('こんにちは', 'ja', 'en', function (result){ alert(result.translation);});

Google AJAX Language APIで使える言語を列挙するブックマークレット

Google AJAX Language APIで使える言語を列挙するブックマークレット

ブックマークレットを実行すると、Google AJAX Language APIで使える言語を警告ダイアログに表示する。言語名の後の括弧に入っているのは、Google AJAX Language APIで言語を指定する時に使うパラメータ。

Google AJAX Language APIで使える言語を列挙するブックマークレット

ブックマークレットの内容

javascript:(function() {
  // Google AJAX Language APIの読みこみ
  loadLanguage = function() {
    google.load('language', '1', {
      'callback': enumerateLanguage
    });
  };
  // 言語を列挙
  enumerateLanguage = function() {
    var list = '';
    var num = 0;
    for (var i in google.language.Languages) {
      if (i != 'UNKNOWN') {
        num++;
        list += i + ' (' + google.language.Languages[i] + '), ';
      }
    }
    list = list.substring(0, list.length - 2) + '\n\n' + num;
    alert(list);
  };

  // Google AJAX APIの読みこみ
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = 'http://www.google.com/jsapi?callback=loadLanguage';
  document.body.appendChild(script);
})();

google.language.Languagesは、Google AJAX Language APIで扱うことができる言語の名前と言語のパラメータをプロパティと値にしたオブジェクト。

選択した文字列の言語を判定するブックマークレット

選択した文字列の言語を判定するブックマークレット

文字列を選択して、ブックマークレットを実行すると、Google AJAX Language APIが特定した言語と信頼度を警告ダイアログに表示する。

選択した文字列の言語を判定するブックマークレット

ブックマークレットの内容

javascript:(function() {
  // Google AJAX Language APIの読みこみ
  loadLanguage = function() {
    google.load('language', '1', {
      'callback': googleDetect
    });
  };
  // 言語を判定
  googleDetect = function() {
    google.language.detect(text, function(result) {
      if (result.language){
        for (var i in google.language.Languages) {
          var lang = result.language;
          if (result.language == google.language.Languages[i]) {
            lang = i;
            break;
          }
        }
        var percent = result.confidence < 0.01 ? result.confidence * 100 : Math.round(result.confidence * 100);
        alert('テキストの言語は、' + lang + 'です。\n判定の信頼度は、' + percent + '%です。');
      } else {
        alert('テキストの言語を判定できませんでした。');
      }
    })
  };

  var text = window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;
  if (! text){
    alert('文字列を選択してください');
    return;
  }
  if (text.length > 200){
    text = text.substring(0, 200);
  }
  // Google AJAX APIの読みこみ
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://www.google.com/jsapi?callback=loadLanguage';
    document.body.appendChild(script);
})();

google.language.detectは、文字列の言語を判定するメソッド。コールバック関数の引数に結果の入ったオブジェクトを返す。

google.language.detect(文字列, 関数)

返すオブジェクト
{
    status: {
        code: (ステータスコード)
    }
    language: (特定した言語)
    isReliable: (判定が信頼できるか表す真偽値、信頼できるなら true)
    confidence: (判定の信頼度を 0~1.0の数字で表す)
}
    

参考にしたページ

フォームにスタイルを適用

YouTube

OperaYouTubeを開いたら、上のようにページに白い四角が出てきて、画像が壊れたのかと思ったが、Operaの設定 > コンテンツ > スタイルオプション > 表示設定(または、サイトごとの設定 > 表示設定)の「フォームにスタイルを適用」を有効にしたら直った。

それだけのことなんだけど、YouTubeのロゴがボタン要素だとは思っていなかったので意表をつかれた。ボタン要素がボタン要素でなくても良さそうな所まで使われているかと思うと、検索のボタンは span要素なんだよな。

Google AJAX Language APIで翻訳する User JavaScript

googleajaxlanguageapi_translate.js

googleajaxlanguageapi_translate.js

Google AJAX Language APIを利用して翻訳する User JavaScriptを作ってみた。Operaのコンテキストメニューから User JavaScriptを実行して、Google AJAX Language APIから翻訳した文字列を受け取り、表示する。

Google AJAX Language API

Google AJAX Language APIで日本語に翻訳できそうな言語の種類は、Supported Language Translation Pairsあたりに書いてある。(日本語を含めて41言語あるが、ごく一部しか試していない。なんかどんどん増えているようだ。)

Google AJAX Language APIは、文字列の言語(翻訳元言語)を指定しなくても、言語を自動的に判別して、翻訳することができる。

Google AJAX Language APIは、RESTful形式が用意されている。RESTful形式の JSONPは、外部ライブラリーを読みこむより簡単に利用できる。

JSONPリクエスト URL
http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=(文字列)&langpair=(文字列の言語)%7C(翻訳先言語)&callback=(関数名)&context=(関数に渡される第一引数)

パラメータの「文字列の言語」(翻訳元の言語)を省略した時は、Google AJAX Language APIが文字列の言語を自動的に特定する。パラメータの「context」は、自分が設定した値をコールバック関数に渡すことができる。contextは省略可能。

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=let%20it%20be&langpair=%7Cja&callback=func
JSONPデータ
(関数名)({
    "responseData": {
        "translatedText":(翻訳した文字列),
        "detectedSourceLanguage":(特定した文字列の言語。文字列の言語を指定した時は存在しない。)
    },
     "responseDetails": (エラーメッセージ、成功は null),
     "responseStatus": (ステータスコード、成功は 200)
})
パラメータに contextをつけた例
http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=i%20am%20not%20good&langpair=%7Cja&callback=func&context=argument
JSONPデータ
(関数名)((contextの値),
{
    "translatedText":(翻訳した文字列)
    ,"detectedSourceLanguage":(特定した文字列の言語。文字列の言語の指定がない場合だけ。)
},
 (ステータスコード),
 (エラーメッセージ),
 200(?)
)

Google AJAX Language APIで翻訳する User JavaScript

選択した文字列を Google AJAX Language APIに送り、返ってきた指定した言語に翻訳した文字列を受け取り、表示する。

  1. 文字列が選択されていなければ、何もしないで終わり。
  2. Google AJAX Language APIから空のデータしか返ってこなければ、「翻訳に失敗しました」と表示して、終わり。
  3. Google AJAX Language APIからデータが返ってくれば、左上に表示する。
  4. マウスを動かすと、表示を消す。
operaオブジェクトの GoogleAJAXTranslateメソッド

opera.GoogleAJAXTranslate(翻訳先言語, 文字列の言語, 原文表示)

  • 第一引数の翻訳先言語を省略した時は日本語(ja)に設定する。
  • 第二引数の文字列の言語(翻訳元言語)を省略した時は、Google AJAX Language APIが文字列の言語を自動的に判別する。
  • 第三引数の原文表示を省略した時は、原文(元の文章)を表示しない。原文を表示したい時は、1を設定する。

Google AJAX Language APIに指定する言語のパラメータは Languages Enum に書いてある。すべての言語が翻訳できるわけではない。日本語に翻訳できそうな言語は、Supported Language Translation Pairsあたりに書いてある。

日本語に翻訳
opera.GoogleAJAXTranslate('ja')
英語から日本語に翻訳
opera.GoogleAJAXTranslate('ja', 'en')
日本語に翻訳、原文表示
opera.GoogleAJAXTranslate('ja', '', 1)
ダウンロード

googleajaxlanguageapi_translate.js

使い方

上のスクリプト(googleajaxlanguageapi_translate.js)をダウンロードして、User JavaScriptを保存するフォルダにコピーする。

Operaのメニューファイルの[Hotclick Popup Menu]に下のように書き足す。(Operaを再起動。)

Item, "Google AJAXで日本語に翻訳" = "Go to page, "javascript:opera.GoogleAJAXTranslate('ja')""
Item, "Google AJAXで英語に翻訳" = "Go to page, "javascript:opera.GoogleAJAXTranslate('en')""

Item, "Google AJAXで英語から日本語に翻訳" = "Go to page, "javascript:opera.GoogleAJAXTranslate('ja','en')""
Item, "Google AJAXで中国語から日本語に翻訳" = "Go to page, "javascript:opera.GoogleAJAXTranslate('ja','zh')""

Item, "Google AJAXで日本語に翻訳(原文表示)" = "Go to page, "javascript:opera.GoogleAJAXTranslate('ja','',1)""
Item, "Google AJAXで英語から日本語に翻訳(原文表示)" = "Go to page, "javascript:opera.GoogleAJAXTranslate('ja','en',1)""

翻訳したい文字列を選択して、Operaのコンテキストメニューから上に書いたものを選べば、User JavaScriptが呼び出されて、翻訳した結果が左上に表示される。表示されたものは、マウスを動かすと消える。

注意

翻訳の精度が低い...。

Google AJAX Language APIに送る文字数が長いとエラーになるから、送る文字数を 1000語までにした。それ以上選択していても、先頭から 1000語で切る。2バイト文字の場合は URIエンコードする必要があるため、それよりずっと短くしなければならない。URIエンコードした文字列を約 1900語以下にしている。そのため、元の文字数は 200と少ししか送れない。

参考にしたページ

Visual C++ 2008 Express Editionをインストールした

Visual C++ 2008 Express Edition with SP1

「日経ソフトウエア」の「本当にゼロから学ぶC/C++」を読んだら、ちょっと面白そうだったので、Visual C++ 2008 Express Edition with SP1をインストールしてみた。

  1. Visual Studio 2008 Express Edition の DVD イメージ(Visual Studio 2008 Express Edition with Service Pack 1 Combo DVD)をダウンロード。
  2. DVDを作るのが面倒だったので、Alcohol 52% Free Editionで 1.のイメージファイルをマウントした。
  3. CD/DVDドライブを自動再生しないように設定してあるから、マウントしてできた仮想ドライブを開き、Setup.htaを実行して、インストールした。

オフラインでインストールしたからちょっと手間がかかってるが、Web インストールなら 931.8MBもダウンロードしなくてすむし、ファイルをマウントする必要もない。

インストールされたファイル

(インストールオプションで「Microsoft SQL Server 2008 Express Edtion」は選択していない)

  • Microsoft Visual C++ 2008 Express Edition with SP1 - 日本語版
  • Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729
  • Microsoft Windows SDK for Visual Studio 2008 Headers and Libraries
  • Microsoft Windows SDK for Visual Studio 2008 SP1 Express Tools for Win32
  • Microsoft Windows SDK for Visual Studio 2008 SP1 Express Tools for .NET Framework - jpn
  • Microsoft SQL Server 2008 Management Objects
  • SQL Server System CLR Types

森信雄の日々入門詰将棋の CSS

  • 2009-04-25 (Sat)
  • css

森信雄の日々入門詰将棋

森信雄の日々入門詰将棋の CSSを書いてみた。ブログのタイトルは入門詰将棋となっているが、けっこう難しい。

右のカラムの固定幅を可変にした。将棋盤の間隔を広げて、中央に少し寄せた。

/* 右カラムの幅を可変 */
body > table {
    width: auto !important;
    background: #cceaff !important;
}
body > table > tbody > tr > td > table {
    width: auto !important;
    background-repeat: no-repeat !important;
    background-position: 50% !important
}
body > table > tbody > tr > td > table > tbody > tr > td:nth-child(2n) {
    width: 100% !important;
}
td.main_txt {
    background: #cceaff !important;
}
td.entry_title {
    background-image: none !important;
}

/* 将棋盤の間を広げる */
td.main_txt > object {
    display: block !important;
    margin: 2em auto 2em 25% !important;
}
td.main_txt > a {
    display: block !important;
    margin: 2em auto 4em 25% !important;
}

本当は解答の Flashの将棋盤を大きくしたかったが、拡大すると太い線が現れてしまう。

td.main_txt > object > embed { 
    width: 125% !important;
    height: 125% !important;
}

Flashの将棋盤

Home

おまかせリンク(R)
全記事表示リンク
Search
Meta
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。