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