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.component, 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) args = ( request.user.id, translation.id, autoform.cleaned_data["mode"], autoform.cleaned_data["filter_type"], autoform.cleaned_data["auto_source"], autoform.cleaned_data["component"], autoform.cleaned_data["engines"], autoform.cleaned_data["threshold"], ) if settings.CELERY_TASK_ALWAYS_EAGER: messages.success(request, auto_translate(*args)) else: task = auto_translate.delay(*args) messages.success(request, _("Automatic translation in progress"), f"task:{task.id}") return redirect(translation)
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)
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)
def autotranslate(self, request, **kwargs): translation = self.get_object() if not request.user.has_perm("translation.auto", translation): self.permission_denied(request, message="Can not auto translate") autoform = AutoForm(translation.component, request.data) if translation.component.locked or not autoform.is_valid(): return Response( data={ "result": "Unsuccessful", "detail": "Failed to process autotranslation data!", }, status=status.HTTP_400_BAD_REQUEST, ) args = ( request.user.id, translation.id, autoform.cleaned_data["mode"], autoform.cleaned_data["filter_type"], autoform.cleaned_data["auto_source"], autoform.cleaned_data["component"], autoform.cleaned_data["engines"], autoform.cleaned_data["threshold"], ) return Response( data={ "result": "Success", "details": auto_translate(*args) }, status=status.HTTP_200_OK, )
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)
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)
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.user, obj.subproject.project)() # 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( initial={ 'date': timezone.now().date() - datetime.timedelta(days=31) }) replace_form = None if can_translate(request.user, obj): replace_form = ReplaceForm() return render( request, 'translation.html', { '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), })
def auto_translation(request, project, subproject, lang): obj = get_object_or_404(Translation, language__code = lang, subproject__slug = subproject, subproject__project__slug = project, enabled = True) obj.commit_pending() autoform = AutoForm(obj, request.POST) change = None if not obj.subproject.locked and autoform.is_valid(): if autoform.cleaned_data['inconsistent']: units = obj.unit_set.filter_type('inconsistent') elif autoform.cleaned_data['overwrite']: units = obj.unit_set.all() else: units = obj.unit_set.filter(translated = False) sources = Unit.objects.filter(translation__language = obj.language, translated = True) if autoform.cleaned_data['subproject'] == '': sources = sources.filter(translation__subproject__project = obj.subproject.project).exclude(translation = obj) else: subprj = SubProject.objects.get(project = obj.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.count() > 0: # 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(unit = unit, user = 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 HttpResponseRedirect(obj.get_absolute_url())
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(request.user, translation, 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)
def autotranslate(self, request, **kwargs): translation = self.get_object() if not request.user.has_perm("translation.auto", translation): self.permission_denied(request, "Can not auto translate") autoform = AutoForm(translation.component, request.data) if translation.component.locked or not autoform.is_valid(): raise ParseError("Failed to process autotranslation data!", "invalid") args = ( request.user.id, translation.id, autoform.cleaned_data["mode"], autoform.cleaned_data["filter_type"], autoform.cleaned_data["auto_source"], autoform.cleaned_data["component"], autoform.cleaned_data["engines"], autoform.cleaned_data["threshold"], ) return Response( data={"details": auto_translate(*args)}, status=HTTP_200_OK, )
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) last_changes = Change.objects.prefetch().filter( translation=obj).order_by('-timestamp')[: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_to_response( 'translation.html', RequestContext( request, { '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(), ), }))
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) last_changes = Change.objects.for_translation(obj)[:10] # 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( initial={'exclude_user': request.user.username} ) replace_form = None if can_translate(request.user, translation=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, 'new_unit_form': NewUnitForm(), '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 ), } )
def show_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) obj.stats.ensure_all() last_changes = Change.objects.prefetch().filter(translation=obj)[:10] # Get form form = get_upload_form(request.user, obj) # Is user allowed to do automatic translation? if request.user.has_perm('translation.auto', obj): mass_state_form = MassStateForm(request.user, obj) else: mass_state_form = None # Is user allowed to do automatic translation? if request.user.has_perm('translation.auto', obj): 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( initial={'exclude_user': request.user.username}) if request.user.has_perm('unit.edit', obj): replace_form = ReplaceForm() else: replace_form = None return render( request, 'translation.html', { 'allow_index': True, 'object': obj, 'project': obj.component.project, 'form': form, 'download_form': DownloadForm(), 'autoform': autoform, 'search_form': search_form, 'review_form': review_form, 'replace_form': replace_form, 'mass_state_form': mass_state_form, 'new_unit_form': NewUnitForm( request.user, initial={ 'value': Unit(translation=obj, id_hash=-1), }, ), 'last_changes': last_changes, 'last_changes_url': urlencode(obj.get_reverse_url_kwargs()), 'show_only_component': True, 'other_translations': prefetch_stats(Translation.objects.prefetch().filter( component__project=obj.component.project, language=obj.language, ).exclude(pk=obj.pk)), 'exporters': list_exporters(), })
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) obj.stats.ensure_all() last_changes = Change.objects.for_translation(obj)[:10] # 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( initial={'exclude_user': request.user.username}) if can_translate(request.user, translation=obj): replace_form = ReplaceForm() mass_state_form = MassStateForm(request.user, obj) else: replace_form = None mass_state_form = None 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, 'mass_state_form': mass_state_form, 'new_unit_form': NewUnitForm(), 'last_changes': last_changes, 'last_changes_url': urlencode(obj.get_kwargs()), 'show_only_component': True, 'pending_fulltext': obj.unit_set.filter(id__in=IndexUpdate.objects.filter( to_delete=False).values('unitid')).exists(), 'other_translations': prefetch_stats(Translation.objects.prefetch().filter( subproject__project=obj.subproject.project, language=obj.language, ).exclude(pk=obj.pk)), })