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];
} else {
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',
() => {
expect(() => doTranslate({'abc': 'a{$PH}bc'}, parts `abc`))
expect(
() => doTranslate(
{'abc{$INTERPOLATION}def': 'a{$PH}bc'}, parts `abc${1 + 2}:INTERPOLATION:def`))
.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', () => {