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
-~----------~----~----~----~------~----~------~--~---

Reply via email to