summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-04-03 12:11:54 +0200
committerClaude Paroz <claude@2xlibre.net>2015-04-04 10:58:54 +0200
commit3a762762121acfc83f0659c1f1955aee33bc9804 (patch)
treed1a2af1617a93c06040379d44339e9b7df57bb86
parent7821f856a69b5027999890b1377aa04f24da2416 (diff)
[1.8.x] Fixed #24569 -- Made some translation functions accept None value
get_language() can return None when translations are deactivated. Thanks Nicola Peduzzi for the reporti and Tim Graham for the review. Backport of 7a0d9b5cda from master.
-rw-r--r--django/utils/translation/trans_real.py10
-rw-r--r--docs/releases/1.8.1.txt3
-rw-r--r--tests/i18n/tests.py14
3 files changed, 20 insertions, 7 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index ff84589310..cd1ac1debe 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -260,8 +260,12 @@ def get_language_bidi():
* False = left-to-right layout
* True = right-to-left layout
"""
- base_lang = get_language().split('-')[0]
- return base_lang in settings.LANGUAGES_BIDI
+ lang = get_language()
+ if lang is None:
+ return False
+ else:
+ base_lang = get_language().split('-')[0]
+ return base_lang in settings.LANGUAGES_BIDI
def catalog():
@@ -406,7 +410,7 @@ def check_for_language(lang_code):
<https://www.djangoproject.com/weblog/2007/oct/26/security-fix/>.
"""
# First, a quick check to make sure lang_code is well-formed (#21458)
- if not language_code_re.search(lang_code):
+ if lang_code is None or not language_code_re.search(lang_code):
return False
for path in all_locale_paths():
if gettext_module.find('django', path, [to_locale(lang_code)]) is not None:
diff --git a/docs/releases/1.8.1.txt b/docs/releases/1.8.1.txt
index 61c506b10a..c848fc2c30 100644
--- a/docs/releases/1.8.1.txt
+++ b/docs/releases/1.8.1.txt
@@ -14,3 +14,6 @@ Bugfixes
* Restored proper parsing of the :djadmin:`testserver` command's positional
arguments (fixture names) (:ticket:`24571`).
+
+* Prevented ``TypeError`` in translation functions ``check_for_language()`` and
+ ``get_language_bidi()`` when translations are deactivated (:ticket:`24569`).
diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py
index 5503d0ba5b..ce4405789e 100644
--- a/tests/i18n/tests.py
+++ b/tests/i18n/tests.py
@@ -26,10 +26,10 @@ from django.utils.safestring import SafeBytes, SafeString, SafeText, mark_safe
from django.utils.six import PY3
from django.utils.translation import (
LANGUAGE_SESSION_KEY, activate, check_for_language, deactivate,
- get_language, get_language_from_request, get_language_info, gettext,
- gettext_lazy, ngettext_lazy, npgettext, npgettext_lazy, pgettext,
- pgettext_lazy, string_concat, to_locale, trans_real, ugettext,
- ugettext_lazy, ungettext, ungettext_lazy,
+ get_language, get_language_bidi, get_language_from_request,
+ get_language_info, gettext, gettext_lazy, ngettext_lazy, npgettext,
+ npgettext_lazy, pgettext, pgettext_lazy, string_concat, to_locale,
+ trans_real, ugettext, ugettext_lazy, ungettext, ungettext_lazy,
)
from .forms import CompanyForm, I18nForm, SelectDateForm, SelectDateWidget
@@ -401,6 +401,11 @@ class TranslationTests(TestCase):
self.assertEqual(trans_real.to_language('en_US'), 'en-us')
self.assertEqual(trans_real.to_language('sr_Lat'), 'sr-lat')
+ def test_language_bidi(self):
+ self.assertEqual(get_language_bidi(), False)
+ with translation.override(None):
+ self.assertEqual(get_language_bidi(), False)
+
@override_settings(LOCALE_PATHS=(os.path.join(here, 'other', 'locale'),))
def test_bad_placeholder_1(self):
"""
@@ -1446,6 +1451,7 @@ class CountrySpecificLanguageTests(TestCase):
self.assertTrue(check_for_language('en-US'))
self.assertFalse(check_for_language('en-ΓΌ'))
self.assertFalse(check_for_language('en\x00'))
+ self.assertFalse(check_for_language(None))
def test_get_language_from_request(self):
# issue 19919