gettext によるメッセージ処理

gettext は標準 C 言語の機能ではありませんが、オープンソースを中心に広 く使われているメッセージ外部化の枠組みです。catopne() や catgets() を 使用する標準 C 言語のメッセージ外部化と考え方は同じですが、メッセージ の参照にセット番号やメッセージ番号ではなく英語版文字列自身 (のハッシュ 値) を使用する点が異なります。

gettext 関連の関数には次のものがあります。

------------------------------------------------------------------------
間数名			概要
------------------------------------------------------------------------
gettext			メッセージを取得する
dgettext		メッセージを取得する
dcgettext		メッセージを取得する
ngettext		メッセージを取得する
dngettext		メッセージを取得する
dcngettext		メッセージを取得する
bindtextdomain		ドメインとディレクトリを結び付ける
textdomain		ドメインを選択する
bind_textdomain_codeset	出力メッセージのエンコーディングを指定する
_			メッセージを取得する (マクロ)
N_			メッセージの取り出しを関連ツールに指示する (マクロ)
gettext_noop		メッセージの取り出しを関連ツールに指示する (マクロ)
------------------------------------------------------------------------
最後の3つはマクロです。定義は通常以下のとおりです。
#define _(String)   gettext(String)
#define N_(String)  gettext_noop(String)
#define gettext_noop(String) (String)
gettext 関連ツールはこの関数呼び出しをキーとしてソースファイルからメッ セージを取り出します。最初のマクロはさらに、プログラム実行時に gettext() を呼び出します。

*** gettextの手順 ***

基本的な発想はメッセージカタログを使った手法と同じです。
メッセージカタログについてはこちらを参照してください。
ここではメッセージカタログと違う部分について説明します。
  1. メッセージファイル
  2. メッセージファイルをコンパイルする。
  3. メッセージ読み込み処理を記述する。
  4. .moファイルを配置する。
上記はWorld Wide Navi付属のサンプルコード(linux_gettext)にgettextの外部化を実行することで確認できます。

国際化プログラミングトップへ


Copyright (C) 2012 Kokusaika JP, Inc.
本ドキュメントを無断で転載および引用することを禁じます。