簡體   English   中英

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

[英]PHP: How can you use line breaks in Poedit

我正在使用poedit來翻譯我的gettext字符串。 我使用ID進行翻譯,例如以下ID:

“msg_forgot_pw”

將被翻譯為:

“我忘記了密碼”

該字符串將使用echo打印,因此該字符串應該是有效的HTML。 目前我正在使用<br>在Poedit的翻譯中創建新行。 我們已經發現你可以在翻譯中使用\\n而不是像Álvaro G. Vicario那樣使用翻譯功能。 這里唯一的問題是,您必須在Pedit中手動輸入\\n ,因為它不會將輸入替換為\\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轉義序列:

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”。 你必須忍受這個或找到另一個工具。

可能的方法是使用“普通”換行符\\n\\r\\r\\n (取決於你的平台)並用PHP替換它們的<br />標簽 - 已經有一個PHP函數:nl2br。 我不知道您的代碼設計,但通常您可以在翻譯密鑰的方法中執行此操作:

function translate($key){
   // do something to get the translation from the file and store it in some variable ($translation in this case)
    return nl2br($translation)
}

並通過以下方式調用:

echo translation("msg_forgot_pw");

您的翻譯文件必須如下所示:

array(
    // you can use a \n, \r, \r\n tag
    "msg_forgot_pw" => "I have forgot \nmy password",
     // or you can simply add a linebreak
    "msg_forgot_pw2" => "I have forgot 
my password",

    // ... more entries
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM