Exemplo: Internacionalização de um aplicativo de acionamento de açõesFlash Player 10.1 e posterior, Adobe AIR 2.0 e posterior O aplicativo Acionador de acões globais obtém e exibe dados ficticios sobre ações em três mercados de ações diferentes: dos Estados Unidos, Jpão e Europa. Ele formata dos dados de acordo às convenções de várias localidades. Este exemplo ilustra os seguintes recursos do pacote flash.globalization:
Para obter os arquivos do aplicativo deste exemplo, consulte www.adobe.com/go/learn_programmingAS3samples_flash_br. Os arquivos do aplicativo Acionador de ações gloabais podem ser localizados no diretório Samples/GlobalStockTicker. O aplicativo consiste nos seguintes arquivos:
Entendendo a interface do usuário e amostra de dadosOs elementos da interface do usuário principal do aplicativo são:
O aplicativo armazena todos os seus dados de amostra sobre localidades, mercados e ações de companias na classe StockDataModel. Um aplicativo real deve obter dados de um servidor e, em seguida, armazená-los em uma classe como a StockDataModel. Neste exemplo, todos os dados estão codificados na classe StockDataModel. Nota: Os dados exibidos no gráfico financeiro não correspondem necessariamente com os dados no controle do DataGrid. O gráfico é redesenhado aleatóriamente cada vez que uma compania diferente é selecionada. Para propósitos ilustrativos apenas.
Definindo a localidadeDepois de algum trabalho inicial de configuração, o aplicativo chama o método Localizer.setLocale() para criar objetos formatadores para a localidade padrão. O método setLocale() também é chamado a cada vez que o usuário seleciona um novo valor da caixa combinada de Localidade. public function setLocale(newLocale:String):void { locale = new LocaleID(newLocale); nf = new NumberFormatter(locale.name); traceError(nf.lastOperationStatus, "NumberFormatter", nf.actualLocaleIDName); cf = new CurrencyFormatter(locale.name); traceError(cf.lastOperationStatus, "CurrencyFormatter", cf.actualLocaleIDName); symbolIsSafe = cf.formattingWithCurrencySymbolIsSafe(currentCurrency); cf.setCurrency(currentCurrency, currentSymbol); cf.fractionalDigits = currentFraction; df = new DateTimeFormatter(locale.name, DateTimeStyle.LONG, DateTimeStyle.SHORT); traceError(df.lastOperationStatus, "DateTimeFormatter", df.actualLocaleIDName); monthNames = df.getMonthNames(DateTimeNameStyle.LONG_ABBREVIATION); } public function traceError(status:String, serviceName:String, localeID:String) :void { if(status != LastOperationStatus.NO_ERROR) { if(status == LastOperationStatus.USING_FALLBACK_WARNING) { trace("Warning - Fallback locale ID used by " + serviceName + ": " + localeID); } else if (status == LastOperationStatus.UNSUPPORTED_ERROR) { trace("Error in " + serviceName + ": " + status); //abort application throw(new Error("Fatal error", 0)); } else { trace("Error in " + serviceName + ": " + status); } } else { trace(serviceName + " created for locale ID: " + localeID); } } Primeiro o método setLocale() cria um objeto LocaleID. Isto faz com que seja mais fácil obter detalhes sobre a localidade real posteriormente, se necessário. Em seguida ele cria novos objetos NumberFormatter, CurrencyFormatter e DateTimeFormatte para a localidade. Após criar cada objeto formatador, o método traceError() é chamado. Este método exibe erros e mensagens de avisos no consolte, caso exista um problema na localidade solicitada. (Um aplicativo real deve executar ações com base nestes erros, em vez de somente rastreá-los). Depois de criar o objeto CurrencyFormatter, o método setLocale() define o código ISO de moeda do formatador, símbolo de moeda e propriedades fractionalDigits para valores préviamente determinados. (Estes valores são definidos cada vez que o usuário seleciona um novo mercado da caixa combinada Mercados). Depois de criar o objeto DateTimeFormatter, o método setLocale() também obtém uma matriz de abreviações de nomes de meses localizados. Formatando os dadosOs dados de ações formatados são apresentados em um controle DataGrid. Cada coluna DataGrid chama uma função de rótulo que formata o valor da coluna utilizando o objeto formatador apropriado. Na versão do Flash, por exemplo, o seguinte código define as colunas DataGrid: var col1:DataGridColumn = new DataGridColumn("ticker"); col1.headerText = "Company"; col1.sortOptions = Array.NUMERIC; col1.width = 200; var col2:DataGridColumn = new DataGridColumn("volume"); col2.headerText = "Volume"; col2.width = 120; col2.cellRenderer = RightAlignedCell; col2.labelFunction = displayVolume; var col3:DataGridColumn = new DataGridColumn("price"); col3.headerText = "Price"; col3.width = 70; col3.cellRenderer = RightAlignedCell; col3.labelFunction = displayPrice; var col4:DataGridColumn = new DataGridColumn("change"); col4.headerText = "Change"; col4.width = 120; col4.cellRenderer = RightAlignedCell; col4.labelFunction = displayPercent; A versão do Flex do exemplo declara seu DataGrid no MXML. Isto também define funções de rótulo semelhantes para cada coluna. As propriedades labelFunction se referem às seguintes funções, as quais chamam métodos de formatação da classe Localizer: private function displayVolume(item:Object):String { return localizer.formatNumber(item.volume, 0); } private function displayPercent(item:Object):String { return localizer.formatPercent(item.change ) ; } private function displayPrice(item:Object):String { return localizer.formatCurrency(item.price); } Os métodos Localizer então definem e chamam os formatadores apropriados: public function formatNumber(value:Number, fractionalDigits:int = 2):String { nf.fractionalDigits = fractionalDigits; return nf.formatNumber(value); } public function formatPercent(value:Number, fractionalDigits:int = 2):String { // HACK WARNING: The position of the percent sign, and whether a space belongs // between it and the number, are locale-sensitive decisions. For example, // in Turkish the positive format is %12 and the negative format is -%12. // Like most operating systems, flash.globalization classes do not currently // provide an API for percentage formatting. nf.fractionalDigits = fractionalDigits; return nf.formatNumber(value) + "%"; } public function formatCurrency(value:Number):String { return cf.format(value, symbolIsSafe); } public function formatDate(dateValue:Date):String { return df.format(dateValue); } | |
![]() |