【问题标题】: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 如何处理字符串,无论是否作为文字。