March 24, 2008
先日リリースした英日、日英翻訳のブックマークWidgetを「Google AJAX Language API」を使ったバージョンにアップデートしました!
今まで使っていた物は翻訳が今ひとつ過ぎるなぁと思っていましたが、試した限りでは翻訳品質の改善も期待できそうです。
使い方:
その1.僕の作ったものまとめページのエントリー「ブラウザにオーバーレイするブックマークレットWidget各種」にある「3.選択文字を自動翻訳」のをブラウザのブックマークツールバーなどに登録しておく。
その2.Web上の翻訳したい文章をマウスドラッグで選択してブックマークレットを起動すると翻訳開始。
もし選択範囲の文章に80%以上アルファベットが入ってたら英文とみなして英語から日本語に変換します。それ以下だったら日本語から英語に変換します。
その3.ウインドウが開きっぱなしになるので、他の文章を選択すれば5秒ごとに翻訳処理を行います。気になる単語はマウスでダブルクリックすれば選択されるので、調べながら読むと良いと思います。
その4.翻訳元のテキストエリアに直接文字を入力して「翻訳」ボタンを押すことで直接、翻訳処理も可能です。(ちょっとこの辺のUIが微妙だと思ってる)
今日一日、この機能を提供するウインドウ処理のJavaScriptをcodereposに公開するためにソースコードの構成を全部見直しました。「モバツイッターにpostするブックマークレット」以外のブックマークレットは全て新しいコードで更新されています。
ブラウザにオーバーレイするブックマークレットWidget各種
↑から最新版が取得できます。以降、この構成を元に作業を進めていきます。
今までのbookmarkletは、実は配布ドメインが全然違うのですが、様子を見て止めるかもしれません
Google AJAX Language APIは、document.writeで翻訳機能読み込みのscript要素コードを出力するようにできており、ブックマークレットには必須の遅延ロードができないようなので、なんだかいろいろ苦労しちゃいました。
途中、iframeの先にあるhtmlに翻訳機能だけ読ませて、関数経由でデータだけアクセスできるぜーと思って組んで一旦リリースしてみたら、クロスドメイン制約にひっかかって違うサイトでは動きませんでした。予見不足でした。Operaに至っては同じドメインでもパスが違ってたらダメみたい。
ということでアウトプットするUIそのものをiframeにして、iframeのsrcを都度切り替えるようにして、翻訳元テキストをquerystringで渡しています。そのため、ひょっとしたらめっちゃ長い文章は渡すことができないかもしれません。
今日中に終わるようにあわててやったので疲れました・・・。
ブックマークレットで任意のサイトにブックマークレットでユーザーインターフェースを読み込んで来るというのは結構面白いアイディアだと1人で思っています。
何故かというと、まずは何より、
1.ブックマークレットを通じて、別ウインドウを開くことなく、外のサイトへのトンネルが作れる。
(たとえばこの翻訳機能では、今見ているWebページの内容を、iframeを通じてgoogleの翻訳apiと通信している)
実装如何でセキュリティ違反にひっかかるのは、それが微妙な行為だからでしょう。便利と安全は相反する部分があります。その間を狙いたい。
そして、
2.ブックマークレットはローカルでもイントラでも動く
iPhone SDKのローカルにインストールされるドキュメントは専用のビューワーから、なんとブラウザで開けるですね。そこから翻訳できます。それがローカルか否かは知りませんが、URLだけ投げる翻訳サイトがあったとしたらローカルにあるHTMLを翻訳することができませんね。
3.便利な機能を串刺し的に追加することができる。
「そのページのはてブコメントと、なんとかとなんとかの評判をタブで切り替えて閲覧できます」とか。はてブコメント以外、今のところ興味ないので僕は作りませんが。
他にもチャットとかコラボレーション的なのってどうなのかなぁ。twitterにポストする奴も、もっと面白くできるような気がする。
アイディアとかける時間でもっといろんなことができると思っています。もし興味を持った人がいましたら、この機能を構成しているPIWindow(Pluggable Inline window)のソースコードを公開しています。
拙いソースコードで恐縮ですが、プラグインのスクリプトを書けば、最低限の処理だけで簡単に機能が増やせるので、是非、codereposからソースコードを取得して遊んでみてください。
その辺の情報も以下に書いてあります。
ブラウザにオーバーレイするブックマークレットWidget各種