Получить информацию о культуре системы с помощью приложения win32 - PullRequest
0 голосов
/ 04 апреля 2019

У меня работает консольное приложение win32. Я хочу получить текущую системную локаль или информацию о культуре в моем приложении win32. Как en-US или zh-CN.

Есть ли что-то, что предоставляется WINAPI.

Пример кода для этого действительно поможет.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Вы должны использовать 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;

enter image description here

2 голосов
/ 04 апреля 2019

В C или C ++ вы можете создать языковой стандарт на основе имени, поэтому, если вы введете имя типа en-US, это создаст соответствующий языковой стандарт (при условии, что вы используете одну из строк, о которой он знает - очевидно, большинство библиотек не будем распознавать каждую возможную строку).

Это имеет одну малоизвестную особенность: если вы предоставите пустую строку, она создаст языковой стандарт, соответствующий среде, настроенной пользователем (определяется некоторыми средствами, которые язык не определяет).

Итак, вы можете получить это и использовать его. Например:

#include <locale>
#include <iostream>

int main() { 
    auto loc = std::locale("");


    std::cout << loc.name() << "\n";
}

На машине, которую я использую в данный момент (Linux), выводится: en_US.UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...