i18nによる日本語化対応
こんにちは、りゅうじです。
i18n
を使って view
や conrtoller
に直接文字を入力する事なく日本語表示させる方法を書いていきます。
手順
- デフォルトの言語を日本語に設定する
gem 'rails-i18n'
をインストール- 複数のロケールファイルに読み込まれる様に
path
を通す config/locales
以下にロケールファイルを配置ja.yml
に日本語を設定する- 設定した日本語を表示させる
- 様々な記述方法
一つ一つまとめていきます。
1.デフォルトの言語を日本語に設定する
#config/application.rb
#略
Bundler.require(*Rails.groups)
module RunteqNormal
class Application < Rails::Application
config.i18n.default_locale = :ja #追記
end
end
config.i18n.default_locale = :ja
を追記します。
2. gem 'rails-i18n'
をインストール
Gemfile
に追加
#Gemfile
gem 'rails-i18n'
ターミナルで
#ターミナル
$ bundle install --path vendor/bundle
3.複数のロケールファイルに読み込まれる様に path
を通す
#config/application.rb
#略
Bundler.require(*Rails.groups)
module RunteqNormal
class Application < Rails::Application
#略
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]#追記
end
end
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
こちらを追記する事で複数のロケールファイルが読み込める様になります。
また、この設定の変更を反映させるには、サーバーを再起動させる必要があります。
app
以下のコードや config/routes.rb
などのファイルは再起動しなくても反映されますが、他のファイルは基本的にはサーバーを起動し直す必要があると覚えておいてください。
4.config/locales
以下にロケールファイルを配置
activerecord
はモデル用
views
はビュー用
5. ja.yml
に日本語を設定する
記述する際のポイント
lazy lookup記法
を使用していること
ビューだけでなくコントローラーでも使えるため
https://railsguides.jp/i18n.html#探索の「遅延」(lazy-lookup)
i18nの定義はアンダースコアを用いた snake_case
であること。
snake_case
とは
小文字で書いて、アンダースコアでつなげる事。
モデルの日本語化を設定する
#config/locals/activerecord.ja.yml
ja:
activerecord:
models:
user: 'ユーザー'
board: '掲示板'
comment: 'コメント'
attributes:
user:
last_name: '姓'
first_name: '名'
email: 'メールアドレス'
password: 'パスワード'
password_confirmation: 'パスワード確認'
avatar: 'アバター'
role: '権限'
そしてここの
attributes:
user:
last_name: '姓'
first_name: '名'
email: 'メールアドレス'
password: 'パスワード'
password_confirmation: 'パスワード確認'
この記載でモデルに紐づく場合の form_with model: ~
の中も日本語化できてとても便利です。
※ user_settions
などのモデルを持たないビューでの form_with
ではlavelに対して記述する必要があります。
ビューの日本語化を設定する
#config/locales/views.ja.yml
ja:
defaults: #すべてのコントローラーで使える
login: 'ログイン'
register: '登録'
logout: 'ログアウト'
users:
new:
title: 'ユーザー登録'
last_name: '姓'
first_name: '名'
email: 'メールアドレス'
create:
success: 'ユーザー登録が完了しました'
fail: 'ユーザー登録に失敗しました'
この様に実際の階層と同様に書きます。
6.設定した日本語を表示させる
わかりやすい様に簡易的に書きます。
モデルで使う場合
#config/locals/activerecord.ja.yml
ja:
activerecord:
models:
user: ユーザ
attributes:
user:
name: 名前
これを表示させる
<%= User.model_name.human #=> "ユーザ" %>
<%= User.human_attribute_name(:name) #=> "名前" %>
ビューで使う場合
#config/locales/views.ja.yml
ja:
defaults: #すべてのコントローラーで使える
login: 'ログイン'
register: '登録'
logout: 'ログアウト'
users:
new:
title: 'ユーザー登録'
last_name: '姓'
first_name: '名'
email: 'メールアドレス'
対応するビューの中ではツリーを省略できる。 「ユーザ登録」が表示される 「users.new.html.erb」に記述されているので
#config/locales/views.ja.yml
users:
new:
部分を自動的に読み込んでいるから省略できる
省略した場合
<%= t('.title') %>
省略しない場合
<%= t('users.new.title') %>
どちらでも表示できます。
最後に
読んで頂いた方、ありがとうございました。