I18N XML-документов - PullRequest
       8

I18N XML-документов

5 голосов
/ 28 марта 2009

Я собираюсь решить, как обработать интернационализацию формата на основе XML для описания пользовательского интерфейса.

Формат обычно выглядит примерно так:

...
<devif>
  <screen id="scr1" title="Settings for this and that">
    <header text="Climate readings"/>
    <rd setp="123" text="Air temperature" unit="°C"/>
    <rd setp="234" text="Humidity" unit="%RH"/>
    <rd setp="345" text="CO2" unit="ppm"/>

    <header text="Settings"/>
    <wr setp="567" text="Air temperature demand" unit="°C"/>
  </screen>
  ...
</devif>

Каждый файл содержит множество экранов и может содержать до 10 000 строк, и у нас есть дюжина таких файлов в нашем приложении.

Я все еще могу изменить формат в соответствии с нашими потребностями. Итак, как бы вы перевели это?

Я думал о некоторых возможных способах справиться с этим:

  • Отдельный файл для каждого языка, содержащий текст на английском языке и переведенный текст
  • Использование идентификатора для каждого тега и использование отдельного файла с переведенным текстом для каждого идентификатора
  • Поместить все переводы в один файл

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

Второе решение делает исходный файл менее читаемым (хотя и ненамного) и не позволяет легко переводить атрибуты.

Третье решение сделало бы файл очень большим и громоздким для работы после того, как файл был переведен на 5-6 языков.

Ответы [ 3 ]

2 голосов
/ 28 марта 2009

Мы используем стандартные TMX файлы, которые являются стандартными файлами XML для хранения интернационализированных литералов. Каждая запись идентифицируется меткой, которая является ссылкой по всему коду. В каждой записи есть все возможные переводы, и самая важная часть заключается в том, что TMX - это стандарт, используемый программами перевода и профессионалами.

Если у вас уже есть файлы XML для хранения ваших литералов, вы можете преобразовать их с помощью таблицы стилей XSLT.

Вот пример формата:

<?xml version="1.0" encoding="UTF-8"?>
<tmx>
    <body>
        <tu tuid="$ALARM_BARCODE_READER_COMMS">
            <tuv lang="ES">
                <seg>Lector códigos de barras: No Operativo</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Barcode reader: Not operative</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:通讯错误</seg>
            </tuv>
        </tu>
        <tu tuid="$ALARM_BARCODE_READER_FAIL">
            <tuv lang="ES">
                <seg>Lector códigos de barras: Fallo</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Barcode Reader: Fail</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:故障</seg>
            </tuv>
        </tu>
        <tu tuid="$NO_PAYMENT_MODE_AVAILABLE">
            <tuv lang="ES">
                <seg>No hay sistemas de pago disponibles</seg>
            </tuv>
            <tuv lang="EN">
                <seg>No payment systems available</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:故障</seg>
            </tuv>
        </tu>       
        <tu tuid="$ALARM_BLACKLIST_CARD">
            <tuv lang="ES">
                <seg>Tarjeta de pago en lista negra</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Payment card in blacklist</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>付费的IC卡是黑名单卡</seg>
            </tuv>
        </tu>
   </body>
</tmx>
1 голос
/ 28 марта 2009

Я бы создал файл шаблона, например с именем "somename.xml.template"

<devif>
  <screen id="scr1" title="[SettingsForThisCard]">
    <header text="[ClimateReadings]"/>
    <rd setp="123" text="[AirTemperature]" unit="°C"/>
...

Затем вы можете создать группу ini-подобных файлов для каждого языка, содержащую:

SettingsForThisCard = ваше сообщение на данном языке

Затем вы можете заменить теги сообщениями, прочитанными из INI-файлов. Преимущество состоит в том, что если есть тег, который не имеет перевода, его легко обнаружить и не тратить усилия на перевод. Кроме того, это очень просто, поэтому не может быть лучшим для ваших конкретных требований.

1 голос
/ 28 марта 2009

Почему бы не использовать объекты XML для определения терминов, которые должны быть локализованы, и у них есть отдельные DTD для каждого языка? По сути, это подход, используемый Firefox XUL, например: Локализация в MDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...