Mac OS X 中的 setlocale 不起作用

Posted

技术标签:

【中文标题】Mac OS X 中的 setlocale 不起作用【英文标题】:setlocale in Mac OS X doesn't work 【发布时间】:2014-01-08 13:05:34 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

您可以使用 CoreFoundation 等价物 CFLocale。

以上是关于Mac OS X 中的 setlocale 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator Mac OS X 10.8.3 调试助手不起作用

Mac OS X 可可应用程序中的 Internet 连接通知

为啥“光标下的跟随符号”在 Mac OS X 的 Qt Creator 中不起作用?

为啥 wctype.h 中的函数在没有 setlocale() 的情况下不起作用?

mac OS 中的自动完成 git 不起作用?

为啥 apt-get 功能在 Mac OS X v10.9 (Mavericks) 的终端中不起作用?