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

[debian-devel:12039] Re: ja_JP.eucJP



久保田です。

From: Taketoshi Sano <kgh12351@xxxxxxxxxxx>
Subject: [debian-devel:12005] ja_JP.eucJP
Date: Tue, 4 Apr 2000 21:39:34 +0900

> 佐野@浜松です。

> 両方使えるようにするってのは、どうすればいいんでしたっけ。
> 
>  asclassic とか関係あるだろうなと思うけれど、時間が無いのと
> 知識が無いのとで、なにをどうすればいいのかわかってません。

基本的に、普通の locale の仕組みだけを使って書かれたソフトウェアは、
変更する必要がありません。gettext のメッセージを格納するディレクトリ
が /usr/share/locale/ja_JP.ujis になっている場合というのが考えられ
ますが (minicom が該当します。犯人は私です。BTS に投げておきます)、
たいがいのソフトウェアは /usr/share/locale/ja を使っているみたいです。

問題なのが、locale の仕組み以外の独自の処理に LANG の値を用いている
場合です。たとえば LANG が ja や ko で始まっていれば 2 バイト文字を
認識するようにする、などの目的で、このようなことをするソフトウェアが
存在します。この手法は本来は行儀のいいスタイルではないのですが、
locale の枠組みそのものが機能不足である場合などに使われます。
具体的には、 if (!strcmp(getenv("LANG"), "ja_JP.ujis")) {...} などの
形で出現します。

# で、そのときの対処法は、後藤さんが [debian-devel: 12013] で
# 書いてらっしゃる通りでいいと思います。上記の例の場合には、
# if (!strcmp(getenv("LANG"), "ja_JP.ujis") ||
#     !strcmp(getenv("LANG"), "ja_JP.eucJP")) {...}
# とするか、
# if (!strncmp(getenv("LANG"), "ja_JP", 5)) {...} 
# としてしまうのもひとつの方法ですね。もちろん、そのあとで
# else if (!strcmp(getenv("LANG"), "ja_JP.SJIS")) {...}
# なんてのが続く場合には、それなりの考慮が必要ですが。

したがって、ソースコードに対して ja_JP.ujis などの文字列で grep を
かけて、ディレクトリ名やファイル名もチェックしておけば、ほとんどの
場合はカバーできます。しかし、ごくたまに、tcsh のように、

Char STRLANGEUCB[]	= { 'j', 'a', '_', 'J', 'P', '.', 'u', 'j', 'i', 's',
			    '\0' };

というようなソースもあるので、要注意です。こういうケースも含めて
機械的にチェックできる方法は、ちょっと思いつきません。


# asclassic は、変更の必要がありません。

---
Tomohiro KUBOTA <kubota@debian.or.jp>
http://surfchem0.riken.go.jp/~kubota/