问题描述
|
我想在我的Flex程序的翻译中正确地支持复数形式,例如Qt,GWT和gettext可能的形式。
是否有一个(开源)库可以为Flex处理此问题?
解决方法
使用gettext格式是个好主意。您有两种选择:
AsGettext被许可为LGPL,因此对于任何项目都应该可以。
as3-gettext
, 您不需要任何其他库。使用标准的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的工作原理非常相似。