Проблема
На компьютере под управлением Microsoft Windows Server 2003 необходимо установить обновление для Microsoft .NET Framework 2.0, описанное в следующей статье базы знаний Майкрософт:
928365 Описание обновления безопасности для .NET Framework 2.0 для Windows Server 2003, Windows XP, and Windows 2000: 10 июля 2007 г. При запуске приложения или попытке доступа на веб-узел с компьютера может появиться сделдующее сообщение об ошибке:
[System.ArgumentException] : Имя культуры 'Culture' не поддерживается для следующих 13 культур: 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
Кроме того, если приложение обладает источниками, использующими устаревший формат имени культуры, и если имя культуры пользователя использует новый формат имени культуры, приложение не сможет найти источники для старого формата имени культуры.
Причина
Обновление, упоминавшееся в разделе «Проблема», является накопительным обновлением для .NET Framework 2.0. Это обновление включает изменения имен культур. Новые имена культур соответствуют синтаксису стандартов проблемной группы проектирования Интернета (IETF) (RFC 4646 и RFC 4647). Изменение имен культур улучшает возможность взаимодействия, так как каждый язык теперь имеет постоянный идентификатор.
Сопоставление старых имен культур с новыми именами культур следующее:
Старое имя культуры |
Новое имя культуры |
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 |
Временное решение
В качестве обхода проблемы можно создать пользовательские культуры из новых языков, использующих старые имена культур. Для этого выполните следующие действия.
Примечание. Для того чтобы использовать программу-пример, приведенную здесь, необходимо, чтобы на компьютере был установлен .NET Framework 2.0.
-
Создайте приложение, которое может быть использовано для создания пользовательской культуры. Для этого выполните следующие действия:
-
Выберите в меню Пуск пункт Выполнить, введите команду notepad и нажмите кнопку OК.
-
Запустите программу «Блокнот» и скопируйте в окно редактора приведенный ниже код.
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);
}
}
}Примечание. Эта программа-пример задает родителей новых культур родителями старых культур. Родители старых культур не могут быть одновременно родителями новых культур, так как эта ситуация приведет к бесконечной рекурсии в течение поиска источника.
-
В меню Файл выберите команду Сохранить как.
-
В диалоговом окне Сохранить как выберите Мой документ, введите MakeCultures.cs в поле Имя файла, щелкните Все файлы в поле Тип файла, а затем щелкните Сохранить.
-
Закройте приложение «Блокнот».
-
-
Запустите созданное приложение для создания пользовательской культуры. Для этого выполните следующие действия:
-
Выберите в меню Пуск пункт Выполнить, введите команду cmd и нажмите кнопку ОК.
-
Введите команду cd "Мои документы" и нажмите клавишу ВВОД.
-
Введите %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs и нажмите клавишу ВВОД.
-
Чтобы создать культуру, введите MakeCultures.exe для запуска программы.
-
Статус
Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе «Информация в данной статье применима к».