Railsで多言語対応にする方法
概要
Railsで多言語化したいという事があり、その時に行った事をここにまとめておきます。
環境
- Rails 5.1
方法
古いWeb記事に書かれている情報を参考にすると、うまく動かない事があります。
これは、Rails 5で仕様が変わったためです。
Railsで多言語対応にする場合、i18nというgemを使います。通常このgemはRailsのインストールの時にインストールされているので、インストールする必要はありません。ちなみにi18nは、internationalization
の略で最初のiという字と最後のnという字の間に18文字があるため、i18nというように書きます。
Rails5以上では、まず今までconfig/application.rb
に書いていたI18nの設定をconfig/initializers/locale.rb
に書きます。locale.rbというファイルは、ない場合があるため、ない場合は新たに作ります。
locale.rbには、2行のコードを書きます。
I18n.config.available_locales = [:en, :ja]
I18n.default_locale = :ja
I18n.config.available_locales
では、多言語対応する言語を指定します。この例の場合、英語と日本語に対応します。もし、ひとつの言語だけに対応する場合はI18n.config.available_locales = :ja
のように配列を使わずに書けます。
I18n.default_locale
では、デフォルトの言語を指定します。通常サイトにアクセスした場合このdefault_localeの言語で表示されます。この例の場合、日本語で表示します。
これで、多言語対応ができました。しかし、まだ日本語とRailsの内容を対応させるロケールファイルがないため、それを用意します。
ちなみに、config/application.rb
やconfig/initializers/
などを変更した場合は設定の反映のためにサーバの再起動が必要となるので、もしサーバを起動している場合はサーバを再起動してから確認しましょう。
ロケールファイル
ロケールファイルは、Railsがデフォルトで出力する内容と日本語の対応が書かれています。
通常ロケールファイルは自分で書く必要はなく、よく利用されているものをコピーして使う事が多いです。
例えば、日本語のロケールファイルとして有名なものに次のものがあります。
svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
これを、config/locales/ja.yml
として保存すれば、すぐに日本語のロケールファイルを用意できました。
あとは、気にいらない日本語がある場合は、ja.ymlの内容を適当なものに書き換えます。
モデルのロケールファイル
この方法でロケールファイルを作った場合、モデル名やカラム名は日本語に変わっていません。
なので、モデル名やカラム名を日本語にしたい場合は、ja.ymlに日本語との対応を追加する必要があります。
例えばUserモデルにemailとpasswordというカラムがある場合に、Userモデルに「ユーザ」、emailとpasswordというカラムにそれぞれ「メールアドレス」「パスワード」という日本語を割り当てる場合は次のようなymlファイルになります。
ja:
activerecord:
models:
user: ユーザ
attributes:
user:
email: メールアドレス
password: パスワード
これで例えばUserモデルのデータを編集をするviewファイルに<%= form.label :email %>
というような記述があった場合、ラベルとして、メールアドレスと表示されます。
さいごに
色々と記事を見てみると、古い情報が多くうまく動かないという事がありました。
そのため、今回このような記事を書きました。
参考になれば幸いです。