我即将决定如何处理基于 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/