Improve system locale selection (#2271)

* improve system language selection

* fix lint

* add comments
This commit is contained in:
ChunkyProgrammer 2022-06-03 08:00:20 -04:00 committed by GitHub
parent 562ee02950
commit 5f8e33c6ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 5 deletions

View File

@ -271,12 +271,31 @@ const stateWithSideEffects = {
let targetLocale = value let targetLocale = value
if (value === 'system') { if (value === 'system') {
const systemLocale = await dispatch('getSystemLocale') const systemLocaleName = (await dispatch('getSystemLocale')).replace('-', '_') // ex: en_US
const systemLocaleLang = systemLocaleName.split('_')[0] // ex: en
targetLocale = Object.keys(i18n.messages).find((locale) => { const targetLocaleOptions = Object.keys(i18n.messages).filter((locale) => { // filter out other languages
const localeName = locale.replace('-', '_') const localeLang = locale.replace('-', '_').split('_')[0]
return localeName.includes(systemLocale.replace('-', '_')) return localeLang.includes(systemLocaleLang)
}).sort((a, b) => {
const aLocaleName = a.replace('-', '_')
const bLocaleName = b.replace('-', '_')
const aLocale = aLocaleName.split('_') // ex: [en, US]
const bLocale = bLocaleName.split('_')
if (aLocale.includes(systemLocaleName)) { // country & language match, prefer a
return -1
} else if (bLocale.includes(systemLocaleName)) { // country & language match, prefer b
return 1
} else if (aLocale.length === 1) { // no country code for a, prefer a
return -1
} else if (bLocale.length === 1) { // no country code for b, prefer b
return 1
} else { // a & b have different country code from system, sort alphabetically
return aLocaleName.localeCompare(bLocaleName)
}
}) })
if (targetLocaleOptions.length > 0) {
targetLocale = targetLocaleOptions[0]
}
// Go back to default value if locale is unavailable // Go back to default value if locale is unavailable
if (!targetLocale) { if (!targetLocale) {