[PHP] CakePHP 2.0 で国際化ファイル作成 [I18n]

今回は国際化を行うためのpoファイルを作成する。
使い方次第でメッセージ定義ファイルとしても利用できる。

条件は初回と同様。
・CakePHP 2.0.6 (webroot は http://localhost/cake2.0.6/)
・XAMPP 1.7.4 (Apache 2.2.17 + PHP 5.3.5 + MySQL 5.5.8)
・OS は Windows 7

I18nShell を利用してpotファイル(poファイルのテンプレート)を作成する。
ちなみに「I18n」は「Internationalization」の略(I+18文字+n)。

I18nShellを実行すると、実行中に指定した場所を解析して
__(), __n(), __d(), __c(), __dc(), __dn(), __dcn()
で使われている文章を msgid として集めてくれる。
なお、__d()などでドメインが指定されていればドメイン毎にファイルを出力され、ドメイン指定が無いものは default.pot に出力される。(defaultに全てのドメイン分をマージして出力させることも可能)

まずは potファイルを出力する場所を作る。
app/Locale/jpn/LC_MESSAGESへ出力することにしよう。

poファイルの設置場所 app/Locale/jpn/LC_MESSAGES

poファイルの設置場所を用意

CakeShell(Windowsの場合はcake.bat)でI18nShellを実行する。

コマンドプロンプトを開いて以下のように操作(※)する。
※ CakePHPを E:\dev-php\xampp\htdocs\cake2.0.6\ に設置している前提とする。

E:\>set path=%path%;E:\dev-php\xampp\php
#↑(phpへのpathが通っていない場合) 一時的にpathを追加してphp.exeが実行できるようにする

E:\>cd E:\dev-php\xampp\htdocs\cake2.0.6\app
#↑appフォルダへ移動する。(CakeShellの-appオプションを使う場合は移動不要)

E:\dev-php\xampp\htdocs\cake2.0.6\app>E:\dev-php\xampp\htdocs\cake2.0.6\app\Console\cake.bat i18n
#↑CakeShellでI18nShellを起動

Welcome to CakePHP v2.0.6 Console
—————————————————————
App : app
Path: E:\dev-php\xampp\htdocs\cake2.0.6\app\
—————————————————————
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
What is the path you would like to extract?
[Q]uit [D]one
[E:\dev-php\xampp\htdocs\cake2.0.6\app\] > E:\dev-php\xampp\htdocs\cake2.0.6\app\
#↑解析する場所を指定

What is the path you would like to extract?
[Q]uit [D]one
[D] > d

What is the path you would like to output?
[Q]uit
[E:\dev-php\xampp\htdocs\cake2.0.6\app\Locale] > E:\dev-php\xampp\htdocs\cake2.0.6\app\Locale\jpn\LC_MESSAGES\
#↑出力場所を指定

Would you like to merge all domains strings into the default.pot file? (y/n)
[n] > n
#↑常人なら’n'(マージしない)

Extracting…
—————————————————————
Paths:
E:\dev-php\xampp\htdocs\cake2.0.6\app\
Output Directory: E:\dev-php\xampp\htdocs\cake2.0.6\app\Locale\jpn\LC_MESSAGES\
—————————————————————
Processing E:\dev-php\xampp\htdocs\cake2.0.6\app\index.php…
~省略~
Processing E:\dev-php\xampp\htdocs\cake2.0.6\app\webroot\index.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

出力場所を確認するとファイルがpotファイルができている。
(Eclipseなどで確認している場合は表示をリフレッシュする必要ある。)

I18nShell実行後 potファイルが作成された

I18nShell実行後 potファイルが作成されたことを確認

拡張子を pot から po へ変更し、poeditなどで編集すれば完了だ。

拡張子 pot を po に変更

拡張子を pot から po に変更すると使えるようになる

因みにpoeditで保存した際に自動作成されるmoファイルが無くても、CakePHPの国際化処理はバリバリ動作するので、poeditが無くてもUTF-8対応のテキストエディタ(無料ならサクラエディタなど)があれば問題ない。

スポンサーリンク