5

gettext 文字列を翻訳するために poedit を使用しています。翻訳に ID を使用しています。たとえば、次の ID です。

"msg_forgot_pw"

次のように翻訳されます。

「パスワードを忘れました」

文字列は echo で出力されるため、文字列は有効な HTML である必要があります。現在、私<br>は Poedit で翻訳内に新しい行を作成するために使用しています。\n翻訳で使用できること、および作成されたような翻訳機能を使用できることは既にわかっていますÁlvaro G. Vicario。ここでの唯一の問題は、\n入力を に置き換えないため、Pedit で手動で入力する必要があることです\n。それで、これらの翻訳文字列の出力に手動で入力せずに新しい行を作成する方法はあり<br>ます\nか?

4

2 に答える 2

4

PO カタログ形式自体は翻訳をワンライナーに制限しませんが、適切なマークアップを使用する必要があります。

#: example.php:2
msgid "__multi_line_example__"
msgstr ""
"One line\n"
"Two lines\n"
"Three lines\n"

残念ながら、人気のある Poedit プログラムでは簡単には実行できません。Enterキーを使用して実際に新しい行を入力することはできますが、それらは保存時に黙って破棄されます。Poeditでも新しい行を挿入できますが、エスケープ シーケンスを手動で入力する必要があります\n

Poedit の改行

(他のグラフィカルツールが何をするかについてはわかりません。)

文字列は echo で出力されるため、文字列は有効な HTML である必要があります。

私見ですが、翻訳者から HTML コードを受け入れるのはちょっと危険です。アプリをひどく壊すにはあまりにも多くの力を彼らに与えます。通常、プレーン テキストのみを受け入れ、HTML コンテキストに挿入するときに適切にエスケープする方が安全です。たとえば、次のようになります。

<p><?php echo htmlspecialchars(_('msg_forgot_pw')); ?></p>

これにより、HTML 以外のコンテキスト (プレーン テキストの電子メール メッセージなど) でも文字列を使用できるようになります。

私のアドバイスは次のとおりです。

  1. 翻訳可能な文字列にプレーン テキストが含まれている
  2. <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ではありません」です。それを受け入れるか、別のツールを見つける必要があります。

于 2014-02-11T10:10:12.300 に答える