namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gettext (Re: directory structure)
Ryuji Abe <raeva@xxxxxxxxxxxx> wrote:
>> Win32 で gettextがきちんと動作することが確認できれば、すぐに
>> でも gettext化に着手するつもりです。
>
>cygwin環境ではlocaleの切り替えができることを確認しました。
>grep-2.3で試してみましたが、grep.potからja_JP.sjis.poを作成し、
>(2バイト目の問題があるので)エスケープしてからmsgfmtでmoに
>変換し、%{prefix}/share/locale/ja_JP.sjis/LC_MESSAGESに置いて、
>
>$ export LANG=ja_JP.sjis
>$ grep --help
>
>で、日本語のヘルプメッセージが出ました。
確認ありがとうございます。手元の環境
* Linux kernel v2.0.36
* libc5.4.44
* gcc 2.9.5
で gettext の実験をしてみました。 0.10, 0.10.35 の二つの版を
試しました。ちと悩ましい結果が出たので、助言をもらえると助か
ります。
gettext 0.10
何も考えずに ./configure && make && make install すると、作
成された libintl.a は catgets 互換モードになってしまった。
.mo ではなく .cat が使われてしまう。また、LOCALEDIRが
/usr/local/lib/locale に設定されてしまう。2時間くらい悩んだ。
./configure --with-gnu-gettext とすれば libintl.a は
.mo を用いる。
LANG=ja_JP.ujis
のとき、
/usr/local/share/locale/ja_JP.ujis/LC_MESSAGES
が存在すればここの .mo 、存在しなければ
/usr/local/share/locale/ja_JP/LC_MESSAGES
の .mo を用いるが、ここが存在しないとき
/usr/local/share/locale/ja/LC_MESSAGES
の .mo は参照されない。これは不便だ。
gettext 0.10.35
<ftp://alpha.gnu.org/pub/gnu/gettext-0.10.35.tar.gz> から
0.10.35 を取ってきた。
./configure --with-included-gettext && make すると、
次のエラーメッセージを出力して途中で止まってしまった。
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I.. -I../lib -I../intl -I../intl -g -O2 -c po-gram.gen.c
In file included from ../../src/po-gram.y:27:
po-lex.h:39: parse error before `PARAMS'
po-lex.h:40: parse error before `PARAMS'
po-lex.h:41: parse error before `PARAMS'
po-lex.h:42: parse error before `PARAMS'
po-lex.h:43: parse error before `PARAMS'
In file included from ../../src/po-gram.y:28:
po-gram.h:26: parse error before `PARAMS'
が、 intl ディレクトリに作成された libintl.a は、
LANG=ja_JP.ujis
のとき、
/usr/local/share/locale/ja_JP.ujis/LC_MESSAGES
/usr/local/share/locale/ja_JP/LC_MESSAGES
のディレクトリがいずれも存在しないときに
/usr/local/share/locale/ja/LC_MESSAGES
の .mo を参照してくれる。これは便利だ。
Vine Linux では日本語の .mo ファイルはすべて
/usr/share/locale/ja/LC_MESSAGES 以下に格納されている。
LANG=ja_JP.ujis のときでも、きちんと日本語のメッセージが出力
されるところを見ると、どうやら Vine Linux では gettext
0.10.35 の libintl.a をリンクして実行ファイルを作成している
ようだ。 (どなたかそのあたりの事情を知りませんか?)
...
Namazu の gettext化を考えると
* 日本語の .mo ファイルをどこにインストールするか?
に悩みます。私は $prefix/share/ja/LC_MESSAGES にインストール
するのが自然だと思いますが、 gettext 0.10 では
LANG=ja_JP.ujis のときに $prefix/share/ja/LC_MESSAGES が参照
されないという問題があります。
# mknmz の方はとりあえず考えないことにします (Perl 用の
# gettext モジュールはありますが)。ここでは namazu コマンド
# のみをとりあげます。
そこで、 gettext 0.10.35 の intl ディレクトリ以下、一式を
Namazu のパッケージに同梱して、必ず gettext 0.10.35 の
libintl.a をリンクするようにすれば、この問題は解決します。
Win32, OS/2 への配慮は Shift_JIS の .mo を作成するオプション
を configure につければいいでしょう。 --with-sjis とか。
CGI として呼び出されるときは環境変数 $LANG の値を信用できな
いので、 .namazurc の LANG の設定または CGI変数 lang の値を
優先します。また、コマンドラインオプション --lang も環境変数
$LANG より優先させます。
...
…というわけで、結構、面倒そうですが、なんとかなりそうです。
こんなに手間をかけてまで gettext化しなたっていいじゃないか、
という気がしなくもありませんが、
* 世界中の人が喜んでくれる (といいんだけど)
* 新しい技術を取り入れていることをアピールしたい (見栄)
* 国際化は流行だから (ミーハー)
という理由から、前向きに取り組んでいきたいと思っています。
p.s.
実はまだ考えはかなりぐらついています。一言でも助言をもらえる
と嬉しいです。 gettext化に賛成・反対します、だけでもいいので。
gettextに詳しい人に相談に乗ってもらえるといいんだけど。
-- Satoru Takabayashi