Railsアプリにi18nを使って、多言語の設定をしてみます。i18nは多言語の設定が簡単にできるgemです。
以前、Railsのアプリケーションに日本時間・日本語のデフォルト設定を行う設定の説明の際に少し紹介しました。
参考:Railsアプリケーションの日本時間・日本語の設定
i18nのgemをインストール
Gemファイルに下記を追記してbundle installします。
gem 'rails-i18n', '~> 5.1'
i18nの設定ファイルを呼び出す準備
config/application.rbの下記の記述がコメントアウトされている場合は、コメントアウトを外します。これによってconfig/locales配下の設定ファイルが読み込まれるようになります。
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
i18nの設定ファイル
localesフォルダ配下で、viewsフォルダと同じフォルダ構成でja.ymlファイルを作ります。
例えば、config/locales/views/users/ja.ymlには、views/users/配下で使う設定を記述します。
下記は、views/users/new.html.erb用の設定です。
config/locales/views/users/ja.yml
ja: users: new: first_name: "名" last_name: "姓" email: "メール" image: "プロフィール画像" password: "パスワード" password_confirmation: "パスワード確認" submit: "登録" login: "ログインはこちら" password_remind: "パスワードをお忘れの方はこちら" title: "登録"
こちらは、views/user_sessions/new.html.erb用の設定です。
config/locales/views/user_sessions/ja.yml
ja: user_sessions: new: email: "メール" password: "パスワード" password_confirmation: "パスワード確認" submit: "ログイン" password_remind: "パスワードをお忘れの方はこちら" registoration: "新規登録はこちら" title: "ログイン"
モデルの属性名の設定も行えます。
モデル名は、config/locales/model.ja.ymlに記述します。モデルは、activerecord > モデル > 属性という構成で記述します。
ja: activerecord: models: user: ユーザー attributes: user: id: ID first_name: 名 last_name: 姓 email: メールアドレス file: プロフィール画像 crypted_password: パスワード created_at: 作成日 updated_at: 更新日
Viewファイルで設定を呼び出す
下記は、ユーザー登録画面のviewファイルの例です。
model.ja.ymlの設定は、User.model_name.humanでモデル名、User.human_attribute_name(:属性名)で属性名が呼び出せます。
config/locales/views/users/ja.ymlの設定は、t ‘.設定した項目名’で呼び出せます。
下記を参考にしてみてください。
<h3 ><%= "#{User.model_name.human}#{t '.title'}" %></h3> <%= form_for @user do |f| %> <div class="form-group"> <%= f.label :last_name, :"#{t '.last_name'}" %> <%= f.text_field :last_name %> </div> <div class="form-group"> <%= f.label :first_name, :"#{t '.first_name'}" %> <%= f.text_field :first_name %> </div> <div class="form-group"> <%= f.label :email, :"#{t '.email'}" %> <%= f.text_field :email %> </div> <div class="form-group"> <%= f.label :image, :"#{t '.image'}" %> <%= f.file_field :image%> </div> <div class="form-group"> <%= f.label :password, :"#{t '.password'}" %> <%= f.password_field :password %> </div> <div class="form-group"> <%= f.label :password_confirmation, :"#{t '.password_confirmation'}" %> <%= f.password_field :password_confirmation %> </div> <%= f.submit :"#{t '.submit'}"%> <% end %>
ymlファイル内で引数を使いたい場合
ymlファイル内で引数を使って動的に文字を変更することができます。引数は下記のように記述します。
ja: users: new: name: %{name}
そして、呼び出す側で下記のように引数に何が入るかを定義します。
<%= t '.name', name: @user.name %>
ja.ymlを使って日本語の設定しかしませんでしたが、他の言語も設定しておくと、多言語管理が簡単にできるようになります。
参考:
Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。