0

我正在开发一个支持 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!

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

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"
4

2 回答 2

0

根据. config/locales/*_application.rb

我有一些仅用: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.
于 2014-03-22T20:56:48.573 回答
0

您需要从应用程序中删除 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 中加载了所有内容。我可以向你保证,你提供的代码在默认配置下是开箱即用的。

于 2014-03-22T20:55:34.683 回答