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.rbconfig/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 %>というような記述があった場合、ラベルとして、メールアドレスと表示されます。

さいごに

色々と記事を見てみると、古い情報が多くうまく動かないという事がありました。

そのため、今回このような記事を書きました。

参考になれば幸いです。