LoginSignup
62
43

More than 5 years have passed since last update.

Rails Module::Class の要素に対する i18n の書き方

Last updated at Posted at 2014-09-05

ハマったのでメモ。

前提:クラスのメンバ変数に対する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"

とすることで出力させることが出来ます。

62
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
43