mirror of
				https://github.com/django/django.git
				synced 2025-10-30 19:47:35 +00:00 
			
		
		
		
	Fixed #14824 -- Corrected the handling of formats when USE_L10N is disabled. Thanks to nullie for the report and initial patch, and to idle for the separate report with helpful debug info.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15404 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		
							parent
							
								
									987fd51176
								
							
						
					
					
						commit
						d44fb0557a
					
				
					 3 changed files with 51 additions and 18 deletions
				
			
		|  | @ -14,11 +14,21 @@ from django.utils.safestring import mark_safe | ||||||
| _format_cache = {} | _format_cache = {} | ||||||
| _format_modules_cache = {} | _format_modules_cache = {} | ||||||
| 
 | 
 | ||||||
|  | def reset_format_cache(): | ||||||
|  |     """Clear any cached formats. | ||||||
|  | 
 | ||||||
|  |     This method is provided primarily for testing purposes, | ||||||
|  |     so that the effects of cached formats can be removed. | ||||||
|  |     """ | ||||||
|  |     global _format_cache, _format_modules_cache | ||||||
|  |     _format_cache = {} | ||||||
|  |     _format_modules_cache = {} | ||||||
|  | 
 | ||||||
| def iter_format_modules(lang): | def iter_format_modules(lang): | ||||||
|     """ |     """ | ||||||
|     Does the heavy lifting of finding format modules. |     Does the heavy lifting of finding format modules. | ||||||
|     """ |     """ | ||||||
|     if check_for_language(lang) or settings.USE_L10N: |     if check_for_language(lang): | ||||||
|         format_locations = ['django.conf.locale.%s'] |         format_locations = ['django.conf.locale.%s'] | ||||||
|         if settings.FORMAT_MODULE_PATH: |         if settings.FORMAT_MODULE_PATH: | ||||||
|             format_locations.append(settings.FORMAT_MODULE_PATH + '.%s') |             format_locations.append(settings.FORMAT_MODULE_PATH + '.%s') | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ from django.utils import importlib | ||||||
| from django.utils.translation import check_for_language, activate, to_locale, get_language | from django.utils.translation import check_for_language, activate, to_locale, get_language | ||||||
| from django.utils.text import javascript_quote | from django.utils.text import javascript_quote | ||||||
| from django.utils.encoding import smart_unicode | from django.utils.encoding import smart_unicode | ||||||
| from django.utils.formats import get_format_modules | from django.utils.formats import get_format_modules, get_format | ||||||
| 
 | 
 | ||||||
| def set_language(request): | def set_language(request): | ||||||
|     """ |     """ | ||||||
|  | @ -49,10 +49,7 @@ def get_formats(): | ||||||
|     result = {} |     result = {} | ||||||
|     for module in [settings] + get_format_modules(reverse=True): |     for module in [settings] + get_format_modules(reverse=True): | ||||||
|         for attr in FORMAT_SETTINGS: |         for attr in FORMAT_SETTINGS: | ||||||
|             try: |             result[attr] = get_format(attr) | ||||||
|                 result[attr] = getattr(module, attr) |  | ||||||
|             except AttributeError: |  | ||||||
|                 pass |  | ||||||
|     src = [] |     src = [] | ||||||
|     for k, v in result.items(): |     for k, v in result.items(): | ||||||
|         if isinstance(v, (basestring, int)): |         if isinstance(v, (basestring, int)): | ||||||
|  |  | ||||||
|  | @ -48,12 +48,18 @@ class AdminViewBasicTest(TestCase): | ||||||
|     urlbit = 'admin' |     urlbit = 'admin' | ||||||
| 
 | 
 | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.old_language_code = settings.LANGUAGE_CODE |         self.old_USE_I18N = settings.LANGUAGE_CODE | ||||||
|  |         self.old_USE_L10N = settings.USE_L10N | ||||||
|  |         self.old_LANGUAGE_CODE = settings.LANGUAGE_CODE | ||||||
|         self.client.login(username='super', password='secret') |         self.client.login(username='super', password='secret') | ||||||
|  |         settings.USE_I18N = True | ||||||
| 
 | 
 | ||||||
|     def tearDown(self): |     def tearDown(self): | ||||||
|         settings.LANGUAGE_CODE = self.old_language_code |         settings.USE_I18N = self.old_USE_I18N | ||||||
|  |         settings.USE_L10N = self.old_USE_L10N | ||||||
|  |         settings.LANGUAGE_CODE = self.old_LANGUAGE_CODE | ||||||
|         self.client.logout() |         self.client.logout() | ||||||
|  |         formats.reset_format_cache() | ||||||
| 
 | 
 | ||||||
|     def testTrailingSlashRequired(self): |     def testTrailingSlashRequired(self): | ||||||
|         """ |         """ | ||||||
|  | @ -351,22 +357,42 @@ class AdminViewBasicTest(TestCase): | ||||||
|         if the default language is non-English but the selected language |         if the default language is non-English but the selected language | ||||||
|         is English. See #13388 and #3594 for more details. |         is English. See #13388 and #3594 for more details. | ||||||
|         """ |         """ | ||||||
|         settings.LANGUAGE_CODE = 'fr' |         try: | ||||||
|         activate('en-us') |             settings.LANGUAGE_CODE = 'fr' | ||||||
|         response = self.client.get('/test_admin/admin/jsi18n/') |             activate('en-us') | ||||||
|         self.assertNotContains(response, 'Choisir une heure') |             response = self.client.get('/test_admin/admin/jsi18n/') | ||||||
|         deactivate() |             self.assertNotContains(response, 'Choisir une heure') | ||||||
|  |         finally: | ||||||
|  |             deactivate() | ||||||
| 
 | 
 | ||||||
|     def testI18NLanguageNonEnglishFallback(self): |     def testI18NLanguageNonEnglishFallback(self): | ||||||
|         """ |         """ | ||||||
|         Makes sure that the fallback language is still working properly |         Makes sure that the fallback language is still working properly | ||||||
|         in cases where the selected language cannot be found. |         in cases where the selected language cannot be found. | ||||||
|         """ |         """ | ||||||
|         settings.LANGUAGE_CODE = 'fr' |         try: | ||||||
|         activate('none') |             settings.LANGUAGE_CODE = 'fr' | ||||||
|         response = self.client.get('/test_admin/admin/jsi18n/') |             activate('none') | ||||||
|         self.assertContains(response, 'Choisir une heure') |             response = self.client.get('/test_admin/admin/jsi18n/') | ||||||
|         deactivate() |             self.assertContains(response, 'Choisir une heure') | ||||||
|  |         finally: | ||||||
|  |             deactivate() | ||||||
|  | 
 | ||||||
|  |     def testL10NDeactivated(self): | ||||||
|  |         """ | ||||||
|  |         Check if L10N is deactivated, the Javascript i18n view doesn't | ||||||
|  |         return localized date/time formats. Refs #14824. | ||||||
|  |         """ | ||||||
|  |         try: | ||||||
|  |             settings.LANGUAGE_CODE = 'ru' | ||||||
|  |             settings.USE_L10N = False | ||||||
|  |             activate('ru') | ||||||
|  |             response = self.client.get('/test_admin/admin/jsi18n/') | ||||||
|  |             self.assertNotContains(response, '%d.%m.%Y %H:%M:%S') | ||||||
|  |             self.assertContains(response, '%Y-%m-%d %H:%M:%S') | ||||||
|  |         finally: | ||||||
|  |             deactivate() | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     def test_disallowed_filtering(self): |     def test_disallowed_filtering(self): | ||||||
|         self.assertRaises(SuspiciousOperation, |         self.assertRaises(SuspiciousOperation, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Russell Keith-Magee
						Russell Keith-Magee