多言語対応のちょっとしたサービス?を作っているのですが練習がてら奥さんのサイト(フレームワークはCodeIgniter使用)を一部多言語化してみました。ZendFramework の Zend_Translate クラスが色んなパターンでの多言語化アプローチがあるようなので使ってみました。
このアプローチというのは Zend_Translate のアダプタ の事なのですがこれがまた沢山ありまして、、以下一部抜粋。
- Array — 簡単ですが柔軟性に欠け、contollerに書いちゃうのでプログラマしか扱えない。
- Csv — シンプルなテキスト形式で高速ですがUnicode 文字で問題が発生するかもしれない。
- Gettext — linux における GNU の標準形式。
- Ini — シンプルなテキスト形式で高速。Csvと似てますね。
- Tmx — アプリケーション間での翻訳の業界標準。XML フォーマット。
などなどと全部で9種類アダプタ。もちろん自作アダプタクラスの組み込みもOK。今後はSQLにも対応するようです。何が良いのか正直分かりませんね。笑
何となくXML形式のフォーマットが良いのでしょうか。
で、今回は簡単なArrayアダプタで。。
1.Front controller
都度コントローラーでインクルードは面倒なので、フロントコントローラー(index.php) に以下の記述を追加する。ロードの直前で良いと思います。
—
// Zend framework へのインクルードパス設定
ini_set(‘include_path’, PATH_SEPARATOR . APPPATH . ‘libraries/’ );
// Zend_Translate コンポーネントの読み込み
require_once ‘Zend/Translate.php’;
—
2.Controller
コントローラー側の実装ですがこんな感じです。かなり省略しましたが動くと思います。ロケーションの設定が上手く行かない場合は、$translate->getLocale(); を使って手順を踏めばいけると思います。
—
// 翻訳ソースの作成
// アダプタarray
$ja = array(
‘title’ => ‘仕事|イラストレーション’,
‘contents’ => ‘仕事’,
);
$en = array(
‘title’ => ‘Works|Illustration’,
‘contents’ => ‘Works’,
);
//Zend_Translateオブジェクト生成(翻訳アダプタの生成)
$translate = new Zend_Translate(‘array’, $ja, ‘ja’);
$translate->addTranslation($en, ‘en’);
$translate->addTranslation($en, ‘en-us’);
$translate->addTranslation($en, ‘ko’);
// 翻訳された値の取得と表示
$translate->setLocale(“auto”);
—
3.View
最後は表示部。これは簡単。
—
echo $translate->_(‘title’);
echo $translate->_(‘contents’);
—
うまく実装できれば以下のようになります。まずは通常。
ブラウザで言語設定を 英語(en) に変更。
リロードすると英語になります。(肝心なメニューが日本語なのがアレですが・・・)
Zend_Translate を使えば容易に多言語化させる事ができます。Zend はもちろんCakePHP、Codeigniter でライブラリとして使えるのでWEBサービスを作る時は是非多言語対応で作ると良いと思います。日本語だけだと正直弱い。ガラパゴスっていわれる所以では・・・。
この辺の事を書くと長くなりそうなので今日はこの辺で(すでに長い!)
コメントを残す