プラグインを作る時、euc版とutf8版を用意するのって、意外と面倒なんですよね。(NP_znItemFieldEXみたいに複数のファイルを含むものの場合は特に)
準備して、さぁアップだと思った時に、修正箇所が見つかると、、、、、ちょっとめげます。(英語で書ければなぁ。)
それで、これからは(以前から気になっていた)言語ファイル対応にしてみようと思いまして、、、自動的にプラグインのソースコードを解析・変換して、指定した文字コード用(複数可)の言語ファイルを生成するツールをPHPで作ってみました。(NP_znItemFieldEXver0.03alphaを作りながら。)
言語ファイルへの対応方法は、
Nucleus(JP)フォーラム - 「Tips:プラグインの国際化」を参考にさせていただきました。
Andyさんありがとうございます。
(自分用に覚書ということで。。。)
配列セットに、プラグインごとの設定値を用意しておいて、MULTILANGUAGEクラスに渡すだけです。
設定値は、こんな感じ
| パラメータ | 用途 |
| language |
元ファイルの文字コード |
| languageFile |
言語ファイル保存先 |
| define |
define接頭辞 |
| character |
作成する言語ファイルの文字コード(配列で複数指定可能) |
| fileSetDefine |
変換対象ファイルと、保存先ファイルのセット(配列で複数指定可能) |
| fileSetEncode |
文字コード変換対象ファイルと、保存先ファイルのセット(配列で複数指定可能) |
実際には、こんな感じで使用
$NP_znItemFieldEX = array(
"language" => "EUC-JP",
"languageFile" => "../znitemfieldex/",
"define" => "_ZNIFEX",
"character" => array("euc", "utf8"),
"fileSetDefine" => array(
"NP_znItemFieldEX/NP_znItemFieldEX.php" => "../NP_znItemFieldEX.php",
"NP_znItemFieldEX/znitemfieldex/index.php" => "../znitemfieldex/index.php"
),
"fileSetEncode" => array(
"NP_znItemFieldEX/znitemfieldex/help.php" => "../znitemfieldex/\0help.php",
"NP_znItemFieldEX/znitemfieldex/helpex.php" => "../znitemfieldex/\0helpex.php",
"NP_znItemFieldEX/znitemfieldex/helptemplate.php" => "../znitemfieldex/\0helptemplate.php"
)
);
$ml = new MULTILANGUAGE($NP_znItemFieldEX);
$ml->projectConvert();
プラグインごとに、プロジェクト定義しておいて、フォームのSELECTなどで選択できるようにしておけば、変換するプラグインを、”選んでポン”って感じで変換できます。
上の例では、
| ファイル種類 | ファイル名 | 解説 |
| プラグイン本体 |
NP_znItemFieldEX.php |
← マルチバイト文字列を定数に変換したファイルを生成 |
| プラグイン管理ページ |
znitemfieldex/index.php |
← マルチバイト文字列を定数に変換したファイルを生成 |
| euc言語ファイル |
znitemfieldex/japanese-euc.php |
← 定数を定義した言語ファイルを生成 |
| utf8言語ファイル |
znitemfieldex/japanese-utf8.php |
← 定数を定義した言語ファイルを生成 |
| eucヘルプ |
znitemfieldex/japanese-euc.help.php |
← エンコードしたファイルを生成 |
| eucヘルプ |
znitemfieldex/japanese-euc.helpex.php |
← エンコードしたファイルを生成 |
| eucヘルプ |
znitemfieldex/japanese-euc.helptemplate.php |
← エンコードしたファイルを生成 |
| utf8ヘルプ |
znitemfieldex/japanese-utf8.help.php |
← エンコードしたファイルを生成 |
| utf8ヘルプ |
znitemfieldex/japanese-utf8.helpex.php |
← エンコードしたファイルを生成 |
| utf8ヘルプ |
znitemfieldex/japanese-utf8.helptemplate.php |
← エンコードしたファイルを生成 |
計10個のファイルが生成されます。
元のプラグインソースファイルは、普通にマルチバイト文字列を使用して作ります。
MULTILANGUAGEクラスが、ソースを解析して、以下の変換を行います。
- コメント内のマルチバイト文字は、削除
- PHPコード内の文字列のマルチバイト文字は、定数に置換え('と"の両方に対応)
- HTML内のマルチバイト文字は、<?php echo ; ?>で囲んで、定数に置換え
対象ファイルを自動的に圧縮して、アップロード先ディレクトリに自動的にコピーしてくれると、更に楽かも。
あと、機械翻訳で、English言語ファイルも自動生成しちゃうのはダメかな。完全全自動。(意味不明な英文作りそう。

)
と、ここまで書いて、今気が付きました。
eucと、utf8の変換が面倒で作り始めたのですが、何も言語ファイルに対応しなくても、自動で文字コードを変換するだけで、良かったのかも。
気付くのが、作り終わった後で良かった。

早く気付いてたら多分、言語ファイル対応してないもん。(←ばか)
横道にそれまくっていますが、NP_znItemFieldEX ver0.03alphaの作成は順調です。

例えば
Cannot delete file <<test.txt>>.
みたいに表示してる部分があるんですが、馬鹿正直に、
ファイルが削除出来ません <<test.txt>>。
ってやるとちょっと変なので、
ファイル <<test.txt>> が削除出来ません。
ってな感じで若干元も文章を細かく分割して言語ファイルに移動したりしたので結構手間取りました。ま、元々がそのあたりのこと考慮せずにメッセージなど書かれてあったからなんですが、それで自動である程度作成できるとうれしいかもしれないですね。