fix(localize): improve placeholder mismatch error message (#35593)

The original error message was confusing since often it is the
translation that is at fault not the message.

PR Close #35593
This commit is contained in:
Pete Bacon Darwin 2020-02-20 21:40:56 +01:00 committed by Miško Hevery
parent a7d5c55926
commit 53f059ee8f
2 changed files with 7 additions and 3 deletions

View File

@ -68,7 +68,8 @@ export function translate(
return message.substitutions[placeholder]; return message.substitutions[placeholder];
} else { } else {
throw new Error( throw new Error(
`No placeholder found with name ${placeholder} in message ${describeMessage(message)}.`); `There is a placeholder name mismatch with the translation provided for the message ${describeMessage(message)}.\n` +
`The translation contains a placeholder with name ${placeholder}, which does not exist in the message.`);
} }
}) })
]; ];

View File

@ -88,9 +88,12 @@ describe('utils', () => {
it('should throw an error if the translation contains placeholders that are not in the message', it('should throw an error if the translation contains placeholders that are not in the message',
() => { () => {
expect(() => doTranslate({'abc': 'a{$PH}bc'}, parts `abc`)) expect(
() => doTranslate(
{'abc{$INTERPOLATION}def': 'a{$PH}bc'}, parts `abc${1 + 2}:INTERPOLATION:def`))
.toThrowError( .toThrowError(
'No placeholder found with name PH in message "2674653928643152084" ("abc").'); `There is a placeholder name mismatch with the translation provided for the message "8986527425650846693" ("abc{$INTERPOLATION}def").\n` +
`The translation contains a placeholder with name PH, which does not exist in the message.`);
}); });
it('(with identity translations) should render template literals as-is', () => { it('(with identity translations) should render template literals as-is', () => {