diff --git a/cms/tests/i18n.py b/cms/tests/i18n.py index 579224462a1..8f10c1815fa 100644 --- a/cms/tests/i18n.py +++ b/cms/tests/i18n.py @@ -1,5 +1,7 @@ from cms.test_utils.testcases import SettingsOverrideTestCase from cms.utils import i18n +from cms.utils.i18n import get_fallback_languages + class TestLanguages(SettingsOverrideTestCase): @@ -269,3 +271,36 @@ def test_get_languages_undefined_site(self): for lang in result: self.assertEqual(lang['public'], True) self.assertEqual(lang['hide_untranslated'], False) + + +class TestLanguagesNotInCMSLanguages(SettingsOverrideTestCase): + settings_overrides = { + 'LANGUAGE_CODE': 'en', + 'LANGUAGES': [ + ('en', 'English'), + ('de', 'German'), + ('fr', 'French') + ], + 'CMS_LANGUAGES': { + 1: [ + { + 'code': 'de', + 'name': 'German', + 'public': True, + }, + { + 'code': 'fr', + 'name': 'French', + 'public': True + } + ], + 'default': { + 'fallbacks': ['de', 'fr'], + } + }, + 'SITE_ID': 1, + } + + def test_get_fallback_languages(self): + languages = get_fallback_languages('en', 1) + self.assertEqual(languages, ['de', 'fr']) diff --git a/cms/utils/i18n.py b/cms/utils/i18n.py index 68868947a75..ed5f6165168 100644 --- a/cms/utils/i18n.py +++ b/cms/utils/i18n.py @@ -162,7 +162,10 @@ def get_fallback_languages(language, site_id=None): """ returns a list of fallback languages for the given language """ - language = get_language_object(language, site_id) + try: + language = get_language_object(language, site_id) + except LanguageError: + language = get_languages(site_id)[0] return language.get('fallbacks', [])