Получить глобальную локаль, которая в настоящее время установлена ​​в C ++? - PullRequest
7 голосов
/ 30 марта 2012

В C ++ я могу установить текущую локаль следующим образом:

std::locale::global(std::locale(name))

Но как мне получить текущую глобальную локаль?

В моем коде мне нужно получить текущую локаль, сохранить ее в переменную tmp, установить глобальную локаль на что-то другое, вывести что-то, а затем вернуть ее на предыдущую локаль.

Ответы [ 3 ]

14 голосов
/ 30 марта 2012

Если вы вызываете конструктор по умолчанию std::locale, вы получите его.

std::locale the_global_locale; // <-- automatically correct to std::locale::global
                               //     or a copy of std::locale::classic

Подробнее здесь: http://en.cppreference.com/w/cpp/locale/locale/locale

5 голосов
/ 30 марта 2012

Возвращаемое значение - старая локаль, поэтому просто используйте ее.

locale l = locale::global(locale(name));
//do some stuff here
locale::global(l);

Редактировать: Потенциально полезно: http://en.cppreference.com/w/cpp/locale/locale/global

2 голосов
/ 30 марта 2012

Как говорит ipc, конструктор по умолчанию для std :: locale дает вам копию текущей глобальной локали, но зачем вам нужно кэшировать и затем сбрасывать глобальную локаль?

Подпрограммы C ++, использующие локаль, обычно могут использовать указанный вами объект локали C ++, поэтому вам вообще не придется связываться с глобальной локалью. Использование объектов локали должно быть предпочтительнее использования глобальной локали C ++.

...