Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

言語処理に関する問題



寺西です。

テストスクリプトに以下の欠陥が見つかりました。

$ 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