JSONファイルとPHPで多言語対応する

※以前別の場所で書いた文章を備忘的に書き記しておきます。

【投稿年月日】2010-03-04 【ジャンル】PHP/MySQL

 先日EDIUNETを英語に対応させたのですが、その時にやったことをまとめておきます。

 まずサンプルサイトをご覧ください。

JSONファイルとPHPで多言語対応する
ma-bank.com/media/json/
PHP+JSON: Script for several languages
ma-bank.com/media/json/?lang=en

ソース
ma-bank.com/media/json/json_source.php

JSON: 日本語ファイル
ma-bank.com/media/json/jp.json
JSON: 英語ファイル
ma-bank.com/media/json/en.json
 
 最初は、日本語ファイルも英語ファイルも以下のような感じで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で共有する」です。(おそらくアップできると思いますが…)

EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript