Aracılığıyla paylaş


Dünya çapında kullanıma hazır uygulamalar geliştirmek için en iyi yöntemler

Bu bölümde, dünya için hazır uygulamalar geliştirirken izleyebileceğiniz en iyi yöntemler açıklanmaktadır.

Genelleştirme en iyi yöntemleri

  1. Uygulamanızı dahili olarak Unicode yapın.

  2. Verileri işlemek ve biçimlendirmek için ad alanı tarafından System.Globalization sağlanan kültüre duyarlı sınıfları kullanın.

    • Sıralama için sınıfını SortKey ve sınıfını CompareInfo kullanın.
    • Dize karşılaştırmaları için sınıfını CompareInfo kullanın.
    • Tarih ve saat biçimlendirmesi için sınıfını DateTimeFormatInfo kullanın.
    • Sayısal biçimlendirme için sınıfını NumberFormatInfo kullanın.
    • Gregoryen ve Gregoryen olmayan takvimler için sınıfını Calendar veya belirli takvim uygulamalarından birini kullanın.
  3. Sınıfı tarafından System.Globalization.CultureInfo sağlanan kültür özelliği ayarlarını uygun durumlarda kullanın. CultureInfo.CurrentCulture Tarih ve saat veya sayısal biçimlendirme gibi görevleri biçimlendirmek için özelliğini kullanın. CultureInfo.CurrentUICulture Kaynakları almak için özelliğini kullanın. CurrentCulture ve CurrentUICulture özelliklerinin iş parçacığı başına ayarlanabileceğini unutmayın.

  4. Uygulamanızın ad alanında kodlama sınıflarını kullanarak çeşitli kodlamalardan veri okumasını ve yazmasını System.Text sağlayın. ASCII verilerini varsaymayın. Bir kullanıcının metin girebileceği her yerde uluslararası karakterlerin sağlandığını varsayalım. Örneğin, uygulamanın sunucu adlarında, dizinlerinde, dosya adlarında, kullanıcı adlarında ve URL'lerde uluslararası karakterleri kabul etmesi gerekir.

  5. sınıfını UTF8Encoding kullanırken, güvenlik nedeniyle bu sınıf tarafından sunulan hata algılama özelliğini kullanın. Hata algılama özelliğini açmak için, bir parametre alan oluşturucuyu kullanarak sınıfının bir throwOnInvalidBytes örneğini oluşturun ve bu parametrenin değerini olarak trueayarlayın.

  6. Mümkün olduğunda, dizeleri tek tek bir karakter dizisi yerine tüm dizeler olarak işleyebilir. Bu özellikle alt dizeleri sıralarken veya ararken önemlidir. Bu, birleştirilmiş karakterleri ayrıştırma ile ilgili sorunları önler. Sınıfını kullanarak System.Globalization.StringInfo tek karakter yerine metin birimleriyle de çalışabilirsiniz.

  7. Ad alanı tarafından System.Drawing sağlanan sınıfları kullanarak metin görüntüleme.

  8. İşletim sistemleri arasında tutarlılık sağlamak için kullanıcı ayarlarının öğesini geçersiz kmasına CultureInfoizin verme. Bir useUserOverride parametreyi CultureInfo kabul eden ve olarak ayarlayan falseoluşturucuyu kullanın.

  9. Uluslararası verileri kullanarak uygulamanızın işlevselliğini uluslararası işletim sistemi sürümlerinde test edin.

  10. Bir güvenlik kararı dize karşılaştırma veya büyük/küçük harf değiştirme işleminin sonucuna bağlıysa, kültüre duyarsız bir dize işlemi kullanın. Bu uygulama, sonucun değerinden CultureInfo.CurrentCultureetkilenmemesini sağlar. Kültüre duyarlı dize karşılaştırmalarının tutarsız sonuçlara nasıl neden olabileceğini gösteren bir örnek için, Dizeleri Kullanmak için En İyi Yöntemler'in "Geçerli Kültürü Kullanan Dize Karşılaştırmaları" bölümüne bakın.

  11. Değişim (örneğin, BIR API çağrısındaki JSON belgesindeki bir alan) veya depolama için kullanılan herhangi bir öğe için öğesini kullanın CultureInfo; ayrıca, bir gidiş dönüş biçimi (örneğin "O", "o" tarih-saat biçimi tanımlayıcısı) belirtmelisiniz. Sabit kültür için biçim dizeleri kararlı ve değişme olasılığı düşük olsa da, açık bir biçim dizesi belirtmek kodunuzun amacını netleştirmeye yardımcı olur.

  12. Genelleştirme verileri kararlı değildir ve uygulamanızı ve testlerini bunu göz önünde bulundurarak yazmanız gerekir. Desteklenen tüm platformlardaki konak işletim sistemi kanalları aracılığıyla yılda birkaç kez güncelleştirilir. Bu veriler genellikle çalışma zamanıyla birlikte dağıtılmaz.

Yerelleştirme en iyi yöntemleri

  1. Tüm yerelleştirilebilir kaynakları yalnızca kaynak DLL'lerine taşıyın. Yerelleştirilebilir kaynaklar dizeler, hata iletileri, iletişim kutuları, menüler ve eklenmiş nesne kaynakları gibi kullanıcı arabirimi öğelerini içerir.

  2. Dizeleri veya kullanıcı arabirimi kaynaklarını sabit kodlamayın.

  3. Yerelleştirilebilir olmayan kaynakları yalnızca kaynak DLL'lerine koymayın. Bu, çevirmenlerin kafasını karıştırır.

  4. Birleştirilmiş tümceciklerden çalışma zamanında oluşturulan bileşik dizeleri kullanmayın. Bileşik dizelerin yerelleştirilmesi zordur çünkü genellikle tüm dillere uygulanmayan bir İngilizce dil bilgisi sırası kabul ederler.

  5. Dize bileşenlerinin dil bilgisi rollerine bağlı olarak dizelerin farklı şekilde çevrilebildiği "Boş Klasör" gibi belirsiz yapılardan kaçının. Örneğin, "boş" bir fiil veya sıfat olabilir ve bu da İtalyanca veya Fransızca gibi dillerde farklı çevirilere yol açabilir.

  6. Uygulamanızda metin içeren resimler ve simgeler kullanmaktan kaçının. Yerelleştirmesi pahalıdır.

  7. Dizelerin uzunluğunun kullanıcı arabiriminde genişletilmesi için bol miktarda yer açın. Bazı dillerde tümcecikler, diğer dillerde ihtiyaç duyduklarından yüzde 50-75 daha fazla alan gerektirebilir.

  8. Kültüre dayalı kaynakları almak için sınıfını System.Resources.ResourceManager kullanın.

  9. Windows Forms Kaynak Düzenleyicisi (Winres.exe) kullanılarak yerelleştirilebilmeleri için Visual Studio'yu kullanarak Windows Forms iletişim kutuları oluşturun. Windows Forms iletişim kutularını el ile kodlamayın.

  10. Profesyonel yerelleştirme (çeviri) için düzenleyin.

  11. Kaynakları oluşturma ve yerelleştirmenin tam açıklaması için bkz . .NET uygulamalarında kaynaklar.

ASP.NET ve diğer sunucu uygulamaları için genelleştirme en iyi yöntemleri

İpucu

Aşağıdaki en iyi yöntemler ASP.NET Framework uygulamalarına yöneliktir. ASP.NET Core uygulamaları için bkz . ASP.NET Core'da Genelleştirme ve yerelleştirme.

  1. Uygulamanızda ve CurrentCulture özelliklerini açıkça ayarlayınCurrentUICulture. Varsayılan değerlere güvenmeyin.

  2. ASP.NET uygulamaların yönetilen uygulamalar olduğunu ve bu nedenle kültüre dayalı bilgileri almak, görüntülemek ve işlemek için diğer yönetilen uygulamalarla aynı sınıfları kullanabileceğini unutmayın.

  3. ASP.NET aşağıdaki üç kodlama türünü belirtebileceğinizi unutmayın:

    • requestEncoding istemcinin tarayıcısından alınan kodlamayı belirtir.
    • responseEncoding istemci tarayıcısına gönderilecek kodlamayı belirtir. Çoğu durumda, bu kodlama için requestEncodingbelirtilenle aynı olmalıdır.
    • fileEncoding, .aspx, .asmx ve .asax dosyası ayrıştırma için varsayılan kodlamayı belirtir.
  4. bir ASP.NET uygulamasında aşağıdaki üç yerde , responseEncodingfileEncoding, , cultureve uiCulture özniteliklerinin değerlerini requestEncodingbelirtin:

    • Web.config dosyasının genelleştirme bölümünde. Bu dosya, ASP.NET uygulamasının dışındadır. Daha fazla bilgi için bkz <. genelleştirme> öğesi.
    • Bir sayfa yönergesinde. Bir uygulama bir sayfadayken dosyanın zaten okunduğunu unutmayın. Bu nedenle, fileEncoding ve requestEncoding belirtmek için çok geç. Yalnızca uiCulture, cultureve responseEncoding bir sayfa yönergesinde belirtilebilir.
    • Uygulama kodunda program aracılığıyla. Bu ayar istek başına farklılık gösterebilir. Bir sayfa yönergesinde olduğu gibi, uygulamanın koduna ulaşılana kadar ve requestEncodingbelirtmek fileEncoding için çok geç olur. Uygulama kodunda yalnızca uiCulture, cultureve responseEncoding belirtilebilir.
  5. uiCulture değerinin tarayıcı kabul diline ayarlanabileceğini unutmayın.

  6. Dağıtılan uygulamalar için sıfır kapalı kalma süresi güncelleştirmelerine izin verin (örneğin Azure Container Apps) veya benzer durumlarda, uygulamanın farklı biçim kurallarına veya diğer kültür verilerine sahip birden çok örneğinin (en uygun saat dilimi kuralları) bulunabileceği durumları planlamanız gerekir.

    • Uygulama dağıtımınız bir veritabanı içeriyorsa, veritabanının kendi genelleştirme kurallarına sahip olacağını unutmayın. Çoğu durumda, veritabanında genelleştirmeyle ilgili işlevleri gerçekleştirmekten kaçınmanız gerekir.
    • Uygulama dağıtımınız istemci genelleştirme kaynaklarını kullanan bir istemci uygulaması veya web ön ucu içeriyorsa, istemci kaynaklarının sunucunuz için kullanılabilir kaynaklardan farklı olduğunu varsayalım. İstemcide genelleştirme işlevlerini özel olarak gerçekleştirmeyi göz önünde bulundurun.

Güçlü test için Öneriler

  1. Bağımlılıkları daha açık hale getirmek ve test etmeyi daha kolay ve paralel hale getirmek için, parametreler gibi CultureInfo kültürle ilgili ayarları biçimlendirme gerçekleştiren yöntemlere ve tarih ve TimeZoneInfo saatlerle çalışan yöntemlere açıkça geçirmeyi göz önünde bulundurmanız gerekir. Ayrıca zamanı alırken veya benzer bir tür kullanmanız TimeProvider gerekir.

  2. Çoğu test için, belirli bir biçimlendirme işleminin tam çıkışını veya saat diliminin tam uzaklığını açıkça doğrulamamalısınız . Biçimlendirme ve saat dilimi verileri herhangi bir zamanda değişebilir ve bir işletim sisteminin birbirinin aynı iki örneği (ve aynı makinedeki olası farklı işlemler) arasında farklılık gösterebilir. Tam bir değere güvenmek, testlerin kırılgan olmasını sağlar.

    • Genel olarak, bazı çıktıların alındığını doğrulamak yeterli olacaktır (örneğin, biçimlendirme sırasında boş olmayan dizeler).
    • Bazı veri öğeleri ve biçimleri için, verilerin giriş değerine ayrıştırılıp ayrıştırılmadığını doğrulamak (yuvarlama) kullanılabilir. Alanların bırakıldığı durumlar (örneğin, tarihle ilgili bazı alanlar için yıl) veya kesilen veya yuvarlanan değer (kayan nokta çıkışı gibi) için dikkatli olunması gerekir.
    • Tüm yerelleştirilmiş biçim çıkışını doğrulamak için açık gereksinimleriniz varsa, test kurulumu sırasında özel bir kültür oluşturmayı ve kullanmayı göz önünde bulundurmanız gerekir. Çoğu basit durumda, bir nesnenin oluşturucusunun new CultureInfo(..) örneği oluşturularak CultureInfo ve özellikleri ayarlanarak DateTimeFormatNumberFormat bu yapılabilir. Daha karmaşık durumlar için, türün alt sınıflanması ek özelliklerin geçersiz kılınmasına olanak tanır. Kaynak dosyalarıyla sahte konum belirlemeyi etkinleştirme gibi bunun olası ek avantajları vardır.
    • Tüm tarih/saat işlemlerinin sonuçlarını doğrulamak için açık gereksinimleriniz varsa, test kurulumu sırasında özel TimeZoneInfo bir örnek oluşturmayı ve kullanmayı düşünmelisiniz. Belirli uç durumlarının kararlı testini (örneğin, DST kurallarındaki değişiklikler) etkinleştirme gibi bunun olası ek avantajları vardır.

Ayrıca bkz.