I18n.tの使い方

国際化対応として言葉を各言語の翻訳して表示したりするためにRailsではI18n.tを使う。

1.言語ごとの辞書ファイルを作成
翻訳したい言語の数だけ辞書ファイルを用意する(ja.yml、en.yml…)

2.ロケールに応じて辞書ファイルを参照
I18n.tを使って作成しておいた辞書ファイルを参照する。ロケールはHTTPヘッダ等で適当に判断する。

■早速Railsで使ってみる
application.rb

デフォルトロケールを:jaに設定したので
config/locals/ja.ymlを作成する

I18n.tメソッドを実行

ja以下の定義を参照できることがわかる。

次に、デフォルトロケールを変更してみる
application.rbを以下のように修正

なるほど。デフォルトに:enを指定すると、en.ymlを探しに行く模様。
まだ:en用の定義ファイルは作成していないので、エラーとなっている。
(例外等にエラーは吐かず、”translation missing: en.test”文字列を返す)

config/locales/en.ymlを作成して、再度I18n.t(“test”)を実行してみる。

現状のロケールを取得
現状のロケール設定はI18n.localeで取得できる

デフォルトで設定している:enになっている。

変更するには

とすると切り替わる

testにアクセスするとjaの定義にアクセスできる。

あらかじめymlの形式で翻訳したい言語用のマスタを作成しておいて、リクエストに応じて(ロケールに応じて)、参照先を変更すれば良さそう。

まとめると、
・辞書ファイルを用意しておく
・リクエストよりロケールを取得し、I18n.locale=()でロケール設定することでロケールごとにアプリ内の文言等を出し分けることができる

番外編
■もう少し、I18n.tメソッドを見ていく

変数を埋め込むこともできるようだ

ネストして定義する場合

“.”でつなげてアクセスできる。

このようにscopeを使って参照することもできる

ネストの途中を指定すると、ハッシュでの取得となる

■Railsのモデルで使ってみる
この仕組はモデルの翻訳でもよく使用される。

Planモデルがあるとして
Planモデルを翻訳する場合

こうすると、今まで見てきたような以下のアクセス方法に加えて

human_attribute_nameメソッドでもアクセスすることも可能になる。

モデルを翻訳する場合はこちらを使ったほうがわかりやすそう。

■バリデーションのエラーメッセージを翻訳する
モデルのバリデーションエラー時に生成されるエラーメッセージも翻訳できる。

以下のようなモデルがあるとする

presenceは必須チェックを行い、エラーが発生した場合のキーはデフォルトで:blankとなる。

属性名やキーを予め以下のように定義しておくと、:name は「プラン名」、blankは「は必須です」と翻訳してくれる。

キーについては、以下の優先順位に従って定義を探していき、最初に見つかった値を取得する。
上の定義は、一番上の定義なので、優先順位は一番強いということになる。

activerecord.errors.models.user.attributes.name.blank
activerecord.errors.models.user.blank
activerecord.errors.messages.blank
errors.attributes.name.blank
errors.messages.blank

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

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

フォローする

スポンサーリンク
スポンサーリンク