干净的方式避免I18n :: InvalidLocale?

Gwe*_*oué 8 ruby-on-rails rails-i18n ruby-on-rails-4

我得到了一个I18n::InvalidLocale: "zh-CN" is not a valid locale我想避免的例外.

为了解决这个问题,我听说过两个黑客:

# meh
config.i18n.enforce_available_locales = false

# Ever heard of convention over configuration?
config.i18n.available_locales = [:fr, :en, "zh-CN", "zh-TW"]
Run Code Online (Sandbox Code Playgroud)

它们中没有一个看起来很干净,因为没有触及那些配置变量,我已经有了一堆可自动预填充的可用语言环境:

我目前的available_locales是:

> I18n.available_locales
=> [:en, :fr]   (misses zh-CN and zh-TW)
Run Code Online (Sandbox Code Playgroud)

在我的config/locales文件夹中,我有:

en.yml
fr.yml
zh-CH.yml (newly added, and unavailable)
zh-TW.yml (newly added, and unavailable)
Run Code Online (Sandbox Code Playgroud)

在我config/application.rb,我有:

config.i18n.default_locale = :fr
Run Code Online (Sandbox Code Playgroud)

我不明白怎么fr了自动的进入I18n.available_locales,在zh-CNzh-TW没有.

然而,没有我设置fr进入它告诉我,触摸这个配置变量不是干净的方式.config.i18n.available_locales

你有没有提示在正确的水平上避免I18n::InvalidLocale异常?

Arv*_*ind 5

i18n库对语言环境键采用实用的方法,包括语言环境("语言")部分,如:en,:pl,而不是区域部分,如:en-US或:en-GB,如果你想要这种类型定义检查很少有像Globalize3这样的宝石可能对你有所帮助.

还检查这个震荡也经历了这个

并且删除config.i18n.default_locale = :fr 因为使用默认本地,它将通过您提到的相同错误,因此删除defaullt后使用此config.i18n.available_locales = [:fr, :en, "zh-CN", "zh-TW"]