Ruby の国際化
Version 1.9 で多言語化が行われた Ruby ですが、 メッセージの切り替えの国際化 に関しては言語の機能として持っていませんし、標準で添付されるようなライブラリもありません。
また、 ruby のライブラリが集まっている RAA をみても GetText のラッパーはあるのですが、 クロスプラットホームで動作しませんし、私は GetText はリソースの分離ができないため、あまりいい国際化ライブラリではない と思っています。
しかし、 RoR に関しては、標準の国際化ライブラリがあります。
Rails も昔は GetText を使っていたのですが、最近は i18n というリソースの分離もできる pure ruby な国際化ライブラリがあり、 Rails アプリは簡単に国際化できるようになっています。
Rails の国際化のやり方は メッセージファイルとして YAML を使い、そこで定義したキーから、メッセージを取得するという方式です。
きちんと国際化できて、非常に助かるのですが、不満な点も若干あります。
- メッセージファイルが見つからない場合に英語メッセージで表示されない
- 翻訳できませんという英語のメッセージが代わりに入る
- ファイル名に言語名(ja など)をつけているのに、 yaml ファイル内でも言語名を指定する必要がある
- とりあえず、英語のメッセージを表示しようと en.yml を ja.yml としてコピーした後、ファイルの中も修正しないといけない
- ライブラリというよりも Rails の問題かもしれませんが、メッセージファイルが UTF-8 しか使用できない。
- Ruby がせっかく多言語化していても、 UTF-8 で文字コードを統一していると結局、漢字の区別ができない
i18n は Rails 用なので、通常の Ruby アプリでは使用することが出来ません。
i18n のような Ruby でも使える国際化ライブラリはないかなと思っていたら、 R18n というものがありました。
R18n はキーに対応するメッセージがあるかチェックするメソッドもあるみたいですし、メッセージファイルがなければ英語を表示するというように出来そうです。また、まだ細かく見ていませんが、 i18n の残りの 2 つの点も回避できそうな気がします。
まだ、デフォルトで日本語をサポートしていないという問題がありますが、 これから Ruby アプリを作るときはこのライブラリを試してみようかなと思います。
- 関連記事
-
- C++ 国際化
- 国際化 - Unicode と文字列クラス
- 文字コードの変換ライブラリ
- Ruby の国際化
Facebook コメント
コメント