如何获取我的环境的当前区域设置?

Deq*_*ing 27 c c++ locale

曾尝试在Linux中使用以下代码,但始终在不同的LANG设置下返回"C" .

#include <iostream>
#include <locale.h>
#include <locale>
using namespace std;

int main()
{
    cout<<"locale 1: "<<setlocale(LC_ALL, NULL)<<endl;
    cout<<"locale 2: "<<setlocale(LC_CTYPE, NULL)<<endl;

    locale l;
    cout<<"locale 3: "<<l.name()<<endl;
}

$ ./a.out
locale 1: C
locale 2: C
locale 3: C
$
$ export LANG=zh_CN.UTF-8
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能在Linux中获得当前的语言环境设置(比如Ubuntu)?

另一个问题是,在Windows中获取区域设置的方式是否相同?

Die*_*Epp 24

来自man 3 setlocale(新格言:"如有疑问,请阅读整个联机帮助页."):

如果是""locale,则应根据环境变量设置应修改的语言环境的每个部分.

因此,我们可以通过setlocale在程序开头调用来读取环境变量,如下所示:

#include <iostream>
#include <locale.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "");
    cout << "LC_ALL: " << setlocale(LC_ALL, NULL) << endl;
    cout << "LC_CTYPE: " << setlocale(LC_CTYPE, NULL) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的系统不支持zh_CN语言环境,如下面的输出显示:

$ ./a.out 
LC_ALL: en_US.utf8
LC_CTYPE: en_US.utf8
$ export LANG=zh_CN.UTF-8
$ ./a.out 
LC_ALL: C
LC_CTYPE: C

Windows:我不知道Windows语言环境.我建议从MSDN搜索开始,如果仍有问题,请打开单独的 Stack Overflow问题.


Deq*_*ing 19

刚刚弄清楚如何通过C++获取语言环境,只需使用空字符串""来构造std :: locale,它与setlocale(LC_ALL,"")的作用相同.

locale l("");
cout<<"Locale by C++: "<<l.name()<<endl;
Run Code Online (Sandbox Code Playgroud)

链接描述了C语言环境和C++语言环境之间的细节差异.