PDA

Просмотр полной версии : многоязыковая поддержка Оцените плз .-)


student-uni
06.06.2007, 12:09
UTranslator.as

package
{
import mx.controls.Button;
import mx.controls.CheckBox;


public class UTranslator
{




import flash.events.*;
import flash.net.*;
import mx.controls.Label;
import mx.controls.Alert;



private var ControlsArray:Array = new Array();
private var XMLdatei:String;
public var myXML:XML;
private var myLoader:URLLoader;

private var cObject:Object;



public function UTranslator(_ControlsArray:Object, _XMLdatei:String)
{

try {

for (var i:int=0; i < _ControlsArray.numChildren; i++)
{
cObject = _ControlsArray.getChildAt(i);

ControlsArray.push(cObject);
}


myXML = new XML();
var XML_URL:String = _XMLdatei;
var myXMLURL:URLRequest = new URLRequest(XML_URL);
myLoader = new URLLoader(myXMLURL);


myLoader.addEventListener("complete", xmlLoaded);
}
catch (e:Error)
{
Alert.show(e.message);
}

}


public function xmlLoaded(evtObj:Event):void
{
myXML = XML(myLoader.data);
}



public function Translation(_sprache:String):void
{
for (var i:int = 0; i < ControlsArray.length; i++)
{
try
{

if (ControlsArray[i] is Label)
ControlsArray[i].text = myXML.language.(@element==_sprache)[(ControlsArray[i].id)].toString();

if ((ControlsArray[i] is Button) || (ControlsArray[i] is CheckBox))
ControlsArray[i].label = myXML.language.(@element==_sprache)[(ControlsArray[i].id)].toString();


}
catch (e:TypeError)
{
trace(e.message)
}
}

}


}

}



language.xml


<?xml version="1.0" encoding="utf-8" ?>
<languages>
<language element="en">
<lblHello>Hello</lblHello>
<lblLogin>Login</lblLogin>
<lblPassword>Password</lblPassword>
<lblUserName>User Name</lblUserName>
<btnNewWindow>New Window</btnNewWindow>
<cbCheckBox>Checken</cbCheckBox>
</language>
<language element="de">
<lblHello>Guten Tag</lblHello>
<lblLogin>Benutzer</lblLogin>
<lblPassword>Kennwort</lblPassword>
<lblUserName>Benutzer Name</lblUserName>
<btnNewWindow>Neues Fenster</btnNewWindow>
<cbCheckBox>Ankreuzen</cbCheckBox>
</language>
<language element="ru">
<lblHello>Добрый день</lblHello>
<lblLogin>Пользователь</lblLogin>
<lblPassword>Пароль</lblPassword>
<lblUserName>Имя пользователя</lblUserName>
<btnNewWindow>новое оkно</btnNewWindow>
<cbCheckBox>отметИть</cbCheckBox>
</language>
</languages>


Multilingua.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="init()" creationComplete="created()">

<mx:Script>
<![CDATA[


private var translateInstanz:UTranslator;


public function init():void
{

translateInstanz = new UTranslator(this, "language.xml");
}

public function created():void
{


var lang:String = flash.system.Capabilities.language.substr(0,2);


translateInstanz.Translation(lang);


var xlc:XMLList = new XMLList(translateInstanz.myXML..@element);


cbLanguage.dataProvider = xlc;


cbLanguage.data = lang;

}


public function cbChangeLanguage():void {


translateInstanz.Translation(cbLanguage.selectedLabel.toString());

}

public function btnNWclick():void{
var u:URLRequest = new URLRequest("Multilingua.html");
navigateToURL(u,"_blank");


}




]]>
</mx:Script>
<mx:ComboBox id="cbLanguage" change="cbChangeLanguage()" >

</mx:ComboBox>


<mx:Label id = "lblHello" text="lblHello" />
<mx:Label id = "lblLogin" text="lblLogin"/>
<mx:Label id = "lblPassword" text="lblPassword" />
<mx:Label id = "lblUserName" text="lblUserName" />
<mx:Button id = "btnNewWindow" label="btnNewWindow" click="btnNWclick()"/>
<mx:CheckBox id = "cbCheckBox" label="cbCheckBox"/>

</mx:Application>



Пока есть 3 недоработки
Считывает упр елементы только первого уровня
Понимает тоЛько леибл, баттон и чекбокс
Не сохраняет выбранныи язык при переходе в новое окно
Но ето все в процессе