CakePHPで国際化の方法を試してみました
- カテゴリ :
- バックエンド(プログラミング)
- タグ :
- Tech
- PHP
- 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を使った方法も試してみたいと思います。