メッセージなどをハードコーディングするのではなく,Nucleus本体と同じように言語ファイルを使うようにすることで、プラグインが出力するメッセージを多国語化することが出来ます。 初めから言語ファイルを意識してプラグインを開発するのではなく、安定したバージョンが出来るまでは直接ファイル内に記述しておいて、後からメッセージ部分を取り出して多国語化するほうがミスが少なくなると思われます。 Nucleus v3.40から、同梱のプラグイン開発マニュアルにも同様の記述がありますが、マニュアルの記述にいくつか追加してこちらにもページを作っておきます。
プラグインが生成するメッセージを多国語化する方法について。
<?php define('_ABCDEF_MESSAGENAME', '実際のメッセージ'); ・ ・ ・ ?>
のように言語ファイル内で分を定義します。
多国語化する文字列の全てを定義する必要があります。定数は一回しか定義できないので、既に定義されているものと重複しないようにプラグインの名前をはじめにつけることが推奨されます(この例だと _ABCDEF)。
function init() { // include language file for this plugin $language = ereg_replace( '[\\|/]', '', getLanguageName()); if (file_exists($this->getDirectory().$language.'.php')) include_once($this->getDirectory().$language.'.php'); else include_once($this->getDirectory().'english.php'); }
あと,english.phpは日本語以外のデフォルトなのでなるべく作るようにします。
プラグインAPIのPrePluginOptionsEditをフックして、オプションの名前や説明を多国語化することが出来ます。 メッセージの多国語化を完了した後に、以下の手順を実行します。
createOption('optionName', _PLUG_OPTION_DESC, ......); ... ...
しかしこのままでは、インストール時に設定されている言語によって表示されるメッセージが決定されてしまうので、ここをオプションの説明の部分をクォートでくくって文字列として登録するように変更します。
createOption('optionName', '_PLUG_OPTION_DESC', ......); ... ...
もちろん、言語ファイルの定数「_PLUG_OPTION_DESC」は定義したままにしておきます。
function event_PrePluginOptionsEdit($data) { if ($data['plugid'] === $this->getID()) { foreach($data['options'] as $key => $value){ if (defined($value['description'])) { $data['options'][$key]['description'] = constant($value['description']); } if (!strcmp($value['type'], 'select') && defined($value['typeinfo'])) { $data['options'][$key]['typeinfo'] = constant($value['typeinfo']); } } } }
getEventList() { return array('PostAddItem', 'PostUpdateItem', 'PrePluginOptionsEdit'); }
もちろん、プラグインにgetEventList()メソッドを再実装していない場合は、このメソッドを追加します。