Как правильно получить системный язык в Windows 7 или новее - PullRequest
1 голос
/ 23 апреля 2019

Мне нужно извлечь язык Windows пользователя, и я использую функцию ниже.Тем не менее, я проверил в моей текущей машине (это операционный английский), но функция возврата "португальский (Бразилия)".

На самом деле моя машина изначально была на этом языке, но после того, как я установил новый языковой пакет, теперь он на английском, а не на португальском языке;поэтому я предполагаю, что функция ниже не работает должным образом.Есть ли другая альтернатива?

Спасибо

function GetWindowsLanguage: string;
var
  WinLanguage: array [0..50] of char;
begin
  VerLanguageName(GetSystemDefaultLangID, WinLanguage, 50);
  Result := StrPas(WinLanguage);
end;

Ответы [ 2 ]

4 голосов
/ 23 апреля 2019

Чтобы получить информацию о том, какой язык используется для пользовательского интерфейса Windows текущим пользователем, вы должны использовать функцию GetUserDefaultUILanguage вместо GetSystemDefaultLangID

Если текущий пользователь не установиллюбой язык, который затем возвращается System UI Language.

Для Delphi 2007 вам нужно объявить функцию, так как она не существовала на момент выпуска этой версии.Обратите внимание, что если делать это статически, как показано здесь, ваше приложение больше не будет работать в версиях Windows до Windows 2000.

function GetUserDefaultUILanguage: LANGID; stdcall; external 'kernel32';

function GetUsersWindowsLanguage: string;
var
  WinLanguage: array [0..50] of char;
begin
  VerLanguageName(GetUserDefaultUILanguage, WinLanguage, 50);
  Result := WinLanguage;
end;
3 голосов
/ 23 апреля 2019

Вы хотите GetUserDefaultLangID взамен. Если ваша машина была установлена ​​на Portugese при установке Windows, это язык по умолчанию для вашей системы. Текущий выбранный пользователем язык - это язык, выбранный вошедшим в систему пользователем. (См. Примечания на связанной странице.)

function GetUsersWindowsLanguage: string;
var
  WinLanguage: array [0..50] of char;
begin
  VerLanguageName(GetUserDefaultLangID, WinLanguage, 50);
  Result := StrPas(WinLanguage);
end;
...