mirror of
https://github.com/django/django.git
synced 2025-01-22 00:02:15 +00:00
Fixed #31570 -- Corrected translation loading for apps providing territorial language variants with different plural equations.
Regression in e3e48b00127c09eafe6439d980a82fc5c591b673. Thanks to Shai Berger for report, reproduce and suggested fix.
This commit is contained in:
parent
df18882473
commit
dd1ca50b09
@ -96,7 +96,7 @@ class TranslationCatalog:
|
||||
cat.update(trans._catalog)
|
||||
break
|
||||
else:
|
||||
self._catalogs.insert(0, trans._catalog)
|
||||
self._catalogs.insert(0, trans._catalog.copy())
|
||||
self._plurals.insert(0, trans.plural)
|
||||
|
||||
def get(self, key, default=None):
|
||||
|
@ -4,9 +4,12 @@ Django 2.2.13 release notes
|
||||
|
||||
*Expected June 3, 2020*
|
||||
|
||||
Django 2.2.13 fixes two security issues and a bug in 2.2.12.
|
||||
Django 2.2.13 fixes two security issues and a regression in 2.2.12.
|
||||
|
||||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a regression in Django 2.2.12 that affected translation loading for
|
||||
apps providing translations for territorial language variants as well as a
|
||||
generic language, where the project has different plural equations for the
|
||||
language (:ticket:`31570`).
|
||||
|
@ -25,3 +25,8 @@ Bugfixes
|
||||
|
||||
* Fixed a regression in Django 3.0 where all resolved ``Subquery()``
|
||||
expressions were considered equal (:ticket:`31607`).
|
||||
|
||||
* Fixed a regression in Django 3.0.5 that affected translation loading for apps
|
||||
providing translations for territorial language variants as well as a generic
|
||||
language, where the project has different plural equations for the language
|
||||
(:ticket:`31570`).
|
||||
|
BIN
tests/i18n/loading/en/LC_MESSAGES/django.mo
Normal file
BIN
tests/i18n/loading/en/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
23
tests/i18n/loading/en/LC_MESSAGES/django.po
Normal file
23
tests/i18n/loading/en/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,23 @@
|
||||
# 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: 2020-05-13 08:42+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: trans/tests.py:16
|
||||
msgid "local country person"
|
||||
msgstr "local country person"
|
BIN
tests/i18n/loading/en_AU/LC_MESSAGES/django.mo
Normal file
BIN
tests/i18n/loading/en_AU/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
23
tests/i18n/loading/en_AU/LC_MESSAGES/django.po
Normal file
23
tests/i18n/loading/en_AU/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,23 @@
|
||||
# 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: 2020-05-13 08:42+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: trans/tests.py:16
|
||||
msgid "local country person"
|
||||
msgstr "aussie"
|
BIN
tests/i18n/loading/en_CA/LC_MESSAGES/django.mo
Normal file
BIN
tests/i18n/loading/en_CA/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
22
tests/i18n/loading/en_CA/LC_MESSAGES/django.po
Normal file
22
tests/i18n/loading/en_CA/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,22 @@
|
||||
# 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: 2020-05-13 08:42+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: trans/tests.py:16
|
||||
msgid "local country person"
|
||||
msgstr "canuck"
|
BIN
tests/i18n/loading/en_NZ/LC_MESSAGES/django.mo
Normal file
BIN
tests/i18n/loading/en_NZ/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
22
tests/i18n/loading/en_NZ/LC_MESSAGES/django.po
Normal file
22
tests/i18n/loading/en_NZ/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,22 @@
|
||||
# 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: 2020-05-13 08:42+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: trans/tests.py:16
|
||||
msgid "local country person"
|
||||
msgstr "kiwi"
|
0
tests/i18n/loading_app/__init__.py
Normal file
0
tests/i18n/loading_app/__init__.py
Normal file
5
tests/i18n/loading_app/apps.py
Normal file
5
tests/i18n/loading_app/apps.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class LoadingAppConfig(AppConfig):
|
||||
name = 'loading_app'
|
BIN
tests/i18n/loading_app/locale/en/LC_MESSAGES/django.mo
Normal file
BIN
tests/i18n/loading_app/locale/en/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
25
tests/i18n/loading_app/locale/en/LC_MESSAGES/django.po
Normal file
25
tests/i18n/loading_app/locale/en/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,25 @@
|
||||
# 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: 2020-05-13 11:39+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:8
|
||||
msgid ""
|
||||
"An app with its own translation files, with one for 'en' but not the "
|
||||
"regional dialects of English"
|
||||
msgstr ""
|
@ -384,6 +384,51 @@ class TranslationTests(SimpleTestCase):
|
||||
self.assertIs(get_language_bidi(), True)
|
||||
|
||||
|
||||
class TranslationLoadingTests(SimpleTestCase):
|
||||
def setUp(self):
|
||||
"""Clear translation state."""
|
||||
self._old_language = get_language()
|
||||
self._old_translations = trans_real._translations
|
||||
deactivate()
|
||||
trans_real._translations = {}
|
||||
|
||||
def tearDown(self):
|
||||
trans_real._translations = self._old_translations
|
||||
activate(self._old_language)
|
||||
|
||||
@override_settings(
|
||||
USE_I18N=True,
|
||||
LANGUAGE_CODE='en',
|
||||
LANGUAGES=[
|
||||
('en', 'English'),
|
||||
('en-ca', 'English (Canada)'),
|
||||
('en-nz', 'English (New Zealand)'),
|
||||
('en-au', 'English (Australia)'),
|
||||
],
|
||||
LOCALE_PATHS=[os.path.join(here, 'loading')],
|
||||
INSTALLED_APPS=['i18n.loading_app'],
|
||||
)
|
||||
def test_translation_loading(self):
|
||||
"""
|
||||
"loading_app" does not have translations for all languages provided by
|
||||
"loading". Catalogs are merged correctly.
|
||||
"""
|
||||
tests = [
|
||||
('en', 'local country person'),
|
||||
('en_AU', 'aussie'),
|
||||
('en_NZ', 'kiwi'),
|
||||
('en_CA', 'canuck'),
|
||||
]
|
||||
# Load all relevant translations.
|
||||
for language, _ in tests:
|
||||
activate(language)
|
||||
# Catalogs are merged correctly.
|
||||
for language, nickname in tests:
|
||||
with self.subTest(language=language):
|
||||
activate(language)
|
||||
self.assertEqual(gettext('local country person'), nickname)
|
||||
|
||||
|
||||
class TranslationThreadSafetyTests(SimpleTestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user