[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 メーリングリストの案内