show language name in current language

This commit is contained in:
MaysWind
2024-10-07 19:58:58 +08:00
parent 368322f906
commit 011020a945
13 changed files with 52 additions and 41 deletions
+7 -6
View File
@@ -62,10 +62,6 @@ import {
import logger from './logger.js'; import logger from './logger.js';
import services from './services.js'; import services from './services.js';
function getAllLanguageInfos() {
return allLanguages;
}
function getAllLanguageInfoArray(translateFn, includeSystemDefault) { function getAllLanguageInfoArray(translateFn, includeSystemDefault) {
const ret = []; const ret = [];
@@ -75,10 +71,16 @@ function getAllLanguageInfoArray(translateFn, includeSystemDefault) {
} }
const languageInfo = allLanguages[languageTag]; const languageInfo = allLanguages[languageTag];
let displayName = languageInfo.displayName;
let languageNameInCurrentLanguage = translateFn(`language.${languageInfo.name}`);
if (languageNameInCurrentLanguage && languageNameInCurrentLanguage !== displayName) {
displayName = `${languageNameInCurrentLanguage} (${displayName})`;
}
ret.push({ ret.push({
languageTag: languageTag, languageTag: languageTag,
displayName: languageInfo.displayName displayName: displayName
}); });
} }
@@ -1537,7 +1539,6 @@ export function translateError(message, translateFn) {
export function i18nFunctions(i18nGlobal) { export function i18nFunctions(i18nGlobal) {
return { return {
getAllLanguageInfos: getAllLanguageInfos,
getAllLanguageInfoArray: (includeSystemDefault) => getAllLanguageInfoArray(i18nGlobal.t, includeSystemDefault), getAllLanguageInfoArray: (includeSystemDefault) => getAllLanguageInfoArray(i18nGlobal.t, includeSystemDefault),
getLanguageInfo: getLanguageInfo, getLanguageInfo: getLanguageInfo,
getDefaultLanguage: getDefaultLanguage, getDefaultLanguage: getDefaultLanguage,
+4
View File
@@ -4,6 +4,10 @@
"title": "ezBookkeeping" "title": "ezBookkeeping"
} }
}, },
"language": {
"English": "English",
"Simplified Chinese": "Simplified Chinese"
},
"default": { "default": {
"currency": "USD", "currency": "USD",
"firstDayOfWeek": "Sunday", "firstDayOfWeek": "Sunday",
+4
View File
@@ -4,6 +4,10 @@
"title": "ezBookkeeping" "title": "ezBookkeeping"
} }
}, },
"language": {
"English": "英语",
"Simplified Chinese": "简体中文"
},
"default": { "default": {
"currency": "CNY", "currency": "CNY",
"firstDayOfWeek": "Monday", "firstDayOfWeek": "Monday",
+3 -3
View File
@@ -74,10 +74,10 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item v-for="(lang, locale) in allLanguages" :key="locale"> <v-list-item v-for="lang in allLanguages" :key="lang.languageTag">
<v-list-item-title <v-list-item-title
class="cursor-pointer" class="cursor-pointer"
@click="changeLanguage(locale)"> @click="changeLanguage(lang.languageTag)">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -137,7 +137,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isDarkMode() { isDarkMode() {
return this.globalTheme.global.name.value === 'dark'; return this.globalTheme.global.name.value === 'dark';
+3 -3
View File
@@ -135,10 +135,10 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item v-for="(lang, locale) in allLanguages" :key="locale"> <v-list-item v-for="lang in allLanguages" :key="lang.languageTag">
<v-list-item-title <v-list-item-title
class="cursor-pointer" class="cursor-pointer"
@click="changeLanguage(locale)"> @click="changeLanguage(lang.languageTag)">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -216,7 +216,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isUserRegistrationEnabled() { isUserRegistrationEnabled() {
return isUserRegistrationEnabled(); return isUserRegistrationEnabled();
+3 -3
View File
@@ -99,10 +99,10 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item v-for="(lang, locale) in allLanguages" :key="locale"> <v-list-item v-for="lang in allLanguages" :key="lang.languageTag">
<v-list-item-title <v-list-item-title
class="cursor-pointer" class="cursor-pointer"
@click="changeLanguage(locale)"> @click="changeLanguage(lang.languageTag)">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -183,7 +183,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isDarkMode() { isDarkMode() {
return this.globalTheme.global.name.value === 'dark'; return this.globalTheme.global.name.value === 'dark';
+3 -3
View File
@@ -75,10 +75,10 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item v-for="(lang, locale) in allLanguages" :key="locale"> <v-list-item v-for="lang in allLanguages" :key="lang.languageTag">
<v-list-item-title <v-list-item-title
class="cursor-pointer" class="cursor-pointer"
@click="changeLanguage(locale)"> @click="changeLanguage(lang.languageTag)">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -138,7 +138,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isWebAuthnAvailable() { isWebAuthnAvailable() {
return this.settingsStore.appSettings.applicationLockWebAuthn return this.settingsStore.appSettings.applicationLockWebAuthn
+3 -3
View File
@@ -78,10 +78,10 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item v-for="(lang, locale) in allLanguages" :key="locale"> <v-list-item v-for="lang in allLanguages" :key="lang.languageTag">
<v-list-item-title <v-list-item-title
class="cursor-pointer" class="cursor-pointer"
@click="changeLanguage(locale)"> @click="changeLanguage(lang.languageTag)">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -150,7 +150,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isDarkMode() { isDarkMode() {
return this.globalTheme.global.name.value === 'dark'; return this.globalTheme.global.name.value === 'dark';
@@ -17,8 +17,8 @@
v-bind="props">{{ currentLanguageName }}</v-btn> v-bind="props">{{ currentLanguageName }}</v-btn>
</template> </template>
<v-list> <v-list>
<v-list-item :key="locale" :value="locale" v-for="(lang, locale) in allLanguages"> <v-list-item :key="lang.languageTag" :value="lang.languageTag" v-for="lang in allLanguages">
<v-list-item-title class="cursor-pointer" @click="currentLocale = locale"> <v-list-item-title class="cursor-pointer" @click="currentLocale = lang.languageTag">
{{ lang.displayName }} {{ lang.displayName }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@@ -110,7 +110,7 @@ export default {
} }
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
allPresetCategories() { allPresetCategories() {
return this.$locale.getAllTransactionDefaultCategories(this.categoryType, this.currentLocale); return this.$locale.getAllTransactionDefaultCategories(this.categoryType, this.currentLocale);
+5 -5
View File
@@ -77,12 +77,12 @@
<f7-list-item <f7-list-item
link="#" no-chevron popover-close link="#" no-chevron popover-close
:title="lang.displayName" :title="lang.displayName"
:key="locale" :key="lang.languageTag"
v-for="(lang, locale) in allLanguages" v-for="lang in allLanguages"
@click="changeLanguage(locale)" @click="changeLanguage(lang.languageTag)"
> >
<template #after> <template #after>
<f7-icon class="list-item-checked-icon" f7="checkmark_alt" v-if="currentLanguageCode === locale"></f7-icon> <f7-icon class="list-item-checked-icon" f7="checkmark_alt" v-if="currentLanguageCode === lang.languageTag"></f7-icon>
</template> </template>
</f7-list-item> </f7-list-item>
</f7-list> </f7-list>
@@ -231,7 +231,7 @@ export default {
return getDesktopVersionPath(); return getDesktopVersionPath();
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isUserRegistrationEnabled() { isUserRegistrationEnabled() {
return isUserRegistrationEnabled(); return isUserRegistrationEnabled();
+6 -5
View File
@@ -66,9 +66,9 @@
smart-select :smart-select-params="{ openIn: 'popup', popupPush: true, closeOnSelect: true, scrollToSelectedItem: true, searchbar: true, searchbarPlaceholder: $t('Language'), searchbarDisableText: $t('Cancel'), appendSearchbarNotFound: $t('No results'), pageTitle: $t('Language'), popupCloseLinkText: $t('Done') }" smart-select :smart-select-params="{ openIn: 'popup', popupPush: true, closeOnSelect: true, scrollToSelectedItem: true, searchbar: true, searchbarPlaceholder: $t('Language'), searchbarDisableText: $t('Cancel'), appendSearchbarNotFound: $t('No results'), pageTitle: $t('Language'), popupCloseLinkText: $t('Done') }"
> >
<select v-model="currentLocale"> <select v-model="currentLocale">
<option :value="languageTag" <option :value="lang.languageTag"
:key="languageTag" :key="lang.languageTag"
v-for="(lang, languageTag) in allLanguages">{{ lang.displayName }}</option> v-for="lang in allLanguages">{{ lang.displayName }}</option>
</select> </select>
</f7-list-item> </f7-list-item>
@@ -163,7 +163,8 @@
</f7-actions-group> </f7-actions-group>
</f7-actions> </f7-actions>
<list-item-selection-sheet value-type="index" <list-item-selection-sheet value-type="item"
value-field="languageTag"
title-field="displayName" title-field="displayName"
:items="allLanguages" :items="allLanguages"
v-model:show="showPresetCategoriesChangeLocaleSheet" v-model:show="showPresetCategoriesChangeLocaleSheet"
@@ -205,7 +206,7 @@ export default {
computed: { computed: {
...mapStores(useRootStore, useSettingsStore, useTransactionCategoriesStore, useExchangeRatesStore), ...mapStores(useRootStore, useSettingsStore, useTransactionCategoriesStore, useExchangeRatesStore),
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
allCurrencies() { allCurrencies() {
return this.$locale.getAllCurrencies(); return this.$locale.getAllCurrencies();
+5 -5
View File
@@ -51,12 +51,12 @@
<f7-list-item <f7-list-item
link="#" no-chevron popover-close link="#" no-chevron popover-close
:title="lang.displayName" :title="lang.displayName"
:key="locale" :key="lang.languageTag"
v-for="(lang, locale) in allLanguages" v-for="lang in allLanguages"
@click="changeLanguage(locale)" @click="changeLanguage(lang.languageTag)"
> >
<template #after> <template #after>
<f7-icon class="list-item-checked-icon" f7="checkmark_alt" v-if="currentLanguageCode === locale"></f7-icon> <f7-icon class="list-item-checked-icon" f7="checkmark_alt" v-if="currentLanguageCode === lang.languageTag"></f7-icon>
</template> </template>
</f7-list-item> </f7-list-item>
</f7-list> </f7-list>
@@ -97,7 +97,7 @@ export default {
return 'v' + this.$version; return 'v' + this.$version;
}, },
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
isWebAuthnAvailable() { isWebAuthnAvailable() {
return this.settingsStore.appSettings.applicationLockWebAuthn return this.settingsStore.appSettings.applicationLockWebAuthn
+3 -2
View File
@@ -45,7 +45,8 @@
</f7-actions-group> </f7-actions-group>
</f7-actions> </f7-actions>
<list-item-selection-sheet value-type="index" <list-item-selection-sheet value-type="item"
value-field="languageTag"
title-field="displayName" title-field="displayName"
:items="allLanguages" :items="allLanguages"
v-model:show="showChangeLocaleSheet" v-model:show="showChangeLocaleSheet"
@@ -81,7 +82,7 @@ export default {
computed: { computed: {
...mapStores(useTransactionCategoriesStore), ...mapStores(useTransactionCategoriesStore),
allLanguages() { allLanguages() {
return this.$locale.getAllLanguageInfos(); return this.$locale.getAllLanguageInfoArray(false);
}, },
allPresetCategories() { allPresetCategories() {
return this.$locale.getAllTransactionDefaultCategories(this.categoryType, this.currentLocale); return this.$locale.getAllTransactionDefaultCategories(this.categoryType, this.currentLocale);