Browse Source

Try all available language in get_translated_value.

master
Erik Stein 7 years ago
parent
commit
488c03d7a3
  1. 31
      shared/multilingual/utils/fields.py

31
shared/multilingual/utils/fields.py

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django import forms
from django.conf import settings
from django.contrib.postgres.fields import JSONField
from django.db import models
@ -9,13 +10,17 @@ from django.utils.translation import string_concat
from shared.utils.translation import get_language, lang_suffix
def get_translated_value(name):
def get_translated_value(fieldname):
def translated_value(obj):
language = get_language()
val = obj.__dict__[lang_suffix(language, name)]
# FIXME Try all available languages, not only the default one
val = obj.__dict__[lang_suffix(language, fieldname)]
if not val:
val = obj.__dict__[lang_suffix(settings.LANGUAGE_CODE, name)]
other_languages = list(dict(settings.LANGUAGES).keys())
other_languages.remove(language)
for lang in other_languages:
val = obj.__dict__[lang_suffix(lang, fieldname)]
if val:
break
return val
return translated_value
@ -39,6 +44,7 @@ class TranslatableFieldMixin:
"""
base_class = None
formfield_class = forms.fields.CharField
extra_parameter_names = []
def __init__(self, verbose_name=None, **kwargs):
@ -93,15 +99,30 @@ class TranslatableFieldMixin:
setattr(cls, name, property(get_translated_value(name)))
def formfield(self, **kwargs):
defaults = {
'form_class': self.formfield_class,
}
defaults.update(kwargs)
return super(TranslatableFieldMixin, self).formfield(**defaults)
class TranslatableCharField(TranslatableFieldMixin, models.CharField):
pass
class TranslatableTextField(TranslatableFieldMixin, models.TextField):
class TranslatableFormField(forms.fields.CharField):
# def __init__(self, *args, **kwargs):
# kwargs.update({'widget': CKEditorWidget(config_name=config_name, extra_plugins=extra_plugins,
# external_plugin_resources=external_plugin_resources)})
# super(RichTextFormField, self).__init__(*args, **kwargs)
pass
class TranslatableTextField(TranslatableFieldMixin, models.TextField):
formfield_class = forms.fields.CharField
class TranslatableJSONField(TranslatableFieldMixin, JSONField):
extra_parameter_names = ['encoder']

Loading…
Cancel
Save