railsにi18nを導入して日本語化対応にする

はじめに

rails-i18nというgemを導入してアプリケーションを日本語対応にする方法について

i18nを導入する方法

まずはGemをインストールします。

gem 'rails-i18n'
$ bundle install

このGemをインストールすることで、エラーメッセージや一般的な言葉などに関しては、日本語化をしてくれるようになります。

※詳しくは下記のgithubを参照してください

rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub

続いて下記の設定をします。

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

この記述をすることで、読み込む対象のファイルを増やすことができるようになります。

locale/ja.yml以外に例えば、モデルの内容に関する定義ファイルlocale/appricationrecord/ja.yml

ビューの内容に関する定義ファイルlocale/view/ja.ymlなど、他言語化の定義ファイルを分けて設定できます。

翻訳を反映させる

locale/ja.yml以外で定義したファイルを参照する方法について説明します。

例えば、モデルの内容のみに関する定義ファイルlocales/activerecord/ja.ymlと、

ビューに関する定義ファイルlocales/view/ja.ymlがある場合は下記のようになります。

 ja:
   activerecord:
     models:
       user: 'ユーザー'
       board: '掲示板'
     attributes:
       user:
         email: 'メールアドレス'
         password: 'パスワード'
         password_confirmation: 'パスワード確認'
         last_name: '姓'
         first_name: '名'
 ja:
   defaults:
     login: 'ログイン'
     register: '登録'
     logout: 'ログアウト'
   user_sessions:
     new:
       title: 'ログイン'
       to_register_page: '登録ページへ'
       password_forget: 'パスワードをお忘れの方はこちら'
<div class="container">
   <div class="row">
     <div class=" col-md-10 offset-md-1 col-lg-8 offset-lg-2">
       <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.text_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>
         <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 %>
         <a href="#"><%= t '.password_forget' %></a>
       </div>
     </div>
   </div>

f:id:study-output:20210430032032p:plain

基本的には、「t '参照したいキー'」という風にすることで翻訳されます。

上記の場合だと「t 'defaults.login」は「ログイン」になります。

また、「t '.title' 」のように省略することもできます。

これはuser_sessionsコントローラのnewアクションのところにtitleを定義しているため省略できます。

モデルのラベルを日本語化したい場合、Model.human_attribute_nameを使います。

上記の場合だと、「User.human_attribute_name(:email)」は「メールアドレス」になります。

ちなみにform_withでモデルが渡されている場合は、Model.human_attribute_nameは不要です。