i18n をちょこちょこ調べてみる

前回は動かすだけ動かして満足してしまったので、国際化について軽く補足。私が理解している範囲の話かつ、今後どんどん改良が進みそうな分野なので情報が陳腐化する可能性大。

デフォルトの言語設定

国際化の前に、デフォルトの言語設定は config/embironment.rb に記述します。51行目を確認して、以下のように変更すれば日本語に設定できます。他の言語の略称は知りません…

config.i18n.default_locale = 'ja'

国際化のしくみ

まずは仕組みから。基本的に値を yaml に保存しておいて、それを読み出す決めうち方式です。値が保存されるのが config/locales ディレクトリで、その中に言語設定を en.yml のように分けて置いておきます。
以下はデフォルトで作られている en.yml の中身。

# Sample localization file for English. Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.

en:
  hello: "Hello world"

見事に「こんにちは世界」だけが書かれていますが、これがすべてのスタート。

各種言語に対応した値の呼び出し

次に、設定した値を呼び出す方法。これはとても簡単で、ビューに以下のように記述するだけ。先ほどの hello でも呼び出してみましょう。

<%= t('hello') %>

yaml の方で値を階層構造にした場合は「.」で繋いで使います。

ja:
  magical_girl:
    nanoha: "なのはさん"
    feit: "フェイトそん"
<%= t('magical_girl.nanoha') %>

基本はこれだけ。

i18n_generators

各種エラーメッセージ等を一々手で書いていたら日が暮れてしまいます。そこで簡単にテンプレートを作ってくれるのが i18n_generators で、自動で翻訳ファイルを作ってくれます。
インストールは gem か script/plugin で。gem を使えば Windows でも git なしで入ります。なお、いずれの場合も gettext が必須なので gem からインストールして下さい。

gem install gettext
gem install amatsuda-i18n_generators -s http://gems.github.com
script/plugin install git://github.com/amatsuda/i18n_generators.git 

インストールが終わったら script/generate で翻訳ファイルが作れますが、先にデータベースのマイグレーションを済ませておかないとエラーになります。後でやり直しはできますが、一応注意して下さい。

script/generate i18n ja

これで各種メッセージ等を日本語化した ja.yml と、モデルに関する情報を記述した models_ja.yml が config/locales の中に作られます。
ここまで終われば、後は国際化を行う箇所をどんどん書き換えていけば終わり。後はその辺が自動化できれば、日本語化はとても簡単になりそうですね。