Прежде всего я понимаю, что использую компиляцию 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>
Это сделает его более ремонтопригодным.