BOOL CALLBACK EnumLocalesProc(LPTSTR lpLocaleString)
{
char buf[255];
DWORD lcid;
sscanf(lpLocaleString, "%X", &lcid); // т.к. LCID приходит в текстовом
формате, преобразуем его в
DWORD
memset(buf, 0, sizeof(buf));
VerLanguageName(lcid, buf, sizeof(buf));
puts(buf);
return TRUE;
}
int _tmain(int argc, char* argv[])
{
EnumSystemLocales(&EnumLocalesProc, LCID_SUPPORTED);
return 0;
}
Получение списка языков в сокращенном виде
Столкнулся с проблемой: необходимо получить список всех существующих языков в Windows в формате en-US, cz-CZ и т.д. Использовал вот такой код:
Код:
Дело в том, что такой код выводит полное наименование языка. Мне же необходимо послать на вывод сокращенные наименования, причем с обязательным указанием language и sublanguage!
Т.е. например, если обычное сокращенное название языка Afrikaans - af, мне необходимо получить еще и территорию, т.е. af-ZA
Вот например как в этой таблице:
http://msdn.microsoft.com/en-us/library/dd318693(VS.85).aspx
LCIDToLocaleName() не подойдет?
Нашел! Кому интересно, всё сводится к использованию функции GetLocaleInfo. В моём случае:
Код:
GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, ctry, sizeof(ctry));
GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, lang, sizeof(lang));
GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, lang, sizeof(lang));