【问题标题】:The I18N is abnormal when my rails app in production environment我的rails应用程序在生产环境中时I18N异常
【发布时间】:2011-03-22 03:07:55
【问题描述】:

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

我的型号代码:

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

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

en:
   username_exist: "username exist"

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

【问题讨论】:

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


    【解决方案1】:

    当您在类范围内使用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"
    

    【讨论】:

    • 我认为消息简单且易于维护。我尝试使用 ActiveModel 命名约定并解决了问题。但我不知道我的方式有什么问题,这可能是一个错误。谢谢!
    【解决方案2】:

    您是否在 application.rb 中设置了语言环境?喜欢:

    config.i18n.default_locale = :en  
    

    【讨论】:

    • 是的。我在 application.rb 中设置了config.i18n.default_locale = :en
    • 我不确定这个杀戮会奏效。最好尝试类似 kill -9 然后重新启动 nginx 甚至更好的“/etc/init.d/nginx restart”。您确定服务器已正确重新启动吗?如果是这样,请忽略此评论
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多