在Mac OS X中,setlocale无法正常工作

5

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

当我从终端启动我的应用程序时,在MacOS 10.9.1上一切都正常工作。但是当我从Finder运行我的应用程序时,setlocale总是返回默认的区域设置("C")。我怀疑这是因为Finder没有设置LANG环境变量。

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

1个回答

2

看起来在MacOS中,setlocale函数存在问题,而且没有可用的C语言替代方法。我通过向我的应用程序添加Objective-C ++模块并使用NSLocale对象解决了这个问题:

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

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

它可以完美地工作,但我并不完全满意,因为我不想仅仅为了一行代码而使用Objective-C++。如果有人知道更好的解决方法,欢迎分享。


你可以使用CoreFoundation的等效物CFLocale。 - rdb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接