Как обработать angular 11 extract-i18n, переопределяя существующие переводы?
Итак, у меня есть приложение angular 11, в котором я только что реализовал локализацию с промежуточным программным обеспечением i18n по умолчанию angulars.
Чтобы создать начальный файл, я просто запустил:
ng extract-i18n myprojectName --format xlf --output-path src/i18n --out-file messages.da.xlf --progress
все было хорошо, и я получил файл messages.da.xlf с переводом на язык по умолчанию.
Теперь я хотел перевести приложение на английский.
Я скопировал файл messages.da.xlf и назвал его messages.en.xlf и перевел все.
Сейчас все отлично работает.
Но теперь у меня проблема, в следующий раз, когда я добавлю дополнительный текст для перевода, английский перевод не обновляется.
Итак, мой вопрос: когда мне нужно расширить перевод из-за новых функций в приложении, как мне узнать, какие дополнительные «поля» мне нужно добавить во все файлы перевода, и есть ли способ сделать это автоматически?
2 ответа
Альтернативное/новое решение (для неподдерживаемой поддержки ngx-i18n) — https://github.com/daniel-sc/ng-extract-i18n-merge .
После установки через
ng add ng-extract-i18n-merge
переводы будут извлечены и объединены командой:
ng extract-i18n
(Прозрачность: я создал эту библиотеку.)
В Angular нет встроенного способа сделать это, поэтому вам понадобится сторонний инструмент. Единственный бесплатный инструмент, который я нашел, - это Xliffmerge, сейчас не которыйобслуживается . Документация предназначена для более старых версий Angular, но после некоторых экспериментов я обнаружил, что достаточно установить
@ngx-i18nsupport/tooling
упаковка:
npm install -D @ngx-i18nsupport/tooling --legacy-peer-deps
Затем мы можем добавить новые языки к конфигурациям в angular.json в разделе
projects -> projectName -> architect -> xliffmerge
.
"xliffmerge": {
"builder": "@ngx-i18nsupport/tooling:xliffmerge",
"options": {
"xliffmergeOptions": {
"defaultLanguage": "en-US",
"languages": ["nb"]
}
}
}
После добавления новых переводов мы можем извлечь их и перенести в наши файлы переводов, запустив этот скрипт:
ng extract-i18n && ng run projectName:xliffmerge
Мы получаем пару предупреждений при запуске скрипта, которые говорят нам, что он работает!
WARNING: merged 1 trans-units from master to "nb"
WARNING: please translate file "messages.nb.xlf" to target-language="nb"
Я уже писал об этом в своем блоге .