2008年02月27日

CIとKohanaの比較

わたしがいろいろ検証しているわけではありません。
(スミマセン。)

下記の記事を紹介したかっただけです。CodeIgniter大好き、というのが見て取れます。結局この人の結論は、「両方使う」というものですが。

Notes on Choosing a PHP Framework: A Quick Comparison of CodeIgniter and Kohana

Cakeに関しては、同じようなこと(PHP5専用の“CakePHP”を作る別プロジェクトの立ち上がり)が起こりそうにないと思います。そういうことをするくらいなら、バグ対策Ticketを投げたほうが…。
posted by SDozono at 12:47| 東京 ☀| Comment(0) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

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 | このブログの読者になる | 更新情報をチェックする

2008年02月22日

第二回CakePHP勉強会

Webサイトの高速開発を実現する、PHPフレームワーク「CakePHP」の第二回勉強会が開催されました。

日時:2008年02月20日(水)20:30 - 22:15
会場:トライコーン株式会社

すでに多くの方がその様子をブログに書き込んでおられています。

リンク:
cakephp.jp "第二回CakePHP勉強会"

今回は、「実際に使ってみた」感想、ノウハウが中心の内容だったそうです。実際に日本の現場でも使われている様子が分かって興味深いと思います。

この次の段階としては、やはり、「こんなコンポーネントを作った、ヘルパーを作った」という、オープンソース型の貢献プレゼンなどでしょうか…。
posted by SDozono at 02:23| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2008年02月09日

CakeFest最終日

I'm in Los Angels to attend my sister's wedding...
というわけで、Jetlag でぼけっとしている間に日本ではCakePHP勉強会第二弾が計画され、早くも会場はCakePHPユーザで埋まってしまったようです。

yandodの日記
[CakePHP]第2回CakePHP勉強会の募集のその後
http://d.hatena.ne.jp/yandod/20080208/1202491733
「とにかく驚きました。朝10時ごろに募集が始まってから正午すぎには座席が埋まってしまうとは予想外です。」

Google Trendsなどを見ても、日本ではもうCakePHPブレーク!と言ってよいような状況ですよね。

今どきの技術者なら無視はできない!?存在になりました。

IDEA*IDEA
http://www.ideaxidea.com/archives/2008/02/1_1.html
「先日サイボウズ・ラボに遊びにいったときの話。いつものように赤松さんと一緒でした。そのときの会話。
僕「赤松さん、今日は何の作業をするんですか?」
赤「あ、今日ですか?CakePHPとjQueryを1日でマスターします。」
なんかガーンと来た。「1日で!」という発想が最近なかったなぁ、と。いや、あるんだけど、1日でやることに無意識にストッパーかけていたな、と。」

『Event Entry::第2回CakePHP勉強会』は2月20日開催!
全力で申し込んだ。

で、アメリカでは、CakeFestという、CakePHPユーザの集いみたいなものがフロリダで3日間開かれ、今日が最終日です。実は、まだ英語ではCakePHPのマニュアルらしいマニュアルは紙で出版されていないので、先にオフミーティング先行で話が進んでいますね。日本とは発展の仕方が異なるので興味深いと思います。

詳細は、今後、CakeFestのサイトから閲覧できるようになるらしいです。とりあえず、どんなスピーカがどんな話題で話したのか、スケジュールをざっと。訳は気分で訳してあります。

話し手の面々も、この2年間、CakePHPを引っ張ってきた人たちが含まれているので、良い集まりだったんじゃないかと思います。

個人的には、cakebaker.42dh.comのDaniel Hofstetterがこれでスイスから来たら完璧?だったのではないか、と思いますが、さすがに難しかったようですね。

----------------------------------------
http://cakefest.org/pages/schedule
スケジュール
2月6日水曜日
9-10
朝食
10-11
Gwooの基調講演
11:15-12:15
CakePHPのユニットテスト - 現実的なコードの書き方 by Tim Koschuetzki

12:15-1:15
昼食
1:15-2:30
データベースマイグレーションでクリーンな開発 by Joel Moss

2:45-4:00
実装するまで模造する:Consoleで開発をスピードアップ by Chris Hartjes

4:15-5:15
Fredistrano : Webアプリケーション開発ツール by Frederic Bollon

2月7日木曜日 : 2会場構成 (api, gui)
9-10
朝食
10-11
PhpNutの基調講演
11:15-12:15
api: RESTfulインターフェイス by Nate Abele

gui: CakePHP: 人間のためのWebアプリケーションインターフェイス by Ryan Peterson

12:15-1:15
昼食
1:15-2:30
api: Facebookアプリケーションを作ろう by Tom O'Reilly

gui: よくあるUIとカンフーのコンポーネントをCakePHPアプリケーションに by Marc Grabanski

2:45-4:00
api: TiramisuPHP by Antonio De Marco and Peter van Hee

gui: CakePHPとjQueryで世界制覇 by Felix Geisendorfer

4:15-5:15
api: FlexとCakePHPによるRIA開発 by Garrett Woodworth

gui: イントラネット開発者のための、一貫したテンプレートアプリの制作 by Yann Le Blevac

2月8日金曜日
9-10
朝食
10-11
Nateの基調講演

11:15-12:15
モデルのしつけ方(behave) by Mariano Iglesias

12:15-1:15
昼食
1:15-2:30
CakePHPでaddons.mozilla.org APIの作成 by Laura Thomson

2:45-4:00
CakeJam - 2年間で学んだCakePHPトリックいろいろ by Felix Geisendorfer

どんな内容だったのかは、http://cakefest.org/ で後日、確認してみたいと思います。

あと、関係ありませんが、こちらでGmailを使っていると、“海外にいる日本人向け”に最適化されているようで、表示される広告が新鮮です・・・
ラベル:cakephp cakefest
posted by SDozono at 09:06| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2008年02月03日

PHP/Erlang

PHP、Erlangと出会う。

PHP/Erlang 0.0.2
http://www.math-hat.com/~zukerman/projects/php-erlang/README

INTRODUCTION

PHP/Erlang aims to be a PHP extension with a simple set of functions
for turning a PHP thread into an Erlang C-node. With this extension,
you can shift backend tasks to Erlang, where they belong: caching,
chat, database proxying, everything.

posted by SDozono at 15:46| 東京 ☔| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする