差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
dokuwiki:localize [2007/07/29 09:50] – osamu | dokuwiki:localize [2007/07/31 15:31] – osamu | ||
---|---|---|---|
行 1: | 行 1: | ||
====== DokuWikiの日本語対応 ====== | ====== DokuWikiの日本語対応 ====== | ||
- | [[doku> | + | [[doku> |
<code php> | <code php> | ||
$conf[' | $conf[' | ||
</ | </ | ||
- | と記述すると、ユーザーインターフェースの文字列などは日本語になる。 | + | と記述されて、ユーザーインターフェースの文字列などは日本語になる。 |
機能面での日本語対応を強化するために、次の改造を加える。 | 機能面での日本語対応を強化するために、次の改造を加える。 | ||
行 72: | 行 72: | ||
^D</ | ^D</ | ||
のように、入力した文字が分かち書きされて表示されればOK。 | のように、入力した文字が分かち書きされて表示されればOK。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
行 92: | 行 97: | ||
list($page, | list($page, | ||
</ | </ | ||
- | の後ろに | + | と |
+ | <code php> | ||
+ | $body = strtr($body, | ||
+ | </ | ||
+ | の間に | ||
<code php> | <code php> | ||
| | ||
行 147: | 行 156: | ||
を追加。 | を追加。 | ||
- | DokuWikiの最近のバージョンでは、日本語を含むアジア圏の文字を1文字1単語とみなして検索する修正が入っているが、これを使うと例えば「文字を探す」で検索すると「文」「字」「を」「探」「す」のすべての文字が検索結果でハイライトされたりして具合がよくない。上記の修正を加えたときは、idx_getPageWords($page)とidx_tokenizer($string,& | + | DokuWikiの最近のバージョンでは、日本語を含むアジア圏の文字を1文字1単語とみなして検索する修正が入っているが、これを使うと例えば「文字を探す」で検索すると「文」「字」「を」「探」「す」のすべての文字が検索結果でハイライトされたりして具合がよくない。上記の修正を加えたときは、idx_tokenizer($string,& |
<code php> | <code php> | ||
$asia = @preg_replace('/ | $asia = @preg_replace('/ | ||
if(!is_null($asia)) $word = $asia; //recover from regexp failure | if(!is_null($asia)) $word = $asia; //recover from regexp failure | ||
</ | </ | ||
- | という2行をそれぞれコメントアウトしたほうがよい。 | + | という2行をコメントアウトする。 |
+ | また、indexer.phpにwordlen()という関数があるが、これも同じくアジア圏の文字は1文字1単語とみなす処理が入っているので | ||
+ | <code php> | ||
+ | function wordlen($w){ | ||
+ | // $l = strlen($w); | ||
- | //2005-12-8 - Mecabのプロセスがハングアップして残ってしまうのを避けるために'' | + | $l = utf8_strlen($w); |
+ | |||
+ | //// If left alone, all chinese " | ||
+ | //// So the " | ||
+ | // | ||
+ | // $l += ord($w) - 0xE1; // Lead bytes from 0xE2-0xEF | ||
+ | |||
+ | return $l; | ||
+ | } | ||
+ | </ | ||
+ | と変更。 | ||
+ | |||
+ | それから、同じくindexer.php の idx_getIndexWordsSorted() 関数の中に、 | ||
+ | <code php> | ||
+ | if ($wlen < 3 && $wild == 0 && !is_numeric($xword)) continue; | ||
+ | </ | ||
+ | という部分があるが、このままだと3文字より短い単語を検索できない。英語などではそれでもよいのだが、日本語の場合1~2文字の単語も検索できないと困るので、これを | ||
+ | <code php> | ||
+ | if (preg_match('/ | ||
+ | </ | ||
+ | と書き換える。 | ||
+ | //2005-12-8 - Mecabのプロセスがハングアップして残ってしまうのを避けるために'' | ||
//2007-7-29 - DokuWikiの最近のバージョンにあわせて、修正箇所の説明を変更// | //2007-7-29 - DokuWikiの最近のバージョンにあわせて、修正箇所の説明を変更// | ||
+ | |||
==== 全文検索インデクサーの不具合修正 ==== | ==== 全文検索インデクサーの不具合修正 ==== |