我即将决定如何处理基于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行,我们的应用程序中有十几个这样的文件。
我仍然可以更改格式以满足我们的需求。那么你将如何翻译呢?
我一直在考虑一些可能的方法来解决这个问题:
第一个解决方案存在的问题是,英文文本可能会根据上下文转换为不同的消息。
第二种解决方案使源文件的可读性降低(尽管不是很多),并且它不能轻易处理属性的转换。
一旦将文件翻译成5-6种语言,第三种解决方案会使文件变得非常庞大和繁琐。
答案 0 :(得分:2)
我们使用标准的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 :(得分:1)
为什么不使用XML实体来定义必须本地化的术语,并且每种语言都有单独的DTD?这基本上是Firefox XUL使用的方法,例如:Localization on MDN。
答案 2 :(得分:1)
我会创建一个模板文件,例如命名为“somename.xml.template”
<devif>
<screen id="scr1" title="[SettingsForThisCard]">
<header text="[ClimateReadings]"/>
<rd setp="123" text="[AirTemperature]" unit="°C"/>
...
然后,您可以为包含以下内容的每种语言创建一堆类似ini的文件:
SettingsForThisCard =您给定语言的消息
然后,您可以使用从ini文件中获取的消息替换标记。优点是,如果标签没有翻译,则易于检测并且不会浪费翻译工作。此外,它非常简单,因此可能不是满足您特定要求的最佳选择。