示例#1
0
文件: git.py 项目: JDGrimes/weblate
def update_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.do_update(request, method=request.GET.get('method', None)):
        messages.success(request, _('All repositories were updated.'))

    return redirect(obj)
示例#2
0
文件: git.py 项目: JDGrimes/weblate
def push_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.do_push(request):
        messages.success(request, _('All repositories were pushed.'))

    return redirect(obj)
示例#3
0
文件: git.py 项目: saily/weblate
def reset_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_reset_translation(request.user, obj.subproject.project):
        raise PermissionDenied()

    return perform_reset(request, obj)
示例#4
0
文件: git.py 项目: barmi/weblate
def commit_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    obj.commit_pending(request)

    messages.info(request, _("All pending translations were committed."))

    return redirect(obj)
示例#5
0
文件: edit.py 项目: Yixf-Self/weblate
def save_zen(request, project, subproject, lang):
    '''
    Save handler for zen mode.
    '''
    translation = get_translation(request, project, subproject, lang)
    user_locked = translation.is_user_locked(request.user)

    form = TranslationForm(translation, None, request.POST)
    if not can_translate(request.user, translation):
        messages.error(
            request,
            _('You don\'t have privileges to save translations!')
        )
    elif not form.is_valid():
        messages.error(request, _('Failed to save translation!'))
    elif not user_locked:
        unit = form.cleaned_data['unit']

        perform_translation(unit, form, request)

    return render(
        request,
        'zen-response.html',
        {},
    )
示例#6
0
def search_replace(request, project, subproject, lang):
    translation = get_translation(request, project, subproject, lang)
    if not can_translate(request.user, translation):
        raise PermissionDenied()

    form = ReplaceForm(request.POST)

    if translation.subproject.locked or not form.is_valid():
        messages.error(request, _('Failed to process form!'))
        return redirect(translation)

    search_text = form.cleaned_data['search']
    replacement = form.cleaned_data['replacement']

    matching = translation.unit_set.filter(target__contains=search_text)
    updated = matching.count()

    for unit in matching.iterator():
        unit.target = unit.target.replace(search_text, replacement)
        unit.save_backend(request, change_action=Change.ACTION_REPLACE)

    import_message(
        request, updated,
        _('Search and replace completed, no strings were updated.'),
        ungettext(
            'Search and replace completed, %d string was updated.',
            'Search and replace completed, %d strings were updated.',
            updated
        )
    )

    return redirect(translation)
示例#7
0
文件: edit.py 项目: matejcik/weblate
def zen(request, project, subproject, lang):
    """
    Generic entry point for translating, suggesting and searching.
    """
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request,
        "zen.html",
        {
            "object": translation,
            "project": translation.subproject.project,
            "unitdata": unitdata,
            "search_query": search_result["query"],
            "filter_name": search_result["name"],
            "filter_count": len(search_result["ids"]),
            "last_section": search_result["last_section"],
            "search_id": search_result["search_id"],
            "offset": search_result["offset"],
        },
    )
示例#8
0
文件: git.py 项目: daleathan/weblate
def reset_translation(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    if not request.user.has_perm('vcs.reset', obj):
        raise PermissionDenied()

    return perform_reset(request, obj)
示例#9
0
文件: edit.py 项目: Yixf-Self/weblate
def auto_translation(request, project, subproject, lang):
    translation = get_translation(request, project, subproject, lang)
    project = translation.subproject.project
    if not can_automatic_translation(request.user, project):
        raise PermissionDenied()

    autoform = AutoForm(translation, request.user, request.POST)

    if translation.subproject.locked or not autoform.is_valid():
        messages.error(request, _('Failed to process form!'))
        return redirect(translation)

    updated = auto_translate(
        request.user,
        translation,
        autoform.cleaned_data['subproject'],
        autoform.cleaned_data['inconsistent'],
        autoform.cleaned_data['overwrite']
    )

    import_message(
        request, updated,
        _('Automatic translation completed, no strings were updated.'),
        ungettext(
            'Automatic translation completed, %d string was updated.',
            'Automatic translation completed, %d strings were updated.',
            updated
        )
    )

    return redirect(translation)
示例#10
0
文件: lock.py 项目: JDGrimes/weblate
def update_lock(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not obj.is_user_locked(request):
        obj.update_lock_time()

    return HttpResponse('ok')
示例#11
0
文件: edit.py 项目: saily/weblate
def zen(request, project, subproject, lang):
    """Generic entry point for translating, suggesting and searching."""
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request,
        'zen.html',
        {
            'object': translation,
            'project': translation.subproject.project,
            'unitdata': unitdata,
            'search_query': search_result['query'],
            'filter_name': search_result['name'],
            'filter_count': len(search_result['ids']),
            'last_section': search_result['last_section'],
            'search_url': search_result['url'],
            'offset': search_result['offset'],
            'search_form': search_result['form'].reset_offset(),
            'update_lock': translation.lock_user == request.user,
        }
    )
示例#12
0
文件: edit.py 项目: chervol/weblate
def zen(request, project, subproject, lang):
    '''
    Generic entry point for translating, suggesting and searching.
    '''
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request,
        'zen.html',
        {
            'object': translation,
            'project': translation.subproject.project,
            'unitdata': unitdata,
            'search_query': search_result['query'],
            'filter_name': search_result['name'],
            'filter_count': len(search_result['ids']),
            'last_section': search_result['last_section'],
            'search_id': search_result['search_id'],
            'offset': search_result['offset'],
        }
    )
示例#13
0
文件: git.py 项目: barmi/weblate
def update_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.do_update(request):
        messages.info(request, _("All repositories were updated."))

    return redirect(obj)
示例#14
0
文件: git.py 项目: barmi/weblate
def reset_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.do_reset(request):
        messages.info(request, _("All repositories have been reset."))

    return redirect(obj)
示例#15
0
文件: edit.py 项目: chervol/weblate
def auto_translation(request, project, subproject, lang):
    translation = get_translation(request, project, subproject, lang)
    translation.commit_pending(request)
    autoform = AutoForm(translation, request.POST)
    change = None
    if not translation.subproject.locked and autoform.is_valid():
        if autoform.cleaned_data['inconsistent']:
            units = translation.unit_set.filter_type(
                'inconsistent', translation
            )
        elif autoform.cleaned_data['overwrite']:
            units = translation.unit_set.all()
        else:
            units = translation.unit_set.filter(translated=False)

        sources = Unit.objects.filter(
            translation__language=translation.language,
            translated=True
        )
        if autoform.cleaned_data['subproject'] == '':
            sources = sources.filter(
                translation__subproject__project=translation.subproject.project
            ).exclude(
                translation=translation
            )
        else:
            subprj = SubProject.objects.get(
                project=translation.subproject.project,
                slug=autoform.cleaned_data['subproject']
            )
            sources = sources.filter(translation__subproject=subprj)

        for unit in units.iterator():
            update = sources.filter(checksum=unit.checksum)
            if update.exists():
                # Get first entry
                update = update[0]
                # No save if translation is same
                if unit.fuzzy == update.fuzzy and unit.target == update.target:
                    continue
                # Copy translation
                unit.fuzzy = update.fuzzy
                unit.target = update.target
                # Create signle change object for whole merge
                if change is None:
                    change = Change.objects.create(
                        action=Change.ACTION_AUTO,
                        translation=unit.translation,
                        user=request.user,
                        author=request.user
                    )
                # Save unit to backend
                unit.save_backend(request, False, False)

        messages.success(request, _('Automatic translation completed.'))
    else:
        messages.error(request, _('Failed to process form!'))

    return redirect(translation)
示例#16
0
def upload_translation(request, project, subproject, lang):
    """
    Handling of translation uploads.
    """
    obj = get_translation(request, project, subproject, lang)

    # Check method and lock
    if obj.is_locked(request.user):
        messages.error(request, _("Access denied."))
        return redirect(obj)

    # Get correct form handler based on permissions
    form = get_upload_form(request)(request.POST, request.FILES)

    # Check form validity
    if not form.is_valid():
        messages.error(request, _("Please fix errors in the form."))
        return redirect(obj)

    # Create author name
    author = None
    if (
        request.user.has_perm("trans.author_translation")
        and form.cleaned_data["author_name"] != ""
        and form.cleaned_data["author_email"] != ""
    ):
        author = "%s <%s>" % (form.cleaned_data["author_name"], form.cleaned_data["author_email"])

    # Check for overwriting
    overwrite = False
    if request.user.has_perm("trans.overwrite_translation"):
        overwrite = form.cleaned_data["overwrite"]

    # Do actual import
    try:
        ret, count = obj.merge_upload(
            request,
            request.FILES["file"],
            overwrite,
            author,
            merge_header=form.cleaned_data["merge_header"],
            merge_comments=form.cleaned_data["merge_comments"],
            method=form.cleaned_data["method"],
            fuzzy=form.cleaned_data["fuzzy"],
        )
        messages.info(
            request,
            ungettext(
                "Processed %d string from the uploaded files.", "Processed %d strings from the uploaded files.", count
            )
            % count,
        )
        if not ret:
            messages.warning(request, _("There were no new strings in uploaded file!"))
    except Exception as error:
        messages.error(request, _("File content merge failed: %s") % unicode(error))
        report_error(error, sys.exc_info(), request)

    return redirect(obj)
示例#17
0
文件: lock.py 项目: JDGrimes/weblate
def lock_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not obj.is_user_locked(request):
        obj.create_lock(request.user, True)
        messages.success(request, _('Translation is now locked for you.'))

    return redirect(obj)
示例#18
0
def unlock_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not obj.is_user_locked(request):
        obj.create_lock(None)
        messages.info(request, _("Translation is now open for translation updates."))

    return redirect(obj)
示例#19
0
文件: basic.py 项目: Insoleet/weblate
def show_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    last_changes = Change.objects.prefetch().filter(
        translation=obj
    )[:10]

    # Check locks
    obj.is_locked(request.user)

    # Get form
    form = get_upload_form(request)()

    # Is user allowed to do automatic translation?
    if request.user.has_perm('trans.automatic_translation'):
        autoform = AutoForm(obj)
    else:
        autoform = None

    # Search form for everybody
    search_form = SearchForm()

    # Review form for logged in users
    if request.user.is_anonymous():
        review_form = None
    else:
        review_form = ReviewForm(
            initial={
                'date': datetime.date.today() - datetime.timedelta(days=31)
            }
        )

    return render(
        request,
        'translation.html',
        {
            'object': obj,
            'project': obj.subproject.project,
            'form': form,
            'autoform': autoform,
            'search_form': search_form,
            'review_form': review_form,
            'last_changes': last_changes,
            'last_changes_url': urlencode(obj.get_kwargs()),
            'last_changes_rss': reverse(
                'rss-translation',
                kwargs=obj.get_kwargs(),
            ),
            'show_only_component': True,
            'other_translations': Translation.objects.filter(
                subproject__project=obj.subproject.project,
                language=obj.language,
            ).exclude(
                pk=obj.pk
            ),
        }
    )
示例#20
0
文件: js.py 项目: beck/weblate
def git_status_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    return render(
        request,
        'js/git-status.html',
        {
            'object': obj,
        }
    )
示例#21
0
def download_language_pack(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not obj.supports_language_pack():
        raise Http404('Language pack download not supported')

    return download_translation_file(
        obj,
        obj.subproject.file_format_cls.language_pack
    )
示例#22
0
def auto_translation(request, project, subproject, lang):
    translation = get_translation(request, project, subproject, lang)
    translation.commit_pending(request)
    autoform = AutoForm(translation, request.POST)
    change = None
    if not translation.subproject.locked and autoform.is_valid():
        if autoform.cleaned_data['inconsistent']:
            units = translation.unit_set.filter_type('inconsistent',
                                                     translation)
        elif autoform.cleaned_data['overwrite']:
            units = translation.unit_set.all()
        else:
            units = translation.unit_set.filter(translated=False)

        sources = Unit.objects.filter(
            translation__language=translation.language, translated=True)
        if autoform.cleaned_data['subproject'] == '':
            sources = sources.filter(
                translation__subproject__project=translation.subproject.project
            ).exclude(translation=translation)
        else:
            subprj = SubProject.objects.get(
                project=translation.subproject.project,
                slug=autoform.cleaned_data['subproject'])
            sources = sources.filter(translation__subproject=subprj)

        for unit in units.iterator():
            update = sources.filter(checksum=unit.checksum)
            if update.exists():
                # Get first entry
                update = update[0]
                # No save if translation is same
                if unit.fuzzy == update.fuzzy and unit.target == update.target:
                    continue
                # Copy translation
                unit.fuzzy = update.fuzzy
                unit.target = update.target
                # Create signle change object for whole merge
                if change is None:
                    change = Change.objects.create(
                        action=Change.ACTION_AUTO,
                        translation=unit.translation,
                        user=request.user,
                        author=request.user)
                # Save unit to backend
                unit.save_backend(request, False, False)

        messages.info(request, _('Automatic translation completed.'))
    else:
        messages.error(request, _('Failed to process form!'))

    return redirect(translation)
示例#23
0
def show_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    last_changes = Change.objects.for_translation(obj)[:10]

    # Check locks
    obj.is_locked(request.user)

    # Get form
    form = get_upload_form(request.user, obj)

    # Is user allowed to do automatic translation?
    if can_automatic_translation(request.user, obj.subproject.project):
        autoform = AutoForm(obj, request.user)
    else:
        autoform = None

    # Search form for everybody
    search_form = SearchForm()

    # Review form for logged in users
    if request.user.is_anonymous:
        review_form = None
    else:
        review_form = ReviewForm()

    replace_form = None
    if can_translate(request.user, obj):
        replace_form = ReplaceForm()

    return render(
        request,
        'translation.html',
        {
            'allow_index': True,
            'object': obj,
            'project': obj.subproject.project,
            'form': form,
            'autoform': autoform,
            'search_form': search_form,
            'review_form': review_form,
            'replace_form': replace_form,
            'last_changes': last_changes,
            'last_changes_url': urlencode(obj.get_kwargs()),
            'show_only_component': True,
            'other_translations': Translation.objects.prefetch().filter(
                subproject__project=obj.subproject.project,
                language=obj.language,
            ).exclude(
                pk=obj.pk
            ),
        }
    )
示例#24
0
文件: basic.py 项目: saily/weblate
def show_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    last_changes = Change.objects.for_translation(obj)[:10]

    # Check locks
    obj.is_locked(request.user)

    # Get form
    form = get_upload_form(request.user, obj)

    # Is user allowed to do automatic translation?
    if can_automatic_translation(request.user, obj.subproject.project):
        autoform = AutoForm(obj, request.user)
    else:
        autoform = None

    # Search form for everybody
    search_form = SearchForm()

    # Review form for logged in users
    if request.user.is_anonymous:
        review_form = None
    else:
        review_form = ReviewForm()

    replace_form = None
    if can_translate(request.user, obj):
        replace_form = ReplaceForm()

    return render(
        request,
        'translation.html',
        {
            'allow_index': True,
            'object': obj,
            'project': obj.subproject.project,
            'form': form,
            'autoform': autoform,
            'search_form': search_form,
            'review_form': review_form,
            'replace_form': replace_form,
            'last_changes': last_changes,
            'last_changes_url': urlencode(obj.get_kwargs()),
            'show_only_component': True,
            'other_translations': Translation.objects.prefetch().filter(
                subproject__project=obj.subproject.project,
                language=obj.language,
            ).exclude(
                pk=obj.pk
            ),
        }
    )
示例#25
0
文件: git.py 项目: sergey48k/weblate
def remove_translation(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    if not request.user.has_perm('translation.delete', obj):
        raise PermissionDenied()

    return execute_locked(
        request,
        obj.component,
        _('Translation has been removed.'),
        obj.remove,
        user=request.user,
    )
示例#26
0
def download_translation_format(request, project, component, lang, fmt):
    obj = get_translation(request, project, component, lang)

    form = SearchForm(request.GET)
    if form.is_valid():
        units = obj.unit_set.search(
            form.cleaned_data,
            translation=obj,
        )
    else:
        units = obj.unit_set.all()

    return download_translation_file(obj, fmt, units)
示例#27
0
def remove_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_remove_translation(request.user, obj.subproject.project):
        raise PermissionDenied()

    return execute_locked(
        request,
        obj.subproject,
        _('Translation has been removed.'),
        obj.remove,
        user=request.user,
    )
示例#28
0
文件: files.py 项目: dsnoeck/weblate
def download_translation_format(request, project, component, lang, fmt):
    obj = get_translation(request, project, component, lang)

    form = SearchForm(request.GET)
    if form.is_valid():
        units = obj.unit_set.search(
            form.cleaned_data,
            translation=obj,
        )
    else:
        units = obj.unit_set.all()

    return download_translation_file(obj, fmt, units)
示例#29
0
文件: git.py 项目: daleathan/weblate
def remove_translation(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    if not request.user.has_perm('translation.delete', obj):
        raise PermissionDenied()

    return execute_locked(
        request,
        obj.component,
        _('Translation has been removed.'),
        obj.remove,
        user=request.user,
    )
示例#30
0
文件: git.py 项目: saily/weblate
def remove_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_remove_translation(request.user, obj.subproject.project):
        raise PermissionDenied()

    return execute_locked(
        request,
        obj.subproject,
        _('Translation has been removed.'),
        obj.remove,
        user=request.user,
    )
示例#31
0
def unlock_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_lock_translation(request.user, obj.subproject.project):
        raise PermissionDenied()

    if not obj.is_user_locked(request.user):
        obj.create_lock(None)
        messages.success(
            request,
            _('Translation is now open for translation updates.')
        )

    return redirect(obj)
示例#32
0
def update_lock(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.update_lock(request.user, False):
        return JsonResponse(
            data={'status': True}
        )

    response = {
        'status': False,
        'message': _('Failed to update lock, probably session has expired.'),
    }

    return JsonResponse(data=response)
示例#33
0
def download_translation_format(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    form = DownloadForm(request.GET)
    if not form.is_valid():
        show_form_errors(request, form)
        return redirect(obj)

    units = obj.unit_set.search(
        form.cleaned_data,
        translation=obj,
    )

    return download_translation_file(obj, form.cleaned_data['format'], units)
示例#34
0
def update_lock(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if obj.update_lock(request.user, False):
        return JsonResponse(
            data={'status': True}
        )

    response = {
        'status': False,
        'message': _('Failed to update lock, probably session has expired.'),
    }

    return JsonResponse(data=response)
示例#35
0
def download_language_pack(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    if not obj.supports_language_pack():
        raise Http404("Language pack download not supported")

    filename, mime = obj.store.get_language_pack_meta()

    # Create response
    response = HttpResponse(obj.store.get_language_pack(), content_type=mime)

    # Fill in response headers
    response["Content-Disposition"] = "attachment; filename=%s" % filename

    return response
示例#36
0
文件: lock.py 项目: quinox/weblate
def unlock_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_lock_translation(request.user, obj.subproject.project):
        raise PermissionDenied()

    if not obj.is_user_locked(request.user):
        obj.create_lock(None)
        messages.success(
            request,
            _('Translation is now open for translation updates.')
        )

    return redirect(obj)
示例#37
0
def download_translation_format(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    form = DownloadForm(request.GET)
    if not form.is_valid():
        show_form_errors(request, form)
        return redirect(obj)

    units = obj.unit_set.search(
        form.cleaned_data,
        translation=obj,
    )

    return download_translation_file(obj, form.cleaned_data['format'], units)
示例#38
0
def download_language_pack(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    if not obj.supports_language_pack():
        raise Http404('Language pack download not supported')

    filename, mime = obj.store.get_language_pack_meta()

    # Create response
    response = HttpResponse(obj.store.get_language_pack(), content_type=mime)

    # Fill in response headers
    response['Content-Disposition'] = 'attachment; filename=%s' % filename

    return response
示例#39
0
文件: edit.py 项目: paour/weblate
def save_zen(request, project, subproject, lang):
    """
    Save handler for zen mode.
    """
    translation = get_translation(request, project, subproject, lang)
    form = TranslationForm(translation, None, request.POST)
    if not form.is_valid():
        messages.error(_("Failed to save translation!"))
    else:
        unit = form.cleaned_data["unit"]

        perform_translation(unit, form, request)

    return render(request, "zen-response.html")
示例#40
0
def show_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)
    last_changes = Change.objects.prefetch().filter(translation=obj)[:10]

    # Check locks
    obj.is_locked(request)

    # Get form
    form = get_upload_form(request)()

    # Is user allowed to do automatic translation?
    if request.user.has_perm('trans.automatic_translation'):
        autoform = AutoForm(obj)
    else:
        autoform = None

    # Search form for everybody
    search_form = SearchForm()

    # Review form for logged in users
    if request.user.is_anonymous():
        review_form = None
    else:
        review_form = ReviewForm(
            initial={
                'date': datetime.date.today() - datetime.timedelta(days=31)
            })

    return render(
        request, 'translation.html', {
            'object':
            obj,
            'form':
            form,
            'autoform':
            autoform,
            'search_form':
            search_form,
            'review_form':
            review_form,
            'last_changes':
            last_changes,
            'last_changes_url':
            urlencode(obj.get_kwargs()),
            'last_changes_rss':
            reverse(
                'rss-translation',
                kwargs=obj.get_kwargs(),
            ),
        })
示例#41
0
def download_translation_format(request, project, subproject, lang, fmt):
    obj = get_translation(request, project, subproject, lang)

    try:
        exporter = get_exporter(fmt)(obj.subproject.project, obj.language,
                                     get_site_url(obj.get_absolute_url()))
    except KeyError:
        raise Http404('File format not supported')

    for unit in obj.unit_set.iterator():
        exporter.add_unit(unit)

    # Save to response
    return exporter.get_response(
        '{{project}}-{0}-{{language}}.{{extension}}'.format(subproject))
示例#42
0
def load_zen(request, project, component, lang):
    """Load additional units for zen editor."""
    translation = get_translation(request, project, component, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request, 'zen-units.html', {
            'object': translation,
            'unitdata': unitdata,
            'search_query': search_result['query'],
            'search_url': search_result['url'],
            'last_section': search_result['last_section'],
        })
示例#43
0
def save_zen(request, project, subproject, lang):
    '''
    Save handler for zen mode.
    '''
    translation = get_translation(request, project, subproject, lang)
    form = TranslationForm(translation, None, request.POST)
    if not form.is_valid():
        messages.error(request, _('Failed to save translation!'))
    else:
        unit = form.cleaned_data['unit']

        perform_translation(unit, form, request)

    return render(
        request,
        'zen-response.html',
    )
示例#44
0
def download_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    srcfilename = obj.get_filename()

    # Construct file name (do not use real filename as it is usually not
    # that useful)
    filename = '%s-%s-%s.%s' % (project, subproject, lang, obj.store.extension)

    # Create response
    with open(srcfilename) as handle:
        response = HttpResponse(handle.read(), content_type=obj.store.mimetype)

    # Fill in response headers
    response['Content-Disposition'] = 'attachment; filename=%s' % filename

    return response
示例#45
0
文件: edit.py 项目: sergey48k/weblate
def save_zen(request, project, component, lang):
    """Save handler for zen mode."""
    def render_mesage(message):
        return render_to_string(
            'message.html',
            {'tags': message.tags, 'message': message.message}
        )

    translation = get_translation(request, project, component, lang)

    form = TranslationForm(
        request.user, translation, None, request.POST
    )
    translationsum = ''
    if not form.is_valid():
        show_form_errors(request, form)
    elif not request.user.has_perm('unit.edit', form.cleaned_data['unit']):
        messages.error(
            request, _('Insufficient privileges for saving translations.')
        )
    else:
        unit = form.cleaned_data['unit']

        perform_translation(unit, form, request)

        translationsum = hash_to_checksum(unit.get_target_hash())

    response = {
        'messages': '',
        'state': 'success',
        'translationsum': translationsum,
    }

    storage = get_messages(request)
    if storage:
        response['messages'] = '\n'.join([render_mesage(m) for m in storage])
        tags = set([m.tags for m in storage])
        if 'error' in tags:
            response['state'] = 'danger'
        elif 'warning' in tags:
            response['state'] = 'warning'
        elif 'info' in tags:
            response['state'] = 'info'

    return JsonResponse(data=response)
示例#46
0
def download_translation(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    kwargs = {}

    if 'format' in request.GET or 'type' in request.GET:
        form = DownloadForm(request.GET)
        if not form.is_valid():
            show_form_errors(request, form)
            return redirect(obj)

        kwargs['units'] = obj.unit_set.search(
            form.cleaned_data,
            translation=obj,
        )
        kwargs['fmt'] = form.cleaned_data['format']

    return download_translation_file(obj, **kwargs)
示例#47
0
def search_replace(request, project, subproject=None, lang=None):
    if subproject is None:
        obj = get_project(request, project)
        perms = {'project': obj}
        unit_set = Unit.objects.filter(translation__subproject__project=obj)
    elif lang is None:
        obj = get_subproject(request, project, subproject)
        perms = {'project': obj.project}
        unit_set = Unit.objects.filter(translation__subproject=obj)
    else:
        obj = get_translation(request, project, subproject, lang)
        perms = {'translation': obj}
        unit_set = obj.unit_set

    if not can_translate(request.user, **perms):
        raise PermissionDenied()

    form = ReplaceForm(request.POST)

    if not form.is_valid():
        messages.error(request, _('Failed to process form!'))
        return redirect(obj)

    search_text = form.cleaned_data['search']
    replacement = form.cleaned_data['replacement']

    matching = unit_set.filter(target__contains=search_text)
    updated = matching.count()

    for unit in matching.iterator():
        unit.target = unit.target.replace(search_text, replacement)
        unit.save_backend(request, change_action=Change.ACTION_REPLACE)

    import_message(
        request, updated,
        _('Search and replace completed, no strings were updated.'),
        ungettext(
            'Search and replace completed, %d string was updated.',
            'Search and replace completed, %d strings were updated.',
            updated
        )
    )

    return redirect(obj)
示例#48
0
def git_status_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_see_repository_status(request.user, obj.subproject.project):
        raise PermissionDenied()

    return render(
        request, 'js/git-status.html', {
            'object':
            obj,
            'project':
            obj.subproject.project,
            'changes':
            Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                subproject=obj.subproject,
            )[:10],
            'statuses': [(None, obj.subproject.repository.status)],
        })
示例#49
0
def load_zen(request, project, subproject, lang):
    '''
    Loads additional units for zen editor.
    '''
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    return render_to_response(
        'zen-units.html',
        RequestContext(
            request,
            {
                'object': translation,
                'unitdata': unitdata,
                'search_query': search_result['query'],
                'last_section': search_result['last_section'],
            }
        )
    )
示例#50
0
文件: edit.py 项目: PosX/weblate
def save_zen(request, project, subproject, lang):
    """Save handler for zen mode."""
    translation = get_translation(request, project, subproject, lang)

    form = TranslationForm(request.user, translation, None, request.POST)
    if not form.is_valid():
        messages.error(request, _('Failed to save translation!'))
    elif not can_translate(request.user, form.cleaned_data['unit']):
        messages.error(request,
                       _('Insufficient privileges for saving translations.'))
    else:
        unit = form.cleaned_data['unit']

        perform_translation(unit, form, request)

    return render(
        request,
        'zen-response.html',
        {},
    )
示例#51
0
def new_unit(request, project, component, lang):
    translation = get_translation(request, project, component, lang)
    if not request.user.has_perm('unit.add', translation):
        raise PermissionDenied()

    form = NewUnitForm(request.user, request.POST)
    if not form.is_valid():
        show_form_errors(request, form)
    else:
        key = form.cleaned_data['key']
        value = form.cleaned_data['value'][0]

        if translation.unit_set.filter(context=key).exists():
            messages.error(
                request, _('Translation with this key seem to already exist!'))
        else:
            translation.new_unit(request, key, value)
            messages.success(request, _('New string has been added.'))

    return redirect(translation)
示例#52
0
文件: edit.py 项目: sergey48k/weblate
def auto_translation(request, project, component, lang):
    translation = get_translation(request, project, component, lang)
    project = translation.component.project
    if not request.user.has_perm('translation.auto', project):
        raise PermissionDenied()

    autoform = AutoForm(translation, request.user, request.POST)

    if translation.component.locked or not autoform.is_valid():
        messages.error(request, _('Failed to process form!'))
        show_form_errors(request, autoform)
        return redirect(translation)

    auto = AutoTranslate(
        request.user,
        translation,
        autoform.cleaned_data['type'],
        request=request
    )

    if autoform.cleaned_data['auto_source'] == 'mt':
        auto.process_mt(
            autoform.cleaned_data['engines'],
            autoform.cleaned_data['threshold'],
        )
    else:
        auto.process_others(
            autoform.cleaned_data['component'],
        )

    import_message(
        request, auto.updated,
        _('Automatic translation completed, no strings were updated.'),
        ungettext(
            'Automatic translation completed, %d string was updated.',
            'Automatic translation completed, %d strings were updated.',
            auto.updated
        )
    )

    return redirect(translation)
示例#53
0
def zen(request, project, subproject, lang):
    '''
    Generic entry point for translating, suggesting and searching.
    '''
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request, 'zen.html', {
            'object': translation,
            'unitdata': unitdata,
            'search_query': search_result['query'],
            'filter_name': search_result['name'],
            'filter_count': len(search_result['ids']),
            'last_section': search_result['last_section'],
            'search_id': search_result['search_id'],
        })
示例#54
0
def zen(request, project, subproject, lang):
    '''
    Generic entry point for translating, suggesting and searching.
    '''
    translation = get_translation(request, project, subproject, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    return render_to_response(
        'zen.html',
        RequestContext(
            request,
            {
                'object': translation,
                'unitdata': unitdata,
                'search_query': search_result['query'],
                'filter_name': search_result['name'],
                'filter_count': len(search_result['ids']),
                'last_section': search_result['last_section'],
            }
        )
    )
示例#55
0
def parse_url(request, project, component=None, lang=None):
    context = {}
    if component is None:
        obj = get_project(request, project)
        unit_set = Unit.objects.filter(translation__component__project=obj)
        context['project'] = obj
    elif lang is None:
        obj = get_component(request, project, component)
        unit_set = Unit.objects.filter(translation__component=obj)
        context['component'] = obj
        context['project'] = obj.project
    else:
        obj = get_translation(request, project, component, lang)
        unit_set = obj.unit_set
        context['translation'] = obj
        context['component'] = obj.component
        context['project'] = obj.component.project

    if not request.user.has_perm('unit.edit', obj):
        raise PermissionDenied()

    return obj, unit_set, context
示例#56
0
def save_zen(request, project, subproject, lang):
    """Save handler for zen mode."""
    translation = get_translation(request, project, subproject, lang)
    user_locked = translation.is_user_locked(request.user)

    form = TranslationForm(request.user.profile, translation, None,
                           request.POST)
    if not can_translate(request.user, translation):
        messages.error(request,
                       _('You don\'t have privileges to save translations!'))
    elif not form.is_valid():
        messages.error(request, _('Failed to save translation!'))
    elif not user_locked:
        unit = form.cleaned_data['unit']

        perform_translation(unit, form, request)

    return render(
        request,
        'zen-response.html',
        {},
    )
示例#57
0
def zen(request, project, component, lang):
    """Generic entry point for translating, suggesting and searching."""
    translation = get_translation(request, project, component, lang)
    search_result, unitdata = get_zen_unitdata(translation, request)

    # Handle redirects
    if isinstance(search_result, HttpResponse):
        return search_result

    return render(
        request, 'zen.html', {
            'object': translation,
            'project': translation.component.project,
            'unitdata': unitdata,
            'search_query': search_result['query'],
            'filter_name': search_result['name'],
            'filter_count': len(search_result['ids']),
            'last_section': search_result['last_section'],
            'search_url': search_result['url'],
            'offset': search_result['offset'],
            'search_form': search_result['form'].reset_offset(),
        })
示例#58
0
def git_status_translation(request, project, component, lang):
    obj = get_translation(request, project, component, lang)

    if not request.user.has_perm('meta:vcs.status', obj):
        raise PermissionDenied()

    target = obj.component
    if target.is_repo_link:
        target = target.linked_component

    return render(
        request,
        'js/git-status.html',
        {
            'object': obj,
            'translation': obj,
            'project': obj.component.project,
            'changes': Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                component=target,
            )[:10],
            'statuses': [(None, obj.component.repository.status)],
        }
    )
示例#59
0
文件: feeds.py 项目: AlexMost/weblate
 def get_object(self, request, project, subproject, lang):
     return get_translation(request, project, subproject, lang)
示例#60
0
文件: git.py 项目: blockgiven/weblate
def reset_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    return perform_reset(request, obj)