我有以下代码,它首先根据参数分配区域设置,然后是先前设置的 cookie,然后通过请求HTTP_ACCEPT_LANGUAGE
.
def set_locale
if params[:locale]
I18n.locale = params[:locale]
elsif cookies[:locale]
I18n.locale = cookies[:locale]
else
I18n.locale = sanitizeLocale(request.env["HTTP_ACCEPT_LANGUAGE"]) # e.g. "en,es;q=0.8,de-de;q=0.5,en-us;q=0.3"
end
cookies[:locale] = I18n.locale
end
def sanitizeLocale(locale)
@locale, lang_weight = cookies[:locale] || begin
if accept_lang = request.env["HTTP_ACCEPT_LANGUAGE"] # e.g. "en,es;q=0.8,de-de;q=0.5,en-us;q=0.3"
accept_lang.to_s.split(',').collect {|l| x,y = l.split(';q='); [x.split('-').first, (y||1).to_f]}.sort_by(&:last).reverse.find {|lang, lang_weight| %w[es en it fr de].include?(lang)}
# returns ["en", 1.0]
end
end || 'en' # default
return @locale
end
我的问题是如何检查params[:locale]
给定和cookies[:locale]
对照sanitizeLocale
. 我很感兴趣仅根据输入获取有效值,例如es en it fr de
或默认为 en 。
我一直试图将它的值传递给sanitizeLocale
我正在做的类似的事情,HTTP_ACCEPT_LANGUAGE
由于某种原因我无法理解它不起作用,并且en
即使params[:locale]
给定的值是有效的,也总是默认为it
.