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) } }) 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') }) })