如何在Windows上为C程序设置适当的初始区域设置?
我对本地化编程相当新鲜,我正在试图找出如何为新推出的非托管C应用程序(从应用程序内)设置正确的初始区域设置.
据我所知,新应用程序从C语言环境开始,而不是正确的区域语言环境(英语,德语等).所以我需要做的是调用setlocale(LC_ALL,“???”),但是我不知道如何获取第二个参数的正确值.它将像“英语”或“德语:德国” – 基本上是用户通过区域和语言选项控制面板设置的任何区域设置.只是为了清楚,我不是在寻找如何格式化区域设置字符串,我正在寻找正在运行的应用程序的计算机的区域设置字符串. 我猜想有一些Win32 API会给我这个,或者是一个包含适当值的注册表项.有人知道我应该在做什么吗?
setlocale()是C,而不是C.我隐约地记得看到两者之间在VC6上的干扰,但那是一个错误.通常,setlocale()仅影响C函数的行为.
在C中,本地化由std :: locale类控制.默认情况下,区域设置敏感操作使用默认获取的全局区域设置 – 构建区域设置对象,并且可以使用std :: locale :: global(const std :: locale&)设置. 使用空字符串(std :: locale(“”))构造区域设置对象将创建与程序环境相对应的区域设置. 在程序启动时,全局区域是“C”或“经典”区域.要将全局区域设置为程序的环境区域设置(我猜这是您要求的),您可以这样写: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 【Jmeter】Address already in use : connect &&P
- .net – 覆盖嵌入到MSI中的app.config设置?
- Windows装python
- .net – 如何防止Windows Forms TextBox在调整大小时闪烁?
- 用户友好的端口敲门器(端口敲门客户端)适用于Windows?
- windows – 批处理文件,每1分钟执行一次命令
- 可启动的Windows Server 2016 USB驱动器
- uwp – Windows Store的透明磁贴但彩色图标
- Windows10安装vmware和centos7
- windows 平台使用 VS2017 编译 libevent 源码
- 部署 – 将REINSTALLMODE传递给MSI文件
- windows-server-2008-r2 – Windows Server 2008
- windows – 如何从C代码(Win32)生成RFC1123 Date
- windows-server-2008 – 是否可以拥有两台DHCP服
- Windows 7 – ASP.NET网站下的IIS 7.5(Windows 7
- 从Windows批处理文件中检测ANSI兼容的控制台?
- 远程PowerShell脚本不适用Hyper-V快照
- macos – 如何使用AFP将Windows客户端连接到OSX服
- flutter从零开始第一篇-环境搭建(Windows)
- windows – 如何禁止本地用户以交互方式登录?