Rails 5:检测浏览器语言

时间:2018-08-08 08:04:51

标签: ruby-on-rails

我正在尝试检测浏览器语言,以便设置适当的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”。

如何检测在浏览器中设置的确切语言?

1 个答案:

答案 0 :(得分:0)

它返回“ en”,因为您的正则表达式与前两个字符匹配。将其更改为类似^[a-z]{2}(-[A-Z]{2})?