ローカリゼーションを行うために PHP の gettext 関数を使用しています。私は Poedit を使用して実際の翻訳を行っています。その「ソースから更新」機能を使用すると、ヒアドキュメント構文内を除いて、翻訳する必要があるすべての文字列を簡単に抽出できます。
Poedit は xgettext プログラムを使用して、PHP ソース ファイルから .po ファイルを生成しています。そして、PHP コードが次のようになると、美しく機能します。
echo "<h1>". _("test") ."</h1>";
ただし、次のものは抽出されません (疑似 t オブジェクトを使用する必要があることに注意してください)。
echo <<<EOD
<h1>{$->_('test')}
EOD;
PHP コードでは、次の方法で問題を回避できます。
<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>
しかし、xgettext プログラムがヒアドキュメント ブロック内から文字列を抽出できることを本当に望んでいます。
その回避策は、PHP ドキュメントのコメントで提案されています。回避策は、PHP ソース ファイルを Python コードとして扱うように xgettext プログラムに指示することです。しかし、Poedit でこのアプローチを使用すると、xgettext パーサーから多くの構文エラーが発生します。
PHPヒアドキュメント構文から翻訳を抽出するためにxgettextを取得するための回避策を知っている人はいますか?
gettext プロジェクトのチケット システムで、多少関連するチケットが公開されています: http://savannah.gnu.org/bugs/?27740これは、ヒアドキュメント構文のサポートが改善される可能性があることを示しています。