Ant*_*off 43 django translation django-templates internationalization
在Django模板中,您可以使用{{ _("Hello World") }}或{% trans "Hello World" %}标记要翻译的字符串.在文档中,"官方"方法似乎是{% trans %}标记,但_()语法也提到过一次.
这些方法有何不同(语法除外)以及为什么应该优先于其他方法?
一个区别是你显然不能使用{% trans %}标签和过滤器.但这是否意味着我可以_()随处使用,比如{{ _("String") }}?与使用{% trans "String" %}独立字符串以及_()标签和过滤器相比,它更加干净,更加一致.
Ant*_*off 49
所以看起来技术上没有Django 1.5的区别.translate在两种情况下,模板引擎在内部标记用于转换的变量(通过设置其属性):
{% trans VAR %}(见TranslateNode),或_(并以其结尾)(请参阅参考资料Variable.__init__).稍后,当解析变量时,Django将其包装ugettext或者pgettext如果它看到该translate属性.
但是,从源代码可以看出,有一些灵活性考虑因素有利于{% trans %}标记:
{% trans "String" noop %},它会把字符串翻译成.po文件,但在渲染时实际上不会翻译输出(translate变量没有内部属性,没有ugettext调用);{% trans "May" context "verb" %};{% trans "String" as
translated_string %}.*自Django 1.4起.
如果我遗漏任何东西,请随时纠正我或发布更好的答案.