LoginSignup
1
1

More than 3 years have passed since last update.

【備忘録】Rails Formオブジェクトパターン使用時のエラーメッセージ日本語化

Posted at

概要

  • RailsのFormオブジェクトパターン使用時の入力フォームについてのバリデーションで弾かれたエラー内容を日本語として表示させる事を行ったので備忘録としてまとめておきます。

前提

  • RailsのアプリケーションにてFormオブジェクトパターンを用いている。

Formオブジェクトパターンについて簡単に

  • Railsを利用する開発における実装パターンのひとつ。
  • 主に1つのフォーム送信時に複数のモデルを操作したい場合やテーブルに情報を保存しない情報に対するバリデーションを行いたい場合に使用します。

Formオブジェクト使用時のバリデーションについて

  • まず、1つのフォームから複数のテーブルにデータを保存する場合、Formオブジェクトを使用していないと、フォームから送られてきた値を処理(createやupdate)する際に複数テーブルに関連したモデル内記述のバリデーションで入力値が弾かれてしまうと処理を継続できなくなります。
  • その点を補う為にFormオブジェクトパターンを用います。
  • Formオブジェクトのインスタンス内にバリデーションの記述を行う事で、フォームからの入力値がバリデーションに引っかかった場合は、入力情報と共にエラーメッセージをフォームに返す事が出来ます。   

エラーメッセージの日本語化について

1.作成中アプリケーションのconfigフォルダ内のapplication.rbに
config.i18n.default_locale = :ja ←この一文を追加します。

cnofig>application.rb
module (作成アプリケーション名)
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

    # 日本語の言語設定
    config.i18n.default_locale = :ja  #←この一文をconfig内のapplication.rbに追加。

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

2.日本語に対応する"rails-i18n"というGemを導入します。
・このGemの導入によりrails-i18nで翻訳されている英文が日本語として使用出来るようになります。
※Gemについての詳細は下記のサイトで確認して下さい。
https://github.com/svenfuchs/rails-i18n
Gemfileにrails-i18nを記述しターミナルにて「bundle install」を行います。

Gemfil
~ 中略 ~
gem 'rails-i18n'
ターミナル
bundle install

3.rails-i18nのGemで対応出来なかった単語に関して日本語翻訳する為のlocaleファイルを作成します。
・localeファイル・・・様々な言語に対応できる言語ファイルの事です。
・まずlocalesフォルダはをconfigフォルダ内に作成します。
・そしてconfig/localesディレクトリに「ja.yml」というファイルを作成します。
スクリーンショット 2021-01-13 16.36.23.png

4.ja.ymlのファイルを作成したら、ファイル内に日本語化したい英文・英単語と日本語訳を記述していきます。
・ja.ymlファイル内の記述に関しては下記のコードを参照して頂ければと思います。
※この時に注意点です!
・Formオブジェクトパターンを使用していないモデルに関しては、ActiveRecordを継承していますが、Formオブジェクトパターンを用いて作成したモデルは、ActiveModelを継承して作成しています。
ですので、Formオブジェクトパターンを用いたモデルに対しての翻訳の部分の記述の際は気をつけて下さい。

ja.yml
ja:
  activerecord:  #← ActiveRecordを継承しているモデルに対しての翻訳部分
    attributes:
      user:               #←モデルファイル名
        nickname: ニックネーム     #←rails-i18nにて翻訳されなかった単語名
        gender: 性別        #←rails-i18nにて翻訳されなかった単語名
        age: 年齢            #←rails-i18nにて翻訳されなかった単語名

  activemodel:  #← ActiveModelを継承して作成したFormオブジェクトパターンのモデルに対しての翻訳
    attributes:
      book_data:                   #←Formオブジェクトパターン使用のモデルファイル名
        title: タイトル         #←rails-i18nにて翻訳されなかった単語名
        publisher: 出版社           #←rails-i18nにて翻訳されなかった単語名
        author: 著者                #←rails-i18nにて翻訳されなかった単語名
        isbn: ISBN                 #←rails-i18nにて翻訳されなかった単語名

5.サーバー再起動後にブラウザで確認して下さい。
・再起動後に、フォームのバリデーションのエラーメッセージが問題なく翻訳されているか確認して下さい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1