2014-01-08 63 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