Mensagem de erro quando executa uma aplicação ou tenta aceder a um Web site num computador com uma determinada atualização de software .NET Framework 2.0 instalada: "O nome da cultura "Cultura" não é suportado"

Sintomas

Num computador com o Microsoft Windows Server 2003 instalado, instale a atualização de software microsoft .NET Framework 2.0 descrita no seguinte artigo na Base de Dados de Conhecimento Microsoft:

928365 Descrição da atualização de segurança do .NET Framework 2.0 para Windows Server 2003, Windows XP e Windows 2000: 10 de julho de 2007

 Quando executa uma aplicação ou tenta aceder a um Web site no computador, poderá receber a seguinte mensagem de erro:

Nota

[System.ArgumentException] : Culture name 'Culture' is not supported for the following 13 cultures: 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

Além disso, se uma aplicação tiver recursos que utilizam o formato de nome de cultura antigo e se o nome da cultura do utilizador utilizar o novo formato de nome de cultura, a aplicação não conseguirá localizar recursos para o formato de nome de cultura antigo.

Causa

A atualização de software mencionada na secção "Sintomas" é uma atualização cumulativa para o .NET Framework 2.0. Esta atualização inclui alterações aos nomes da cultura. Os novos nomes de cultura seguem a sintaxe das normas IETF (RFC 4646 e RFC 4647). As alterações aos nomes de cultura melhoram a interoperabilidade ao garantir que cada região tem um identificador consistente.

Os mapeamentos dos nomes de cultura antigos para os novos nomes de cultura são os seguintes:

Nome da cultura antiga Novo nome de cultura
az-AZ-Latn az-Latn-AZ
uz-UZ-Latn uz-Latn-UZ
sr-SP-Latn sr-Latn-CS
az-AZ-Cyrl az-Cyrl-AZ
uz-UZ-Cyrl uz-Cyrl-UZ
sr-SP-Cyrl sr-Cyrl-CS
bs-BA-Cyrl bs-Cyrl-BA
sr-BA-Latn sr-Latn-BA
sr-BA-Cyrl sr-Cyrl-BA
bs-BA-Latn bs-Latn-BA
iu-CA-Latn iu-Latn-CA
div-MV dv-MV
en-CB en-029

Solução

Para contornar este problema, crie culturas personalizadas a partir das novas regiões que utilizam os nomes de cultura antigos. Para tal, siga estes passos.

Nota Tem de ter o .NET Framework 2.0 instalado para utilizar o programa de exemplo fornecido aqui.

  1. Crie uma aplicação que possa ser utilizada para criar uma cultura personalizada. Para fazê-lo, siga estes passos:

    1. Clique em Iniciar, clique em Executar, escreva bloco de notas e, em seguida, clique em OK.

    2. Cole o seguinte código no Bloco de Notas.

      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);
              }
          }
      }
      
      

      Nota Este programa de exemplo define os pais das novas culturas para as culturas antigas. Os pais das culturas antigas não podem ser as novas culturas ao mesmo tempo, porque esta situação causaria uma recursão infinita durante a procura de recursos.

    3. No menu Ficheiro, clique em Guardar Como.

    4. Na caixa de diálogo Guardar Como, clique em O Meu Documento, escreva MakeCultures.cs na caixa Nome de ficheiro, clique em Todos os Files na caixa Guardar com o tipo e, em seguida, clique em Guardar.

    5. Saia do Bloco de Notas.

  2. Execute a aplicação que criou no passo 1 para criar uma cultura personalizada. Para fazê-lo, siga estes passos:

    1. Clique em Iniciar, clique em Executar, escreva cmd e, em seguida, clique em OK.
    2. Escreva cd "Os Meus Documentos" e, em seguida, prima ENTER
    3. Escreva %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs e, em seguida, prima ENTER.
    4. Escreva MakeCultures.exe para executar o programa para criar a cultura.

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".