使用XML 文件來支持本地化字符串。
资源集管理着一堆资源文件,它允许开發者从概念上管理一堆库中的消息。
例如,一個WApplication可能拥有一個通用的消息库,这是与其它的许多库共享的,其中包含的是重复出现的消息(例如'welcome'、'add to shopping cart'和'pay'),另外还有一个特殊的消息库,其中包含的是特殊的消息。
使用示例:
XML文件"general.xml":
* <?xml version="1.0" encoding="UTF-8"?>
* <messages>
* <message id='welcome-text'>
* Welcome dear visiter, {1} of the WFooBar magic website !
* </message>
* <message id='company-policy'>
* The company policy is to <b>please our share-holders</b>.
* </message>
* </messages>
*
支持的编码方式包括ASCII、UTF-8 (建议使用)和UTF-16。
在妳的程序中使用这个资源集:
//载入消息资源集
Wt::WApplication *app = Wt::WApplication::instance();
app->messageResourceBundle().use("general");
//使用资源集來翻译一個字符串
Wt::WText *welcome = new Wt::WText(tr("welcome-visitor").arg("Bart"));
要引用这個资源文件中的兩条消息的话,就使用WString::tr("welcome-text").arg(userName)或WWidget::tr("company-policy")。
XML 格式支持复数名词的形式,并且允许为每個语言定义不同的复数形式。每個名词的形式的個数在不同的语言中有可能是不同的,类似地,将与某個名词关联的数字转换成一个形式编号(case id)的表达式也存在这個问题(在不同的语言中的個数不同)。messages XML 元素使用兩個属性來实现对复数的支持:
•.'nplurals'属性指示的是复数形式的個数;形式(cases)是按照0 .. (nplurals - 1)编号的。
•.'plural'属性,是一个表达式,它将数字n 转换成复数形式。这个表达式应当使用C 语言的语法,但是不得使用负数,数字必须是整数,并且唯一允许的变量就是n,而它对应的就是传递给WString::trn()的個數参数。返回的值必须是一個复数形式:0 .. (nplurals - 1)。
使用WString::trn(),你就可以传递個數n,它将被用来選擇合适的复数形式。
舉個例子,看看一個描述波蘭语的翻译内容的XML 资源文件,它列出咯名词'plik'( 在波蘭
語中表示 文件 )的所有复数形式。这個名词是这样使用的:
•.1 plik
•.2,3,4 pliki
•.5-21 pliko'w
•.22-24 pliki
•.25-31 pliko'w
<?xml version="1.0" encoding="UTF-8"?>
<messages nplurals="3"
plural="n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2">
<message id="file">
<plural case="0">{1} plik</plural>
<plural case="1">{1} pliki</plural>
<plural case="2">{1} pliko'w</plural>
</message>
</messages>
然后,这個资源文件中定义的消息可使用WString::trn("file", n)來引用。
参考:
WApplication::locale()、WString::tr()、WString::trn()
HxLauncher: Launch Android applications by voice commands