目次
Rails6のvalidatesメッセージを日本語化する
Ruby on Railsのvalidates機能を使うと、デフォルトではエラーメッセージが英語で表示されます。
本記事では「i18n」を利用して、validatesメッセージを日本語化する方法を紹介してきます。
スポンサーリンク
言語ファイルの作成
日本語の言語ファイル作成
i18nでは、英語は「en.yml」、日本語は「ja.yml」というように、言語によりファイルが分かれています。
今回は、日本語化したいので「app/config/locales」配下に「ja.yml」ファイルを作成します。「ja.yml」ファイルを作成したら、言語ファイルの中身を作成します。
言語ファイルの内容は、下記のgitHubからダウンロードできます。
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
[例:app/config/locales/ja.yml]
--- ja: activerecord: errors: messages: record_invalid: 'バリデーションに失敗しました: %{errors}' restrict_dependent_destroy: has_one: "%{record}が存在しているので削除できません" has_many: "%{record}が存在しているので削除できません" date: abbr_day_names: - 日 - 月 - 火 - 水 - 木 - 金 - 土 abbr_month_names: - - 1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月 day_names: - 日曜日 - 月曜日 - 火曜日 - 水曜日 - 木曜日 - 金曜日 - 土曜日 formats: default: "%Y/%m/%d" long: "%Y年%m月%d日(%a)" short: "%m/%d" month_names: - - 1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月 order: - :year - :month - :day datetime: distance_in_words: about_x_hours: one: 約1時間 other: 約%{count}時間 about_x_months: one: 約1ヶ月 other: 約%{count}ヶ月 about_x_years: one: 約1年 other: 約%{count}年 almost_x_years: one: 1年弱 other: "%{count}年弱" half_a_minute: 30秒前後 less_than_x_seconds: one: 1秒以内 other: "%{count}秒未満" less_than_x_minutes: one: 1分以内 other: "%{count}分未満" over_x_years: one: 1年以上 other: "%{count}年以上" x_seconds: one: 1秒 other: "%{count}秒" x_minutes: one: 1分 other: "%{count}分" x_days: one: 1日 other: "%{count}日" x_months: one: 1ヶ月 other: "%{count}ヶ月" x_years: one: 1年 other: "%{count}年" prompts: second: 秒 minute: 分 hour: 時 day: 日 month: 月 year: 年 errors: format: "%{attribute}%{message}" messages: accepted: を受諾してください blank: を入力してください confirmation: と%{attribute}の入力が一致しません empty: を入力してください equal_to: は%{count}にしてください even: は偶数にしてください exclusion: は予約されています greater_than: は%{count}より大きい値にしてください greater_than_or_equal_to: は%{count}以上の値にしてください inclusion: は一覧にありません invalid: は不正な値です less_than: は%{count}より小さい値にしてください less_than_or_equal_to: は%{count}以下の値にしてください model_invalid: 'バリデーションに失敗しました: %{errors}' not_a_number: は数値で入力してください not_an_integer: は整数で入力してください odd: は奇数にしてください other_than: は%{count}以外の値にしてください present: は入力しないでください required: を入力してください taken: はすでに存在します too_long: は%{count}文字以内で入力してください too_short: は%{count}文字以上で入力してください wrong_length: は%{count}文字で入力してください template: body: 次の項目を確認してください header: one: "%{model}にエラーが発生しました" other: "%{model}に%{count}個のエラーが発生しました" helpers: select: prompt: 選択してください submit: create: 登録する submit: 保存する update: 更新する number: currency: format: delimiter: "," format: "%n%u" precision: 0 separator: "." significant: false strip_insignificant_zeros: false unit: 円 format: delimiter: "," precision: 3 separator: "." significant: false strip_insignificant_zeros: false human: decimal_units: format: "%n %u" units: billion: 十億 million: 百万 quadrillion: 千兆 thousand: 千 trillion: 兆 unit: '' format: delimiter: '' precision: 3 significant: true strip_insignificant_zeros: true storage_units: format: "%n%u" units: byte: バイト eb: EB gb: GB kb: KB mb: MB pb: PB tb: TB percentage: format: delimiter: '' format: "%n%" precision: format: delimiter: '' support: array: last_word_connector: "、" two_words_connector: "、" words_connector: "、" time: am: 午前 formats: default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z" long: "%Y/%m/%d %H:%M" short: "%m/%d %H:%M" pm: 午後
Modelのカラム名を日本語化する言語ファイル作成
言語ファイルだけでは、モデルのカラム名が英語のままです。モデルのカラム名を日本語するためには、「config/locales/models/」配下に「ja.yml」というファイルを作成します。
スポンサーリンク
[例:config/locales/models/ja.yml]
ja: activerecord: models: user: ユーザー attributes: user: name: 名前 address: 住所 phone: 電話番号 sex: 性別 mail_address: メールアドレス
言語設定の変更
最後に「application.rb」の設定を下記のように変更して作成した言語ファイルが読み込まれるようにします。
# i18n
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]
「config.i18n.default_locale」に「ja」を指定することで、「app/config/locales/ja.yml」ファイルが読み込まれます。
そして、「config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]」を指定することで、config/locales配下にある全てのymlファイルが読み込まれ、「config/locales/models/ja.yml」の設定が反映されます。
[例:app/config/application.rb]
require_relative 'boot' require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) module AdminlteSample class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 # i18n config.i18n.default_locale = :ja config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s] end end
動作確認
Railsのサーバーを起動して動作確認を行います。エラーメッセージが日本語になっていれば完了です。