概要
I18nとは
I18n (国際化・多言語化を意味する internationalization を短縮したもの)
こちらの図の通り、
- クライアントからページ要求をサーバが受け取る
- コントローラで使用するロケール(言語)を決定する
- ロケールに合致する辞書ファイルを選択する
- ERBテンプレートに辞書ファイルの内容を反映した結果をクライアントに返す
という順番の処理になります。
パブリックI18n API
上のメソッドにはそれぞれ#t
と#l
という別名メソッドがあります。
本記事ではtranslate
メソッドのみ紹介します。
使い方
通常
辞書ファイルの定義方法
辞書ファイルはconfig/localesフォルダ配下には YAML 形式、 もしくは Ruby スクリプトで記述します。
通常はYAML形式です。
一番上の階層で言語の種類を指定します。
その配下で様々な単語の組み合わせをYAMLの階層構造で記述します。
config/locales/ja.yml
ja:
hello: こんにちは
greeting: こんにちは、%{name} さん
helpers:
submit:
create: 登録する
submit: 保存する
update: 更新する
config/locales/en.yml
en:
hello: Hello!
greeting: Hello, %{name}!
helpers:
submit:
create: Create
submit: Save
update: Update
参照方法
irb> I18n.t(:hello)
=> "こんにちは"
irb> I18n.t('helpers.submitcreate')
=> "登録する"
式展開での参照方法
irb> I18n.t( :greeting, name: '太郎')
=> "こんにちは、太郎"
ActiveRecord
config/locales/ja.yml
ja:
activerecord:
models:
administrator: 管理者
attributes:
administrator:
email: メールアドレス
models:
の定義をmodelからmodel_name.human
で参照します。
attributes:
の定義をmodelからhuman_attribute_name(:attr)
で参照します。
irb> Adnimistrator.model_name.human
=> "管理者"
irb> Administrator.human_attribute_name(:email)
=> "メールアドレス"
translate
メソッドでフルパスを書くことで参照することもできます。
irb> I18n.t('activerecord.models.administrator')
=> "管理者"
参考文献
- Rails 国際化 (i18n) API - Rails ガイド
- rails での config/locales 配下の扱い - Qiita
- Ruby on Rails 4アプリケーションプログラミング(山田祥寛、技術評論社)
おたより発掘
実務でlocales/xx.ymlに全訳なんて書けないのでlocales/sub/xx.ymlみたいに階層化するのが吉。
階層切ってもI18n.tに渡す文字列で参照できます。RailsのI18nの書き方を調べたのでまとめました https://t.co/tXjBSmeFh7
— Jaga Apple (@jagaapple_tech) September 26, 2019