2

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

在我的模型中,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在唯一性验证之前添加它但其他(存在,长度,...)不需要????

4

1 回答 1

0

rails-i18nRails 已经在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.

于 2013-05-05T14:28:04.090 回答