【问题标题】:Python3, Jinja2, pre-compiled template, localizationPython3、Jinja2、预编译模板、本地化
【发布时间】:2020-10-12 18:44:15
【问题描述】:

我有一些旧项目 .po/.mo 文件,其中包含 %s 之类的占位符,它用于翻译 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 最后渲染模板

有什么建议吗?谢谢

【问题讨论】:

    标签: python python-3.x jinja2 gettext


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多