[Namazu-devel-ja 226] Re: gettext.pl

Yukio USUDA m6694ha392t @ asahi-net.or.jp
2004年 10月 5日 (火) 22:10:08 JST


臼田です

Yukio USUDA wrote:

> > > 2. gettext.pl から返ってきた結果を変換して出力する
> > > 3. gettext.pl を改造して mo をハッシュに読み込んだ際に端末のコードに変換する
> > > 4. ja_JP.UTF-8 の mo を用意する
> > > 5. utf-8 な端末は無視する
> > ... 
> > > 3.が良いかと思っています。どうでしょうか?
> > > (これも codeconv.pl の初期化と順序の整理しなくてはいけないので
> > >   ちょっと厄介なのですが)
> > 
> > ja に限れば、4 の ja_JP.UTF-8 のみ用意して、
> > 2 のように出力時に端末のコードに合わせて、出力コードを変換する。
> > 
> > とすることで、.po も UTF-8 化します。
> .po の UTF-8 化もいずれ試してみることにします。
> ja 以外の変換も Perl5.8 のときは対応できるような気もします。
> 
.po を UTF-8 化してみたところ特に問題ありませんでした。
ja.po の文字コード変換をして
"Content-Type: text/plain; charset=EUC-JP\n"
の行を
"Content-Type: text/plain; charset=UTF-8\n"
に変え
$ make ja.gmo
のようにいつもどおりの方法で作成できました。


> 2 よりは 3 のほうが文字コードの処理個所が増えないので
> とりあえず、 3 で試してみようと思っています。
> 
現状の utf8index-branch に対して
下記のような修正をすることによって
UTF-8 環境でも mknmz のメッセージが文字化けしないようになりました。
おそらくこれで ja_JP.SJIS.po をなくせるものと思います。

とりあえずこれで commit しようと思います。

Index: scripts/mknmz.in
===================================================================
RCS file: /storage/cvsroot/namazu/scripts/mknmz.in,v
retrieving revision 1.131.2.11
diff -u -p -r1.131.2.11 mknmz.in
--- scripts/mknmz.in	2 Oct 2004 02:58:00 -0000	1.131.2.11
+++ scripts/mknmz.in	5 Oct 2004 12:40:52 -0000
@@ -91,7 +91,10 @@ sub main {
 
     # set LANG and bind textdomain
     util::set_lang();
+    my $err = codeconv::load_encode();
+    die "Encode module error: $err\n" if $err;
     textdomain('namazu', $util::LANG_MSG);
+
     load_rcfiles() if !(defined $ENV{'MKNMZNORC'});
     load_modules();
     load_archivemodules();
@@ -369,6 +372,7 @@ sub preload_modules () { 
 
     require "conf.pl" || die "unable to require \"conf.pl\"\n";
     require "util.pl" || die "unable to require \"util.pl\"\n";
+    require "codeconv.pl" || die "unable to require \"codeconv.pl\"\n";
     require "gettext.pl" || die "unable to require \"gettext.pl\"\n";
 }
 
@@ -379,7 +383,6 @@ sub postload_modules () {
 sub load_modules () {
     require "var.pl" || die "unable to require \"var.pl\"\n";
     require "usage.pl" || die "unable to require \"usage.pl\"\n";
-    require "codeconv.pl" || die "unable to require \"codeconv.pl\"\n";
     require "wakati.pl" || die "unable to require \"wakati.pl\"\n";
     require "seed.pl" || die "unable to require \"seed.pl\"\n";
     require "gfilter.pl" || die "unable to require \"gfilter.pl\"\n";
@@ -849,18 +852,6 @@ sub save_flist(@) {
 }
 
 sub require_modules() {
-    if (util::islang("ja") && $conf::NKF =~ /^module_nkf/) {
-	require NKF || die "unable to require \"NKF\"\n";
-        util::dprint(_("code conversion: using NKF module\n"));
-    }elsif (util::islang("ja") && $conf::NKF =~ /^module_encode/) {
-        my $err = codeconv::load_encode();
-        if ($err) {
-	    print STDERR "Encode module error $err\n";
-	    exit 1; 
-	} else {
-	    util::dprint(_("code conversion: using Encode module\n"));
-	}
-    }
     if (util::islang("ja") && $conf::WAKATI =~ /^module_kakasi/) {
 	require Text::Kakasi || die "unable to require \"Text::Kakasi\"\n";
 	{
Index: pl/codeconv.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/codeconv.pl,v
retrieving revision 1.17.2.8
diff -u -p -r1.17.2.8 codeconv.pl
--- pl/codeconv.pl	2 Oct 2004 02:58:00 -0000	1.17.2.8
+++ pl/codeconv.pl	5 Oct 2004 12:40:53 -0000
@@ -216,15 +216,19 @@ sub to_external_encoding ($) {
 }
 
 sub load_encode{
-    if ($] >= 5.008){
+    if (($conf::NKF =~ /^module_encode/) && ($] >= 5.008)){
         eval 'use Encode qw/ from_to decode _utf8_off /;';
         if ($@) {return $@};
         eval 'use Encode::Guess qw/ euc-jp shiftjis 7bit-jis utf-8 /;';
         if ($@) {return $@};
 	return undef;
-    }else{
-        return undef;
+    } elsif (util::islang("ja")){
+	if ($conf::NKF =~ /^module_nkf/) {
+	    eval 'use NKF 2.0;';
+	    if ($@) {return 'unable to require "NKF": ' . $@};
+	}
     }
+    return undef;
 }
 
 sub utf8_zen2han_ascii ($) {
Index: pl/gettext.pl.in
===================================================================
RCS file: /storage/cvsroot/namazu/pl/gettext.pl.in,v
retrieving revision 1.8.14.1
diff -u -p -r1.8.14.1 gettext.pl.in
--- pl/gettext.pl.in	23 May 2004 16:53:04 -0000	1.8.14.1
+++ pl/gettext.pl.in	5 Oct 2004 12:40:53 -0000
@@ -57,8 +57,9 @@ sub textdomain
 	$trans_pointer = &mo_format_value($reverse, $buffer,$trans_tab_offset + 4);
 	$trans_tab_offset += 8;
 
-	$_{substr ($buffer, $orig_pointer, $orig_length)}
-	    = substr ($buffer, $trans_pointer, $trans_length);
+	my $msg = substr ($buffer, $trans_pointer, $trans_length);
+	codeconv::to_external_encoding(\$msg);
+	$_{substr ($buffer, $orig_pointer, $orig_length)} = $msg;
     }
 }
 

臼田幸生




Namazu-devel-ja メーリングリストの案内