Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What is going on with this article?
@tmiyamon

ネストしたモデルでhuman_attribute_nameを使う

More than 5 years have passed since last update.

モデルでの多言語対応

Railsのモデルでは、規則に沿った定義になっていればhuman_attribute_nameで多言語対応できる。
例えば、

ja.yml
ja:
  activerecord:
    attributes:
      user:
        name: 名前

だとすると


User.human_attribute_name :name
=> "名前"

app/models/以下に直接配置してあるような通常のモデルだとこれでOKだが、更にネストするようなモデルだと一工夫必要になる

ネストしたモデル

ActiveRecordの場合

例えば以下のような形であったとすると、

app/models/i18n_sample/a.rb

module I18nSample
  class A < ActiveRecord::Base
  end
end

localeファイルの構成は以下になる

ja:
  activerecord:
    attributes:
      i18n_sample/a:
        name: 名前A

結果は

I18nSample::A.human_attribute_name :name
=> "名前A"

モデル名に当たるキーは


I18nSample::A.model_name.i18n_key
=> :"i18n_sample/a"

で取得できるみたい

ActiveModelの場合

Rails4からはDBに保存しないモデルであってもActiveModelをincludeすることでValidation等の機能を追加することができる。
直接使用する機会が増えたような気がするActiveModelでも同じように対応するが、(あたりまえだけど)activerecordをactivemodelに変更しないと動かないのがハマりポイントだった。

module I18nSample
  class B
    include ActiveModel::Model
  end
end

だったとすると、

ja:
  activemodel:
    attributes:
      i18n_sample/b:
        name: 名前B
I18nSample::B.human_attribute_name :name
=> "名前B"

まとめ


ja:
  activemodel:
    attributes:
      i18n_sample/b:
        name: 名前B
  activerecord:
    attributes:
      user:
        name: 名前
      i18n_sample/a:
        name: 名前A

参考

ちなみにMongoIdとかでも同じように対応できるらしい(未確認)
http://apidock.com/rails/ActiveModel/Translation/human_attribute_name

46
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tmiyamon
A awesome software engineer.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
46
Help us understand the problem. What is going on with this article?