【问题标题】:Conflict with \r\n (new line) between getText and javascript与 getText 和 javascript 之间的 \r\n (新行)冲突
【发布时间】:2013-11-21 16:44:18
【问题描述】:

你能告诉我为什么这不起作用(什么都没有发生):

if (confirm("<?=_("Hello!\r\nContinue?")?>")) {
    alert("Welcome!");
}

当这工作正常时:

if (confirm("<?=_("Hello! Continue?")?>")) {
    alert("Welcome!");
}

还有这个:

if (confirm("Hello!\r\nContinue?")) {
    alert("Welcome!");
}

GetText 已在我的服务器上启用,以供参考。

谢谢大家!

【问题讨论】:

    标签: javascript php gettext confirm


    【解决方案1】:

    JavaScript 的字符串不允许使用纯换行符。
    工作示例:

    if (confirm("<?=_("Hello!\\r\\nContinue?")?>")) { // Line breaks escaped
      alert("Welcome!");
    }
    

    或者:

    if (confirm("<?=_('Hello!\r\nContinue?')?>")) { // No interpolation
      alert("Welcome!");
    }
    

    免责声明:如果您翻译的字符串包含换行符,它将不起作用。

    【讨论】:

      【解决方案2】:

      由于您试图将字符串逐字地回显到 javascript 中,因此请使用字符串文字:

      if (confirm("<?=_('Hello!\r\nContinue?')?>")) {
          alert("Welcome!");
      }
      

      注意 PHP 字符串周围的撇号。这将回显 '\r\n' AS '\r\n' 而不是 chr(13) chr(10)。

      我不完全确定这将如何在您的 GetText .PO 文件中工作,尽管关于索引原始“你好!\r\n继续?” - 我猜它会在那里以Hello!\r\nContinue? 的形式出现,这是一个可用于翻译的字符串,我不确定如果你有另一个 GetText 索引会发生什么:

      Hello!
      Continue?
      

      (在单词之间加上实际的 CRLF)

      基本上,我不确定 GetText 如何处理字符串,无论是否作为文字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2018-07-09
        • 1970-01-01
        • 2011-09-07
        • 2019-03-18
        相关资源
        最近更新 更多