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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---