django - _() 或 Django 模板中的 {% trans %}?

标签 django internationalization django-templates translation

在 Django 模板中,您可以使用 {{ _("Hello World") }}{% trans "Hello World"%} 将字符串标记为被翻译。在文档中,“官方”方法似乎是 {% trans %}标记,但也提到了 _() 语法 once .

这些方法有何不同(语法除外)以及为什么应优先选择一种而不是另一种?

一个区别是您显然不能将 {% trans %} 与标签和过滤器一起使用。但这是否意味着我可以随处使用 _(),例如 {{ _("String") }}?与使用带有独立字符串的 {% trans "String"%} 和带有标签和过滤器的 _() 相比,它看起来更简洁、更一致。

最佳答案

所以从 Django 1.5 开始,技术上似乎没有什么区别。模板引擎在两种情况下在内部标记要翻译的变量(通过设置其 translate 属性):

稍后,当变量被resolved ,如果 Django 看到 translate 属性,则用 ugettextpgettext 包装它。

不过从源码可以看出,有一些灵 active 的考虑,有利于{% trans %}标签:

  • 你可以做 {% trans "String"noop %},这会将要翻译的字符串放入 .po 文件中,但在渲染时不会实际翻译输出(没有内部 translate 变量的属性,无 ugettext 调用);
  • 您可以指定消息上下文*,例如{% trans "May"context "verb"%};
  • 您可以将翻译后的消息放入变量中供以后使用*,例如{% trans "String"as translated_string %}.

* 从 Django 1.4 开始。

如果我遗漏任何内容,请随时纠正我或发布更好的答案。

关于django - _() 或 Django 模板中的 {% trans %}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496173/

相关文章:

angular - 将多个版本的 Angular 应用程序部署到 Azure 应用服务

python - Django如何获取模板中的csrf_token值

django - 何时将 slugfield 存储在 django 数据库中?

django - Django Rest Framework: 'function'对象没有属性 'as_view'

datetime - 如何使用代码在.net中获取不同的时区

reactjs - @shopify/react-i18n 中更改语言时如何重新渲染页面?

python - 从 Django 的类外部使用 super() (或替代它,如果有的话)

python - 在 Django Admin 中将 ManyToManyWidget 添加到 ManyToManyField 的反面

python - 简单标记作为模板中的变量

django - 如何翻译应用程序模板