Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как знать какая текущяя локаль?


Автор: Alca 8.8.2009, 19:23
Так можно установить:
Код

setlocale(LC_ALL,"Russian");

А как можно узнать какая текущяя локаль?

Автор: Alca 8.8.2009, 19:41
Код

#include <windows.h>
#include <iostream.h>

void main() {
    char buffer[255] = {0};    

    LCID lc = ::GetSystemDefaultLCID();
    ::GetLocaleInfo(lc,LOCALE_SENGLANGUAGE, buffer, sizeof(buffer));
    
    cout << buffer << endl;
}

Автор: GremlinProg 8.8.2009, 21:22
Цитата(Alca @  8.8.2009,  21:23 Найти цитируемый пост)
А как можно узнать какая текущяя локаль?

Код

lpszCurrentLocale = setlocale( LC_ALL, NULL );

Цитата(setlocale @  _wsetlocale @ MSDN)

The null pointer is a special directive that tells setlocale to query rather than set the international environment.

и вроде бы мы уже это обсуждали )

на счет GetSystemDefaultLCID, не уверен, т.к. это API'шная а не CRT'шная локаль,
т.е. тут между ними могут быть разногласия

Автор: Alca 8.8.2009, 21:27
Спасибо

Добавлено @ 21:33
Цитата

... tells setlocale to query rather than set the international environment.

А по русски это как?

Добавлено @ 21:36
Код

const CHAR  *pszLocale = NULL;
pszLocale = setlocale(LC_ALL, NULL);

Код

pszLocale = 0x00522498 "C"

В pszLocale "C". Что бы это значило?



Автор: Alca 8.8.2009, 23:01
Цитата

Код

pszLocale = 0x00522498 "C"

В pszLocale "C". Что бы это значило?


Код

locale name    description
"C"    Minimal "C" locale

Автор: GremlinProg 8.8.2009, 23:52
Цитата(Alca @  8.8.2009,  23:27 Найти цитируемый пост)
А по русски это как?

по русски: NULL - это спец. директива, которая передает setlocale запрос на получение, а не установку параметров интернац. окружения,

вобщем, по английски это звучит понятнее,
а если недословно, то это просто параметр, который означает, что setlocale в этом случае не установит, а вернет локаль

Цитата(Alca @  8.8.2009,  23:27 Найти цитируемый пост)
В pszLocale "C". Что бы это значило?

Цитата(OpenNET)

Набор обеспечиваемых стандартов зависит от операционной системы, которую Вы используете. Мы не можем делать ни каких обещаний относительно того, что стандарты будут существовать, кроме одного стандартного стандарта, называемого " C " или " POSIX ".

т.е. это межплатформенный стандарт, который принят к "поголовной" подержке, т.е. даже если не будут установлены какие-то языковые пакеты, этот "пакет" будет точно, так что на случай, если к примеру японцы захотят нам что-то сообщить, они с большой вероятностью воспользуются именно этим набором

исследования стандартов POSIX можно начать отсюда: http://ru.wikipedia.org/wiki/POSIX

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)