Tech Racho エンジニアの「?」を「!」に。
  • 開発

RailsのI18nの書き方を調べたのでまとめました

概要

I18nとは

I18n (国際化・多言語化を意味する internationalization を短縮したもの)


Ruby on Rails 4アプリケーションプログラミング(山田祥寛、技術評論社)、p502より

こちらの図の通り、

  1. クライアントからページ要求をサーバが受け取る
  2. コントローラで使用するロケール(言語)を決定する
  3. ロケールに合致する辞書ファイルを選択する
  4. ERBテンプレートに辞書ファイルの内容を反映した結果をクライアントに返す

という順番の処理になります。

パブリックI18n API

translate
訳文を参照します
localize
DateオブジェクトやTimeオブジェクトを現地のフォーマットに変換します

上のメソッドにはそれぞれ#t#lという別名メソッドがあります。
本記事ではtranslateメソッドのみ紹介します。

使い方

通常

辞書ファイルの定義方法

辞書ファイルはconfig/localesフォルダ配下には YAML 形式、 もしくは Ruby スクリプトで記述します。
通常はYAML形式です。
一番上の階層で言語の種類を指定します。
その配下で様々な単語の組み合わせをYAMLの階層構造で記述します。

config/locales/ja.yml

ja:
  hello: こんにちは
  greeting: こんにちは、%{name} さん
  helpers:
    submit:
      create: 登録する
      submit: 保存する
      update: 更新する

config/locales/en.yml

en:
  hello: Hello!
  greeting: Hello, %{name}!
  helpers:
    submit: 
      create: Create
      submit: Save
      update: Update

参照方法

irb> I18n.t(:hello) 
=> "こんにちは"
irb> I18n.t('helpers.submitcreate') 
=> "登録する"

式展開での参照方法

irb> I18n.t( :greeting, name: '太郎')
=> "こんにちは、太郎"

ActiveRecord

config/locales/ja.yml

ja:
  activerecord:
    models:
      administrator: 管理者
    attributes:
      administrator:
        email: メールアドレス

models:の定義をmodelからmodel_name.humanで参照します。
attributes:の定義をmodelからhuman_attribute_name(:attr)で参照します。

irb> Adnimistrator.model_name.human
=> "管理者"
irb> Administrator.human_attribute_name(:email)
=> "メールアドレス"

translateメソッドでフルパスを書くことで参照することもできます。

irb> I18n.t('activerecord.models.administrator')
=> "管理者"

参考文献

おたより発掘


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。