summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2011-10-19 04:59:47 +0000
committerJulien Phalip <jphalip@gmail.com>2011-10-19 04:59:47 +0000
commit26698bc85123935d5926a87a45cae25efe683639 (patch)
tree6932998940436b4362a8a6c8d167aca1e647d5cb /tests
parent358e5a8031be14efe33dc62e821408c2a6a8e85a (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.py29
-rw-r--r--tests/regressiontests/i18n/commands/templates/test.html9
-rw-r--r--tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mobin922 -> 1449 bytes
-rw-r--r--tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po24
-rw-r--r--tests/regressiontests/i18n/tests.py121
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
index 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
Binary files differ
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