feat: prioritize user languages in language picker (#1614)
This commit is contained in:
parent
297b104e1c
commit
76bad723ab
|
@ -6,6 +6,7 @@ let { modelValue } = $defineModel<{
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const userSettings = useUserSettings()
|
||||||
|
|
||||||
const languageKeyword = $ref('')
|
const languageKeyword = $ref('')
|
||||||
|
|
||||||
|
@ -17,11 +18,24 @@ const fuse = new Fuse(languagesNameList, {
|
||||||
const languages = $computed(() =>
|
const languages = $computed(() =>
|
||||||
languageKeyword.trim()
|
languageKeyword.trim()
|
||||||
? fuse.search(languageKeyword).map(r => r.item)
|
? fuse.search(languageKeyword).map(r => r.item)
|
||||||
: [...languagesNameList].sort(({ code: a }, { code: b }) => {
|
: [...languagesNameList].filter(entry => !userSettings.value.disabledTranslationLanguages.includes(entry.code))
|
||||||
|
.sort(({ code: a }, { code: b }) => {
|
||||||
return a === modelValue ? -1 : b === modelValue ? 1 : a.localeCompare(b)
|
return a === modelValue ? -1 : b === modelValue ? 1 : a.localeCompare(b)
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const preferredLanguages = computed(() => {
|
||||||
|
const result = []
|
||||||
|
for (const langCode of userSettings.value.disabledTranslationLanguages) {
|
||||||
|
const completeLang = languagesNameList.find(listEntry => listEntry.code === langCode)
|
||||||
|
if (completeLang)
|
||||||
|
result.push(completeLang)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
},
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
function chooseLanguage(language: string) {
|
function chooseLanguage(language: string) {
|
||||||
modelValue = language
|
modelValue = language
|
||||||
}
|
}
|
||||||
|
@ -38,6 +52,18 @@ function chooseLanguage(language: string) {
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div max-h-40vh overflow-auto>
|
<div max-h-40vh overflow-auto>
|
||||||
|
<template v-if="!languageKeyword.trim()">
|
||||||
|
<CommonDropdownItem
|
||||||
|
v-for="{ code, nativeName, name } in preferredLanguages"
|
||||||
|
:key="code"
|
||||||
|
:text="nativeName"
|
||||||
|
:description="name"
|
||||||
|
:checked="code === modelValue"
|
||||||
|
@click="chooseLanguage(code)"
|
||||||
|
/>
|
||||||
|
<hr class="border-base ">
|
||||||
|
</template>
|
||||||
|
|
||||||
<CommonDropdownItem
|
<CommonDropdownItem
|
||||||
v-for="{ code, nativeName, name } in languages"
|
v-for="{ code, nativeName, name } in languages"
|
||||||
:key="code"
|
:key="code"
|
||||||
|
|
Loading…
Reference in a new issue