Poedit

多言語対応:英語と日本語を自動切り替え(後編)

Pocket

CakePHPにおいて多言語対応するにはメッセージカタログファイル(.mo)を作成する必要があります。ここでは、.poファイル、.moファイルを作成する手順を紹介します。

多言語対応サイトの作り方はこちら

.moファイルを作成する手順

  • コンソールからcakeコマンドでdefault.potファイルを作成
  • Poeditを使ってdefault.potを読み込む
  • 英語に対応する日本語を登録していく
  • Poeditで保存してdefault.poとdefault.moファイルを出力

ファイルの説明

.potファイル:cakeコマンドを実行する事でソース中の__()関数で書かれた翻訳元文字を抽出したテキストファイル。複数言語に翻訳する場合であっても一つだけ存在する。初回はこれを元に一つ一つ翻訳していく。

.poファイル:.potファイルに翻訳を追加登録したファイルで.potとは別に翻訳言語毎の場所に保存する。Poeditを使うと.moファイルと一緒に出力される。このファイルは一度翻訳されたサイトの翻訳情報を編集する時に使う。

.moファイル:これが実際にプログラムから読み込まれるバイナリファイル。.potや.poを使ってこれを作成する。

cakeコマンドでdefault.potファイルを作成

まず、コンソールでCakePHPのプロジェクトルートに移動して、appフォルダ内に入ります。そこでcakeコマンドを使う事で、app/Locale 以下にdefault.potファイルが作成されます。

$ cd {project root}/app
$ Console/cake i18n
Welcome to CakePHP v2.1.2 Console
-------------------------------------------------------
App : app
Path: /Users/euonymus/Sites/jiuzhai/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            <--------------------------------type E and Enter
What is the path you would like to extract?
[Q]uit [D]one
[/Users/euonymus/Sites/jiuzhai/app] > <-------type Enter

What is the path you would like to extract?
[Q]uit [D]one
[D] > <-------------------------------------------type Enter

What is the path you would like to output?
[Q]uit
[/Users/euonymus/Sites/jiuzhai/app/Locale] > <type Enter

Would you like to merge all domains strings into the default.pot file? (y/n)
[n] > <-------------------------------------------type Enter

Processing ..............

Error: default.pot already exists in this location. Overwrite? [Y]es, [N]o, [A]ll (y/n/a)
[y] > <-------------------------------------------type Enter

Error: cake.pot already exists in this location. Overwrite? [Y]es, [N]o, [A]ll (y/n/a)
[y] > <-------------------------------------------type Enter

Error: cake_dev.pot already exists in this location. Overwrite? [Y]es, [N]o, [A]ll (y/n/a)
[y] > <-------------------------------------------type Enter

[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 <--------------------------------------type Q and Enter

Poeditを使って.moを作成

.moファイルを作成するには翻訳ファイルエディタ(Poedit)を入手して下さい。Poeditで.potファイルを開くと左に英語が一覧されているので、右に対応する日本語を記述していく。あとは保存すれば自動的に.poと.moを出力してくれる。

app/Locale/cake_dev.pot
app/Locale/cake.pot
app/Locale/default.pot
app/Locale/jpn/LC_MESSAGES/default.po
app/Locale/jpn/LC_MESSAGES/default.mo

以上で多言語サイトが完成。

※翻訳ファイルはapp/tmp/cacheにキャッシュされる事があるので、うまくブラウザ表示が更新されない場合はcacheを削除してみよう。

サイト更新手順

一度翻訳すると.poファイルが作成される。サイトを更新したい場合は、cakeコマンドで新しい翻訳対象を抽出しつつ、既存の.poファイルを元に.moファイルを作成する。

新しい翻訳対象を抽出

まず、Viewに追加した__()関数の新しい文言を抽出する為にcakeコマンドを使って.potファイルを再出力する。古い.potファイルは上書きしてしまってかまわない。

Poeditで.moファイル作成

POTファイルから更新
POTファイルから更新

既存の.poファイルを読み込む。メニューの「カタログ」→「POTファイルから更新」を選択し、cakeコマンドで再出力したばかりのdefault.potから新しい翻訳対象を読み込む。後は翻訳して保存すれば、最新の.poと.moが出力される。

 

記事が役に立ったらぜひシェアをお願いします。

Pocket

One thought on “多言語対応:英語と日本語を自動切り替え(後編)”

Leave a Reply

Your email address will not be published. Required fields are marked *