XLIFF, процесс управления версиями или перевода (шаг Diff Leverage)

Я рассматриваю возможность использования XLIFF для стандартизации усилий по локализации на предприятии. Я очень плохо знаком с xliff и, проведя некоторое исследование, я решил использовать следующий общий процесс:

  1. Извлекать строки из ресурсов проекта разработки (.resx для.Net, .properties для Java) - хороший способ сделать это, как я обнаружил, это использовать Rainbow из Okapi Localization Toolbox - и использовать команду "Utilities => Translation Kit Creation"
  2. Затем переведите извлеченный файл, как описано на http://www.opentag.com/okapi/wiki/index.php?title=How_to_Translate_XLIFF_Documents например, с помощью приложения Virtaal.
  3. И, наконец, преобразовать переведенный xliff обратно в исходный формат (resx/properties) - что можно сделать и с Rainbow "Utilities => Translation Kit Post-Processing"

Пока все ясно, однако я хотел бы знать, каковы лучшие практики при добавлении или изменении строковых ресурсов? Я бы предпочел не переводить все ресурсы каждый раз, когда к строковым ресурсам добавляется новая строка в исходном формате (resx / properties)

Это также будет хорошо, если есть поддержка версий для переводов - так что переводы на несколько языков будут объединены (предоставьте одинаковый набор строк), если они будут помечены одной и той же версией. И версия обновляется при добавлении новой строки или изменении существующих строк.

Есть ли готовое решение для этого? Или это то, что нам придется строить самостоятельно?

РЕДАКТИРОВАТЬ:

Я нашел шаг Diff Leverage в библиотеке конвейеров Okapi Rainbow, но мне сложно заставить его работать. Вот два xliff-файла. Первая была первой версией ресурсов, переведенной на французский, вторая - файлом, созданным из новой версии ресурсов, со следующими изменениями:

  • 1 строка обновлена ​​(AdminTitleResource теперь является ресурсом администрирования)

  • 1 строка удалена (HomeLinkResource пропал)

  • Добавлены 2 новые строки (Проект и Компания)

Но использование конвейера Diff Leverage не приводит к умному объединению переводов. Есть идеи почему?

Переведенный xliff для предыдущей версии ресурсов:

<?xml version="1.0" encoding="windows-1252"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:okp="okapi-framework:xliff-extensions" version="1.2">
<file original="/Messages.resx" source-language="en-us" target-language="fr-fr" datatype="xml">
<body>
<trans-unit id="1" resname="AccessDenied" xml:space="preserve" approved="yes">
<source xml:lang="en-us">Access denied</source>
<target xml:lang="fr-fr" state="translated">Accès refusé    </target>
<note>Error message</note>
</trans-unit>
<trans-unit id="2" resname="AdminTitleResource" xml:space="preserve" approved="yes">
<source xml:lang="en-us">Administration</source>
<target xml:lang="fr-fr" state="translated">Administration</target>
<note></note>
</trans-unit>
<trans-unit id="3" resname="HomeLinkResource" xml:space="preserve" approved="yes">
<source xml:lang="en-us">Main page</source>
<target xml:lang="fr-fr" state="translated">Page web principale</target>
<note></note>
</trans-unit>
<trans-unit id="4" resname="SelectCategoriesResource" xml:space="preserve" approved="yes">
<source xml:lang="en-us">Categories</source>
<target xml:lang="fr-fr" state="translated">Catégories</target>
<note></note>
</trans-unit>
<trans-unit id="5" resname="SelectConfigResource" xml:space="preserve">
<source xml:lang="en-us">Configuration</source>
<target xml:lang="fr-fr" state="needs-review-translation">Paramètres</target>
<note></note>
</trans-unit>
<trans-unit id="6" resname="SelectGroupsResource" xml:space="preserve">
<source xml:lang="en-us">User groups</source>
<target xml:lang="fr-fr" state="needs-review-translation">Utiliser le groupe</target>
<note></note>
</trans-unit>
</body>
</file>
</xliff>

Как получить файл XLIFF только с теми строками, которые необходимо перевести?

Новый файл с изменениями, перечисленными выше:

<?xml version="1.0" encoding="windows-1252"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:okp="okapi-framework:xliff-extensions" version="1.2">
<file original="/Messages_v2.resx" source-language="en-us" target-language="fr-fr" datatype="xml">
<body>
<trans-unit id="1" resname="AccessDenied" xml:space="preserve">
<source xml:lang="en-us">Access denied</source>
<target xml:lang="fr-fr">Access denied</target>
<note>Error message</note>
</trans-unit>
<trans-unit id="2" resname="AdminTitleResource" xml:space="preserve">
<source xml:lang="en-us">Administration Resource</source>
<target xml:lang="fr-fr">Administration Resource</target>
<note></note>
</trans-unit>
<trans-unit id="3" resname="SelectCategoriesResource" xml:space="preserve">
<source xml:lang="en-us">Categories</source>
<target xml:lang="fr-fr">Categories</target>
<note></note>
</trans-unit>
<trans-unit id="4" resname="SelectConfigResource" xml:space="preserve">
<source xml:lang="en-us">Configuration</source>
<target xml:lang="fr-fr">Configuration</target>
<note></note>
</trans-unit>
<trans-unit id="5" resname="SelectGroupsResource" xml:space="preserve">
<source xml:lang="en-us">User groups</source>
<target xml:lang="fr-fr">User groups</target>
<note></note>
</trans-unit>
<trans-unit id="6" resname="Project" xml:space="preserve">
<source xml:lang="en-us">Project</source>
<target xml:lang="fr-fr">Project</target>
<note></note>
</trans-unit>
<trans-unit id="7" resname="Company" xml:space="preserve">
<source xml:lang="en-us">Company</source>
<target xml:lang="fr-fr">Company</target>
<note></note>
</trans-unit>
</body>
</file>
</xliff>

1 ответ

Решение

Для этого есть ответ здесь: http://tech.groups.yahoo.com/group/okapitools/message/2494


РЕДАКТИРОВАТЬ: содержание связанного сообщения

Привет, Пол,

Я пытаюсь выяснить, как использовать средство сравнения для улучшения опыта перевода и получения обновленного файла xliff при объединении / использовании существующего перевода с новой версией документа с добавленными / измененными / удаленными строками.

Как отметил Джим, с помощью файлов XLIFF вы сможете воспользоваться преимуществами шагов на основе идентификатора.

Но шаг рычага Diff будет работать тоже. Вот как это сделать:

Я предполагал, что у вас есть файлы XLIFF и вы хотите просто обновить их. Вы можете создавать конвейеры, которые выполняют дополнительные функции, такие как создание набора для перевода и т. Д., Но это не усложняет задачу.

Сначала вам нужно поместить новый исходный файл в список ввода 1, а переведенный файл - в список ввода 2.

Затем вы можете создать следующий конвейер:

  • Необработанный документ для фильтрации событий
  • Diff Leveraging
  • Фильтровать события в необработанный документ

В параметрах шага Diff Leverage: убедитесь, что установлена ​​опция "Копировать в / поверх цели".

Затем выполните конвейер.

Я приложил сравнение (compare_out.html) между оригинальным новым файлом и выходным файлом. Как видите, весь текст, который можно было использовать, теперь находится в выводе. Ваша запись "AdminTitleResource" не переведена, поскольку ее источник в переведенном файле отличается, а две новые записи также не переведены.

Вы также обратите внимание на новые атрибуты Approved='Yes', которые указывают, что перевод был выполнен. Этот дополнительный флаг можно использовать, чтобы отличать записи, требующие перевода, от той, которая была использована.

По некоторым причинам у двух из заемных записей нет этого: я должен буду смотреть на это и сообщать. Это может быть ошибка или какое-то условие, которое я не помню (возможно, Джим делает).

Шаг копирования на основе идентификатора может быть почти лучше. Это скопировало бы переведенный текст путем сопоставления с переименованием записей. Я говорю почти потому, что в настоящее время он не смотрит на исходные тексты, поэтому вы получаете перевод, даже если новый источник отличается (это не "усиливающий" шаг). Но мы могли бы добавить опцию, чтобы сделать эту дополнительную проверку, и это сделало бы шаг работать как шаг заимствования. Я постараюсь найти время, чтобы сделать это.

Надеюсь, это поможет

Другие вопросы по тегам