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

How these approaches differ(语法除外),为什么应该是其中一个而不是另一个呢?

一个不同之处在于,您显然不能将{% trans %}与标签和过滤器一起使用.但这是否意味着我在任何地方都可以使用_(),比如{{ _("String") }}?它的工作和外观都比{% trans "String" %}使用独立字符串和_()使用标签和过滤器更干净、更一致.

推荐答案

因此,从技术上讲,Django 1.5版似乎没有什么不同.模板引擎在两种情况下在内部标记要转换的变量(通过设置其translate属性):

稍后,当变量为resolved时,如果看到translate属性,Django会用ugettextpgettext对其进行包装.

但是,从源代码可以看出,支持{% trans %}Tag有一些灵活性方面的考虑:

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

*从Django 1.4开始.

请随时纠正我或张贴更好的答案,以防我遗漏了什么.

Django相关问答推荐

查尔而不是瓦尔查尔加盟Django 球场

Django mods.py我想要一个函数转到一个变量

在 django 中使用自定义 url 转换器传递 url 参数

Nginx 响应 404 not found on Django media URL in preprod, dev ok

在 Django 模板中呈现标签名称而不是整数字段

使用django提交后如何保留html表单数据?

Playframework 和 Django

Django 在模型中存储用户图像

Django - 站点匹配查询不存在

Django中基于令牌的身份验证

如何在 django 中生成 url

django 复数模板

这是验证 Django 模型字段的方法吗?

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

从表单获取模型实例而不保存

使用 Django 部署 Google Analytics

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

django 如何知道已经运行了哪些迁移?

Django admin:使字段在添加中可编辑但不可编辑

使用 .order_by() 和 .latest() 的 Django 查询