def data_project(request, project): obj = get_project(request, project) return render_to_response('data.html', RequestContext(request, { 'object': obj, 'api_docs': weblate.get_doc_url('api', 'exports'), 'rss_docs': weblate.get_doc_url('api', 'rss'), }))
def reset_project(request, project): obj = get_project(request, project) if obj.do_reset(request): messages.info(request, _('All repositories have been reset.')) return HttpResponseRedirect(obj.get_absolute_url())
def commit_project(request, project): obj = get_project(request, project) obj.commit_pending(request) messages.info(request, _('All pending translations were committed.')) return redirect(obj)
def reset_project(request, project): obj = get_project(request, project) if obj.do_reset(request): messages.info(request, _('All repositories have been reset.')) return redirect(obj)
def edit_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404(Dictionary, project=prj, language=lang, id=request.GET.get("id")) if request.method == "POST": form = WordForm(request.POST) if form.is_valid(): word.source = form.cleaned_data["source"] word.target = form.cleaned_data["target"] word.save() return HttpResponseRedirect(reverse("show_dictionary", kwargs={"project": prj.slug, "lang": lang.code})) else: form = WordForm(initial={"source": word.source, "target": word.target}) return render_to_response( "edit_dictionary.html", RequestContext( request, { "title": _("%(language)s dictionary for %(project)s") % {"language": lang, "project": prj}, "project": prj, "language": lang, "form": form, }, ), )
def download_dictionary(request, project, lang): """ Exports dictionary into various formats. """ prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) # Parse parameters export_format = None if "format" in request.GET: export_format = request.GET["format"] if not export_format in ["csv", "po", "tbx"]: export_format = "csv" # Grab all words words = Dictionary.objects.filter(project=prj, language=lang).order_by("source") # Translate toolkit based export if export_format in ("po", "tbx"): return download_dictionary_ttkit(export_format, prj, lang, words) # Manually create CSV file response = HttpResponse(mimetype="text/csv; charset=utf-8") filename = "dictionary-%s-%s.csv" % (prj.slug, lang.code) response["Content-Disposition"] = "attachment; filename=%s" % filename writer = csv.writer(response) for word in words.iterator(): writer.writerow((word.source.encode("utf8"), word.target.encode("utf8"))) return response
def git_status_project(request, project): obj = get_project(request, project) return render_to_response('js/git-status.html', RequestContext(request, { 'object': obj, }))
def push_project(request, project): obj = get_project(request, project) if obj.do_push(request): messages.info(request, _('All repositories were pushed.')) return redirect(obj)
def update_project(request, project): obj = get_project(request, project) if obj.do_update(request): messages.info(request, _('All repositories were updated.')) return redirect(obj)
def commit_project(request, project): obj = get_project(request, project) obj.commit_pending(request) messages.info(request, _('All pending translations were committed.')) return HttpResponseRedirect(obj.get_absolute_url())
def edit_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.GET.get('id') ) if request.method == 'POST': form = WordForm(request.POST) if form.is_valid(): word.source = form.cleaned_data['source'] word.target = form.cleaned_data['target'] word.save() return HttpResponseRedirect(reverse( 'show_dictionary', kwargs={'project': prj.slug, 'lang': lang.code} )) else: form = WordForm( initial={'source': word.source, 'target': word.target} ) return render_to_response('edit_dictionary.html', RequestContext(request, { 'title': _('%(language)s dictionary for %(project)s') % {'language': lang, 'project': prj}, 'project': prj, 'language': lang, 'form': form, }))
def edit_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.GET.get('id') ) if request.method == 'POST': form = WordForm(request.POST) if form.is_valid(): word.source = form.cleaned_data['source'] word.target = form.cleaned_data['target'] word.save() return HttpResponseRedirect(reverse( 'show_dictionary', kwargs={'project': prj.slug, 'lang': lang.code} )) else: form = WordForm( initial={'source': word.source, 'target': word.target} ) return render_to_response('edit_dictionary.html', RequestContext(request, { 'title': _('%(language)s dictionary for %(project)s') % {'language': lang, 'project': prj}, 'project': prj, 'language': lang, 'form': form, }))
def push_project(request, project): obj = get_project(request, project) if obj.do_push(request): messages.info(request, _('All repositories were pushed.')) return HttpResponseRedirect(obj.get_absolute_url())
def show_project(request, project): obj = get_project(request, project) dicts = Dictionary.objects.filter( project=obj ).values_list( 'language', flat=True ).distinct() last_changes = Change.objects.prefetch().filter( Q(translation__subproject__project=obj) | Q(dictionary__project=obj) ).order_by('-timestamp')[:10] return render_to_response('project.html', RequestContext(request, { 'object': obj, 'dicts': Language.objects.filter(id__in=dicts), 'last_changes': last_changes, 'last_changes_rss': reverse( 'rss-project', kwargs={'project': obj.slug} ), 'last_changes_url': urlencode( {'project': obj.slug} ), }))
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if (request.method == 'POST' and request.user.has_perm('trans.add_dictionary')): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return HttpResponseRedirect(request.get_full_path()) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by('source') limit = request.GET.get('limit', 25) page = request.GET.get('page', 1) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. words = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) return render_to_response('dictionary.html', RequestContext(request, { 'title': _('%(language)s dictionary for %(project)s') % {'language': lang, 'project': prj}, 'project': prj, 'language': lang, 'words': words, 'form': form, 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, }))
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if (request.method == 'POST' and request.user.has_perm('trans.add_dictionary')): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( project=prj, language=lang, source=form.cleaned_data['source'], target=form.cleaned_data['target'] ) return HttpResponseRedirect(request.get_full_path()) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter( project=prj, language=lang ).order_by('source') limit = request.GET.get('limit', 25) page = request.GET.get('page', 1) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data['letter'] != '': words = words.filter( source__istartswith=letterform.cleaned_data['letter'] ) letter = letterform.cleaned_data['letter'] else: letter = '' paginator = Paginator(words, limit) try: words = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. words = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) return render_to_response('dictionary.html', RequestContext(request, { 'title': _('%(language)s dictionary for %(project)s') % {'language': lang, 'project': prj}, 'project': prj, 'language': lang, 'words': words, 'form': form, 'uploadform': uploadform, 'letterform': letterform, 'letter': letter, }))
def delete_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404(Dictionary, project=prj, language=lang, id=request.POST.get("id")) word.delete() return HttpResponseRedirect(reverse("show_dictionary", kwargs={"project": prj.slug, "lang": lang.code}))
def update_project(request, project): ''' API hook for updating git repos. ''' if not appsettings.ENABLE_HOOKS: return HttpResponseNotAllowed([]) obj = get_project(request, project, True) perform_update(obj) return HttpResponse('update triggered')
def data_project(request, project): obj = get_project(request, project) site = Site.objects.get_current() return render_to_response('data.html', RequestContext(request, { 'object': obj, 'site_domain': site.domain, 'api_docs': weblate.get_doc_url('api', 'exports'), 'rss_docs': weblate.get_doc_url('api', 'rss'), }))
def show_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == "POST" and request.user.has_perm("trans.add_dictionary"): form = WordForm(request.POST) if form.is_valid(): Dictionary.objects.create( project=prj, language=lang, source=form.cleaned_data["source"], target=form.cleaned_data["target"] ) return HttpResponseRedirect(request.get_full_path()) else: form = WordForm() uploadform = DictUploadForm() words = Dictionary.objects.filter(project=prj, language=lang).order_by("source") limit = request.GET.get("limit", 25) page = request.GET.get("page", 1) letterform = LetterForm(request.GET) if letterform.is_valid() and letterform.cleaned_data["letter"] != "": words = words.filter(source__istartswith=letterform.cleaned_data["letter"]) letter = letterform.cleaned_data["letter"] else: letter = "" paginator = Paginator(words, limit) try: words = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. words = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. words = paginator.page(paginator.num_pages) return render_to_response( "dictionary.html", RequestContext( request, { "title": _("%(language)s dictionary for %(project)s") % {"language": lang, "project": prj}, "project": prj, "language": lang, "words": words, "form": form, "uploadform": uploadform, "letterform": letterform, "letter": letter, }, ), )
def unlock_project(request, project): obj = get_project(request, project) for subproject in obj.subproject_set.all(): subproject.locked = False subproject.save() messages.info(request, _('Project is now open for translation updates.')) return HttpResponseRedirect(obj.get_absolute_url())
def data_project(request, project): obj = get_project(request, project) return render_to_response( 'data.html', RequestContext( request, { 'object': obj, 'api_docs': weblate.get_doc_url('api', 'exports'), 'rss_docs': weblate.get_doc_url('api', 'rss'), }))
def unlock_project(request, project): obj = get_project(request, project) for subproject in obj.subproject_set.all(): subproject.locked = False subproject.save() messages.info(request, _('Project is now open for translation updates.')) return HttpResponseRedirect(obj.get_absolute_url())
def show_dictionaries(request, project): obj = get_project(request, project) dicts = Translation.objects.filter(subproject__project=obj).values_list("language", flat=True).distinct() return render_to_response( "dictionaries.html", RequestContext( request, {"title": _("Dictionaries"), "dicts": Language.objects.filter(id__in=dicts), "project": obj} ), )
def show_check_project(request, name, project): ''' Show checks failing in a project. ''' prj = get_project(request, project) try: check = CHECKS[name] except KeyError: raise Http404('No check matches the given query.') units = Unit.objects.none() if check.target: langs = Check.objects.filter( check=name, project=prj, ignore=False ).values_list('language', flat=True).distinct() for lang in langs: checks = Check.objects.filter( check=name, project=prj, language=lang, ignore=False ).values_list('checksum', flat=True) res = Unit.objects.filter( checksum__in=checks, translation__language=lang, translation__subproject__project=prj, translated=True ).values( 'translation__subproject__slug', 'translation__subproject__project__slug' ).annotate(count=Count('id')) units |= res if check.source: checks = Check.objects.filter( check=name, project=prj, language=None, ignore=False ).values_list( 'checksum', flat=True ) for subproject in prj.subproject_set.all(): lang = subproject.translation_set.all()[0].language res = Unit.objects.filter( checksum__in=checks, translation__language=lang, translation__subproject=subproject ).values( 'translation__subproject__slug', 'translation__subproject__project__slug' ).annotate(count=Count('id')) units |= res return render_to_response('check_project.html', RequestContext(request, { 'checks': units, 'title': '%s/%s' % (prj.__unicode__(), check.name), 'check': check, 'project': prj, }))
def show_dictionaries(request, project): obj = get_project(request, project) dicts = Translation.objects.filter( subproject__project=obj ).values_list('language', flat=True).distinct() return render_to_response('dictionaries.html', RequestContext(request, { 'title': _('Dictionaries'), 'dicts': Language.objects.filter(id__in=dicts), 'project': obj, }))
def show_dictionaries(request, project): obj = get_project(request, project) dicts = Translation.objects.filter( subproject__project=obj ).values_list('language', flat=True).distinct() return render_to_response('dictionaries.html', RequestContext(request, { 'title': _('Dictionaries'), 'dicts': Language.objects.filter(id__in=dicts), 'project': obj, }))
def lock_project(request, project): obj = get_project(request, project) obj.commit_pending(request) for subproject in obj.subproject_set.all(): subproject.locked = True subproject.save() messages.info(request, _("All subprojects are now locked for translation updates!")) return HttpResponseRedirect(obj.get_absolute_url())
def update_project(request, project): ''' API hook for updating git repos. ''' if not appsettings.ENABLE_HOOKS: return HttpResponseNotAllowed([]) obj = get_project(request, project, True) if appsettings.BACKGROUND_HOOKS: thread = threading.Thread(target=obj.do_update) thread.start() else: obj.do_update() return HttpResponse('update triggered')
def data_project(request, project): obj = get_project(request, project) return render_to_response( "data.html", RequestContext( request, { "object": obj, "api_docs": weblate.get_doc_url("api", "exports"), "rss_docs": weblate.get_doc_url("api", "rss"), }, ), )
def update_project(request, project): ''' API hook for updating git repos. ''' if not appsettings.ENABLE_HOOKS: return HttpResponseNotAllowed([]) obj = get_project(request, project, True) if appsettings.BACKGROUND_HOOKS: thread = threading.Thread(target=obj.do_update) thread.start() else: obj.do_update() return HttpResponse('update triggered')
def lock_project(request, project): obj = get_project(request, project) obj.commit_pending(request) for subproject in obj.subproject_set.all(): subproject.locked = True subproject.save() messages.info( request, _('All subprojects are now locked for translation updates!') ) return redirect(obj)
def lock_project(request, project): obj = get_project(request, project) obj.commit_pending(request) for subproject in obj.subproject_set.all(): subproject.locked = True subproject.save() messages.info( request, _('All subprojects are now locked for translation updates!') ) return HttpResponseRedirect(obj.get_absolute_url())
def delete_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.POST.get('id') ) word.delete() return HttpResponseRedirect(reverse( 'show_dictionary', kwargs={'project': prj.slug, 'lang': lang.code}) )
def delete_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.POST.get('id') ) word.delete() return HttpResponseRedirect(reverse( 'show_dictionary', kwargs={'project': prj.slug, 'lang': lang.code}) )
def delete_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.POST.get('id') ) word.delete() return redirect( 'show_dictionary', project=prj.slug, lang=lang.code )
def edit_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) word = get_object_or_404( Dictionary, project=prj, language=lang, id=request.GET.get('id') ) if request.method == 'POST': form = WordForm(request.POST) if form.is_valid(): word.edit( request, form.cleaned_data['source'], form.cleaned_data['target'] ) return redirect( 'show_dictionary', project=prj.slug, lang=lang.code ) else: form = WordForm( initial={'source': word.source, 'target': word.target} ) last_changes = Change.objects.filter( dictionary=word, ).order_by('-timestamp')[:10] return render_to_response('edit_dictionary.html', RequestContext(request, { 'title': _('%(language)s dictionary for %(project)s') % {'language': lang, 'project': prj}, 'project': prj, 'language': lang, 'form': form, 'last_changes': last_changes, 'last_changes_url': urlencode({ 'project': prj.slug, 'lang': lang.code, 'glossary': 1 }), }))
def show_project(request, project): obj = get_project(request, project) dicts = Dictionary.objects.filter(project=obj).values_list("language", flat=True).distinct() last_changes = Change.objects.filter(translation__subproject__project=obj).order_by("-timestamp")[:10] return render_to_response( "project.html", RequestContext( request, { "object": obj, "dicts": Language.objects.filter(id__in=dicts), "last_changes": last_changes, "last_changes_rss": reverse("rss-project", kwargs={"project": obj.slug}), "last_changes_url": urlencode({"project": obj.slug}), }, ), )
def upload_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == "POST": form = DictUploadForm(request.POST, request.FILES) if form.is_valid(): try: count = Dictionary.objects.upload(prj, lang, request.FILES["file"], form.cleaned_data["method"]) if count == 0: messages.warning(request, _("No words to import found in file.")) else: messages.info(request, _("Imported %d words from file.") % count) except Exception as e: messages.error(request, _("File upload has failed: %s" % unicode(e))) else: messages.error(request, _("Failed to process form!")) else: messages.error(request, _("Failed to process form!")) return HttpResponseRedirect(reverse("show_dictionary", kwargs={"project": prj.slug, "lang": lang.code}))
def show_project(request, project): obj = get_project(request, project) dicts = Dictionary.objects.filter(project=obj).values_list( 'language', flat=True).distinct() last_changes = Change.objects.filter( translation__subproject__project=obj).order_by('-timestamp')[:10] return render_to_response( 'project.html', RequestContext( request, { 'object': obj, 'dicts': Language.objects.filter(id__in=dicts), 'last_changes': last_changes, 'last_changes_rss': reverse('rss-project', kwargs={'project': obj.slug}), }))
def show_engage(request, project, lang=None): # Get project object obj = get_project(request, project) # Handle language parameter language = None if lang is not None: language = try_set_language(lang) context = { 'object': obj, 'project': obj.name, 'languages': obj.get_language_count(), 'total': obj.get_total(), 'percent': obj.get_translated_percent(language), 'url': obj.get_absolute_url(), 'language': language, } # Render text if language is None: status_text = _( '<a href="%(url)s">Translation project for %(project)s</a> ' 'currently contains %(total)s strings for translation and is ' '<a href="%(url)s">being translated into %(languages)s languages' '</a>. Overall, these translations are %(percent)s%% complete.') else: # Translators: line of text in engagement widget, please use your # language name instead of English status_text = _( '<a href="%(url)s">Translation project for %(project)s</a> into ' 'English currently contains %(total)s strings for translation and ' 'is %(percent)s%% complete.') if 'English' in status_text: status_text = status_text.replace('English', language.name) context['status_text'] = mark_safe(status_text % context) return render_to_response('engage.html', RequestContext(request, context))
def render(request, project, widget='287x66', color=None, lang=None): obj = get_project(request, project) # Handle language parameter if lang is not None: lang = try_set_language(lang) # Get widget class try: widget_class = WIDGETS[widget] except KeyError: raise Http404() # Construct object widget = widget_class(obj, color, lang) # Render widget widget.render() # Get image data data = widget.get_image() return HttpResponse(content_type='image/png', content=data)
def upload_dictionary(request, project, lang): prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) if request.method == 'POST': form = DictUploadForm(request.POST, request.FILES) if form.is_valid(): try: count = Dictionary.objects.upload( prj, lang, request.FILES['file'], form.cleaned_data['method'] ) if count == 0: messages.warning( request, _('No words to import found in file.') ) else: messages.info( request, _('Imported %d words from file.') % count ) except Exception as e: messages.error( request, _('File upload has failed: %s' % unicode(e)) ) else: messages.error(request, _('Failed to process form!')) else: messages.error(request, _('Failed to process form!')) return HttpResponseRedirect(reverse( 'show_dictionary', kwargs={'project': prj.slug, 'lang': lang.code} ))
def download_dictionary(request, project, lang): ''' Exports dictionary into various formats. ''' prj = get_project(request, project) lang = get_object_or_404(Language, code=lang) # Parse parameters export_format = None if 'format' in request.GET: export_format = request.GET['format'] if not export_format in ['csv', 'po', 'tbx']: export_format = 'csv' # Grab all words words = Dictionary.objects.filter( project=prj, language=lang ).order_by('source') # Translate toolkit based export if export_format in ('po', 'tbx'): return download_dictionary_ttkit(export_format, prj, lang, words) # Manually create CSV file response = HttpResponse(mimetype='text/csv; charset=utf-8') filename = 'dictionary-%s-%s.csv' % (prj.slug, lang.code) response['Content-Disposition'] = 'attachment; filename=%s' % filename writer = csv.writer(response) for word in words.iterator(): writer.writerow(( word.source.encode('utf8'), word.target.encode('utf8') )) return response
def widgets(request, project): obj = get_project(request, project) # Parse possible language selection form = EnageLanguageForm(obj, request.GET) lang = None if form.is_valid() and form.cleaned_data['lang'] != '': lang = Language.objects.get(code=form.cleaned_data['lang']) if lang is None: engage_base = reverse('engage', kwargs={'project': obj.slug}) else: engage_base = reverse('engage-lang', kwargs={ 'project': obj.slug, 'lang': lang.code }) engage_url = get_site_url(engage_base) engage_url_track = '%s?utm_source=widget' % engage_url widget_base_url = get_site_url( reverse('widgets', kwargs={'project': obj.slug})) widget_list = [] for widget_name in WIDGETS: widget_class = WIDGETS[widget_name] color_list = [] for color in widget_class.colors: if lang is None: color_url = reverse('widget-image', kwargs={ 'project': obj.slug, 'widget': widget_name, 'color': color, }) else: color_url = reverse('widget-image-lang', kwargs={ 'project': obj.slug, 'widget': widget_name, 'color': color, 'lang': lang.code }) color_list.append({ 'name': color, 'url': get_site_url(color_url), }) widget_list.append({ 'name': widget_name, 'colors': color_list, }) return render_to_response( 'widgets.html', RequestContext( request, { 'engage_url': engage_url, 'engage_url_track': engage_url_track, 'widget_list': widget_list, 'widget_base_url': widget_base_url, 'object': obj, 'image_src': widget_list[0]['colors'][0]['url'], 'form': form, }))
def get_object(self, request, project): return get_project(request, project)