首页 > 解决方案 > 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 最后渲染模板

有什么建议么?谢谢

标签: pythonpython-3.xjinja2gettext

解决方案


没有自动的方法可以做到这一点,但您可以只使用旧.po文件。如果您的构建系统msgmerge用于更新.po文件,旧的翻译将被重用,但作为“模糊”条目。然后,您可以更新.po文件中的翻译。

您也可以手动完成。假设您的.pot文件是myproject.pot并且您希望将其合并到ru.po您执行的现有(旧)文件中:

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

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


推荐阅读