CakePHP3-多言語化

サイトを翻訳して表示させる方法の説明です。

CakePHPとPHPのバージョンは以下の通りです。

CakePHP 3.1.13
PHP 5.4.15

新しいバージョンもしくは古いバージョンだと、少し変わってくるかもしれません。

サイトを翻訳するのに必要な事は以下の通りです。

  • 翻訳したい文字列を__()で書く。
  • Poeditのインストール
  • POファイルの作成する

__()について

__()はCakePHPのグローバル関数で、引数に翻訳対象の文字列を入れて使用します。

<?= __(“こんにちわ!”); ?> というように書いて使用します。

「〇〇さん、こんにちわ!」という様な「〇〇」の部分が動的に変わる場合などは、__(“{0} さん、こんにちわ!”,[“いまよし”]) とすることで、対応できるようです。

ただ、公式で書かれている__(‘You have {unread} unread messages’, [‘unread’ => $number]);というのは、自分で試してみたのですが、ちゃんと動きませんでした。何か間違えていたのか、CakePHPかPHPのバージョンが古いのかもしれません。

参考にならないと思いますが、私の場合はstr_replace()で置換して対応しました。

<?php
$name = "いまよし";
echo str_replace("{name}",$name,__("{name}さん、こんにちわ!"));
// 結果:いまよしさん、こんにちわ!
?>

 

POファイルについて

先ほどの__()で書いた文字列に翻訳を適用するには、POファイルを作成する必要があります。

それにはまず、POTファイルというのを作成する必要があります。

CakePHPのI18Nシェルを利用すると簡単に作成できます。

I18N シェル – 3.x

POTファイルは特に設定を変えなければ、src\Locale\内に作成されます。

POファイルの作成

まずPoeditをインストールしましょう。

Poeditをインストールしたら、Poeditを起動して「翻訳プロジェクトを新規作成する」から先ほど作成したPOTファイルを開いてください。(開くと翻訳言語を選択するダイアログがでると思うので、翻訳したい言語を選んでください。)

後は翻訳欄の方に翻訳後に表示するテキストを入力するだけです。

POファイルの保存先は、src\Locale\言語コード(英語の場合は「en」)\と言うディレクトリを作成してその中にdefault.poと言う名前で保存すれば問題ないと思います。

同時に.moファイルが作成されると思いますが、このファイルは無くてもよさそうなので、削除しておきましょう。

ファイル→設定に「保存する際にMOファイルを自動コンパイル」という項目があるので、チェックを外しておけば.moファイルが作成されなくなるので、設定を変えておくと良いかもです。