0

在包装非常长的字符串的情况下,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

有一个关于这个问题的,但它被关闭可能是因为错误只出现在某些组件版本的组合中。

编辑:找到问题的根源- xgettext 向 sterr 打印警告消息,django 将它们视为致命错误并退出。

xgettext 调用的返回状态为 0 - “成功”。我想 django 应该将其识别为成功,而不是因为警告而退出。

有趣的是,如果需要翻译,xgettext 仍然会提取反斜杠换行的字符串,但会在 stderr(“未终止的字符串”)和 .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 调用

4

1 回答 1

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 这些看起来好多了,重构时也不那么脆弱。

这有帮助吗?

于 2009-06-20T09:20:43.243 回答