web-dev-qa-db-ja.com

アクティブレコードモデルの検証を変換する方法

エラーのあるフォームを送信すると、エラーメッセージが返されます。これらのエラーメッセージをi18nでどのように翻訳できますか?私はすでに他のすべてのテキストの翻訳をビューに持っているので、l18nがRailsでどのように機能するかを知っています。私は今これを手に入れます:

2 errors prohibited this user from being saved:

Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank
Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank

タイトルとエラーの両方を翻訳したいと思います。

28
John

タイトルの翻訳は次のようになります。

nl:
  activerecord:
    errors:
      template:
        header:
          one:   "1 error prohibited this %{model} from being saved"
          other: "%{count} errors prohibited this %{model} from being saved"
        body:    "There were problems with the following fields:"

エラーメッセージを翻訳する場合、Railsは次の翻訳順序を使用します。

activerecord.errors.models.user.attributes.name.blank
activerecord.errors.models.user.blank
activerecord.errors.messages.blank
errors.attributes.name.blank
errors.messages.blank

だからあなたは追加することができます:

nl:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              blank: "foo blank in nl bar baz"

これは Railsの国際化(I18n)APIガイド で文書化されており、さらに洞察を得ることができます。

38
tbuehlmann

できるオランダ語の翻訳ファイルを使用してください ここで検索 。ほとんど(すべてではない)のActiveRecord検証メッセージの翻訳が含まれています。

ファイルをプロジェクトのconfig/locales/にコピーします。

代替方法

更新された翻訳を利用したい場合は、翻訳ファイルを手動でコピーする代わりに、Gemfileに以下を追加してください:

gem 'Rails-i18n'
23
rdvdijk

Rails I18nガイド はこれをかなりうまくカバーしています。

以下をconfig/locales/nl.ymlに入れて、属性を翻訳できます。

nl:
  activerecord:
    models:
      user: "User"
    attributes:
      email: "Email"

エラーメッセージの場合、ActiveRecordは次の名前空間でそれらを検索します。

activerecord.errors.models.[model_name].attributes.[attribute_name]
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.[attribute_name]
errors.messages

modelattributeおよびvalueは補間され、翻訳で使用できます。次に例を示します。

nl:
  errors:
    messages:
      blank: "Please fill the %{model}'s %{attribute}"
12
Benoit Garret