![]() |
![]() |
AutoLoginと、GIJOE 氏が XOOPS2 で提唱しておられた、EMLH(Easiest Multi Language Hack)の機能を、XOOPS Cube2.1のPreload機能及びDelegate機構を使用して実装したモジュールです。
管理画面でcubeUtilsモジュールの一般設定にて、
アーカイブに同梱されているプリロードファイル MultiLanguagePreLoad.class.php をサイトプリロード(html/preload/フォルダの下にコピー)に登録することで、多言語機能が働くようになります。
Hodajuku Distribution同梱のcubeUtilsでも、このpreloadは無効になっています。 必要な場合は、 html/preload/disabled/ フォルダ内から MultiLanguagePreLoad.class.php をhtml/preload/ フォルダにコピーしてください。
なお、cubeUtils標準では、日本語(EUC-JP)と英語の切替ができるような設定になっていますが、これ以外の組み合わせでの言語切替を行う場合など、ほとんどのケースで conf_ml のカスタマイズが必要だと思われます。
この機能は、Xoops Cube Legacyのブロックを、iGoogleのガジェットとして公開可能にする機能です。対象となるブロックは、ゲストユーザが参照可能なブロックに限定しています。 公開の手順としては、
cubeUtilsの多言語機能は
という2つの方式の組み合わせによって実現されています。
[(言語タグ名)]
これが言語タグです。これは開始タグになります。終了タグは
[/(言語タグ名)]
です。
例えば、言語タグが[ja]と[en]の場合、
[ja]こんにちは[/ja][en]Hello![/en]
の様に記述することによって、日本語が選択されている時には「こんにちは」のみが、英語が選択されている時には「Hello!」がそれぞれ表示されます。
言語タグはほとんどすべての局面で利用可能です。
テーマ・テンプレート・コンテンツ内での利用はもちろんのこと、altsysによってカスタマイズする言語定数内にさえ埋め込むことができます。
単にリテラルだけでなく、HTMLの各要素を切り替えることもできます。言語に応じた画像を表示したければ、<img>タグのsrc部分に言語タグを埋め込めば良いでしょう。もちろん、<img>タグの外側を言語タグでくくることも可能です。この場合は、
ただ、この機能はあまりにも強力すぎるため、誤ったタグ記述によって、サイト全体が表示されなくなる可能性があります。(例えば、<head>内に開始タグがあるのに、そのすぐ後ろに終了タグを書き忘れた場合、次に終了タグが登場するまで、まるまる出力がスキップされてしまいます)
そのため、デフォルトでは、HTMLの</table>タグだけはまたげないようにしてあります。conf_mlのカスタマイズで、これを変更することもできます。
選択言語を簡単に切り替えるためのタグもあります。
[mlimg]
を文中に挿入すると、言語可能な言語が一通り並んだ、言語選択コントローラを表示する事ができます。
言語選択コントローラに表示される各言語用画像のURLは、conf_ml.php でカスタマイズ可能です。
特定の言語への切替URLのみが必要な場合は、mlurlタグを利用します。
[mlurl:en]
と記述した場合、言語タグ名enへ切替えるためのURLが得られます。テーマやテンプレート内では、
[ja]<a href="<{$xoops_url}>[mlurl:en]">English</a>[/ja]などと記述することになるでしょう。
html/modules/cubeUtils/include/ 内に conf_ml.dist.php という雛形ファイルがあるので、まずはこのファイルを同じフォルダ内に conf_ml.php という名前にコピーします。
conf_ml.phpという名前のファイルがあれば、それを設定ファイルとして利用しますので、以降はこのファイルをカスタマイズしていくことになります。conf_ml.dist.php しかなければ、その雛形ファイルが利用されますが、このファイルは今後のバージョンアップで上書きされるため、必ずconf_ml.phpという名前にするべきでしょう。
以下、conf_mlの各項目について説明します。
言語タグ名を列挙します。カンマで区切ってください。 デフォルトは、
ja,en
となっていますが、これは、[ja]と[en]が利用出来る、ということを意味しています。 この定義は、単に最初のタグがjaで、2番目のタグがenだ、ということだけを意味しており、japaneseやenglishといったXCLシステム言語名とは結びついていません。
つまり言語タグ名は自由に定義が可能です。字数制限もありませんし、記号を使うことさえできます(ただしカンマは不可能)。
定義数も自由ですが、CUBE_UTILS_ML_LANGNAMES 項目等と個数が一致する必要があります。
日英仏3ヶ国対応の例:
ja,en,fr
言語切替コントローラに表示される画像のURLです。CUBE_UTILS_ML_LANGS で定義した言語数だけ、対応するURLを記述します(カンマ区切り)。
CUBE_UTILS_ML_LANGSで定義した言語タグ名とXCLシステム言語名を、ここで結びつけます。 デフォルトは以下の組み合わせですが、
define('CUBE_UTILS_ML_LANGS','ja,en');
define('CUBE_UTILS_ML_LANGNAMES','japanese,english');この場合、[ja]がXCLのjapanese(EUC-JP)に、[en]がenglishに、それぞれ対応していることになります。
XCLシステム言語として、ja_utf8を利用している場合は、
define('CUBE_UTILS_ML_LANGS','ja,en');
define('CUBE_UTILS_ML_LANGNAMES','ja_utf8,english');という組み合わせにする必要があります。
言語切替コントローラなどで利用される言語タグの説明テキストです。CUBE_UTILS_ML_LANGS で定義した言語数だけ、対応するテキストを記述します(カンマ区切り)。
言語タグがまたいではいけない構造を指定します。 デフォルトでは、</table>を言語タグはまたげません。 リスクを承知でまたげるようにするには、
define('CUBE_UTILS_ML_NEVERCROSSREGEX','');とします。
これらはインストール時に利用される定義です。ja_utf8を利用している場合は、
// 'charset_mysql.php' in Legacy module language directory will be called.
define ('CUBE_UTILS_ML_DBSETUP_LANGUAGE','ja_utf8');
define ('CUBE_UTILS_ML_OUTPUT_MULTIBYTE',1);
define ('CUBE_UTILS_ML_OUTPUT_CHARSET','UTF-8');とする必要があります。
CubeUtils は、nobunobu さんのサイトでも手に入りますが、最新版は HD(ホダ塾ディストリビューション)に同梱されているものです。/modules/CubeUtils だけ抜き出して使ってもまったく問題はありませんので、こちらで手に入れるようにしてください。
http://hodajuku.sourceforge.net/
CubeUtils には、誤ったタグ記述で、サイト全体を崩してしまうようなことを避けるために、大きな構造をまたがないようにする仕掛けが施されています(GIJOE 氏のオリジナルの EMLH と同等の仕様です)。 デフォルトでは </table> をまたいで、言語タグを使用すると、EMLH はきちんと機能しません。
「またいではいけないタグ」は、conf_ml.dist.?php に定義されていますので、その中の定数、CUBE_UTILS_ML_NEVERCROSSREGEX を編集することで変更できます。EMLH 設定時に、/modules/cubeUtils/include/conf_ml.dist.?php を conf_ml.php にコピーしていると思いますので、適宜修正してください。
なお、もともとおかしくなってしまうことを防ぐ為の機能ですので、table すべてを言語タグに入れる為に、CUBE_UTILS_ML_NEVERCROSSREGEX をいじるのではなく、またがないように記述した方がよい解決でしょう。
<table> <tr> <td>[ja]日本語[/ja][en]English[/en]</td> </tr> </table>
参考:http://www.xugj.org/modules/QandA/index.php?topic_id=733
| ブロック名 | テンプレート | 説明 | ブロック複製 | ブロックオプション |
| 言語選択 | なし | EMLH用の言語選択ブロック | 不要 | |
| iGoogle Gadget用ブロック | cubeUtils_block_igoogle.html | 複数インストール可能 | どの既存のブロックを iGogle に登録するかを選択 | |
| ログイン | cubeUtils_block_login.html | オートログインのチェックボックスのついたログイン用ブロック | 不要 |
| テンプレート名 | 説明 |
| cubeUtils_userform.html | /user.php にアクセスしたときに現れるオーバライド用のログイン画面 |
| cubeUtils_block_igoogle.html | ブロックを iGoogle ガジェットに追加する為のリンクを記載したもの |
| cubeUtils_block_login.html | オートログインのチェックボックスのついたログイン用ブロック |
CubeUtils をいれると自動的に CubeUtils のログインブロックが表示状態になります。デフォルトの user モジュールにもログインブロックがあるので、user モジュールのログインブロックを非表示にしてください。
Macintosh の Safari をお使いではありませんか? Safari でプライベートブラウズをオンにしているとそういうことが起こってしまうようです。
まずアクセス権を確認してください。iGoogle に追加する予定のブロックのアクセス権が、ゲストに許可されていないと、iGoogle には追加できません。 また cubeUtils モジュールアクセス権限も、ゲストに開放するようにしてください。
下記アドレスの example.com を、ご自分のサイトに変更してアクセスしてみてください。
http://example.com/modules/cubeUtils/igoogle.php
これで、XML ツリーが表示されることを確認してください。
次に
http://example.com/modules/cubeUtils/igoogle.php?mode=raw&block=nnn
と叩いて、ブロックの内容が表示されるかどうかを確認してください。
* nnn は、iGoogle Gadget ブロックの bid です。bid は、「互換モジュール」「ブロックの管理」の一覧の左端にある番号です。
あと、GoogleのGadgetの定義は、Google側にキャッシュされるようで、キャッシュが効いている間は修正しても反映されないようです。
なので、もしブロックの権限を間違って一度設定するとその時の状態が残っているかもしれません。これを解消するためには、
から、Googleで提供しているGadgetを持ってきて、対象のCacheをOFFにしてやる必要があります。このガジェットを iGoogle に登録すると、キャッシュをコントロールできるようになるので、iGoogle に追加してみてください。
あと、この機能では、一旦 Gadget が Google にキャッシュされて配信されるので、MAMP や XAMMP などのローカル XOOPS ではテストなどできないので、注意してください。
iGoogle への登録は、下記スクリプト片の(No)の部分をiGoogle Gadget用ブロックの bid にしたものがあれば、それで事足ります。
<a href="http://fusion.google.com/add?moduleurl=http%3A//http://www.medianews.jp/modules/cubeUtils/igoogle.php%3Fblock%3D(No)"><img width="104" title="Add to iGoogle" alt="Add to iGoogle" src="http://buttons.googlesyndication.com/fusion/add.gif" height="17" border="0" /></a>
ので、表示チェックさえできてしまえば、この部分だけテーマなりに生書きすることで、画像も変更できますし、自由なデザインをすることができます。
また混乱しやすいと思われるのですが、ゲストに許可さえされていれば、じっさいにブロックが表示されている必要はないので、Altsys をつかって、「表示サイド」を「なし」にしても問題はありません。