Несколько месяцев go В моем приложении было выбранное выражение ICU, которое выглядело примерно так:
.xlf (файл перевода):
<trans-unit id="my-custom-id">
<source>{ VAR_SELECT, select, A {text for option A} B {text for option B} }</ source>
<target>{ VAR_SELECT, select, A {text for option A} B {text for option B} }</ target>
</trans-unit>
Но в своем атрибуте i18n в html я забыл добавить префикс id к @@, то есть он не считался идентификатором, а Angular (8 в то время) присвоил свой собственный номер 1010 * Id и выдал ошибку во время процесса сборки, жалуясь на отсутствие перевода для этого идентификатора.
"Перевод не найден для" 8718798238785245459 "(" {VAR_SELECT , выберите, A {текст для опции A} B {текст для опции B}} "
Обратите внимание на текст VAR_SELECT, поскольку это имя переменной было изменено во время внесения этой корректировки.
ошибка перестала появляться, когда я добавил символы @@ в атрибут i18n. Я не видел его несколько месяцев, до недавнего времени, когда он снова появлялся.
Два последних существенных изменения были сделаны:
- Мы обновлены до Angular 9 - может быть или не иметь значения
- Я добавил новое выражение выбора ICU для сообщения об ошибке, которое было в основном таким же, как и предыдущее, за исключением того, что с суффиксом текста "это ар equired field "и, конечно, имеет свой уникальный идентификатор:
<trans-unit id="my-required-error-message-custom-id">
<source>{ NewVariableName, select, A {text for option A} B {text for option B} } is a required field</ source>
<target>{ NewVariableName, select, A {text for option A} B {text for option B} } is a required field</ target>
</trans-unit>
Это все работает как задумано, но если я собираю с использованием build-ci-pr, исходная ошибка у меня была несколько месяцев в * Возвращает 1042 * со ссылкой на старое имя переменной VAR_SELECT.
Если я удалю добавленный элемент html, чтобы использовать этот перевод, эта ошибка исчезнет. Если я добавлю его обратно, он вернется. У него правильный идентификатор. Он имеет префикс @@.
. Наиболее показательной частью этого является то, что сообщение об ошибке включает в себя «VAR_SELECT». В нашей системе нет ни одного перевода, который бы использовал это больше.
Так что Angular четко хранит значения для переводов, которые он ожидает увидеть, и он имеет этот ошибочный. Однако это сохранено, оно не доступно для поиска, потому что поиск этого идентификатора ничего не дает. Как мне прекратить angular ожидать перевода с этим идентификатором?
Обновление: до сих пор не знаю, что вызвало это, но у нас были такие проблемы с выражениями ICU после обновления Angular 9 что мы решили удалить их все и использовать вместо этого $ localize. Angular 9 переводов выглядят очень глючно.