国際化ツール 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ファイルをコーディングしている途中で動作確認のためブラウザを開くと、僕の場合は正常に表示されずエラーが出てしまいました。