Стандарт C ++ определяет шесть категорий аспектов: collate
, ctype
, monetary
, numeric
, time
, а также messages
,
Я знал, как использовать первые пять, но я не знаю, когда и как использовать последние: std::locale::messages
,
Какие-нибудь наглядные примеры?
std::locale::messages
используется для открытия каталогов сообщений (чаще всего GNU gettext
) включая переведенные строки. Вот пример который открывает существующий каталог сообщений с использованием в 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
редактировать: Уточнение по этот комментарий.
Других решений пока нет …