微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在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

原文地址:https://www.jb51.cc/windows/371059.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐