Flex的国际化支持
Author:lvmy
Email:[email protected]
前言:由于Flex3本身不支持中文的国际化,所以我们要自行制作中文的本地支持文件,具体方法如下:
1、到当前需要国际化的flex项目的SDK目录的bin下执行 copylocale en_US zh_CN 2、在flex项目src同级目录创建目录 ../locale/ 3、在locale 下创建中文资源文件夹(../locale/zh_CN) 以及 英文资源文件夹(../locale/en_US) 4、分别在../locale/zh_CN 和 ../locale/en_US 下创建语言包资源文件 locale.properties 5、在当前项目-->右键-->Properties-->Flex Build Path-->Source path-->Add Folder,在弹出的文本框中输入locale\{locale} 6、在当前项目-->右键-->Properties-->Flex Compiler-->在Additional compiler arguments 的最后输入 -locale zh_CN en_US,这里默认语言是中文
到这里为止就已经创建好了前置环节,下面将用一个简单的实例来介绍具体的使用:
1、加载语言包资源文件,在Application添加如下代码:
<!-- locale即为资源文件的名字,不包含后缀 --> <mx:Metadata> [ResourceBundle("locale")] </mx:Metadata>
2、在Application中创建一个Linkbar,数据源内有两条数据,稍候用来生成两个LinkButton来切换界面的中英文显示。
<mx:LinkBar dataProvider="{[{'label' : '中文', 'locale' : 'zh_CN'},{'label' : 'English', 'locale' : 'en_US'}]}" labelField="label"/>
3、在Application中创建一个Label,稍候将使用这个label来展示国际化支持
<mx:Label />
4、在刚才创建好的两个资源文件 ../zh_CN/locale.properties 和 ../en_US/locale.properties 中添加内容以提供语言支持
label_text = 这是一个Label
label_text = This is a label
5、使用resourceManager类的getString方法获取当前语言环境的字符串,并赋值给label的text属性:
<!-- getString方法有两个参数,第一个即资源文件名,第二个即资源包中对应的key --> <mx:Label fontSize="30" text={resourceManager.getString('locale','label_text')}/>
6、到这里运行项目label已经可以显示中文的text,现在为前面预留的Linkbar添加itemClick事件并触发语言切换:
<mx:Script> <![CDATA[ import mx.events.ItemClickEvent; private function locale_change(event:ItemClickEvent):void{ //为了免去判断,在这里使用如下写法 var temp:LinkBar = event.currentTarget as LinkBar; resourceManager.localeChain = [temp.dataProvider[temp.selectedIndex].locale]; } ]]> </mx:Script> <mx:Label fontSize="30" text="{resourceManager.getString('locale', 'label_text')}"/> <mx:LinkBar dataProvider="{[{'label' : '中文', 'locale' : 'zh_CN'},{'label' : 'English', 'locale' : 'en_US'}]}" labelField="label" itemClick="locale_change(event)"/>
到此就完成了整个国际化的操作