26.3.使用本地化资源管理器

26.3.1. 问题
我想支持小数量的本地化需求或者在运行时通过编程决定区域,或者由用户选择区域。
26.3.2. 解决办法
使用ResourceManager类支持多个区域,允许应用程序在运行时改变区域设置。
26.3.3. 讨论
ResourceManager类是编译器根据本地化属性文件创建资源包所用的最主要的ActionScript接口。它可以接受各种类型的资源包资源以及提供一种机制可动态设置所需区域。资源管理器是一个单例模式,管理着整个程序的区域设置。每个继承自UIComponent的类都有个protected属性名为resourceManager,它就是一个资源管理器单例的引用。

虽然@Resource指令可方便的绑定本地化内容到MXML标签上,但是对于ActionScript 组件或ActionScript方法涉及到本地化资源时它就没什么用武之地了。这种情况下,最好使用资源管理器,因为它提供了一些方法用于访问本地化数据或者数据绑定表达式的目标使用。下面的例子引用之前的LocalizationManager.mxml,用ResourceManager方法替换26.2节的LocalizationResource.mxml中使用的@Resource 指令:
+展开
-XML
<mx:VBox horizontalCenter="0verticalCenter="0horizontalAlign="center"
borderSkin="{resourceManager.getClass(''localizedContent','borderSkin')}">

<mx:Label fontSize="24text="{resourceManager.getString('localizedContent', 'page Title')}" />
<mx:Label fontSize="24text="{resourceManager.getString('localizedContent', 'lang uage')}" />
<mx:Image source="{resourceManager.getClass('localizedContent','flag')}" />
</mx:VBox>

这些方法的名称非常接近于载入的资源类型,其中的参数即资源绑定名称和所需属性的键值也和@Resource指令相似。

使用资源管理器绑定本地化属性值到它们的目标上还有另一个好处:Flex 3可以在运行时动态改变区域设置,现在不需要强制为每个区域都编译一个SWF文件了。方法的绑定属性可以使得应用程序能自己更新改变后的区域设置。在LocalizationManager.mxml例子中,提供按钮让用户选择英语或法语:
+展开
-XML
<mx:HBox>
<mx:Button label="In Englishclick="resourceManager.localeChain = ['en_US']" />
<mx:Button label="En Francaisclick="resourceManager.localeChain = ['fr_FR']" />
</mx:HBox>

在这个例子中,localeChain属性根据用户选择的按钮而被重置。localeChain属性是一个字符串数组,表示所需区域的顺序列表。这是非常有用的,例如,应用程序将从浏览器通过Accept-Language HTTP 标头或主机操作系统的语言首选项接收有关用户的语言首选项的信息,英国的用户首选的区域设置是en_GB,但用户也可以接受en_US。当资源管理器的方法被调用时,它将根据在localeChain中定义的指定名称顺序寻找资源绑定包,因此,要这样设置localeChain属性提供en_US给英国用户选择:
+展开
-ActionScript
resourceManager.localeChain = ["en_GB""en_US"];

加支付宝好友偷能量挖...


评论(0)网络
阅读(72)喜欢(0)flash/flex/fcs/AIR