std::locale::messages
służy do otwierania katalogów wiadomości (najczęściej GNU gettext
), w tym do przetłumaczonych ciągów. Oto example który otwiera istniejący katalog wiadomości korzystając na Linux (dla sed
) w języku niemieckim, pobiera (z wykorzystaniem get()
) i wyprowadza tłumaczenia strun angielskiego:
#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);
}
które wyjścia:
"No match" in German: Keine Übereinstimmung
"Memory exhausted" in German: Speicher erschöpft
Edytuj: Wyjaśnienie zgodnie z this comment.
Nie tylko GNU gettext. Katalogi wiadomości są częścią POSIX (np. Gencat (1), catopen (3)). Windows ma również katalogi wiadomości, chociaż nie jestem pewien, czy kiedykolwiek zadali sobie trud implementowania standardowych aspektów wiadomości dotyczących ustawień regionalnych. – bames53