CakePHPで国際化の方法を試してみました
cakePHPでは、翻訳ファイルを使う方法と、データベースを使う方法の2種類が用意されているようです。
今回は、翻訳ファイルを使う方法を試してみたいと思います。
尚、使用したcakeのバージョンは「1.2.0.6311-beta」です。

----------------------------------------------
以下、長々と書いていますが、[CakePHP のおいしい食べ方: CakePHP1.2の簡単国際化]の方法でほぼ、そのまま動きました。
違いは、cake_1.2.0.6311-beta でmoファイルの読み込みが不具合ある部分を変更しているくらいです。
----------------------------------------------
まずは、翻訳対象にするテキストをテンプレート内で、以下のように「__(アンダースコア*2)関数」を使用して記述します。
(※basics.phpに関数定義されています。)
そして、cakeのコンソールを使って翻訳ファイルを作成します。
これで、
次に、日本語用のディレクトリ 「/jpn/LC_MESSAGES」 を作成します。
後は、default.poを翻訳ファイル編集ソフトのPoeditで簡単に編集することができます。

Poeditで編集して保存した際に default.mo ファイルができるのですが、
「rev6311」のcakeでは正常にmoファイルを使えません。
最新のrevisionでは修正されているようですのでそちらを使うことにします。
※変更点
Changes in branches/1.2.x.x/cake/libs/i18n.php [6296:6622]
これで、moファイルを読み込んで使用できます。
なお、default.moファイルを作らなければ、default.poファイルを使用するように
なっていますので、default.moを作らない方法でもいいかもしれませんね。
今後の作業でテキストの追加等を行った場合は、
「cake i18n」 コマンドでまた、default.pot を作成し、
Poeditで「カタログ」→「POTファイルを元に更新します」→default.potを指定すると、変更点がマージされます。

と、CakePHPでは、こんなに簡単に国際化ができました!!
次は、DBを使った方法も試してみたいと思います。
今回は、翻訳ファイルを使う方法を試してみたいと思います。
尚、使用したcakeのバージョンは「1.2.0.6311-beta」です。
----------------------------------------------
以下、長々と書いていますが、[CakePHP のおいしい食べ方: CakePHP1.2の簡単国際化]の方法でほぼ、そのまま動きました。
違いは、cake_1.2.0.6311-beta でmoファイルの読み込みが不具合ある部分を変更しているくらいです。
----------------------------------------------
まずは、翻訳対象にするテキストをテンプレート内で、以下のように「__(アンダースコア*2)関数」を使用して記述します。
__('Hello World');
(※basics.phpに関数定義されています。)
そして、cakeのコンソールを使って翻訳ファイルを作成します。
- $
/path/to/myproject/cake/console/cake i18n - Hello
yoshiki, - Welcome
to CakePHP v1.2.0.6311 beta Console - ---------------------------------------------------------------
- What
is the full path you would like to extract? - Example:
/data/myapp - [Q]uit
- [Q]
> /path/to/myproject/app #対象ディレクトをフルパスで指定 - What
is the full path you would like to output? - Example:
/path/to/myproject/app/locale - [Q]uit
- [/path/to/myproject/app/locale]
> ## デフォルトのままlocaleを使用 - I18n
Shell - ---------------------------------------------------------------
- [E]xtract
POT file from sources - [I]nitialize
i18n database table - [H]elp
- [Q]uit
- What
would you like to do? (E/I/H/Q) - >
E ##Eを選択 - Extracting...
- ---------------------------------------------------------------
- Path:
/path/to/myproject/app - Output
Directory: /path/to/myproject/app/locale/ - ---------------------------------------------------------------
- Would
you like to merge all translations into one file? (y/n) - [y]
> ## yes - What
should we name this file? - [default]
> ## defaultを使用 - Processing
/path/to/myproject/app/index.php... - Processing
/path/to/myproject/app/config/acl.ini.php... - Processing
/path/to/myproject/app/config/bootstrap.php... - Processing
/path/to/myproject/app/config/core.php... - Processing
/path/to/myproject/app/config/inflections.php... - Processing
/path/to/myproject/app/config/routes.php... - Processing
/path/to/myproject/app/config/sql/db_acl.php... - Processing
/path/to/myproject/app/config/sql/i18n.php... - Processing
/path/to/myproject/app/config/sql/sessions.php... - Processing
/path/to/myproject/app/views/layouts/default.ctp... - Processing
/path/to/myproject/app/views/layouts/flash.ctp... - Processing
/path/to/myproject/app/views/pages/home.ctp... - Processing
/path/to/myproject/app/webroot/css.php... - Processing
/path/to/myproject/app/webroot/index.php... - Processing
/path/to/myproject/app/webroot/test.php... - Processing
/path/to/myproject/app/webroot/js/vendors.php... - Done.
- ---------------------------------------------------------------
- I18n
Shell - ---------------------------------------------------------------
- [E]xtract
POT file from sources - [I]nitialize
i18n database table - [H]elp
- [Q]uit
- What
would you like to do? (E/I/H/Q) - >
Q ## 終了
これで、
- /path/to/myproject/app/locale/default.pot
次に、日本語用のディレクトリ 「/jpn/LC_MESSAGES」 を作成します。
- $
mkdir -p /path/to/myproject/app/locale/jpn/LC_MESSAGES
- $
cp /path/to/myproject/app/locale/default.pot /path/to/myproject/app/locale/jpn/LC_MESSAGES/default.po
後は、default.poを翻訳ファイル編集ソフトのPoeditで簡単に編集することができます。
Poeditで編集して保存した際に default.mo ファイルができるのですが、
「rev6311」のcakeでは正常にmoファイルを使えません。
最新のrevisionでは修正されているようですのでそちらを使うことにします。
※変更点
Changes in branches/1.2.x.x/cake/libs/i18n.php [6296:6622]
これで、moファイルを読み込んで使用できます。
なお、default.moファイルを作らなければ、default.poファイルを使用するように
なっていますので、default.moを作らない方法でもいいかもしれませんね。
今後の作業でテキストの追加等を行った場合は、
「cake i18n」 コマンドでまた、default.pot を作成し、
Poeditで「カタログ」→「POTファイルを元に更新します」→default.potを指定すると、変更点がマージされます。
と、CakePHPでは、こんなに簡単に国際化ができました!!
次は、DBを使った方法も試してみたいと思います。
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



最近のコメント