Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django i18n用html翻译文本_Django_Django Templates - Fatal编程技术网

Django i18n用html翻译文本

Django i18n用html翻译文本,django,django-templates,Django,Django Templates,如何处理翻译中的HTML?我想翻译带有HTML的句子。例如,这样的字符串([login]是一个链接): 我不想因为翻译html交织在一起的文本而打扰我的翻译人员。另一方面,我不想费心在视图中创建所有链接,如中建议的那样。因此,理想情况下,我希望一个纯模板的解决方案能够灵活地制作HTML,同时允许翻译人员只处理文本字符串 例如,此伪代码实现以下要求: {% render as login_html %} <a href="{{ url 'login' }}?next={{ reque

如何处理翻译中的HTML?我想翻译带有HTML的句子。例如,这样的字符串(
[login]
是一个链接):

我不想因为翻译html交织在一起的文本而打扰我的翻译人员。另一方面,我不想费心在视图中创建所有链接,如中建议的那样。因此,理想情况下,我希望一个纯模板的解决方案能够灵活地制作HTML,同时允许翻译人员只处理文本字符串

例如,此伪代码实现以下要求:

{% render as login_html %}
    <a href="{{ url 'login' }}?next={{ request.path|urlencode }}">
        {% trans "Login" %}
    </a>
{% endrender %}

{% blocktrans with login=login_html %}
    Please {{ login }} to view your profile.
{% endblocktrans %}
{%render as login\u html%}
{%endrender%}
{%blocktrans with login=login\u html%}
请{{login}查看您的个人资料。
{%endblocktrans%}

首先,登录HTML被呈现并存储为
login\uURL
。然后在我的blocktrans中,我可以简单地使用
{{login}}
给出呈现的登录HTML。这个问题有没有(类似的)解决方案,或者它需要自定义模板标记吗?

我创建了一个通用的
呈现
标记来实现这一点:

from classytags.arguments import Argument, Flag
from classytags.core import Options
from classytags.helpers import AsTag
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


class Render(AsTag):
    """
    Renders the block contents to be used elsewhere in the template.

    Example usage:

        {% render as login_url %}
            <a href="{% url 'login' %}">{% trans "Login" %}</a>
        {% endrender %}

        {% blocktrans %}
            Please {{ login_url }} for more information.
        {% endblocktrans %}

    It will automatically strip leading and trailing whitespace, use `nowrap`
    to disable this behaviour:

        {% render nostrip as varname %} . . . {% endrender %}
    """
    options = Options(
        Flag('strip', default=True, false_values=['nostrip']),
        'as',
        Argument('varname', resolve=False, required=True),
        blocks=[('endrender', 'nodelist')],
    )

    def get_value(self, context, nodelist, strip, **kwargs):
        value = nodelist.render(context)
        if strip:
            value = value.strip()
        return mark_safe(value)
register.tag(Render)

你的解决方案翻译了两次,为什么<代码>{{login}是一个变量,不会被翻译(再次)。除非模板i18n不是这样工作的。是的,这就是我首先要问的原因。
from classytags.arguments import Argument, Flag
from classytags.core import Options
from classytags.helpers import AsTag
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


class Render(AsTag):
    """
    Renders the block contents to be used elsewhere in the template.

    Example usage:

        {% render as login_url %}
            <a href="{% url 'login' %}">{% trans "Login" %}</a>
        {% endrender %}

        {% blocktrans %}
            Please {{ login_url }} for more information.
        {% endblocktrans %}

    It will automatically strip leading and trailing whitespace, use `nowrap`
    to disable this behaviour:

        {% render nostrip as varname %} . . . {% endrender %}
    """
    options = Options(
        Flag('strip', default=True, false_values=['nostrip']),
        'as',
        Argument('varname', resolve=False, required=True),
        blocks=[('endrender', 'nodelist')],
    )

    def get_value(self, context, nodelist, strip, **kwargs):
        value = nodelist.render(context)
        if strip:
            value = value.strip()
        return mark_safe(value)
register.tag(Render)
msgctxt "login_url"
msgid "Login"
msgstr ""

#, python-format
msgid "Please %(login_url)s for more information."
msgstr ""