Jul*_*ien 10 django templates translation internationalization
我在django有一个i18n问题:
这很好用:
{% trans cat.name %}
Run Code Online (Sandbox Code Playgroud)
cat.name 将被翻译
但这不起作用:
{% blocktrans with cat.name|slugify as cat_slug %}{{ cat_slug }}{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
cat.name 没有翻译
如果我更改过滤器:
{% blocktrans with cat.name|capfirst as cat_slug %}{{ cat_slug }}{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
我可以看到过滤器正在工作,但没有翻译......
Tom*_*Tom 18
我刚刚开始使用Django国际化,但我认为你误解了{% blocktrans %}标签处理占位符的方式.
关键blocktrans是允许翻译占位符周围的文本.它不会翻译任何内部{{...}}.
如果查看生成的.po文件,您将看到以下模板代码:
{% blocktrans %}This is my variable: {{variable}}{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
将转换为如下所示的内容:
msgid:"This is my variable: %s"
Run Code Online (Sandbox Code Playgroud)
我认为你不能在blocktrans标签中翻译变量.你可以用常量字符串,{% blocktrans with _("string") as x %}{{x}}{% endblocktrans %}但我想不出你想要的原因.
您必须在我认为的视图或模型代码中执行您想要的操作.
这有效:
{% filter slugify %}{% trans cat.name %}{% endfilter %}
Run Code Online (Sandbox Code Playgroud)
小智 5
正如 Tom 指出的那样,blocktrans 将保留您在 with 语句中放入的内容,而不是翻译它。您需要做的是在翻译之前使用 with 。在您的示例中,它看起来像这样:
{% with cat_slug=cat.name|slugify %}
{% trans cat_slug %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
PS 我知道我正在回答一个 6 年前的问题,但我已经遇到过这种确切的情况好几次了,但还没有看到一个可以处理它的问题/答案。
小智 2
{% blocktrans with cat.name as cat_slug %}{{ cat_slug|capfirst }}{% endblocktrans %}
?
Run Code Online (Sandbox Code Playgroud)
编辑:你是对的,文档说过滤器要放置在 blocktrans 中
| 归档时间: |
|
| 查看次数: |
16983 次 |
| 最近记录: |