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...
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 %}
The include tag allows you include a template inside the current template. This is useful when you have a block of content that are the same for many pages.
gettext_lazy is a callable within the django. utils. translation module of the Django project.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With