26.2.使用本地化资源包

26.2.1. 问题
我想在应用程序中支持少量的可选语言。.
26.2.2. 解决办法
使用编译的资源包提供本地资源。
26.2.3. 讨论
对于基础的Flex应用程序本地化需求,你可以使用资源包。资源包是一些ActionScript对象,提供一个接口通过数据绑定和ActionScript代码访问由属性文件中定义的本地化内容。应用程序的每个捆绑包表示一个单独的本地化属性文件。属性文件是一个文本文件,包含本地化属性键和关联值的列表。键值对以key=value的格式,属性文件以.properties扩展名保存。

本地化值是文本字符串,嵌入的资源可以是图像,ActionScript 类引用。当本地化应用程序时,为属性文件的每一项定义一个实体以完全支持替代语言用于更新应用程序。下面的属性文件例子定义了一些英语(美国)的一些属性值:
#Localization resources in American English
pageTitle=Internationalization Demo
language=American English
flag=Embed("assets/usa.png")
borderSkin=ClassReference("skins.en_US.LocalizedSkin")

当本地化应用程序时,你需要创建一个属性文件副本,它包含对应语言的相关内容。如果你的应用程序需支持美国英语和法语,在这个例子中,你需要创建两个属性文件,包含各自的翻译文本,一个代替美国国旗的法国国旗图片引用,以及一个边框皮肤引用:
#Localization resources, En Francais
pageTitle=Demo d'internationalisation
language=Francais
flag=Embed("assets/france.png")
borderSkin=ClassReference("skins.fr_FR.LocalizedSkin")

当设置你的属性文件时,需要考虑几个因素,其中最重要的当属文件大小和应用程序复杂度。

你可能希望为每个自定义组件创建一个属性文件,例如,共享资源里的相关组件包。你可能要定义一个用于全局范围的属性文件,比如包含自定义应用程序错误信息,一些按钮上使用的通用标签。

不管你如何分散本地化属性,你都需要创建一个目录结构来组织这些文件,如Figure 26-1所示,,最好的方法就是用locale或localization作为目录名,下面包含用各自区域标识命名的子目录放置各自的属性文件,这样编译器就能轻松的找到这些属性文件。

Figure 26-1. Directory structure for localization properties files


当你构建程序时,编译器会为每个属性文件创建一个ResourceBundle类的子类。访问属性文件中定义项的最简单方法是使用@Resource指令。使用这个方法,编译器会寻找对应的属性值用以替换。使用@Resource指令的好处是你不必编写关于ResourceBundle实例的任何代码,编译器已经帮你做了所有事情。@Resource指令接受两个参数,一个捆包标识和一个键,它用来寻找相应属性文件中对应的属性值。例如,要引用名为localizationProperties.properties属性文件的applicationTitle属性名,使用下面的命令:
@Resource(key='applicationTitle', bundle='localizationProperties')
看下面一个完整的例子,LocalizationResource.mxml,定义了一个小应用程序:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="absolute">
<mx:Metadata>
[ResourceBundle(""localizedContent")]
</mx:Metadata>
<mx:VBox horizontalCenter="0verticalCenter="0horizontalAlign="center"
borderSkin="@Resource(key='borderSkin',bundle='localizedContent')">

<mx:Label fontSize="24text="@Resource(key='pageTitle',bundle='localizedContent')" />
<mx:Label fontSize="24text="@Resource(key='language',bundle='localizedContent')" />
<mx:Image source="@Resource(key='flag',bundle='localizedContent')" />
</mx:VBox>
>
元标签[ResourceBundle]告诉编译器需要哪个资源包。这点非常重要,因为资源包在编译期被构建,支持语言所相关的所有资源都必须被编译进SWF。

编译器也需要为特定的区域构建本地化支持进行配置。在Flex Builder 3中,在工程的属性对话框中设置。在Flex Build Path面板中,在source path中加入本地化文件路径。如果你按照上面的工程目录中使用locale目录的话,那这里应该是locale/{locale},如图Figure 26-3. 另外,在Flex Compiler面板中添加参数标识希望支持哪种语言。例如支持美国英语和法语,输入-locale en_US,fr_FR(Figure 26-2). 当编译应用程序时,编译器会寻找对应的属性文件,并用locale/en_US和locale/fr_FR中的属性文件替换掉source path中的表达式值。

Figure 26-2. Localization build path entry



Figure 26-3. Localization compiler arguments


在构建本地化应用程序之前你必须先本地化相关的Flex Framework内容,如错误信息。Adobe提供了一个叫copylocale工具拷贝文件到新的locale中。你需要重复此步为每个locale都拷贝一份。注意copylocale实际上没有拷贝本地化文件,它只是用于编译应用程序目的。要运行此命令,简单的传入默认本地化标识和目标本地化标识:
Copylocale.exe en_US fr_FR
Flex 3之前,你不能在运行时改变区域设置,这就意味着你需要为每个区域需求使用相应的资源包都编译一份应用程序副本。下面我们看看LocalizationResource.mxml例子编译后的效果:

Figure 26-4. LocalizationResource.mxmlwith compiler argument "-locale=en_US"



Figure 26-5. LocalizationResource.mxmlwith compiler argument "-locale=fr_FR"

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


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