c++ - Mac OS X 中的 setlocale 不起作用

标签 c++ macos locale setlocale

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

当我从终端启动我的应用程序时,在 MacOS 10.9.1 中一切正常。当我从 Finder 运行我的应用程序时,setlocale 总是返回默认区域设置(“C”)。我怀疑这是因为 LANG 环境变量不是由 Finder 设置的。

在 C++ 应用程序中检测 MacOS X 下用户语言环境的正确方法是什么?

最佳答案

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

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

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

它工作得很好,但我不是 100% 满意它,因为我不喜欢只对一行代码使用 Objective-C++。如果有人知道更好的解决方法,欢迎您。

关于c++ - Mac OS X 中的 setlocale 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20996518/

相关文章:

c++ - Yocto OpenCV w/GStreamer 安装问题

c++ - 虚拟继承和静态继承——C++中的混合

macos - 错误 :1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

c++ - 在 Mac OS X 上使用 clang 编译错误的 boost 1.53

php - 翻译 magento 形式

c++ - 在 C++ 中只复制二进制文件的一部分

Mac 上的 Java OutOfMemory,在 Windows 上工作

java - 如何在 Java 中获取不同时区的当前时间?

django - 如何将语言代码转换为区域设置名称?

c++ - 向查看器添加两个不同的点云(点云库 (PCL))