From 79876bd098d455b0dc3b629ebd713bdc66803c1a Mon Sep 17 00:00:00 2001 From: "Guillaume.de.Moffart" Date: Fri, 25 Jul 2025 14:19:42 +0200 Subject: [PATCH 1/2] Fix linked message resolving with nested keys --- e2e/formatting/linked.spec.ts | 4 + examples/composition/formatting/linked.html | 148 +++++++++++--------- examples/petite/formatting/linked.html | 144 ++++++++++--------- packages/core-base/src/translate.ts | 4 +- packages/core-base/test/translate.test.ts | 13 ++ 5 files changed, 173 insertions(+), 140 deletions(-) diff --git a/e2e/formatting/linked.spec.ts b/e2e/formatting/linked.spec.ts index 6dea82e04..0c3f017d4 100644 --- a/e2e/formatting/linked.spec.ts +++ b/e2e/formatting/linked.spec.ts @@ -15,6 +15,7 @@ import { getText, url } from '../helper' expect(await getText(page, '#app p.modifier')).toMatch( 'custom modifiers example: snake-case' ) + expect(await getText(page, '#app p.linked-nested')).toMatch('Nested key') }) test('change locale', async () => { @@ -28,6 +29,9 @@ import { getText, url } from '../helper' expect(await getText(page, '#app p.modifier')).toMatch( 'カスタム修飾子の例: スネーク-ケース' ) + expect(await getText(page, '#app p.linked-nested')).toMatch( + 'ネストされたキー' + ) }) }) }) diff --git a/examples/composition/formatting/linked.html b/examples/composition/formatting/linked.html index af981fb50..ec3d2805b 100644 --- a/examples/composition/formatting/linked.html +++ b/examples/composition/formatting/linked.html @@ -1,80 +1,88 @@ - - - Linked message example - - - - -
-
- - -
-

{{ t('message.linked') }}

- -

{{ t('message.missingHomeAddress') }}

-

- {{ t('message.custom_modifier', { snake: 'message.snake' }) }} -

-
- + + + + +
+
+ + +
+

{{ t('message.linked') }}

+ +

{{ t('message.missingHomeAddress') }}

+

+ {{ t('message.custom_modifier', { snake: 'message.snake' }) }} +

+

{{ t('message.linkedWithNested') }}

+
+ + - return { t, locale } - } - }) - app.use(i18n) - app.mount('#app') - - diff --git a/examples/petite/formatting/linked.html b/examples/petite/formatting/linked.html index 8ce0d055f..50269d9f4 100644 --- a/examples/petite/formatting/linked.html +++ b/examples/petite/formatting/linked.html @@ -1,77 +1,85 @@ - - - Linked message example - - - - -
-
- - -
-

{{ t('message.linked') }}

- -

{{ t('message.missingHomeAddress') }}

-

- {{ t('message.custom_modifier', { snake: 'message.snake' }) }} -

-
- + + + + +
+
+ + +
+

{{ t('message.linked') }}

+ +

{{ t('message.missingHomeAddress') }}

+

+ {{ t('message.custom_modifier', { snake: 'message.snake' }) }} +

+

{{ t('message.linkedWithNested') }}

+
+ + - return { t, locale } - } - }) - app.use(i18n) - app.mount('#app') - - diff --git a/packages/core-base/src/translate.ts b/packages/core-base/src/translate.ts index f2f302b92..0297d006d 100644 --- a/packages/core-base/src/translate.ts +++ b/packages/core-base/src/translate.ts @@ -1165,7 +1165,7 @@ function getMessageContextOptions( // fallback if (val == null && (fallbackContext || useLinked)) { - const [, , message] = resolveMessageFormat( + const [format] = resolveMessageFormat( fallbackContext || context, // NOTE: if has fallbackContext, fallback to root, else if use linked, fallback to local context key, locale, @@ -1173,7 +1173,7 @@ function getMessageContextOptions( fallbackWarn, missingWarn ) - val = resolveValue(message, key) + val = format } if (isString(val) || isMessageAST(val)) { diff --git a/packages/core-base/test/translate.test.ts b/packages/core-base/test/translate.test.ts index 48e6b3cfc..d1bc4c96b 100644 --- a/packages/core-base/test/translate.test.ts +++ b/packages/core-base/test/translate.test.ts @@ -1053,3 +1053,16 @@ test('locale detector', () => { expect(translate(ctx, 'hi')).toEqual('hi kazupon !') expect(locale).toHaveBeenCalledTimes(2) }) + +test('linked nested key', () => { + const ctx = context({ + locale: 'en', + messages: { + en: { + 'nested.key': 'Nested key', + 'message.linkedWithNested': '@:nested.key' + } + } + }) + expect(translate(ctx, 'message.linkedWithNested')).toEqual('Nested key') +}) From 3b0f2cc16ce680d6f2856b8140081ec660cc52f6 Mon Sep 17 00:00:00 2001 From: "Guillaume.de.Moffart" Date: Fri, 25 Jul 2025 14:32:09 +0200 Subject: [PATCH 2/2] Fix html format --- examples/composition/formatting/linked.html | 153 ++++++++++---------- examples/petite/formatting/linked.html | 149 ++++++++++--------- 2 files changed, 148 insertions(+), 154 deletions(-) diff --git a/examples/composition/formatting/linked.html b/examples/composition/formatting/linked.html index ec3d2805b..14fd42b7b 100644 --- a/examples/composition/formatting/linked.html +++ b/examples/composition/formatting/linked.html @@ -1,88 +1,85 @@ + + + Linked message example + + + + +
+
+ + +
+

{{ t('message.linked') }}

+ +

{{ t('message.missingHomeAddress') }}

+

+ {{ t('message.custom_modifier', { snake: 'message.snake' }) }} +

+

{{ t('message.linkedWithNested') }}

+
+ - - - - -
-
- - -
-

{{ t('message.linked') }}

- -

{{ t('message.missingHomeAddress') }}

-

- {{ t('message.custom_modifier', { snake: 'message.snake' }) }} -

-

{{ t('message.linkedWithNested') }}

-
- - + // Something to do ... + // + return { t, locale } + } + }) + app.use(i18n) + app.mount('#app') + + diff --git a/examples/petite/formatting/linked.html b/examples/petite/formatting/linked.html index 50269d9f4..3a5437912 100644 --- a/examples/petite/formatting/linked.html +++ b/examples/petite/formatting/linked.html @@ -1,85 +1,82 @@ + + + Linked message example + + + + +
+
+ + +
+

{{ t('message.linked') }}

+ +

{{ t('message.missingHomeAddress') }}

+

+ {{ t('message.custom_modifier', { snake: 'message.snake' }) }} +

+

{{ t('message.linkedWithNested') }}

+
+ - - - - -
-
- - -
-

{{ t('message.linked') }}

- -

{{ t('message.missingHomeAddress') }}

-

- {{ t('message.custom_modifier', { snake: 'message.snake' }) }} -

-

{{ t('message.linkedWithNested') }}

-
- - + // Something to do ... + // + return { t, locale } + } + }) + app.use(i18n) + app.mount('#app') + +