4

翻訳でHTMLをどうするか?HTMLを含む文章を翻訳したい。たとえば、そのような文字列([login]リンクです):

Please [login] to view your profile.

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 %}

まず、ログインHTMLがレンダリングされ、として保存されlogin_urlます。次に、blocktransで{{ login }}、レンダリングされたログインHTMLを提供するために使用できます。この問題に対する(同様の)解決策はありますか、それともカスタムテンプレートタグが必要ですか?

4

1 に答える 1

2

それを行うための汎用renderタグを作成しました。

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)

翻訳コンテキスト (例: {% trans "Login" context "login_url" %}) で使用すると、翻訳者は HTML に煩わされることなく、翻訳を大幅に制御できます。

msgctxt "login_url"
msgid "Login"
msgstr ""

#, python-format
msgid "Please %(login_url)s for more information."
msgstr ""
于 2013-01-18T10:20:22.813 に答える