2014-12-23 11 views
9

Chương trình của tôi kiểm tra các chữ in hoa bằng tiếng Đức.In tất cả std :: tên địa phương (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; 
} 

chương trình bị treo với lỗi trên giao diện điều khiển

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

Tôi không biết điều đó có chuỗi ngôn ngữ chính xác là "de_DE.UTF-8" không hoạt động là tốt.

Có cách nào để tôi có thể nhận các chuỗi tên miền địa phương chính xác cho tất cả các ngôn ngữ được hệ điều hành hỗ trợ hay không. Có thể có một danh sách ở đâu đó trong các tệp tiêu đề, nhưng tôi không thấy bất kỳ đầu đề nào <locale>.

+0

Bạn có thể thực hiện 'locale -a' trên dòng lệnh. – 0x499602D2

+0

Tôi đang sử dụng Windows – user1

+0

"de-DE" và "German_Germany". Ít nhất, bạn sẽ có thể xây dựng 'locale' từ các chuỗi này. –

Trả lời

16

Tôi đã viết một chương trình để in tất cả các tên miền địa phương được hỗ trợ.

#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; 
} 

Hoạt động tốt.

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

Điều này trông giống như một đoạn mã khá hữu ích. Cảm ơn bạn đã chia sẻ câu trả lời của mình – sehe

Các vấn đề liên quan