5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CakePHP ローカライズ/翻訳

Posted at

参考サイト

上記に全て書いてあるが、自分用にメモ。

最初に

テキストを記述するときは必ずこう書いておく事。
これで、後からこう記述した所を自動抽出して翻訳ファイルを生成することが出来る。

<?php echo __('翻訳するテキスト'); ?>

工程

  1. コンソールでpotファイル生成
  2. Poeditでpot→poに変換、mo出力
  3. CakePHPで言語設定

コンソールでpotファイル生成

コンソール(コマンドプロンプト)でappディレクトリに移動。
以下のコマンドを実行。

C:\xampp568\htdocs\cakephp\app>cake i18n


Welcome to CakePHP v2.7.3 Console
---------------------------------------------------------------
App : app
Path: C:\xampp568\htdocs\cakephp\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]を選択。
抽出対象のディレクトリを指定。

Current paths: None
What is the path you would like to extract?
[Q]uit [D]one
[C:\xampp568\htdocs\hondapdf\app\] >

その後はデフォルトのままでOK。

Current paths: C:\xampp568\htdocs\hondapdf\app\
What is the path you would like to extract?
[Q]uit [D]one
[D] >

Would you like to extract the messages from the CakePHP core? (y/n)
[n] >
What is the path you would like to output?
[Q]uit
[C:\xampp568\htdocs\hondapdf\app\Locale] >

Would you like to merge all domain and category strings into the default.pot file? (y/n)
[n] >


Extracting...
---------------------------------------------------------------
Paths:
   C:\xampp568\htdocs\hondapdf\app\
Output Directory: C:\xampp568\htdocs\hondapdf\app\Locale\
---------------------------------------------------------------

Done.

これでapp\Localeに幾つかのpotファイルが生成された。
自分で記述したテキストはdefault.potに抽出されているはず。

言語ごとに指定のフォルダに配置する必要があるので、
app\Locale\jpn\LC_MESSAGES を作成しpotを配置する。
※英語→日本語の翻訳をする場合
※実際にCakeが使うのはこの後生成するmoファイルなので、potはここに置いておく必要はないが同じ場所に置いておく。

Poeditでpot→poに変換、mo出力

Poeditを起動し、「ファイル」→「POTファイルを元に新しいカタログを作成します」で先程のpotを読み込み。
「カタログの設定」ダイアログの「複数形」を以下のようにしておく。
こうしないと後で「invalid nplurals value」エラーが出てしまう。

#変更前
nplurals=INTEGER; plural=EXPRESSION;
#変更後
nplurals=2; plural=(n > 1);

そのままPoedit上で翻訳する。
保存すると同じ場所にmoファイルが生成される。

CakePHPで言語設定

app\Locale\jpn\LC_MESSAGES\default.mo ができた。
ここに置いてあるだけでCakeはブラウザの言語設定から自動で言語を判断して表示してくれる。

任意で切り替える場合はControllerに以下を記述。

// 英語のまま
Configure::write( 'Config.language', 'eng');
// 日本語へ翻訳
Configure::write( 'Config.language', 'jpn');
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?