Code

Ticket #14924: with_test.patch

File with_test.patch, 5.3 KB (added by vanschelven, 4 years ago)

Patch with test.

  • django/utils/translation/trans_real.py

    diff -r 275034865933 django/utils/translation/trans_real.py
    a b  
    7979        self.__language = '??' 
    8080 
    8181    def merge(self, other): 
    82         self._catalog.update(other._catalog) 
     82        for k, v in other._catalog.items(): 
     83            if k not in self._catalog: 
     84                self._catalog[k] = v 
    8385 
    8486    def set_language(self, language): 
    8587        self.__language = language 
     
    138140            except IOError, e: 
    139141                return None 
    140142 
    141         res = _translation(globalpath) 
    142  
    143         # We want to ensure that, for example,  "en-gb" and "en-us" don't share 
    144         # the same translation object (thus, merging en-us with a local update 
    145         # doesn't affect en-gb), even though they will both use the core "en" 
    146         # translation. So we have to subvert Python's internal gettext caching. 
    147         base_lang = lambda x: x.split('-', 1)[0] 
    148         if base_lang(lang) in [base_lang(trans) for trans in _translations]: 
    149             res._info = res._info.copy() 
    150             res._catalog = res._catalog.copy() 
    151  
    152143        def _merge(path): 
    153144            t = _translation(path) 
    154145            if t is not None: 
    155146                if res is None: 
     147                    # We want to ensure that, for example,  "en-gb" and "en-us" don't share 
     148                    # the same translation object (thus, merging en-us with a local update 
     149                    # doesn't affect en-gb), even though they will both use the core "en" 
     150                    # translation. So we have to subvert Python's internal gettext caching. 
     151 
     152                    base_lang = lambda x: x.split('-', 1)[0] 
     153                    if base_lang(lang) in [base_lang(trans) for trans in _translations]: 
     154                        t._info = t._info.copy() 
     155                        t._catalog = t._catalog.copy() 
    156156                    return t 
    157157                else: 
    158158                    res.merge(t) 
    159159            return res 
    160160 
    161         for localepath in settings.LOCALE_PATHS: 
    162             if os.path.isdir(localepath): 
    163                 res = _merge(localepath) 
     161        if projectpath and os.path.isdir(projectpath): 
     162            res = _merge(projectpath) 
    164163 
    165164        for appname in settings.INSTALLED_APPS: 
    166165            app = import_module(appname) 
     
    169168            if os.path.isdir(apppath): 
    170169                res = _merge(apppath) 
    171170 
    172         if projectpath and os.path.isdir(projectpath): 
    173             res = _merge(projectpath) 
     171        for localepath in settings.LOCALE_PATHS: 
     172            if os.path.isdir(localepath): 
     173                res = _merge(localepath) 
     174 
     175        res = _merge(globalpath) 
    174176 
    175177        if res is None: 
    176178            if fallback is not None: 
  • tests/regressiontests/i18n/resolution_high_priority/locale/de/LC_MESSAGES/django.po

    diff -r 275034865933 tests/regressiontests/i18n/resolution_high_priority/locale/de/LC_MESSAGES/django.mo
    Binary file tests/regressiontests/i18n/resolution_high_priority/locale/de/LC_MESSAGES/django.mo has changed
    diff -r 275034865933 tests/regressiontests/i18n/resolution_high_priority/locale/de/LC_MESSAGES/django.po
    a b  
     1# SOME DESCRIPTIVE TITLE. 
     2# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
     3# This file is distributed under the same license as the PACKAGE package. 
     4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. 
     5# 
     6#, fuzzy 
     7msgid "" 
     8msgstr "" 
     9"Project-Id-Version: PACKAGE VERSION\n" 
     10"Report-Msgid-Bugs-To: \n" 
     11"POT-Creation-Date: 2010-02-14 17:33+0100\n" 
     12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
     13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 
     14"Language-Team: LANGUAGE <LL@li.org>\n" 
     15"MIME-Version: 1.0\n" 
     16"Content-Type: text/plain; charset=UTF-8\n" 
     17"Content-Transfer-Encoding: 8bit\n" 
     18"Plural-Forms: nplurals=2; plural=(n != 1)\n" 
     19 
     20#: models.py:3 
     21msgid "Date/time" 
     22msgstr "Datum/Zeit (FIRST APP)" 
  • b/tests/regressiontests/i18n/resolution_high_priority/models.py

    diff -r 275034865933 tests/regressiontests/i18n/resolution_high_priority/models.py
     
     1# 
     2 No newline at end of file 
  • tests/regressiontests/i18n/tests.py

    diff -r 275034865933 tests/regressiontests/i18n/tests.py
    a b  
    654654    def test_app_translation(self): 
    655655        self.assertUgettext('Date/time', 'APP') 
    656656 
     657class AppResolutionOrderI18NTests(ResolutionOrderI18NTests): 
     658 
     659    def setUp(self): 
     660        self.old_installed_apps = settings.INSTALLED_APPS 
     661        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution_high_priority', 'regressiontests.i18n.resolution'] 
     662        super(AppResolutionOrderI18NTests, self).setUp() 
     663 
     664    def tearDown(self): 
     665        settings.INSTALLED_APPS = self.old_installed_apps 
     666        super(AppResolutionOrderI18NTests, self).tearDown() 
     667 
     668    def test_app_translation(self): 
     669        self.assertUgettext('Date/time', 'FIRST APP') 
     670 
    657671class LocalePathsResolutionOrderI18NTests(ResolutionOrderI18NTests): 
    658672 
    659673    def setUp(self):