mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-01 02:27:49 +08:00
Our language parser now incorrectly matches underscored locales:
```
[1] pry(main)> HttpLanguageParser.parse("zh-CN")
=> "zh_CN"
[2] pry(main)> HttpLanguageParser.parse("zh_CN")
=> "en_GB"
```
This commit makes sure the input can be agnostic of `-` or `_`
13 lines
554 B
Ruby
13 lines
554 B
Ruby
# frozen_string_literal: true
|
|
|
|
module HttpLanguageParser
|
|
def self.parse(header)
|
|
# Rails I18n uses underscores between the locale and the region; the request
|
|
# headers use hyphens.
|
|
require "http_accept_language" unless defined?(HttpAcceptLanguage)
|
|
available_locales = I18n.available_locales.map { |locale| locale.to_s.tr("_", "-") }
|
|
parser = HttpAcceptLanguage::Parser.new(header&.tr("_", "-"))
|
|
matched = parser.language_region_compatible_from(available_locales)&.tr("-", "_")
|
|
matched || SiteSetting.default_locale
|
|
end
|
|
end
|