Partager via


Les API de globalisation utilisent des bibliothèques ICU sur Windows Server 2019

.NET 7 et versions ultérieures utilisent des bibliothèques International Components for Unicode (ICU) pour la fonctionnalité de globalisation lors de l’exécution sur Windows Server 2019. Les éditions non serveur de Windows utilisent l’ICU depuis .NET 5. Toutefois, .NET 7 a introduit la prise en charge du chargement d’ICU dans les versions antérieures du client Windows, en particulier windows 10 versions 1703, 1709, 1803 et 1809.

Comportement précédent

Dans .NET 5 et .NET 6, les bibliothèques .NET utilisaient les API NLS (National Language Support) pour la fonctionnalité de globalisation sur Windows Server 2019. Par exemple, les fonctions NLS étaient utilisées pour comparer des chaînes, obtenir des informations de culture et effectuer la casse de chaîne dans la culture appropriée. Ce comportement s’applique également aux versions du client Windows 10, telles que 1703, 1709, 1803 et 1809.

Nouveau comportement

À compter de .NET 7, si une application s’exécute sur Windows Server 2019 ou windows 10 versions clientes 1703, 1709, 1803 et 1809, les bibliothèques .NET utilisent les API de globalisation iCU , par défaut. (Les versions de Windows non serveur utilisent déjà l’ICU depuis .NET 5, il n’y a donc aucune modification pour ces versions.)

Différences comportementales

Vous pourriez observer des changements dans votre application, même si vous ne réalisez pas que vous utilisez des fonctionnalités de globalisation. L’exemple suivant montre l’une des modifications comportementales que vous pouvez voir, mais il y en a d’autres également.

Symbole monétaire

Considérez le code suivant qui met en forme une chaîne à l’aide du spécificateur Cde format monétaire. La culture du thread actuel est configurée de manière à inclure uniquement la langue, sans le pays ou la région.

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
  • Dans .NET 5 et .NET 6 sur Windows Server 2019 ou windows 10 versions clientes 1703, 1709, 1803 et 1809, la valeur du texte est "100,00 €".
  • Dans .NET 7 sur Windows Server 2019 ou Windows 10 versions clientes 1703, 1709, 1803 et 1809, la valeur du texte est "100,00 ¤", qui utilise le symbole monétaire international au lieu de l’euro. Dans l’ICU, la conception est qu’une devise est une propriété d’un pays ou d’une région, et non une langue.

Raison de la modification

  • .NET a introduit certaines API qui dépendent des bibliothèques d’ICU, par exemple TimeZoneInfo.TryConvertIanaIdToWindowsId(String, String). Les utilisateurs qui souhaitaient utiliser ces API sur Windows Server 2019 étaient tenus de déployer manuellement des bibliothèques DCU avec leurs fichiers binaires, à l’aide de la fonctionnalité ICU App Local. Ce n’était pas une excellente solution, car le code peut se trouver dans une bibliothèque qui ne peut pas contrôler l’installation des bibliothèques d’ICU avec l’application ou le service qui utilise la bibliothèque.
  • Si Windows Server 2019 est automatiquement fourni par une plateforme cloud (comme Azure), le service déployé ne sait pas nécessairement qu’il va s’exécuter sur un tel serveur. En outre, le propriétaire du service doit gérer si/quand déployer des fichiers binaires ICU. De plus, chaque service déployé sur le cloud à l’aide de Windows Server 2019 qui souhaite utiliser les nouvelles API dépendantes de l’ICU .NET doit déployer les fichiers binaires DCU avec le service. Cela peut gonfler la taille sur le disque sur le serveur.
  • Certains utilisateurs préfèrent utiliser ICU par défaut, car cela est conforme à la norme Unicode.

Version introduite

.NET 7

Si vous utilisez .NET 7 sur Windows Server 2019 ou Windows 10 versions clientes 1703, 1709, 1803 ou 1809, nous vous recommandons de tester votre application ou service avant de l’envoyer pour vous assurer que le comportement est comme prévu et ne interrompt aucun utilisateur.

Si vous souhaitez continuer à utiliser les API de globalisation NLS, vous pouvez définir un commutateur d’exécution pour revenir à ce comportement. Pour plus d’informations sur les commutateurs disponibles, consultez l’article sur la globalisation .NET et l’ICU .

API affectées

Voir aussi