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
|
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) {
|
||||||
|
|
Loading…
Reference in New Issue