[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:00386] How to use gettext (Re: dpkg_1.4.0.5-jp uploaded)



やなぎはらです。

yosshy>  吉山@神戸大です。
yosshy> 
yosshy>  それはそうと、dpkg を gettext 化したいのですが、gettext の使い
yosshy> 方がよく分かりません。どなたか教えて頂けませんか?

仕事上 SVR4 関係の gettext は良く分かるんですが、GNU のは、
ちょっと変わっていますね。

ちょっと、textutils パッケージのソースを覗いてみたら、つぎのような事が
わかりました。

まず、

#include <locale.h>
#include <libintl.h>

を追加します。

main() の先頭で、

setlocale(LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);

を呼び出すようにします。

PACKAGE は、メッセージファイル名のサフィックス (.mo)を除いた文字列。
Debian の場合、パッケージ単位にメッセージファイルを用意しているような
ので、dpkg だと dpkg.mo というメッセージファイルになります。
とするとPACKAGE を dpkg に置き換えてください。

LOCALEDIR は、メッセージファイルが格納されているディレクトリの
locale 名を省いた所まで。
Debian の場合、"/usr/share/locale" になりますね。

で、メッセージを多言語化したい所を gettext() を用いて
書き直します。

例)
	printf("TEST TEST\n");
		↓
	printf(gettext("TEST TEST\n");

で、メッセージファイル PACKAGE.po は、
次のようなフォーマットで記述して行くようです。

-------------
msgid  "TEST TEST\n"
msgstr "テスト テスト\n"
-------------
メッセージファイル中の "#" で始まる行は、コメント行になります。

出来上がったメッセージファイルは、msgfmt コマンドで PACKAGE.mo の
バイナリ形式に変換します。

以上で、gettext 対応できるはずなんですが。
ちなみに、日本語のlocale 名は、ja_JP.EUC です。


テストしてみたサンプルソース

test.c

--------------------------
#include <locale.h>
#include <libintl.h>
#include <stdio.h>

main()
{
    int value;

    setlocale(LC_ALL, "");
    bindtextdomain("test", "/usr/share/locale");
    textdomain ("test");

    value = 10;

    fprintf(stderr, gettext("Hello! Value=%d\n"));

    exit(0);
}
--------------------------


test.po (msgfmt test.po -o test.mo)
-----
msgid  "Hello! Value=%d\n"
msgstr "こんにちは! 値は %d\n"
------    


いちおうこんな感じでできました。

実行結果は、
----------
(^^)[test]%./test               
こんにちは! 値は 10
----------
です。

gettext に関する詳しい説明、GNU utilities での使用例などは
gettext パッケージについています。ドキュメントはパッケージの
インストール後、info で参照できます。


ほとんどダイジェストのような説明ですが、参考になるでしょうか?

#あ、いかん、仕事そっちのけで調べてしまった。

+---------------------------------------------------------+
 Yoshiaki Yanagihara		E-mail: yochi@xxxxxxxxxxx           
					yosiaki@debian.org
 Debian JP Project
 [Japanese] http://www.linux.or.jp/~yochi/debian-jp.html
 [English ] http://www.linux.or.jp/~yochi/debian-jp-e.html