kas*_*erd 3 javascript django gettext
我正在开发一个django应用程序,它需要支持多种语言.此应用程序涉及一些javascript代码.在这个javascript代码中,有一些需要翻译的多行字符串.
我们尝试过这种结构:
var $text = gettext('Lorem ipsum dolor sit amet, consectetur adipisicing ' +
'elit, sed do eiusmod tempor incididunt ut labore et ' +
'dolore magna aliqua. Ut enim ad minim veniam, quis ');
Run Code Online (Sandbox Code Playgroud)
这不起作用.makemessages停在第一个+标志处,因此在.po文件中显示为:
msgid "Lorem ipsum dolor sit amet, consectetur adipisicing "
Run Code Online (Sandbox Code Playgroud)
在网上进行一些搜索会导致样式指南,它会推荐我们已经用于多行字符串的格式.但是这种风格不受支持makemessages.
我尝试删除+行尾的字符.没有+字符,makemessages可以找到完整的字符串,但它不再适用于浏览器.
是否存在多行字符串的样式,它既受到makemessages所有主要浏览器的支持,也可以在所有主流浏览器中使用?
到目前为止,我发现makemessages实际上正在做的是用双引号字符串替换所有单引号字符串,并通过xgettext声明它是C代码来运行结果.
它不能自动工作的原因是makemessages不使用真正的JavaScript解析器.它进行了一个小的转换,并应用了一个C解析器.但是为了在javascript中连接字符串,你需要一个+字符,但是在C中你不能在要连接的字符串之间有任何标记.
我终于找到了一个解决方法,它有效:
var $text = gettext('Lorem ipsum dolor sit amet, consectetur adipisicing ' //\
+
'elit, sed do eiusmod tempor incididunt ut labore et ' //\
+
'dolore magna aliqua. Ut enim ad minim veniam, quis ');
Run Code Online (Sandbox Code Playgroud)
浏览器中的javascript解析器将//\看作注释,并+根据需要在每个字符串之间查找字符.当使用makemessages的\字符被解析为续行,都//\还有+以下行被认为是一个单一的评论.因此,解析器看到仅由注释分隔的字符串常量,并执行隐式字符串连接.
当我从一位开发人员那里看到这段代码时,我偶然发现了这种解决方法:
// IE8 only allows string, identifier and number keys between {}s
var parse_bool = {"null": null, "true": true, "false": false}
parse_bool[undefined] = null
parse_bool[null] = null // using null/true/false *this* way works
parse_bool[true] = true // _______
parse_bool[false] = false // ( WAT?! )
// ¯¯¯¯¯¯¯ o ^__^
var render_bool = {} // o (oo)\_______
render_bool[null] = '--' // (__)\ )\/\
render_bool[true] = gettext('yes') // ||----w |
render_bool[false] = gettext('no') // || ||
Run Code Online (Sandbox Code Playgroud)
什么makemessages时候处理这段javascript代码,它错过了yes字符串.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |