プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

国際化ツール i18nを導入してみた

i18nは、railsの中に自動で組み込まれている国際化ツール(翻訳ツール)です。 今回は、ログインフォームと新規登録フォームに導入してみました。



・初期設定を行う

Config/application.rbの中で以下の記述をする。

# デフォルトの言語設定
config.i18n.default_locale = :ja

# locale/ja.yml以外のファイルも読み込むようにする設定
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

・こうすることでconfig/localesの中のymlファイルをviewに適用することができる。

Localesの中にはそのままymlファイルは作らず、model用とview用で別にする

Config/locales/activerecord/ja.yml
Config/locales/views/ja.yml

Config/locales/activerecord/ja.yml内

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

・上のようにすることで、新規登録画面ではform_withヘルパーの中のmodel: @userコードにより、自動的に翻訳が適用されるようになる。

・しかし、ログインフォームでは参照するmodelがないため、自動で翻訳ができない。そのため明示的にコードを渡す必要がある。

<%= f.label :email  %>                    #適用前
<%= f.label :email, User.human_attribute_name(:email) %>  #適用後

・また、views用のymlファイルを作る時は中身をlazy lookupにする。 lazy lookupとは、翻訳ファイルja.ymlの中身を「controllerやviewファイルのディレクトリの階層」と同じにすることで、controllerやviewファイルの内部で参照するキーを短縮してアクセスする事が出来る仕組みのこと。

Config/locales/views/ja.yml内

ja:
 button: 
   login: 'ログイン'
   signup: '登録'
   logout: 'ログアウト'
 users:  
   new:    
     title: 'ユーザー登録'
     to_login_page: 'ログインページへ'
 user_sessions:
   new:
     title: 'ログイン'
     to_signup_page: '登録ページへ'
     forget_password: 'パスワードをお忘れの方はこちら'

・view内でのコードの適用方法はこのようにする

user_sessions/new.html.erb内

<h1>ログイン</h1>       #適用前
<h1><%= t '.title' %></h1>   #適用後

<%= link_to “登録ページへ”, new_user_path %>     #適用前
<%= link_to (t '.to_signup_page'), new_user_path %>   #適用後

<a href="#">パスワードをお忘れの方はこちら</a>        #適用前
<a href="#"><%= t '.forget_password' %></a>      #適用後

<%= f.submit “ログイン”, class: "btn btn-primary" %>      #適用前
<%= f.submit (t ‘button.login'), class: "btn btn-primary" %>      #適用後



・全てしっかり記述した後、サーバーを再起動すればエラーが出ずに正常に表示されます。 ※ymlファイルをコーディングしている途中で動作確認のためブラウザを開くと、僕の場合は正常に表示されずエラーが出てしまいました。