我正在測試一些新的locale
由C++ 11提供的東西,如std::put_money
以適應其使用。我在想,會是不錯的顯示印刷貨幣爲標準庫支持的所有國家大量:跨平臺的語言環境表
const char *Locales[] =
{
"English_Australia.1252",
"en_EN",
"fr_FR.UTF-8"
/...
// lots of lots of worldwide locales
};
int main(int argc, char **argv)
{
for (const char **Locale = std::begin(Locales); Locale != std::end(Locales); ++Locale)
{
std::stringstream ss;
ss.imbue(std::locale(*Locale))
std::cout << *Locale << ' '
<< std::showbase << std::put_money(11223344556677889900) << '\n';
}
}
我感到非常震驚意識到時,該區域名稱不標準可言,我Windows 7 Professional(SP1)(西班牙語區域設備)下的Visual Studio 10.0的語言環境名稱格式爲Language_Region.charsetID
,例如:English_Australia.1252
,在我的Linux機器上(Debian 4.2.2)使用gcc 4.2.3語言環境遵循相同的格式,但與兩個字母xx_XX.UTF-8
(例如es_ES.UTF-8
),而在Ideone上嘗試代碼時,似乎接受的唯一語言環境是en_US.UTF-8
。
最令人沮喪的是,試圖得到支持的語言環境的標準,跨平臺的表,最好的一個,我發現谷歌搜索以防萬一是this one列出的語言環境爲Windows和其等同於無視窗,但缺乏很多國家(如美國,危地馬拉,墨西哥......)。
我試過的另一件事是調試一步一步的std::locale
構造函數,希望找到一段代碼,說什麼區域設置名稱是有效的,其中一個不是。我期待着大量的語言環境名稱(例如示例代碼中的一個),但我被構造函數的複雜性所嚇倒並逃離了。
所以我的問題是:
- 至極的是,你知道和使用的跨平臺語言環境的最好,最完整的表?
- 如何知道正在運行的系統支持的區域設置?如何訪問受支持的語言環境列表?
額外的問題:
- 爲什麼語言環境名稱不規範(授予跨平臺的源代碼)?
- Ideone使用了哪些語言環境系統?
謝謝。