예제 #1
0
def translate(request, locale, slug, part):
    """Translate view."""
    locale = get_object_or_404(Locale, code=locale)

    projects = (
        Project.objects.available()
        .prefetch_related('subpage_set', 'tag_set')
        .order_by('name')
    )

    if slug.lower() == 'all-projects':
        project = Project(name='All Projects', slug=slug.lower())

    else:
        project = get_object_or_404(Project.objects.available(), slug=slug)
        if locale not in project.locales.all():
            raise Http404
    return render(request, 'translate.html', {
        'download_form': forms.DownloadFileForm(),
        'upload_form': forms.UploadFileForm(),
        'locale': locale,
        'locale_projects': locale.available_projects_list(),
        'locales': Locale.objects.available(),
        'part': part,
        'project': project,
        'projects': projects,
    })
예제 #2
0
def translate(request, locale, slug, part):
    """Translate view."""
    locale = get_object_or_404(Locale, code=locale)

    projects = (
        Project.objects.available()
        .prefetch_related('subpage_set', 'tag_set')
        .order_by('name')
    )

    if slug.lower() == 'all-projects':
        project = Project(name='All Projects', slug=slug.lower())

    else:
        project = get_object_or_404(Project.objects.available(), slug=slug)
        if locale not in project.locales.all():
            raise Http404

    return render(request, 'translate.html', {
        'download_form': forms.DownloadFileForm(),
        'upload_form': forms.UploadFileForm(),
        'locale': locale,
        'locale_projects': locale.available_projects_list(),
        'locales': Locale.objects.available(),
        'part': part,
        'project': project,
        'projects': projects,
        'is_google_translate_supported': bool(settings.GOOGLE_TRANSLATE_API_KEY),
        'is_microsoft_translator_supported': bool(settings.MICROSOFT_TRANSLATOR_API_KEY),
    })
예제 #3
0
def entities(request):
    """Get entities for the specified project, locale and paths."""
    form = forms.GetEntitiesForm(request.POST)
    if not form.is_valid():
        return JsonResponse(
            {
                'status':
                False,
                'message':
                '{error}'.format(error=form.errors.as_json(escape_html=True)),
            },
            status=400)

    locale = get_object_or_404(Locale, code=form.cleaned_data['locale'])

    project_slug = form.cleaned_data['project']
    if project_slug == 'all-projects':
        project = Project(slug=project_slug)
    else:
        project = get_object_or_404(Project, slug=project_slug)

    # Only return entities with provided IDs (batch editing)
    if form.cleaned_data['entity_ids']:
        return _get_entities_list(locale, project, form)

    # `Entity.for_project_locale` only requires a subset of the fields the form contains. We thus
    # make a new dict with only the keys we want to pass to that function.
    restrict_to_keys = (
        'paths',
        'status',
        'search',
        'exclude_entities',
        'extra',
        'time',
        'author',
        'tag',
    )
    form_data = {
        k: form.cleaned_data[k]
        for k in restrict_to_keys if k in form.cleaned_data
    }

    entities = Entity.for_project_locale(project, locale, **form_data)

    # Only return a list of entity PKs (batch editing: select all)
    if form.cleaned_data['pk_only']:
        return JsonResponse({
            'entity_pks':
            list(entities.values_list('pk', flat=True)),
        })

    # In-place view: load all entities
    if form.cleaned_data['inplace_editor']:
        return _get_all_entities(locale, project, form, entities)

    # Out-of-context view: paginate entities
    return _get_paginated_entities(locale, project, form, entities)
예제 #4
0
def translate(request, locale, slug, part):
    """Translate view."""
    # Redirect the user to the Translate.Next app if needed.
    # To be removed as part of bug 1527853.
    user = request.user
    if (waffle.switch_is_active('translate_next') and user.is_authenticated
            and user.profile.use_translate_next):
        url = reverse('pontoon.translate.next',
                      kwargs={
                          'project': slug,
                          'locale': locale,
                          'resource': part,
                      })
        query = request.GET.urlencode()
        if query:
            url += '?' + query

        return redirect(url)

    locale = get_object_or_404(Locale, code=locale)

    projects = (Project.objects.available().prefetch_related(
        'subpage_set', 'tag_set').order_by('name'))

    if slug.lower() == 'all-projects':
        project = Project(name='All Projects', slug=slug.lower())

    else:
        project = get_object_or_404(Project.objects.available(), slug=slug)
        if locale not in project.locales.all():
            raise Http404

    return render(
        request, 'translate.html', {
            'download_form':
            forms.DownloadFileForm(),
            'upload_form':
            forms.UploadFileForm(),
            'locale':
            locale,
            'locale_projects':
            locale.available_projects_list(),
            'locales':
            Locale.objects.available(),
            'part':
            part,
            'project':
            project,
            'projects':
            projects,
            'is_google_translate_supported':
            bool(settings.GOOGLE_TRANSLATE_API_KEY),
            'is_microsoft_translator_supported':
            bool(settings.MICROSOFT_TRANSLATOR_API_KEY),
        })
예제 #5
0
파일: views.py 프로젝트: w2816771/pontoon
def entities(request):
    """Get entities for the specified project, locale and paths."""
    form = forms.GetEntitiesForm(request.POST)
    if not form.is_valid():
        return JsonResponse(
            {
                "status":
                False,
                "message":
                "{error}".format(error=form.errors.as_json(escape_html=True)),
            },
            status=400,
        )

    locale = get_object_or_404(Locale, code=form.cleaned_data["locale"])

    preferred_source_locale = ""
    if request.user.is_authenticated:
        preferred_source_locale = request.user.profile.preferred_source_locale

    project_slug = form.cleaned_data["project"]
    if project_slug == "all-projects":
        project = Project(slug=project_slug)
    else:
        project = get_object_or_404(Project, slug=project_slug)

    # Only return entities with provided IDs (batch editing)
    if form.cleaned_data["entity_ids"]:
        return _get_entities_list(locale, preferred_source_locale, project,
                                  form)

    # `Entity.for_project_locale` only requires a subset of the fields the form contains. We thus
    # make a new dict with only the keys we want to pass to that function.
    restrict_to_keys = (
        "paths",
        "status",
        "search",
        "exclude_entities",
        "extra",
        "time",
        "author",
        "tag",
    )
    form_data = {
        k: form.cleaned_data[k]
        for k in restrict_to_keys if k in form.cleaned_data
    }

    try:
        entities = Entity.for_project_locale(project, locale, **form_data)
    except ValueError as error:
        return JsonResponse(
            {
                "status": False,
                "message": "{error}".format(error=error)
            },
            status=500)

    # Only return a list of entity PKs (batch editing: select all)
    if form.cleaned_data["pk_only"]:
        return JsonResponse(
            {"entity_pks": list(entities.values_list("pk", flat=True))})

    # In-place view: load all entities
    if form.cleaned_data["inplace_editor"]:
        return _get_all_entities(locale, preferred_source_locale, project,
                                 form, entities)

    # Out-of-context view: paginate entities
    return _get_paginated_entities(locale, preferred_source_locale, project,
                                   form, entities)