【发布时间】:2015-12-23 01:11:20
【问题描述】:
我得到了一个我想避免的I18n::InvalidLocale: "zh-CN" is not a valid locale 异常。
要解决它,我听说过两种 hack:
# meh
config.i18n.enforce_available_locales = false
# Ever heard of convention over configuration?
config.i18n.available_locales = [:fr, :en, "zh-CN", "zh-TW"]
我觉得它们都不干净,因为在不触及这些配置变量的情况下,我已经有一堆自动预填充的可用语言环境:
我当前的可用语言环境是:
> I18n.available_locales
=> [:en, :fr] (misses zh-CN and zh-TW)
在我的config/locales 文件夹中,我有:
en.yml
fr.yml
zh-CH.yml (newly added, and unavailable)
zh-TW.yml (newly added, and unavailable)
在我的config/application.rb 中,我有:
config.i18n.default_locale = :fr
我不明白fr 是如何自动输入I18n.available_locales,而zh-CN 和zh-TW 没有。
然而,让fr 输入它没有我设置config.i18n.available_locales 告诉我触摸这个配置变量不是干净的方法。
您是否有提示在正确级别避免I18n::InvalidLocale异常?
【问题讨论】:
-
谢谢 huan,但这并没有成功。
-
何塞,
config.i18n.fallbacks = true是做什么的? -
对不起,我误解了你的问题。尝试将您的配置
config.i18n.default_locale和config.i18n.available_locales放入环境文件中 -
何塞,你第一次误解是因为你没有阅读。设置available_locales 对我来说似乎是一种黑客行为。此外(我必须工作,所以我当然尝试过,即使它看起来像一个肮脏的黑客),我仍然会丢失翻译。
-
José,“memoizing”的意思是“只要程序运行就在内存中记住”。它只是“内存缓存”的一个花哨的名称。它无法在重新启动服务器后继续存在,并且与我们的主题无关。最后,我知道设置 available_locales 有效。我觉得这不是正确的解决方案,因此提出了这个问题。不过,感谢您的帮助。
标签: ruby-on-rails ruby-on-rails-4 rails-i18n