i18n rails 4 生产错误。不是发展

Posted

技术标签:

【中文标题】i18n rails 4 生产错误。不是发展【英文标题】:i18n rails 4 production error. not development 【发布时间】:2014-03-22 20:46:01 【问题描述】:

我正在开发一个支持 i18n 的 rails 4 应用程序。我已经安装了 i18n gem。在我的 application.rb 文件中,我有这个代码

config.i18n.enforce_available_locales = true
config.i18n.available_locales = [:es]
config.i18n.default_locale = :es

在开发模式下一切正常,但当我切换到生产模式时,一切都输出“翻译缺失”。我尝试了不同的解决方案,例如在 config/initializers/locale.rb 中编写此代码

I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.rb,yml')]
I18n.default_locale = :es

还要在 config/environment.rb 中写这个

I18n.reload!

没有任何效果。进入控制台模式会显示这一点,就像我在网络浏览器中打开应用程序时一样。

user@opendraft:/home/user/www/awesomeapp# RAILS_ENV=development bundle exec rails c
Loading development environment (Rails 4.0.1)
irb(main):001:0> I18n.t('btn_login')
=> "Acceder"
irb(main):002:0> exit
user@opendraft:/home/user/www/awesomeapp# RAILS_ENV=production bundle exec rails c
Loading production environment (Rails 4.0.1)
irb(main):001:0> I18n.t('btn_login')
=> "translation missing: es.btn_login"
irb(main):002:0> exit

我的 config/locales/es.yml 文件:

es:
  btn_login: "Acceder"
  reset: "Reinicializar"
  login: "Acceso"
  sign_up_candidate: "Candidatos"
  sign_up_company: "Empresas"
  sign_up_teacher: "Profesores"

【问题讨论】:

向我们展示您的 config/locales/es.yml 及其 btn_login 密钥。 已发布,感谢收看 【参考方案1】:

根据application.rb 中包含的 cmets,自动加载来自 config/locales/* 的所有翻译。

我有一些应用程序只使用:es 作为语言环境,application.rb 中的唯一配置是:

config.i18n.default_locale = :es

没有别的了。

编辑

检查我的应用,我可以看到

config.i18n.available_locales = [:es]

如果您想删除对:en 语言环境的任何引用,这是必需的。你可以用这个来检查:

I18n.locale_available?(:en) # => false

仅供参考,在仅使用 :es 作为语言环境的 Rails 3 应用程序中,我也有这行:

I18n.config.enforce_available_locales = false

只是为了避免弃用警告:

[deprecated] I18n.enforce_available_locales will default to true in the future.
If you really want to skip validation of your locale you can set
I18n.enforce_available_locales = false to avoid this message.

【讨论】:

太好了,谢谢。我清理了所有文件,从 Gemfile 中删除了 i18n gem 以允许 rails 安装默认的 i18n gem,现在它可以工作了。太多的垃圾会带来问题。【参考方案2】:

您需要从您的应用程序中删除 config/initializers/locale.rb。默认配置如下:

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.rb,yml').to_s]
config.i18n.default_locale = :en

所以 rails 已经在 config/locales/*.rb,yml 中加载了所有内容。我可以向你保证,你提供的代码在默认配置下是开箱即用的。

【讨论】:

以上是关于i18n rails 4 生产错误。不是发展的主要内容,如果未能解决你的问题,请参考以下文章

如何解决错误“‘生产’环境缺少‘secret_key_base’”(Rails 4.1)

Rails 4 + 设计:密码重置总是在生产服务器上给出“令牌无效”错误,但在本地工作正常。

javascript_include_tag Rails 4 在生产中生成“/javascripts/”而不是“/assets”

部署时如何告诉 Rails 使用生产数据库(而不是开发数据库)?

Rails 生产静态文件路由错误

如何在生产模式下修复 Rails 的路由错误?