xml - XML 文档的 I18N

标签 xml localization internationalization

我即将决定如何处理基于 XML 的 UI 描述格式的国际化。

格式通常如下所示:

...
<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 行,我们的应用程序中有十几个这样的文件。

我仍然可以更改格式以最适合我们的需要。那么你会如何翻译这个呢?

我一直在考虑一些可能的方法来处理这个问题:

  • 包含英文文本和翻译文本的每种语言的单独文件
  • 为每个标签使用一个 ID,并为每个 ID 使用一个包含翻译文本的单独文件
  • 将所有翻译放在同一个文件中

第一个解决方案的问题是,英文文本可能会根据上下文翻译成不同的消息。

第二种解决方案降低了源文件的可读性(虽然不是很多),并且它不能轻松处理属性的转换。

一旦文件被翻译成大约 5-6 种语言,第三种解决方案会使文件变得非常大且难以处理。

最佳答案

我们使用标准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>

关于xml - XML 文档的 I18N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692789/

相关文章:

windows-phone-7 - 使用 Visual Studio Express 2012 本地化 Windows Phone 应用程序标题

unicode - Unicode 文本的罗马化

java - startActivity()期间的"Application was stopped"

javascript - jquery按属性值过滤xml数据

xml - 可以让 Chrome 对本地文件执行 XSL 转换吗?

javascript - 在 InDesign 中将 XML 元素链接到页面项目

ios - 后备语言 iOS(具有不完整的 Localizable.strings 文件)

java - 如何在 GWT 应用程序中显示一种格式?

python - 使用 Pyramid 和 python 3 进行国际化

javascript - 数字、日期和货币的国际化 (i18n) (JavaScript)