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

del*_*les 1 delphi delphi-2007

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

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

谢谢

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

Sil*_*ior 5

为了获取有关当前用户正在为 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;
Run Code Online (Sandbox Code Playgroud)

  • @delphirules:请参阅我对此答案所做的编辑。我在 Windows 7 上的 Delphi 2007 中编译并测试了它(以及这个答案中的其余代码)。 (2认同)