Para ilustrar melhor o exemplo, segue o XML que estou utilizando: Arquivo: localization_pt_BR.xml
<?xml version="1.0" encoding="utf-8"?> <localization> <applicationTitle label="Servicon - Gerenciamento de Histórico de Atendimento" /> <managementPanelTitle label="Gerenciamento" /> <editHistoryWindowAddTitle label="Inserir dados"/> <editHistoryWindowUpdateTitle label="Atualizar dados"/> <actions label="Ações"/> <customerName label="Nome do cliente"/> <lastVisit label="Última visita"/> <nextVisit label="Próxima visita"/> <subject label="Assunto"/> <comments label="Detalhes"/> <add label="Adicionar"/> <cancel label="Cancelar"/> <save label="Gravar"/> <clear label="Excluir"/> <close label="Fechar"/> <dateDayNames label="Dom,Seg,Ter,Qua,Qui,Sex,Sab"/> <dateMonthNames label="Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez"/> </localization> -- 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 2008/4/17, Vicente Maciel Junior <[EMAIL PROTECTED]>: > > 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 -~----------~----~----~----~------~----~------~--~---