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, })
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, } )
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(), })
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, } )
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, })
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, })
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, } )
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, })
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, } )
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, } )