Mac OS X中的setlocale不起作用

时间:2014-01-08 13:05:35

标签: c++ macos locale setlocale

我正在开发跨平台的C ++应用程序。它是多语言的,必须用usera语言显示所有消息。为了检测语言环境我正在使用setlocale(LC_ALL,“”)调用。它返回当前语言和国家/地区,例如“ru_RU.UTF-8”。

当我从终端启动我的应用程序时,MacOS 10.9.1中的所有内容都可以正常运行。当我从Finder运行我的应用程序时,setlocale总是返回默认语言环境(“C”)。我怀疑这是因为Finder没有设置LANG环境变量。

在C ++应用程序中检测MacOS X下的用户区域设置的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

看起来在MacOS中破坏了setlocale功能,并且没有可用的C替代方案。我通过将Objective-C ++模块添加到使用NSLocale对象的应用程序来解决问题:

    std::string localeStr([[[NSLocale currentLocale] localeIdentifier] UTF8String]);

后来我将localeStr传递给我的C ++代码而不是setlocale结果。

它完美无缺,但我对此并不满意,因为我不喜欢只使用一行代码来使用Objective-C ++。如果有人知道更好的解决方法,欢迎你。