Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Uygulamanızı dahili olarak Unicode yapın.
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 SortKey sınıfını ve CompareInfo sınıfını 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.
System.Globalization.CultureInfo sınıfı tarafından sağlanan kültür 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. Kaynakları almak için CultureInfo.CurrentUICulture özelliğini kullanın.
CurrentCultureveCurrentUICultureözelliklerinin iş parçacığı başına ayarlanabileceğini unutmayın.Uygulamanızın System.Text ad alanındaki kodlama sınıflarını kullanarak çeşitli kodlamalardan veri okumasını ve yazmasını 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.
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 bir sınıfın
throwOnInvalidBytesörneğini oluşturun ve bu parametrenin değerinitrueolarak ayarlayın.Mümkün olduğunda, dizeleri tek tek karakterlerden ziyade bütün olarak ele alın. Bu, özellikle alt dize parçalarını 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.
System.Drawing ad alanının sağladığı sınıfları kullanarak metni görüntüle.
İşletim sistemleri arasında tutarlılığı sağlamak için kullanıcı ayarlarının CultureInfo öğesini geçersiz kılmasına izin vermeyin.
CultureInfoparametresini kabul eden ve bunuuseUserOverrideolarak ayarlayanfalseoluşturucuyu kullanın.Uluslararası verileri kullanarak uygulamanızın işlevselliğini uluslararası işletim sistemi sürümlerinde test edin.
Bir güvenlik kararı, bir dize karşılaştırması veya büyük/küçük harf değiştirme işleminin sonucuna bağlıysa, kültürden bağımsız bir dize işlemi kullanın. Bu uygulama, sonucun
CultureInfo.CurrentCulturedeğerinden etkilenmemesini 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.API çağrısı gibi bir JSON belgesindeki alanlar gibi değişim veya depolama için kullanılan herhangi bir öğe için CultureInfo kullanın; ayrıca, gidiş dönüş formatı olarak (örneğin,
"O","o"tarih-saat biçimi belirteci) açıkça 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.- Tarih/saat öğeleri için değerli içgörüleri paylaşan Noda Time yazarı Jon Skeet'in önerilerini ve gözlemlerini göz önünde bulundurun. Daha fazla bilgi için bkz Jon Skeet: UTC depolama kesin çözüm değildir.
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
Tüm yerelleştirilebilir kaynakları yalnızca kaynak içeren DLL'lere yerleştirin. Yerelleştirilebilir kaynaklar dizeler, hata iletileri, iletişim kutuları, menüler ve eklenmiş nesne kaynakları gibi kullanıcı arabirimi öğelerini içerir.
Dizeleri veya kullanıcı arabirimi kaynaklarını sabit kodlamayın.
Yerelleştirilemeyen kaynakları yalnızca kaynak içeren DLL'lere koymaktan kaçının. Bu, çevirmenlerin kafasını karıştırır.
Çalışma zamanında birleştirilmiş tümceciklerden 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.
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.
Uygulamanızda metin içeren resimler ve simgeler kullanmaktan kaçının. Yerelleştirmesi pahalıdır.
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.
Kültüre dayalı kaynakları almak için sınıfını System.Resources.ResourceManager kullanın.
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.
Profesyonel yerelleştirme (çeviri) için düzenleyin.
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
Tavsiye
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.
Uygulamanızda CurrentUICulture ve CurrentCulture özelliklerini açıkça ayarlayın. Varsayılan değerlere güvenmeyin.
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.
ASP.NET aşağıdaki üç kodlama türünü belirtebileceğinizi unutmayın:
-
requestEncodingistemcinin tarayıcısından alınan kodlamayı belirtir. -
responseEncodingistemci tarayıcısına gönderilecek kodlamayı belirtir. Çoğu durumda, bu kodlama içinrequestEncodingbelirtilenle aynı olmalıdır. - fileEncoding, .aspx, .asmx ve .asax dosyalarının ayrıştırılmasında varsayılan kodlamayı belirtir.
-
Bir ASP.NET uygulamasında aşağıdaki üç yerde
requestEncoding,responseEncoding,fileEncoding,cultureveuiCultureözniteliklerinin değerlerini belirtin.-
Web.config dosyasının küreselleşme bölümünde. Bu dosya, ASP.NET uygulamasının dışındadır. Daha fazla bilgi için bkz
<globalization>. öğe. - 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,cultureveresponseEncodingbir sayfa yönergesinde belirtilebilir. - Uygulama kodunda programatik olarak. Bu ayar istek başına farklılık gösterebilir. Bir sayfa yönergesinde olduğu gibi, uygulamanın koduna ulaşılana kadar
fileEncodingverequestEncodingbelirtmek için çok geç olur. Uygulama kodunda yalnızcauiCulture,cultureveresponseEncodingbelirtilebilir.
-
Web.config dosyasının küreselleşme bölümünde. Bu dosya, ASP.NET uygulamasının dışındadır. Daha fazla bilgi için bkz
uiCulture değerinin tarayıcı kabul diline ayarlanabileceğini unutmayın.
Dağıtılan uygulamalar için sıfır kapalı kalma süresi güncellemelerini mümkün kılın (örneğin, Azure Container Apps) veya benzer durumlarda, uygulamanın farklı biçim kurallarına veya diğer kültür verilerine sahip (özellikle saat dilimi kuralları) birden çok örneğinin bulunabileceği senaryoları 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 yalnızca küreselleştirme işlevlerini gerçekleştirmeyi göz önünde bulundurun.
Güçlü test önerileri
Bağımlılıkları daha açık hale getirmek ve test etmeyi daha kolay ve paralel hale getirmek için, parametreler gibi kültürle ilgili ayarları biçimlendirme gerçekleştiren yöntemlere ve tarih ve
CultureInfosaatlerle çalışan yöntemlere açıkça geçirmeyiTimeZoneInfo. Zamanı alırken veya benzer bir tür kullanmanız TimeProvider gerekir.Ç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 dönüştürülüp dönüştürülmediğini doğrulamak (geri dönüşüm) kullanılabilir. Alanların düştüğü (örneğin, tarihle ilgili bazı alanlar için yıl) veya değerlerin kısaltıldığı ya da yuvarlandığı (kayan nokta çıktısı gibi) durumlarda dikkat edilmelidir.
- 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
CultureInfonesnesi oluşturucusunew CultureInfo(..)kullanılarak örneklendirilebilir veDateTimeFormatileNumberFormatözellikleri ayarlanabilir. 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 bir örnek oluşturmayı ve kullanmayı
TimeZoneInfo. Belirli uç durumlarının kararlı testini (örneğin, DST kurallarındaki değişiklikler) etkinleştirme gibi bunun olası ek avantajları vardır.