Criação de cultura e mapeamento de maiúsculas e minúsculas no modo invariável de globalização
Essa alteração interruptiva afeta o modo invariável de globalização de duas maneiras:
- Anteriormente, o .NET permitia que qualquer cultura fosse criada no modo invariável de globalização, desde que o nome da cultura estivesse em conformidade com o BCP-47. No entanto, eram usados os dados de cultura invariáveis em vez dos dados de cultura reais. A partir do .NET 6, uma exceção será gerada se você criar uma cultura diferente da cultura invariável no modo invariável de globalização.
- Anteriormente, o modo invariável de globalização só tinha suporte para mapeamento de maiúsculas e minúsculas para caracteres ASCII. A partir do .NET 6, o modo invariável de globalização fornece suporte completo de mapeamento de maiúsculas e minúsculas para todos os caracteres definidos por Unicode. O mapeamento de maiúsculas e minúsculas é usado em operações como comparações de cadeias de caracteres, pesquisas de cadeia de caracteres e cadeias de caracteres em maiúsculas ou minúsculas.
O modo de globalização invariável é usado em aplicativos que não exigem suporte à globalização. Ou seja, o aplicativo é executado sem acesso a dados e comportamentos específicos da cultura. O modo de globalização invariável é habilitado por padrão em alguns contêineres do Docker, por exemplo, contêineres Alpine.
Comportamento antigo
Nas versões anteriores do .NET, quando o modo invariável de globalização está habilitado:
Se um aplicativo cria uma cultura que não é a cultura invariável, a operação é bem-sucedida, mas a cultura retornada sempre usa os dados de cultura invariáveis em vez dos dados de cultura reais.
O mapeamento de maiúsculas e minúsculas era executado apenas para caracteres ASCII. Por exemplo:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
Novo comportamento
A partir do .NET 6, quando o modo invariável de globalização está habilitado:
Se um aplicativo tentar criar uma cultura que não seja a cultura invariável, uma exceção CultureNotFoundException será gerada.
O mapeamento de maiúsculas e minúsculas é executado para todos os caracteres definidos por Unicode. Por exemplo:
if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
Versão introduzida
.NET 6
Motivo da alteração
A mudança de criação de cultura foi implementada para diagnosticar mais facilmente problemas relacionados à cultura. Alguns usuários não sabem que seus aplicativos estão em execução em um ambiente em que o modo invariável de globalização está habilitado. Eles podem presenciar um comportamento inesperado e não fazer a associação com o modo invariável de globalização, tornando difícil diagnosticar o problema.
O suporte completo de mapeamento de maiúsculas e minúsculas foi introduzido para melhor usabilidade e experiência no modo invariável de globalização.
Ação recomendada
Na maioria dos casos, nenhuma ação é necessária. No entanto, caso deseje ter o comportamento anterior de criação de cultura, você poderá definir uma opção de configuração de runtime para permitir a criação de qualquer cultura no modo invariável de globalização. Para obter mais informações, confira Culturas predefinidas.
APIs afetadas
- CultureInfo
- System.Globalization.CultureInfo.CreateSpecificCulture(String)
- System.Globalization.CultureInfo.GetCultureInfo
- RegionInfo
- Todas as APIs que executam definição de maiúsculas e minúsculas, comparação ou pesquisa de cadeia de caracteres