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