【发布时间】:2012-01-06 15:13:07
【问题描述】:
我正在使用 Ruby on Rails 3.1,我想知道如何正确处理与“资源资源”相关的国际化。也就是……
...在我的config/routes.rb 文件中:
resources :users do
resource :account
end
...在我的app/models/users/account.rb 文件中:
class Users::Account < ActiveRecord::Base
validates :firstname,
:presence => true
...
end
...在我的config/locales/models/user/account/en.yml 文件中:
en:
activerecord:
errors:
messages:
presence: "custom presence message - english"
...在我的config/locales/models/user/account/it.yml 文件中:
it:
activerecord:
errors:
messages:
presence: "custom presence message - italian"
上面的代码不会在前端显示“custom presence message”(它仍然显示默认的 RoR 存在消息:can not be blank)。此外,如果在我的app/models/users/account.rb 文件中我使用:
class Users::Account < ActiveRecord::Base
validates :firstname,
:presence => { :message => t(:presence) } # Here I try to use the i18n helper method
...
end
我收到以下错误:
NoMethodError (undefined method `t' for #<Class:0x000001075bbc80>)
为什么我会收到NoMethodError?
问题是否与我在目录中组织语言环境文件的方式有关?此时(如official RoR guide 中所述)我的文件系统是:
config/locales/defaults/en.yml
config/locales/defaults/it.yml
config/locales/models/user/en.yml
config/locales/models/user/it.yml
config/locales/models/user/account/en.yml
config/locales/models/user/account/it.yml
简而言之,我只想在验证“资源的资源”之类的 Users::Account 时显示我的“custom presence message”。 我该怎么做?强>
我还尝试在config/locales/models/user/account/en.yml 文件中声明以下代码
en:
activerecord:
errors:
models:
user:
account:
attributes:
firstname:
blank: "custom presence message - english"
但它不起作用。无论如何,以下工作,但我需要不同属性的不同翻译(正如我在前面的代码示例中试图说明的那样):
en:
activerecord:
errors:
messages:
blank: "custom presence message - english"
【问题讨论】:
-
5.1.1 错误消息范围 - 请仔细阅读您提到的相同指南的该部分
-
@Piotr Mąsior - 我阅读了该部分(它还提到了模型继承,就我而言,我没有使用),但我找不到有关“资源资源”以及如何组织的信息相关的语言环境文件。此外,我不知道为什么我得到
NoMethodError。 -
如果您转到“generate_message”定义中的 ActiveModel gem lib/active_model/errors.rb 第 297 行,您会发现调用了 class.model_name.i18n_key 之类的东西......它会生成对于命名空间模型,例如:=> :"users/account"
标签: ruby-on-rails ruby ruby-on-rails-3 internationalization ruby-on-rails-3.1