本ページではXoops Cube の言語ファイルの追加方法について説明します。
1.言語ファイルの追加
言語ファイルを追加しよう
前回作成したサンプルモジュール(ブロックの追加)にファイルを追加して今回のサンプルを作成します。
今回は3ファイルを追加し、3ファイルを修正します。
今回追加する言語ファイルのファイル名称は固定名称です。
1. modinfo.php(今回追加ファイル)
2. main.php(今回追加ファイル)
3. blocks.php(今回追加ファイル)
4. xoops_version.php
5. sample2Form.class.php
6. sample2_block.php
まずファイルの追加をします。
ファイルの追加をするにあたって、事前にフォルダを2つ作成する必要があります。
フォルダの作成は /language/言語名/ となり以下の箇所に作成して下さい。
sample2モジュールの中に「language」というフォルダを作成して下さい。
更に「language」フォルダの中に 「ja_utf8」または「japanese」(※) フォルダを作成して下さい。
ここに、「modinfo.php」「main.php」「blocks.php」の3ファイルを作成して下さい。
(※)Xoops Cubeインストール時に選択した表示文字コードをECU-JPを使用の場合には、フォルダ名は「japanese」、UTF8の場合には「ja_utf8」を指定します。
言語名のフォルダ名(「japanese」及び「ja_utf8」)は固定名称です。
作成後のディレクトリ構成は上記の画像のようになります。(画像はUTF8の場合)
Xoops Cubeは言語ファイルがある場合、各言語ファイルは対応する箇所で自動で読み込まれます。(ブロックを除く)
1. xoops_version.phpで自動で読み込まれる言語ファイルは modinfo.php です。
2. モジュール本体自動で読み込まれる言語ファイルは main.php です。
3. 管理画面自動で読み込まれる言語ファイル(今回は追加対象にはない)は admin.php です。
4. ブロック読み込まれる言語ファイル(これは、自動では読み込まれない)は blocks.php です。
各言語ファイル名は上記のように固定名となります。
<?php define('_MI_SAMPLE2_LANG_TITLE', "*サンプルモジュール2*");
以下にコードの説明をします。
2行目の define('_MI_SAMPLE2_LANG_TITLE', "*サンプルモジュール2*"); ですが、
modinfo.phpの定数名には命名ルールがあり、 _MI_モジュールディレクトリ名_ から始まる定数が推奨されています。
<?php define('_MD_SAMPLE2_ERROR_ADD', "*半角英数のみ入力できます*");
以下にコードの説明をします。
2行目の define('_MD_SAMPLE2_ERROR_ADD', "*半角英数のみ入力できます*"); ですが、
main.phpの定数名には命名ルールがあり、 _MD_モジュールディレクトリ名_ から始まる定数が推奨されています。
<?php define("_MB_SAMPLE2_VALUE", "*sample2のブロックです*");
以下にコードの説明をします。
2行目の define("_MB_SAMPLE2_VALUE", "*sample2のブロックです*"); ですが、
blocks.phpの定数名には命名ルールがあり、 _MB_モジュールディレクトリ名_ から始まる定数が推奨されています。
<?php $modversion['name'] = _MI_SAMPLE2_LANG_TITLE; $modversion['dirname'] = basename(dirname(__FILE__)); $modversion['hasMain'] = 1; $modversion['cube_style'] = true; $modversion['templates'][0]['file'] = 'sample2.html'; // データベース設定 $modversion['sqlfile']['mysql'] = 'sql/mysql.sql'; $modversion['tables'][0] = '{prefix}_{dirname}_data'; // ブロックの追加 $modversion['blocks'][1]['name'] = 'ブロック'; $modversion['blocks'][1]['file'] = 'sample2_block.php'; $modversion['blocks'][1]['class'] = 'Sample2Block'; $modversion['blocks'][1]['template'] = 'sample2_block_template.html'; $modversion['blocks'][1]['func_num'] = 1;
今回は2行目を先ほどの定数に変更しているだけの修正となります。
定数は、 「modinfo.php」 で定義した定数を使用します。
<?php if(!defined('XOOPS_ROOT_PATH')) exit(); require_once XOOPS_MODULE_PATH.'/legacy/kernel/Legacy_ActionForm.class.php'; require_once XOOPS_MODULE_PATH.'/legacy/class/Legacy_Validator.class.php'; class sample2Form extends Legacy_ActionForm { function sample2Form() { parent::Legacy_ActionForm(); } function prepare($select) { if($select === "add") { $this->mFormProperties['str'] = new XCube_StringProperty('str'); $this->mFieldProperties['str'] = new XCube_FieldProperty($this); $this->mFieldProperties['str']->setDependsByArray(array('required')); $this->mFieldProperties['str']->addMessage('required', 'データ追加する場合は、文字列は何か必ず入力して下さい。'); } elseif($select === "del") { $this->mFormProperties['id'] = new XCube_IntProperty('id'); $this->mFieldProperties['id'] = new XCube_FieldProperty($this); $this->mFieldProperties['id']->setDependsByArray(array('required')); $this->mFieldProperties['id']->addMessage('required', 'データ削除する場合は、IDは何か必ず入力して下さい。'); } } function validateStr() { if ( !preg_match("/^[a-zA-Z0-9]+$/i", $this->get('str')) ) { $this->addErrorMessage(_MD_SAMPLE2_ERROR_ADD); } } }
今回は41行目のaddErrorMessageの引数を先ほどの定数に変更しているだけの修正となります。
定数は、 「main.php」 で定義した定数を使用しています。
<?php if(!defined('XOOPS_ROOT_PATH')) exit(); class Sample2_Sample2Block extends Legacy_BlockProcedure { function Sample2_Sample2Block (&$block) { parent::Legacy_BlockProcedure($block); } function execute() { $root = & XCube_Root::getSingleton(); $dirname = basename(dirname(dirname(__FILE__))); $root->mLanguageManager->loadBlockMessageCatalog($dirname); $value = _MB_SAMPLE2_VALUE; $render = & $this->getRenderTarget(); $render->setTemplateName($this->_mBlock->get('template')); $render->setAttribute('mid', $this->_mBlock->get('mid')); $render->setAttribute('bid', $this->_mBlock->get('bid')); $render->setAttribute('BDATA', $value); $renderSys = & $root->getRenderSystem($this->getRenderSystemName()); $renderSys->renderBlock($render); } }
以下に変更コードの説明をします。
ブロックの定数を読み込む処理が必要になるため、関数の呼び込む順番が変更になります。
変更箇所はexecute()の中です。
13行目でまず、シングルトンを取得します。
14行目でモジュールのディレクトリ名を取得しています。
15行目の $root->mLanguageManager->loadBlockMessageCatalog($dirname); で、ブロックの言語ファイルの読み込みを実施しています。
この処理でブロックでの言語ファイルの読み込みが可能となります。
言語ファイルの読み込みが終了したので17行目で、先ほど設定した定数を指定しています。
定数は、 「blocks.php」 で定義した定数を使用しています。
修正が完了したら、今回はモジュールをアンインストールし再度インストールします。
Xoops Cubeを開いたら、管理者画面メニューを押下して下さい。
管理画面から、「モジュールの管理」を押下して下さい。
「モジュールのインストール」画面が表示されたら、モジュール名が変更されていることを確認して下さい。
変更されていれば、 「modinfo.php」 で定義した文字列 「*サンプルモジュール2*」 にモジュール名が変更されているので、言語ファイルの読み込みが成功しています。
確認が終わったら、インストールアイコンを押下して、モジュールのインストールを実行して下さい。
更に「ブロックのインストール」からブロックのインストールを実施して下さい。
全て完了したら、「ホームページ」を押下してトップ画面に戻って下さい。
トップ画面を開くと、「blocks.php」で定義した文字列 「*sample2のブロックです*」 にブロックの中の文字列が変更されています。
また、「modinfo.php」で定義した文字列 「*サンプルモジュール2*」 にメインメニューのモジュール名が変更されています。
「main.php」で定義した文字列は、入力文字列判定部分に適用したので、追加時の文字列を半角英数以外の文字を入力して追加処理を実施してみましょう。
エラー表示の文字列が 「*半角英数のみ入力できます*」 と表示されて、エラー時の表示文字列が変更されています。
以上でXoops Cube の言語ファイルの追加を終了します。お疲れ様でした。