2014-01-08 77 views
4

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

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

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

回答

2

看起来像setlocale函数在MacOS中被破坏并且没有可用的C选项。

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

后来我传递localeStr到我的C++代码,而不是结果的setlocale:我加入的Objective-C++模块,以我的应用程序,它使用NSLocale对象解决的问题。

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

+0

您可以使用CoreFoundation等价物CFLocale。 – rdb