Browse Source

Allow arbitrary length language codes, but strip part after "-".

master
Erik Stein 7 years ago
parent
commit
7184337a01
  1. 43
      shared/utils/translation.py

43
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_<language_code>`, 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<code>[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:

Loading…
Cancel
Save