2013-09-21 25 views

回答

8

std::locale::messages用於打開消息目錄(最常見的是GNU gettext),包括翻譯後的字符串。這裏是一個example這將打開在Linux上使用(用於sed)在德國,檢索(使用get())現有的消息目錄和輸出的翻譯的英文字符串:

#include <iostream> 
#include <locale> 

int main() 
{ 
    std::locale loc("de_DE.utf8"); 
    std::cout.imbue(loc); 
    auto& facet = std::use_facet<std::messages<char>>(loc); 
    auto cat = facet.open("sed", loc); 
    if(cat < 0) 
     std::cout << "Could not open german \"sed\" message catalog\n"; 
    else 
     std::cout << "\"No match\" in German: " 
        << facet.get(cat, 0, 0, "No match") << '\n' 
        << "\"Memory exhausted\" in German: " 
        << facet.get(cat, 0, 0, "Memory exhausted") << '\n'; 
    facet.close(cat); 
} 

,輸出:

"No match" in German: Keine Übereinstimmung 
"Memory exhausted" in German: Speicher erschöpft 

編輯:澄清根據this comment

+3

不只是GNU gettext。消息目錄是POSIX的一部分(例如,gencat(1),catopen(3))。 Windows也有消息目錄,但我不確定他們是否曾經困擾過實現標準語言環境消息方面。 – bames53

相關問題