XLIFF, процесс управления версиями или перевода (шаг Diff Leverage) - PullRequest
4 голосов
/ 14 декабря 2011

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

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

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

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

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

EDIT:

Я нашел шаг 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 Ответ

3 голосов
/ 15 декабря 2011

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


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

Привет, Пол,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

...