Бөлісу құралы:


Создание языка и региональных параметров и сопоставление регистра в инвариантном режиме глобализации

Это критическое изменение затрагивает инвариантный режим глобализации двумя способами:

  • Ранее платформа .NET позволяла создавать любые языки и региональные параметры в инвариантном режиме глобализации, если имя языка и региональных параметров соответствовало спецификации BCP-47. Однако вместо реальных данных использовались данные инвариантных языка и региональных параметров. Начиная с .NET 6, при создании любых языка и региональных параметров, отличных от инвариантных, в инвариантном режиме глобализации выдается исключение.
  • Ранее инвариантный режим глобализации поддерживал сопоставление регистра только для символов ASCII. Начиная с .NET 6, инвариантный режим глобализации обеспечивает полную поддержку сопоставления регистра для всех символов, определенных в Юникоде. Сопоставление регистра используется в таких операциях, как сравнение строк, поиск строк, а также перевод строк в верхний или нижний регистр.

Инвариантный режим глобализации используется для приложений, не требующих поддержку глобализации. Это значит, что приложение выполняется без доступа к данным и поведению, зависящим от языка и региональных параметров. Инвариантный режим глобализации по умолчанию включен в некоторых контейнерах Docker, например в контейнерах Alpine.

Старое поведение

В предыдущих версиях .NET при включенном инвариантном режиме глобализации имело место следующее:

  • Если приложение создает язык и региональные параметры, не являющиеся инвариантными, операция завершается успешно, но возвращаемые язык и региональные параметры всегда используют данные инвариантных языка и региональных параметров вместо реальных данных.

  • Сопоставление регистра выполнялось только для символов ASCII. Например:

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

Новое поведение

Начиная с .NET 6, при включенном инвариантном режиме глобализации имеет место следующее:

  • Если приложение пытается создать язык и региональные параметры, не являющиеся инвариантными, возникает исключение CultureNotFoundException.

  • Сопоставление регистра выполняется для всех символов, определенных в Юникоде. Например:

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

Представленные версии

.NET 6

Причина изменения

Такое изменение создания языка и региональных параметров было внесено, чтобы упростить диагностику проблем, связанных с языком и региональными параметрами. Некоторые пользователи не догадываются, что их приложения выполняются в среде с включенным инвариантным режимом глобализации. Они могут столкнуться с непредвиденным поведением и не связывать его с инвариантным режимом глобализации, что затрудняет диагностирование проблемы.

Полная поддержка сопоставления регистра была введена для повышения удобства использования и улучшения взаимодействия в инвариантном режиме глобализации.

В большинстве случаев никаких действий выполнять не требуется. Однако, если вам требуется предыдущее поведение при создании языка и региональных параметров, можно задать параметр конфигурации времени выполнения, чтобы разрешить создание любых языка и региональных параметров в инвариантном режиме глобализации. Дополнительные сведения см. в разделе Предопределенные языки и региональные параметры.

Затронутые API

См. также