“django-admin.py makemessages”或xgettext调用中的错误? - > “警告:未终止的字符串”

时间:2009-06-19 23:16:04

标签: python django internationalization xgettext

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

调用

1 个答案:

答案 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这些看起来更好,并且在重构时不那么脆弱。

这有帮助吗?