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): 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) project = translation.subproject.project if not can_automatic_translation(request.user, project): raise PermissionDenied() 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.for_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): translation = get_translation(request, project, subproject, lang) project = translation.subproject.project if not can_automatic_translation(request.user, project): raise PermissionDenied() 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)