[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:10400] Namazu with gettext
最近、Namazuは国際化を視野にいれた開発を行うべく作業が進んでいるので
すが、いかんせん国際化プログラミングのエキスパートが開発陣にいないので、
メイン開発者である高林さんのgettextに関する疑問に答えられずにいます。
Namazuは既にDebian officialなパッケージとなっていますし、今のうちに
適切な実装を行うことはDebian/Namazu両者にとって好ましいことだと思いま
す。というわけで、以下に示す高林さんの悩みに助言を頂けませんでしょうか。
--ここから
Namazu の gettext化について
Namazu を gettext化すべきか悩んでいます。助言をいただければ
幸いです。(私は gettextにも国際化にも疎いのです)
手元の環境 (Plamo Linux 1.3ベイス)
* Linux kernel v2.0.36
* libc5.4.44
* gcc 2.95
で gettext の実験を行った。 0.10, 0.10.35 の二つの版を試した。
gettext 0.10
何も考えずに ./configure && make && make install すると、
作成された libintl.a は catgets 互換モード(?)になってしまっ
た。 .mo ファイルではなく .cat ファイルが用いられてしまう。
また、LOCALEDIRが /usr/local/lib/locale に設定されてしまう。
./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 ファイルをどこにインストールするか?
にまず悩みます。私は $(localedir)/ja/LC_MESSAGES にインストー
ルするのが自然だと思いますが、 gettext 0.10 では
LANG=ja_JP.ujis のときに $(localedir)/ja/LC_MESSAGES が参照
されないという問題があります。
そこで、 gettext 0.10.35 の intl ディレクトリ以下、一式を
Namazu のパッケージに同梱して、必ず gettext 0.10.35 の
libintl.a をリンクするようにすれば、この問題は解決します (こ
れはこれで別の問題があるかも)。
Win32, OS/2 への配慮は Shift_JIS の .mo ファイルを作成するオ
プションを configure につければいいでしょう。 --with-sjis と
か。
CGI として呼び出されるときは環境変数 $LANG の値を信用できな
いので、 .namazurc の設定または CGI変数 lang の値を優先しま
す。(HTTP_ACCEPT_LANGUAGEの値も見る?)
また、コマンドラインオプション --lang= での指定も環境変数
$LANG より優先させます。
...
…というわけで、結構、面倒そうですが、なんとかなりそうです。
ただ、こんなに手間をかけてまで gettext化しなくたっていいじゃ
ないか、という気がしなくもありません。
どうせやるなら、将来的には日本語の処理に特化したコードをでき
るかぎり分離するなりして、国際化をもっと意識するといいかな。
この辺は国外での需要に大きくやる気が左右されますが。:-)
--ここまで
「ついでにNamazu ver.2.0の新機能を宣伝してほしい」とのことなので :-)
1.3.0からの変更点などを以下に付けておきます。2.0の正式リリースはまだま
だ先になりそうですが...
1.3.0.x からの変更点
機能に関する変更点
* インデックスの互換性はまったくない
- 新規に作り直そう
* インデックスが小さくなった (全体で 1/2 くらい)
* NKF, Text::Kakasi, Text::ChaSen1 perlモジュールに対応した
- <ftp://ftp.ie.u-ryukyu.ac.jp/pub/software/kono/nkf171.shar>
- <http://www.daionet.gr.jp/~knok/kakasi/>
- <http://www.daionet.gr.jp/~knok/chasen/>
* 長い名前のコマンドライン引数を使えるようにした
- getopt.c, getopt1.c
* 任意のフィールドでソートできるようにした
- NMZ.field.* を利用する
* 検索結果の中のキーワードを強調表示 (赤) するようにした
- CSS1 を使っています
* 検索結果の書式を自由に変えられるようにした
- NMZ.result.* の導入
* mknmz のコマンドライン引数で複数のディレクトリ・ファイル
を指定できるようにした [namazu-dev 282]
* インデックスの更新が簡単になった [namazu-dev 281]
- mknmz --update=index で OK.
* mknmz にチェックポイント機能 (-s オプション) をつけた
- 自分自身をときどき exec し直し、プロセスの膨張を防ぐ
* Word文書, PDF用のフィルタを用意した
- mswordview, pdftotext が必要
* namazu.conf / .namazurc において区切り文字に空白文字を使
えるようにした (TABじゃなければダメという仕様は廃止)
* 何もヒットしなかったときに NMZ.tips.{en,ja} を表示するよ
うにした
* NMZ.access を導入した。IPアドレス・ホスト名・ドメイン名
によるアクセス制限がインデックス単位で行える
* configure が賢くなった
- webmaster のメイルアドレスをホスト名から類推する
実装に関する変更点
* CVSで共同開発している
* autoconf + automake 化が徹底された
* 文書形式の自動判別に File::MMagic perlモジュールを採用した
* コメントをすべて英訳した
--
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
nokubi@xxxxxxxxx (official)