我对本地化编程相当陌生,我试图找出如何为新启动的非托pipeC ++应用程序(从应用程序内)设置适当的初始语言环境。
据我所知,新的应用程序从C语言环境开始,而不是适当的区域语言环境(英语,德语等)。 所以我需要做的是调用setlocale( LC_ALL,"???" ) ,但我不知道如何得到第二个参数的正确值。 这将是像“英语”或“德国:德国” – 基本上是用户通过区域和语言选项控制面板设置任何区域设置。 只是要清楚,我不在寻找如何格式化区域设置string,我正在寻找适用于运行应用程序的计算机正确的区域设置string。
我猜测有一些Win32 API会给我这个,或者可能是一个包含正确值的registry项。 有人知道我应该做什么吗?
显示日元符号的问题
WiX本地化 – 桌面/程序菜单捷径在升级中不被replace
奇怪的字符:R和Windows语言环境的交互?
使用msgcat从.properties文件生成.PO文件并将生成的.po文件连接成一个.PO
Windows服务DbResource提供程序
通用应用程序支持多种语言
在XAML / WinRT中本地化附加的属性
使用事件在Windows中观看,设置和获取主动语言
有没有什么办法可以在你自己的应用程序中使用Windows本地化数据?
为什么QCoreApplication在Unix / Linux上默认调用setlocale(LC_ALL,“”)?
setlocale()是C,而不是C ++。 我隐约记得在VC6上看到了两者之间的干扰,但这是一个错误。 通常情况下,setlocale()只会影响C函数的行为。
在C ++中,本地化由std :: locale类来控制。 默认情况下,区域敏感的操作使用全局区域设置,这是通过默认构建一个区域设置对象获得的,可以使用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 french_Canada.1252 C
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。