pNamazu の言語属性

作成日:2002-11-22
最終更新日:

namazu.cgi の言語属性

Namazu には、言語属性というオプションがある。C 言語をコンパイルした版の namazu.cgi では、 lang 属性に言語を表す適切な2文字を指定すると、 検索画面の表記を指定した言語にすることができる。 Namazu のバージョン 2.0.11 では日本語(ja)、英語(en)、フランス語(fr)、スペイン語(es)、 ドイツ語(de)、ポーランド語(pl)が用意されている。

表記を任意の言語で表示させることも可能だ。 その場合は、大きく2つの部分を新規作成する必要がある。

  1. テンプレート部分のファイル
  2. 言語カタログ部分

namazu.cgi での方法については別ページに譲る。ここでは、pNamazu を改造して言語属性を広げることを考える。

なお、pnamazu のインストールについては下記を参照されたい。
http://www.tcp-ip.or.jp/~furukawa/pnamazu/

pnamazu.cgi での言語属性は日本語と英語のみだ。perl のソースを見ると、 lang 属性が ja 以外であればすべて英語とみなすようになっている。

pnamazu でも将来は、言語オプションに従った任意の言語で表示できることを願っている。 しかし、言語カタログ部分の実装は C 言語と OS 固有の方法で実装されているため、 pnamazu で実装するのは難しいかもしれない。

テンプレート読み込み部分の改造

希望ばかりいっても何も進まないので、自分でできるところからやってみた。

まず、テンプレート読み込み部分を改造して、 日本語と英語以外のテンプレートも読み込めるようにしてみた。

pnamazu.cgi の lang_set サブルーチンに着目する。 ここで、言語の設定が次のようにされている部分がある。 読みやすいようにこちらで適宜改行を加えている。

	if ($key =~ /ja|jp|jis|sj/i) {
		$LANGUAGE = 'ja';
		&set_output_ja_code(&key);
	} else {
		$LANGUAGE = 'en';
	}

ここを次のようにして、こちらでテンプレートを用意しているものはすべて読み込めるようにした。

	if ($key =~ /ja|jp|jis|sj/i) {
		$LANGUAGE = 'ja';
		&set_output_ja_code(&key);
	} elsif ($key =~ /eo|fr|es|de/i) {
		$LANGUAGE = $key
	} else {
		$LANGUAGE = 'en';
	}

elsif の条件節では、言語 eo, fr, es, de が読み込めるようにしている。これらはそれぞれ、 エスペラント、フランス語、スペイン語、ドイツ語である。エスペラントは自分で作った。 フランス語、スペイン語、ドイツ語は既に用意されている。 ただし、スペイン語は iso 8859-1 の文字コードを用いているためか、 ときどき読めないアクセントが出てくる。そのため、こちらで実体参照のコードに置き換えた。 ドイツ語も同様である。

また、どういうわけか、結果を表示するためのテンプレートをエスペラントで記述したファイル、 NMZ.result.normal.eo と NMZ.result.short.eo は、 どちらも表記部分を最初の1行にすべて入れないと表示できないことに気が付いた (上記文が意味不明と思うが、私の備忘録ということで御寛恕を乞う)。

言語カタログ部分の改造

もうひとつ、言語カタログ部分の改造がある。こちらは、テンプレートには記述されていない、 言語固有のメッセージをそれぞれの言語に置き換える部分である。 こちらも、私の対応も不十分であるが、方針を書いておく。

pnamazu では main というサブルーチンがこの言語カタログ部分も含んでいる。 まず、main の始めで、連想配列 %Text が定義されている。ここで、 言語によって表示を切り替えたい単語を決める。現在でもいくつかのことばが初期化されていて、 日本語対応もされている。 ここではまだ日本語対応されていないことばのうち、 日本語版検索結果にもかかわらず、 'Current List' と 'Page' と英語で表示されている2語を、 日本語対応させることにする。

まず、%Text の初期化時に、キー 'list' と値 'Current List' を、 キー 'page' に値 'Page' を対応させる処理を追加する。
%Text = {,,, 'list' => 'Current List', 'page' => 'Page', ...}

次に、同じ main サブルーチンで、if($language =~ /ja|jp|jis/i) { から始まる節を見つける。 ここでは、 $Text{key} = value の形でキーに日本語が対応しているので、 ここで、 $Text{'page'}='ページ';$Text{'list'}='現在のリスト'; とすればよい。

最後に、今まで 'Current List' や 'Page' を即値で代入した個所を、 $Text{key}で置き換えればよい。これらが出ていた場所はどこか、 どこを置き換えればよいかは演習問題である。

上述の方法は、日本語対応が不完全だった個所を完全化するための方法であった。 これを拡張して、他言語に対応できるようにするのは容易だろう。 上記の if 分岐に加えて、elsif によって他の言語で置き換えられるようにすればよい。

上記の方法で作ったそれぞれの言語の検索ページを準備していたが、 その後namazu.cgi を C 言語でコンパイル可能なレンタルサーバを見つけたので、 pnamazu は必要なくなった。そのため、準備は中断したままだ。

まりんきょ学問所全文検索システム Namazu > pNamazu の言語属性


MARUYAMA Satosi