我得到了一个我想避免的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"]
他们似乎都不干净,因为没有触及那些配置变量,我已经有了一堆可自动预填充的可用语言环境:
我当前的available_locales是:
> 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
告诉我,触摸此配置变量不是干净的方式。
您是否有提示避免正确级别的boolean isChecked = driver.findElement((By.xpath(xpath1))).isSelected();
例外?
答案 0 :(得分:5)
i18n库对语言环境键采用实用的方法,包括语言环境(“语言”)部分,如:en,:pl,而不是区域部分,如:en-US或:en-GB,如果你想要这种类型的定义检查很少有诸如Globalize3之类的宝石可以帮到你。
同时检查此descussion也会使用this
并删除config.i18n.default_locale = :fr
因为使用默认的本地化,它将通过您在删除defaullt后提到的相同错误
使用此config.i18n.available_locales = [:fr, :en, "zh-CN", "zh-TW"]
答案 1 :(得分:0)
不要将语言环境设置为无效值。
class ApplicationController < ActionController::Base
before_action :set_locale
def set_locale
[params[:locale], cookies[:locale], extract_locale, I18n.default_locale].each do |l|
if l && I18n.available_locales.index(l.to_sym)
I18n.locale = l
break
end
end
cookies[:locale] = params[:locale] if params[:locale]
end
def extract_locale
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first if request.env['HTTP_ACCEPT_LANGUAGE']
end
在设置之前测试以确保区域设置存在。