Eu costumo fazer o seguite: 1 - Ter uma classe Singleton (Model) que possui variáveis com todo o conteúdo de apresentação (labels) que irei utilizar na aplicação. A depender do tamanho dessa aplicação, separo uma classe dessas para cada tela (view).
Ex: // [start] CHMLocalizationModel.as package br.com.vpmjr.apps.chm.model{ [Bindable] public class CHMLocalizationModel{ private static var instance:CHMLocalizationModel; public static var LOCALE_LANG_PT_BR:String = "pt_BR"; public static var LOCALE_LANG_EN_US:String = "en_US"; public static var LOCALE_LANG_SP_SP:String = "sp_SP"; public static var LOCALE_LANG_FR_FR:String = "fr_FR"; public static var LOCALE_LANG_DE_DE:String = "de_DE"; public static var LOCALE_LANG_IT_IT:String = "it_IT"; public static var LOCALE_LANG_JP_JP:String = "jp_JP"; /* ========== LABELS ========== */ public var currentLocale:String; public var applicationTitle:String = "Customer History Manager"; public var managementPanelTitle:String = "Management Panel"; public var editHistoryWindowAddTitle:String = "Insert history data"; public var editHistoryWindowUpdateTitle:String = "Update history data"; public var actions:String = "Actions"; public var customerName:String = "Customer name"; public var lastVisit:String = "Last visit"; public var nextVisit:String = "Next visit"; public var subject:String = "Subject"; public var comments:String = "Comments"; public var add:String = "Add"; public var cancel:String = "Cancel"; public var save:String = "Save"; public var clear:String = "Delete"; public var close:String = "Close"; public var dateDayNames:String = "Sun,Mon,Tue,Wed,Thu,Fri,Sat"; public var dateMonthNames:String = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"; /* ========== LABELS ========== */ public function CHMLocalizationModel(_private:Private){ if(!_private){ throw new Error("Singleton. Use getInstance()"); } } public static function getInstance():CHMLocalizationModel{ if(instance == null){ instance = new CHMLocalizationModel(new Private); } return instance; } } } class Private{} // [end] CHMLocalizationModel.as 2 - No MXML, instancio uma variável com o Singleton da classe acima (Classe.getInstance()) e associo as propriedades dela aos pontos inerentes. Ex: // [start] CHMHistoryDataGrid.mxml <?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:view="br.com.vpmjr.apps.chm.view.*" creationComplete="init()" > <mx:Script> <![CDATA[ import br.com.vpmjr.apps.chm.model.CHMHistoryDataModel; import br.com.vpmjr.apps.chm.model.CHMLocalizationModel; // ==== INSTANCIA DO SINGLETON ==== [Bindable] private var localizationModel:CHMLocalizationModel; // ABAIXO (veja adiante no código): localizationModel.variavel para obter o valor desejado private function init():void{ localizationModel = CHMLocalizationModel.getInstance(); } ]]> </mx:Script> <view:CHMMenuHBox id="chmMenuHBox" width="100%"/> <mx:DataGrid id="dgHD" dataProvider="{CHMHistoryDataModel.getInstance().historyData}" height="100%" width="100%" > <mx:columns> <mx:DataGridColumn id="dgcHDActions" headerText="{localizationModel.actions}" width="80" /> <mx:DataGridColumn id="dgcHDCustomer" headerText="{localizationModel.customerName}" width="200" /> <mx:DataGridColumn id="dgcHDLastVisit" headerText="{localizationModel.lastVisit}" width="100" /> <mx:DataGridColumn id="dgcHDNextVisit" headerText="{localizationModel.nextVisit}" width="100" /> <mx:DataGridColumn id="dgcHDSubject" headerText="{localizationModel.subject}" /> </mx:columns> </mx:DataGrid> </mx:VBox> // [end] CHMHistoryDataGrid.mxml 3 - Em algum ponto da sua aplicação você pode ter um Combobox ou qualquer outra funcionalidade que permita o usuário selecionar um idioma, e ao fazê-lo você carrega um XML por exemplo. Ao final deste procedimento, basta obter uma instância do Singleton e associar os valores carregados às variáveis respectivas dele. Como o MXML (no exemplo acima) associa os valores via "binding", assim que os valores da classe CHMLocalizationModel forem modificados, essa modificação imediatamente refletirá nos pontos da aplicação que exibem estes valores. Como este exemplo que pequei é de uma aplicação AIR que estou desenvolvendo (usando o framework Cairngorm),a parte do carregamento do XML na minha aplicação é diretamente do FileSystem, mas o que eu quero mostrar mesmo é como associar os valores do XML ao Singleton (Model). Ex: (observe o que marquei abaixo como "PARTE RELEVANTE") // [start] LoadLocalizationCommand.as package br.com.vpmjr.apps.chm.commands{ import br.com.vpmjr.apps.chm.model.CHMConfigModel; import br.com.vpmjr.apps.chm.model.CHMLocalizationModel; import com.adobe.cairngorm.commands.ICommand; import com.adobe.cairngorm.control.CairngormEvent; import flash.filesystem.*; public class LoadLocalizationCommand implements ICommand{ private var configModel:CHMConfigModel; // ==== PARTE RELEVANTE 1 ==== private var localizationModel:CHMLocalizationModel; // ==== PARTE RELEVANTE 1 ==== private var localizationFileName:String; private var localizationFile:File; private var localizationFilesDir:File; private const LOCALIZATION_FILES_DIR_NAME:String = "resources"; public function execute(event:CairngormEvent):void{ configModel = CHMConfigModel.getInstance(); localizationModel = CHMLocalizationModel.getInstance(); localizationFilesDir = File.applicationDirectory.resolvePath(LOCALIZATION_FILES_DIR_NAME); localizationFile = localizationFilesDir.resolvePath("localization_" + configModel.defaultLocaleLangID + ".xml"); loadLocalizationData(); } private function loadLocalizationData():void{ var fileStream:FileStream = new FileStream(); fileStream.open(localizationFile, FileMode.READ); var localizationString:String = fileStream.readUTFBytes(localizationFile.size); fileStream.close(); parseLocalizationData(localizationString); } // ==== PARTE RELEVANTE 2 ==== // _localizationData é a string XML carregada private function parseLocalizationData(_localizationData:String):void{ XML.ignoreWhitespace = true; var xmlLocalizationData:XML = new XML(_localizationData); var totalDataItems:int = xmlLocalizationData.children().length(); for(var i:int = 0; i < totalDataItems; i++){ var dataItemName:String = String(XML(xmlLocalizationData.children()[i]).name()); var dataItemLabel:String = XML(xmlLocalizationData.children()[i])[EMAIL PROTECTED]; localizationModel[dataItemName] = dataItemLabel; } } // ==== PARTE RELEVANTE 2 ==== } } // [end] LoadLocalizationCommand.as Essa "PARTE RELEVANTE 2" podería ser parte do Singleton (um método "getDataFromXML()" por exemplo). Talvez eu modifique isso. Mas o importante é que é a parte que você pode reaproveitar no seu projeto se vier a utilizar essa metodologia, talvez mudando apenas a questão de que você já pode passar para o método "parseLocalizationData()" já um objeto XML ao invés de uma String, como eu tive que fazer alí. Mas daí por diante, você faz como achar melhor... Espero que tenha ajudado. -- Vicente Maciel Junior Independent Web Developer & Consultant Adobe Advanced Certified Developer Adobe Certified Instructor (ColdFusion & Flash Platform) +55 (71) 8120-0035 / 9212-0909 - MSN: [EMAIL PROTECTED] http://teclandoalto.blogspot.com Em 16/04/08, Pat <[EMAIL PROTECTED]> escreveu: > > > Como eu faria uma aplicação em flex de acordo com idioma escolhido > pelo usuário?? > > > --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com Para sair da lista, envie um email em branco para [EMAIL PROTECTED] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---