Skip to content

Latest commit

 

History

History
112 lines (84 loc) · 4.02 KB

messages_byname.md

File metadata and controls

112 lines (84 loc) · 4.02 KB

messages_byname

  • locale[meta header]
  • std[meta namespace]
  • class template[meta id-type]
namespace std {
  template <class charT>
  class messages_byname : public messages<charT>;
}
  • messages[link /reference/locale/messages.md]

概要

messages_bynameは、名前で指定したロケールの翻訳メッセージの取得を提供する、messagesの派生クラスである。

messagesの仮想関数を、locale(const char*)で同じ名前を指定して構築したロケールのファセットと等価な意味論で実装する。

このクラスはmessagesが提供するインタフェースをそのまま継承しており、独自のメンバ関数は持たない。

メンバ関数

publicメンバ関数

名前 説明
(constructor) コンストラクタ

protectedメンバ関数

名前 説明
(destructor) デストラクタ

メンバ型

名前 説明
catalog 翻訳カタログ型 messages_base::catalog
string_type 文字列型 std::basic_string<charT>

例

メッセージカタログの形式と探索方法は処理系定義である。以下は、POSIXのcatgets形式のカタログを使用する処理系での例である。

日本語のメッセージのソースファイルja.msgを、

$set 1
1 こんにちは、世界!

POSIXのgencatコマンドでカタログファイルja.catへ変換したものが存在するとする。

gencat ja.cat ja.msg
#include <iostream>
#include <locale>

int main()
{
  // メッセージのカテゴリだけを"ja_JP.UTF-8"ロケールのものにし、
  // 数値の書式などその他のカテゴリはCロケールのままにする
  std::locale loc{std::locale::classic(), new std::messages_byname<char>{"ja_JP.UTF-8"}};

  const auto& msgs = std::use_facet<std::messages<char>>(loc);

  std::messages_base::catalog cat = msgs.open("./ja.cat", loc);

  if (cat >= 0) {
    // 日本語のメッセージが取得できる
    std::cout << msgs.get(cat, 1, 1, "Hello, world!") << std::endl;
    msgs.close(cat);
  }

  // 数値の小数点はCロケールのまま
  std::cout << std::use_facet<std::numpunct<char>>(loc).decimal_point() << std::endl;
}
  • std::messages_byname[color ff0000]
  • std::messages[link messages.md]
  • std::messages_base::catalog[link messages_base.md]
  • msgs.open[link messages/open.md]
  • msgs.get[link messages/get.md]
  • msgs.close[link messages/close.md]
  • std::numpunct[link numpunct.md]
  • decimal_point()[link numpunct/decimal_point.md]
  • std::use_facet[link use_facet.md]
  • std::locale[link locale.md]
  • std::locale::classic()[link locale/classic.md]

出力例

こんにちは、世界!
.
  • messages_bynameを使うと、グローバルロケールを変更することなく、メッセージのカテゴリだけを特定の名前のロケールのものに固定できる
  • カタログ名からカタログへの対応付けは処理系定義である。GNU gettextを使用する処理系では、open()にドメイン名を渡すことで、ロケール名に対応するカタログが選択される
  • 妥当なロケール名は処理系定義である。指定した名前が妥当でない場合、コンストラクタはstd::runtime_errorを送出する

バージョン

言語

  • C++98

関連項目