Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为C+;设置正确的初始区域设置+;Windows上的程序? 我对本地化编程相当陌生,我正在尝试找出如何为新启动的非托管C++应用程序(从应用程序中)设置合适的初始区域设置。_C++_Windows_Localization_Locale - Fatal编程技术网

如何为C+;设置正确的初始区域设置+;Windows上的程序? 我对本地化编程相当陌生,我正在尝试找出如何为新启动的非托管C++应用程序(从应用程序中)设置合适的初始区域设置。

如何为C+;设置正确的初始区域设置+;Windows上的程序? 我对本地化编程相当陌生,我正在尝试找出如何为新启动的非托管C++应用程序(从应用程序中)设置合适的初始区域设置。,c++,windows,localization,locale,C++,Windows,Localization,Locale,据我所知,新的应用程序是从C语言环境开始的,而不是正确的区域语言环境(英语、德语等)。所以我需要做的是调用setlocale(LC_ALL,“?”),但我不确定如何为第二个参数获取正确的值。它将类似于“英语”或“德语:德国”——基本上是用户通过区域和语言选项控制面板设置的任何语言环境。我要说的是,我不是在寻找如何格式化区域设置字符串,我是在寻找运行应用程序的计算机的正确区域设置字符串 我猜有一些Win32 API会给我这个,或者可能有一个包含正确值的注册表项。有人知道我应该做什么吗?< /P>

据我所知,新的应用程序是从C语言环境开始的,而不是正确的区域语言环境(英语、德语等)。所以我需要做的是调用
setlocale(LC_ALL,“?”)
,但我不确定如何为第二个参数获取正确的值。它将类似于“英语”或“德语:德国”——基本上是用户通过区域和语言选项控制面板设置的任何语言环境。我要说的是,我不是在寻找如何格式化区域设置字符串,我是在寻找运行应用程序的计算机的正确区域设置字符串

我猜有一些Win32 API会给我这个,或者可能有一个包含正确值的注册表项。有人知道我应该做什么吗?< /P> C++ > SETROLALL()是C,不是C++。我隐约记得在VC6上看到了两者之间的干扰,但那是一个bug。通常,setlocale()只影响C函数的行为

在C++中,本地化由STD::LoaLeC类控制。默认情况下,对区域设置敏感的操作使用全局区域设置,该区域设置是在构造区域设置对象时默认获得的,可以使用std::locale::global(const std::locale&)进行设置

使用空字符串(std::locale(“”)构造区域设置对象将创建与程序环境相对应的区域设置

在程序启动时,全局语言环境是“C”或“Classic”语言环境。要将全局语言环境设置为程序的环境语言环境(我猜这就是您要问的),您可以这样写:

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++区域的名称()传递给SETROLALL(),也可以设置C语言环境。
C
French_Canada.1252
C