我正在开发跨平台的C应用程序.它是多语言的,必须用usera语言显示所有消息.为了检测语言环境我正在使用setlocale(LC_ALL,“”)调用.它返回当前语言和国家/地区,例如“ru_RU.UTF-8”.
当我从终端启动我的应用程序时,MacOS 10.9.1中的所有工作都没有问题.当我从Finder运行我的应用程序时,setlocale总是返回默认语言环境(“C”).我怀疑这是因为Finder没有设置LANG环境变量.
在C应用程序中检测MacOS X下的用户区域设置的正确方法是什么?
最佳答案 看起来像在MacOS中破坏了setlocale功能,并且没有可用的C替代方案.我通过将Objective-C模块添加到使用NSLocale对象的应用程序来解决问题:
std::string localeStr([[[NSLocale currentLocale] localeIdentifier] UTF8String]);
后来我将localeStr传递给我的C代码而不是setlocale结果.
它工作得很好,但我不是百分之百满意,因为我不喜欢只使用一行代码来使用Objective-C.如果有人知道更好的解决方法,欢迎你.