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対応をしておく。
この記事が気に入ったらサポートをしてみませんか?