Webalizer の文字化けに再挑戦

 Webalizer のグラフが文字化けしてしまいます。また、日本語の表記がおかしいので対処します。

 今回は、翻訳ファイルを修正してどうなるかを確認してみます。

mo ファイルから po ファイルを作成

 まず、mo ファイルから、po ファイルを作ります。

$ sudo msgunfmt /usr/share/locale/ja/LC_MESSAGES/webalizer.mo -o ~/new.po

 これでホームディレクトリに new.po ファイルが作られます。Raspberry Pi OS のパッケージでは、このファイルのエンコードは EUC-JP になっています。

$ nkf -g ~/new.po
EUC-JP

 UTF-8 にします。

$nkf -w ~/new.po > ~/new_utf8.po

po ファイルの編集

 まず、charset を EUC-JP から UTF-8 に変更します。

 後は、気になる日本語を修正すればいいです。以下、修正箇所の diff です。

10c10
< "Content-Type: text/plain; charset=EUC-JP\n"
---
> "Content-Type: text/plain; charset=UTF-8\n"
726a727,729
> msgid "May"
> msgstr "5月"
> 
957a961,963
> msgid "Sites per Day"
> msgstr "一日あたりのサイト数"
> 
1038a1045,1047
> msgid "Total Countries"
> msgstr "- 国合計"
> 
1050a1060,1062
> msgid "Total kB Files"
> msgstr "合計転送量(kB)"
> 
1064c1076
< msgstr "異なり参照元数"
---
> msgstr "個別参照元数"
1067c1079
< msgstr "異なりサイト数"
---
> msgstr "個別サイト数"
1070c1082
< msgstr "異なりURL数"
---
> msgstr "個別URL数"
1073c1085
< msgstr "異なりユーザエージェント数"
---
> msgstr "個別ユーザエージェント数"
1076c1088
< msgstr "異なりユーザ数"
---
> msgstr "個別ユーザ数"
1256a1269,1271
> 
> msgid "kB Files per Day"
> msgstr"一日あたりの転送量(kB)"

 元のファイルのバックアップを撮ってから、po ファイルから mo ファイルを作成します。

$ sudo mv /usr/share/locale/ja/LC_MESSAGES/webalizer.mo /usr/share/locale/ja/LC_MESSAGES/webalizer.mo.bak
$ sudo msgfmt -o /usr/share/locale/ja/LC_MESSAGES/webalizer.mo ~/new_utf8.po

 これで気になる日本語は修正できました。しかし、ここまでやってもグラフは文字化けしました。

グラフで日本語は使わない

 結局、自分の技量でグラフの日本語は、どうやっても日本語が文字化けするので、日本語を使わないように、グラフ部分の日本語を翻訳ファイルから削除しました。

 まず、new_utf8.po 中の国名と月名を全てコメントアウトしました。次に、以下をコメントアウトしました。

msgid "Daily usage for"
msgstr "日ごとの状況 -"

msgid "Files"
msgstr "ファイル"

msgid "Hits"
msgstr "ヒット"

msgid "Other"
msgstr "その他"

msgid "Pages"
msgstr "ページ"

msgid "Unresolved/Unknown"
msgstr "名前解決不能/不明"

msgid "Usage summary for"
msgstr "概要 -"

msgid "Visits"
msgstr "訪問者"

 再度、mo ファイルを作ります。

$ sudo msgfmt -o /usr/share/locale/ja/LC_MESSAGES/webalizer.mo ~/new_utf8.po

 これで、グラフは全て英語になりました。日本語が文字化けするよりはわかりやすいです。

mo ファイルは Webalizer の翻訳ファイル(mo) からダウンロードできます。

web サイト

Posted by sirius