Création de culture et mappage de casse en mode invariant de globalisation

Ce changement cassant affecte le mode invariant de la globalisation de deux manières :

  • Auparavant, .NET autorisait la création d’une culture en mode invariant de globalisation, tant que le nom de la culture était conforme à BCP-47. Toutefois, les données de culture invariantes étaient utilisées à la place des données de culture réelles. À compter de .NET 6, une exception est levée si vous créez une culture autre que la culture invariante en mode invariant de globalisation.
  • Auparavant, le mode invariant de globalisation prenait uniquement en charge le mappage de casse pour les caractères ASCII. À compter de .NET 6, le mode invariant de globalisation offre une prise en charge complète du mappage de casse pour tous les caractères définis par Unicode. Le mappage de casse est utilisé dans des opérations comme les comparaisons de chaînes, les recherches de chaînes et le changement de casse de chaînes (en minuscules ou majuscules).

Le mode invariant de globalisation est utilisé pour les applications qui n’ont pas besoin d’une prise en charge de la globalisation. Autrement dit, l’application s’exécute sans accès aux données et au comportement propres à la culture. Le mode invariant de globalisation est activé par défaut sur certains conteneurs Docker, par exemple les conteneurs Alpine.

Ancien comportement

Dans les versions précédentes de .NET, lorsque le mode invariant de globalisation est activé :

  • Si une application crée une culture qui n’est pas la culture invariante, l’opération réussit, mais la culture retournée utilise toujours les données de culture invariantes au lieu des données de culture réelles.

  • Le mappage de casse était effectué uniquement pour les caractères ASCII. Par exemple :

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

Nouveau comportement

À partir de .NET 6, lorsque le mode invariant de globalisation est activé :

  • Si une application tente de créer une culture qui n’est pas la culture invariante, une exception CultureNotFoundException est levée.

  • Le mappage de casse est effectué pour tous les caractères définis par Unicode. Par exemple :

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

Version introduite

.NET 6

Raison du changement

Le changement de création de culture a été introduit pour diagnostiquer plus facilement les problèmes liés à la culture. Certains utilisateurs ne savent pas que leurs applications s’exécutent dans un environnement où le mode invariant de globalisation est activé. Ils peuvent rencontrer un comportement inattendu et ne pas faire l’association avec le mode invariant de globalisation ; il est donc difficile de diagnostiquer le problème.

La prise en charge complète du mappage de casse a été introduite pour plus de convivialité et une meilleure expérience en mode invariant de globalisation.

Dans la plupart des cas, aucune action n’est nécessaire. Toutefois, si vous souhaitez revenir au comportement de création de culture précédent, vous pouvez définir une option de configuration du runtime pour autoriser la création de n’importe quelle culture en mode invariant de globalisation. Pour plus d’informations, consultez Cultures prédéfinies.

API affectées

Voir aussi