如何在Windows 7或更高版本中正确获取系统语言

时间:2019-04-23 12:03:07

标签: delphi delphi-2007

我需要提取用户的Windows语言,并且正在使用以下功能。但是我在当前机器上进行了测试(使用的是英语),但函数返回的是“葡萄牙语(巴西)”。

实际上我的机器原本是用这种语言编写的,但是在我安装了新的语言包之后,它现在是英文的,而不是葡萄牙语的;所以我认为下面的功能不能正常工作。还有另一种选择吗?

谢谢

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

2 个答案:

答案 0 :(得分:4)

为了获取有关当前用户正在使用哪种语言用于Windows UI的信息,您应该使用GetUserDefaultUILanguage函数而不是GetSystemDefaultLangID

如果当前用户未设置任何语言,则返回系统默认UI语言。

对于Delphi 2007,您需要声明该函数,因为该函数在该版本发布时不存在。请注意,如此处所示以静态方式进行操作,将意味着您的应用将不再在Windows 2000之前的Windows版本上运行。

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

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

答案 1 :(得分:3)

您要使用GetUserDefaultLangID。如果在安装Windows时将计算机设置为葡萄牙语,则这是系统的默认语言。用户当前选择的语言是登录用户选择的语言。 (请参阅链接页面上的备注。)

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