Рабочий процесс/передовая практика для XLIFF

Я использую инструмент командной строки (ng-xi18n), чтобы извлечь строки i18n из приложения angular 2, которое я написал. Результатом этой команды является файл messages.xlf. Исходя из фона .po и не знакомого с .xlf, я предположил, что этот файл эквивалентен файлу .pot (исправьте меня, если я ошибаюсь).

Затем я предположил, что если я хочу перевести свое приложение, мне пришлось cp messages.xlf messages.de.xlf иметь копию (messages.de.xlf) файла шаблона (messages.xlf), где я могу перевести каждое сообщение на немецкий (следовательно, .de.xlf).

После перевода некоторых фиктивных текстов и запуска приложения я увидел, что он работал так, как ожидалось, поэтому я прекратил перевод и продолжил разработку приложения. Через некоторое время я добавил несколько строк i18n и в конце концов подумал, что мне нужно обновить свой шаблон. И это то, где вещи едва ли можно обслуживать. Я обновил файл шаблона messages.xlf и быстро задавался вопросом, как я могу обновлять новые строки в уже перенесенном файле messages.de.xlf, не теряя своего прогресса.

Когда я разрабатывал файлы .po, это не было проблемой благодаря хорошим инструментам, таким как poEdit, но я не нашел ничего сопоставимого для .xlf. Попробовав некоторые инструменты, я подумал, что лучшим выбором будет Lokalize, но я не нашел возможности объединить файл шаблона с уже переведенными (но устаревшими) файлами.


До сих пор это был скорее эссе, чем вопрос, поэтому вот краткое резюме:

  • Является ли процесс работы с файлами .xlf действительно сопоставимым с .po, как я изначально думал (описано выше), или он совершенно другой?
  • Как я могу обновить мои уже переведенные файлы?
  • Каковы наилучшие методы работы с файлами .xlf?
  • Что такое доказательство концептуальных инструментов для работы с .xlf?

Sidenotes:

  • Руководство Lokalize вообще не помогло. Я вижу много функций, которые кажутся многообещающими, например:
    • "Файл" > "Обновить файл из шаблона". Я не нашел ничего в руководстве, чтобы объяснить эту функцию. Если я нажму на это, ничего не произойдет.
    • "Синхронизировать" > "Открыть файл для синхронизации/слияния". Кажется, это функция объединить два похожих файла (несколькими переводчиками), а не инструмент для обновления файла перевода из шаблона. Несмотря на наличие всплывающей подсказки на вкладке "Первичная синхронизация Lokalize", уведомляющая меня о "x unmatched entries", я просто не мог найти ничего, чтобы добавить эти несопоставимые записи в мой файл .de.xlf.
    • [Обновить] Оказывается, у меня были аналогичные проблемы, как в этом вопросе. После понижения моей версии Lokalize до предложенного, многие проблемы (в том числе упомянутые в вопросе) исчезли. Однако теперь опция "Обновить файл из шаблона" выделена серым цветом, и я не знаю почему.
  • Я также пробовал OmegaT, который вообще не работает на моей платформе (Ubuntu 16.04).
  • [Обновление] Virtaal отлично подходит для слияния новых строк из шаблона, но пользовательский интерфейс в целом плохо разработан...
  • Googling не помог, так как каждый хит, похоже, связан с XCode или чем-то еще.

Спасибо за любую помощь заранее, я действительно ценю это

Ответ 2

Я написал небольшой инструмент командной строки npm, называемый xliffmerge. В принципе он делает то же самое, что и Роланд Олденгарм с его задачами gulp, описанными в его статье в блоге. Это бесплатно, и вы можете посмотреть его на https://github.com/martinroob/ngx-i18nsupport#readme

Ответ 3

Лучшее решение автоматизации документооборота, о котором я уже говорил, относится к Roland Oldengarm blog entry "Angular 2: Автоматизированный рабочий процесс i18n с использованием gulp" . Подводя итог, в нескольких десятках строк кода Gulp он создал инструментарий для решения некоторых проблем, с которыми вы столкнулись. В частности, он запускает ng-xi18n для извлечения сообщений; создает английский перевод с источниками, скопированными на целевые объекты; обновляет существующие переводы, добавляя новые транс-единицы, сохраняя существующие и удаляя отсутствующие; а затем предоставляет все xlf файлы в качестве TypeScript строковых констант. Затем эти последние строки можно импортировать для поставки bootstrapModule с опциями поставщик переводов.

Предостережение: я не использовал это точное решение (и код) самостоятельно, но мне удалось выставить сгенерированные строки xlf как TypeScript и использовать их в приложении так же, как описано. Что касается поддержания переводов, я использовал IntelliJ IDEA (WebStorm) функции сравнения файлов и Counterparts Lite (для Mac) для этого. Мои собственные усилия все еще находятся на ранних стадиях, но они работают изо всех сил для приложения, которое активно развивается.