[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00823] msg_* functions
- To: freewnn@tomo.gr.jp
- Subject: [freewnn:00823] msg_* functions
- From: Hiroo Ono <hiroo@XXXX>
- Date: Fri, 22 Mar 2002 02:28:19 +0900
- Reply-To: freewnn@tomo.gr.jp
- User-Agent: Wanderlust/2.6.1 (Upside Down) SEMI/1.14.3 (Ushinoya)FLIM/1.14.3 (Unebigoryōmae) APEL/10.3 Emacs/21.1(i386--freebsd) MULE/5.0 (SAKAKI)
小野寛生です
Wnn/etc/msg.c の getlang() に
#ifdef HAS_SETLOCALE
lang = setlocale (LC_ALL, NULL);
if (lang == NULL || *lang == '\0')
#endif
という部分がありますが、configure では setlocale() の有無を調べていま
せんし、autoconf なら HAVE_SETLOCALE になるはずです。
この HAS_SETLOCALE がどこで定義されているか調べたら、
chrysanthe% grep -R SETLOCALE *
Wnn/etc/msg.c:#ifdef HAS_SETLOCALE
cWnn/etc/msg.c:#ifdef HAS_SETLOCALE
kWnn/etc/msg.c:#ifdef HAS_SETLOCALE
% make clean していないので、cWnn、kWnn がはいってしまっています
ということで、つまり「この部分はずっと動いていなかった」ことになります。
で、getenv() が使われていますが、setlocale を使うようにしたらどうなるん
でしょうか?
setlocale のありかをしらべると、msg.c をリンクするプログラムでは、上記
の部分で始めて setlocale が呼ばれるので、"C" が返るということになる気
がしますが、あっていますか?
ただし、
・getlang() が呼ばれるのは、msg_open() 経由のみ。
・問題の部分にくるのは引数が NULL の時のみ。
・引数は msg_open() に渡されたものがやってくる。
ということで、見て行くと、
jserver/de.c では、jd_sock.h で定義された LANG_NAME を渡している。
jutil/wnnstat.c では、WNN_DEFAULT_LANG (wnn_config.h で定義)
XWnmo ... 見てません。
というわけで、そもそもここは呼ばれていないようです。
msg_*() は poorman's gettext なんで *.msg ファイルまわりの処理直す
より、いっそ gettext 使うように変えた方が楽なんではという気がしなく
もなかったりします。
Wnn4 開発当時、こういう仕組みが入ったというのはすごいと思いますが。
あと、*server では、エラーメッセージは各言語で表示しなくていいんじゃ
ないか、とか。
現状 wnn/C/*.msg がないので、daemon として動かしている時に log に残
るエラーメッセージは、% メッセージの番号と、"Message not found" だけ
ではないかと思います。
なんにせよ、msg_* 周りの仕様と動きはきちんと見直した方がよさそうです。