From 2bab9d6d9ea095c4bcaeede2df576708afd46291 Mon Sep 17 00:00:00 2001 From: Bouke Haarsma Date: Tue, 12 Nov 2013 07:54:01 +0100 Subject: Fixed #21389 -- Accept most valid language codes By removing the 'supported' keyword from the detection methods and only relying on a cached settings.LANGUAGES, the speed of said methods has been improved; around 4x raw performance. This allows us to stop checking Python's incomplete list of locales, and rely on a less restrictive regular expression for accepting certain locales. HTTP Accept-Language is defined as being case-insensitive, based on this fact extra performance improvements have been made; it wouldn't make sense to check for case differences. --- tests/i18n/tests.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 56c3f63316..cc25904ccc 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -821,10 +821,10 @@ class MiscTests(TestCase): p = trans_real.parse_accept_lang_header # Good headers. self.assertEqual([('de', 1.0)], p('de')) - self.assertEqual([('en-AU', 1.0)], p('en-AU')) + self.assertEqual([('en-au', 1.0)], p('en-AU')) self.assertEqual([('es-419', 1.0)], p('es-419')) self.assertEqual([('*', 1.0)], p('*;q=1.00')) - self.assertEqual([('en-AU', 0.123)], p('en-AU;q=0.123')) + self.assertEqual([('en-au', 0.123)], p('en-AU;q=0.123')) self.assertEqual([('en-au', 0.5)], p('en-au;q=0.5')) self.assertEqual([('en-au', 1.0)], p('en-au;q=1.0')) self.assertEqual([('da', 1.0), ('en', 0.5), ('en-gb', 0.25)], p('da, en-gb;q=0.25, en;q=0.5')) @@ -884,6 +884,24 @@ class MiscTests(TestCase): r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'} self.assertEqual(g(r), 'zh-cn') + r.META = {'HTTP_ACCEPT_LANGUAGE': 'NL'} + self.assertEqual('nl', g(r)) + + r.META = {'HTTP_ACCEPT_LANGUAGE': 'fy'} + self.assertEqual('fy', g(r)) + + r.META = {'HTTP_ACCEPT_LANGUAGE': 'ia'} + self.assertEqual('ia', g(r)) + + r.META = {'HTTP_ACCEPT_LANGUAGE': 'sr-latn'} + self.assertEqual('sr-latn', g(r)) + + r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-hans'} + self.assertEqual('zh-hans', g(r)) + + r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-hant'} + self.assertEqual('zh-hant', g(r)) + @override_settings( LANGUAGES=( ('en', 'English'), -- cgit v1.3