views:

965

answers:

3

Hi,
looking for a while with i18n problem in django:

this work 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 tranlation...

anyone can help ?
tkx

A: 

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

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

akh
it seems that the var is not translated {% blocktrans with cat.name as cat_slug %}{{ cat_slug }}{% endblocktrans %} this also is not translated ...
Julien
+2  A: 

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

bye ;-)

Julien
+1  A: 

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.

Tom