Как программно узнать язык операционной системы Windows (начиная с Windows XP)?
Интересует именно язык системы - то есть язык, на котором Windows общается с пользователем программы, а не выбранная страна или раскладка клавиатуры и т.п. Условно говоря, надо узнать на каком языке написано название "My Computer" или "Мой Компьютер" или "Mój Komputer". Формат полученного обозначения не так важен (ISO или англ.текст или локализованый текст).
Мысли вслух:
Попробовал несколько вариантов, включая GetLocaleInfo(LOCALE_USER_DEFAULT.., GetSystemDefaultLangID, GetUserDefaultLangID, но ни один из них не вернул мне локаль моей ОС (англ.), а вернул Russian. пока что единственная правдоподобная зацепка - hklm\system\controlset001\control
ls\language\Installlanguage, но тогда непонятно, почему Install Language один (англ.), а Default другой (рус.), при том что ОС со мной общается на английском.
Ответ
Для относительно новых версий Delphi можно воспользоваться вызовом GetUserDefaultUILanguage из модуля WinAPI.Windows (возвращает значение языка интерфейса, выбранное текущим пользователем):
var
i: integer
<...>
i := Lo(GetUserDefaultUILanguage); // нижнего байта достаточно для определения языка, вида надписей на кнопках и т.п.
// Это может быть не так для экзотических языков, но с ними я не сталкивался
case i of
$19: // русский
end;
Вот список ряда языков, возвращаемых в нижнем байте или же оф. список от Майкрософт
Для старых версий Delphi придётся самостоятельно определить GetUserDefaultUILanguage из kernel32.dll, например, так:
function GetSystemDefaultUILanguage: integer; stdcall; external 'kernel32.dll';
Поскольку @teran первым указал на функцию, ответ можно оформить, как общий.
Комментариев нет:
Отправить комментарий