summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatryk Zawadzki <patrys@room-303.com>2018-02-19 19:09:33 +0100
committerTim Graham <timograham@gmail.com>2018-03-03 12:08:24 -0500
commita20aae414e762e4d9043e76b0bf8eccd334c8ebc (patch)
treeb15ab89cef411f96c48071d79c8cc0a60444bb54
parent939e0a5995357ad0597565ad19a8d99216fa14e4 (diff)
Fixed #29144 -- Made untranslated strings for territorial language variants use translations from the generic language variant.
-rw-r--r--django/utils/translation/trans_real.py2
-rw-r--r--docs/releases/2.1.txt4
-rw-r--r--docs/topics/i18n/translation.txt8
-rw-r--r--tests/i18n/territorial_fallback/__init__.py0
-rw-r--r--tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.mobin0 -> 460 bytes
-rw-r--r--tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.po27
-rw-r--r--tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.mobin0 -> 426 bytes
-rw-r--r--tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.po27
-rw-r--r--tests/i18n/tests.py14
9 files changed, 81 insertions, 1 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index 7d6ef125b5..af11c2ac35 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -202,6 +202,8 @@ class DjangoTranslation(gettext_module.GNUTranslations):
self._catalog = other._catalog.copy()
else:
self._catalog.update(other._catalog)
+ if other._fallback:
+ self.add_fallback(other._fallback)
def language(self):
"""Return the translation language."""
diff --git a/docs/releases/2.1.txt b/docs/releases/2.1.txt
index 3495a132a6..b22f27dcd7 100644
--- a/docs/releases/2.1.txt
+++ b/docs/releases/2.1.txt
@@ -179,6 +179,10 @@ Internationalization
* Added the :meth:`~django.utils.translation.get_supported_language_variant`
function.
+* Untranslated strings for territorial language variants now use the
+ translations of the generic language. For example, untranslated ``pt_BR``
+ strings use ``pt`` translations.
+
Management Commands
~~~~~~~~~~~~~~~~~~~
diff --git a/docs/topics/i18n/translation.txt b/docs/topics/i18n/translation.txt
index 31ee71a05e..c205c15d4c 100644
--- a/docs/topics/i18n/translation.txt
+++ b/docs/topics/i18n/translation.txt
@@ -2082,7 +2082,13 @@ translations for the same literal:
In all cases the name of the directory containing the translation is expected to
be named using :term:`locale name` notation. E.g. ``de``, ``pt_BR``, ``es_AR``,
-etc.
+etc. Untranslated strings for territorial language variants use the translations
+of the generic language. For example, untranslated ``pt_BR`` strings use ``pt``
+translations.
+
+.. versionchanged:: 2.1
+
+ Fallback to the generic language as described above was added.
This way, you can write applications that include their own translations, and
you can override base translations in your project. Or, you can just build
diff --git a/tests/i18n/territorial_fallback/__init__.py b/tests/i18n/territorial_fallback/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/i18n/territorial_fallback/__init__.py
diff --git a/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.mo b/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..454fef0c7a
--- /dev/null
+++ b/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.mo
Binary files differ
diff --git a/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.po b/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..72013ab579
--- /dev/null
+++ b/tests/i18n/territorial_fallback/locale/de/LC_MESSAGES/django.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-04-25 15:39-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: DE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Translators: This comment should be extracted
+#: __init__.py:1
+msgid "Test 1 (en)"
+msgstr "Test 1 (de)"
+
+#: __init__.py:2
+msgid "Test 2 (en)"
+msgstr "Test 2 (de)"
diff --git a/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.mo b/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..4d014cb1bf
--- /dev/null
+++ b/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.mo
Binary files differ
diff --git a/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.po b/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..e28fcd3405
--- /dev/null
+++ b/tests/i18n/territorial_fallback/locale/de_DE/LC_MESSAGES/django.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-04-25 15:39-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: DE-DE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Translators: This comment should be extracted
+#: __init__.py:1
+msgid "Test 1 (en)"
+msgstr "Test 1 (de-de)"
+
+#: __init__.py:2
+msgid "Test 2 (en)"
+msgstr ""
diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py
index afb4ac2ddb..c609e4d40a 100644
--- a/tests/i18n/tests.py
+++ b/tests/i18n/tests.py
@@ -1455,6 +1455,20 @@ class DjangoFallbackResolutionOrderI18NTests(ResolutionOrderI18NTests):
self.assertEqual(gettext('Date/time'), 'Datum/Zeit')
+@override_settings(INSTALLED_APPS=['i18n.territorial_fallback'])
+class TranslationFallbackI18NTests(ResolutionOrderI18NTests):
+
+ def test_sparse_territory_catalog(self):
+ """
+ Untranslated strings for territorial language variants use the
+ translations of the generic language. In this case, the de-de
+ translation falls back to de.
+ """
+ with translation.override('de-de'):
+ self.assertGettext('Test 1 (en)', '(de-de)')
+ self.assertGettext('Test 2 (en)', '(de)')
+
+
class TestModels(TestCase):
def test_lazy(self):
tm = TestModel()