テンプレートの使い方

作成日:2004-04-30
最終更新日:

1. テンプレートの利用

Namazu は複数の言語で検索結果を表示できるように、 検索結果をいくつかの言語のテンプレートとして用意している。 標準は(残念なことに)英語であり、次の6種類である。

NMZ.head、NMZ.body、NMZ.foot、NMZ.result.normal、NMZ.result.short、 NMZ.tips

他の言語の版は、これらに拡張子 .?? (??は言語属性を表すアルファベット2文字)が付け加えられる

現在 Namazu では、日本語(ja)の他、 英語、フランス語、スペイン語、ドイツ語、ポーランド語の版が配布されている。 私はこれらに加えて、エスペラントを作っている。 以上の言語と対応するアルファベット2文字は次の通り。

言語アルファベットヘルプページチップス
日本語ja 日本語の例 日本語の検索のコツ
スペイン語es スペイン語の例 スペイン語の検索のコツ(訳なし)
フランス語fr フランス語の例 フランス語の検索のコツ
ドイツ語de ドイツ語の例 ドイツ語の検索のコツ
ポーランド語pl ポーランド語の例 ポーランド語の検索のコツ(訳なし)
エスペラントeo エスペラントの例 エスペラントの検索のコツ(訳なし)
英語(なし)英語の例 英語の検索のコツ

これらのテンプレートをカスタマイズしたい場合は、 新たなディレクトリを作り、 このディレクトリに新たなカスタマイズテンプレートを配置する。 これと同時に、mknmz コマンドの -T オプションで、 カスタマイズテンプレートの位置を指定する。 すると、mknmz コマンドによって生成されるテンプレートは、 検索結果が反映され、かつカスタマイズされたものを引き継ぐ。

ここで、検索結果が反映された、というのは、収集したファイル数やキーワード数など、 インデックス作成時に確定した情報の結果である。私は以前、 エスペラントのテンプレートをインデックスディレクトリの下にしか置かなかったために、 索引を再度作りなおしてもファイル数もキーワード数も全く変わらず、 その原因がわからなかったことがある。

私は以前 share/namazu/template/ の下のテンプレートを書き直す、 と記したが、 share以下を直接書き換えるのはふさわしくない、 あるいは権限がないためできない、 新たな言語のテンプレートに対応できない、などの理由でお薦めしない。

2. 各国語のテンプレート

このうち、現在の版(2.0.21)では、ドイツ語のテンプレートは不完全である。 不完全という意味は、NMZ.body.de と NMZ.tips.de が用意されていない、ということである。 また、用意されている他のテンプレートも、 一部分が英語のまま残されている単語がある (例:score、keywords など)。 ドイツ語ができる方はぜひとも直していただきたい。 私は、 ボンLINUXユーザーズグループの検索ページ (bolug.uni-bonn.de、リンク切れ)を参考にして、直している。 しかし、上記個所でもテンプレートで直せない個所、 すなわち、「検索結果」、 「現在のページ」などに相当する個所は直されていない。

なお、NMZ.head.?? (?? は言語属性)を作るときには、 form タグの中で、 次のように、hidden で言語属性を設定しておくとよい。

<input type="hidden" name="lang" value="??">

また、ヘルプを呼び出す時にも、 下記のように、やはりその言語属性を指定する必要がある。

<a href="http://marinkyo.que.jp/cgi-bin/sercxo/ja/namazu.cgi?lang=ja">[Helpo]</>

3. プログラムで表示する言語

以上は、テンプレートで操作可能な範囲で言語を変更する方法を述べた。 もう一つ Namazu には、 プログラム自体の出力となる言語を変更する方法がある。 表示の多言語化を参照いただきたい。

4. 埋め込み表示の種類

NMZ.head.* などには、埋め込み表示が可能ないくつかのキーワードがある。
<!-- HOEGHOGE -->ダミー<!-- HOGEHOGE -->
と表記しておけば、キーワードHOGEHOGE に関する mknmz を行った時の情報をダミー部分に埋め込んでくれる、 というものだ。以下、キーワード に相当するものを列挙する。

キーワード意味備考
FILE ファイル数
KEY キーワードの数
DATE日付yyyy-mm-dd 形式
VERSIONバージョン2.0.21
ADDRESSアドレス

以上の定義は、mknmz のスクリプトの sub make_headfoot で行われている。 ここを改造すれば、自分の必要な埋め込み表示を付け加えることもできる。ためしに、 DATE では時刻がわからないので時刻を表示するためのキーワード TIME を作ってみよう。

sub make_headfoot には次の行があるはずだ。

    my $day   = sprintf("%02d", (localtime)[3]);
    my $month = sprintf("%02d", (localtime)[4] + 1);
    my $year  = get_year();
    my $buf   = "";

ここに 3 行付けたす。

    my $sec   = sprintf("%02d", (localtime)[0]);
    my $min   = sprintf("%02d", (localtime)[1]);
    my $hour  = sprintf("%02d", (localtime)[2]);
    my $day   = sprintf("%02d", (localtime)[3]);
    my $month = sprintf("%02d", (localtime)[4] + 1);
    my $year  = get_year();
    my $buf   = "";

テンプレートへの追加は次のようになるだろう。

    $buf =~ s#()(.*)()#$1 $year-$month-$day $3#gs;
    $buf =~ s#()(.*)()#$1 $hour:$min:$sec   $3#gs;
    $buf =~ s/()(.*)()/$1 v$var::VERSION $3/gs;

まりんきょ学問所全文検索システム Namazu > テンプレートの使い方


MARUYAMA Satosi