Improve system locale selection (#2271)
* improve system language selection * fix lint * add comments
This commit is contained in:
parent
562ee02950
commit
5f8e33c6ad
|
@ -271,12 +271,31 @@ const stateWithSideEffects = {
|
|||
|
||||
let targetLocale = value
|
||||
if (value === 'system') {
|
||||
const systemLocale = await dispatch('getSystemLocale')
|
||||
|
||||
targetLocale = Object.keys(i18n.messages).find((locale) => {
|
||||
const localeName = locale.replace('-', '_')
|
||||
return localeName.includes(systemLocale.replace('-', '_'))
|
||||
const systemLocaleName = (await dispatch('getSystemLocale')).replace('-', '_') // ex: en_US
|
||||
const systemLocaleLang = systemLocaleName.split('_')[0] // ex: en
|
||||
const targetLocaleOptions = Object.keys(i18n.messages).filter((locale) => { // filter out other languages
|
||||
const localeLang = locale.replace('-', '_').split('_')[0]
|
||||
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
|
||||
if (!targetLocale) {
|
||||
|
|
Loading…
Reference in New Issue