Example #1
0
def get_preferred_translation_from_lang(obj, language):
    if not hasattr(obj, 'translations'):
        translation_pool.annotate_with_translations(obj)
    for translation in obj.translations:
        if translation.language == language:
            return translation
    return obj.translations[0]
Example #2
0
def get_preferred_translation_from_lang(obj, language):
    if not hasattr(obj, 'translations'):
        translation_pool.annotate_with_translations(obj)
    for translation in obj.translations:
        if translation.language == language:
            return translation
    return obj.translations[0]
Example #3
0
def get_preferred_translation_from_request(obj, request):
    language = getattr(request, 'LANGUAGE_CODE', settings.LANGUAGE_CODE)
    if not hasattr(obj, 'translations'):
        translation_pool.annotate_with_translations(obj)
    for translation in obj.translations:
        if translation.language == language:
            return translation
    return obj.translations[0]
Example #4
0
def get_preferred_translation_from_request(obj, request):
    language = getattr(request, 'LANGUAGE_CODE', settings.LANGUAGE_CODE)
    if not hasattr(obj, 'translations'):
        translation_pool.annotate_with_translations(obj)
    for translation in obj.translations:
        if translation.language == language:
            return translation
    return obj.translations[0]
Example #5
0
    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''' <input onclick="trigger_lang_button(this,'./?language=%s');"
                %s name="%s" value="%s" type="button"%s />''' % (
                    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'''<p class="deletelink-box simple-translation-delete"><a href="delete-translation/?language=%s" class="deletelink deletetranslation">%s</a></p>''' % (value, lang_descr))
                    
        tabs = u"""%s%s%s""" % (self.button_js, hidden_input, u''.join(buttons))

        return mark_safe(tabs)
Example #6
0
 def items(self, obj):
     items = self.get_queryset(obj)[:10]
     items = [
         get_preferred_translation_from_lang(title, self.language_code)
         for title in translation_pool.annotate_with_translations(items)
     ]
     return items
Example #7
0
    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''' <input onclick="trigger_lang_button(this,'./?language=%s');"
                %s name="%s" value="%s" type="button"%s />''' %
                (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_text(
                lang_dict[str(value)])
            buttons.append(
                u'''<p class="deletelink-box simple-translation-delete"><a href="delete-translation/?language=%s" class="deletelink deletetranslation">%s</a></p>'''
                % (value, lang_descr))

        tabs = u"""%s%s%s""" % (self.button_js, hidden_input,
                                u''.join(buttons))

        return mark_safe(tabs)
def annotate_with_translations(object_or_list):
    return translation_pool.annotate_with_translations(object_or_list)
Example #9
0
 def languages(self, obj):
         lnk = '<a href="%s/?language=%s">%s</a>'
         trans_list = [ (obj.pk, \
         	getattr(t, self.language_field), getattr(t, self.language_field).upper())
             	for t in getattr(translation_pool.annotate_with_translations(obj), 'translations') or []]
         return ' '.join([lnk % t for t in trans_list])
Example #10
0
 def description(self, obj):
     return getattr(translation_pool.annotate_with_translations(obj), 'translations', []) \
     	and unicode(translation_pool.annotate_with_translations(obj).translations[0]) or u'No translations'
Example #11
0
        def delete_translation(self, request, object_id, extra_context=None):
    
            language = get_language_from_request(request)
 
            opts = self.model._meta
            translationopts = self.translated_model._meta
            app_label = translationopts.app_label
    
            try:
                obj = self.queryset(request).get(pk=unquote(object_id))
            except self.model.DoesNotExist:
                # Don't raise Http404 just yet, because we haven't checked
                # permissions yet. We don't want an unauthenticated user to be able
                # to determine whether a given object exists.
                obj = None
    
            if not self.has_delete_permission(request, obj):
                raise PermissionDenied
    
            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
    
            if not len(translation_pool.annotate_with_translations(obj).translations) > 1:
                raise Http404(_('There only exists one translation for this page'))
    
            translationobj = get_object_or_404(self.translated_model, **{self.translation_of_field + '__id': object_id, 'language': language})
            using = router.db_for_write(self.model)
            deleted_objects, perms_needed = get_deleted_objects([translationobj], translationopts, request.user, self.admin_site, using)        
    
            if request.method == 'POST':
                if perms_needed:
                    raise PermissionDenied
    
                message = _('%(obj_name)s with language %(language)s was deleted') % {
                    'language': [name for code, name in settings.LANGUAGES if code == language][0], 'obj_name': force_unicode(translationopts.verbose_name)}
                self.log_change(request, translationobj, message)
                self.message_user(request, message)
    
                translationobj.delete()
    
                if not self.has_change_permission(request, None):
                    return HttpResponseRedirect("../../../../")
                return HttpResponseRedirect("../../")
    
            context = {
                "title": _("Are you sure?"),
                "object_name": force_unicode(translationopts.verbose_name),
                "object": translationobj,
                "deleted_objects": deleted_objects,
                "perms_lacking": perms_needed,
                "opts": translationopts,
                "root_path": self.admin_site.root_path,
                "app_label": app_label,
            }
            context.update(extra_context or {})
            context_instance = RequestContext(request, current_app=self.admin_site.name)
            return render_to_response(self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" % (app_label, translationopts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % app_label,
                "admin/delete_confirmation.html"
            ], context, context_instance=context_instance)
Example #12
0
 def items(self, obj):
     items = self.get_queryset(obj)[:10]
     items = [get_preferred_translation_from_lang(title, self.language_code) for title in translation_pool.annotate_with_translations(items)]
     return items
Example #13
0
 def __unicode__(self):
     return getattr(translation_pool.annotate_with_translations(self), 'translations', []) \
         	and unicode(translation_pool.annotate_with_translations(self).translations[0]) or u'No translations'
Example #14
0
 def description(self, obj):
     return getattr(translation_pool.annotate_with_translations(obj), 'translations', []) \
     	and unicode(translation_pool.annotate_with_translations(obj).translations[0]) or u'No translations'
Example #15
0
 def languages(self, obj):
         lnk = '<a href="%s/?language=%s">%s</a>'
         trans_list = [ (obj.pk, \
         	getattr(t, self.language_field), getattr(t, self.language_field).upper())
             	for t in getattr(translation_pool.annotate_with_translations(obj), 'translations') or []]
         return ' '.join([lnk % t for t in trans_list])
Example #16
0
def annotate_with_translations(object_or_list):
    return translation_pool.annotate_with_translations(object_or_list)
Example #17
0
        def delete_translation(self, request, object_id, extra_context=None):

            language = get_language_from_request(request)

            opts = self.model._meta
            translationopts = self.translated_model._meta
            app_label = translationopts.app_label

            try:
                obj = self.queryset(request).get(pk=unquote(object_id))
            except self.model.DoesNotExist:
                # Don't raise Http404 just yet, because we haven't checked
                # permissions yet. We don't want an unauthenticated user to be able
                # to determine whether a given object exists.
                obj = None

            if not self.has_delete_permission(request, obj):
                raise PermissionDenied

            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': escape(object_id)})

            if not len(translation_pool.annotate_with_translations(obj).translations) > 1:
                raise Http404(_('There only exists one translation for this page'))

            translationobj = get_object_or_404(self.translated_model, **{self.translation_of_field + '__id': object_id, 'language': language})

            if django.VERSION[1] > 2: # pragma: no cover
                # WARNING: Django 1.3 is not officially supported yet!
                using = router.db_for_read(self.model)
                kwargs = {
                    'admin_site': self.admin_site,
                    'user': request.user,
                    'using': using
                }
            else:
                kwargs = {
                    'admin_site': self.admin_site,
                    'user': request.user,
                }

            deleted_objects, perms_needed = get_deleted_objects([translationobj], translationopts, **kwargs)[:2]

            if request.method == 'POST':
                if perms_needed:
                    raise PermissionDenied

                message = _('%(obj_name)s with language %(language)s was deleted') % {
                    'language': [name for code, name in settings.LANGUAGES if code == language][0], 'obj_name': force_text(translationopts.verbose_name)}
                self.log_change(request, translationobj, message)
                self.message_user(request, message)

                translationobj.delete()

                if not self.has_change_permission(request, None):
                    return HttpResponseRedirect("../../../../")
                return HttpResponseRedirect("../../")

            context = {
                "title": _("Are you sure?"),
                "object_name": force_text(translationopts.verbose_name),
                "object": translationobj,
                "deleted_objects": deleted_objects,
                "perms_lacking": perms_needed,
                "opts": translationopts,
                "root_path": self.admin_site.root_path,
                "app_label": app_label,
            }
            context.update(extra_context or {})
            context_instance = RequestContext(request, current_app=self.admin_site.name)
            return render_to_response(self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" % (app_label, translationopts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % app_label,
                "admin/delete_confirmation.html"
            ], context, context_instance=context_instance)