じぶんメモ

プログラミングのメモ、日常のメモとか。

Railsでi18nを使用して他言語化に対応する

i18nを使用して他言語化する方法を調べた。

デフォルトロケールの設定

config/application.rb内に、以下の1行を追記。

config.i18n.default_locale = :ja

ロケールの辞書の設定

config/locales/内に、各ロケールyamlファイルを作成。
日本語ならば、config/locales/ja.ymlを作成する。

ja:
  view:
    title: "タイトル"

以下のように使用する。

<h1><%= t('view.hello') %></h1> <!-- タイトル、と表示される。 -->

辞書ファイルのダウンロード

Githubに上がっているので、バリデーションのエラーメッセージとか、
日本語の文言に簡単に変換できる。 github.com

モデルの他言語化

# モデル名
ja:
  activerecord:
    models:
      product: 製品

# モデルの属性名
ja:
  activerecord:
    attributes:
      product:
        name: 名前

使う場合は以下のとおり。

# モデル名
t('activerecord.models.product')

# モデルの属性名
t('activerecord.attributes.product.name')

ただし、form_forとかでformにバインドしている場合は、
以下のように、属性名だけ指定すればOK。

<%= form_for @live_house do |f| %>
  <%= f.label :name %>

遅延参照(lazy lookup)

Railsのviewファイルのディレクトリ構造と翻訳ファイルの階層構造を合わせることで、
ラベル名を省略できる。

ja:
  live_houses:
    new:
      title: ライブハウスを登録する
<!-- live_houses/new -->
<!-- ".ラベル名"でアクセスできる。 -->
<h1><%= t(".title") %></h1>

以下の記事が参考になりました。

ruby-rails.hatenadiary.com