i18nしてますか? (symfonyその0)
どうも、鹿島和郎(かしまかずお)です。世間ではそろそろシルバーウィークだというのに、わたしはいまだに夏休みすら消化できていません……。みなさまはいかがお過ごしでしょうか。
さて、ここしばらく「Programming Scala読書会」あらため「Scala勉強会 in 渋谷」の話題が続きましたが、久しぶりにi18n関係の話を書こうと思います。実は、今回のネタは結構前にある程度書きためてあったものの、公開するタイミングを逃していたものです。プログラム関係は油断するとネタがすぐ古くなってしまいますので、またi18nに戻ることにしました。
■日本発のWebサービスでハリウッドを目指す
今回はsymfonyでのi18nを説明します。詳細は割愛しますが、symfonyはPHPでのWebアプリケーションフレームワークで、ほかのPHPのフレームワークに比べると比較的大規模なサイトでの実績が豊富にあるようです。
PHPでのi18nを扱った以前のコラム(その1、その2)では
- gettextを使用して
- 日本語から英語に翻訳
しました。
実はsymfonyでもgettextを使用できるのですが(※)、symfonyのチュートリアルだとXLIFFを使った例を推奨してるように読めますので、今回のコラムではXLIFFを使用します。
また、symfonyの場合、例えばdoctrine:generate-moduleを使って生成されるテンプレートはデフォルトでは英語のテキストが使われていますので、必然的に英語から日本語への翻訳となります。
なお、symfony + gettextに関しては、以下のページが参考になるかもしれません。
※というか、gettextが使えると知ったのはつい最近です。
■環境について
対象バージョンはsymfony 1.4.xとします。symfony 1.4系はPHP 5.2.4以降が必要なので、一部の環境(例えばCentOS 5.x)ではPHPのバージョンアップが必要かもしれません。
自前のサーバやVPSの場合は、これを機にPHPのバージョンアップをしてはどうでしょうか。レンタルサーバの場合は……乗り換えも選択肢ですね。
おすすめVPS・レンタルサーバはこちら! とかいってアフィリエイトリンクを貼ってやろうかとも思ったんですが、面倒なのでやめておきます。
わたしが契約しているのは、以下のものです。いずれもPHP 5.2以降が使えます。
- さくらのVPS(試用中)
- ServersMan VPS(試用中)
- KnownHost VPS(割高感が出てきたので解約予定)
- ARP Networks
- DreamHost(レンタルサーバ)
○UNIX系
CentOSの場合は"Remi"でググればバージョンアップ方法がすぐ分かるかと思いますし、Ubuntu 10.xは5.x.xなので問題ないはずです。そのほかのディストリビューションやFreeBSD、Solarisなどを使っている人の場合、初心者の方は少ないと思いますので説明は割愛します。
○WindowsならXAMPPが簡単
Windowsの人は、VMwareなどを使用し、その上にLinuxを入れるのもよいですが、勉強用であればXAMPP(Webシステムに必要なパッケージをまとめたもの)を入れるのが便利だと思います。XAMPP 1.7.3だとPHP 5.3.1が入ります。
ダウンロードはこのへんからどうぞ。
■基礎知識
○まずはチュートリアル
symfonyの素晴らしい点の1つにドキュメントの充実度が挙げられます。APIドキュメントだけではなく、チュートリアル類が非常に充実しているのは特筆に値すると思います。
symfonyでi18nをやる場合には、チュートリアルのi18nの回ははずせません。
Day 19: Internationalization and Localization (日本語)
まずはこちらを一読されることをお勧めします。
○カルチャー(Culture)
.NETでのi18nではCultureInfoというクラスを触ったりするのですが、symfonyでのi18nでもCultureという用語を使います。Culture≒ロケールと思ってもらえば問題ありません。
ロケールに関しては以前のコラムで少し書きましたので、そちらをご参照ください。
■作業の概要
ようやく本題に入りたいと思います。が、i18n対応に必要な作業の詳細説明に入る前に、まずは概要についてご説明します。
最初に行う設定
- 設定ファイルの変更
- URLにカルチャーを含める設定
- ソースコードの修正
- 言語切り替えメニューの追加
日々行う作業
- ソースコード中のテキストを__()でくくる
- テキストの抽出
- テキストの翻訳
最初にやらなければいけない作業は、PHP + gettextより多いのですが、日々行う作業は、symfonyの方が楽だと思います。
■終わりに
ちょっと短いですが、今回は「その0」ということで、この辺で終わりたいと思います。次回から(多分)2回にわたり、具体的に説明していこうと思います。