Flash多国语言自由切换

为了让应用面向世界化,让系统具备多语言,是必备的条件。
本演示程序是个简单的多语言演示系统,具备即使切换各国语言得特点,程序使用的显示文字采用xml文件配置,从而达到不用语言的效果,看flash效果
http://www.sujun.org/flash/languages/languages.html

看了效果,就说一下原理,其实很简单,就是程序中需要用到的每一个文字,都是读取xml配置文件得,在各个语言版本的xml配置文件中,都保持着相同的key,但是其中的vlaue就不相同

先看下中文配置

<?xml version="1.0" encoding="UTF-8"?>
<languages type="China">
    <text-content>
        <Button>
            <value key="cnBtn" >中文</value>
            <value key="enBtn" >英文</value>
            <value key="loginBtn" >登陆</value>
        </Button>
        
        <Label>
            <value key="nameLabel" >名  称:</value>
            <value key="passLabel" >密  码:</value>
        </Label>
    </text-content>
</languages>

 

 英文版配置文件

<?xml version="1.0" encoding="UTF-8"?>
<languages type="English">
    <text-content>
        <Button>
            <value key="cnBtn" >China</value>
            <value key="enBtn" >English</value>
            <value key="loginBtn" >Login</value>
        </Button>
        
        <Label>
            <value key="nameLabel" >UserName:</value>
            <value key="passLabel" >Userpass:</value>
        </Label>
    </text-content>
</languages>

 可以看到这两个文件在文件中的<value key="nameLabel" >UserName:</value>,保持着相同的key,但是值就不一样

接下来看界面程序

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontFamily="Arial" fontSize="12"
     creationComplete="init()">
    <mx:Script>
        <![CDATA[
        import org.sujun.lang.LangManager;
        
        private var loader:URLLoader;
        private var request:URLRequest;
        
        private var currLang:String;
        
        public function init():void
        {
            Security.allowDomain("*");
            //默认加载中文
            currLang = "http://www.sujun.org/flash/languages/languages/china.xml";
            loader = new URLLoader();
            request = new URLRequest(currLang);
            
            enBtn.addEventListener(MouseEvent.CLICK,buttEvent);
            cnBtn.addEventListener(MouseEvent.CLICK,buttEvent);
            
            loader.addEventListener(Event.COMPLETE,onLoadXml);
            
            loader.load(request);
            
        }
        private function buttEvent(event:MouseEvent):void
        {
            //根据按钮确定加载那个语言配置文件
            if(event.target == enBtn)
            {
                request.url = "http://www.sujun.org/flash/languages/languages/English.xml";
            }
            else
            {
                request.url = "http://www.sujun.org/flash/languages/languages/china.xml";
            }
            loader.load(request);
        }
        private function onLoadXml(event:Event):void
        {
            trace("加载成功");
            
            LangManager.instanceLang(XML(loader.data));
            //初始化文字
            enBtn.label = LangManager.getContent("enBtn");
            cnBtn.label = LangManager.getContent("cnBtn");
            loginBtn.label = LangManager.getContent("loginBtn");
            //文本
            nameLabel.text = LangManager.getContent("nameLabel");
            passLabel.text = LangManager.getContent("passLabel");
            
            
        }
        ]]>
    </mx:Script>
    <mx:Panel width="375" height="374" layout="absolute">
        <mx:Button x="65" y="57" label="Button" id="enBtn"/>
        <mx:Button x="158" y="57" label="Button" id="cnBtn"/>
        <mx:Label x="65" y="122" text="Label" id="nameLabel"/>
        <mx:Label x="65" y="158" text="Label" id="passLabel"/>
        <mx:TextInput x="137" y="122" id="nameText"/>
        <mx:TextInput x="137" y="156" id="passText"/>
        <mx:Button x="137" y="210" label="Button" id="loginBtn"/>
    </mx:Panel>
</mx:Application>


 
代码很简单.....就是点击不同按钮,加载不同的xml配置文件,然后初始化文字信息。
在这个程序里,有个比较重要的类,就是解析和根据key获取到对应的值。你可以看到,在代码里都是通过
LangManager.getContent("enBtn");去获取到对应得值
呵呵,关键就是LangManager这个类,里面做了个递归,去获取xml文件中的key和vlaue信息

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值