From eb305139f52d1bc48dcd903c8574717afa7c0960 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Thu, 25 Sep 2025 23:32:02 +0800 Subject: [PATCH] fix the locale settings on the profile page does not immediately update the preview --- src/locales/helpers.ts | 129 +++++++++++--------- src/views/base/users/UserProfilePageBase.ts | 23 ++-- 2 files changed, 85 insertions(+), 67 deletions(-) diff --git a/src/locales/helpers.ts b/src/locales/helpers.ts index 9c512636..e4e443f1 100644 --- a/src/locales/helpers.ts +++ b/src/locales/helpers.ts @@ -777,8 +777,10 @@ export function useI18n() { format = FiscalYearFormat.Default; } - if (!isDefined(calendarType) || !isGregorianLikeCalendarType(calendarType)) { + if (!isDefined(calendarType)) { calendarType = getGregorianLikeCalendarType(); + } else if (!isGregorianLikeCalendarType(calendarType)) { + calendarType = CalendarType.Gregorian; } const dateTimeFormatOptions = getDateTimeFormatOptions({ @@ -1611,109 +1613,109 @@ export function useI18n() { return numeralSystem.getAllDigits(); } - function getCurrentCalendarDisplayType(): CalendarDisplayType { - let calendarDisplayType = CalendarDisplayType.valueOf(userStore.currentUserCalendarDisplayType); + function getLocaleDefaultCalendarDisplayType(): CalendarDisplayType { + const defaultCalendarDisplayTypeName = t('default.calendarDisplayType'); + let calendarDisplayType = CalendarDisplayType.parse(defaultCalendarDisplayTypeName); if (!calendarDisplayType) { - const defaultCalendarDisplayTypeName = t('default.calendarDisplayType'); - calendarDisplayType = CalendarDisplayType.parse(defaultCalendarDisplayTypeName); - - if (!calendarDisplayType) { - calendarDisplayType = CalendarDisplayType.Default; - } + calendarDisplayType = CalendarDisplayType.Default; } return calendarDisplayType; } - function getCurrentDateDisplayType(): DateDisplayType { - let dateDisplayType = DateDisplayType.valueOf(userStore.currentUserDateDisplayType); + function getLocaleDefaultDateDisplayType(): DateDisplayType { + const defaultDateDisplayTypeName = t('default.dateDisplayType'); + let dateDisplayType = DateDisplayType.parse(defaultDateDisplayTypeName); if (!dateDisplayType) { - const defaultDateDisplayTypeName = t('default.dateDisplayType'); - dateDisplayType = DateDisplayType.parse(defaultDateDisplayTypeName); - - if (!dateDisplayType) { - dateDisplayType = DateDisplayType.Default; - } + dateDisplayType = DateDisplayType.Default; } return dateDisplayType; } - function getCurrentNumeralSystemType(): NumeralSystem { - let numeralSystemType = NumeralSystem.valueOf(userStore.currentUserNumeralSystem); + function getLocaleDefaultNumeralSystemType(): NumeralSystem { + const defaultNumeralSystemTypeName = t('default.numeralSystem'); + let numeralSystemType = NumeralSystem.parse(defaultNumeralSystemTypeName); if (!numeralSystemType) { - const defaultNumeralSystemTypeName = t('default.numeralSystem'); - numeralSystemType = NumeralSystem.parse(defaultNumeralSystemTypeName); - - if (!numeralSystemType) { - numeralSystemType = NumeralSystem.Default; - } + numeralSystemType = NumeralSystem.Default; } return numeralSystemType; } - function getCurrentDecimalSeparator(): string { - let decimalSeparatorType = DecimalSeparator.valueOf(userStore.currentUserDecimalSeparator); + function getLocaleDefaultDecimalSeparator(): DecimalSeparator { + const defaultDecimalSeparatorTypeName = t('default.decimalSeparator'); + let decimalSeparatorType = DecimalSeparator.parse(defaultDecimalSeparatorTypeName); if (!decimalSeparatorType) { - const defaultDecimalSeparatorTypeName = t('default.decimalSeparator'); - decimalSeparatorType = DecimalSeparator.parse(defaultDecimalSeparatorTypeName); - - if (!decimalSeparatorType) { - decimalSeparatorType = DecimalSeparator.Default; - } + decimalSeparatorType = DecimalSeparator.Default; } - return decimalSeparatorType.symbol; + return decimalSeparatorType; } - function getCurrentDigitGroupingSymbol(): string { - let digitGroupingSymbolType = DigitGroupingSymbol.valueOf(userStore.currentUserDigitGroupingSymbol); + function getLocaleDefaultDigitGroupingSymbol(): DigitGroupingSymbol { + const defaultDigitGroupingSymbolTypeName = t('default.digitGroupingSymbol'); + let digitGroupingSymbolType = DigitGroupingSymbol.parse(defaultDigitGroupingSymbolTypeName); if (!digitGroupingSymbolType) { - const defaultDigitGroupingSymbolTypeName = t('default.digitGroupingSymbol'); - digitGroupingSymbolType = DigitGroupingSymbol.parse(defaultDigitGroupingSymbolTypeName); - - if (!digitGroupingSymbolType) { - digitGroupingSymbolType = DigitGroupingSymbol.Default; - } + digitGroupingSymbolType = DigitGroupingSymbol.Default; } - return digitGroupingSymbolType.symbol; + return digitGroupingSymbolType; } - function getCurrentDigitGroupingType(): DigitGroupingType { - let digitGroupingType = DigitGroupingType.valueOf(userStore.currentUserDigitGrouping); + function getLocaleDefaultDigitGroupingType(): DigitGroupingType { + const defaultDigitGroupingTypeName = t('default.digitGrouping'); + let digitGroupingType = DigitGroupingType.parse(defaultDigitGroupingTypeName); if (!digitGroupingType) { - const defaultDigitGroupingTypeName = t('default.digitGrouping'); - digitGroupingType = DigitGroupingType.parse(defaultDigitGroupingTypeName); - - if (!digitGroupingType) { - digitGroupingType = DigitGroupingType.Default; - } + digitGroupingType = DigitGroupingType.Default; } return digitGroupingType; } - function getCurrentFiscalYearFormatType(): number { - let fiscalYearFormat = FiscalYearFormat.valueOf(userStore.currentUserFiscalYearFormat); + function getLocaleFiscalYearFormatType(): FiscalYearFormat { + const defaultFiscalYearFormatTypeName = t('default.fiscalYearFormat'); + let fiscalYearFormat = FiscalYearFormat.parse(defaultFiscalYearFormatTypeName); if (!fiscalYearFormat) { - const defaultFiscalYearFormatTypeName = t('default.fiscalYearFormat'); - fiscalYearFormat = FiscalYearFormat.parse(defaultFiscalYearFormatTypeName); - - if (!fiscalYearFormat) { - fiscalYearFormat = FiscalYearFormat.Default; - } + fiscalYearFormat = FiscalYearFormat.Default; } - return fiscalYearFormat.type; + return fiscalYearFormat; + } + + function getCurrentCalendarDisplayType(): CalendarDisplayType { + return CalendarDisplayType.valueOf(userStore.currentUserCalendarDisplayType) ?? getLocaleDefaultCalendarDisplayType(); + } + + function getCurrentDateDisplayType(): DateDisplayType { + return DateDisplayType.valueOf(userStore.currentUserDateDisplayType) ?? getLocaleDefaultDateDisplayType(); + } + + function getCurrentNumeralSystemType(): NumeralSystem { + return NumeralSystem.valueOf(userStore.currentUserNumeralSystem) ?? getLocaleDefaultNumeralSystemType(); + } + + function getCurrentDecimalSeparator(): string { + return DecimalSeparator.valueOf(userStore.currentUserDecimalSeparator)?.symbol ?? getLocaleDefaultDecimalSeparator().symbol; + } + + function getCurrentDigitGroupingSymbol(): string { + return DigitGroupingSymbol.valueOf(userStore.currentUserDigitGroupingSymbol)?.symbol ?? getLocaleDefaultDigitGroupingSymbol().symbol; + } + + function getCurrentDigitGroupingType(): DigitGroupingType { + return DigitGroupingType.valueOf(userStore.currentUserDigitGrouping) ?? getLocaleDefaultDigitGroupingType(); + } + + function getCurrentFiscalYearFormatType(): number { + return FiscalYearFormat.valueOf(userStore.currentUserFiscalYearFormat)?.type ?? getLocaleFiscalYearFormatType().type; } function getCurrencyName(currencyCode: string): string { @@ -2328,6 +2330,13 @@ export function useI18n() { getMultiMonthdayShortNames, getMultiWeekdayLongNames, getAllLocalizedDigits, + getLocaleDefaultCalendarDisplayType, + getLocaleDefaultDateDisplayType, + getLocaleDefaultNumeralSystemType, + getLocaleDefaultDecimalSeparator, + getLocaleDefaultDigitGroupingSymbol, + getLocaleDefaultDigitGroupingType, + getLocaleFiscalYearFormatType, getCurrentCalendarDisplayType, getCurrentDateDisplayType, getCurrentNumeralSystemType, diff --git a/src/views/base/users/UserProfilePageBase.ts b/src/views/base/users/UserProfilePageBase.ts index 65dbce27..c9ab5b13 100644 --- a/src/views/base/users/UserProfilePageBase.ts +++ b/src/views/base/users/UserProfilePageBase.ts @@ -39,6 +39,10 @@ export function useUserProfilePageBase() { getAllExpenseAmountColors, getAllIncomeAmountColors, getAllTransactionEditScopeTypes, + getLocaleDefaultDateDisplayType, + getLocaleDefaultNumeralSystemType, + getLocaleDefaultDecimalSeparator, + getLocaleDefaultDigitGroupingSymbol, setLanguage } = useI18n(); @@ -57,22 +61,27 @@ export function useUserProfilePageBase() { const resending = ref(false); const saving = ref(false); + const currentDateDisplayType = computed(() => DateDisplayType.valueOf(newProfile.value.dateDisplayType) ?? getLocaleDefaultDateDisplayType()); + const currentNumeralSystem = computed(() => NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? getLocaleDefaultNumeralSystemType()); + const currentDecimalSeparator = computed(() => DecimalSeparator.valueOf(newProfile.value.decimalSeparator)?.symbol ?? getLocaleDefaultDecimalSeparator().symbol); + const currentDigitGroupingSymbol = computed(() => DigitGroupingSymbol.valueOf(newProfile.value.digitGroupingSymbol)?.symbol ?? getLocaleDefaultDigitGroupingSymbol().symbol); + const allAccounts = computed(() => accountsStore.allPlainAccounts); const allVisibleAccounts = computed(() => accountsStore.allVisiblePlainAccounts); const allVisibleCategorizedAccounts = computed(() => getCategorizedAccounts(allVisibleAccounts.value)); const allWeekDays = computed(() => getAllWeekDays()); const allCalendarDisplayTypes = computed(() => getAllCalendarDisplayTypes()); const allDateDisplayTypes = computed(() => getAllDateDisplayTypes()); - const allLongDateFormats = computed(() => getAllLongDateFormats(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default, DateDisplayType.valueOf(newProfile.value.dateDisplayType)?.calendarType || DateDisplayType.Default.calendarType)); - const allShortDateFormats = computed(() => getAllShortDateFormats(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default, DateDisplayType.valueOf(newProfile.value.dateDisplayType)?.calendarType || DateDisplayType.Default.calendarType)); - const allLongTimeFormats = computed(() => getAllLongTimeFormats(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default)); - const allShortTimeFormats = computed(() => getAllShortTimeFormats(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default)); - const allFiscalYearFormats = computed(() => getAllFiscalYearFormats(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default, DateDisplayType.valueOf(newProfile.value.dateDisplayType)?.calendarType || DateDisplayType.Default.calendarType)); - const allCurrencyDisplayTypes = computed(() => getAllCurrencyDisplayTypes(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default, DecimalSeparator.valueOf(newProfile.value.decimalSeparator)?.symbol || DecimalSeparator.Default.symbol)); + const allLongDateFormats = computed(() => getAllLongDateFormats(currentNumeralSystem.value, currentDateDisplayType.value.calendarType)); + const allShortDateFormats = computed(() => getAllShortDateFormats(currentNumeralSystem.value, currentDateDisplayType.value.calendarType)); + const allLongTimeFormats = computed(() => getAllLongTimeFormats(currentNumeralSystem.value)); + const allShortTimeFormats = computed(() => getAllShortTimeFormats(currentNumeralSystem.value)); + const allFiscalYearFormats = computed(() => getAllFiscalYearFormats(currentNumeralSystem.value, currentDateDisplayType.value.calendarType)); + const allCurrencyDisplayTypes = computed(() => getAllCurrencyDisplayTypes(currentNumeralSystem.value, currentDecimalSeparator.value)); const allNumeralSystemTypes = computed(() => getAllNumeralSystemTypes()); const allDecimalSeparators = computed(() => getAllDecimalSeparators()); const allDigitGroupingSymbols = computed(() => getAllDigitGroupingSymbols()); - const allDigitGroupingTypes = computed(() => getAllDigitGroupingTypes(NumeralSystem.valueOf(newProfile.value.numeralSystem) ?? NumeralSystem.Default, DigitGroupingSymbol.valueOf(newProfile.value.digitGroupingSymbol)?.symbol || DigitGroupingSymbol.Default.symbol)); + const allDigitGroupingTypes = computed(() => getAllDigitGroupingTypes(currentNumeralSystem.value, currentDigitGroupingSymbol.value)); const allCoordinateDisplayTypes = computed(() => getAllCoordinateDisplayTypes()); const allExpenseAmountColorTypes = computed(() => getAllExpenseAmountColors()); const allIncomeAmountColorTypes = computed(() => getAllIncomeAmountColors());