まず、使用しているロケールとドメインをPHPに通知する必要があります。
putenv("LANG=da_DK");
setlocale('LC_ALL', "da_DK");
bindtextdomain("mycatalog", "./locale/");
textdomain("mycatalog");
この場合、デンマーク語の翻訳とmycatalog.mo(および.po)というファイルがあります。これらのファイルは(ルートから)次の場所に配置されます:locale / da_DK / LC_MESSAGES / mycatalog.mo / po
翻訳を表示するには、次のようにします。
echo _("Hello world"); // Which would become "Hej verden"
_(); gettext();のエイリアスです。 gettextsの賢い点は、翻訳がない場合、UIに「MSG_HELLO_WORLD」のような醜い言語コードがないことです。代わりに、より良い代替手段として、単純な英語のテキストを使用します。
messages.poファイルには、次のフォームにすべてのメッセージ(大文字と小文字が区別され、使用されているコンマ、ドット、コロンなど)が含まれている必要があります。
msgid "Hello world!"
msgstr "Hej verden!"
これを.poファイルに追加したら、このファイルをpoeditで開き、[保存]をクリックすると、.moファイルが生成されます。このファイルは、.poファイルと同じディレクトリにアップロードされます(通常、スクリプトルートの\ locale \ da_DK \ LC_MESSAGES \のようなもの)
動的/可変コンテンツを翻訳するには、次のように、特にsprintfを使用できます。
echo sprintf(_("My name is %s"), $name);
この場合、%sは.poファイルで発生します。翻訳された文字列(%sを含む)がある場合、sprintfは必ず%sを変数contentに置き換えます。変数も変換する必要がある場合は、次のように実行できます。
echo sprintf(_("The color of my house is %s"), _($color));
そうすれば、すべての色について全文を書く必要はありませんが、それでも色は翻訳されます。
サーバーで.moを初めて実行すると、キャッシュされることに注意してください。再起動せずにこのファイルをキャッシュから削除する方法はありません(Apacheなど自体で十分です)。つまり、最初に使用した後に.moに加えた変更は、有効になりません。これを回避するためのハックはたくさんありますが、正直なところ、それらはほとんどきれいではありません(.moをコピーし、その後ろにtime()を追加してから、インポートして再度キャッシュすることを含みます)。この最後の段落は、すべてを一度に翻訳するのではなく、まとめて翻訳する場合にのみ重要です。
ある時点で独自の翻訳ツールを作成したい場合、このツールはPHPを使用して.poを.moに変換するのに役立ちます:
http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/