apprication.rbの設定
日本メインで、英語でも読めるようにする設定
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
config.i18n.available_locales = [:ja, :en]
config.time_zone = 'Tokyo'
ActiveRecordの日本語化用テンプレート
ja:
activerecord:
errors:
template:
header:
one: "%{model}にエラーが発生しました。"
other: "%{model}に%{count}つのエラーが発生しました。"
body: "次の項目を確認してください。"
messages:
taken: "はすでに存在します。"
record_invalid: "バリデーションに失敗しました。 %{errors}"
full_messages:
format: "[%{attribute}]%{message}"
models:
user:
attributes:
base:
restricted: "制限付きユーザーには許可されていない動作です"
company_id:
user_not_working_for: "ユーザが所属していない会社です"
models:
user: ユーザー
company: 会社
attributes:
user:
name: 名前
age: 年齢
company:
name: 会社名
attribute_values
#...
enum
#...
解説
config.i18n.load_path
の設定でconfig/locales以下のどの階層のディレクトリも読み込ませるようにしておくのがミソ。
こうすることで、ディレクトリを分けることでカテゴリごとにi18nのデータを管理することができる様になる。
各言語用ymlファイルは、01_model
というように数値のprefixをつけたディレクトリに入れ、以下の様な構成にする。
- config/locales/00_base/ja.yml
- config/locales/01_model/ja.yml
- config/locales/02_mailer/ja.yml
- config/locales/99_adhoc/ja.yml
YAMLは同じキーがあった場合は内容を上書きするので、00などをつけて順番を選べるようにしておくと都合が良い。
辞書順に上から読み込まれて行くので、内容がコンフリクトした場合は数値が大きいほうの設定が使われる様になる。
ちなみに、00_base/ja.ymlはrails-i18nのデータを丸コピーしたものを使う、もしくはgem install
する。
( https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml )
enの設定もする際は、完全にja.ymlと1対1対応するようにconfig/locales/01_model/en.yml
を記述しておいたほうが無難。これは(i18n-spec)[https://github.com/tigrish/i18n-spec]でテストを書くことで保証できる。
実際、英語の場合、Localeファイルをちゃんと設定しなくてもモデル名や属性名そのままでいいみたいなことが多いので、特に設定しなくてもあまり困らない。しかし、
- 後々メンテナンスする時、各言語でキーが同じ順、同じ行数でないとミスが起こりやすくなる。
- i18n-jsなどを使ってJavascript連携するとき、en.ymlに対応する英語が無いとうまくいかない。
といった理由で、少々手間でも、はじめから全てを書いておくことを推奨する。