当我的rails应用程序在生产环境中时,I18N异常

时间:2011-03-22 03:07:55

标签: ruby-on-rails ruby ruby-on-rails-3 internationalization

我在本地计算机(OSX 10.6.6,Rails 3.0.1,WEBrick)中编写了一个rails应用程序,所有I18n文件都正常工作。当我将应用程序推送到我的网络服务器(Centos5.4,Rails 3.0.1,Phusion Passenger version 3.0.2)时出现错误“Translation missing: en, username_exist”< / p>

我的型号代码:

validates_uniqueness_of :username, :on => :create, :message => I18n.t("username_exist")

我的i18n文件(config / locales / en.yml):

en:
   username_exist: "username exist"

我认为模型没找到i18n文件?

2 个答案:

答案 0 :(得分:2)

在类范围内使用I18n.t时,就像调用validates_uniqueness_of时一样,将在加载文件时对其进行评估。这可能不是您想要的,因为这意味着消息将始终显示在默认语言环境中,而不是使用发出每个请求的用户的语言环境。如果在配置I18n之前加载文件,它也可能导致您遇到的问题。

相反,请使用符号:

validates_uniqueness_of :username, ..., :message => :username_exist

请参阅ActiveModel::Errors#generate_message的文档,了解将翻译放在语言环境文件中的位置。

实际上,如果您遵循ActiveModel命名约定,甚至不需要提供:message密钥:

en:
  activemodel:
    errors:
      models:
        [your model name, e.g. user]:
          attributes:
            username:
              taken: "username exists"

答案 1 :(得分:0)

您是否在application.rb中设置了区域设置?喜欢:

config.i18n.default_locale = :en