#19300: capfirst filter breaks translation context in template
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: nobody
Type: Bug | Status: closed
Component: Template system | Version: 1.7
Severity: Normal | Resolution: fixed
Keywords: trans context | Triage Stage:
capfirst | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Przemysław "Pirax" Czumaj):
* resolution: needsinfo => fixed
Comment:
OK, I'll leave a reproduction example below if anyone will be interested,
but after some more digging I found out what the issue was.
Within ''django/django/utils/translation/trans_real.py'' file there was an
**inline_re** regex and this regex was badly constructed - up to Django
1.8.18. There was no "filters" block between translated string and a
"context" keyword, so construction
{{{
{% trans 'string'|capfirst context 'context' %}
}}}
couldn't be recognised properly. This issue was fixed in Django 1.9.
So that's it. If you are still using Django 1.8 and need a fix for it use
{{{
{% filter capfirst %}{% trans 'string' context 'context' %}{% endfilter %}
}}}
construction instead or update your Django version.
----
I can provide additional information to this issue as I'm fighting with it
right now.
Let's assume I have a template like this:
{{{
{% trans 'test_clean' %}
{% trans 'test_capfirst'|capfirst %}
{% trans 'test_context' context 'test_context' %}
{% trans 'test_context'|capfirst context 'test_context' %}
{% filter capfirst %}{% trans 'test_filter_context' context 'test_context'
%}{% endfilter %}
}}}
Now let's run ''makemessages''...
For:
{{{
{% trans 'test_clean' %}
}}}
I got:
{{{
msgid "test_clean"
msgstr ""
}}}
Result: OK!
For:
{{{
{% trans 'test_capfirst'|capfirst %}
}}}
I got:
{{{
msgid "test_capfirst"
msgstr ""
}}}
Result: OK!
For:
{{{
{% trans 'test_context' context 'test_context' %}
}}}
I got:
{{{
msgctxt "test_context"
msgid "test_context"
msgstr ""
}}}
Result: OK! Context is set as it should be.
For:
{{{
{% trans 'test_context'|capfirst context 'test_context' %}
}}}
I got:
{{{
msgid "test_context_capfirst"
msgstr ""
}}}
Comment: NOT OK! "msgctxt" key is missing, therefore Context is not set.
For:
{{{
{% filter capfirst %}{% trans 'test_filter_context' context 'test_context'
%}{% endfilter %}
}}}
I got:
{{{
msgctxt "test_context"
msgid "test_filter_context"
msgstr ""
}}}
Comment: OK! Context is set as it should be.
--
Ticket URL: <https://code.djangoproject.com/ticket/19300#comment:8>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/062.8572ba460f221941dfd18d7f93dd4913%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.