diff options
| author | Julien Phalip <jphalip@gmail.com> | 2011-10-19 04:59:47 +0000 |
|---|---|---|
| committer | Julien Phalip <jphalip@gmail.com> | 2011-10-19 04:59:47 +0000 |
| commit | 26698bc85123935d5926a87a45cae25efe683639 (patch) | |
| tree | 6932998940436b4362a8a6c8d167aca1e647d5cb /tests | |
| parent | 358e5a8031be14efe33dc62e821408c2a6a8e85a (diff) | |
Fixed #14806 -- Added support for contextual translations to the `trans` and `blocktrans` template tags. Thanks to jtiai for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17015 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/i18n/commands/extraction.py | 29 | ||||
| -rw-r--r-- | tests/regressiontests/i18n/commands/templates/test.html | 9 | ||||
| -rw-r--r-- | tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo | bin | 922 -> 1449 bytes | |||
| -rw-r--r-- | tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po | 24 | ||||
| -rw-r--r-- | tests/regressiontests/i18n/tests.py | 121 |
5 files changed, 183 insertions, 0 deletions
diff --git a/tests/regressiontests/i18n/commands/extraction.py b/tests/regressiontests/i18n/commands/extraction.py index 7d7cdf7485..c49577221e 100644 --- a/tests/regressiontests/i18n/commands/extraction.py +++ b/tests/regressiontests/i18n/commands/extraction.py @@ -94,6 +94,35 @@ class BasicExtractorTests(ExtractorTests): os.remove('./templates/template_with_error.html') os.remove('./templates/template_with_error.html.py') # Waiting for #8536 to be fixed + def test_template_message_context_extractor(self): + """ + Ensure that message contexts are correctly extracted for the + {% trans %} and {% blocktrans %} template tags. + Refs #14806. + """ + os.chdir(self.test_dir) + management.call_command('makemessages', locale=LOCALE, verbosity=0) + self.assertTrue(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + # {% trans %} + self.assertTrue('msgctxt "Special trans context #1"' in po_contents) + self.assertTrue("Translatable literal #7a" in po_contents) + self.assertTrue('msgctxt "Special trans context #2"' in po_contents) + self.assertTrue("Translatable literal #7b" in po_contents) + self.assertTrue('msgctxt "Special trans context #3"' in po_contents) + self.assertTrue("Translatable literal #7c" in po_contents) + + # {% blocktrans %} + self.assertTrue('msgctxt "Special blocktrans context #1"' in po_contents) + self.assertTrue("Translatable literal #8a" in po_contents) + self.assertTrue('msgctxt "Special blocktrans context #2"' in po_contents) + self.assertTrue("Translatable literal #8b-singular" in po_contents) + self.assertTrue("Translatable literal #8b-plural" in po_contents) + self.assertTrue('msgctxt "Special blocktrans context #3"' in po_contents) + self.assertTrue("Translatable literal #8c-singular" in po_contents) + self.assertTrue("Translatable literal #8c-plural" in po_contents) + self.assertTrue('msgctxt "Special blocktrans context #4"' in po_contents) + self.assertTrue("Translatable literal #8d" in po_contents) class JavascriptExtractorTests(ExtractorTests): diff --git a/tests/regressiontests/i18n/commands/templates/test.html b/tests/regressiontests/i18n/commands/templates/test.html index b5d705c132..24fc708621 100644 --- a/tests/regressiontests/i18n/commands/templates/test.html +++ b/tests/regressiontests/i18n/commands/templates/test.html @@ -57,3 +57,12 @@ continued here.{% endcomment %} {% comment %} Translators: Two-line translator comment #5 -- with non ASCII characters: áéíóúö continued here.{% endcomment %} {% trans "Translatable literal #6b" %} + +{% trans "Translatable literal #7a" context "Special trans context #1" %} +{% trans "Translatable literal #7b" as var context "Special trans context #2" %} +{% trans "Translatable literal #7c" context "Special trans context #3" as var %} + +{% blocktrans context "Special blocktrans context #1" %}Translatable literal #8a{% endblocktrans %} +{% blocktrans count 2 context "Special blocktrans context #2" %}Translatable literal #8b-singular{% plural %}Translatable literal #8b-plural{% endblocktrans %} +{% blocktrans context "Special blocktrans context #3" count 2 %}Translatable literal #8c-singular{% plural %}Translatable literal #8c-plural{% endblocktrans %} +{% blocktrans with a=1 context "Special blocktrans context #4" %}Translatable literal #8d {{ a }}{% endblocktrans %}
\ No newline at end of file diff --git a/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo b/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo Binary files differindex a1a93c8329..f825e3918b 100644 --- a/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo +++ b/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo diff --git a/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po b/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po index 7226ad1943..a471d3814b 100644 --- a/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po +++ b/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po @@ -52,3 +52,27 @@ msgid "%(percent)s%% represents %(num)s object" msgid_plural "%(percent)s%% represents %(num)s objects" msgstr[0] "%(percent)s%% stellt %(num)s Objekt dar" msgstr[1] "%(percent)s%% stellt %(num)s Objekte dar" + +#: models.py:17 +msgctxt "super search" +msgid "%(number)s super result" +msgid_plural "%(number)s super results" +msgstr[0] "%(number)s Super-Ergebnis" +msgstr[1] "%(number)s Super-Ergebnisse" + +#: models.py:19 +msgctxt "other super search" +msgid "%(number)s super result" +msgid_plural "%(number)s super results" +msgstr[0] "%(number)s anderen Super-Ergebnis" +msgstr[1] "%(number)s andere Super-Ergebnisse" + +#: models.py:21 +msgctxt "comment count" +msgid "There are %(num_comments)s comments" +msgstr "Es gibt %(num_comments)s Kommentare" + +#: models.py:23 +msgctxt "other comment count" +msgid "There are %(num_comments)s comments" +msgstr "Andere: Es gibt %(num_comments)s Kommentare"
\ No newline at end of file diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index 17a96ed433..bfed0ec882 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -9,6 +9,7 @@ from threading import local from django.conf import settings from django.template import Template, Context +from django.template.base import TemplateSyntaxError from django.test import TestCase, RequestFactory from django.test.utils import override_settings from django.utils import translation @@ -96,6 +97,126 @@ class TranslationTests(TestCase): self.assertEqual(pgettext("verb", "May"), u"Kann") self.assertEqual(npgettext("search", "%d result", "%d results", 4) % 4, u"4 Resultate") + def test_template_tags_pgettext(self): + """ + Ensure that message contexts are taken into account the {% trans %} and + {% blocktrans %} template tags. + Refs #14806. + """ + # Reset translation catalog to include other/locale/de + extended_locale_paths = settings.LOCALE_PATHS + ( + os.path.join(here, 'other', 'locale'), + ) + with self.settings(LOCALE_PATHS=extended_locale_paths): + from django.utils.translation import trans_real + trans_real._active = local() + trans_real._translations = {} + with translation.override('de'): + + # {% trans %} ----------------------------------- + + # Inexisting context... + t = Template('{% load i18n %}{% trans "May" context "unexisting" %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'May') + + # Existing context... + # Using a literal + t = Template('{% load i18n %}{% trans "May" context "month name" %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% trans "May" context "verb" %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Kann') + + # Using a variable + t = Template('{% load i18n %}{% trans "May" context message_context %}') + rendered = t.render(Context({'message_context': 'month name'})) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% trans "May" context message_context %}') + rendered = t.render(Context({'message_context': 'verb'})) + self.assertEqual(rendered, 'Kann') + + # Using a filter + t = Template('{% load i18n %}{% trans "May" context message_context|lower %}') + rendered = t.render(Context({'message_context': 'MONTH NAME'})) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% trans "May" context message_context|lower %}') + rendered = t.render(Context({'message_context': 'VERB'})) + self.assertEqual(rendered, 'Kann') + + # Using 'as' + t = Template('{% load i18n %}{% trans "May" context "month name" as var %}Value: {{ var }}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Value: Mai') + t = Template('{% load i18n %}{% trans "May" as var context "verb" %}Value: {{ var }}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Value: Kann') + + # Mis-uses + self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" context as var %}{{ var }}') + self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% trans "May" as var context %}{{ var }}') + + # {% blocktrans %} ------------------------------ + + # Inexisting context... + t = Template('{% load i18n %}{% blocktrans context "unexisting" %}May{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'May') + + # Existing context... + # Using a literal + t = Template('{% load i18n %}{% blocktrans context "month name" %}May{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% blocktrans context "verb" %}May{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Kann') + + # Using a variable + t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}') + rendered = t.render(Context({'message_context': 'month name'})) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% blocktrans context message_context %}May{% endblocktrans %}') + rendered = t.render(Context({'message_context': 'verb'})) + self.assertEqual(rendered, 'Kann') + + # Using a filter + t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}') + rendered = t.render(Context({'message_context': 'MONTH NAME'})) + self.assertEqual(rendered, 'Mai') + t = Template('{% load i18n %}{% blocktrans context message_context|lower %}May{% endblocktrans %}') + rendered = t.render(Context({'message_context': 'VERB'})) + self.assertEqual(rendered, 'Kann') + + # Using 'count' + t = Template('{% load i18n %}{% blocktrans count number=1 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, '1 Super-Ergebnis') + t = Template('{% load i18n %}{% blocktrans count number=2 context "super search" %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, '2 Super-Ergebnisse') + t = Template('{% load i18n %}{% blocktrans context "other super search" count number=1 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, '1 anderen Super-Ergebnis') + t = Template('{% load i18n %}{% blocktrans context "other super search" count number=2 %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, '2 andere Super-Ergebnisse') + + # Using 'with' + t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "comment count" %}There are {{ num_comments }} comments{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Es gibt 5 Kommentare') + t = Template('{% load i18n %}{% blocktrans with num_comments=5 context "other comment count" %}There are {{ num_comments }} comments{% endblocktrans %}') + rendered = t.render(Context()) + self.assertEqual(rendered, 'Andere: Es gibt 5 Kommentare') + + # Mis-uses + self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context with month="May" %}{{ month }}{% endblocktrans %}') + self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans context %}{% endblocktrans %}') + self.assertRaises(TemplateSyntaxError, Template, '{% load i18n %}{% blocktrans count number=2 context %}{{ number }} super result{% plural %}{{ number }} super results{% endblocktrans %}') + + def test_string_concat(self): """ unicode(string_concat(...)) should not raise a TypeError - #4796 |
