ruby-on-rails - 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”。
如何检测我在浏览器中设置的确切语言?
解决方案
它返回 'en' 因为您的正则表达式匹配前两个字符。将其更改为类似^[a-z]{2}(-[A-Z]{2})?
推荐阅读
- applescript - Applescript 列表到文件格式错误
- vb.net - 将数据集表记录插入 SQLite 表 - 在 VB.NET 中
- java - 使用多种数据库类型的 Spring Boot 集成测试
- bash - 在 Bash shell 中锁定“set +e”
- mysql - 除了默认的 /var/lib/mysql 之外,我们如何安装 MySQL?
- javascript - 迭代多维数组并根据第一个索引返回聚合总和
- c# - ASP.NET Identity - 代表某人执行操作
- c++ - 在返回发生后从范围退出处理程序中抛出时发生了什么?
- swift - Swift 集合包含复杂性
- google-sheets - 通过 Google Sheets API 将公式插入整列