Railsで I18を使って日本語化する方法 【Day 2/30 2nd】
こんにちは、たわらです。
本記事は、rails-i18というgemを利用して日本語対応する方法を整理します。
初期設定
まずは、初期設定として、config/application.rbのモジュールのなかに次のように記述する。
# アプリケーションが対応している言語のホワイトリスト
config.i18n.available_locales = %i[ja en]
# デフォルトの言語設定
config.i18n.default_locale = :ja
# 言語ファイル階層ごとに設定するための記述
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
# Please use `Rails.root.join('path/to')` instead.と言われたら、下記のようにする。
config.i18n.load_path += Dir[Rails.root.join('config/locales/**/*.{rb,yml}').to_s]
Rails.root.join('path/to')については次の記事がわかりやすい。
次に、基本的な翻訳ファイルが入っている i18n-railsをGemfileに記述する。
gem 'rails-i18n'
で、bundle installをする。
yamlを書く
ちなみにyamlとは、構造化されたデータを表現するためのフォーマットのこと。詳しくはこちら。
閑話休題。翻訳ファイルは、アプリケーションが大きくなるほどひとつのファイルで管理するのが難しくなります。だそうです。なので、、、
モデルとViewで翻訳ファイルをわけて作成しておく。こんな風に。
config/locales/views/ja.yml
config/locales/activerecord/ja.yml
viewに関する翻訳ファイル。lazy lookupで記述すること。呼び出す記述が楽になるので。
# config/locales/views/ja.yml
ja:
defaults: #すべてのコントローラーで使える
login: 'ログイン'
register: '登録'
logout: 'ログアウト'
users:
new:
title: 'ユーザー登録'
to_login_page: 'ログインページへ'
user_sessions:
new:
title: 'ログイン'
to_register_page: '登録ページへ'
password_forget: 'パスワードをお忘れの方はこちら'
modelに関する翻訳ファイル。
#config/locales/activerecord/ja.yml
# モデルは全て activerecord 以下に記述する。
# これにより、User.model_name.human / User.human_attribute_name({attr_name})で使用可能。
ja:
activerecord:
models:
user: 'ユーザー'
attributes:
user:
last_name: '姓'
first_name: '名'
email: 'メールアドレス'
password: 'パスワード'
password_confirmation: 'パスワード確認'
詳しくはこちらの記事を参照すること。
View側の記述
viewからは日本語が消えて、例えば、こんな風になる。
<h1><%= t '.title' %></h1>
<%= form_with url: login_path, local: true do |f|%>
<div class="form-group">
<%= f.label :email, User.human_attribute_name(:email) %>
<%= f.email_field :email, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :password, User.human_attribute_name(:password) %>
<%= f.password_field :password, class: "form-control" %>
<div class="actions">
<%= f.submit (t 'defaults.login'), class: 'btn btn-primary'%>
</div>
<% end %>
<div class='text-center'>
<%= link_to (t '.to_register_page'), new_user_path %>
</div>
<%= t '.title' %> とか User.human_attribute_name(:password)などのように記述すること。
くわしくは先のリンク記事を参照のこと。
最後に
親切にまとめてくれているかたのおかげで、学習が進みますね。
読んでくださったかた、ありがとうございます。
たわら
この記事が気に入ったらサポートをしてみませんか?