先日
EDIUNETを英語に対応させたのですが、その時にやったことをまとめておきます。
まずサンプルサイトをご覧ください。
JSONファイルとPHPで多言語対応する
http://ma-bank.com/media/json/
PHP+JSON: Script for several languages
http://ma-bank.com/media/json/?...
ソース
http://ma-bank.com/media/json/j...
JSON: 日本語ファイル
http://ma-bank.com/media/json/j...
JSON: 英語ファイル
http://ma-bank.com/media/json/e...
最初は、日本語ファイルも英語ファイルも以下のような感じでPHPで作成していました。
<?php
define(CODE_01, "現金");
define(CODE_02, "流動資産");
);
?>
ところが、途中で
「Javascriptでも言語ファイルを使い回ししたい」
と思った訳です。共通する言葉が結構あるから可能な限り二度手間は避けたいところですし。
試しに、単純なJSONファイルを読み込んで配列に格納した後、define()に落とし込んでみたところ、あっさり成功。ソースは以下のような感じです。
<?php
$file = file_get_contents('jp.json');
$prev = array("\r\n", "\n", "\r", "\t");
$file = str_replace($prev, "", $file);
foreach(json_decode($file) as $key=>$val) {
define($key, $val);
}
?>
JSONファイルを扱う上での注意点としては、データから不要物を除去することです。すわなわち「"\r\n", "\n", "\r", "\t"」が入るとエラーが出ます。(他にもありそうだけど、取り合えず)
もちろん改行とかタブなしでJSONファイルを記述することも可能ですが、長文になった際に可読性が落ちるので後から一気に変換することにしました。
後は、$_GETや$_POST、$_COOKIE、$_SESSIONなどを使って、file_get_contents()で読み込む言語ファイルを適宜切り替えるだけです。
次回は、本題の「JSON ファイルをPHPとJavaScriptで共有する」です。(おそらくアップできると思いますが…)