Как узнать установленный язык на Windows?
Хочу узнать язык, которой стоит на Windows у пользователя. Как это можно сделать? Есть ли библиотека, или куда обратиться в системе?
CultureInfo - здесь не очень подходит, он показывает региональные параметры.
Насчёт регистра. У меня стоит Win 10 на английском (изначально был на русском)

Если доставать значения из регистра, то InstallLanguage почему-то с кодом 0419 (ru-Ru).
Есть InstallLanguageFallback со значением en-Us. Но не получается достать, это значение.
Код:
const string path = @"SYSTEM\CurrentControlSet\Control\Nls\Language";
using RegistryKey key = Registry.LocalMachine.OpenSubKey(path);
string value = key.GetValue("InstallLanguage") as string;
if (int.TryParse(value, NumberStyles.HexNumber, null, out int lcid))
{
CultureInfo info = new CultureInfo(lcid);
Console.WriteLine(info.DisplayName);
Console.WriteLine(info.IetfLanguageTag);
}
Вывод:
Russian (Russia)
ru-RU
Возможно проблема в особенность моей ОС.
Ответы (1 шт):
CultureInfo.InstalledUICulture
CultureInfo systemCulture = CultureInfo.InstalledUICulture;
Если нужно узнать не язык дистрибутива, а текущий MUI, то попробуйте получить значение из реестра
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\
Пример кода
const string path = @"SYSTEM\CurrentControlSet\Control\Nls\Language";
using RegistryKey key = Registry.LocalMachine.OpenSubKey(path);
string value = key.GetValue("InstallLanguage") as string;
if (int.TryParse(value, NumberStyles.HexNumber, null, out int lcid))
{
CultureInfo info = new CultureInfo(lcid);
Console.WriteLine(info.DisplayName);
Console.WriteLine(info.IetfLanguageTag);
}
Вывод в консоль (у меня английский язык системы)
English (United States)
en-US
Из REG_MULTI_SZ строку можно получить так
string lang = (key.GetValue("InstallLanguageFallback") as string[])?.FirstOrDefault(x => x?.Length > 0);



