Message d'erreur lorsque vous exécutez une application ou lorsque vous essayez d'accéder à un site Web sur un ordinateur sur lequel est installée une mise à jour particulière du logiciel .NET Framework 2.0 : « Nom de culture 'Culture' non pris en charge »


Symptômes


Sur un ordinateur Microsoft Windows Server 2003, vous installez la mise à jour pour Microsoft .NET Framework 2.0 décrite dans l'article suivant de la Base de connaissances Microsoft :
928365 Description of the security update for the .NET Framework 2.0 for Windows Server 2003, Windows XP, and Windows 2000: July 10, 2007

Lorsque vous exécutez une application ou que vous essayez d'accéder à un site Web sur l'ordinateur, le message d'erreur suivant peut s'afficher :
[System.ArgumentException] : Le nom de culture 'Culture' n'est pas pris en charge pour les 13 cultures suivantes : en-CB az-AZ-Latn uz-UZ-Latn sr-SP-Latn az-AZ-Cyrl uz-UZ-Cyrl sr-SP-Cyrl bs-BA-Cyrl sr-BA-Latn sr-BA-Cyrl bs-BA-Latn iu-CA-Latn div-MV
En outre, si une application a des ressources qui utilisent l'ancien format de nom de culture et que le nom de culture de l'utilisateur utilise le nouveau format, l'application ne peut pas trouver les ressources pour l'ancien format de nom de culture.

Cause


La mise à jour logicielle décrite dans la section « Symptômes » est une mise à jour cumulative pour .NET Framework 2.0. Elle inclut des modifications des noms de culture. Les nouveaux noms de culture suivent la syntaxe des normes IETF (RFC 4646 et RFC 4647). Les modifications apportées aux noms de culture améliorent l'interopérabilité en assurant que chaque paramètre régional dispose d'un identificateur cohérent.

Les correspondances entre les anciens noms de culture et les nouveaux sont répertoriées dans le tableau suivant :
Ancien nom de cultureNouveau nom de culture
az-AZ-Latnaz-Latn-AZ
uz-UZ-Latnuz-Latn-UZ
sr-SP-Latnsr-Latn-CS
az-AZ-Cyrlaz-Cyrl-AZ
uz-UZ-Cyrluz-Cyrl-UZ
sr-SP-Cyrlsr-Cyrl-CS
bs-BA-Cyrlbs-Cyrl-BA
sr-BA-Latnsr-Latn-BA
sr-BA-Cyrlsr-Cyrl-BA
bs-BA-Latnbs-Latn-BA
iu-CA-Latniu-Latn-CA
div-MVdv-MV
en-CBen-029

Contournement


Pour contourner ce problème, créez des cultures personnalisées à partir des nouveaux paramètres régionaux utilisant les anciens noms de culture. Pour cela, procédez comme suit :

Remarque .NET Framework 2.0 doit être installé sur l'ordinateur pour utiliser l'exemple de programme présenté ici.
  1. Créez une application qui peut être utilisée pour créer une culture personnalisée. Pour cela, procédez comme suit :
    1. Cliquez sur Démarrer, puis sur Exécuter. Tapez notepad, puis cliquez sur OK.
    2. Collez le code suivant dans le Bloc-notes.
      using System;
      using System.Globalization;

      public class MakeCultures
      {
      static void Main()
      {
      CreateCopyCulture("en-029", "en-CB");
      CreateCopyCulture("az-Latn-AZ", "az-AZ-Latn");
      CreateCopyCulture("uz-Latn-UZ", "uz-UZ-Latn");
      CreateCopyCulture("sr-Latn-CS", "sr-SP-Latn");
      CreateCopyCulture("az-Cyrl-AZ", "az-AZ-Cyrl");
      CreateCopyCulture("uz-Cyrl-UZ", "uz-UZ-Cyrl");
      CreateCopyCulture("sr-Cyrl-CS", "sr-SP-Cyrl");
      CreateCopyCulture("bs-Cyrl-BA", "bs-BA-Cyrl");
      CreateCopyCulture("sr-Latn-BA", "sr-BA-Latn");
      CreateCopyCulture("sr-Cyrl-BA", "sr-BA-Cyrl");
      CreateCopyCulture("bs-Latn-BA", "bs-BA-Latn");
      CreateCopyCulture("iu-Latn-CA", "iu-CA-Latn");
      CreateCopyCulture("dv-MV", "div-MV");


      }

      static void CreateCopyCulture(string strRealName, string strAliasName)
      {
      try
      {
      // Create a new culture based on the old name
      CultureAndRegionInfoBuilder carib = new CultureAndRegionInfoBuilder(
      strAliasName, CultureAndRegionModifiers.None);

      carib.LoadDataFromCultureInfo(new CultureInfo(strRealName));
      carib.LoadDataFromRegionInfo(new RegionInfo(strRealName));

      carib.Register();

      // Change the existing culture's parent to the old culture
      carib = new CultureAndRegionInfoBuilder(strRealName,
      CultureAndRegionModifiers.Replacement);

      carib.Parent = new CultureInfo(strAliasName);
      carib.Register();

      // Verify they're registered...
      CultureInfo ci = new CultureInfo(strAliasName);
      Console.WriteLine("Aliased culture {0} has parent of {1}.", ci, ci.Parent);
      ci = new CultureInfo(strRealName);
      Console.WriteLine("\"Real\" culture {0} has parent of {1}.", ci, ci.Parent);
      }
      catch (Exception e)
      {
      Console.WriteLine("Unable to create custom culture " + strAliasName);
      Console.WriteLine(e);
      }
      }
      }
      Remarque Cet exemple de programme définit les anciennes cultures comme parents des nouvelles cultures. Les parents des anciennes cultures ne peuvent pas être simultanément les nouvelles cultures, car cette situation provoquerait une situation de récursion infinie lors de la recherche des ressources.

    3. Dans le menu Fichier, cliquez sur Enregistrer sous.
    4. Dans la boîte de dialogue Enregistrer sous, cliquez sur Mes documents, tapez MakeCultures.cs dans la zone Nom de fichier, cliquez sur Tous les fichiers dans la zone Type, puis sur Enregistrer.
    5. Quittez le Bloc-notes.
  2. Exécutez l'application créée à l'étape 1 pour générer une culture personnalisée. Pour cela, procédez comme suit :
    1. Cliquez sur Démarrer, sur Exécuter, tapez cmd, puis cliquez sur OK.
    2. Tapez cd "Mes documents", puis appuyez sur ENTRÉE.
    3. Tapez %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs, puis appuyez sur ENTRÉE.
    4. Tapez MakeCultures.exe pour exécuter le programme qui crée la culture.

Statut


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.