namazu.cgiの結果表示の日本語が文字化けする対応

Linux

検索結果の表示を日本語化するnamzu.moファイル内のメッセージが文字化けしてしまう。ファイルはEUCなのにブラウザではUTF-8に変換され文字化けする。
WEBで検索しても解決方法が見つからない。
しかたなので、表示するメッセージを英語に変更した。

ja.poファイルを変更する。

msgidの内容をmsgstrにそのまま記述する。

# namazu-2.0.21/po
# vi ja.po
# diff -c ja.po_org ja.po | nkf -w
*** ja.po_org   2009-09-23 03:26:27.000000000 +0900
--- ja.po       2024-05-13 09:06:32.654070587 +0900
***************
*** 13,18 ****
--- 13,19 ----
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=EUC-JP\n"
  "Content-Transfer-Encoding: 8bit\n"
+ "Language: ja.eucJP\n"
  #: nmz/util.c:536
  msgid "Fatal error occurred!"
***************
*** 52,58 ****
  #: nmz/util.c:563
  msgid "can't open the index"
! msgstr "インデックスが開けませんでした"
  #: nmz/util.c:566
  msgid "can't open the result format file"
--- 53,59 ----
  #: nmz/util.c:563
  msgid "can't open the index"
! msgstr "can't open the index"
  #: nmz/util.c:566
  msgid "can't open the result format file"
***************
*** 89,100 ****
  #: src/output.c:561
  msgid "\t<strong>Page:</strong> "
! msgstr "\t<strong>ペイジ:</strong> "
  #: src/output.c:606
  #, c-format
  msgid "Current List: %d"
! msgstr "現在のリスト: %d"
  #: src/output.c:656
  #, c-format
--- 90,101 ----
  #: src/output.c:561
  msgid "\t<strong>Page:</strong> "
! msgstr "\t<strong>Pages:</strong> "
  #: src/output.c:606
  #, c-format
  msgid "Current List: %d"
! msgstr "Current List: %d"
  #: src/output.c:656
  #, c-format
***************
*** 103,116 ****
  #: src/output.c:671
  msgid "\t<p><strong> Total "
! msgstr "\t<p><strong>検索式にマッチする "
  #: src/output.c:678
  msgid ""
  "\t documents matching your query.</strong></p>\n"
  "\n"
  msgstr ""
! "\t 個の文書が見つかりました。</strong></p>\n"
  "\n"
  #: src/output.c:738
--- 104,117 ----
  #: src/output.c:671
  msgid "\t<p><strong> Total "
! msgstr "\t<p><strong>Total "
  #: src/output.c:678
  msgid ""
  "\t documents matching your query.</strong></p>\n"
  "\n"
  msgstr ""
! "\t documents matching your query.</strong></p>\n"
  "\n"
  #: src/output.c:738
***************
*** 124,135 ****
  #: src/output.c:772
  msgid "\t<h2>Results:</h2>\n"
! msgstr "\t<h2>検索結果</h2>\n"
  #: src/output.c:779
  #, c-format
  msgid "References: "
! msgstr "参考ヒット数: "
  #: src/output.c:829
  msgid "\t<p>No document matching your query.</p>\n"
--- 125,136 ----
  #: src/output.c:772
  msgid "\t<h2>Results:</h2>\n"
! msgstr "\t<h2>Results:</h2>\n"
  #: src/output.c:779
  #, c-format
  msgid "References: "
! msgstr "References: "
  #: src/output.c:829
  msgid "\t<p>No document matching your query.</p>\n"
#

makeを実行する。

poファイルのままでは利用できないので、poファイルをgmoファイルに変換する。

# make ja.gmo
rm -f ja.gmo && /usr/bin/msgfmt -c --statistics -o ja.gmo ja.po
157 個の翻訳メッセージ.
#

gmoファイルをインストールする。

# make install
/bin/sh .././mkinstalldirs /usr/local/share
installing ja.gmo as /usr/local/share/locale/ja/LC_MESSAGES/namazu.mo
installing ja_JP.SJIS.gmo as /usr/local/share/locale/ja_JP.SJIS/LC_MESSAGES/namazu.mo
installing es.gmo as /usr/local/share/locale/es/LC_MESSAGES/namazu.mo
installing fr.gmo as /usr/local/share/locale/fr/LC_MESSAGES/namazu.mo
installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/namazu.mo
installing pl.gmo as /usr/local/share/locale/pl/LC_MESSAGES/namazu.mo
if test "namazu" = "gettext-tools"; then \
  /bin/sh .././mkinstalldirs /usr/local/share/gettext/po; \
  for file in Makefile.in.in remove-potcdate.sin    Makevars.template; do \
    /usr/bin/install -c -m 644 ./$file \
                    /usr/local/share/gettext/po/$file; \
  done; \
  for file in Makevars; do \
    rm -f /usr/local/share/gettext/po/$file; \
  done; \
else \
  : ; \
fi
#

動作を確認する。

閑話休題

英文メッセージを対応する日本語に変換するnamazu.moファイルが無い状態にすれば、英文を出力されるのではないか。
と思い以下のコマンドを入力後再テストしたら同じ動きになった。
色々悩まずに、最初からこの操作すればよかった。
ただし、cronatbで実行している、mknmzコマンドの実行結果も英文になってしまった。
個人的には、問題ないと思っている。

# mv /usr/local/share/locale/ja/LC_MESSAGES/namazu.mo \
/usr/local/share/locale/ja/LC_MESSAGES/namazu.mo_org
#