mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Fixed #31570 -- Corrected translation loading for apps providing territorial language variants with different plural equations.
Regression in e3e48b0012.
Thanks to Shai Berger for report, reproduce and suggested fix.
			
			
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							df18882473
						
					
				
				
					commit
					dd1ca50b09
				
			| @@ -96,7 +96,7 @@ class TranslationCatalog: | |||||||
|                 cat.update(trans._catalog) |                 cat.update(trans._catalog) | ||||||
|                 break |                 break | ||||||
|         else: |         else: | ||||||
|             self._catalogs.insert(0, trans._catalog) |             self._catalogs.insert(0, trans._catalog.copy()) | ||||||
|             self._plurals.insert(0, trans.plural) |             self._plurals.insert(0, trans.plural) | ||||||
|  |  | ||||||
|     def get(self, key, default=None): |     def get(self, key, default=None): | ||||||
|   | |||||||
| @@ -4,9 +4,12 @@ Django 2.2.13 release notes | |||||||
|  |  | ||||||
| *Expected June 3, 2020* | *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 | 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()`` | * Fixed a regression in Django 3.0 where all resolved ``Subquery()`` | ||||||
|   expressions were considered equal (:ticket:`31607`). |   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) |             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): | class TranslationThreadSafetyTests(SimpleTestCase): | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user