Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: content negotiation of namazu.cgi



寺西です。

TSUCHIYA Masatoshi wrote:
> 
> 現在,namazu.cgi の出力の言語は,
> 
>   (1) .namazurc で指定された言語
>   (2) CGI の query で指定された言語
> 
> によって決まっていますが,ブラウザの request も参照して欲しいなあと思っ
> たので,Apache によって設定される HTTP_ACCEPT_LANGUAGE 環境変数を参照
> するパッチを書いてみました.

これはこれで面白いと思います。
 
> のようになっているでしょう.このような Accept-Language を受け取った場
> 合,私の書いたパッチは,単に nmz_set_lang("da") を行います.しかし,デ
> ンマーク語に翻訳されたメッセージファイルはありませんから,
> nmz_choose_msgfile_suffix() によって,言語 suffix は削られて,「英語」
> のメッセージが選択されます.この指定の場合,本当はフランス語のメッセー
> ジが選択されるべきだと思うのですが,そこまで実装しようとすると,改変の
> 範囲がかなり大きくなりそうだったので,見送りました.

今、手元にソースがないのできちんとチェックできていませんが、
これは nmz_choose_msgfile_suffix() で、"da" が見つからずに、
"en" になってしまうということでしょうか。

もしそうなら、nmz_choose_msgfile_suffix() に相当する別関数を
用意し、指定した言語のメッセージファイルが見つかったか、否かを
チェックし、見つかった場合は nmz_set_lang() を呼んで終了。
見つからなかったら、次の言語をチェックというようにループすれば
良いのでは? どれも見つからない場合は、nmz_set_lang("en") を呼ぶ。

例えば、こんな感じ。

for(i = 0; i < n; i++) {
  if (xxxx_choose_msgfile_suffix(buf[i].name)) {
    nmz_set_lang(buf[i].name);
    break;
  }
}
if (i == n) {
    nmz_set_lang("en");
}

xxxx_chose_msgfile_suffix() は、メッセージファイルのチェックのみ
で、見つからない場合は 0 を返し、見つかった場合は 1 を返すように
しておく。

これだと、それほど改変の範囲は大きくないのでは?
# 似て非なる xxxx_chose_msgfile_suffix() を作るのに抵抗があるかな。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E