Genelleştirme API'leri Windows 10'da ICU kitaplıklarını kullanır
.NET 5 ve sonraki sürümler, Windows 10 Mayıs 2019 Güncelleştirmesi veya sonraki sürümlerde çalışırken genelleştirme işlevselliği için Unicode (ICU) kitaplıkları için Uluslararası Bileşenler kullanır.
Açıklama değiştirildi
.NET Core 1.0 - 3.1 ve .NET Framework 4 ve sonraki sürümlerinde .NET kitaplıkları, Windows'da genelleştirme işlevselliği için Ulusal Dil Desteği (NLS) API'lerini kullanır. Örneğin, NLS işlevleri dizeleri karşılaştırmak, kültür bilgilerini almak ve uygun kültürde dize büyük/küçük harflerini gerçekleştirmek için kullanılmıştır.
.NET 5'den başlayarak, bir uygulama Windows 10 Mayıs 2019 Güncelleştirmesi veya sonraki sürümlerde çalışıyorsa, .NET kitaplıkları varsayılan olarak ICU genelleştirme API'lerini kullanır.
Not
Windows 10 Mayıs 2019 Güncelleştirmesi ve sonraki sürümler, ICU yerel kitaplığıyla birlikte gönderilmiştir. .NET çalışma zamanı ICU'yı yükleyemiyorsa, bunun yerine NLS kullanır.
Davranış farklılıkları
Küreselleştirme tesislerini kullandığınızı fark etmeseniz bile uygulamanızda değişiklikler görebilirsiniz. Bu bölümde, görebileceğiniz davranış değişikliklerinden birkaçı listelenir, ancak başkaları da vardır.
String.IndexOf
Bir dizedeki yeni satır karakterinin dizinini bulmak için çağıran String.IndexOf(String) aşağıdaki kodu göz önünde bulundurun.
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
- Windows'un .NET Core 3.1 ve önceki sürümlerinde kod parçacığı yazdırır
6
. - .NET 5 ve Windows 10 Mayıs 2019 Güncelleştirmesi ve sonraki sürümlerde kod parçacığı yazdırır
-1
. - .NET 6 ve sonraki sürümlerinde kod parçacığı yazdırılır
6
, ancak ICU kitaplıkları hala kullanılır.
Kültüre duyarlı arama yerine sıralı bir arama yaparak bu kodu düzeltmek için aşırı yüklemeyi çağırın IndexOf(String, StringComparison) ve bağımsız değişken olarak geçirin StringComparison.Ordinal .
Kod çözümleme kurallarını CA1307 çalıştırabilirsiniz: Netlik için StringComparison belirtin ve CA1309: Kodunuzda bu çağrı sitelerini bulmak için sıralı StringComparison kullanın.
Daha fazla bilgi için bkz . .NET 5+ üzerinde dizeleri karşılaştırırken davranış değişiklikleri.
Para birimi simgesi
Para birimi biçim belirticisini C
kullanarak bir dizeyi biçimlendiren aşağıdaki kodu göz önünde bulundurun. Geçerli iş parçacığının kültürü, ülke veya bölgeyi değil yalnızca dili içeren bir kültüre ayarlanır.
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
- Windows'un .NET Core 3.1 ve önceki sürümlerinde metnin değeri şeklindedir
"100,00 €"
. - Windows 19H1 ve sonraki sürümlerde .NET 5 ve üzeri sürümlerde, metnin değeri euro yerine uluslararası para birimi simgesini kullanan değeridir
"100,00 ¤"
. ICU'da tasarım, para biriminin bir dilin değil, bir ülkenin veya bölgenin özelliği olmasıdır.
Haftanın günü kısaltmaları
yöntemi, DateTimeFormatInfo.GetShortestDayName(DayOfWeek) haftanın belirtilen günü için en kısa kısaltılmış gün adını alır.
- Windows'un .NET Core 3.1 ve önceki sürümlerinde, bu haftanın günü kısaltmaları iki karakterden oluşuyordu, örneğin, "Su".
- .NET 5 ve sonraki sürümlerinde, bu haftanın günü kısaltmaları yalnızca bir karakterden oluşur; örneğin, "S".
Değişiklik nedeni
Bu değişiklik birleştirmek için kullanıma sunulmuştur. DESTEKLENEN tüm işletim sistemlerinde NET'in genelleştirme davranışı. Ayrıca, uygulamaların işletim sisteminin yerleşik kitaplıklarına bağımlı olmak yerine kendi genelleştirme kitaplıklarını paketlemesini sağlar.
Sürüm kullanıma sunulmuştur
.NET 5.0
Önerilen eylem
Geliştirici tarafından herhangi bir işlem yapılması gerekmez. Ancak, NLS genelleştirme API'lerini kullanmaya devam etmek istiyorsanız, bu davranışa geri dönmek için bir çalışma zamanı anahtarı ayarlayabilirsiniz. Kullanılabilir anahtarlar hakkında daha fazla bilgi için .NET genelleştirme ve ICU makalesine bakın.
Etkilenen API’ler
- System.Span<T>
- System.String
- Ad alanında çoğu System.Globalization tür
- System.Array.Sort (dize dizisini sıralarken)
- System.Collections.Generic.List<T>.Sort() (liste öğeleri dize olduğunda)
- System.Collections.Generic.SortedDictionary<TKey,TValue> (anahtarlar dize olduğunda)
- System.Collections.Generic.SortedList<TKey,TValue> (anahtarlar dize olduğunda)
- System.Collections.Generic.SortedSet<T> (küme dizeler içerdiğinde)