django-admin.py makemessages 在包含真正长字符串的情况下因错误“警告:未终止字符串”而死亡:
string = "some text \
more text\
and even more"
这些字符串甚至不需要翻译 - 例如sql查询字符串。 当我连接字符串时,问题就消失了,但结果看起来很难看,加入它们需要时间......
有没有人有这样的问题?你找到了解决问题的方法吗?
我有以下版本的工具:
xgettext-0.17,gettext-0.17,django-1.0.2,python-2.6.2
此问题上有ticket,但它已关闭,可能是因为错误仅出现在某些组件版本的组合中。
编辑:找到问题的根源 - xgettext将警告消息输出到sterr,django将它们视为致命错误并退出。
xgettext调用的返回状态为0 - “成功”。我想django应该认为它是成功而不是因为警告而退出。
有趣的是,如果需要翻译,xgettext仍然会提取反斜杠包装的字符串,但会在stderr(“unterminated string”)和.po文件中提供警告(“国际化的消息不应包含`\ r'转义序列“)
xgettext调用如下:
xgettext -d django -L Python --keyword=gettext_noop \
--keyword=gettext_lazy --keyword=ngettext_lazy:1,2 \
--keyword=ugettext_noop --keyword=ugettext_lazy \
--keyword=ungettext_lazy:1,2
--from-code UTF-8 -o - source_file.py
从django / core / management / commands / makemessages.py
调用答案 0 :(得分:2)
我可以想到两种可能性:在行尾的反斜杠之后你可能会有一个额外的空间;或者你可能以某种方式在你的源代码中以错误的行结尾字符结束(例如,当你的Python期望Unix风格时,Windows风格,从而禁用反斜杠)。
无论哪种方式,我都会利用C风格的自动字符串连接:
>>> string = ("some text "
... "more text "
... "and even more")
>>> string
'some text more text and even more'
或者,如果您不介意最后的换行符,请使用多行字符串:
>>> string = """some text
... more text
... and even more"""
IMO这些看起来更好,并且在重构时不那么脆弱。
这有帮助吗?