django blocktrans and i18n in templates

烈酒焚心 提交于 2019-12-29 06:13:25

问题


I have an i18n problem in django:

This works fine :

{% trans cat.name %}  

cat.name will be translated

But this doesn't work:

{% blocktrans with cat.name|slugify as cat_slug %}{{ cat_slug }}{% endblocktrans %}  

cat.name is not translated

If I change the filter :

{% blocktrans with cat.name|capfirst as cat_slug %}{{ cat_slug }}{% endblocktrans %}  

I can see that the filter is working, but there is no translation...


回答1:


I'm only just getting started with Django internationalization, but I think you're misunderstanding how the {% blocktrans %} tag handles placeholders.

The point of blocktrans is to allow the text around the placeholders to be translated. It won't translate anything inside {{...}}.

If you look at the generated .po file, you'll see that the following template code:

{% blocktrans %}This is my variable: {{variable}}{% endblocktrans %}

Will get converted into something like the following:

msgid:"This is my variable: %s"

I don't think you can translate a variable within a blocktrans tag. You can probably do constant strings with {% blocktrans with _("string") as x %}{{x}}{% endblocktrans %} but I can't think why you'd want to.

You'll have to do what you want in your view or model code I think.




回答2:


This works:

{% filter slugify %}{% trans cat.name %}{% endfilter %}



回答3:


As Tom pointed out blocktrans will preserve what you put inside the with statement instead of translating it. What you need to do is use the with before the translation. In your example, it would look like this:

{% with cat_slug=cat.name|slugify %}
    {% trans cat_slug %}
{% endwith %}

P.S. I know I'm answering a 6yr old question, but I've run across this exact situation a couple times now and haven't seen a SO question/answer that handles it.




回答4:


{% blocktrans with cat.name as cat_slug %}{{ cat_slug|capfirst }}{% endblocktrans %}

?

EDIT: you were right the doc says the filter as to be placed in the blocktrans




回答5:


{% blocktrans with cat_slug=cat.name|capfirst %}{{ cat_slug }}{% endblocktrans %}  


来源:https://stackoverflow.com/questions/1813516/django-blocktrans-and-i18n-in-templates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!