Örnek: Bir stok onaylayıcı uygulamasını uluslararasılaştırma

Flash 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:

  • Yerele duyarlı sayı biçimlendirme

  • Yerele duyarlı para birimi biçimlendirme

  • Para birimi ISO kodunu ve para birimi sembollerini ayarlama

  • Yerele duyarlı tarih biçimlendirme

  • Uygun ay adı kısaltmalarını alma ve gösterme

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:

File

Açıklama

GlobalStockTicker.mxml

veya

GlobalStockTicker.fla

Flex (MXML) veya Flash (FLA) uygulaması için kullanıcı arabirimi.

styles.css

Uygulama kullanıcı arabirimi için stiller (yalnızca Flex).

com/example/programmingas3/stockticker/flex/FinGraph.mxml

Temsili stok verilerinin bir çizelgesini gösteren MXML bileşeni (yalnızca Flex).

com/example/programmingas3/stockticker/flash/GlobalStockTicker.as

Uygulama için kullanıcı arabirimi mantığını içeren belge sınıfı (yalnızca Flash).

comp/example/programmingas3/stockticker/flash/RightAlignedColumn.as

Flash DataGrid bileşeni için özel bir hücre işleyici (yalnızca Flash).

com/example/programmingas3/stockticker/FinancialGraph.as

Temsili stok verilerinin bir çizelgesini çizen ActionScript sınıfı.

com/example/programmingas3/stockticker/Localizer.as

Yerel ayarı ve para birimini yönetip sayı, para birimi tutarı ve tarihlerin yerelleştirilmiş biçimlendirmesini yapan ActionScript sınıfı.

com/example/programmingas3/stockticker/StockDataModel.as

Global Stok Onaylayıcı örneğinin tüm örnek verilerini tutan ActionScript sınıfı.

Kullanıcı arabirimini ve örnek verileri anlama

Uygulamanın başlıca kullanıcı arabirimi öğeleri şunlardır:

  • bir Yerel Ayar seçmek için aşağı açılır kutu

  • bir Pazar seçmek için aşağı açılır kutu

  • Her pazardaki altı şirketin verilerini gösteren bir DataGrid

  • seçili şirketin stoğuna ait temsili geçmiş verilerini gösteren bir çizelge

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ı belirleme

Baş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çimlendirme

Biç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); 
} 
|