use*_*333 5 c++ macos locale setlocale
我正在研究跨平台的C ++应用程序。它是多语言的,必须以usera语言显示所有消息。为了检测语言环境,我正在使用setlocale(LC_ALL,“”)调用。它返回当前的语言和国家/地区,例如我的情况是“ ru_RU.UTF-8”。
当我从终端启动应用程序时,一切都可以在MacOS 10.9.1中正常工作。当我从Finder运行我的应用程序时,setlocale总是返回默认语言环境(“ C”)。我怀疑这是因为Finder未设置LANG环境变量。
在C ++应用程序中的MacOS X下检测用户语言环境的正确方法是什么?
看起来 setlocale 函数在 MacOS 中被破坏,并且没有可用的 C 替代方案。我通过将 Objective-C++ 模块添加到使用 NSLocale 对象的应用程序来解决问题:
std::string localeStr([[[NSLocale currentLocale] localeIdentifier] UTF8String]);
Run Code Online (Sandbox Code Playgroud)
后来我将 localeStr 传递给我的 C++ 代码而不是 setlocale 结果。
它工作得很好,但我对它不是 100% 满意,因为我不喜欢只使用 Objective-C++ 一行代码。如果有人知道更好的解决方法,欢迎您。
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |