Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
言語処理に関する問題
- From: Tadamasa Teranishi <yw3t-trns@xxxxxxxxxxxxxxx>
- Date: Sun, 18 Apr 2004 13:06:12 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 04209
寺西です。
テストスクリプトに以下の欠陥が見つかりました。
$ env LC_CTYPE=C LC_MESSAGE=ja_JP.eucJP LANG=ja make check
という組み合わせの場合(これ以外にもありえるが)に、問題が生じます。
tests/select-data でテスト用データを決定する際に $LC_ALL, $LC_CTYPE,
$LANG の順で値を調べていくのですが、この際、"C" を無視してしまいます。
"enXXXX" なら通るのですが、"C" だと未設定と同じ扱いになり、上記の
組み合わせの場合、LANG の "ja" が使われ、tests/data/ja/ をテスト
データとみなしてしまいます。
LC_CTYPE=C と指定していますので、言語処理は英語で行いますが、テスト
データは日本語を含むので正しい処理は行われません。
これが
<standard input>:4: warning: can't find special character `wchara4ce'
といったメッセージが出力される原因です。
次に ja-xxxx スクリプトですが、これは日本語処理に限定したものです。
しかし、言語のチェックを LANG でのみ行っています。
このため、上記の組み合わせの場合は、LANG=ja が採用され、日本語処理
を実行してしまいます。こちらも LC_CTYPE=C ですので、本来ですと
Skip すべきです。
この 2箇所を修正することで、上記の組み合わせでも make check が
全て通るようになりました。修正箇所を整理して差分を流す予定です。
# pltests の方も同様の問題があります。
ところで、gettext の仕様なのか、LC_CTYPE=C LC_MESSAGES=ja_JP.eucJP
だと、メッセージが文字化けします。
日本語メッセージを表示する際にも、LC_CTYPE に影響する関数を使って
いるということなのでしょうか。
たとえば、
$ env LC_CTYPE=C LC_MESSAGES=ja_JP.eucJP gettext --help
とすると、再現します。(LANGUAGE, LC_ALL は未設定の場合)
これが Namazu にも影響をして、
$ env LC_CTYPE=C LC_MESSAGES=ja_JP.eucJP namazu -C
のメッセージは文字化けを起こします。
(mknmz の方は自前で処理しているので、文字化けはおきません。)
さて、これはどうしたものでしょうか。
http://www.namazu.org/doc/tutorial.html#japanese
にある言語の切換を行なう環境変数の表の通りには、動かないということ
になります。(LC_MESSAGES と LC_CTYPE で、メッセージの表示と
言語処理を完全に分けることができない)
ちなみに GNU gettext 0.13.1、iconv(GNU libc) 2.3.2 の環境です。
他の環境の場合は正しく動作するのかもしれません。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E