天天看點

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資訊