cake_1.2 pre-beta での多言語対応のメモ
メモ。
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 テーブルを使用するためのメモ。
- app/config/sql/i18n.sql を元に i18n テーブル作成 1.2.0.5875-pre-beta から i18n_content はなくなって、 i18n テーブルのみで完結するようになった
- 試しに news table でも作成、 field は id, title, comment, created bake コマンド等で model, controller, view を作っておく
- news に適当にデータ登録
id, title, comment, created 1, ニュース, ニュースですよ, 2007-11-22 .. 1, ニュース2, ニュース2ですよ, 2007-11-22 .. - 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. - News Model に actsAs 追加
class News extends AppModel { var $name = 'News'; var $actsAs = array('Translate' => array('title', 'comment')); } - 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
コメントする