Figure 26-1. Directory structure for localization properties files
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Metadata>
[ResourceBundle(""localizedContent")]
</mx:Metadata>
<mx:VBox horizontalCenter="0" verticalCenter="0" horizontalAlign="center"
borderSkin="@Resource(key='borderSkin',bundle='localizedContent')">
<mx:Label fontSize="24" text="@Resource(key='pageTitle',bundle='localizedContent')" />
<mx:Label fontSize="24" text="@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_FRFlex 3之前,你不能在运行时改变区域设置,这就意味着你需要为每个区域需求使用相应的资源包都编译一份应用程序副本。下面我们看看LocalizationResource.mxml例子编译后的效果:
Figure 26-4. LocalizationResource.mxmlwith compiler argument "-locale=en_US"
Figure 26-5. LocalizationResource.mxmlwith compiler argument "-locale=fr_FR"