C ++在整个程序中设置Locale

时间:2014-09-06 03:06:52

标签: c++ locale global

我正在寻找一种在整个程序中设置区域设置的方法,如果可能的话。

我在我的main函数中设置了这样的语言环境:

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

但是,它并没有在整个程序中将语言环境设置为我的不同类/方法。我宁愿不在每个将在屏幕上打印并创建C ++语言环境对象并传递的方法之上编写此行。它周围不太可以接受。

感谢您的时间。

2 个答案:

答案 0 :(得分:8)

修改全局区域设置的两个功能是std::setlocalestd::locale::global。所有未来的C和C ++ I / O和字符串操作都将使用它们,除了在代码运行之前构造的六个标准I / O 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 :(得分:1)

setlocale用于设置语言环境,但其范围由我们传递的第一个参数(即标志)决定。在您的情况下,“LC_ALL”。

有两种方法可以设置区域设置。因此,根据setlocale的行为,如果将第二个参数作为“”或NULL传递,则它采用系统环境(LANG)的默认值。代码参考如下:

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

另一种方法是使用语言环境,如下所示:

setlocale(LC_ALL,"en_US.utf8");

Code Illustration