[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [debian-devel:16959] 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