gpt4 book ai didi

PHP:如何在 Poedit 中使用换行符

转载 作者:可可西里 更新时间:2023-10-31 22:11:46 26 4
gpt4 key购买 nike

我正在使用 poedit 来翻译我的 gettext 字符串。我使用 ID 进行翻译,例如以下 ID:

"msg_forgot_pw"

would be translated to:

"I have forgot my password"

该字符串将用 echo 打印,因此该字符串应该是有效的 HTML。目前我正在使用 <br>在 Poedit 的翻译中换行。我们已经发现您可以使用 \n在翻译中,而不是使用类似 Álvaro G. Vicario 的翻译功能制成。这里唯一的问题是,您必须输入 \n在 Pedit 中手动输入,因为它不会替换输入 \n .那么有没有一种方法可以在不放置 <br> 的情况下在这些翻译字符串的输出中创建新行?或 \n手动进去?

最佳答案

PO 目录格式本身并不限制翻译为一行,但您需要使用适当的标记:

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

不幸的是,流行的 Poedit 程序并不容易:您可以使用 Enter 键键入实际的新行,但它们在保存时会被默默地丢弃!即使使用 Poedit,您也可以插入新行,但您需要输入 \n手动转义序列:

New lines in Poedit

(不知道其他图形工具的作用。)

The string will be printed with echo, so the string should be valid HTML.

恕我直言,接受来自翻译人员的 HTML 代码是有风险的。你给了他们太多的权力来严重破坏应用程序。在 HTML 上下文中注入(inject)时,只接受纯文本并正确转义通常更安全,例如:

<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”。您将不得不忍受这种情况或寻找其他工具。

关于PHP:如何在 Poedit 中使用换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com