5

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

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

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

4

1 回答 1

2

Looks like setlocale functions is broken in MacOS and there is no working C alternative. I solved problem by adding Objective-C++ module to my application which uses NSLocale object:

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

Later i'm passing localeStr to my C++ code instead of setlocale result.

It works perfectly, but I'm not 100% happy with it because I don't like to use Objective-C++ for only one line of code. If somebody knows better workaround, you are welcome.

于 2014-01-09T02:58:37.917 回答