gpt4 book ai didi

django - 在 jinja 模板中切换语言

转载 作者:行者123 更新时间:2023-12-02 01:50:48 26 4
gpt4 key购买 nike

我正在将多语言 Django 应用程序从 Django 模板引擎迁移到 Jinja2。在模板中,我当前使用 Django's language template tag 在每个对象的基础上切换事件语言即:

{% load i18n %}
<h1>{% trans 'Page title' %}</h1>
<ul>
{% for obj in object_list %}
{% language obj.language_code %}
<li><a href="{{ obj.get_absolute_url }}">{% trans 'view' %}: {{ obj.title }}</a>
{% endlanguage %}
{% endfor %}
</ul>

我们还使用i18n_patterns因此每个对象的 url 也是特定于语言的。

我不知道如何将其转换为 Jinja。我无法使用 Django 的 i18n 模板标签,也找不到 Jinja 的等效项。

我也在看Babel帮助从模板中提取消息。因此,与 Babel 以及 Django 一起使用的解决方案将是首选。

最佳答案

事实证明,通过编写自定义 jinja2 扩展来做到这一点相当简单(我基于 example in the jinja2 docs ):

from django.utils import translation
from jinja2.ext import Extension, nodes

class LanguageExtension(Extension):
tags = {'language'}

def parse(self, parser):
lineno = next(parser.stream).lineno
# Parse the language code argument
args = [parser.parse_expression()]
# Parse everything between the start and end tag:
body = parser.parse_statements(['name:endlanguage'], drop_needle=True)
# Call the _switch_language method with the given language code and body
return nodes.CallBlock(self.call_method('_switch_language', args), [], [], body).set_lineno(lineno)

def _switch_language(self, language_code, caller):
with translation.override(language_code):
# Temporarily override the active language and render the body
output = caller()
return output

# Add jinja2's i18n extension
env.add_extension('jinja2.ext.i18n')
# Install Django's translation module as the gettext provider
env.install_gettext_translations(translation, newstyle=True)
# Add the language extension to the jinja2 environment
environment.add_extension(LanguageExtension)

使用此扩展后,切换事件翻译语言与在 Django 中执行此操作非常相似:

{% language 'en' %}{{ _('Hello World'){% endlanguage %}

唯一需要注意的是,当使用 Django 作为 gettext 提供程序并使用 Babel 作为消息提取器时,重要的是告诉 Babel 在运行 init/update/compile_catalog 时将消息域设置为 django .

关于django - 在 jinja 模板中切换语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44882075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com