diff --git a/shared/multilingual/utils/fields.py b/shared/multilingual/utils/fields.py index 1be88df..a0da5d8 100644 --- a/shared/multilingual/utils/fields.py +++ b/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']