Rails 3使用i18n自定义验证错误

时间:2013-05-05 14:10:12

标签: ruby-on-rails-3 validation rails-i18n

我在我的模型上使用了一些验证并尝试将错误转换为我的语言

在我的模型TaiSan中,我有一些这样的验证:

class TaiSan < ActiveRecord::Base
 attr_accessible :MaTS, :TenTS
 validates_length_of :MaTS, :in => 9..10, :allow_nil => false
 validates_presence_of :MaTS
 validates_uniqueness_of :MaTS

在控制器和视图中我只是默认(scafford)

我的locales\vi.yml看起来像这样

vi:
 errors: &errors
   format: ! '%{attribute} %{message}'
 messages:
   taken: đã tồn tại trong cơ sở dữ liệu
   blank: không được trống
   empty: không được rỗng
   too_long:
    one: quá dài (tối đa là 1 kí tự)
    other: quá dài (tối đa là %{count} kí tự)
   too_short:
    one: quá ngắn (tối thiểu là 1 kí tự)
    other: quá ngắn (tối thiểu là %{count} kí tự)
   wrong_length:
    one: sai độ dài (phải là 1 kí tự)
    other: sai độ dài (phải là %{count} kí tự)

除validate_uniqueness_of的错误消息之外的任何其他工作正常,已翻译为我上面定义的语言,但taken:仍然是'...has already been taken'

任何线索我错过了什么?任何提示和答案都非常珍贵

解决方案

我在vi: locale\vi.yml之后添加了一些代码,如下所示:

vi:
  activerecord:
    errors:
      messages:
       taken: "đã tồn tại"

现在工作正常!!!那么为什么我必须在唯一性验证之前添加activerecord但其他(存在,长度,......)不需要????

1 个答案:

答案 0 :(得分:0)

Rails已经在rails-i18n gem中内置了许多不同的语言翻译。这包括越南语。

无论如何......在编写自定义验证消息时,请确保指定正确的嵌套密钥。

您的翻译文件应遵循与默认格式相同的YAML格式,例如: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/vi.yml

因此,taken翻译的完整密钥为vi.errors.messages.taken,而不是en.messages.taken

请注意,您的语言也应在YAML文件中指定为vi,而不是en