共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

メッセージ抽出関数

国際化対応を行うプログラム (基本コマンドおよびユーティリティを含む) の要求事項の 1 つは、出力デバイスに表示されるメッセージがユーザの言語であることです。これらのプログラムは多くの国々 (国際的なロケール) で使用されるため、メッセージはそれらの国々のさまざまな言語に翻訳されなければなりません。

デスクトップ環境には、XPG4 関数と Xlib 関数の 2 つのメッセージ抽出関数のセットがあります。

XPG4/ 統合 UNIX メッセージ関数

XPG4 メッセージ機能は、メッセージ・ソース・ファイル、カタログ生成機能、プログラミング・インタフェースから構成されています。次に示すのは、XPG4/ 統合 UNIX メッセージ関数です。

XPG4 メッセージ例

次の例はカタログからメッセージを取り出す方法を示しており、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 メッセージ関数

次の Xlib メッセージ関数は、リソースに対して同じような入力/出力 (I/O) 操作を提供します。

これらは『X Window System, The Complete Reference to Xlib, Xprotocol, ICCCM, XLFD - X Version 11, Release 5』に説明されています。

Xlib メッセージおよびリソース機能

システム環境の国際化対応の一部であるツールキット・ベースのアプリケーションは、アプリケーションのソースの中にハードコードされたロケール固有のデータを持っていません。ロケール固有の共通項目は、標準 I/O のアプリケーションによって返される (エラーおよび警告) メッセージです。

一般に、システム環境ツールキット・ウィジェットまたはガジェットを介してユーザに表示されるすべてのエラー・メッセージおよび警告メッセージについては、メッセージ・カタログを介してメッセージをアプリケーションの外側に置いてください。

ツールキット・コンポーネントを介して表示されるダイアログ・メッセージについては、ローカライズされたリソース・ファイルを介してメッセージをアプリケーションの外側に置いてください。この方法は、XmLabelXmPushButton クラスの XmNlabelString リソースやウィンドウのタイトルなどのリソースのローカライズと同じです。

たとえば、警告メッセージが XmMessageBox ウィジェット・クラスを介して表示される場合、XmNmessageString リソースはアプリケーションのソースコード内でハードコードできません。その代わりに、このリソースの値はメッセージ・カタログから取り出さなければなりません。異なる複数のロケールで実行される国際化対応のアプリケーションの場合は、サポートされる各ロケールに対してローカライズされた別個のカタログが存在しなければなりません。このようにすれば、アプリケーションを再構築する必要がなくなります。

ローカライズされたリソース・ファイルは /usr/lib/X11/%L/app-defaults サブディレクトリに入るか、または XENVIRONMENT 環境変数によって指定されます。%L 変数は、実行時に使用されるロケール名に置換されます。