def show_project(request, lang, project): try: language_object = Language.objects.get(code=lang) except Language.DoesNotExist: language_object = Language.objects.fuzzy_get(lang) if isinstance(language_object, Language): return redirect(language_object) raise Http404("No Language matches the given query.") project_object = get_project(request, project) obj = ProjectLanguage(project_object, language_object) user = request.user last_changes = Change.objects.last_changes(user).filter( language=language_object, project=project_object)[:10] return render( request, "language-project.html", { "allow_index": True, "language": language_object, "project": project_object, "object": obj, "last_changes": last_changes, "last_changes_url": urlencode({ "lang": language_object.code, "project": project_object.slug }), "translations": obj.translation_set, "title": f"{project_object} - {language_object}", "search_form": SearchForm(user, language=language_object), "licenses": project_object.component_set.exclude( license="").order_by("license"), "language_stats": project_object.stats.get_single_language_stats(language_object), "delete_form": optional_form(ProjectLanguageDeleteForm, user, "translation.delete", obj, obj=obj), }, )
def show_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) obj.stats.ensure_all() last_changes = obj.change_set.prefetch().order()[:10] user = request.user # Get form form = get_upload_form(user, obj) search_form = SearchForm(request.user, language=obj.language) # Translations to same language from other components in this project other_translations = prefetch_stats( list( Translation.objects.prefetch() .filter(component__project=obj.component.project, language=obj.language) .exclude(pk=obj.pk) ) ) # Include ghost translations for other components, this # adds quick way to create translations in other components existing = {translation.component.slug for translation in other_translations} existing.add(obj.component.slug) for test_component in obj.component.project.component_set.filter_access( user ).exclude(slug__in=existing): if test_component.can_add_new_language(user, fast=True): other_translations.append(GhostTranslation(test_component, obj.language)) # Limit the number of other components displayed to 10, preferring untranslated ones other_translations = sorted( other_translations, key=lambda t: t.stats.translated_percent )[:10] return render( request, "translation.html", { "allow_index": True, "object": obj, "project": obj.component.project, "form": form, "download_form": DownloadForm(auto_id="id_dl_%s"), "autoform": optional_form( AutoForm, user, "translation.auto", obj, obj=obj.component ), "search_form": search_form, "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj.component.project, auto_id="id_bulk_%s", ), "new_unit_form": NewUnitForm( user, initial={"value": Unit(translation=obj, id_hash=-1)} ), "announcement_form": optional_form( AnnouncementForm, user, "component.edit", obj ), "delete_form": optional_form( TranslationDeleteForm, user, "translation.delete", obj, obj=obj ), "last_changes": last_changes, "last_changes_url": urlencode(obj.get_reverse_url_kwargs()), "other_translations": other_translations, "exporters": EXPORTERS.list_exporters(obj), }, )
def show_component(request, project, component): obj = get_component(request, project, component) obj.stats.ensure_basic() user = request.user last_changes = obj.change_set.prefetch().order()[:10] translations = prefetch_stats(list(obj.translation_set.prefetch())) # Show ghost translations for user languages add_ghost_translations(obj, user, translations, GhostTranslation) translations = sort_unicode( translations, lambda x: "{}-{}".format( user.profile.get_language_order(x.language), x.language ), ) return render( request, "component.html", { "allow_index": True, "object": obj, "project": obj.project, "translations": translations, "reports_form": ReportsForm(), "last_changes": last_changes, "last_changes_url": urlencode( {"component": obj.slug, "project": obj.project.slug} ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj.project, auto_id="id_bulk_%s", ), "announcement_form": optional_form( AnnouncementForm, user, "component.edit", obj ), "delete_form": optional_form( ComponentDeleteForm, user, "component.edit", obj, obj=obj ), "rename_form": optional_form( ComponentRenameForm, user, "component.edit", obj, request=request, instance=obj, ), "move_form": optional_form( ComponentMoveForm, user, "component.edit", obj, request=request, instance=obj, ), "search_form": SearchForm(request.user), "alerts": obj.all_alerts, }, )
def show_project(request, project): obj = get_project(request, project) obj.stats.ensure_basic() user = request.user last_changes = obj.change_set.prefetch().order()[:10] last_announcements = ( Change.objects.prefetch() .order() .filter(project=obj, action=Change.ACTION_ANNOUNCEMENT)[:10] ) language_stats = obj.stats.get_language_stats() # Show ghost translations for user languages component = None for component in obj.component_set.filter_access(user).all(): if component.can_add_new_language(user, fast=True): break if component: add_ghost_translations( component, user, language_stats, GhostProjectLanguageStats ) language_stats = sort_unicode( language_stats, lambda x: "{}-{}".format( user.profile.get_language_order(x.language), x.language ), ) all_components = obj.component_set.filter_access(user).prefetch().order() components = prefetch_tasks(prefetch_stats(all_components)) return render( request, "project.html", { "allow_index": True, "object": obj, "project": obj, "last_changes": last_changes, "last_announcements": last_announcements, "reports_form": ReportsForm(), "last_changes_url": urlencode({"project": obj.slug}), "language_stats": [stat.obj or stat for stat in language_stats], "search_form": SearchForm(request.user), "announcement_form": optional_form( AnnouncementForm, user, "project.edit", obj ), "delete_form": optional_form( ProjectDeleteForm, user, "project.edit", obj, obj=obj ), "rename_form": optional_form( ProjectRenameForm, user, "project.edit", obj, request=request, instance=obj, ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj, auto_id="id_bulk_%s", ), "components": components, "licenses": obj.component_set.exclude(license="").order_by("license"), }, )
def show_project(request, project): obj = get_project(request, project) obj.stats.ensure_basic() user = request.user last_changes = obj.change_set.prefetch().order()[:10] last_announcements = (obj.change_set.prefetch().order().filter( action=Change.ACTION_ANNOUNCEMENT)[:10]) all_components = prefetch_stats( obj.child_components.filter_access(user).prefetch().order()) all_components = get_paginator(request, all_components) for component in all_components: component.is_shared = None if component.project == obj else component.project language_stats = obj.stats.get_language_stats() # Show ghost translations for user languages component = None for component in all_components: if component.can_add_new_language(user, fast=True): break if component: add_ghost_translations( component, user, language_stats, GhostProjectLanguageStats, is_shared=component.is_shared, ) language_stats = sort_unicode( language_stats, lambda x: f"{user.profile.get_translation_order(x)}-{x.language}", ) components = prefetch_tasks(all_components) return render( request, "project.html", { "allow_index": True, "object": obj, "project": obj, "last_changes": last_changes, "last_announcements": last_announcements, "reports_form": ReportsForm(), "last_changes_url": urlencode({"project": obj.slug}), "language_stats": [stat.obj or stat for stat in language_stats], "search_form": SearchForm(request.user), "announcement_form": optional_form(AnnouncementForm, user, "project.edit", obj), "delete_form": optional_form( ProjectDeleteForm, user, "project.edit", obj, obj=obj), "rename_form": optional_form( ProjectRenameForm, user, "project.edit", obj, request=request, instance=obj, ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj, auto_id="id_bulk_%s", ), "components": components, "licenses": sorted( (component for component in all_components if component.license), key=lambda component: component.license, ), }, )
def show_project(request, lang, project): try: language_object = Language.objects.get(code=lang) except Language.DoesNotExist: language_object = Language.objects.fuzzy_get(lang) if isinstance(language_object, Language): return redirect(language_object) raise Http404("No Language matches the given query.") project_object = get_project(request, project) obj = ProjectLanguage(project_object, language_object) user = request.user last_changes = Change.objects.last_changes(user).filter( language=language_object, project=project_object)[:10] translations = list(obj.translation_set) # Add ghost translations if user.is_authenticated: existing = {translation.component.slug for translation in translations} for component in project_object.child_components: if component.slug in existing: continue if component.can_add_new_language(user, fast=True): translations.append( GhostTranslation(component, language_object)) return render( request, "language-project.html", { "allow_index": True, "language": language_object, "project": project_object, "object": obj, "last_changes": last_changes, "last_changes_url": urlencode({ "lang": language_object.code, "project": project_object.slug }), "translations": translations, "title": f"{project_object} - {language_object}", "search_form": SearchForm(user, language=language_object), "licenses": project_object.component_set.exclude( license="").order_by("license"), "language_stats": project_object.stats.get_single_language_stats(language_object), "delete_form": optional_form(ProjectLanguageDeleteForm, user, "translation.delete", obj, obj=obj), }, )