3
6

More than 1 year has passed since last update.

【Rails】日本語化のやり方

Last updated at Posted at 2021-12-19

手順

①gem 'rails-i18n'をインストール
②デフォルトの言語を日本語に設定
③複数のロケールファイルが読み込まれるようpathを通す
④新しいファイルを作成

①gem 'rails-i18n'をインストール

#Gemfile
gem 'rails-i18n', '入れたいバージョン'
→ bundle install

②デフォルトの言語を日本語に設定

config/application.rbに
config.i18n.default_locale = :jaを追加。

class Application < Rails::Application

 #以下の記述を追記する
 #デフォルトのlocaleを日本語(:ja)にする
 config.i18n.default_locale = :ja

end

③複数のロケールファイルが読み込まれるようpathを通す

先程の②と同様にconfig/application.rbに
 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]を追加。

class Application < Rails::Application
 config.i18n.default_locale = :ja

# 以下の記述を追記する(設定必須)
 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

end

④新しいファイルを作成

config/localesに2つのファイルを作成。
activerecord/ja.yml → modelの日本語化対応のymlファイル
views/ja.yml → view,controllerの日本語対応のymlファイル

ja.yml内の書き方

activerecord/ja.yml
model全体に対応させるときはmodelsの階層を作り、
カラム名を対応させるときはattributesの階層を作って日本語化にする文字を記入。
※追記※
モデルの日本語を設定した場合、viewでわざわざコードを変更する必要は無い。(勝手に反映される)

ja:
  activerecord:
    models:
      user: 'ユーザー'
      board: '掲示板'
    attributes:
      user:
        email: 'メールアドレス'
        password: 'パスワード'
        password_confirmation: 'パスワード確認'
        last_name: '姓'
        first_name: '名'

views/ja.yml
以下の書き方でapp/views/users/new.html.erbビューテンプレート内部でnew.index.title値にアクセスできる。

ja:
  users:
    new:
      title: 'ユーザー登録'
      to_login_page: 'ログインページへ'

ビューファイル内での書き方

<%= t '.title' %>  または  <%= t ('.title') %>
省略せずに書くと → <%= t 'posts.index.title' %>

記入例

<h1>ログイン</h1> → <h1><%= t '.title' %></h1>

<%= f.submit '登録', class: 'btn btn-primary' %> 
→ <%= f.submit (t 'defaults.register'), class: 'btn btn-primary' %>

※form_withの場合は注意※

<%= form_with model: @user, local: true do |f| %>
  <%= f.label :name, t('activerecord.attributes.user.name') %>
  <%= f.email_field :name %>

上記のようなform_with文があった場合、ビューファイル内での書き方によるとt('activerecord.attributes.user.name')になるが、
form_withはmodel: @userという記述から「これはユーザーに関するフォームである」と認識してくれるので、以下の書き方でOK。

<%= form_with model: @user, local: true do |f| %>
  <%= f.label :name%>
  <%= f.email_field :name %>

参考記事

[初学者]Railsのi18nによる日本語化対応
[Rails]日本語対応のためのGem 'rails-i18n'の使い方

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6