我在我的模型上使用了一些验证并尝试将错误转换为我的语言
在我的模型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
但其他(存在,长度,......)不需要????
答案 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
。