Как использовать форматы файлов xliff или po l10n in.net (C# / ASP.Net) развитие

Я исследовал о формат XLIFF и РО i18n форматы файлов и кажется, что они широко используются и поддерживаются. Есть много бесплатных инструментов для управления переводами в xliff / po файлы.

однако до сих пор я не мог найти хорошее решение о том, как использовать файлы xliff или po в .net (C# / ASP.Net) проекты. Я ожидал бы какой-то xliff/po => resx конвертер, но до сих пор не нашли еще.

в то же время многие инструменты поддерживают преобразование xliff / po файлы в java .свойства.

Если у вас есть опыт реализации l10n через xliff или po файлы в проектах .Net - пожалуйста, дайте совет и поделитесь лучшими практиками о том, как это работает.

PS: Я бы предпочел использовать формат xliff, так как я нахожу его более чистым и более функциональным, но po также является опцией.

4 ответов


файлы PO и XLIFF обычно работают по-разному:

  • po-файлы-это файлы ресурсов, которые выполняются в двоичном формате, а затем доступны с помощью библиотек gettext (). Иногда PO используется в качестве формата извлечения, такого как XLIFF, но это не является его первоначальной целью.

  • XLIFF-это файлы извлечения, которые создаются путем извлечения файла ресурсов (например, resx) в XLIFF, а затем объединяются обратно в исходный формат.

поэтому для XLIFF вы должны искать инструменты, которые делают resx -> xliff -> resx, а не xlif -> resx.

инструменты, которые извлекают / объединяют файлы XLIFF, обычно называются фильтрами. Есть довольно много коммерческих инструментов перевода, которые примут XLIFF, и некоторые, которые также могут создать XLIFF (Swordfish, Trados Studio и т. д.).

есть также несколько инструментов с открытым исходным кодом, которые могут извлекать / объединять XLIFF: File2XLIFF4j, например (но я не думаю, что он поддерживает resx файл).

Rainbow, из проекта Okapi, поддерживает resx. "Старая" версия .net (Rainbow 5: Okapi на SourceForge) имеет фильтр, посвященный файлу resx, и может обрабатывать их очень хорошо; даже с двоичными данными. Он может столкнуться с проблемой со сторонними элементами управления, хотя (см.http://okapi.sourceforge.net/Release/Filters/Help/netres.htm для деталей).

новая версия java (Rainbow 6:http://code.google.com/p/okapi/) поддержка resx через его XML-фильтр и работает с простой resx, но если у вас есть двоичные данные в текст в этих записях не будет извлечен.

- ys


вы также можете рассмотреть пакета i18n by Даниил Кренна, доступно из nuGet. Он использует файлы PO в качестве хранилища по умолчанию для локализованного текста.


Я использовал PO для управления проектом .Net после .файлы resx начали выходить из-под контроля. Я использовал его "как формат извлечения, такой как XLIFF" (см. Ив комментария). Наши существующие .файлы resx были экспортированы / объединены один раз в один.po-файл на язык, который затем стал нашими авторитетными языковыми файлами, из которых все файлы resx будут автоматически сгенерированы.

проекты я не АСП, поэтому я не знаю о пакете упомянутых mcw0933, но реализация Mono resgen.exe имеет некоторые простые возможности преобразования po resx. Однако, чтобы сохранить существующие комментарии и автоматически добавить исходный текст в качестве дополнительных комментариев, я расширил инструмент преобразования mono до точки, где тот, который я использую, в основном переписан.

Я положил расширенный .почтовый. >=.

Что касается выбора .po для управления переводами проекта C#, .po прост и дружелюбен, но есть некоторые неудобства от использования его способом, который немного отличается от его первоначального использования в gettext, и у меня нет опыта, чтобы сказать, был ли это лучший выбор, чем xliff, но возможность управлять переводами и автоматизировать задачи было намного лучше, чем иметь дело с файлами resx, как мы были в прошлом.

незначительные неудобства от использования PO немного иначе, чем его намерение:

  • потому что gettext использует msgid в качестве поля для хранения исходная непереведенная строка в, я должен был сделать resgenex архивировать исходную строку перевода в прикрепленный комментарий вместо поля, предназначенного для этой цели.
  • некоторые инструменты предполагают, что msgid будет содержать оригинальный английский перевод (а не только строку идентификатора), что может означать, что опция автоматической проверки ошибок этого инструмента не очень полезна, или это может означать что-то, что заставляет вас выбирать другой инструмент и т. д. Большинство инструментов не делают предположений хотя.
  • некоторые .po инструменты, такие как \n вместо \r\n

проект я изначально писал resgenEx на два .resx файлы и один .файл isl для каждого поддерживаемого языка, но скоро мне нужно будет управлять всеми переводами для проекта .Net, который имеет несколько файлов resx для каждого класса в коде. Когда это произойдет, я решу, следует ли мне продолжать использовать .ПО или использовать xliff или что-то еще. Если я продолжу употреблять .затем я уберу resgenEx и вероятно, нужно добавить больше функций, таких как возможность автоматического добавления префиксов имени сборки и имени класса в msgids.


вы также можете попробовать PhraseApp. PhraseApp является платформой управления переводом и поддерживает широкий спектр форматов. Таким образом, вы можете загрузить его в любом формате и экспортировать его снова в формате, который лучше всего подходит в вашем случае, как XLIFF, po или resx. Таким образом, вам не нужно принимать решение о едином формате перевода. И вы всегда можете позже легко переключиться на другой формат. PS: полное раскрытие я работаю в команде PhraseApp.