编辑:Goodguy 提到makemessages
不会进行 Python 解析,因此无法正确收集那些“多行”字符串。
第一部分实际上是正确的,我对此进行了更正(我的错误)-但是 xgettext 与 Python 相同的相邻字符串连接,如此处所述:
一些国际化工具 - 特别是 xgettext - 已经针对隐式连接进行了特殊处理,
在这里:
另请注意,长字符串可以跨行拆分为多个相邻的字符串标记。根据 ISO C 和 ISO C++ 在编译时执行自动字符串连接;xgettext 也支持这种语法。
事实上,我和六名同事多年来一直在十几个项目中使用这种模式。
s = _("firstline" "secondline" "thirdline")
Python xgettext 将自动连接仅由空格(空格、换行符等)分隔的文字字符串,因此这与
s = _("firstlinesecondlinethirdline")
如果您只在 po 文件中获得这些字符串中的第一个,那么问题就出在其他地方 - 您的代码段不是您的代码中实际拥有的,或者您的 po 文件没有正确更新或其他任何东西......(可能是损坏的 xgettext 版本?)。
注意:这个:
s = str(_("firstline")) +
str(_("secondline") +
str(_("thirdline"))
从翻译者的角度来看,这是一个更糟糕的解决方案(甚至可能使您的信息无法翻译成某些语言)。