Ruby on rails Rails 5:检测浏览器语言

Ruby on rails Rails 5:检测浏览器语言,ruby-on-rails,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_h

我正在尝试检测浏览器语言,以便设置适当的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
返回“en”而不是“en GB”


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

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

browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first