2014-12-23 11 views
9

Programım Almanca dilinde büyük harfleri denetler.Tüm std :: locale adlarını yazdır (Windows)

#include <iostream> 
#include <boost/algorithm/string/classification.hpp> 
#include <boost/locale.hpp> 

using namespace std; 

int main() 
{ 
    locale::global(locale("Germany_german")); 
    //locale::global(locale("de_DE.UTF-8")); //Also tried "de_DE.UTF-8", but does not work 

    string str1 = "über"; 
    cout << boolalpha << any_of(str1.begin(), str1.end(), boost::algorithm::is_upper()) << endl; 

    string str2 = "Ää"; 
    cout << boolalpha << any_of(str2.begin(), str2.end(), boost::algorithm::is_upper()) << endl; 

    return 0; 
} 

programı konsoldan

terminate called after throwing an instance of 'std::runtime_error' 
    what(): locale::facet::_S_create_c_locale name not valid 

Ben tam bu yerel dizedir bilmiyorum üzerinde hatasıyla çöküyor, "de_DE.UTF-8" de çalışmaz.

İşletim sistemi tarafından desteklenen tüm yerel ayarlar için tam yerel ad dizelerini alabilmemin herhangi bir yolu var mı. Başlık dosyalarında bir yerde bir liste olabilir, ancak hiçbir şey göremiyorum <locale> başlık.

+0

Bir komut satırında 'locale -a' yapabilirsiniz. – 0x499602D2

+0

Windows'ta yaşıyorum – user1

+0

"de-DE" ve "German_Germany" çalışmalıdır. En azından, bu dizelerden 'yerel ayar 'yapabilmelisiniz. –

cevap

16

Desteklenen tüm yerel adları yazdırmak için bir program yazdım.

#include <Windows.h> 

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 
#include <ostream> 
#include <iterator> 

using namespace std; 

vector<wstring> locals; 

BOOL CALLBACK MyFuncLocaleEx(LPWSTR pStr, DWORD dwFlags, LPARAM lparam) 
{ 
    locals.push_back(pStr); 
    return TRUE; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    EnumSystemLocalesEx(MyFuncLocaleEx, LOCALE_ALL, NULL, NULL); 

    for (vector<wstring>::const_iterator str = locals.begin(); str != locals.end(); ++str) 
     wcout << *str << endl; 

    wcout << "Total " << locals.size() << " locals found." << endl; 

    return 0; 
} 

Harika çalışıyor.

... 
de 
de-AT 
de-CH 
de-DE 
de-DE_phoneb 
de-LI 
de-LU 
...  
Total 429 locals found. 
+2

Bu oldukça kullanışlı bir kod snippet'ine benziyor. Cevabınızı paylaştığınız için teşekkürler – sehe

İlgili konular