首页 > 解决方案 > Rails 5:检测浏览器语言

问题描述

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

目前我已将浏览器语言设置为英国英语和此代码:

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

返回“en”而不是“en-GB”。

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

标签: ruby-on-rails

解决方案


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


推荐阅读