from django.conf import settings from django.utils.translation import ugettext as _ from django.utils.encoding import force_unicode from django.utils.safestring import mark_safe from django import forms from simple_translation.translation_pool import translation_pool class LanguageWidget(forms.HiddenInput): class Media: # use getattr until django-cms reccomends django 1.3 css = { 'all': ['%ssimple_translation/widget.css' % getattr(settings, 'STATIC_URL', getattr(settings, 'MEDIA_URL', ''))] } def __init__(self, *args, **kwargs): self.translation_of_obj = kwargs.pop('translation_of_obj') self.translation_obj = kwargs.pop('translation_obj') super(LanguageWidget, self).__init__(*args, **kwargs) is_hidden = False button_js = u''' ''' def render(self, name, value, attrs=None): hidden_input = super(LanguageWidget, self).render(name, value, attrs=attrs) lang_dict = dict(settings.LANGUAGES) current_languages = [] translation_of_obj = self.translation_of_obj if translation_of_obj and translation_of_obj.pk: info = translation_pool.get_info(translation_of_obj.__class__) translation_of_obj = translation_pool.annotate_with_translations(translation_of_obj) for translation in translation_of_obj.translations: current_languages.append(getattr(translation, info.language_field)) buttons = [] for lang in settings.LANGUAGES: current_lang = lang[0] == value language_exists = lang[0] in current_languages button_classes = u'class="button%s"' % ( current_lang and ' simple-translation-current' or language_exists and ' simple-translation-exists' or '', ) disabled = current_lang and ' disabled="disabled"' or '' buttons.append(u''' ''' % ( lang[0], button_classes, lang[0], lang[1], disabled ) ) if self.translation_obj.pk and len(current_languages) > 1: lang_descr = _('Delete %s translation') % force_unicode(lang_dict[str(value)]) buttons.append(u'''
''' % (value, lang_descr)) tabs = u"""%s%s%s""" % (self.button_js, hidden_input, u''.join(buttons)) return mark_safe(tabs)