Мы пишем сайт на Angular 6, используя код Visual Studio. Веб-сайт будет переведен на несколько языков, но пока мы сохраняем его на шведском и английском языках с языком по умолчанию. Мы извлекаем строки из HTML-файлов с помощью команды xi18n
и используем команду ngx-extractor
из i18n-polyfill
для извлечения строк из файлов машинописи.
Моя проблема в том, что я хочу сделать перевод естественным шагом во время кодирования, а не добавлять его в конце проекта в качестве запоздалой мысли. Я хочу обновить файлы перевода одновременно с HTML и машинописными строками. Хотя я могу сделать это для файлов HTML
с помощью xliff
, команда, которую я использую, удаляет строки typescript
при следующем запуске.
Мои команды, объявленные в package.json:
"scripts": {
"i18n-extract": "ng xi18n --output-path=locale --out-file messages.xlf --i18n-locale en && xliffmerge",
"ngx-extract": "ngx-extractor -i ./src/**/*.ts -f xlf -o ./src/locale/messages.xlf --i18n-locale en && xliffmerge"
},
"xliffmergeOptions": {
"srcDir": "src/locale",
"genDir": "src/locale",
"i18nFile": "messages.xlf",
"i18nBaseFile": "messages",
"encoding": "UTF-8",
"defaultLanguage": "en",
"languages": [
"sv",
"en"
],
"removeUnusedIds": true,
"supportNgxTranslate": false,
"ngxTranslateExtractionPattern": "@@|ngx-translate",
"useSourceAsTarget": true,
"targetPraefix": "",
"targetSuffix": "",
"beautifyOutput": false,
"allowIdChange": false,
"autotranslate": false,
"apikey": "",
"apikeyfile": "",
"verbose": true,
"quiet": false
},
Если я сделаю npm run i18n-extract
, я получу три файла: messages.xlf, messages.en.xlf, messages.sv.xlf
. Если я затем сделаю npm run ngx-extract
, три файла будут обновлены с использованием строк машинописи в конце. Когда я снова делаю npm run i18n-extract
после этого, все строки машинописного текста удаляются из сообщений * .xlf, поскольку i18n
и xliffmerge
считают, что на самом деле строки машинописного текста - это строки HTML, которые были удалены из кода HTML
. Мой обходной путь сейчас заключается в извлечении строк машинописного текста в другой файл (messages.ts.xlf
), но при этом создается только общий файл. Я копирую код в messages_ts.en.xlf
и messages_ts.sv.xlf
и добавляю теги <target>
ко всем тегам <trans-unit>
, а затем копирую его в файлы messages.en.xlf
и messages.sv.xlf
. Это действительно утомительно.
Вопрос : Как непрерывно извлекать строки из файлов HTML
и typescript
для перевода? Есть ли способ сначала запустить команды xi18n
и ngx-extractor
, а затем объединить их с xliff
? Предпочтительно в одной командной строке я могу добавить в раздел scripts
в packages.json
, чтобы уменьшить риск пропустить любой из шагов.
Я просто не могу найти что-либо в кулинарной книге i18n или в readme для polyfill, которое мне поможет. Вот что я нашел здесь в переполнении стека:
Обновление файлов перевода i18n в Angular не рассматривает команду xliff
, но я уже знал все в этой статье.
angular-i18n Angular 6 Интернационализация: как работать с переменными дает отличную справку о ngx-extractor
, но не о том, как объединять несколько языков непрерывно.