2008年02月26日

CakePHP1.2の簡単国際化

CakePHP1.2のbakeで自動生成した画面は、画面に表示される文字列が__('文字列') で囲まれています。これは、簡単に多言語翻訳ができるように配慮されているからです。

ここを無理やり日本語に書き換えても日本語化はできますが、せっかくなので、最初から国際化をにらんで、poファイルを生成、編集して日本語化を進めてもよいのではないか、と思います。

CakePHP1.2はgettextを使用した翻訳と流れは同じです。
http://ja.wikipedia.org/wiki/Gettext

(1)アプリで使用する文字リソース(メッセージ類)は、__('')で囲む

 こうしておくと、自動的に翻訳ファイルを作ってくれるのでこのルールは守りましょう。ちなみに、中のメッセージは英語で作り続けるのがよいと思います。

 *追記* 値を代入するような場合には、
$message = __('Message test!', true);
echo __('testtest', true);
などとできます。 

(2)consoleから、翻訳リソースファイルを作成

consoleフォルダに降りて、
> cake i18n
を実行します。

Welcome to CakePHP v1.2.0.6311 beta Console
---------------------------------------------------------------
What is the full path you would like to extract?
Example: C:\Program Files\xampp\htdocs\cake12\myapp
[Q]uit
[Q] >

と表示されるので、自分のアプリケーションのパスを指定しましょう。

[Q] > C:\Program Files\xampp\htdocs\アプリフォルダ
What is the full path you would like to output?
Example: C:\Program Files\xampp\htdocs\アプリフォルダ\locale
[Q]uit
[C:\Program Files\xampp\htdocs\アプリフォルダ\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を選択すると、Cakeが自分でプロジェクトファイルを調べまわって、翻訳リスト一覧を作成します。localeフォルダの中にある、default.pot ファイルはテキストファイルなので、適当に中身を見てみましょう。文章で書くと面倒そうですが、案外、短い時間でできあがってしまいます。

(3)日本語リソースフォルダの作成

\locale\jpn\LC_MESSAGES というフォルダを作成し、(2)で生成されたファイルを、"default.po"という名前にしてコピーします。

(4)翻訳

Windows上であれば、poeditが良いのではないか、と思います。

Poedit is cross-platform gettext catalogs (.po files) editor.
http://www.poedit.net/

翻訳メモリもついた、かしこい?翻訳リソース専用エディタです。[カタログ]⇒[設定]から、この翻訳ファイルに関する情報を追加できますが、その際、[複数形:]というところを、
nplurals=1; plural=0;
としておきましょう。
あとは、リソースを適当に訳してみます。

(5)ブラウザで確認。

適当に訳したところで、poファイルを上書き保存します。できたところで、自分のCakePHPアプリケーションを動かしてみましょう。勝手に日本語化されています。これは、HTTP_ACCEPT_LANGUAGEの値を見て、自動で切り替えているからです。

じゃあ、この設定を自分で決めたい場合にはどうするか、というと、どこかの beforeFilter() などに、

Configure::write('Config.language',"en");

と書いておくと、強制的に言語を指定できます。

ちなみに、新しい文字列をページに追加した場合には、(2)をもう一度実行すると、最新のpotファイルが作られます。それから、poeditの[カタログ]⇒[POTファイルを元に更新します]を選択し、新しくできた“potファイル”を指定すると、新しく加わった文字列を自動的に、今あるpoファイルに取り込んでくれます。

※国際化文字列をDBに保存したい、という場合には、
pm11op のブログ
cake_1.2 pre-beta での多言語対応のメモ
とか、
GoogleGroup
i18n translation in db tables - how to do this like Symfony?
などが良いのではないか、と思います。

このあたり、1.2からは本格的な国際化アプリケーションが作りやすくなっていると思います。現状Akelosは、「まぁPHPだから配列ベースの翻訳ファイルでいいか」と妥協している(?)んですが、Cakeは、poファイルでの翻訳リソースになっているので、各種の外部ツールを使ったり、逆にPHP以外のプロジェクトからの言語データファイルの流用がしやすくなっているのではないでしょうか。
ラベル:i18n cakephp
posted by SDozono at 21:01| 東京 ☁| Comment(1) | TrackBack(6) | CakePHP Tips | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
Notice: Undefined offset: 0 in D:\public_html\info_base\cake\console\libs\tasks\
extract.php on line 129

Notice: Undefined offset: 0 in D:\public_html\info_base\cake\console\libs\tasks\
extract.php on line 131

こけた〜 orz
Posted by ラリアス at 2011年04月12日 12:53
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

[CakePHP]1.2系の多言語対応メモ(1)
Excerpt: CakePHPの1.2系から多言語機能が充実しています。 多言語対応の方法としては、翻訳テキストを使う方法(gettextを利用する場合と同等の方法)とDBを使う方法の2種類がありますが、今回の話は..
Weblog: Writing Some Code
Tracked: 2008-02-28 00:57

多言語対応!!
Excerpt: CakePHPについていろいろあさっていたら,translationという言葉が. 研究室で開発しているシステムが多言語対応する必要があるので過敏に反応. ...
Weblog: 平凡な日々のひとりごと
Tracked: 2008-09-08 23:50

CakePHPで国際化対応するときは検索エンジンのクローラに気を付ける
Excerpt: Cakeではgettextを利用して多言語化(国際化対応)が簡単にできる仕掛けが...
Weblog: blog.katsuma.tv
Tracked: 2008-12-18 01:40

CakePHP1.2を使った多言語サポート対応時の覚書き
Excerpt: CakePHP 1.2を使った国際化を実装する際に調べて役に立ったサイトを(主に自分のために)纏めておきます。 1)いつも、人知れずお世話になっているサイト「CakePHPのおいしい食べ方」にとても分..
Weblog: 無限なる開発ブログ
Tracked: 2011-01-03 14:59

CakePHP1.2を使った多言語サポート対応時の覚書き
Excerpt: CakePHP 1.2を使った国際化を実装する際に調べて役に立ったサイトを(主に自分のために)纏めておきます。 1)いつも、人知れずお世話になっているサイト「CakePHPのおいしい食べ方」にとても分..
Weblog: 無限なる開発ブログ
Tracked: 2011-03-05 10:32

CakePHP1.2を使った多言語サポート対応時の覚書き
Excerpt: CakePHP 1.2を使った国際化を実装する際に調べて役に立ったサイトを(主に自分のために)纏めておきます。 1)いつも、人知れずお世話になっているサイト「CakePHPのおいしい食べ方」にとても分..
Weblog: 無限なる開発ブログ
Tracked: 2011-03-08 12:41
手(パー)To make a comment: Please type your name and comment. at the validation field box, type 'cakephp'. And there two glay buttons. "Preview"/"Submit". Thank you!
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。