gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:34:53 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com