为了让应用面向世界化,让系统具备多语言,是必备的条件。
本演示程序是个简单的多语言演示系统,具备即使切换各国语言得特点,程序使用的显示文字采用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信息