BLOG

Blitz Gateスタッフブログ

BLOG

CakePHP3で同じ単語を異なる英語へ翻訳する方法

書いた人:

CakePHP3 , PHP , Web , 技術 , 開発言語  

blogimg_language

どうも、ゆんゆんです。

 

最近、恐ろしく寒くなってきましたね。
かくいう自分は風邪でダウンしてました。

 

さて、今回はCakePHP3で翻訳する際のお話です。

 

CakePHP3は翻訳機能が搭載されており、多言語化への導入を比較的楽に行えます。
例えば、「りんご」という単語を「Apple」、「複数の窓」を「Windows」と翻訳したい場合は下記のような感じになります。

 

[CakePHP3プロジェクトRoot]/src/Locale/en/default.po

# 翻訳ファイル内では「#」から始まる行はコメントになります。
msgid "りんご"
msgstr "Apple"

msgid "複数の窓"
msgstr "Windows"

 

置き換えの命令はControllerやTemplate、Elementなどで下記のように記載します。

 

<?php
echo '私の好きなものは'.__('りんご').'です';
// 私の好きなものはAppleです

echo '私の部屋には'.__('複数の窓').'があります';
// 私の部屋にはWindowsがあります

 

上記のように「msgid」に書いたキーワードを「msgstr」に書いた文字に置き換えてくれます。
(CakePHP3 – 翻訳の機能を利用する)

 

ただし、これには少し注意が必要です。

 

何故、注意が必要なのでしょうか?
それは、「時計」という単語が画面に2か所配置されていたとして、1つは「Clock」、もう1つは「Watch」と翻訳したい場合など、
同一画面で同一の単語を、それぞれ別の単語に翻訳する場合です。

 

まずは上記のように翻訳ファイルを作ってみましょう。

 

[CakePHP3プロジェクトRoot]/src/Locale/en/default.po

# 翻訳ファイル内では「#」から始まる行はコメントになります。
msgid "時計"
msgstr "Clock"

msgid "時計"
msgstr "Watch"

 

<?php
echo '私の部屋の壁には白い'.__('時計').'があります';

echo '私の'.__('時計').'では、現在12時30分です';

 

さて、このPHPを実行した場合、何が表示されるでしょうか?
実はこのような感じになります。

 

<?php
echo '私の部屋の壁には白い'.__('時計').'があります';
// 私の部屋の壁には白いWatchがあります

echo '私の'.__('時計').'では、現在12時30分です';
// 私のWatchでは、現在12時30分です

 

そう、この翻訳ファイルは同一単語があった場合、一番最後の翻訳を適用するんです。

 

これは困りましたね
日本語では両方とも「時計」ですが、英語では壁掛け時計を「Clock」、腕時計を「Watch」と明確に使い分けています。

 

これに対応させるのが「ドメイン翻訳機能」です。
(CakePHP3 – 翻訳の機能を利用する)

 

これは翻訳ファイルを指定して翻訳する機能で、下記のように使用することが出来ます。

 

[CakePHP3プロジェクトRoot]/src/Locale/en/default.po

# 翻訳ファイル内では「#」から始まる行はコメントになります。
msgid "時計"
msgstr "Clock"

 

[CakePHP3プロジェクトRoot]/src/Locale/en/hon_yaku_2.po

# 翻訳ファイル内では「#」から始まる行はコメントになります。
msgid "時計"
msgstr "Watch"

 

<?php
echo '私の部屋の壁には白い'.__('時計').'があります';
// 私の部屋の壁には白いClockがあります

echo '私の'.__d('hon_yaku_2', '時計').'では、現在12時30分です';
// 私のWatchでは、現在12時30分です

 

このように、ファイルを分割することで、翻訳前の単語が同じでも、別の単語への翻訳が可能です。
※「__d()」関数で指定したファイルが存在しない、対象の単語がファイルに無い場合、default.poの翻訳が適用されます

 

その他、文脈によって判断する「__x()」なども存在していますので、詳しくは下記の公式HPを見てください。
CakePHP3 – 国際化と地域化

 

いかがだったでしょうか?
翻訳はなかなか難しい問題がたくさんあると思いますが、上手に付き合えば様々なことに使用できると思います。
皆さんも、これを機に多言語化をしてみてはいかがでしょうか?

 

ではでは~♪♪

  • このエントリーをはてなブックマークに追加