diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index 9bbe6a80b..24f2a1c7b 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -24,6 +24,7 @@ import NestedKeyOf from './utils/NestedKeyOf'; import NestedValueOf from './utils/NestedValueOf'; function resolvePath( + locale: string, messages: AbstractIntlMessages | undefined, key: string, namespace?: string @@ -46,8 +47,8 @@ function resolvePath( if (part == null || next == null) { throw new Error( process.env.NODE_ENV !== 'production' - ? `Could not resolve \`${fullKey}\` in messages.` - : fullKey + ? `Could not resolve \`${fullKey}\` in messages for locale \`${locale}\`.` + : fullKey + ` (${locale})` ); } @@ -85,15 +86,12 @@ function prepareTranslationValues(values: RichTranslationValues) { return transformedValues; } -function getMessagesOrError({ - messages, - namespace, - onError = defaultOnError -}: { - messages?: Messages; - namespace?: string; - onError?(error: IntlError): void; -}) { +function getMessagesOrError( + locale: string, + messages?: Messages, + namespace?: string, + onError: (error: IntlError) => void = defaultOnError +) { try { if (!messages) { throw new Error( @@ -104,7 +102,7 @@ function getMessagesOrError({ } const retrievedMessages = namespace - ? resolvePath(messages, namespace) + ? resolvePath(locale, messages, namespace) : messages; if (!retrievedMessages) { @@ -154,11 +152,12 @@ export default function createBaseTranslator< Messages extends AbstractIntlMessages, NestedKey extends NestedKeyOf >(config: Omit, 'messagesOrError'>) { - const messagesOrError = getMessagesOrError({ - messages: config.messages, - namespace: config.namespace, - onError: config.onError - }) as Messages | IntlError; + const messagesOrError = getMessagesOrError( + config.locale, + config.messages, + config.namespace, + config.onError + ) as Messages | IntlError; return createBaseTranslatorImpl({ ...config, @@ -210,7 +209,7 @@ function createBaseTranslatorImpl< let message; try { - message = resolvePath(messages, key, namespace); + message = resolvePath(locale, messages, key, namespace); } catch (error) { return getFallbackFromErrorAndNotify( key, @@ -408,7 +407,7 @@ function createBaseTranslatorImpl< const messages = messagesOrError; try { - return resolvePath(messages, key, namespace); + return resolvePath(locale, messages, key, namespace); } catch (error) { return getFallbackFromErrorAndNotify( key, diff --git a/packages/use-intl/test/react/useTranslations.test.tsx b/packages/use-intl/test/react/useTranslations.test.tsx index 08837b154..69dfffe0f 100644 --- a/packages/use-intl/test/react/useTranslations.test.tsx +++ b/packages/use-intl/test/react/useTranslations.test.tsx @@ -583,7 +583,7 @@ describe('error handling', () => { const error: IntlError = onError.mock.calls[0][0]; expect(error.message).toBe( - 'MISSING_MESSAGE: Could not resolve `Component` in messages.' + 'MISSING_MESSAGE: Could not resolve `Component` in messages for locale `en`.' ); expect(error.code).toBe(IntlErrorCode.MISSING_MESSAGE); screen.getByText('Component.label'); @@ -605,7 +605,7 @@ describe('error handling', () => { const error: IntlError = onError.mock.calls[0][0]; expect(error.message).toBe( - 'MISSING_MESSAGE: Could not resolve `Component.label` in messages.' + 'MISSING_MESSAGE: Could not resolve `Component.label` in messages for locale `en`.' ); expect(error.code).toBe(IntlErrorCode.MISSING_MESSAGE); screen.getByText('Component.label');