[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)