Sdílet prostřednictvím


Rozhraní API globalizace používají knihovny ICU ve Windows 10.

.NET 5 a novější verze používají knihovny International Components for Unicode (ICU) pro funkce globalizace při spuštění na Aktualizace Windows 10 z května 2019 nebo novější.

Změna popisu

Knihovny .NET Core 1.0 – 3.1 a .NET Framework 4 a novější používají rozhraní API národní podpory jazyků (NLS) pro funkce globalizace ve Windows. Například funkce NLS byly použity k porovnání řetězců, získání informací o jazykové verzi a provádění řetězce v příslušné jazykové verzi.

Počínaje rozhraním .NET 5 platí, že pokud je aplikace spuštěná na Aktualizace Windows 10 z května 2019 nebo novějším, používají knihovny .NET ve výchozím nastavení rozhraní API pro globalizaci ICU.

Poznámka:

Aktualizace Windows 10 z května 2019 a novějších verzích se dodávají s nativní knihovnou ICU. Pokud modul runtime .NET nemůže načíst jednotky ICU, použije místo toho službu NLS.

Rozdíly v chování

V aplikaci se můžou zobrazit změny, i když si neuvědomíte, že používáte zařízení globalizace. Tato část uvádí několik změn chování, které se můžou zobrazit, ale existují i další.

String.IndexOf

Představte si následující kód, který volá String.IndexOf(String) vyhledání indexu znaku nového řádku v řetězci.

string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
  • V .NET Core 3.1 a starších verzích ve Windows se fragment kódu vytiskne 6.
  • V .NET 5 a v Aktualizace Windows 10 z května 2019 a novějších verzích se fragment kódu vytiskne -1.
  • V .NET 6 a novějších verzích se fragmenty 6kódu vytisknou , ale knihovny ICU se stále používají.

Chcete-li tento kód opravit provedením řadového vyhledávání místo vyhledávání citlivého na jazykovou verzi, zavolejte IndexOf(String, StringComparison) přetížení a předejte StringComparison.Ordinal ho jako argument.

Pravidla analýzy kódu CA1307: Zadejte StringComparison pro přehlednost a CA1309: Pomocí řadových stringComparison vyhledejte tyto weby volání ve vašem kódu.

Další informace najdete v tématu Změny chování při porovnávání řetězců v .NET 5+.

Symbol měny

Zvažte následující kód, který formátuje řetězec pomocí specifikátoru Cformátu měny . Jazyková verze aktuálního vlákna je nastavená na jazykovou verzi, která zahrnuje pouze jazyk, nikoli zemi nebo oblast.

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
  • V .NET Core 3.1 a starších verzích ve Windows je "100,00 €"hodnota textu .
  • V .NET 5 a novějších verzích ve Windows 19H1 a novějších verzích je "100,00 ¤"hodnota textu , která místo eura používá symbol mezinárodní měny. V ICU je návrh, že měna je vlastnost země nebo oblasti, nikoli jazyk.

Zkratky dnů v týdnu

Metoda DateTimeFormatInfo.GetShortestDayName(DayOfWeek) získá nejkratší zkrácený název dne pro zadaný den v týdnu.

  • V .NET Core 3.1 a starších verzích ve Windows se tyto zkratky v týdnu skládají ze dvou znaků, například "Su".
  • V .NET 5 a novějších verzích se tyto zkratky dnů v týdnu skládají jenom z jednoho znaku, například "S".

Důvod změny

Tato změna byla zavedena ke sjednocení . Chování globalizace net ve všech podporovaných operačních systémech Poskytuje také možnost aplikacím seskupit vlastní knihovny globalizace, nikoli záviset na integrovaných knihovnách operačního systému.

Zavedená verze

.NET 5.0

Na straně vývojáře není nutná žádná akce. Pokud ale chcete dál používat rozhraní API pro globalizaci služby NLS, můžete nastavit přepínač za běhu, který se má vrátit k danému chování. Další informace o dostupných přepínačích najdete v článku globalizace a ICU platformy .NET.

Ovlivněná rozhraní API

Viz také