#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
.