示例#1
0
def show_language(request, lang):
    try:
        obj = Language.objects.get(code=lang)
    except Language.DoesNotExist:
        obj = Language.objects.fuzzy_get(lang)
        if isinstance(obj, Language):
            return redirect(obj)
        raise Http404('No Language matches the given query.')

    last_changes = Change.objects.last_changes(
        request.user).filter(translation__language=obj)[:10]
    projects = Project.objects.all_acl(request.user)
    dicts = projects.filter(dictionary__language=obj).distinct()
    projects = projects.filter(
        subproject__translation__language=obj).distinct()

    for project in projects:
        stats = get_per_language_stats(project, obj)
        project.language_stats = (translation_percent(stats[0][1],
                                                      stats[0][2]),
                                  translation_percent(stats[0][3],
                                                      stats[0][4]))

    return render(
        request, 'language.html', {
            'allow_index': True,
            'object': obj,
            'last_changes': last_changes,
            'last_changes_url': urlencode({'lang': obj.code}),
            'dicts': dicts,
            'projects': projects,
        })
示例#2
0
    def render(self):
        translations = []
        offset = 30
        color = self.COLOR_MAP[self.color]
        for language, translated, total in get_per_language_stats(self.obj):
            if total == 0:
                percent = 0
            else:
                percent = int(100 * translated / total)
            if self.color == 'auto':
                if percent >= 90:
                    color = '#4c1'
                elif percent >= 75:
                    color = '#dfb317'
                else:
                    color = '#e05d44'
            translations.append((
                language.name,
                percent,
                offset,
                offset - 10,
                int(percent * 1.5),
                color,
            ))
            offset += 20

        self.image = render_to_string(
            'multi-language-badge.svg',
            {
                'height': len(translations) * 20 + 20,
                'boxheight': len(translations) * 20 + 10,
                'translations': translations,
            }
        )
示例#3
0
文件: basic.py 项目: unhammer/weblate
def show_project(request, project):
    obj = get_project(request, project)

    dict_langs = Language.objects.filter(dictionary__project=obj).annotate(
        Count('dictionary'))

    if request.method == 'POST' and can_edit_project(request.user, obj):
        settings_form = ProjectSettingsForm(request.POST, instance=obj)
        if settings_form.is_valid():
            settings_form.save()
            messages.success(request, _('Settings saved'))
            return redirect(obj)
        else:
            messages.error(
                request,
                _('Invalid settings, please check the form for errors!'))
    else:
        settings_form = ProjectSettingsForm(instance=obj)

    last_changes = Change.objects.for_project(obj)[:10]

    language_stats = sort_unicode(get_per_language_stats(obj),
                                  lambda tup: force_text(tup[0]))

    language_stats = [(tup[0], translation_percent(tup[1], tup[2]),
                       translation_percent(tup[3], tup[4]))
                      for tup in language_stats]

    return render(
        request, 'project.html', {
            'object':
            obj,
            'project':
            obj,
            'dicts':
            dict_langs,
            'last_changes':
            last_changes,
            'last_changes_url':
            urlencode({'project': obj.slug}),
            'add_user_form':
            UserManageForm(),
            'settings_form':
            settings_form,
            'language_stats':
            language_stats,
            'unit_count':
            Unit.objects.filter(translation__subproject__project=obj).count(),
            'words_count':
            obj.get_total_words(),
            'language_count':
            Language.objects.filter(
                translation__subproject__project=obj).distinct().count(),
            'strings_count':
            obj.get_total(),
            'source_words_count':
            obj.get_source_words(),
        })
示例#4
0
def show_project(request, project):
    obj = get_project(request, project)

    dict_langs = Language.objects.filter(
        dictionary__project=obj
    ).annotate(Count('dictionary'))

    last_changes = Change.objects.for_project(obj)[:10]

    language_stats = sort_unicode(
        get_per_language_stats(obj), lambda tup: force_text(tup[0])
    )

    language_stats = [
        (
            tup[0],
            translation_percent(tup[1], tup[2]),
            translation_percent(tup[3], tup[4])
        )
        for tup in language_stats
    ]

    if can_translate(request.user, project=obj):
        replace_form = ReplaceForm()
    else:
        replace_form = None

    return render(
        request,
        'project.html',
        {
            'allow_index': True,
            'object': obj,
            'project': obj,
            'dicts': dict_langs,
            'last_changes': last_changes,
            'last_changes_url': urlencode(
                {'project': obj.slug}
            ),
            'language_stats': language_stats,
            'unit_count': Unit.objects.filter(
                translation__subproject__project=obj
            ).count(),
            'words_count': obj.get_total_words(),
            'language_count': Language.objects.filter(
                translation__subproject__project=obj
            ).distinct().count(),
            'strings_count': obj.get_total(),
            'source_words_count': obj.get_source_words(),
            'search_form': SearchForm(),
            'replace_form': replace_form,
        }
    )
示例#5
0
def show_project(request, project):
    obj = get_project(request, project)

    dict_langs = Dictionary.objects.filter(project=obj).values_list(
        'language', flat=True).distinct()

    if request.method == 'POST' and can_edit_project(request.user, obj):
        settings_form = ProjectSettingsForm(request.POST, instance=obj)
        if settings_form.is_valid():
            settings_form.save()
            messages.success(request, _('Settings saved'))
            return redirect(obj)
        else:
            messages.error(
                request,
                _('Invalid settings, please check the form for errors!'))
    else:
        settings_form = ProjectSettingsForm(instance=obj)

    dicts = []
    for language in Language.objects.filter(id__in=dict_langs):
        dicts.append({
            'language':
            language,
            'count':
            Dictionary.objects.filter(language=language, project=obj).count(),
        })

    last_changes = Change.objects.prefetch().filter(
        Q(translation__subproject__project=obj)
        | Q(dictionary__project=obj))[:10]

    language_stats = sort_unicode(get_per_language_stats(obj),
                                  lambda tup: force_text(tup[0]))

    language_stats = [(tup[0], translation_percent(tup[1], tup[2]))
                      for tup in language_stats]

    return render(
        request, 'project.html', {
            'object': obj,
            'project': obj,
            'dicts': dicts,
            'last_changes': last_changes,
            'last_changes_url': urlencode({'project': obj.slug}),
            'add_user_form': UserManageForm(),
            'settings_form': settings_form,
            'language_stats': language_stats,
        })
示例#6
0
    def render(self):
        translations = []
        offset = 30
        color = self.COLOR_MAP[self.color]
        for data in get_per_language_stats(self.obj):
            language, translated, total = data[:3]
            if total == 0:
                percent = 0
            else:
                percent = int(100 * translated / total)
            if self.color == 'auto':
                if percent >= 90:
                    color = '#4c1'
                elif percent >= 75:
                    color = '#dfb317'
                else:
                    color = '#e05d44'
            translations.append((
                # Language name
                language.name,
                # Translation percent
                percent,
                # Text y offset
                offset,
                # Bar y offset
                offset - 10,
                # Bar width
                int(percent * 1.5),
                # Bar color
                color,
                # Row URL
                get_site_url(
                    reverse('project-language',
                            kwargs={
                                'lang': language.code,
                                'project': self.obj.slug
                            })),
                # Bounding box y offset
                offset - 15,
            ))
            offset += 20

        self.image = render_to_string(
            'multi-language-badge.svg', {
                'height': len(translations) * 20 + 20,
                'boxheight': len(translations) * 20 + 10,
                'translations': translations,
            })
示例#7
0
    def render(self):
        translations = []
        offset = 30
        color = self.COLOR_MAP[self.color]
        for data in get_per_language_stats(self.obj):
            language, translated, total = data[:3]
            if total == 0:
                percent = 0
            else:
                percent = int(100 * translated / total)
            if self.color == 'auto':
                if percent >= 90:
                    color = '#4c1'
                elif percent >= 75:
                    color = '#dfb317'
                else:
                    color = '#e05d44'
            translations.append((
                # Language name
                language.name,
                # Translation percent
                percent,
                # Text y offset
                offset,
                # Bar y offset
                offset - 10,
                # Bar width
                int(percent * 1.5),
                # Bar color
                color,
                # Row URL
                get_site_url(reverse(
                    'project-language',
                    kwargs={'lang': language.code, 'project': self.obj.slug}
                )),
                # Bounding box y offset
                offset - 15,
            ))
            offset += 20

        self.image = render_to_string(
            'multi-language-badge.svg',
            {
                'height': len(translations) * 20 + 20,
                'boxheight': len(translations) * 20 + 10,
                'translations': translations,
            }
        )
示例#8
0
    def render(self):
        translations = []
        offset = 30
        for language, translated, total in get_per_language_stats(self.obj):
            if total == 0:
                percent = 0
            else:
                percent = int(100 * translated / total)
            translations.append((
                language.name,
                percent,
                offset,
                offset - 10,
                int(percent * 1.5),
            ))
            offset += 20

        self.image = render_to_string(
            'multi-language-badge.svg', {
                'height': len(translations) * 20 + 20,
                'boxheight': len(translations) * 20 + 10,
                'color': self.COLOR_MAP[self.color],
                'translations': translations,
            })
示例#9
0
def show_project(request, project):
    obj = get_project(request, project)

    dict_langs = Dictionary.objects.filter(
        project=obj
    ).values_list(
        'language', flat=True
    ).distinct()

    if request.method == 'POST' and can_edit_project(request.user, obj):
        settings_form = ProjectSettingsForm(request.POST, instance=obj)
        if settings_form.is_valid():
            settings_form.save()
            messages.success(request, _('Settings saved'))
            return redirect(obj)
        else:
            messages.error(
                request,
                _('Invalid settings, please check the form for errors!')
            )
    else:
        settings_form = ProjectSettingsForm(instance=obj)

    dicts = []
    for language in Language.objects.filter(id__in=dict_langs):
        dicts.append(
            {
                'language': language,
                'count': Dictionary.objects.filter(
                    language=language,
                    project=obj
                ).count(),
            }
        )

    last_changes = Change.objects.for_project(obj)[:10]

    language_stats = sort_unicode(
        get_per_language_stats(obj), lambda tup: force_text(tup[0])
    )

    language_stats = [
        (
            tup[0],
            translation_percent(tup[1], tup[2]),
            translation_percent(tup[3], tup[4])
        )
        for tup in language_stats
    ]

    return render(
        request,
        'project.html',
        {
            'object': obj,
            'project': obj,
            'dicts': dicts,
            'last_changes': last_changes,
            'last_changes_url': urlencode(
                {'project': obj.slug}
            ),
            'add_user_form': UserManageForm(),
            'settings_form': settings_form,
            'language_stats': language_stats,
        }
    )
示例#10
0
文件: basic.py 项目: saily/weblate
def show_project(request, project):
    obj = get_project(request, project)

    dict_langs = Language.objects.filter(
        dictionary__project=obj
    ).annotate(Count('dictionary'))

    if request.method == 'POST' and can_edit_project(request.user, obj):
        settings_form = ProjectSettingsForm(request.POST, instance=obj)
        if settings_form.is_valid():
            settings_form.save()
            messages.success(request, _('Settings saved'))
            return redirect(obj)
        else:
            messages.error(
                request,
                _('Invalid settings, please check the form for errors!')
            )
    else:
        settings_form = ProjectSettingsForm(instance=obj)

    last_changes = Change.objects.for_project(obj)[:10]

    language_stats = sort_unicode(
        get_per_language_stats(obj), lambda tup: force_text(tup[0])
    )

    language_stats = [
        (
            tup[0],
            translation_percent(tup[1], tup[2]),
            translation_percent(tup[3], tup[4])
        )
        for tup in language_stats
    ]

    if can_translate(request.user, project=obj):
        replace_form = ReplaceForm()
    else:
        replace_form = None

    return render(
        request,
        'project.html',
        {
            'allow_index': True,
            'object': obj,
            'project': obj,
            'dicts': dict_langs,
            'last_changes': last_changes,
            'last_changes_url': urlencode(
                {'project': obj.slug}
            ),
            'settings_form': settings_form,
            'language_stats': language_stats,
            'unit_count': Unit.objects.filter(
                translation__subproject__project=obj
            ).count(),
            'words_count': obj.get_total_words(),
            'language_count': Language.objects.filter(
                translation__subproject__project=obj
            ).distinct().count(),
            'strings_count': obj.get_total(),
            'source_words_count': obj.get_source_words(),
            'search_form': SearchForm(),
            'replace_form': replace_form,
        }
    )