Ответ 1
setlocale() - это C, а не С++. Я смутно помню, как между ними воздействовали VC6, но это была ошибка. Обычно setlocale() влияет только на поведение функций C.
В С++ локализация контролируется классом std:: locale. По умолчанию в локально-чувствительных операциях используется глобальная локаль, которая получается по умолчанию - построение объекта локали и может быть установлена с помощью std:: locale:: global (const std:: locale &).
Построение объекта локали с пустой строкой (std:: locale ("")) создает локаль, соответствующую программной среде.
При запуске программы глобальная локаль - это "C" или "Классический" язык. Чтобы установить глобальную локаль в локаль программной среды (я думаю, это то, что вы просите), вы, таким образом, пишете:
std::locale::global(std::locale(""));
Например, мои региональные настройки в настоящее время установлены на французский (Канада). Выполнение этого:
int main(void)
{
std::cout << std::locale().name() << std::endl;
std::locale::global(std::locale(""));
std::cout << std::locale().name() << std::endl;
std::locale::global(std::locale("C"));
std::cout << std::locale().name() << std::endl;
return 0;
}
печатает:
C
French_Canada.1252
C