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”。您将不得不忍受它或找到其他工具。