Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение списка языков в сокращенном виде

7.2K
09 февраля 2010 года
polaroid
94 / / 05.07.2008
Доброго времени суток, уважаемые форумчане!

Столкнулся с проблемой: необходимо получить список всех существующих языков в Windows в формате en-US, cz-CZ и т.д. Использовал вот такой код:
Код:
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;
}


Дело в том, что такой код выводит полное наименование языка. Мне же необходимо послать на вывод сокращенные наименования, причем с обязательным указанием language и sublanguage!
Т.е. например, если обычное сокращенное название языка Afrikaans - af, мне необходимо получить еще и территорию, т.е. af-ZA

Вот например как в этой таблице:
http://msdn.microsoft.com/en-us/library/dd318693(VS.85).aspx
14
09 февраля 2010 года
Phodopus
3.3K / / 19.06.2008
LCIDToLocaleName() не подойдет?
7.2K
10 февраля 2010 года
polaroid
94 / / 05.07.2008
LCIDToLocaleName работает начиная с Windows Vista

Нашел! Кому интересно, всё сводится к использованию функции GetLocaleInfo. В моём случае:
 
Код:
GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, ctry, sizeof(ctry));
GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, lang, sizeof(lang));
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог