collate
C++ 標準では、ctype
、monetary
、numeric
、time
、およびの 6 つのファセット カテゴリが定義されていmessages
ます。
最初の 5 つの使用法は知っていますが、最後の 1 つをいつ、どのように使用するかはわかりませんstd::locale::messages
。
実例はありますか?
collate
C++ 標準では、ctype
、monetary
、numeric
、time
、およびの 6 つのファセット カテゴリが定義されていmessages
ます。
最初の 5 つの使用法は知っていますが、最後の 1 つをいつ、どのように使用するかはわかりませんstd::locale::messages
。
実例はありますか?
std::locale::messages
gettext
翻訳された文字列を含むメッセージ カタログ (最も一般的には GNU ) を開くために使用されます。Linux で ( for ) をドイツ語で使用して既存のメッセージ カタログを開き、英語の文字列の翻訳を( を使用して) 取得して出力する例を次に示します。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
編集:このコメントによる明確化。