From 13edb74deabddc49dbf5d417891fb12874c8d21c Mon Sep 17 00:00:00 2001 From: Jiu Liancheng Date: Sat, 8 Feb 2025 10:42:33 +0800 Subject: [PATCH 1/2] test: add test for sync reactivity watcher --- packages/vue-i18n-core/test/composer.test.ts | 23 +++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/vue-i18n-core/test/composer.test.ts b/packages/vue-i18n-core/test/composer.test.ts index 755944f23..59ff15c30 100644 --- a/packages/vue-i18n-core/test/composer.test.ts +++ b/packages/vue-i18n-core/test/composer.test.ts @@ -64,7 +64,16 @@ describe('locale', () => { test('reactivity', async () => { const fn = vi.fn() - const { locale } = createComposer({}) + const { locale, t } = createComposer({ + messages: { + en: { + test: 'en' + }, + 'en-US': { + test: 'en-US' + } + } + }) watch(locale, fn) locale.value = 'en' await nextTick() @@ -72,6 +81,18 @@ describe('locale', () => { expect(fn).toBeCalled() expect(fn.mock.calls[0][0]).toEqual('en') expect(fn.mock.calls[0][1]).toEqual('en-US') + + let result = '' + locale.value = 'en' + + watch(locale, () => (result = t('test')), { + immediate: true, + flush: 'sync' + }) + expect(result).toEqual('en') + locale.value = 'en-US' + await nextTick() + expect(result).toEqual('en-US') }) }) From 6a5baf75bf349e6b81f90606eca52d6b5dab5358 Mon Sep 17 00:00:00 2001 From: Jiu Liancheng Date: Sat, 8 Feb 2025 10:46:55 +0800 Subject: [PATCH 2/2] fix: modify the order of the locale setter --- packages/vue-i18n-core/src/composer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index 09cfae445..7a5c5b8c9 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -2110,8 +2110,8 @@ export function createComposer(options: any = {}): any { const locale = computed({ get: () => _locale.value, set: val => { + _context.locale = val _locale.value = val - _context.locale = _locale.value } }) @@ -2119,8 +2119,8 @@ export function createComposer(options: any = {}): any { const fallbackLocale = computed({ get: () => _fallbackLocale.value, set: val => { + _context.fallbackLocale = val _fallbackLocale.value = val - _context.fallbackLocale = _fallbackLocale.value updateFallbackLocale(_context, _locale.value, val) } })