2011-05-27 32 views
2

我想支持复数形式在我的Flex程序正确地翻译喜欢的是能够with QtGWTgettext复数形式

是否有一个(开源)库来处理这个Flex?

+0

查看您提供的链接;这听起来像只是一个封装的条件。我不知道有任何现有的库可以帮助解决这个问题。但我敢打赌,你可以在一个小时或更短的时间内写下类似内容,并将其作为项目在riaforge.com上发布。 – JeffryHouser 2011-05-27 14:36:32

回答

0

使用gettext格式是个好主意。你有两种选择:

4

你不需要任何额外的库。使用标准的Flex ResourceManager。在文本资源定义这样的复数形式:

minute=minute, minutes 

在这种情况下,当你以后的此类资源要求的

resourceManager.getStringArray('BundleName', 'minute') 

你得到多元价值观的像

[ 'minute', 'minutes' ] 
数组

然后使用类似于

function getPlural(value:Number, plurals:Array):String 
{ 
    if (ResourceManager.getInstance().localeChain[0] == 'en_US') 
     if (value == 1) return plurals[0] else return plurals[1]; 
} 

为当前语言环境选择正确的文本。你可以在一些包中直接定义这个函数,这对所有类都是通用的。不幸的是,你不能避免这样的功能,因为许多语言的复数规则是不同的。例如,对于俄语来说,表达将会复杂得多,并将采取三个复数形式。
顺便说一下,这种方法与gettext的工作方式非常相似。

+0

非常有趣。如果你在实际文本中需要它们,你如何转义逗号? – 2012-10-05 07:58:56

+0

@WimDeblauwe不幸的是,这是不可能的。如果您查看getStringArray()方法源代码,您将看到简单的'var array:Array = String(value).split(“,”)'用法。我看到的唯一方法是以某种方式在ResourceManagerImpl中重写此方法,但我从来没有见过这样的用例。 – koldoon 2012-10-09 06:09:30