cake_1.2 pre-beta での多言語対応のメモ

| | コメント(0) | トラックバック(0)

メモ。
cake_1.2.0.5875-pre-beta で多言語対応が使いやすくなってる。


この辺に以前のバージョンの多言語対応の解説がある。(英語他)
http://omeck.net/2007/08/31/i18n-w-cakephp-12/
http://blog.csdn.net/wuliangxia/archive/2007/07/25/1707166.aspx

CakePHP の多言語サポートは2系統あって、
静的テキスト用 gettext とDB データ用の i18n がある。ぽい。


というわけで、i18n テーブルを使用するためのメモ。

  1. app/config/sql/i18n.sql を元に i18n テーブル作成 1.2.0.5875-pre-beta から i18n_content はなくなって、 i18n テーブルのみで完結するようになった
  2. 試しに news table でも作成、 field は id, title, comment, created bake コマンド等で model, controller, view を作っておく
  3. news に適当にデータ登録
        id, title, comment, created
        1, ニュース, ニュースですよ, 2007-11-22 ..
        1, ニュース2, ニュース2ですよ, 2007-11-22 ..
    
  4. i18n テーブルに他言語の対応テキストを登録
        id 	locale 	model 	foreign_key 	field 	content
        1 	en 	News 	1 	title 	it's news.
        2 	en 	News 	1 	comment 	yes, it's news.
    
  5. News Model に actsAs 追加
    class News extends AppModel {
    	var $name = 'News';
        var $actsAs = array('Translate' => array('title', 'comment'));
    }
    
  6. News Controller で言語の設定
    class NewsController extends AppController {
    
    

    var $name = 'News';
    var $helpers = array('Html', 'Form' );

    function beforeFilter() {
    $this->News->locale ='en';
    return true;
    }

    (略)
    }



この時、
・locale に 「en」を指定すれば、i18n テーブルで locale フィールドが「en」のやつを表示してくれる
・i18n テーブルに該当するテキストがない場合、表示されない。(そのレコードは無かったことにされる)→無かったらデフォルト言語を表示するとかしたい気もする
ソース読んでたら Model での locale は配列でも指定できるようにしようとしてるぽいし、優先順位決められるようにはその内なるかもしれない。
・locale に 「」(空文字)を指定すれば、翻訳は行われない。→ news テーブルに登録したものがそのまま表示される
・locale に 「en」を指定した状態で News を登録すれば i18n テーブルにも insert される

実際に使うには

このままだと翻訳テキストの登録が面倒だ。


そこで、以下のような感じに作れば、かなり便利になるんじゃないかなと思う。
実際には作ってない。

・サイトで使用する言語を配列で持っておく
・Model の afterSave 等で actsAs に Translate が指定されてたら自動的に i18n テーブルに上記言語のフィールドを作る
・i18n テーブルから言語別にCSV で出力
・CSV上で翻訳
・CSV インポート


あと問題なのは、gettext といかに共存させるか。
あっちは po ファイルなので、2フォーマットできてしまう。
全部 db で管理できるようにできればいいのにね。


明日は CakePHP 勉強会。あさっては Kanasan.JS
京都→大阪(勤務)→東京(CakePHP)→大阪(Kanasan.JS)
ってまるでアクティブな人みたい。週末引きこもり人間なのに。

楽しみだ。


トラックバック(0)

このブログ記事を参照しているブログ一覧: cake_1.2 pre-beta での多言語対応のメモ

このブログ記事に対するトラックバックURL: http://pm.11op.net/mt/mt-tb.cgi/97

コメントする

あわせて読みたい