如何翻译Django模型中的多行字符串



我使用ugettext_lazy作为_,在模型文件中,我的字符串是这样表示的:

s=_("第一行"第二行"thirdline")

但在运行makemessages后,我发现在.po文件中只有"第一行"被标记为要翻译,其余的都不存在。我不想避免使用多语言,那么有什么方法可以使翻译工作与此相关吗?

UPD:

应该补充我的问题:我需要我的多行字符串由django的makemessages 继续

到目前为止,我能想到的最好的解决方案是

s=str(_("第一行")+str(_("secondline")+str(_("thirdline")

Edit:Goodguy提到makemessages不会进行Python解析,因此无法正确收集这些类型的"多行"字符串。

第一部分实际上是真的,我纠正了这一点(我的错误)-但是xgettext做了与Python相同的相邻字符串连接,如这里所述:

一些国际化工具——尤其是xgettext——已经对于隐式级联,是特殊情况

和此处:

还请注意,长字符串可以跨行拆分为多个相邻字符串标记。在执行自动字符串串联根据ISO C和ISO C++编写时间;xgettext还支持这种语法。

事实上,我和六位同事多年来一直在十几个项目中使用这种模式。

s = _("firstline" "secondline" "thirdline")

Pythonxgettext将自动连接仅由空格(空格、换行符等)分隔的文本字符串,因此这与完全等效

s = _("firstlinesecondlinethirdline")

如果你在你的po文件中只得到了这些字符串中的第一个,那么问题就出在其他地方了——要么你的代码片段不是你代码中的实际内容,要么你的po没有正确更新,或者其他什么。。。(xgettext版本可能已损坏?)。

注意:这个:

s = str(_("firstline")) +  
str(_("secondline") +  
str(_("thirdline"))

从译者的角度来看,这是一个更糟糕的解决方案(甚至可能使你的信息无法用某些语言翻译)。

我遇到了类似的问题,并使用标准的Python多行单字符串格式解决了这个问题。例如您的字符串:

s = _("firstline
secondline 
thirdline")

更新:实际问题是makemessages没有进行python(以及JS等)解析,因此它不会按预期连接多行字符串。下面的解决方案也不起作用(它看不到计算值)。

不幸的是,您必须找到另一种方式来格式化您的消息,最好是将其拆分为单行部分。

上一个答案:

ugettext_lazy只能接受一个参数,所以你希望你的翻译是什么样子就取决于你了

如果你对"firstline" "secondline" "thirdline"作为一句话导出进行翻译很满意,你可以这样做:

s = _(' '.join(["firstline", "secondline", "thirdline"]))

如果你想把它们作为一个单独的翻译句子,这样的东西也可能起作用:

s = ' '.join(_(line) for line in ["firstline", "secondline", "thirdline"])

或者只需在每行调用_并将它们连接到

最新更新