Локализация с помощью ICU4C и XLIFF

Локализация с помощью ICU рекомендует хранить локализуемые данные в формате XLIFF.

Поэтому я использовал GNU xgettext извлечь строки в gettext форматировать файлы, а затем конвертировать их в файлы XLIFF с po2xliff,

Наконец, я попытался использовать конвертер формата XLIFF To ICU ResourceBundle, чтобы превратить их в формат ресурсов ICU, прежде чем я обнаружил, что он не работает. Жалуется на ошибку:

The XLIFF document is invalid, please check it first: 
Line 2, Column 68
Error: cvc-elt.1: Cannot find the declaration of element 'xliff'.

Почти такая же ошибка была сообщена несколько лет назад и еще не исправлена.

Строка 2 плохого файла XLIFF была:

 <xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">

Ну, я отредактировал строку в соответствии с example.xlf в Локализация со страницей ICU (в файле примера есть много опечаток), повторили попытку и получили:

ERROR: java.lang.NullPointerException

Итак, какова лучшая практика локализации с ICU4C и XLIFF?

2 ответа

Решение

Учитывая, что конвертер формата XLIFF в ICU ResourceBundle еще не поддерживает XLIFF 1.2 (который существует уже много лет), я бы рекомендовал держаться подальше от XLIFF и использовать po-файлы для локализации. Существует несколько инструментов локализации, которые поддерживают po-файлы: в ответах на этот и этот вопрос вы найдете довольно большое количество инструментов локализации, которые обрабатывают po-файлы, и новые еще находятся в разработке ( например, этот).

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

Я не могу ответить на ваш вопрос о наилучшей практике локализации с помощью ICU4C и XLIFF, но я видел ошибку "Недопустимый документ XLIFF", когда я использовал неправильную версию Java JDK при создании ресурса ICU.

В моей системе я вижу ошибку при использовании jdk1.7.0_67, Все отлично работает, если я использую jdk1.6.0_45, Это с ICU 52.1. Возможно, вам придется проверить, что вы используете правильный JDK для той версии ICU, которую вы используете.

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