
CakePHP3でComponentを使う方法+α

どうも、のえるです。
最近、恐ろしく寒くなってきましたね。
かくいう自分は風邪でダウンしてました。
さて、今回はCakePHP3で翻訳する際のお話です。
CakePHP3は翻訳機能が搭載されており、多言語化への導入を比較的楽に行えます。
例えば、「りんご」という単語を「Apple」、「複数の窓」を「Windows」と翻訳したい場合は下記のような感じになります。
目次
置き換えの命令はControllerやTemplate、Elementなどで下記のように記載します。
上記のように「msgid」に書いたキーワードを「msgstr」に書いた文字に置き換えてくれます。
(CakePHP3 – 翻訳の機能を利用する)
ただし、これには少し注意が必要です。
何故、注意が必要なのでしょうか?
それは、「時計」という単語が画面に2か所配置されていたとして、1つは「Clock」、もう1つは「Watch」と翻訳したい場合など、
同一画面で同一の単語を、それぞれ別の単語に翻訳する場合です。
まずは上記のように翻訳ファイルを作ってみましょう。
さて、このPHPを実行した場合、何が表示されるでしょうか?
実はこのような感じになります。
そう、この翻訳ファイルは同一単語があった場合、一番最後の翻訳を適用するんです。
これは困りましたね
日本語では両方とも「時計」ですが、英語では壁掛け時計を「Clock」、腕時計を「Watch」と明確に使い分けています。
これに対応させるのが「ドメイン翻訳機能」です。
(CakePHP3 – 翻訳の機能を利用する)
これは翻訳ファイルを指定して翻訳する機能で、下記のように使用することが出来ます。
このように、ファイルを分割することで、翻訳前の単語が同じでも、別の単語への翻訳が可能です。
※「__d()」関数で指定したファイルが存在しない、対象の単語がファイルに無い場合、default.poの翻訳が適用されます
その他、文脈によって判断する「__x()」なども存在していますので、詳しくは下記の公式HPを見てください。
CakePHP3 – 国際化と地域化
いかがだったでしょうか?
翻訳はなかなか難しい問題がたくさんあると思いますが、上手に付き合えば様々なことに使用できると思います。
皆さんも、これを機に多言語化をしてみてはいかがでしょうか?
ではでは~♪♪
POPULAR
のえる
Full-stack Developer
人気記事