Можно создать культуру для en-EN на локальном компьютере разработчика.

Я только что развернул наше приложение в тестовой среде Azure и столкнулся с проблемой, связанной с тем, что культура en-EN не поддерживается. Немного покопавшись, я обнаружил, что такой культуры не существует, и вместо этого я должен использовать en-GB или en-US.

Но, теперь к моему вопросу. На моей локальной машине разработки у меня нет проблем с созданием CultureInfo с en-EN.

CultureInfo ci = new CultureInfo("en-EN"); 
Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName);

Выходы culture: eng

Я также попытался перечислить все культуры с помощью CultureInfo.GetCultures(CultureTypes.AllCultures);, и в результате нет соответствующей культуры en-EN.

Так что же происходит, почему я могу создавать культуру, которой не должно быть?


person aeliusd    schedule 07.12.2015    source источник
comment
Всегда можно создать культуру, которой не существует.   -  person Robert McKee    schedule 07.12.2015
comment
Что ты имеешь в виду? Если я запускаю приведенный выше фрагмент, например. наша промежуточная машина, я получаю исключение, говорящее, что культура не поддерживается (чего я и ожидал)   -  person aeliusd    schedule 07.12.2015


Ответы (2)


Если вы используете Windows 10, поведение культуры изменилось: «неизвестно», но «возможно существующие» культуры (трехбуквенный iso) приведут только к культуре «Неизвестная локаль» с LCID 4096. До Windows 10 это привело бы к исключение (если вы не установили такую ​​пользовательскую культуру)

MSDN-ссылка

        try
        {


            // ok
            CultureInfo culture1 = new CultureInfo("foo");
            CultureInfo culture2 = new CultureInfo("xyz");
            CultureInfo culture3 = new CultureInfo("en-xy");

            // not ok - exception
            CultureInfo culture4 = new CultureInfo("foox");

        }
        catch (Exception exc)
        {

        }
person Robert Muehsig    schedule 30.03.2017

Как указано в документации:

Начиная с приложений, работающих под управлением .NET Framework 4 или более поздней версии в Windows 7 или более поздней версии, метод пытается получить объект CultureInfo, идентификатором которого является имя, из операционной системы; если операционная система не поддерживает этот язык и региональные параметры, а имя не является именем дополнительного или замещающего языка и региональных параметров, метод выдает исключение CultureNotFoundException.

Таким образом, ваша ОС имеет en-EN в качестве альтернативного имени существующей культуры (более вероятно, en-US), хотя ее нет на виртуальной машине Azure.

Решение: используйте настоящее имя культуры (которое вы можете найти здесь)

person Jcl    schedule 30.03.2017