LOGIN ID Password Auto Login Register Now! Lost Password?
Xoops Q&A

XUGJの'XOOPS Dictionary'について

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 | 投稿日時 2008/5/2 11:24
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
要望ばかりすみません。

UTF-8対応のXwordsモジュールを必死に探していますがどこにもそんなのがないみたいです。XUGJの"XOOPS Dictionary"のモジュール配布は可能でしょうか。

Xoopscube.jpの旧フォーラムで一時話題となったXwordsのUTF-8対応ハック関連ダウンロードリンクが切れてしまって本文を追うだけで今のXwords(kanpyo.net製バージョン0.46)に手を入れるのが私の力ではとても無理でして...

よろしくお願い致します。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/2 11:47
fabi  Lord of the XUGJ 居住地: 2005.4から  投稿数: 1778
>Xoopscube.jpの旧フォーラムで一時話題となったXwordsのUTF-8対応ハック

これって確かもう本体に取り込まれてると思いますよ。

そもそもXwordsはXCLには未対応なんですが、下記を参考に動かすことが出来ます。
http://f29.aaa.livedoor.jp/~snaka/PukiWiki/PukiWiki.php?XOOPS%2FXWords%A4%F2X...

UTF-8は上記のように本体側ではすでに対応済みで、言語ファイルを自分で用意するだけで大丈夫だと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/5/2 12:38 | 最終変更
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
いやあ、私自身いじった記憶がありますし、xwords.textsanitizer.php のみ、タイムスタンプも新しいので、対応済ではないはずですよ。
XCL2.1対応のためには、ちゃんとコンストラクタを潰さなきゃダメです。

あと、UTF-8ファイル作成も微妙に嫌らしかったような…
for+iconv一発では出来なかった記憶がそこはかとなくあります。

現状ママでくるんだものを配布して良いなら、ここのDLにでも登録するのも手かもしれませんね。

--------------

スレッドを読み返してみたらなんだか変ですね。
コンストラクタつぶしは、XCL2.1対応であって、UTF-8対応とは無関係ですよ。
UTF-8対応は原則的に、言語ファイルを用意するだけです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/2 13:12 | 最終変更
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
fabi様、GIJOE様

お返事ありがとうございます。

(あり得ない11連休を取得し暇になってXCLとでも遊んぼうか、のavtx30です。)

一応XCLにインストールできましたがワードの分類などできずどうしたらいいかさっぱり分からない状態です。

ぜひUTF-8で正常動作中のXUGJ版Xwordsをお願いしたいと思います。

1. kanpyo.netからXwords v0.46ダウンロードしXOOPS_ROOT_PATH/modulesに解凍

2. language dir配下にあるjapaneseをja_utf8にコピーしnkfでUTF-8に変換
$ cd modules/xwords/language
$ cp -r japanese ja_utf8
$ cd ja_utf8
$ nkf -w --overwrite *.php

3. class/xwords.textsanitizer.php の修正
【修正前】
 function XwordsTextSanitizer()
 {
 }

【修正後】
 function XwordsTextSanitizer()
 {
     parent::MyTextSanitizer();
 }

4. XCL2.1.4にインストールしいくつかのダミーデータを挿入

結果
・日本語(UTF-8)が正常に表示できています。
頭文字(イニシャル)別が機能していません。

例えば、

見出し語に昭和の日、読み方(ひらがな)にしょうわのひと入力しましたが、このエントリーが「さ行」に分類されず「すべて」に分類されてしまっています。

・xwordsトップでは以下のようなメッセージが出ています。
引用:
Notice [PHP]: Undefined index: 3 in file modules/xwords/include/functions.php line 36
Notice [PHP]: Undefined index: 3 in file modules/xwords/include/functions.php line 38
Notice [PHP]: Undefined index: 5 in file modules/xwords/include/functions.php line 36
Notice [PHP]: Undefined index: 5 in file modules/xwords/include/functions.php line 38
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 277
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_merge() [function.array-merge]: Argument #2 is not an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_unique() [function.array-unique]: The argument should be an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: sort() expects parameter 1 to be array, boolean given in file modules/xwords/class/xwords.textsanitizer.php line 312
Warning [PHP]: reset() [function.reset]: Passed variable is not an array or object in file modules/xwords/class/xwords.textsanitizer.php line 313
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 277
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_merge() [function.array-merge]: Argument #2 is not an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_unique() [function.array-unique]: The argument should be an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: sort() expects parameter 1 to be array, boolean given in file modules/xwords/class/xwords.textsanitizer.php line 312
Warning [PHP]: reset() [function.reset]: Passed variable is not an array or object in file modules/xwords/class/xwords.textsanitizer.php line 313
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 277
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_merge() [function.array-merge]: Argument #2 is not an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_unique() [function.array-unique]: The argument should be an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: sort() expects parameter 1 to be array, boolean given in file modules/xwords/class/xwords.textsanitizer.php line 312
Warning [PHP]: reset() [function.reset]: Passed variable is not an array or object in file modules/xwords/class/xwords.textsanitizer.php line 313
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 277
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_merge() [function.array-merge]: Argument #2 is not an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_unique() [function.array-unique]: The argument should be an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: sort() expects parameter 1 to be array, boolean given in file modules/xwords/class/xwords.textsanitizer.php line 312
Warning [PHP]: reset() [function.reset]: Passed variable is not an array or object in file modules/xwords/class/xwords.textsanitizer.php line 313
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 277
Notice [PHP]: Undefined offset: 1 in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_merge() [function.array-merge]: Argument #2 is not an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: array_unique() [function.array-unique]: The argument should be an array in file modules/xwords/class/xwords.textsanitizer.php line 311
Warning [PHP]: sort() expects parameter 1 to be array, boolean given in file modules/xwords/class/xwords.textsanitizer.php line 312
Warning [PHP]: reset() [function.reset]: Passed variable is not an array or object in file modules/xwords/class/xwords.textsanitizer.php line 313

Xwords0.46, XCL2.1.4 (vanila、デフォールト言語=ja_utf8), PHP5, MySQL5, Apache2.2, Linux x64
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/3 4:20
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
引用:

ぜひUTF-8で正常動作中のXUGJ版Xwordsをお願いしたいと思います。
確認したら、正常動作してませんでした
取り急ぎ修正してます。

引用:
・日本語(UTF-8)が正常に表示できています。
頭文字(イニシャル)別が機能していません。
これは言語ファイルの修正ですね。

一般設定で「頭文字別リンクのフォーマット」が何になっているかを確認し、該当するファイルを修正してください。

このサイトでは、05 を利用しているので、
letter_format05.php
を修正してます。

修正はこんな感じ。
	"^([^\x21-\x7e]{2}|[\x21-\x7e]{1})(A|a)",
	"^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(A|a)",
EUCで2バイトのところをUTF-8の3バイトにするだけ。

引用:
・xwordsトップでは以下のようなメッセージが出ています。
なんだか基本的なバグっぽいので、見なかったってことでPHPデバッグOFFかな?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/3 23:33 | 最終変更
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
遅くなってすみません。

引用:
一般設定で「頭文字別リンクのフォーマット」が何になっているかを確認し、該当するファイルを修正してください。

このサイトでは、05 を利用しているので、
letter_format05.php
を修正してます。

言語ファイルを修正するだけではNGでした。(下記参照)

以下がmsg# 1.2の続きの手順を書きます。

5. 言語ファイル修正し再インストール
同じく「頭文字別リンクのフォーマット」を「05.アルファベット+五十音+その他(ローマ字の読みは五十音に入れない)」としてmodules/xwords/language/ja_utf8/letter_format05.php$mb_initを次のように修正('2'を'3'に修正)

$mb_init = array(
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(A|a)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(B|b)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(C|c)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(D|d)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(E|e)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(F|f)",        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(G|g)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(H|h)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(I|i)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(J|j)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(K|k)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(L|l)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(M|m)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(N|n)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(O|o)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(P|p)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(Q|q)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(R|r)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(S|s)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(T|t)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(U|u)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(V|v)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(W|w)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(X|x)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(Y|y)",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})(Z|z)",
        "^(あ|ア|ぁ|ァ|い|イ|ぃ|ィ|う|ウ|ぅ|ゥ|え|エ|ぇ|ェ|お|オ|ぉ|ォ).*",
        "^(か|カ|ヵ|が|ガ|き|キ|ぎ|ギ|く|ク|ぐ|グ|け|ケ|ヶ|げ|ゲ|こ|コ|ご|ゴ).*",
        "^(さ|サ|ざ|ザ|し|シ|じ|ジ|す|ス|ず|ズ|せ|セ|ぜ|ゼ|そ|ソ|ぞ|ゾ).*",
        "^(た|タ|だ|ダ|ち|チ|ぢ|ヂ|つ|ツ|っ|ッ|づ|ヅ|て|テ|で|デ|と|ト|ど|ド).*",
        "^(な|ナ|に|ニ|ぬ|ヌ|ね|ネ|の|ノ).*",
        "^(は|ハ|ば|バ|ぱ|パ|ひ|ヒ|び|ビ|ぴ|ピ|ふ|フ|ぶ|ブ|ぷ|へ|ヘ|べ|ベ|ぺ|ペ|ほ|ホ|ぼ|ボ|ぽ|ポ|ヴ).*",
        "^(ま|マ|み|ミ|む|ム|め|メ|も|モ).*",
        "^(や|ヤ|ゃ|ャ|ゆ|ユ|ゅ|ュ|よ|ヨ|ょ|ョ).*",
        "^(ら|ラ|り|リ|る|ル|れ|レ|ろ|ロ).*",
        "^(わ|ワ|ヮ|を|ヲ|ん|ン).*",
        "^([^\x21-\x7e]{3}|[\x21-\x7e]{1})([!-@\[-`{-~])",
        constant("_MD_{$MYDIRNAME}_ALL_INIT"),
);

修正後モジュールをわざわざ再インストールして前述手順4を再度実施しましたが同じ結果となりました。(templates_c, cache等は空にした上で)

以上状況報告でした。引き続き調査します。よろしくお願いします。

引用:
なんだか基本的なバグっぽいので、見なかったってことでPHPデバッグOFFかな?

来た~PHPデバッグOFF!ウィ〜!
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/5/6 5:28
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
avtx30さん、こんにちは。

引用:

言語ファイルを修正するだけではNGでした。(下記参照)

以下がmsg# 1.2の続きの手順を書きます。

5. 言語ファイル修正し再インストール
同じく「頭文字別リンクのフォーマット」を「05.アルファベット+五十音+その他(ローマ字の読みは五十音に入れない)」としてmodules/xwords/language/ja_utf8/letter_format05.php$mb_initを次のように修正('2'を'3'に修正)
う~ん。
なんでしょうね。

実は、[1.2] の時点で、
引用:
見出し語に昭和の日、読み方(ひらがな)にしょうわのひと入力しましたが、このエントリーが「さ行」に分類されず「すべて」に分類されてしまっています。
ここがおかしいんですよね。
letter_formatファイルがEUC-JP用となっていても、ア行~ワ行まではヒットするはずなので。
その$mb_initに定義された正規表現のいずれにもヒットしていないってことでしょうから、なにかmbstring関連のトラブルがありそうに思えます。

思いつく限りのチェックポイントを挙げます。

・ letter_format*.php のエンコーディング
・ mbstirngのinternal_encoding指定値確認
・ mbregexは有効になっているか
・ mbregexのエンコーディング設定確認

もっとも、XWordsがmbregexを使っているかどうかすら知らないんですが
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/6 18:47
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
GIJOEさん

ありがとうございます。連休が終わってXCLと遊べなくなってしまいました。

しばらくXWordsをそのままにします。

ちなみに教えていただいたチェックポイントについて以下に報告いたします。

・letter_format*.phpのエンコーディング
$ cd xwords/language/ja_utf8
$ nkf -g *.php
admin.php:UTF-8
blocks.php:UTF-8
letter.php:UTF-8
letter_format01.php:UTF-8
letter_format02.php:UTF-8
letter_format03.php:UTF-8
letter_format04.php:UTF-8
letter_format05.php:UTF-8
letter_format06.php:UTF-8
letter_format07.php:UTF-8
letter_format08.php:UTF-8
letter_format09.php:UTF-8
letter_format10.php:UTF-8
letter_format11.php:UTF-8
main.php:UTF-8
modinfo.php:UTF-8
waiting.php:UTF-8

・mbstringのinternal_encoding指定値確認
$ php -i | grep mbstring
mbstring.detect_order => no value => no value
mbstring.encoding_translation => Off => Off
mbstring.func_overload => 0 => 0
mbstring.http_input => pass => pass
mbstring.http_output => pass => pass
mbstring.internal_encoding => UTF-8 => UTF-8
mbstring.language => Japanese => Japanese
mbstring.strict_detection => Off => Off
mbstring.substitute_character => no value => no value

・ mbregexは有効になっているか
・ mbregexのエンコーディング設定確認
$ php -i | grep regex
Multibyte (japanese) regex support => enabled
Multibyte regex (oniguruma) version => 4.4.4
Multibyte regex (oniguruma) backtrack check => On

ありがとうございました。
投票数:2 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/5/7 11:48
okamoto  2nd Class   投稿数: 8
小手先の対応だと思いますが。。。
下記の対応で【頭文字(イニシャル)別】が動作しました。
ご確認ください
引用:
inculde/functions.php
151行 前  $init_t = substr($term, 0, 2);
  変更後 $init_t = substr($term, 0, 3);
161行 前  $init_p = substr($proc, 0, 2);
  変更後 $init_p = substr($proc, 0, 3);
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/5/7 22:15
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
okamotoさん

教えていただいた通り修正し正常に「頭文字(イニシャル)別」動作しました。ありがとうございました。

別件ですが、追加したエントリーがカテゴリ指定にかかわらずすべてカテゴリ'0'になってしまっています(phpmyadminにて確認済み)。もともとのバグでしょうか。
 ※上記include/functions.php修正前でも同じ現象
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - | 投稿日時 2008/5/7 23:56
okamoto  2nd Class   投稿数: 8
その情報はこちらから
http://usadeki.jp/modules/d3forum/index.php?topic_id=24

そこを作ってるファイルは

xwords/admin/entry.php

130行目
$sform -> addElement( new XoopsFormHidden( 'categoryID', intval($categoryID) ) );

です。これを
//$sform -> addElement( new XoopsFormHidden( 'categoryID', intval($categoryID) ) );


のようにコメントアウトして実行すると登録、修正ともにカテゴリーは入るようになりました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/5/8 5:08
GIJOE  Admiral 居住地: 2003年4月くらい  投稿数: 3708
okamotoさん、こんにちは。

引用:

小手先の対応だと思いますが。。。
下記の対応で【頭文字(イニシャル)別】が動作しました。
ご確認ください
引用:
inculde/functions.php
151行 前  $init_t = substr($term, 0, 2);
  変更後 $init_t = substr($term, 0, 3);
161行 前  $init_p = substr($proc, 0, 2);
  変更後 $init_p = substr($proc, 0, 3);


ああ、なるほど。
今調べてみたら、このサイトも、新しく追加したエントリについては、initが空になってました。

ただ、そのコードはいずれにせよ良くないですね。
$init_t = substr($term, 0, 2);
$init_t = mb_substr($term, 0, 1);
等とするべきでしょう。
このサイトのdictionaryもそのように修正しました。

もしかしたら、あえてmbstringを避けているのかもしれませんが、現状、EUC-JP決めうちコードのオンパレードなのだから、今さらmbstringを避ける意味がありません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/5/8 7:42
avtx30  Petty Officer 居住地: 3 years  投稿数: 75
okamotoさん
GIJOEさん

おかげで「頭文字(イニシャル)別」も「カテゴリー」分けも出来るようになりました。
 ※以前initされなかった語は手動で直しちゃいました

XwordsをUTF-8完全対応にはまだ色々修正する余地がある気がしています。
投票数:1 平均点:10.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities