Угловой динамический перевод i18n в случае, если известен идентификатор - PullRequest
0 голосов
/ 28 мая 2019

Прежде всего я понимаю, что использую компиляцию AOT, и это статично. Хотя мне было интересно, можно ли загрузить правильный перевод, если идентификатор известен (и определен в файле source.{language}.xlf)?

В общем, мне нужно лучше понять, что происходит под капотом, более конкретно, как Angular распознает заполнитель для замены?

Я пытаюсь выполнить следующее:

  • Backend возвращает код ошибки (например, 'error_code');
  • код ошибки добавлен в файлы xlf;
  • Компонент динамической ошибки создается для отображения переведенных сообщений об ошибках;
  • В этот момент я застрял. У меня есть идентификатор переведенного элемента, но я думаю, что мне не хватает последней части головоломки.

Испытано следующее безуспешно:

<p class="message message--warning" i18n="{{error}}"> /* {{error}} = error_code */ {{error}} </p>

Я немного поиграл с опциями select, но, похоже, это тоже не работает.

Было бы замечательно, если бы кто-то смог указать мне правильное направление.

EDIT

В настоящее время у меня есть это:

HTML-файл:

<span i18n="@@error-message">
      {error, select,
        invalid.phone { invalid.phone }
        invalid.name { invalid.name }
        ...
      }
</span>

xlf file

<trans-unit id="error-message" datatype="html">
    <source><x id="ICU" equiv-text="{error, select, invalid.phone {...} invalid.name {...}}"/></source>
    <target><x id="ICU" equiv-text="{error, select, invalid.phone {...} invalid.name {...}}"/></target>
</trans-unit>

<trans-unit id="7cefd72dcdd90f3149190b11f35dd151b0abd193" datatype="html">
    <source>{VAR_SELECT, select, invalid.phone {invalid.phone } invalid.name {invalid.name }}</source>
    <target>{VAR_SELECT, select, invalid.phone {Invalid phone} invalid.name {Invalid name}}</target>
</trans-unit>

В основном у меня осталось 2 вопроса:

  • Можно ли сделать часть HTML более общей, например:
<span i18n="@@error-message">
      {error, select, error { error }}
</span>
  • Можно ли извлечь переводы в отдельные элементы trans-unit, например:
<trans-unit id="7cefd72dcdd90f3149190b11f35dd151b0abd193" datatype="html">
    <source>{VAR_SELECT, select, invalid.phone {invalid.phone } invalid.name {invalid.name }}</source>
    <target>{VAR_SELECT, select, invalid.phone {message.invalid.phone} invalid.name {message.invalid.name}}</target>
</trans-unit>

<trans-unit id="message.invalid.name" datatype="html">
    <source>invalid.name</source>
    <target>Invalid name</target>
</trans-unit>

Это сделает его более ремонтопригодным.

...