Rails Internationalization (I18n) in model validations: Possible or not?

后端 未结 3 1621
南笙
南笙 2020-12-09 07:44

I have the following validation in a model:

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


        
相关标签:
3条回答
  • 2020-12-09 08:24

    You can use symbols, to specify translations:

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

    And it will be translated with a particular scope. See the I18n guide for more details.

    0 讨论(0)
  • 2020-12-09 08:28

    The solution is to NOT include any custom message keys in the models, like...

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

    The model will then apply the default message keys, for example ":inclusion" in the case of "validates_inclusion_of"

    ...and in config/locales/en.yml you need to have:

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

    for reference, check out the respective Rails guide:

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

    0 讨论(0)
  • 2020-12-09 08:29

    OK, iain answer works, but I took very long time to figure out where should I put the :select_whatever.

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

    OK your en.yml should look like this:

    en:
      errors:
        messages:
          select_whatever: "error!!"
    
    0 讨论(0)
提交回复
热议问题