2014-09-06 6 views
1

Я ищу способ установить локаль по всей программе, если это возможно.C++ Set Locale по всей программе

я установить локаль в моей главной функции, как это:

int main() 
{ 
    setlocale(LC_ALL, ""); 
    .... 
    return 0; 
} 

Однако это Безразлично «т установить локалите мои различные классы/методы по всей программе I» d, а не писать эту строку на вершине каждого метода, который будет печатать на экране и создания C++ объект локали и передавая его вокруг Безразлично "T вполне чувствовать себя приемлемым.

Спасибо за ваше время.

+0

'setlocale' уже глобальный характер, за то, что он должен влиять , Какие вещи используются другими способами? Насколько я помню, 'setlocale' влияет на более старые API-интерфейсы C-like, но не затрагивает такие вещи, как потоки' cout' и C++. – TheUndeadFish

+0

У меня есть класс, который читает из файла и содержит некоторые из его содержимого. Это проливает меня на мусор, потому что у некоторых букв есть акценты. setlocale устанавливается в основном, но, похоже, не влияет на этот второй класс. – Tristan

+0

Этого недостаточно, чтобы исключить многочисленные возможности ... Возможно, вы используете то, что не влияет на setlocale, например std :: fstream. Или проблема может быть связана с cout и консолью. Или данные вашего файла могут быть в кодировке, которая не будет преобразована так, как вы ожидаете. И т. Д. На этом этапе я думаю, вы должны либо отредактировать этот вопрос, либо опубликовать новый, в котором описывается фактическая проблема, с которой вы столкнулись, и опубликовать код того, как вы читаете файл и отправляете данные через cout. – TheUndeadFish

ответ

6

две функции, которые модифицируют глобальные региональные настройки std::setlocale и std::locale::global. Все будущие операции ввода-вывода C и C++ и строковые манипуляции будут использовать их, за исключением шести стандартных потоков ввода-вывода C++, которые создаются до запуска вашего кода, поэтому вам может потребоваться их индивидуальное внедрение, если это необходимо:

#include <locale> 
#include <clocale> 
int main() 
{ 
    std::setlocale(LC_ALL, ""); // for C and C++ where synced with stdio 
    std::locale::global(std::locale("")); // for C++ 
    std::cout.imbue(std::locale()); 
    // cerr, clog, wcout, wcerr, wclog as needed 
1

setlocale используется для установки языкового стандарта, но его область действия, если она определяется первым параметром (то есть флагом), который мы передаем. В вашем случае «LC_ALL».

Существует два способа установить языковой стандарт. Таким образом, в соответствии с поведением setlocale, если вы передаете второй параметр как «" или NULL, он принимает значение по умолчанию из системы enviornment (LANG). Код для справки, как показано ниже:

setenv("LANG","en_US.utf8",1); 
cout << "GET ENV .... " << getenv("LANG"); 
setlocale(LC_ALL,""); 

Другой способ заключается в использовании локаль, как показано ниже:

setlocale(LC_ALL,"en_US.utf8"); 

Code Illustration

Смежные вопросы