ハマったのでメモ。
##前提:クラスのメンバ変数に対するi18n化
app/models/hoge.rb
class Hoge
include ActiveModel::Model
attr_accessor :miko
...
end
というようなクラスがあり、@miko
に対する日本語名を与える場合には、
config/locales/models/ja.yml
ja:
activemodel:
models:
hoge: ほげ
attributes:
hoge:
miko: 巫女さん
とすれば良いのは周知の通りです。
##モジュールクラスのメンバ変数に対するi18n化
app/models/hoge.rb
module Hoge
class Piyo
include ActiveModel::Model
attr_accessor :miko
...
end
end
ではこういうモジュールがあった場合、@miko
に対する日本語名を与えるにはどうすれば良いのでしょうか。
config/locales/models/ja.yml
ja:
activemodel:
models:
hoge:
piyo: ぴよ
attributes:
hoge:
piyo:
miko: 巫女さん
上記のように yaml で階層構造を表現する書き方ではうまくいきません。
正しくは、
config/locales/models/ja.yml
ja:
activemodel:
models:
hoge/piyo: ぴよ
attributes:
hoge/piyo:
miko: 巫女さん
このように、キーをスラッシュ区切りにすることで実現出来ます。
##キーを知るための方法
上記のような特定の ActiveModel クラスへのキーを調べるには ActiveModel::Naming を使います。
app/models/hoge.rb
module Hoge
class Piyo
include ActiveModel::Model
extend ActiveModel::Naming # <-- クラスメソッドとして追加
attr_accessor :miko
...
end
end
これで各メソッドを呼び出してあげましょう。
i18n のためのキーが知りたければ、コンソールから、
rails c
Hoge::Piyo.model_name.i18n_key
=> :"hoge/piyo"
とすることで出力させることが出来ます。