rails i18n メモ

翻訳のためのgem, config/locales/下のファイルを読み込んでviewに反映させる。

#config/application.rb
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config/locales/**/*.{rb,yml}').to_s]
#model用の訳文を書くディレクトリを作る
locale/appricationrecord/ja.yml

#view用の訳文を書くディレクトリを作る
locale/view/ja.yml
#locale/appricationrecord/ja.yml
 # モデルは全て activerecord 以下に記述する。
# これにより、User.model_name.human / User.human_attribute_name({attr_name})で使用可能。
ja:
 activerecord:
   models:
     # view側: User.model_name.human => "ユーザ" / t("activerecord.models.user")と同じ
     user: ユーザー 
# model毎に定義したいattributesを記述
   attributes:
       user:
         id: ID
         # view側: User.human_attribute_name :name => "名前" / t("activerecord.attributes.user.name")と同じ
         first_name: 名
         last_name: 姓
         email: メールアドレス
# 全てのmodelで共通して使用するattributesを定義
 attributes:
   created_at: 作成日
   updated_at: 更新日
#locale/view/ja.yml
# ビューはビューを格納しているフォルダ名を起点にし、ビュー名毎に記述する。
# インデント(2space)でpathを制御している
ja:
 users:
   new:
     title: 'ユーザー登録'
     registration: '登録'
     to_login_page: 'ログインページへ'
     password: 'パスワード'
     password_confirmation: 'パスワード確認' 
<h1><%= t 'users.new.title'  %></h1>
  <%= form_with(model: @user, local: true) do |f| %>
    <div class="form-group">
    <%= f.label :email, User.human_attribute_name(:email) %>
    <%= f.text_field :email %>
    </div>
    <div class="form-group">
    <%= f.label :password, (t 'users.new.password') %>
    <%= f.password_field :password %>
    </div>
    <%= f.submit (t 'users.new.registration') %>
<% end %>

メモ
Modelのオブジェクトに結びつかないformは自動で国際化対応されないためlabelに対してi18nの記載を追加する必要がある。Viewファイルが増えても参照する定義を1つにした方がメンテナンス性がよいためi18n対応をしておく。

この記事が気に入ったらサポートをしてみませんか?