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”