From 7184337a019deaf4ee35f52e8ae25d21156bcb54 Mon Sep 17 00:00:00 2001 From: Erik Stein Date: Wed, 14 Feb 2018 15:31:54 +0100 Subject: [PATCH] Allow arbitrary length language codes, but strip part after "-". --- shared/utils/translation.py | 43 +++++-------------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/shared/utils/translation.py b/shared/utils/translation.py index cf03f4f..60019cb 100644 --- a/shared/utils/translation.py +++ b/shared/utils/translation.py @@ -35,7 +35,7 @@ def _normalize_language_code(language_code): def get_language(language_code=None): - return _normalize_language_code(language_code)[:2] + return _normalize_language_code(language_code).split("-")[0] def get_language_order(languages=None): @@ -54,7 +54,7 @@ def lang_suffix(language_code=None, fieldname=None): If fieldname is given, returns the suffixed fieldname. """ - language_code = _normalize_language_code(language_code or get_language())[:2] + language_code = _normalize_language_code(language_code or get_language()).split("-")[0] return "{}_{}".format(fieldname or "", language_code) @@ -88,7 +88,7 @@ def i18n_direct_to_template(request, *args, **kwargs): def get_translation(obj, relation_name='translations', language_code=None): - language_code = _normalize_language_code(language_code)[:2] + language_code = _normalize_language_code(language_code).split("-")[0] try: return getattr(obj, relation_name).get(language=language_code) except ObjectDoesNotExist: @@ -99,39 +99,6 @@ def get_translation(obj, relation_name='translations', language_code=None): return None -# class FieldTranslationMixin(object): -# """ -# If the model has a field `attr` or `attr_`, return it's -# value, else raise ValueError. -# """ - -# def __getattr__(self, attr): -# if attr in self.__dict__: -# return self.__dict__[attr] -# for field in self._meta.multilingual: -# code = None -# match = re.match(r'^%s_(?P[a-z_]{2,5})$' % field, str(attr)) -# if match: -# code = match.groups('code') -# code = code[:2] # let's limit it to two letter -# elif attr in self._meta.multilingual: -# code = self._language -# field = attr -# if code is not None: -# try: -# return self._meta.translation.objects.select_related().get(model=self, language__code=code).__dict__[field] -# except ObjectDoesNotExist: -# if MULTILINGUAL_FALL_BACK_TO_DEFAULT and MULTILINGUAL_DEFAULT and code != MULTILINGUAL_DEFAULT: -# try: -# return self._meta.translation.objects.select_related().get(model=self, language__code=MULTILINGUAL_DEFAULT).__dict__[field] -# except ObjectDoesNotExist: -# pass -# if MULTILINGUAL_FAIL_SILENTLY: -# return None -# raise ValueError, "'%s' has no translation in '%s'"%(self, code) -# raise AttributeError, "'%s' object has no attribute '%s'"%(self.__class__.__name__, str(attr)) - - def get_translated_field(obj, field_name, language_code=None): """ Tries to get the model attribute corresponding to the current @@ -157,8 +124,8 @@ def get_translated_field(obj, field_name, language_code=None): field_name + lang_suffix other language """ # TODO Implement multiple languages - language_code = _normalize_language_code(language_code)[:2] - is_default_language = bool(language_code == settings.LANGUAGE_CODE[:2]) + language_code = _normalize_language_code(language_code).split("-")[0] + is_default_language = bool(language_code == settings.LANGUAGE_CODE.split("-")[0]) if language_code == 'de': other_language_code = 'en' else: