テンプレートの使い方 |
作成日:2004-04-30 最終更新日: |
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.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]</>
以上は、テンプレートで操作可能な範囲で言語を変更する方法を述べた。 もう一つ Namazu には、 プログラム自体の出力となる言語を変更する方法がある。 表示の多言語化を参照いただきたい。
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 > テンプレートの使い方