【发布时间】:2019-04-04 14:05:09
【问题描述】:
我正在使用 win32 控制台应用程序。我想在我的 win32 应用程序中获取当前系统区域设置或文化信息。 喜欢 en-US 或 zh-CN。
WINAPI有没有提供什么。
这方面的示例代码会很有帮助。
【问题讨论】:
我正在使用 win32 控制台应用程序。我想在我的 win32 应用程序中获取当前系统区域设置或文化信息。 喜欢 en-US 或 zh-CN。
WINAPI有没有提供什么。
这方面的示例代码会很有帮助。
【问题讨论】:
你应该使用GetLocaleInfo。
wchar_t szISOLang[5] = { 0 };
wchar_t szISOCountry[5] = { 0 };
::GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_SISO639LANGNAME,
szISOLang,
sizeof(szISOLang) / sizeof(wchar_t));
::GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_SISO3166CTRYNAME,
szISOCountry,
sizeof(szISOCountry) / sizeof(WCHAR));
std::wcout << szISOLang << "_" << szISOCountry << std::endl;
【讨论】:
在 C 或 C++ 中,您可以根据名称创建语言环境,因此如果您提供像 en-US 这样的名称,它将创建匹配的语言环境(假设您使用它知道的字符串之一——显然大多数库不会识别所有可能的字符串)。
不过,这有一个鲜为人知的特性:如果您提供一个空字符串,它将创建一个适合用户配置的环境的语言环境(由语言未指定的某种方式确定)。
因此,您可以检索并使用它。例如:
#include <locale>
#include <iostream>
int main() {
auto loc = std::locale("");
std::cout << loc.name() << "\n";
}
在我目前使用的机器(Linux)上,打印出来的是:en_US.UTF-8。
【讨论】: