Python3,Jinja2,预编译模板,本地化

问题描述

我有一些带有%s等占位符的旧项目.po / .mo文件,它用于转换python字符串 但是现在我在jinja2模板中有了这些字符串

问题是同时在.po文件%s中,而在模板{{some_var}}

例如,我有模板:

{% if some_var %}
Some text {{ some_var }}
{% else %}
Some another text {{ some_var1 }}
{% endif %}

我只想执行条件,过滤器等。 所以我想得到字符串

Some another text {{ some_var1 }}

Some text {{ some_var }}

接下来,我将获得占位符顺序并将其替换为%s,使用gettext并最终呈现模板

有什么建议吗?谢谢

解决方法

没有自动方法可以执行此操作,但是您只能使用旧的.po文件。如果您的构建系统使用msgmerge来更新.po文件,则旧的翻译将被重用,但将作为“模糊”条目。然后,您可以更新.po文件中的翻译。

您也可以手动执行此操作。假设您的.pot文件是myproject.pot,并且要将其合并到现有的(旧)文件ru.po中,则可以执行以下操作:

$ msgmerge --previous --verbose ru.po myproject.pot

如果您想知道为什么不能自动执行此操作:您想用%s之类的内容替换{{some_var}}。占位符为some_var的信息应该从哪里来?在旧文件中,您始终使用%s;在新文件中,占位符取决于上下文。