Ответ 1
TL;DR; Просто не беспокойтесь о пользовательских идентификаторах и правильно напишите строки. Инструмент ng xi18n
позаботится о совпадении идентичных строк под одним <trans-unit>
. Ваши переводы затем будут применены ко всему блоку.
Более длинное объяснение: инструмент xi18n
сопоставляет строки в приложении с помощью равенства строк. Всякий раз, когда он находит новую строку, она сравнивает ее с уже найденными. Если есть точное совпадение, оно включает новую строку в существующем <trans-unit>
. Если этого не происходит, он создает новый и генерирует новый идентификатор.
Однако это поведение можно изменить, используя пользовательские идентификаторы и подсказки для перевода. Если новая строка найдена и содержит пользовательский идентификатор, текущие сообщения будут проверяться для этого конкретного идентификатора и назначены существующим <trans-group>
, если они найдены. Обратите внимание, что этот процесс игнорирует сама строка, поэтому любое непустое значение будет объединено с найденным <trans-group>
с пользовательским идентификатором. Пустые строки опущены.
Как упоминается в документации, только первый элемент с пользовательским идентификатором будет проверен для исходной строки. Когда есть второй элемент с тем же идентификатором, это строковое значение не будет анализироваться. Это означает, что вы можете изменить свое решение, чтобы все остальные узлы с вашим пользовательским идентификатором содержали строку-заполнитель. Тогда локализация будет работать так, как вы ожидаете.
// home.component.html
<h1 i18n="@@homeTitle">Home</h1>
// menu.component.html
<a routerLink="/" i18n="@@homeTitle">ANY PLACEHOLDER STRING YOU WANT</a>
Как вы могли видеть, это не выглядит особенно причудливым. Кроме того, вы должны помнить пользовательский идентификатор для дальнейшего повторного использования. Я бы посоветовал не делать этого, если это абсолютно необходимо. На мой взгляд, проще просто написать строку (в вашем случае "Home"
), нанести атрибут i18n
на элемент и не беспокоиться о повторном использовании, так как это будет сделано автоматически. Я бы использовал пользовательские идентификаторы в основном, если вам нужно иметь несколько различных (контекстных) переводов одной строки.