標準 C 言語国際化プログラミング
メッセージ

国際化されたプログラムはロケールにしたがってメニューやエラーメッセージ を切り替え、利用者に最適なユーザインタフェースを提供するべきです。これ を実現する仕組みとして、C 言語ではメッセージカタログが提供されています。 メッセージカタログは次のように使用します。
  1. 翻訳されたメッセージカタログを作成する
  2. プログラムからメッセージカタログを使用する
メッセージカタログ関係のライブラリ関数には次のものがあります。
------------------------------------------------------------------------
間数		説明
------------------------------------------------------------------------
catopen()	メッセージ・カタログをオープンする
catgets()	メッセージ ID に対応するメッセージを返す
catclose()	メッセージ・カタログをクローズする
------------------------------------------------------------------------
文字列リテラルの多くは言語ごとに異なるべきですが、中にはファイル名など 各言語共通の内容のものもあります。また、ある関数の引数に指定された文字 列リテラルは翻訳不要という場合もあります。一般に、以下のケースでは文字 列リテラルは翻訳不要すなわちメッセージカタログ対応不要の場合が多いよう です。 World Wide Navi ではデフォルトの動作としてこれらの文字列リテラルは翻訳 不要と解釈します。この動作は DB 編集機能によって変更可能です。

*** メッセージカタログの詳細 ***

.msgファイルのフォーマットは以下のようになります。

wwnavi_cat.msg
$ $NLS-WWNAVI 2008-05-24T16:48:54+0900
$ 
$quote "

$set 1
1 "Failed to create fontset\n" <-- *メッセージIDとメッセージ
2 "Hello, how are you? This is sample for catgets. (Push .)"
.catファイルの配置場所は環境変数NLSPATHなどに依存します。

例えば以下のような設定でプログラム(Test)を実行した場合、
export NLSPATH=./%L/%N

export LANG=en_US.UTF-8
./Test

export LANG=ja_JP.UTF-8
./Test
.catファイルの配置場所は以下のようになります。
./en_US.UTF-8/wwnavi_cat.cat <-- *英語メッセージカタログ
./ja_JP.UTF-8/wwnavi_cat.cat <-- *日本語メッセージカタログ   
また、この場合のソース内のメッセージ読み込みは以下のようになります。
setlocale (LC_ALL, ""); <-- *main関数内に記述。  
nl_catd wwnavi_cd = catopen ("wwnavi_cat.cat", NL_CAT_LOCALE);  <-- *main関数内に記述。
...
printf(catgets(wwnavi_cd,1,1,"Failed to create fontset\n")); <-- *メッセージ読み込み
上記はWorld Wide Navi付属のサンプルコード(linux_catgets)にcatgetsの外部化を実行することで確認できます。

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


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