web-dev-qa-db-ja.com

Railsモデル検証における国際化(I18n):可能かどうか?

モデルに次の検証があります。

validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')

翻訳はプロダクションモードでは機能しないようです。すべての言語で、表示されるのは常に英語の翻訳です(おそらく、アプリでデフォルトのロケールとして英語を設定しているためです...?)。

したがって、モデルが一度だけ読み込まれるため、モデルの検証を変換できないと想定しています。サーバーが起動されたとき(そして、デフォルトのロケールが適用されます)。

私は正しいですか?はいの場合、どのようにこの問題を解決しますか?

ご協力いただきありがとうございます!

38
TomDogg

解決策は、モデルにcustomメッセージキーを含めないことです...

:message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever')

次に、モデルはデフォルトのメッセージキーを適用します。たとえば、「validates_inclusion_of」の場合は「:inclusion」です。

...そしてconfig/locales/en.ymlには次のものが必要です:

en:
  activerecord:
    errors:
      models:
        my_model:
          attributes:
            whatever:
              inclusion: "Please select whatever." # see default key: "inclusion"

参考までに、それぞれのRailsガイド:

http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

49
TomDogg

記号を使用して、翻訳を指定できます。

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

そして、それは特定の範囲で翻訳されます。詳細は I18nガイド を参照してください。

17
iain

OK、iainの回答は機能しますが、どこに:select_whatever

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

OK en.ymlは次のようになります。

en:
  errors:
    messages:
      select_whatever: "error!!"
3
GMsoF