為了讓應用面向世界化,讓系統具備多語言,是必備的條件。
本示範程式是個簡單的多語言示範系統,具備即使切換各國語言得特點,程式使用的顯示文字采用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資訊