Sdílet prostřednictvím


Vytvoření jazykové verze a mapování případů v režimu globalizace invariantní

Tato změna způsobující chybu má vliv na invariantní režim globalizace dvěma způsoby:

  • Rozhraní .NET dříve umožňovalo vytvoření jakékoli jazykové verze v režimu globalizace invariant, pokud název jazykové verze odpovídá BCP-47. Invariantní data jazykové verze se však používala místo skutečných dat jazykové verze. Počínaje rozhraním .NET 6 se vyvolá výjimka, pokud vytvoříte jinou jazykovou verzi než invariantní jazykovou verzi v režimu globalizace invariantní.
  • Dříve se v režimu globalizace invariantní režim podporoval pouze mapování velkých a malých písmen pro znaky ASCII. Počínaje rozhraním .NET 6 poskytuje globální režim invariant podporu mapování velkých a malých písmen pro všechny znaky definované v kódování Unicode. Mapování případů se používá v operacích, jako jsou porovnání řetězců, prohledávání řetězců a řetězce velkých nebo malých písmen.

Globalizační režim invariant se používá pro aplikace, které nevyžadují žádnou podporu globalizace. To znamená, že aplikace běží bez přístupu k datům a chováním specifických pro jazykovou verzi. U některých kontejnerů Dockeru, například v kontejnerech Alpine, je ve výchozím nastavení povolen režim globalizace invariantní.

Staré chování

V předchozích verzích .NET, pokud je povolen režim globalizace invariant:

  • Pokud aplikace vytvoří jazykovou verzi, která není neutrální jazykovou verzí, operace bude úspěšná, ale vrácená jazyková verze vždy použije invariantní data jazykové verze místo skutečných dat jazykové verze.

  • Mapování případů bylo provedeno pouze pro znaky ASCII. Příklad:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
    

Nové chování

Počínaje rozhraním .NET 6, když je povolen režim globalizace invariant:

  • Pokud se aplikace pokusí vytvořit jazykovou verzi, která není neutrální jazykovou verzí, CultureNotFoundException vyvolá se výjimka.

  • Mapování případů se provádí pro všechny znaky definované v kódování Unicode. Příklad:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
    

Zavedená verze

.NET 6

Důvod změny

Změna vytváření kultury byla zavedena, aby se snadněji diagnostikovala problémy související s jazykovou verzí. Někteří uživatelé si neuvědomují, že jejich aplikace běží v prostředí, ve kterém je povolen režim globalizace invariantní. Může docházet k neočekávanému chování a nepřidružuje přidružení k režimu invariantní globalizace, takže je těžké problém diagnostikovat.

Byla zavedena úplná podpora mapování případů pro lepší použitelnost a zkušenosti v režimu globalizace invariantní.

Ve většině případů není potřeba žádná akce. Pokud však chcete použít předchozí chování při vytváření jazykové verze, můžete nastavit možnost konfigurace modulu runtime, která umožní vytvoření jakékoli jazykové verze v režimu globalizace invariantní. Další informace najdete v tématu Předdefinované jazykové verze.

Ovlivněná rozhraní API

Viz také