我要求能够提供英语和几种亚洲语言的flex组件.我看过flex文档,似乎我必须构建几个swf,这感觉不对.
有谁知道用不同语言捆绑字符串资源和处理字体的简单实用的方法?
我想你知道如何本地化Flex应用程序的基础知识,但是如果你想了解更多,那么这里有一个很好的和全面的描述:运行时本地化.
在Flex 3中,您有三种方法可以解决问题:
将所有语言编译到SWF中并在运行时切换语言
为每种语言编译单独的SWF
将无语言或默认语言编译到SWF中并在运行时加载其他语言
第一种选择可能是最常见的,最不复杂的并且没有很多缺点.如果您有特殊需求,可以使用另外两个,例如必须不惜一切代价降低SWF的大小,或者需要在运行时从数据库加载所有字符串.
要实现第一个选项,您需要为每种语言创建资源包(基本上是.properties
位于以语言环境命名的目录中的多个文件,例如en_US表示美国英语,sv_SE表示瑞典语).在代码中,您通过调用资源管理器来引用字符串:
这将在当前语言环境中从"mybundle.properties"编译的资源包中检索名为"mystring"的字符串.
要确保每个语言环境实际编译到应用程序中,您需要添加-locale=en_US,sv_SE
到编译器标志(但将en_US,sv_SE
部件更改为您拥有资源包的语言).您还需要将目录的位置添加到源路径:( -source-path+=locale/{locale}
" {locale}
"部分将自动替换为-locale
标志的值).
现在,您已将所有语言编译到SWF中,并可在运行时更改语言.这样做的方法是修改localeChain
资源管理器的属性:
resourceManager.localeChain = ["sv_SE", "en_US"];
通过上面显示的设置,资源管理器将首先查看瑞典资源包,其次是美国英语.您可以随时设置其他订单,这样做会改变应用程序中的所有文本.
我鼓励你阅读我上面提到的描述,它更详细地解释了这一点,并且最有可能以更容易理解的方式解释.它还解释了在使用en_US以外的语言环境编译应用程序之前,如何做一些准备工作.
你遇到的另一个问题是字体.那个比较棘手.最好的方法是使用具有完整Unicode字符范围的字体,这样您只需要嵌入该字体,并且可以显示任何文本.但是,这意味着您的选择有限.我知道在Windows中至少有一个版本的Aria拥有大量的角色,在Mac上有一个Helvetica(我认为,或者它可能是Lucida Grande,或两者兼而有)也有大多数版本的你需要显示许多亚洲语言.
将所有语言嵌入到同一个SWF中通常对增加文件大小没什么影响,因为文本非常轻量级,但字体绝对不是.嵌入整个Unicode版本的Arial可以将SWF的文件大小增加几兆字节,这对于Web应用程序来说很糟糕.根据情况,您可能必须为每种语言编译一个SWF,因为字体数据会使SWF变得难以处理.