Zend_Translateで多言語対応

多言語対応のちょっとしたサービス?を作っているのですが練習がてら奥さんのサイト(フレームワークは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’);

うまく実装できれば以下のようになります。まずは通常。
capcha0

ブラウザで言語設定を 英語(en) に変更。
capcha1

リロードすると英語になります。(肝心なメニューが日本語なのがアレですが・・・)
capcha2

Zend_Translate を使えば容易に多言語化させる事ができます。Zend はもちろんCakePHP、Codeigniter でライブラリとして使えるのでWEBサービスを作る時は是非多言語対応で作ると良いと思います。日本語だけだと正直弱い。ガラパゴスっていわれる所以では・・・。
この辺の事を書くと長くなりそうなので今日はこの辺で(すでに長い!)


Comments

“Zend_Translateで多言語対応” への3件のフィードバック

  1. can you buy priligy Springer; 2017, pp 671 80

  2. can you get cheap cytotec pills metformin ibuprofeno capsulas de gel 600 para que sirve Smead became disillusioned with Ballmer s efforts to tap into search advertising, home entertainment and cloud services, while simultaneously sitting on billions in cash he believes should have been returned to shareholders in the form of higher dividends

  3. However, the mechanisms that underlie this correlation are not fully characterized cytotec without rx Have a conversation about the specific stressors in your life and how you can reduce their impact

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です