Django trans 标签可以包含 HTML 标签吗?
Posted
技术标签:
【中文标题】Django trans 标签可以包含 HTML 标签吗?【英文标题】:Can Django trans tags include HTML tags? 【发布时间】:2015-12-26 02:46:45 【问题描述】:例如我可以做% trans "Hold <em><strong>Ctrl</strong></em>" %
吗?还是我必须改用% trans "Hold" % <em><strong>% trans "Ctrl" %</strong></em>"
?
【问题讨论】:
【参考方案1】:我们可以在trans
模板标签中包含 HTML 标签吗?
不,我们不应该在 trans
模板标签中包含 html 标签,就像您在第一种方法 % trans "Hold <em><strong>Ctrl</strong></em>" %
中所做的那样。这是错误的做法
来自docs:
% trans %
模板标签可以转换一个常量字符串 (用单引号或双引号括起来)或可变内容。不能在
% trans %
的字符串中混合模板变量。 如果您的翻译需要带变量的字符串 (占位符),请改用% blocktrans %
。
<title>% trans "This is the title." %</title> # example 1
<title>% trans "myvar" noop %</title> # example 2
解决方案一:使用trans
模板标签
除了将 HTML 代码放在 trans
标记中之外,您还可以执行以下操作来获得所需的结果(尽管这不是推荐的方法)。
% trans "Hold" % <em><strong>% trans "Ctrl" %</strong></em> # using trans tag
解决方案2:改用blocktrans
标签
更好的选择是使用blocktrans
模板标签而不是trans
标签来包含HTML 标签。
blocktrans
标签允许您标记由以下组成的复杂句子 文字和可变内容通过利用 占位符:
然后你可以这样做:
% blocktrans %
Hold <em><strong>Ctrl</strong></em>
% endblocktrans %
【讨论】:
这似乎不符合DRY原则。 某种程度上可以说。 在我的情况下相当多。 @RahulGupta 我对此感到困惑。混合变量和字符串的能力与包含 HTML 标记(它们只是常量字符串)有什么关系?也就是说,您应该能够很好地包含它们,但您需要确保它们被正确翻译(即在大多数情况下没有翻译);) 解决方案一并不正确,如果单词是句子的一部分,则单独翻译这些单词是没有意义的。例如:某些语言需要它们反过来(“Ctrl”然后“Hold”)。【参考方案2】:正如 Rahul 在他的回答中所说,不应在 trans 模板标签中包含 HTML 标签。但是,根据Translating text blocks with Django .. what to do with the HTML?(我刚刚发现),可以将 HTML 标签放在 blocktrans 模板标签中。因此我不必做% trans "Hold" % <em><strong>% trans "Ctrl" %</strong></em>"
。我在the Django 1.8 docs 中找不到这样的说明。
【讨论】:
是的,我们不能在trans
模板标签中使用 HTML 标签,但我们可以使用 blocktrans
标签。使用trans
模板的解决方案不是最好的解决方案。我们可以使用blocktrans
模板标签代替我们的案例。我已经更新了答案,请检查。以上是关于Django trans 标签可以包含 HTML 标签吗?的主要内容,如果未能解决你的问题,请参考以下文章
我将如何在 Django 模板标签中使用模板上下文变量的值? [复制]