我对本地化编程很新,我正在试图弄清楚如何为新启动的非托管C++应用程序(从应用程序内部)设置正确的初始区域设置.
据我所知,新的应用程序从C语言环境开始,而不是从适当的区域语言环境(英语,德语等)开始.所以我需要做的是调用setlocale( LC_ALL, "???" )
,但我不确定如何为第二个参数获取正确的值.它将类似于"英语"或"德语:德国" - 基本上是用户通过"区域和语言选项"控制面板设置的区域设置.为了清楚起见,我不是在寻找如何格式化语言环境字符串,我正在为运行应用程序的计算机寻找正确的语言环境字符串.
我猜测有一些Win32 API会给我这个,或者可能是一个包含正确值的注册表项.有人知道我应该做什么吗?
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