2010-12-10 21 views

回答

19

我相信你需要的信息是here

locale "lang[_country_region[.code_page]]" 
      | ".code_page" 
      | "" 
      | NULL 

該頁面提供的鏈接:


雖然我的答案,佔地面積setlocale,而不是std::localethis MSDN page似乎暗示格式確實是相同的:

類區域的目的還存儲 區域設置名稱類 字符串的對象。使用無效語言環境名稱 構造語言環境構面或 區域設置對象會拋出 類runtime_error的對象。如果區域設置 對象無法確定 C風格的區域設置完全對應於由對象表示的 ,則存儲的 區域設置名稱爲「*」。 否則,您可以在標準C 庫中爲語言環境對象loc建立一個匹配的語言環境,編號爲 ,調用setlocale(LC_ALL, loc.name.c_str)

另見this pagethis thread這往往表明std::locale內部使用setlocale

+0

+1 - 但`的setlocale `!=`std :: locale` ... – 2010-12-20 13:55:40

+0

@Billy:answer編輯 – icecrime 2010-12-20 14:07:53

9

下面是一個可用於任何地方的語言環境名稱:""。也就是空字符串。這與您可能默認獲取的"C"語言環境形成鮮明對比。作爲std::setlocale()的參數的空字符串表示類似於「使用用戶或環境設置的首選語言環境」。如果你使用它,缺點是你的程序在任何地方都不會有相同的輸出;好處是你的用戶可能會認爲它按照他們想要的方式工作。

21

好的,C和C++區域設置有區別。

讓我們開始:

  • MSVC C++的std ::區域設置和C的setlocale

    接受區域命名爲 「語言[_公司] [代碼頁。]」 例如 「English_United States.1251」 否則會拋出。注:代碼頁不能是65001/UTF-8,並應與ANSI代碼一致此語言環境(或只是略)

  • MSVC C++的std ::區域設置和C的setlocale在Vista和Windows 7應該接受的語言環境 [語言] [ - 腳本] [ - 國家]像使用ISO-631語言代碼的「en-US」和使用ISO 3166區域和腳本名稱的 。

    我在Windows 7上用Visual Studio測試過它 - 它不起作用。

  • MinGW C++ std :: locale接受「C」和「POSIX」它不支持其他語言環境,實際上gcc僅支持GNU C庫的語言環境 - 基本上只在Linux下。

    setlocale是原生的Windows API調用,所以應該支持上面提到的所有內容。

    當與替代C++庫 (如Apache stdcxx或STL端口)一起使用時,它可以支持更廣泛的區域設置。

  • ICC - 我沒有測試過它,但它取決於它使用的標準C++庫。對於 在Linux下的示例,它使用GCC的libstdC++,因此它支持gcc 支持的所有語言環境。我不知道它在Windows下使用什麼標準C++庫。

如果你想擁有「的編譯器和平臺」獨立語言環境支持(實際上 更好的支持),看看在Boost.Locale

阿爾喬姆

相關問題