определить язык ОС из С#

Есть ли способ определить язык ОС из класса С#?


person crauscher    schedule 26.01.2009    source источник


Ответы (7)


С классом System.Globalization.CultureInfo вы можете определить, что вы хотите.

С помощью CultureInfo.CurrentCulture вы получаете культуру, установленную системой, с помощью CultureInfo.CurrentUICulture вы получаете культуру, установленную пользователем.

person Oliver Friedrich    schedule 26.01.2009
comment
Ваше описание двух свойств неверно. CultureInfo.CurrentCulture — это культура, которая используется для форматирования дат, чисел и т. д. и инициализируется из языкового стандарта пользователя (региональные настройки). CultureInfo.CurrentUICulture — это культура, используемая диспетчером ресурсов для поиска строковых ресурсов, и она инициализируется из языка пользовательского интерфейса ОС. - person Sven; 09.06.2011
comment
Свен правильно указал на проблему, но фактический ответ находится в другом месте. См. Ответ Михая ниже и ссылку на MSDN, которую я включил в комментарий. - person quetzalcoatl; 03.11.2011

К сожалению, предыдущие ответы не на 100% верны.

CurrentCulture — это информация о культуре работающего потока, и она используется для операций, которым необходимо знать текущую культуру, но ничего не отображать. CurrentUICulture используется для форматирования отображения, например, правильного отображения DateTime. Поскольку вы можете изменить текущий поток Culture или UICulture, если вы хотите узнать, что на самом деле представляет собой ОС CultureInfo, используйте CultureInfo.InstalledUICulture.

Кроме того, есть еще один вопрос по этой теме (более свежий, чем этот) с подробным ответом:

Получить язык операционной системы в c#.

person Mihai Drebot    schedule 09.06.2011
comment
Это тоже неправильно. CurrentCulture используется для форматирования дат, чисел и тому подобного, а CurrentUICulture используется для поиска ресурсов. - person Sven; 09.06.2011
comment
Нет, Свен, в этом вы на самом деле ошибаетесь, и Михай написал правильную вещь: CultureInfo.InstalledUICulture, похоже, является фактической предопределенной информацией о культуре операционной системы. Я только что проверил на msdn.microsoft.com/ en-us/library/ и они ясно говорят, что это система по умолчанию! - person quetzalcoatl; 03.11.2011
comment
Не настоящий кетцалькоати, Свен прав. Если я изменю форматы даты, времени и числа на панели управления, это изменит CurrentCulture, но не изменит CurrentUICulture. CurrentUICulture используется или должен использоваться для отображения элементов пользовательского интерфейса. Пожалуйста, не используйте для этого CurrentCulture, так как конечный пользователь может захотеть отображать числа по-другому, но в остальном ему нужен согласованный пользовательский интерфейс. Однако ее не могла волновать культура инсталляторов. - person theking2; 25.12.2014

"System.Globalization.CultureInfo.CurrentUICulture.DisplayName". Это именно то, что вы хотите.

person Lost    schedule 16.09.2013

Вы имеете в виду, настроена ли машина (например) на английском, французском или японском языках?

Взгляните на класс CultureInfo, особенно на CurrentCulture, который инициализируется из текущих региональных настроек ОС.

person Bevan    schedule 26.01.2009
comment
Я думаю, что мы на одной странице, но чтобы точно ответить на то, что он спрашивает: ответ System.Globalization.CultureInfo.CurrentUICulture.DisplayName - person Lost; 16.09.2013
comment
Вместо этого взгляните на CurrentUICulture. CurrentCulture на самом деле не то, что вам нужно. (Смотри мои комментарии выше) - person theking2; 25.12.2014

Означает, что если языковой стандарт системы соответствует региону и языку, вы можете использовать функцию Win32 API GetSystemDefaultLCID. Подпись следующая:

[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();

Функция GetSystemDefaultLCID возвращает LCID. Он может отображать языковую строку из следующей таблицы. Идентификаторы региональных настроек, назначенные Microsoft

person Mark Green    schedule 07.11.2013

Все приведенные выше ответы, похоже, дают вам культуру установки ОС (в лучшем случае). Я столкнулся с проблемой, когда мне нужен был фактический язык отображения, используемый в Windows. то есть пользователь установил установку Windows по умолчанию для en-US, но затем добавил языковой пакет для немецкого (de-DE) и установил его в качестве языка отображения.

Чтобы получить это, я использовал System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage

person Mike Parkhill    schedule 28.06.2016

System.Threading.Thread.CurrentThread.CurrentCulture

person Community    schedule 26.01.2009