flex多语言切换方式-i18n

Flex使用ResourceManager,可以实现Flex多语言解决方案,新建不同的语言版本文件,通过设定采用哪种语言,即可实现相关字段显示对应的语言版本。
(注:可参考Tour de Flex中的输入resource可以找到例子 Localization供参考)
实现步骤如下:
参考资料:http://www.cnblogs.com/WideWeide/archive/2010/03/16/1687668.html

1、设置编译参数



右击项目,选择属性,在Flex 编译器中输入:(这里提供中文和英文两种版本)
-locale en_US -locale zh_CN -source-path=locale/{locale}


2、新建语言资源文件



在src目录下,新建locale文件夹,在locale文件夹;
在locale文件夹下,新建en_US文件夹,在文件夹内新建rtis.properties文件:
admin=user_Id
password=password
在locale文件夹下,新建zh_CN文件夹,在文件夹内新建rtis.properties文件:
admin=登录名称
password=登录密码


3、编码实现以I18NTest.mxml为例,采用两种方式



(注:两种方法都要添加引用的资源,rits与新建的rtis.properties文件名相对应
<fx:Metadata>
[ResourceBundle("rtis")]
</fx:Metadata>)


I18NTest.mxml:



<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx">

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>

<!--添加资源文件-->
<fx:Metadata>
[ResourceBundle("rtis")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import base.ResourceUtil;
import mx.resources.ResourceManager;

[Bindable]
public var nameString:String;

[Bindable]
public var  passwordString:String;

[Bindable]
private var locales:Array = [ 
{label: "English", code:"en_US"}, 
{label: "Chinese", code:"zh_CN"} ]; 

//方法一,直接使用resourceManager
private function changeHandler(event:Event):void
{
//修改采用的语言版本
resourceManager.localeChain = [ localeComboBox.selectedItem.code ];
nameString=ResourceManager.getInstance().getString("rtis","admin");
passwordString=ResourceManager.getInstance().getString("rtis","password");


}

//方法二,采用resourceUitl自定义的ResourceManager封装
private function changeHandler2(event:Event):void
{
//修改采用的语言版本
ResourceUtil.getInstance().changeLanguage(localeComboBox2.selectedItem.code);
nameString=ResourceUtil.getInstance().getString("admin");
passwordString=ResourceUtil.getInstance().getString("password");
}

]]>
</fx:Script>

<s:VGroup width="100%"
 height="100%">
<s:HGroup gap="30">
<s:Label text="方法一"/>
<mx:ComboBox id="localeComboBox" dataProvider="{locales}" 
change="changeHandler(event)"/>
</s:HGroup>
<s:HGroup gap="30">
<s:Label text="方法二"/>
<mx:ComboBox id="localeComboBox2" dataProvider="{locales}" 
change="changeHandler2(event)"/>
</s:HGroup>

<s:Label id="label1" text="{nameString}"/>
<s:Label id="label2" text="{passwordString}"/>

</s:VGroup>

</s:WindowedApplication>


附上base.ResourceUtil自定义的ResourceManager封装ResourceUtil.as代码:

该类采用了单例的模式
参考资料:http://hackerzhou.me/2011/04/develop-flex-exprience-chapter-two-localization.html
package base
{
import flash.events.Event;
import flash.events.EventDispatcher;

public class ResourceUtil extends EventDispatcher
{
import mx.resources.IResourceManager;
import mx.resources.ResourceManager;
import mx.controls.Alert;

private static const BUNDLE_NAME:String ="rtis";
[Bindable]
public static var resourceManager:IResourceManager = null;
private static var instance:ResourceUtil = null;
private static var currentLanguage:String = "zh_CN";

public static function getInstance():ResourceUtil {
if(instance == null) {
instance = new ResourceUtil();
resourceManager = ResourceManager.getInstance();
resourceManager.initializeLocaleChain([currentLanguage]);
}
return instance;
}

public function changeLanguage(languageName:String):void {
resourceManager.localeChain.localeChain = [languageName];
currentLanguage = languageName;
dispatchChange();
}

[Bindable("change")]
public function getImage(resName:String):Class {
var result:Class = resourceManager.getClass(BUNDLE_NAME, resName
, currentLanguage);
return result;
}

[Bindable("change")]
public function getString(resName:String, para:Array = null):String {
var result:String = resourceManager.getString(BUNDLE_NAME, resName, para
, currentLanguage);
return result;
}

private function dispatchChange():void
{
dispatchEvent(new Event("change"));
}
}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值