Browse Source

Merging utils.translation.

backports/m1-live
Erik Stein 8 years ago
parent
commit
b8100a4754
  1. 31
      utils/translation.py

31
utils/translation.py

@ -18,23 +18,29 @@ from django.views.generic import TemplateView
from django.views.i18n import LANGUAGE_QUERY_PARAMETER from django.views.i18n import LANGUAGE_QUERY_PARAMETER
def get_language(language_code=None): def _normalize_language_code(language_code):
""" """
Calls Django's translation.get_language but makes sure Makes sure language code is not an empty string.
that
""" """
if not language_code: return (
language_code = translation.get_language() language_code or
if not language_code: translation.get_language() or
language_code = settings.LANGUAGE_CODE settings.LANGUAGE_CODE or
language_code = language_code[:2] or 'de' # FIXME Fall back to default language 'en'
)
def get_language(language_code=None):
return _normalize_language_code(language_code)[:2]
def lang_suffix(language_code=None): def lang_suffix(language_code=None):
""" """
Returns the suffix appropriate for adding to field names for selecting Returns the suffix appropriate for adding to field names for selecting
the current language. the current language.
""" """
return "_%s" % language_code language_code = _normalize_language_code(language_code)[:2]
return "_{}".format(language_code)
class DirectTemplateView(TemplateView): class DirectTemplateView(TemplateView):
@ -67,10 +73,11 @@ def i18n_direct_to_template(request, *args, **kwargs):
def get_translation(obj, relation_name='translations', language_code=None): def get_translation(obj, relation_name='translations', language_code=None):
language_code = language_code or translation.get_language()[:2] language_code = _normalize_language_code(language_code)[:2]
try: try:
return getattr(obj, relation_name).get(language=language_code) return getattr(obj, relation_name).get(language=language_code)
except ObjectDoesNotExist: except ObjectDoesNotExist:
# FIXME Fetch best possible language from settings.LANGUAGES
try: try:
return getattr(obj, relation_name).get(language=(language_code == 'en' and 'de' or 'en')) return getattr(obj, relation_name).get(language=(language_code == 'en' and 'de' or 'en'))
except ObjectDoesNotExist: except ObjectDoesNotExist:
@ -135,9 +142,7 @@ def get_translated_field(obj, field_name, language_code=None):
field_name + lang_suffix other language field_name + lang_suffix other language
""" """
# TODO Implement multiple languages # TODO Implement multiple languages
language_code = (language_code or language_code = _normalize_language_code(language_code)[:2]
translation.get_language() or
settings.LANGUAGE_CODE)[:2]
is_default_language = bool(language_code == settings.LANGUAGE_CODE[:2]) is_default_language = bool(language_code == settings.LANGUAGE_CODE[:2])
if language_code == 'de': if language_code == 'de':
other_language_code = 'en' other_language_code = 'en'

Loading…
Cancel
Save