ルビ翻訳

タイトルで分かる方は分かるかもしれませんが、いわゆるルビ翻訳をするものを書きました。

img

ずるっこ! などがイメージとしてかなり近いサービスで、 これをローカルに辞書を持ってどこでも翻訳をかけられるGreasemonkeyを書きました。

類似するジャンルのものだと以下のようなのがありますが、使いどころが違ったり動いてなかったりするので作りました。

en-ja-ruby-translator

インストール方法ですが、辞書にGENE95 辞書を使っているのでそのままで使える状態では配布してないです。

ライセンスがイマイチ分からないのですが、再配布するには許可が必要そうで(同梱だと再配布になるので)、作者(Kurumi さん)への連絡手段がないので含めてない感じです。(詳しい人の見解が聞きたい)

git clone https://github.com/azu/en-ja-ruby-translator.git
cd en-ja-ruby-translator
make install

dist/en-ja-ruby-translator.user.jsに辞書入りのGreasemonkeyができるのでこれでインストールできます。

やってることとしてはGENE95 辞書から辞書をダウンロードして、辞書ファイルをdata/gene95/gene.txtにUTF-8にエンコードして置いて、node tools/dict-to-json.jsすれば辞書のJSON版が作れるので、これをビルドして使ってます。

使い方

翻訳したい場所を Alt + クリック(選択範囲)を作れば、その周辺を翻訳してくれます。

gif

元の文章とルビが一緒だと見にくいので、安直にちょっと文字サイズを大きくしてます。

仕組み

文章を単語で区切って、辞書とマッチするかを何百も繰り返して、<ruby>タグにDOMを書き換えるだけです。

Firefoxは<ruby>対応してないですが、以下のCSSをベースにそれっぽく表示してます。

数年前に英辞郎のSQLite辞書を作って同じような事をやった時は遅すぎてダメだったので、辞書をメモリにまるごと載せてしまったほうがいいかなと思って雑にGreasemonkeyで実装した感じです。

結構適当に実装したけど、思ったより普通に動いてて面白い。

拡張機能として実装しても結局<ruby>の書き換えでContent Contextで動かす必要があるので、コンセプトを実証する感じでGreasemonkeyを選んだだけです。

chromeとcontext

モジュール化して書いてるのでindex.js以外はGreasemonkeyに依存してない感じです。(なので他への移植とかはまあ出来る気がする)

TODO

  • イラない訳をクリックとかで消したい
  • 熟語対応したい(今は熟語は辞書自体から消してるので1MBぐらいになってる)

今はスペースとかで文章を区切って、そこで単語のマッチをして和訳を出してるので熟語対応するには仕組み自体変える必要がありそうでやってない(いいアイデア欲しい)