【Rails】i18nを使って日本語対応する(追加したカラム名も変更したい)


Railsでアプリケーションを作成していて、i18nを使った日本語化のメモです。

バリデーション設定した時のエラーメッセージ表示で追加したカラム名の日本語化がなかなかうまくいかず。
あれこれ試して解消したので参考になればと思います。

状況


deviseを用いてユーザー登録機能を実装する際に、表現を日本語対応に変更する。
gemインストールもしたのに、ja.ymlも記載したし、configも書き換えたのに、一部の文言が日本語にならない。

インストールしたgemはこの2つ。

gem 'devise-i18n'
gem 'devise-i18n-views'

bundle install 忘れずに。

実施したこと(1) fileの作成


基本的には公式に沿ってQiitaなど参考にしながら記入やgenerationを実施しました。

読み込むための日本語yamlファイルdevise.yaml.jaを作成します。

rails g devise:views:locale ja

config/application.rbに追記します。

config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

1つ目は、デフォルトでja(日本語)を読むように変更。
2つ目は、load_path〜の記述で、複数のロケールファイルを読み込むため(別途設定必要です)。

configを修正したので、rails s(再起動)して挙動を確認。これで基本的な日本語化は反映されているはずです。

実施したこと(2)追加カラム対応用の編集

追加したアプリ独自のカラム名を日本語対応にする(住所関係とか誕生年、誕生月を分けて登録したい等)。
config/locales にja.ymlファイルを作成します。

touch config/locales/ja.yml

作成したja.ymlファイルは自分で編集する必要があります。
まずはgithubからja.ymlの基本項目をコピペ。

https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml

続いて、自分のアプリに合わせた編集を追加します。
/locales/ja.yml のactiverecord::以下にモデル名とカラム名を記載。
ちなみに参考まで。

ja:
  activerecord:
    models:
      user: ユーザー
      address: アドレス
    attributes:
      user:
        first_name: 名前(名)
        last_name: 名前(姓)
        first_name_kana: ふりがな(名)
        last_name_kana: ふりがな(姓)
        phone_number: 電話番号
        year_birth_at: 誕生年
        month_birth_at: 誕生月
        day_birth_at: 誕生日
      address:
        zip: 郵便番号
        pref: 都道府県
        city: 市区町村
        block: 丁目、番地
        building: ビル、マンション名
        dst_first_name: 宛先(名)
        dst_last_name: 宛先(氏)
        dst_first_name_kana: ふりがな 宛先(名)
        dst_last_name_kana: ふりがな 宛先(氏)
    errors:
      messages:
        record_invalid: 'バリデーションに失敗しました: %{errors}'
        restrict_dependent_destroy:
          has_one: "%{record}が存在しているので削除できません"
          has_many: "%{record}が存在しているので削除できません"
・・・・
ここから先の記述内容はgithub参考にしてください。

ja.ymlはインデント下げで、カラム名とモデル名を認識するので
見出しのactiverecordsから
models と attributes
モデル名(user:とadress:)
カラム名(first_name等々) で1つづつ下げて改行して記載するようにしましょう。

念のため、デフォルトの言語設定が :ja になっていることをrails r で確認しておきます。

rails r "puts I18n.default_locale"

ja  
と出ればOK。

実施したこと(3) 実装内容確認

rails c を使って記述した内容が表示されるかを確認。
まずrails s(再起動)、もしくはreload!を実行して rails c でconsoleを立ち上げます。

確認コマンド例
[1] pry(main)> User.model_name.human #モデル名の日本語化を確認
=> "ユーザー"
[2] pry(main)> User.human_attribute_name :last_name_kana #カラム名の日本語化を確認
=> "ふりがな(姓)"
[3] pry(main)> Address.model_name.human
=> "アドレス"
[4] pry(main)> Address.human_attribute_name :pref
=> "都道府県"

無事反映されていれば成功です。
これ以外にもバリデーションメッセージの編集や追加などもできます。
興味ある方は参考URLを読んでみてください。

参考

https://blog.cloud-acct.com/posts/spa-rails-i18n-setting/
https://qiita.com/yutackall/items/0ff97132f31e5bacbf00
https://blog.tanebox.com/archives/590/

最後までお読みいただきありがとうございました。