我正在尝试检测浏览器语言,以便设置适当的i18n语言环境文件。
这是我的设置:
class ApplicationController < ActionController::Base
before_action :set_locale
ALLOWED_LOCALES = %w(de en en-US en-GB en-CA en-IN es).freeze
DEFAULT_LOCALE = 'en-US'.freeze
def extract_locale_from_header
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
if ALLOWED_LOCALES.include?(browser_locale)
browser_locale
else
DEFAULT_LOCALE
end
end
end
private
def set_locale
I18n.locale = extract_locale_from_header
end
当前,我已将浏览器语言设置为英语UK,并且该代码为:
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
返回“ en”而不是“ en-GB”。
如何检测在浏览器中设置的确切语言?
答案 0 :(得分:0)
它返回“ en”,因为您的正则表达式与前两个字符匹配。将其更改为类似^[a-z]{2}(-[A-Z]{2})?