国際化対応を行うプログラム (基本コマンドおよびユーティリティを含む) の要求事項の 1 つは、出力デバイスに表示されるメッセージがユーザの言語であることです。これらのプログラムは多くの国々 (国際的なロケール) で使用されるため、メッセージはそれらの国々のさまざまな言語に翻訳されなければなりません。
デスクトップ環境には、XPG4 関数と Xlib 関数の 2 つのメッセージ抽出関数のセットがあります。
XPG4 メッセージ機能は、メッセージ・ソース・ファイル、カタログ生成機能、プログラミング・インタフェースから構成されています。次に示すのは、XPG4/ 統合 UNIX メッセージ関数です。
catopen()
catgets()
catclose()
次の例はカタログからメッセージを取り出す方法を示しており、3 つのパートがあります。1 番目のパートはメッセージ・ソース・ファイルを示し、2 番目のパートはカタログ・ファイルを生成するために使う方法を示します。3 番目のパートは、そのカタログを使用したプログラム例です。
メッセージ・カタログは次のように指定します。
example.msg ファイル $quote " $ every message catalog should have a beginning set number. $set 1 This is the set 1 of messages 1 "Hello world¥n" 2 "Good Morning¥n" 3 "example: 1000.220 Read permission is denied for the file %s.¥n" $set 2 1 "Howdy¥n"
このファイルは、メッセージ・カタログ example.cat を生成するために gencat ユーティリティに次のように入力されます。
gencat example example.msg
#include <locale.h> #include <nl_types.h> char *MF_EXAMPLE = "example.cat" main() { nl_catd catd; int error; (void)setlocale(LC_ALL, ""); catd = catopen(MF_EXAMPLE, 0); /* Get the message number 1 from the first set.*/ printf( catgets(catd,1,1,"Hello world¥n") ); /* Get the message number 1 from the second set.*/ printf( catgets(catd, 2, 1,"Howdy¥n") ); /* Display an error message.*/ printf( catgets(catd, 1, 4,"example: 100.220 Permission is denied to read the file %s.¥n") , MF_EXAMPLE); catclose(catd); }
次の Xlib メッセージ関数は、リソースに対して同じような入力/出力 (I/O) 操作を提供します。
XrmPutFileDatabase()
XrmGetFileDatabase()
XrmGetStringDatabase()
XrmLocaleOfDatabase()
これらは『X Window System, The Complete Reference to Xlib, Xprotocol, ICCCM, XLFD - X Version 11, Release 5』に説明されています。
システム環境の国際化対応の一部であるツールキット・ベースのアプリケーションは、アプリケーションのソースの中にハードコードされたロケール固有のデータを持っていません。ロケール固有の共通項目は、標準 I/O のアプリケーションによって返される (エラーおよび警告) メッセージです。
一般に、システム環境ツールキット・ウィジェットまたはガジェットを介してユーザに表示されるすべてのエラー・メッセージおよび警告メッセージについては、メッセージ・カタログを介してメッセージをアプリケーションの外側に置いてください。
ツールキット・コンポーネントを介して表示されるダイアログ・メッセージについては、ローカライズされたリソース・ファイルを介してメッセージをアプリケーションの外側に置いてください。この方法は、XmLabel と XmPushButton クラスの XmNlabelString リソースやウィンドウのタイトルなどのリソースのローカライズと同じです。
たとえば、警告メッセージが XmMessageBox ウィジェット・クラスを介して表示される場合、XmNmessageString リソースはアプリケーションのソースコード内でハードコードできません。その代わりに、このリソースの値はメッセージ・カタログから取り出さなければなりません。異なる複数のロケールで実行される国際化対応のアプリケーションの場合は、サポートされる各ロケールに対してローカライズされた別個のカタログが存在しなければなりません。このようにすれば、アプリケーションを再構築する必要がなくなります。
ローカライズされたリソース・ファイルは /usr/lib/X11/%L/app-defaults サブディレクトリに入るか、または XENVIRONMENT 環境変数によって指定されます。%L 変数は、実行時に使用されるロケール名に置換されます。