Örnek: Bir stok onaylayıcı uygulamasını uluslararasılaştırmaFlash Player 10.1 ve üstü, Adobe AIR 2.0 ve üstü Global Stok Onaylayıcı uygulaması, üç farklı borsadaki (Amerika Birleşik Devletleri, Japonya ve Avrupa) stoklar hakkında hayali veriler alır ve gösterir. Verileri farklı yerel ayarların kurallarına göre biçimlendirir. Bu örnek, flash.globalization paketinin aşağıdaki özelliklerini göstermektedir:
Bu örneğin uygulama dosyalarını edinmek için bkz. www.adobe.com/go/learn_programmingAS3samples_flash_tr. Global Stok Onaylayıcı uygulama dosyaları, Örnekler/GlobalStockTicker klasöründe bulunabilir. Uygulama aşağıdaki dosyaları içerir:
Kullanıcı arabirimini ve örnek verileri anlamaUygulamanın başlıca kullanıcı arabirimi öğeleri şunlardır:
Uygulama yerel ayarlar, pazarlar ve şirket stokları hakkındaki tüm örnek verilerini StockDataModel sınıfına depolar. Bunun gibi gerçek bir uygulama, verileri bir sunucudan alıp StockDataModel gibi bir sınıfa depolar. Bu örnekte, tüm veri StockDataModel sınıfına gömülmüştür. Not: Mali çizelgede gösterilen verilerin DataGrid kontrolünde gösterilen verilerle eşleşmesi şart değildir. Ne zaman farklı bir şirket seçilse, çizelge rastgele yeniden çizilir. Bu çizelge yalnızca örneklendirme amaçlıdır.
Yerel ayarı belirlemeBaşlangıçtaki birkaç kurulum işinin ardından, uygulama varsayılan yerel ayarın biçimlendirici nesnelerini oluşturmak üzere Localizer.setLocale() yöntemini çağırır. setLocale() yöntemi, kullanıcın aşağı açılır Yerel Ayar kutusundan her yeni değer alışıyla birlikte de çağrılır. 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); } } İlk olarak setLocale() yöntemi bir LocaleID nesnesi oluşturur. Bu nesne, daha sonra gerekirse geçerli yerel ayar hakkındaki ayrıntıları almayı kolaylaştırır. Sonra yerel ayarın yeni NumberFormatter, CurrencyFormatter ve DateTimeFormatter nesnelerini oluşturur. Formatter nesnesi her oluşturulduğunda traceError() yöntemini çağırır. Bu yöntem, istenilen yerel ayarda sorun varsa konsolda hata ve uyarı mesajları görüntüler. (Gerçek bir uygulama, bu tip hataları sadece izlemek yerine bunlara göre harekete geçmelidir). CurrencyFormatter nesnesi oluşturulduktan sonra, setLocale() yöntemi biçimlendiricinin para birimi ISO kodunu, para birimi sembolünü ve fractionalDigits özelliklerini önceden belirlenen değerlere ayarlar. (Bu değerler, kullanıcının aşağı açılır Pazarlar kutusundan her yeni pazar seçişiyle birlikte ayarlanır). DateTimeFormatter nesnesi oluşturulduktan sonra, setLocale() yöntemi yerelleştirilmiş ay adı kısaltmalarının bir dizisini de alır. Verileri biçimlendirmeBiçimlendirilmiş stok verileri bir DataGrid kontrolünde sunulur. DataGrid sütunlarının her biri, sütun değerini uygun biçimlendirici nesneyi kullanarak biçimlendiren bir etiket işlevi çağırır. Örneğin, Flash sürümünde DataGrid sütunları aşağıdaki kodla kurulur: 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; Örneğin Flex sürümü DataGrid’ini MXML’de ilan eder. Her sütunun etiket işlevlerini de tanımlar. labelFunction özellikleri, Localizer sınıfının biçimlendirme yöntemlerini çağıran aşağıdaki işlevleri ifade eder: 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); } Localizer yöntemleri bundan sonra uygun biçimlendiricileri kurar ve çağırır: 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); } | |
|