Получить информацию о культуре системы с помощью приложения win32

#c #winapi #mfc

#c #winapi #mfc

Вопрос:

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

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

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

Ответ №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;
  

введите описание изображения здесь

Комментарии:

1. Ответы только для ссылок, как правило, не одобряются. Ссылки со временем прерываются. Ответы должны быть автономными, соответствующая информация и примеры должны быть в самом ответе.

Ответ №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 .