Angular (8/9) i18n ожидает перевода с указанным c цифрой c id с ошибкой - PullRequest
1 голос
/ 25 марта 2020

Несколько месяцев 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. Я не видел его несколько месяцев, до недавнего времени, когда он снова появлялся.

Два последних существенных изменения были сделаны:

  1. Мы обновлены до Angular 9 - может быть или не иметь значения
  2. Я добавил новое выражение выбора 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 переводов выглядят очень глючно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...