与getText和javascript之间的\ r \ n(新行)冲突

时间:2013-11-21 16:44:19

标签: javascript php gettext confirm

你能告诉我为什么这不起作用(没有任何反应):

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

当这工作正常时:

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

这也是:

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

在我的服务器上启用了GetText,以获取信息。

谢谢你们!

2 个答案:

答案 0 :(得分:2)

JavaScript的字符串不允许简单的换行符 工作示例:

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

或者:

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

免责声明:如果您的翻译字符串包含换行符,则无效。

答案 1 :(得分:1)

由于您尝试将字符串字符串回显到javascript,请使用字符串文字:

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

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

我不完全确定这在GetText .PO文件中是如何工作的,但关于索引原始'Hello!\ r \ nContinue?' - 我猜它会在那里Hello!\r\nContinue?,一个可用于翻译的字符串,我不确定如果你有另一个GetText索引会发生什么:

Hello!
Continue?

(单词之间的实际CRLF)

基本上,我不确定GetText如何处理字符串,不管是文字还是文字。