Railsアプリのエラーメッセージを日本語化する

f:id:endoakak:20200725103819j:plain

Railsアプリのエラーメッセージを日本語にする方法をまとめていきます。

やることはざっくり二つです。

  • Railsの設定を日本語にする
  • localeファイルに直接記述

設定を日本語にする

まずはデフォルトの言語を日本語にするため、config/application.rbに以下の記述を追加します

config.i18n.default_locale = :ja

次に、rails-i18nというgemをインストールします。

gem 'rails-i18n'
% bundle install

これで、エラーメッセージの一部が日本語化します。「can't be blank」と表示されていたところが「入力してください」に変わる感じです。

i18nというのはrailsアプリを国際化するためのツールです。そのため日本語以外にも、様々な言語に設定を変更することができます。例えばapplication.rbのファイルで、:jaとしたところを:deとすればドイツ語になります。

このgemについてはこちらに。

https://github.com/svenfuchs/rails-i18n

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

おまけ i18nの由来

i18nは「InternationalizatioN」という言葉のIとNの間に18文字存在していることから、i18nという名前になったそうです。

localeファイルに記述

i18nはあらかじめ設定された文字列を翻訳するだけなので、それだけではエラーメッセージを完全に日本語にすることはできません。

例えばモデルの属性名など、アプリの製作者が命名したものまでは対応していないので、エラーメッセージには属性名がそのまま表示されます。( 「Nick name を入力してください」のように表示されてしまう。)

そのため、自分でlocaleファイルに記述し設定する必要があります。

config/localeの中にja.ymlというファイルを作成し、以下のように記述していきます。(詳しい書き方はまたの機会に。)

ja:
 activerecord:
   attributes:
     user:
       nick_name: ニックネーム

これで「Nick name」と表示されていたところが、「ニックネーム」と表示されるようになります。

deviseを使ってユーザー管理機能を作った場合

こちらにdevise関連の表示を日本語化する設定をまとめてくれているサイトがあります。

https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml

config/localeの中にdevise.ja.ymlというファイルを作成して、このサイトを参考に書いていけばOKです。

まとめ

  • application.rbで言語を設定する
  • i18nというgemをインストールする
  • localeファイルに記述