2013-06-28 3 views
1

Рассмотрим этот код:TextInfo для Нейтральной Культуры - как определяется область не нейтральной культуры?

new CultureInfo("sv").TextInfo.CultureName 

Это возвращает "SV-SE". Но почему? Почему бы не «sv-FI» или какая-то другая культура? Как определяется регион?

documentation for CultureName говорит

Если CultureInfo.Name имеет нейтральную культуру в качестве своего значения, то соответствующего CultureName имеет в качестве значения произвольной конкретного культуры, которая использует тот же язык. Например, свойство Name возвращает «en» для английской нейтральной культуры, но соответствующая собственность CultureName может возвращать «en-US» для английской (United государств).

Непонятно, как выбирается регион. Для «en» выбранный регион - «США», что приводит к культуре en-US.

Это кажется отличным способом автоматического получения «первичной» области для языка - но действительно ли это так? Или совершенно случайно, что выбраны sv-SE и en-US? Слово «может» кажется слишком неопределенным, чтобы полагаться на него.

ответ

1

Посмотрите http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx

культур в .Net есть идентификатор, где последние 10 бит определяет язык, а остальные биты определяют область.

для английского языка идентификатор 9 и en_US имеет идентификатор 0x0409 - en_GB имеет 0x0809

поэтому я думаю, если вы не предоставите и область он просто принимает первый в соответствии с ID

CultureID = LanguageID + 0x0400 

те же припадки также для SV-SE и SV-FI

+0

Интересно. Так как обходное решение «TextInfo» - это взлома, есть ли более прямой путь к области по умолчанию для языка или нейтральной культуры? То есть, способ получения языковой культуры 0x0400 + без использования 'TextInfo'? – bzlm

+0

@bzlm не уверен, что я понял ваш вопрос, в информации о культуре есть [LCID] (http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.lcid.aspx). Какой идентификатор языка + региона. Вы также можете использовать этот LCID для создания нового экземпляра информации о культуре. Я использую его в веб-приложении для идентификатора языка, так как проще работать с числами, чем с символами. Надеюсь, что это помогло – peter

1

базовые данные для языка нейтральных карт обратно к данному конкретному языку, который вы можете узнать, позвонив по телефону System.Globalization.Cultureinfo.CreateSpecificCulture с нейтральным языком , Что касается причин, то есть некоторая попытка отобразить в регион с большинством динамиков, но может также иметь место с начальной поддержкой языка - первый поддерживаемый диалект становится главным. В любом случае, это не то, что меняется после его создания. Почему вы хотите определить основной регион для языка?