Partilhar via


Criação de cultura e mapeamento de casos em modo invariante de globalização

Essa mudança revolucionária afeta o modo invariante da globalização de duas maneiras:

  • Anteriormente, o .NET permitia que qualquer cultura fosse criada no modo invariante da globalização, desde que o nome da cultura estivesse em conformidade com o BCP-47. No entanto, os dados de cultura invariantes foram usados em vez dos dados de cultura reais. A partir do .NET 6, uma exceção será lançada se você criar qualquer cultura diferente da cultura invariante no modo invariante de globalização.
  • Anteriormente, o modo invariante de globalização suportava apenas o mapeamento de casos para caracteres ASCII. A partir do .NET 6, o modo invariante de globalização fornece suporte completo ao mapeamento de maiúsculas e minúsculas para todos os caracteres definidos por Unicode. O mapeamento de casos é usado em operações como comparações de cadeia de caracteres, pesquisas de cadeia de caracteres e cadeias de caracteres de caixa superior ou inferior.

O modo invariante de globalização é usado para aplicativos que não exigem suporte à globalização. Ou seja, o aplicativo é executado sem acesso a dados e comportamento específicos da cultura. O modo invariante de globalização é habilitado por padrão em alguns contêineres do Docker, por exemplo, contêineres alpinos.

Comportamento antigo

Em versões anteriores do .NET quando o modo invariante de globalização está habilitado:

  • Se um aplicativo criar uma cultura que não seja a cultura invariante, a operação será bem-sucedida, mas a cultura retornada sempre usará os dados de cultura invariante em vez dos dados de cultura reais.

  • O mapeamento de casos foi realizado apenas para caracteres ASCII. Por exemplo:

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

Novo comportamento

A partir do .NET 6 quando o modo invariante de globalização está habilitado:

  • Se um aplicativo tentar criar uma cultura que não seja a cultura invariante, uma CultureNotFoundException exceção será lançada.

  • O mapeamento de casos é realizado para todos os caracteres definidos por Unicode. Por exemplo:

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

Versão introduzida

.NET 6

Razão para a alteração

A mudança de criação de cultura foi introduzida para diagnosticar mais facilmente problemas relacionados à cultura. Alguns usuários não sabem que seus aplicativos estão sendo executados em um ambiente onde o modo invariante de globalização está habilitado. Eles podem experimentar um comportamento inesperado e não fazem a associação com o modo invariante da globalização, por isso é difícil diagnosticar o problema.

O suporte completo ao mapeamento de casos foi introduzido para melhor usabilidade e experiência no modo invariante de globalização.

Na maioria dos casos, nenhuma ação é necessária. No entanto, se desejar o comportamento anterior de criação de cultura, você pode definir uma opção de configuração de tempo de execução para permitir a criação de qualquer cultura no modo invariante de globalização. Para obter mais informações, consulte Culturas predefinidas.

APIs afetadas

Consulte também