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

[debian-devel:16962] Re: ddtp 翻訳による description 文字化け



> > >  apt が ddtp 対応になって、description が日本語表示されるようになった
> > >  …のですが、どうやら EUC-JP で格納されてるので、現状の UTF-8 環境だと
> > >  文字化けを起こして判別ができません。
> 
>  /var/lib/apt/lists/<servername>_debian_dists_unstable_main_i18n_Translation-ja
>  がそのファイルですね。現状では EUC-JP で保存されています。
> 
> > apt が i18n 機能のなかで、 DDTP のデータを iconv してから表示するように
> > なったため問題がおきています。そのため、 locale が UTF-8 であろうと
> > EUC-JP であろうと問題になります。
> 
>  これは違うのではないでしょうか。
>  
>  角田さんや田村さんからの情報を見てみると、 DDTP のサーバ側では内部格納
>  自体は UTF-8 で行われているようです。で、翻訳済みの description データを
>  各リポジトリに置く際に ja な場合は EUC-JP 決め打ちとしているのでしょう。
> 
>  なので、「日本語も UTF-8 で配布してね」がまず初め。
>  それから「全言語 UTF-8 で配布して、apt/aptitude 側で iconv などで変換してね」
>  とするのが解決策じゃないですかね。

多分同じことをいっているが、用語と現状の認識が正確じゃないのね。

今どうなっているかというと、
2。「全言語 UTF-8 で配布して、apt/aptitude 側で iconv などで変換してね」
がすでに実現しています。(aptに関しては、aptitudeについては確認してません)

ただ、
1。「日本語も UTF-8 で配布してね」
がまだ実現されていません。そこが問題です。


現在のlocaleから文字コード情報を取得、utf-8 であればそのまま表示、そう
でないなら UTF-8 からその文字コードに変換させて表示する:


// RecordParser::LongDesc - Return a longer description                 /*{{{*/
// ---------------------------------------------------------------------
/* */
string debRecordParser::LongDesc()
{
  string orig, dest;
  char *codeset = nl_langinfo(CODESET);

  if (!Section.FindS("Description").empty())
     orig = Section.FindS("Description").c_str();
  else 
     orig = Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str()).c_str();

  if (strcmp(codeset,"UTF-8") != 0) {
     UTF8ToCodeset(codeset, orig, &dest);
     orig = dest;
   }    
  
   return orig;
}
                                                                        /*}}}*/


上川
-- 
dancer@{debian.org,netfort.gr.jp}   Debian Project