Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

get_language_title: fallback to language code if language is not configured #124

Merged
merged 1 commit into from Mar 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
21 changes: 21 additions & 0 deletions parler/tests/test_model_attributes.py
Expand Up @@ -230,3 +230,24 @@ def test_model_with_zero_pk(self):
SimpleModel.objects.get(pk=x.pk)
except TranslationDoesNotExist:
self.fail("zero pk is not supported!")

def test_translatedfieldsmodel_str(self):
"""Test converting TranslatedFieldsModel to string"""
missing_language_code = 'xx'
obj = SimpleModel.objects.create(tr_title='Something')

# Adjust translation object to use language_code that is not
# configured. It is easier because various Django version behave
# differently if we try to use not configured language.
translation = obj.translations.get()
translation.language_code = missing_language_code
translation.save()
# Try to get str() of the TranslatedFieldsModel instance.
try:
translation_as_str = str(obj.translations.get())
except KeyError:
self.fail("Converting translation to string raises KeyError")

# Check that we get language code as a fallback, when language is
# not configured.
self.assertEqual(translation_as_str, missing_language_code)
16 changes: 16 additions & 0 deletions parler/tests/test_utils.py
Expand Up @@ -5,6 +5,7 @@
from django.test import TestCase

from parler.utils import get_parler_languages_from_django_cms
from parler.utils.i18n import get_language_title


class UtilTestCase(TestCase):
Expand Down Expand Up @@ -76,3 +77,18 @@ def test_get_parler_languages_from_django_cms(self):
computed = get_parler_languages_from_django_cms(cms)
for block, block_config in computed.items():
self.assertEqual(computed[block], parler[block])

def test_get_language_title(self):
"""Test get_language_title utility function"""
language_code = 'en'
self.assertEqual(get_language_title(language_code), 'English')

# Test the case where requested language is not in settings.
# We can not override settings, since languages in get_language_title()
# are initialised during import. So, we use fictional language code.
language_code = 'xx'
try:
self.assertEqual(get_language_title(language_code), language_code)
except KeyError:
self.fail(
"get_language_title() raises KeyError for missing language")
8 changes: 7 additions & 1 deletion parler/utils/i18n.py
Expand Up @@ -43,6 +43,8 @@ def is_supported_django_language(language_code):
def get_language_title(language_code):
"""
Return the verbose_name for a language code.

Fallback to language_code if language is not found in settings.
"""
from parler import appsettings
# Avoid weird lookup errors.
Expand All @@ -60,7 +62,11 @@ def get_language_title(language_code):
return _(languages[language_code])
except KeyError:
language_code = language_code.split('-')[0] # e.g. if fr-ca is not supported fallback to fr
return _(languages[language_code])
language_title = languages.get(language_code, None)
if language_title is not None:
return _(language_title)
else:
return language_code


def get_language_settings(language_code, site_id=None):
Expand Down