Rails i18n 翻訳に変数を渡して展開したい

探し方が悪かったのか、取るに足らないことなのか、なかなか見つからなかったのでメモ。

定義の仕方

config/locales/ja.yml などの言語ファイルの文字列に、変数を渡して、展開して欲しいときの書き方。

# config/locales/ja.yml
ja:
  greet:
    morning: "おはよウナギ!%{name}さん"
    noon: "こんにちワン!%{name}さん"
    evening: "こんばんワニ!%{name}さん"
# usage
t "greet.morning", :name => "唯" # おはよウナギ!唯さん
t "greet.morning", :name => "澪" # こんにちワン!澪さん
t "greet.morning", :name => "律" # こんばんワニ!律さん

%{name} で定義して、ハッシュで渡せばよいです。

ただし、:default と :scope という名前はつかえませんので、それ以外で定義します。

:default は未定義の場合に返す文字列を指定し、:scope は 定義のネストを指定するのに使われるためです。

少し前のバージョンだと、{{name}} という定義だったようですが、%{name} というフォーマットに変わったそうです。Rails3.1 なら別に気にしなくていいです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする