2015-12-07 3 views
1

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

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

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

Выходы culture: eng

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

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

+0

Вы всегда можете создать культуру, которая не существует. –

+0

Как вы это понимаете? Если я запускаю приведенный выше фрагмент, например. наша промежуточная машина, я получаю исключение, говоря, что культура не поддерживается (что я и ожидал) – aeliusd

ответ

0

Если вы используете Windows 10, изменилось поведение культуры: «unkown», но «возможно существующие» культуры (3-буквенные iso) приведут только к культуре «Unkown locale» с LCID 4096. Pre-Windows 10 это привело бы к исключению (если вы не установили такую ​​пользовательскую культуру)

MSDN-Link

 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) 
     { 

     } 
0

в качестве documentation состояний:

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

Так в основном, ваша операционная система имеет en-EN в качестве альтернативного имени существующей культуры (скорее en-US), пока она не существует на Лазурном VM.

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