【问题标题】:Get culture info of the system using win32 application使用win32应用程序获取系统的文化信息
【发布时间】:2019-04-04 14:05:09
【问题描述】:

我正在使用 win32 控制台应用程序。我想在我的 win32 应用程序中获取当前系统区域设置或文化信息。 喜欢 en-US 或 zh-CN。

WINAPI有没有提供什么。

这方面的示例代码会很有帮助。

【问题讨论】:

    标签: c++ winapi mfc


    【解决方案1】:

    你应该使用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;
    

    【讨论】:

    • 仅链接的答案通常不受欢迎。链接会随着时间而中断。答案应该是自包含的,相关信息和示例应该在答案本身中。
    【解决方案2】:

    在 C 或 C++ 中,您可以根据名称创建语言环境,因此如果您提供像 en-US 这样的名称,它将创建匹配的语言环境(假设您使用它知道的字符串之一——显然大多数库不会识别所有可能的字符串)。

    不过,这有一个鲜为人知的特性:如果您提供一个空字符串,它将创建一个适合用户配置的环境的语言环境(由语言未指定的某种方式确定)。

    因此,您可以检索并使用它。例如:

    #include <locale>
    #include <iostream>
    
    int main() { 
        auto loc = std::locale("");
    
    
        std::cout << loc.name() << "\n";
    }
    

    在我目前使用的机器(Linux)上,打印出来的是:en_US.UTF-8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多