PO カタログ形式自体は翻訳をワンライナーに制限しませんが、適切なマークアップを使用する必要があります。
#: example.php:2
msgid "__multi_line_example__"
msgstr ""
"One line\n"
"Two lines\n"
"Three lines\n"
残念ながら、人気のある Poedit プログラムでは簡単には実行できません。Enterキーを使用して実際に新しい行を入力することはできますが、それらは保存時に黙って破棄されます。Poeditでも新しい行を挿入できますが、エスケープ シーケンスを手動で入力する必要があります\n
。
(他のグラフィカルツールが何をするかについてはわかりません。)
文字列は echo で出力されるため、文字列は有効な HTML である必要があります。
私見ですが、翻訳者から HTML コードを受け入れるのはちょっと危険です。アプリをひどく壊すにはあまりにも多くの力を彼らに与えます。通常、プレーン テキストのみを受け入れ、HTML コンテキストに挿入するときに適切にエスケープする方が安全です。たとえば、次のようになります。
<p><?php echo htmlspecialchars(_('msg_forgot_pw')); ?></p>
これにより、HTML 以外のコンテキスト (プレーン テキストの電子メール メッセージなど) でも文字列を使用できるようになります。
私のアドバイスは次のとおりです。
- 翻訳可能な文字列にプレーン テキストが含まれている
<br>
印刷時に自分でタグを追加します
<p><?php echo nl2br(htmlspecialchars(_('msg_forgot_pw'))); ?></p>
これはかなり長いので、ラッパーを書くことをお勧めします:
/**
* Fetches translation as HTML (block with line feeds)
*
* @param string $msg_id Message ID
* @return string HTML
*/
function p($msg_id){
return nl2br(htmlspecialchars(_($msg_id), ENT_COMPAT | ENT_HTML401, 'UTF-8'), false);
}
/**
* Fetches translation as HTML (single line)
*
* @param string $msg_id Message ID
* @return string HTML
*/
function l($msg_id){
return htmlspecialchars(_($msg_id), ENT_COMPAT | ENT_HTML401, 'UTF-8');
}
編集:更新された質問に対する答えは「いいえ、Poeditではありません」です。それを受け入れるか、別のツールを見つける必要があります。