エラーメッセージの日本語化


はじめに

オリアプ制作の中で、エラーメッセージの日本語化を行ったので、忘れないよう載せておこうと思います。
ユーザーがきちんとフォーム入力を出来ていない際に、エラーメッセージが英語ではどこに不備があるかが分かりづらいのでは?と感じたため、日本語化を実装しようと思いました。

事前状況:ユーザー登録等にはdeviseを導入している / 単体エラーコードは記述済み
今回の流れとして、localeファイル内に日本語変換用yamlファイルを作成する事で英語を翻訳していく。
(localeファイル:多言語化用の言語ファイル)

1.gemの導入

1.エラーメッセージを日本語化するために『rails-i18n』というgemをGemfileに記述しbundle installする。
これは以下のリンク先に記述してある語句を日本語にしてくれるもの。

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

Gemfile
gem 'rails-i18n'

2.config/application.rb に config.i18n.default_locale = :ja を記述し、言語の設定を行う

config/appllication.rb
module IdeaApp
  class Application < Rails::Application
    # 中略
    config.i18n.default_locale = :ja
    # 中略
  end
end

2.devise関連の日本語化

ユーザー登録等にはdeviseを導入しているため、それに関連するものの日本語化を行う。
1.config/locales に devise.ja.yml を作成する。
 →config / locales / devise.ja.yml

2.devise.ja.yml内に以下のリンク先に記述してあるコードをペーストする。
ペーストすることで、記述してある語句を日本語にする。
https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml

3.指定した単語の日本語化

ここまでの実装で、rails-i18ndevise.ja.ymlに記述してある語句に関しては日本語化出来ているが、そのほかの語句は以下の画像のように日本語化出来ていない。

そのため、こちらで語句(NicknameやTitle、Category)などを指定し、日本語に変換する必要がある。

1.config/locales に ja.yml を作成する
 →config / locales / ja.yml

2. ja.yml に以下のように変換したい語句の変換前・変換後を記述する

config/locales/ja.yml
ja:
  activerecord:
    attributes:
      user: #Userモデル
        nickname: ニックネーム
        phone_number: 電話番号
        first_name: 名前
        last_name: 名字
        first_name_kana: 名前カナ
        last_name_kana: 名字カナ
      idea: #Ideaモデル
        title: アイデア名
        idea: アイデアの内容
        price: 価格
        category_id: カテゴリー
    errors:
     messages:
       other_than:  --」以外を選択してください

4.日本語に変換後

これでエラーメッセージを日本語化することが出来た。

5.補足:エラーコード修正

すでに単体テストコードを記述している場合は、期待するエラーメッセージも日本語に変換されるため、書き換えが必要になる。
例としてNicknameのエラーコードを記載する。

spec/models/user_spec.rb  書き換え前
# 中略
context '新規登録がうまくいかないとき' do
  it 'nicknameが空だと登録できない' do
    @user.nickname = ''
    @user.valid?
    expect(@user.errors.full_messages).to include("Nickname can't be blank")
  end
end
# 中略
spec/models/user_spec.rb  書き換え後
# 中略
context '新規登録がうまくいかないとき' do
  it 'nicknameが空だと登録できない' do
    @user.nickname = ''
    @user.valid?
    expect(@user.errors.full_messages).to include("ニックネームを入力してください")
  end
end
# 中略

最後に

英語が苦手な人にもエラーメッセージが読めるように実装することが出来ました。
今後も誰にでも使いやすいアプリを制作できるように意識していきたいです。