2014-09-06 100 views
1

我正在尋找一種方法來設置整個程序的語言環境,如果可能的話。C++在整個程序中設置語言環境

我設置的語言環境中我的主要功能如下:

int main() 
{ 
    setlocale(LC_ALL, ""); 
    .... 
    return 0; 
} 

然而,這不是「語言環境牛逼設置爲我的不同的類/整個程序方法我」寧願不寫這行對每個將在屏幕上打印方法的頂部,並創造了C++語言環境對象,並通過它周圍沒有按「T頗感可以接受的。

謝謝您的時間。

+0

'setlocale'已經是全球性的,對於事情它應該影響。那些其他方法使用的是什麼類型的東西?我記得,'setlocale'會影響舊的「類似C」的API,但不會碰到像「cout」和C++流這樣的東西。 – TheUndeadFish 2014-09-06 03:20:24

+0

我有一個類從文件讀取並且讀取它的一些內容。由於一些字母具有重音,它會讓我感到垃圾。主要設置setlocale,但似乎不影響第二類。 – Tristan 2014-09-06 21:43:44

+0

這並不足以排除許多可能性......您可能正在使用setlocale不會影響的東西,如std :: fstream。或者問題可能與cout和控制檯有關。或者您的文件數據可能採用不按照您的預期方式轉換的編碼。等等。在這一點上,我認爲你應該編輯這個問題或者發佈一個覆蓋你實際問題的新問題,併發布你如何閱讀文件和通過cout發送數據的代碼。 – TheUndeadFish 2014-09-07 05:51:58

回答

6

是修改全局區域設置的兩個功能是std::setlocalestd::locale::global。所有未來的C和C++ I/O和字符串處理都將使用它們,除了在您的代碼運行之前構建的六個標準I/O C++流以外,所以如果需要,您可能必須分別灌注它們:

#include <locale> 
#include <clocale> 
int main() 
{ 
    std::setlocale(LC_ALL, ""); // for C and C++ where synced with stdio 
    std::locale::global(std::locale("")); // for C++ 
    std::cout.imbue(std::locale()); 
    // cerr, clog, wcout, wcerr, wclog as needed 
1

setlocale用於設置地區,但其範圍,如果由我們通過的第一個參數(即標誌)決定。在你的情況下,「LC_ALL」。

有兩種方法來設置區域設置。因此,根據setlocale的行爲,如果您將第二個參數作爲「」或NULL傳遞,它將採用系統環境中的默認值(LANG)。代碼參考如下:

setenv("LANG","en_US.utf8",1); 
cout << "GET ENV .... " << getenv("LANG"); 
setlocale(LC_ALL,""); 

另一種方法是使用的語言環境,如下圖所示:

setlocale(LC_ALL,"en_US.utf8"); 

Code Illustration

相關問題