1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Ruby on Railsにおける国際化の簡単な紹介

2022-02-03 11:20:32

言語関連の設定や文字列は、ビュー、モデル、コントローラで使用しないでください。このテキストは、config/locales の下にある言語ファイルに移動させる必要があります。

ActiveRecordモデルのタグを翻訳する必要がある場合は、activerecordスコープを使用します。

en:
 activerecord:
  models:
   user: Member
  attributes:
   user:
    name: "Full name"



すると、User.model_name.humanは"Member"を、User.human_attribute_name("name")は"Full name"を返すことになります。これらの属性の翻訳は、ビューでタグとして使用されます。

ビューで使用するテキストとActiveRecordの属性の翻訳を分離する。モデルに使う言語ファイルをmodelsというフォルダに、ビューに使うテキストをviewsというフォルダに入れます。

    言語ファイルをディレクトリを追加して整理した場合は,そのディレクトリを読み込むように application.rb ファイルに記述してください.

  # config/application.rb
  config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*. {rb,yml}')]



日付や通貨フォーマットのような共有ローカライズオプションをロケールのルートに置く。

I18n メソッドを凝縮したものを使用する。I18n.translate の代わりに I18n.t を、 I18n.localize の代わりに I18n.l を使用してください。

ビューで使用されているテキストを照会するには、"lazy" を使用します。次のような構造があるとします。

en:
 users:
  show:
   title: "User details page"



users.show.titleの値は、app/views/users/show.html.hamlで次のように問い合わせることができます。

= t '.title'



コントローラとモデルには、:scope オプションを指定する代わりに、ドットで区切られたキーを使用します。ドットで区切られた呼び出しは、階層的に読みやすく、追跡しやすくなります。

# Called like this
I18n.t 'activerecord.errors.messages.record_invalid'

# Instead of this
I18n.t :record_invalid, :scope => [:activerecord, :errors, :messages]