diff --git a/src/runtime/translate.ts b/src/runtime/translate.ts index 886e61956..62eb4ebca 100644 --- a/src/runtime/translate.ts +++ b/src/runtime/translate.ts @@ -205,7 +205,10 @@ export function translate( warn(`Fall back to translate '${key}' key with '${targetLocale}' locale.`) } message = messages[targetLocale] || {} - format = resolveValue(message, key) + if ((format = resolveValue(message, key)) === null) { + // if null, resolve with object key path + format = (message as any)[key] // eslint-disable-line @typescript-eslint/no-explicit-any + } if (isString(format) || isFunction(format)) break handleMissing(context, key, targetLocale, missingWarn, 'translate') } diff --git a/test/runtime/translate.test.ts b/test/runtime/translate.test.ts index 98458eb53..80a9f5b5f 100644 --- a/test/runtime/translate.test.ts +++ b/test/runtime/translate.test.ts @@ -539,4 +539,16 @@ describe('edge cases', () => { }) expect(translate(ctx, 'こんにちは')).toEqual('こんにちは!') }) + + test('object path key', () => { + const ctx = context({ + locale: 'en', + messages: { + en: { + 'side.left': 'Left' + } + } + }) + expect(translate(ctx, 'side.left')).toEqual('Left') + }) })