当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows上为C++程序设置正确的初始区域设置?

如何解决《如何在Windows上为C++程序设置正确的初始区域设置?》经验,为你挑选了1个好方法。

我对本地化编程很新,我正在试图弄清楚如何为新启动的非托管C++应用程序(从应用程序内部)设置正确的初始区域设置.

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

我猜测有一些Win32 API会给我这个,或者可能是一个包含正确值的注册表项.有人知道我应该做什么吗?



1> Éric Malenfa..:

setlocale()是C,而不是C++.我依稀记得在VC6上看到两者之间的干扰,但这是一个错误.通常,setlocale()仅影响C函数的行为.

在C++中,本地化由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
French_Canada.1252
C

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有