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>
基本的には、「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
は不要です。