diff --git a/openslides/account/views.py b/openslides/account/views.py index 5fa151665..0c67c83b3 100644 --- a/openslides/account/views.py +++ b/openslides/account/views.py @@ -45,7 +45,6 @@ def get_personal_info_widget(request): 'submitted_motions': Motion.objects.filter(submitter=request.user), 'config_motion_min_supporters': config['motion_min_supporters'], 'supported_motions': Motion.objects.filter(supporter=request.user)}) - try: from openslides.assignment.models import Assignment except ImportError: diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 8abed0914..f21886910 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -14,7 +14,7 @@ from datetime import datetime from django.db import models from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _, ugettext_noop, ugettext +from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _ from mptt.models import MPTTModel, TreeForeignKey @@ -38,30 +38,30 @@ class Item(MPTTModel, SlideMixin): ORGANIZATIONAL_ITEM = 2 ITEM_TYPE = ( - (AGENDA_ITEM, _('Agenda item')), - (ORGANIZATIONAL_ITEM, _('Organizational item'))) + (AGENDA_ITEM, ugettext_lazy('Agenda item')), + (ORGANIZATIONAL_ITEM, ugettext_lazy('Organizational item'))) - title = models.CharField(null=True, max_length=255, verbose_name=_("Title")) + title = models.CharField(null=True, max_length=255, verbose_name=ugettext_lazy("Title")) """ Title of the agenda item. """ - text = models.TextField(null=True, blank=True, verbose_name=_("Text")) + text = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Text")) """ The optional text of the agenda item. """ - comment = models.TextField(null=True, blank=True, verbose_name=_("Comment")) + comment = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Comment")) """ Optional comment to the agenda item. Will not be shoun to normal users. """ - closed = models.BooleanField(default=False, verbose_name=_("Closed")) + closed = models.BooleanField(default=False, verbose_name=ugettext_lazy("Closed")) """ Flag, if the item is finished. """ - weight = models.IntegerField(default=0, verbose_name=_("Weight")) + weight = models.IntegerField(default=0, verbose_name=ugettext_lazy("Weight")) """ Weight to sort the item in the agenda. """ @@ -73,7 +73,7 @@ class Item(MPTTModel, SlideMixin): """ type = models.IntegerField(max_length=1, choices=ITEM_TYPE, - default=AGENDA_ITEM, verbose_name=_("Type")) + default=AGENDA_ITEM, verbose_name=ugettext_lazy("Type")) """ Type of the agenda item. @@ -81,7 +81,7 @@ class Item(MPTTModel, SlideMixin): """ duration = models.CharField(null=True, blank=True, max_length=5, - verbose_name=_("Duration (hh:mm)")) + verbose_name=ugettext_lazy("Duration (hh:mm)")) """ The intended duration for the topic. """ @@ -94,7 +94,7 @@ class Item(MPTTModel, SlideMixin): """ speaker_list_closed = models.BooleanField( - default=False, verbose_name=_("List of speakers is closed")) + default=False, verbose_name=ugettext_lazy("List of speakers is closed")) """ True, if the list of speakers is closed. """ @@ -125,7 +125,7 @@ class Item(MPTTModel, SlideMixin): For use in Template ??Why does {% trans item.print_related_type|capfirst %} not work?? """ - return ugettext(self.get_related_type().capitalize()) + return _(self.get_related_type().capitalize()) def get_title(self): """ @@ -158,9 +158,12 @@ class Item(MPTTModel, SlideMixin): } elif config['presentation_argument'] == 'show_list_of_speakers': speakers = Speaker.objects.filter(time=None, item=self.pk).order_by('weight') - data = {'title': _('List of speakers for %s') % self.get_title(), + old_speakers = Speaker.objects.filter(item=self.pk).exclude(time=None).order_by('time') + slice_items = max(0, old_speakers.count()-2) + data = {'title': self.get_title(), 'template': 'projector/agenda_list_of_speaker.html', - 'speakers': speakers} + 'speakers': speakers, + 'old_speakers': old_speakers[slice_items:]} elif self.related_sid: data = self.get_related_slide().slide() else: @@ -244,7 +247,7 @@ class Item(MPTTModel, SlideMixin): class SpeakerManager(models.Manager): def add(self, person, item): if self.filter(person=person, item=item, time=None).exists(): - raise OpenSlidesError(_('%s is already on the list of speakers of item %d.') % (person, item.id)) + raise OpenSlidesError(_('%(person)s is already on the list of speakers of item %(id)s.') % {'person': person, 'id': item.id}) weight = (self.filter(item=item).aggregate( models.Max('weight'))['weight__max'] or 0) return self.create(item=item, person=person, weight=weight + 1) @@ -279,7 +282,7 @@ class Speaker(models.Model): class Meta: permissions = ( - ('can_be_speaker', ugettext_noop('Can be speaker')), + ('can_be_speaker', ugettext_noop('Can put oneself on the list of speakers')), ) def __unicode__(self): diff --git a/openslides/agenda/signals.py b/openslides/agenda/signals.py index 1633aebea..4d9d99527 100644 --- a/openslides/agenda/signals.py +++ b/openslides/agenda/signals.py @@ -12,7 +12,7 @@ from django.dispatch import receiver from django import forms -from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _ +from django.utils.translation import ugettext_lazy, ugettext_noop from django.template.loader import render_to_string from openslides.config.signals import config_signal @@ -41,7 +41,7 @@ def setup_agenda_config_page(sender, **kwargs): widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M'), required=False, label=ugettext_lazy('Begin of event'), - help_text=_('Input format: DD.MM.YYYY HH:MM'))) + help_text=ugettext_lazy('Input format: DD.MM.YYYY HH:MM'))) extra_stylefiles = ['styles/timepicker.css', 'styles/jquery-ui/jquery-ui.custom.min.css'] extra_javascript = ['javascript/jquery-ui.custom.min.js', diff --git a/openslides/agenda/slides.py b/openslides/agenda/slides.py index 70e5f9d28..d4129fb3c 100644 --- a/openslides/agenda/slides.py +++ b/openslides/agenda/slides.py @@ -10,7 +10,7 @@ :license: GNU GPL, see LICENSE for more details. """ -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy, ugettext as _ from openslides.projector.api import register_slidemodel, register_slidefunc @@ -26,4 +26,4 @@ def agenda_show(): return data register_slidemodel(Item, control_template='agenda/control_item.html') -register_slidefunc('agenda', agenda_show, weight=-1, name=_('Agenda')) +register_slidefunc('agenda', agenda_show, weight=-1, name=ugettext_lazy('Agenda')) diff --git a/openslides/agenda/templates/agenda/overlay_speaker_projector.html b/openslides/agenda/templates/agenda/overlay_speaker_projector.html index 47a52dacd..e1596a4cb 100644 --- a/openslides/agenda/templates/agenda/overlay_speaker_projector.html +++ b/openslides/agenda/templates/agenda/overlay_speaker_projector.html @@ -1,23 +1,8 @@ {% load i18n %} - - -
{% trans 'The list of speakers is empty.' %}
{% endif %} {% endblock %} diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index c8afc4da3..234be94b0 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -266,7 +266,7 @@ class SpeakerAppendView(SingleObjectMixin, RedirectView): def pre_redirect(self, request, *args, **kwargs): self.object = self.get_object() if self.object.speaker_list_closed: - messages.error(request, _('List of speakers is closed.')) + messages.error(request, _('The list of speakers is closed.')) else: try: Speaker.objects.add(item=self.object, person=request.user) @@ -337,8 +337,10 @@ class SpeakerSpeakView(SingleObjectMixin, RedirectView): item=self.object.pk).exclude( weight=None).get() except Speaker.DoesNotExist: - messages.error(self.request, _('Person %s is not on the list of item %s.' - % (kwargs['person_id'], self.object))) + messages.error( + self.request, + _('%(person)s is not on the list of %(item)s.') + % {'person': kwargs['person_id'], 'item': self.object}) else: speaker.speak() @@ -439,7 +441,7 @@ class CurrentListOfSpeakersView(RedirectView): if item is None: messages.error(request, _( 'There is no list of speakers for the current slide. ' - 'Please choose your agenda item manually from the agenda.')) + 'Please choose the agenda item manually from the agenda.')) return reverse('dashboard') if self.request.user.has_perm('agenda.can_be_speaker'): @@ -483,7 +485,9 @@ def get_widgets(request): template='agenda/widget.html', context={ 'agenda': SLIDE['agenda'], - 'items': Item.objects.all()}, + 'items': Item.objects.all(), + 'summary': config['presentation_argument'] == 'summary', + 'speakers': config['presentation_argument'] == 'show_list_of_speakers'}, permission_required='projector.can_manage_projector'), Widget( diff --git a/openslides/assignment/forms.py b/openslides/assignment/forms.py index a0a0f5818..b66a649a8 100644 --- a/openslides/assignment/forms.py +++ b/openslides/assignment/forms.py @@ -11,7 +11,7 @@ """ from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy from openslides.utils.forms import CssClassMixin from openslides.utils.person import PersonFormField @@ -21,7 +21,7 @@ from openslides.assignment.models import Assignment class AssignmentForm(forms.ModelForm, CssClassMixin): posts = forms.IntegerField( - min_value=1, initial=1, label=_("Number of available posts")) + min_value=1, initial=1, label=ugettext_lazy("Number of available posts")) class Meta: model = Assignment @@ -31,5 +31,5 @@ class AssignmentForm(forms.ModelForm, CssClassMixin): class AssignmentRunForm(forms.Form, CssClassMixin): candidate = PersonFormField( widget=forms.Select(attrs={'class': 'medium-input'}), - label=_("Nominate a participant"), + label=ugettext_lazy("Nominate a participant"), ) diff --git a/openslides/assignment/models.py b/openslides/assignment/models.py index 0f89d61a6..a2b528e21 100644 --- a/openslides/assignment/models.py +++ b/openslides/assignment/models.py @@ -12,7 +12,7 @@ from django.core.urlresolvers import reverse from django.db import models -from django.utils.translation import ugettext_lazy as _, ugettext_noop # TODO Change this in the code +from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop from openslides.utils.person import PersonField from openslides.config.api import config @@ -39,17 +39,17 @@ class AssignmentCandidate(models.Model): class Assignment(models.Model, SlideMixin): prefix = 'assignment' STATUS = ( - ('sea', _('Searching for candidates')), - ('vot', _('Voting')), - ('fin', _('Finished')), + ('sea', ugettext_lazy('Searching for candidates')), + ('vot', ugettext_lazy('Voting')), + ('fin', ugettext_lazy('Finished')), ) - name = models.CharField(max_length=100, verbose_name=_("Name")) - description = models.TextField(null=True, blank=True, verbose_name=_("Description")) - posts = models.PositiveSmallIntegerField(verbose_name=_("Number of available posts")) + name = models.CharField(max_length=100, verbose_name=ugettext_lazy("Name")) + description = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Description")) + posts = models.PositiveSmallIntegerField(verbose_name=ugettext_lazy("Number of available posts")) polldescription = models.CharField( max_length=100, null=True, blank=True, - verbose_name=_("Comment on the ballot paper")) + verbose_name=ugettext_lazy("Comment on the ballot paper")) status = models.CharField(max_length=3, choices=STATUS, default='sea') def set_status(self, status): @@ -240,9 +240,8 @@ class Assignment(models.Model, SlideMixin): class Meta: permissions = ( ('can_see_assignment', ugettext_noop("Can see assignment")), - ('can_nominate_other', - ugettext_noop("Can nominate another person")), - ('can_nominate_self', ugettext_noop("Can nominate themselves")), + ('can_nominate_other', ugettext_noop("Can nominate another person")), + ('can_nominate_self', ugettext_noop("Can nominate oneself")), ('can_manage_assignment', ugettext_noop("Can manage assignment")), ) ordering = ('name',) diff --git a/openslides/assignment/signals.py b/openslides/assignment/signals.py index 9f2490d82..e8a7c716e 100644 --- a/openslides/assignment/signals.py +++ b/openslides/assignment/signals.py @@ -12,7 +12,7 @@ from django.dispatch import receiver from django import forms -from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _ +from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop from openslides.config.signals import config_signal from openslides.config.api import ConfigVariable, ConfigPage @@ -28,19 +28,19 @@ def setup_assignment_config_page(sender, **kwargs): default_value=False, form_field=forms.BooleanField( required=False, - label=_('Only publish voting results for selected winners ' - '(Projector view only)'))) + label=ugettext_lazy('Only publish voting results for selected ' + 'winners (Projector view only)'))) assignment_pdf_ballot_papers_selection = ConfigVariable( name='assignment_pdf_ballot_papers_selection', default_value='CUSTOM_NUMBER', form_field=forms.ChoiceField( widget=forms.Select(), required=False, - label=_('Number of ballot papers (selection)'), + label=ugettext_lazy('Number of ballot papers (selection)'), choices=( - ('NUMBER_OF_DELEGATES', _('Number of all delegates')), - ('NUMBER_OF_ALL_PARTICIPANTS', _('Number of all participants')), - ('CUSTOM_NUMBER', _('Use the following custom number'))))) + ('NUMBER_OF_DELEGATES', ugettext_lazy('Number of all delegates')), + ('NUMBER_OF_ALL_PARTICIPANTS', ugettext_lazy('Number of all participants')), + ('CUSTOM_NUMBER', ugettext_lazy('Use the following custom number'))))) assignment_pdf_ballot_papers_number = ConfigVariable( name='assignment_pdf_ballot_papers_number', default_value=8, @@ -48,32 +48,32 @@ def setup_assignment_config_page(sender, **kwargs): widget=forms.TextInput(attrs={'class': 'small-input'}), required=False, min_value=1, - label=_('Custom number of ballot papers'))) + label=ugettext_lazy('Custom number of ballot papers'))) assignment_pdf_title = ConfigVariable( name='assignment_pdf_title', default_value=_('Elections'), form_field=forms.CharField( widget=forms.TextInput(), required=False, - label=_('Title for PDF document (all elections)'))) + label=ugettext_lazy('Title for PDF document (all elections)'))) assignment_pdf_preamble = ConfigVariable( name='assignment_pdf_preamble', default_value='', form_field=forms.CharField( widget=forms.Textarea(), required=False, - label=_('Preamble text for PDF document (all elections)'))) + label=ugettext_lazy('Preamble text for PDF document (all elections)'))) assignment_poll_vote_values = ConfigVariable( name='assignment_poll_vote_values', default_value='auto', form_field=forms.ChoiceField( widget=forms.Select(), required=False, - label=_('Election method'), + label=ugettext_lazy('Election method'), choices=( - ('auto', _('Automatic assign of method.')), - ('votes', _('Always one option per candidate.')), - ('yesnoabstain', _('Always Yes-No-Abstain per candidate.'))))) + ('auto', ugettext_lazy('Automatic assign of method')), + ('votes', ugettext_lazy('Always one option per candidate')), + ('yesnoabstain', ugettext_lazy('Always Yes-No-Abstain per candidate'))))) return ConfigPage(title=ugettext_noop('Elections'), url='assignment', diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py index c8582bca7..a4bee73c5 100644 --- a/openslides/assignment/views.py +++ b/openslides/assignment/views.py @@ -31,7 +31,7 @@ from openslides.utils.utils import ( from openslides.utils.views import FormView, DeleteView, PDFView, RedirectView from openslides.utils.person import get_person from openslides.config.api import config -from openslides.participant.models import User +from openslides.participant.models import User, Group from openslides.projector.projector import Widget from openslides.poll.views import PollFormView from openslides.agenda.models import Item @@ -564,7 +564,12 @@ class AssignmentPollPDF(PDFView): # set number of ballot papers if ballot_papers_selection == "NUMBER_OF_DELEGATES": - number = User.objects.filter(type__iexact="delegate").count() + try: + if Group.objects.get(pk=3): + number = User.objects.filter(groups__pk=3).count() + except Group.DoesNotExist: + number = 0 + elif ballot_papers_selection == "NUMBER_OF_ALL_PARTICIPANTS": number = int(User.objects.count()) else: # ballot_papers_selection == "CUSTOM_NUMBER" diff --git a/openslides/config/templates/config/config_form.html b/openslides/config/templates/config/config_form.html index 75291cf54..0fc66c08d 100644 --- a/openslides/config/templates/config/config_form.html +++ b/openslides/config/templates/config/config_form.html @@ -1,7 +1,6 @@ {% extends 'base.html' %} {% load i18n %} - {% load staticfiles %} {% block content %} @@ -12,7 +11,7 @@{{ version.0 }} {% trans "Version" %}: {{ version.1 }}
{% endfor %} diff --git a/openslides/core/views.py b/openslides/core/views.py index 8d0384deb..90434f3c3 100644 --- a/openslides/core/views.py +++ b/openslides/core/views.py @@ -15,6 +15,7 @@ from django.utils.importlib import import_module from openslides import get_version, get_git_commit_id, RELEASE from openslides.utils.views import TemplateView +from .signals import config_signal class VersionView(TemplateView): @@ -35,6 +36,13 @@ class VersionView(TemplateView): openslides_version_string += ' Commit: %s' % get_git_commit_id() context['versions'] = [('OpenSlides', openslides_version_string)] + # collect other config pages + config_pages_list = [] + for receiver, config_page in config_signal.send(sender=self): + if config_page.is_shown(): + config_pages_list.append({'config_page': config_page}) + context['config_pages_list'] = sorted(config_pages_list, key=lambda config_page_dict: config_page_dict['config_page'].weight) + # Versions of plugins. for plugin in settings.INSTALLED_PLUGINS: try: diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 37edec9d4..d030ece56 100644 Binary files a/openslides/locale/de/LC_MESSAGES/django.mo and b/openslides/locale/de/LC_MESSAGES/django.mo differ diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 7519c4249..d9ddec3b5 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -1,13 +1,13 @@ # German translations for OpenSlides package. # Copyright (C) 2011-2013 by OpenSlides team, see AUTHORS. # This file is distributed under the same license as the OpenSlides package. -# Oskar Hahnnumber
, reason
and is_group
are "
-#~ "optional and may be empty"
-#~ msgstr ""
-#~ "Nummer
, Begründung
und Gruppenantrag"
-#~ "code> sind optional und können auch leer sein"
-
-#~ msgid "Print all motions as PDF"
-#~ msgstr "Alle Anträge als PDF drucken"
-
-#~ msgid "Need supporters"
-#~ msgstr "Benötigt Unterstützer/innen"
-
-#~ msgid "Without number"
-#~ msgstr "Ohne Nummer"
-
-#~ msgid "Not yet authorized"
-#~ msgstr "Noch nicht zugelassen"
-
-#~ msgid "Authorized"
-#~ msgstr "Zugelassen"
-
-#~ msgid "Withdrawen (by submitter)"
-#~ msgstr "Zurückgezogen (durch Antragsteller/in)"
-
-#~ msgctxt "number of motions"
-#~ msgid "motion"
-#~ msgid_plural "motions"
-#~ msgstr[0] "Antrag"
-#~ msgstr[1] "Anträge"
-
-#~ msgid "#"
-#~ msgstr "#"
-
-#~ msgid "Motion title"
-#~ msgstr "Antragstitel"
-
-#~ msgid "Number of supporters"
-#~ msgstr "Anzahl der Unterstützer/innen"
-
-#~ msgid "Creation Time"
-#~ msgstr "Erstellungszeit"
-
-#~ msgid "Print motion as PDF"
-#~ msgstr "Antrag als PDF drucken"
-
-#~ msgid "Back to motion"
-#~ msgstr "Zurück zum Antrag"
-
-#~ msgid "Show motion"
-#~ msgstr "Antrag anzeigen"
-
-#~ msgid "Print this motion as PDF"
-#~ msgstr "Diesen Antrag als PDF drucken"
-
-#~ msgid "Delete motion"
-#~ msgstr "Antrag löschen"
-
-#~ msgid "This is not the newest version."
-#~ msgstr "Dies ist nicht die neuste Version."
-
-#~ msgid "Go to version"
-#~ msgstr "Gehe zu Version"
-
-#~ msgid "This is not the authorized version."
-#~ msgstr "Dies ist nicht die zugelassene Version."
-
-#~ msgid "Version History"
-#~ msgstr "Versionshistorie"
-
-#~ msgid "This version is authorized"
-#~ msgstr "Diese Version wurde zugelassen"
-
-#~ msgid "Permit this version"
-#~ msgstr "Diese Version zulassen"
-
-#~ msgid "Reject this version"
-#~ msgstr "Diese Version verwerfen"
-
-#~ msgid "This version is rejected"
-#~ msgstr "Diese Version wurde verworfen"
-
-#~ msgid "unchanged"
-#~ msgstr "unverändert"
-
-#~ msgid "Show log"
-#~ msgstr "Log anzeigen"
-
-#~ msgid "No results"
-#~ msgstr "Keine Ergebnisse"
-
-#~ msgid "Withdraw motion"
-#~ msgstr "Antrag zurückziehen"
-
-#~ msgid "Unsupport motion"
-#~ msgstr "Antrag nicht unterstützen"
-
-#~ msgid "Support"
-#~ msgstr "Unterstützen"
-
-#~ msgid "minimum required supporters"
-#~ msgstr "minimal erforderliche Unterstützer/innen"
-
-#~ msgid "Manage motion"
-#~ msgstr "Antrag verwalten"
-
-#~ msgid "Formal validation"
-#~ msgstr "Formale Gültigkeitsprüfung"
-
-#~ msgid "Publish"
-#~ msgstr "Veröffentlichen"
-
-#~ msgid "Permit"
-#~ msgstr "Zulassen"
-
-#~ msgid "Not permit"
-#~ msgstr "Nicht zulassen"
-
-#~ msgid "Set number"
-#~ msgstr "Setze Nummer"
-
-#~ msgid "Result after vote"
-#~ msgstr "Ergebnis nach der Abstimmung"
-
-#~ msgid "Withdrawed by Submitter"
-#~ msgstr "Zurückgezogen durch Antragsteller/in"
-
-#~ msgid "For Administration only:"
-#~ msgstr "Nur zur Administration:"
-
-#~ msgid "Reset"
-#~ msgstr "Zurücksetzen"
-
-#~ msgid "My motions and elections"
-#~ msgstr "Meine Anträge und Wahlen"
-
-#~ msgid "Countdown"
-#~ msgstr "Countdown"
diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.mo b/openslides/locale/de/LC_MESSAGES/djangojs.mo
index 9bb3fd8c1..64d72537e 100644
Binary files a/openslides/locale/de/LC_MESSAGES/djangojs.mo and b/openslides/locale/de/LC_MESSAGES/djangojs.mo differ
diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.po b/openslides/locale/de/LC_MESSAGES/djangojs.po
index 5067a2a49..ba1b782ca 100644
--- a/openslides/locale/de/LC_MESSAGES/djangojs.po
+++ b/openslides/locale/de/LC_MESSAGES/djangojs.po
@@ -1,21 +1,210 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
+# German translations for JavaScript file in OpenSlides package.
+# Copyright (C) 2011-2013 by OpenSlides team, see AUTHORS.
+# This file is distributed under the same license as the OpenSlides package.
+# Emanuel Schütze , 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: OpenSlides 1.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-03-12 21:29+0100\n"
+"POT-Creation-Date: 2013-04-23 16:17+0200\n"
"PO-Revision-Date: 2012-07-28 11:07+0200\n"
-"Last-Translator: Oskar Hahn \n"
+"Last-Translator: Emanuel Schütze \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: agenda/static/javascript/agenda-config-datepicker.js:9
+#: agenda/static/javascript/agenda-config-datepicker.js:39
+msgid "en"
+msgstr "en"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:10
+msgid "previous month"
+msgstr "vorheriger Monat"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:11
+msgid "next month"
+msgstr "nächster Monat"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:13
+msgid "January"
+msgstr "Januar"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:13
+msgid "February"
+msgstr "Februar"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:13
+msgid "March"
+msgstr "März"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:14
+msgid "April"
+msgstr "April"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:14
+#: agenda/static/javascript/agenda-config-datepicker.js:20
+msgid "May"
+msgstr "Mai"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:14
+msgid "June"
+msgstr "Juni"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:15
+msgid "July"
+msgstr "Juli"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:15
+msgid "August"
+msgstr "August"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:15
+msgid "September"
+msgstr "September"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:16
+msgid "October"
+msgstr "Oktober"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:16
+msgid "November"
+msgstr "November"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:16
+msgid "December"
+msgstr "Dezember"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:19
+msgid "Jan"
+msgstr "Jan"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:19
+msgid "Feb"
+msgstr "Feb"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:19
+msgid "Mar"
+msgstr "Mär"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:20
+msgid "Apr"
+msgstr "Apr"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:20
+msgid "Jun"
+msgstr "Jun"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:21
+msgid "Jul"
+msgstr "Jul"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:21
+msgid "Aug"
+msgstr "Aug"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:21
+msgid "Sep"
+msgstr "Sep"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:22
+msgid "Oct"
+msgstr "Okt"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:22
+msgid "Nov"
+msgstr "Nov"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:22
+msgid "Dec"
+msgstr "Dez"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:25
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:25
+msgid "Monday"
+msgstr "Montag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:25
+msgid "Tuesdey"
+msgstr "Dienstag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:25
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:26
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:26
+msgid "Friday"
+msgstr "Freitag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:26
+msgid "Saturday"
+msgstr "Samstag"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:29
+#: agenda/static/javascript/agenda-config-datepicker.js:33
+msgid "Su"
+msgstr "So"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:29
+#: agenda/static/javascript/agenda-config-datepicker.js:33
+msgid "Mo"
+msgstr "Mo"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:29
+#: agenda/static/javascript/agenda-config-datepicker.js:33
+msgid "Tu"
+msgstr "Di"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:29
+#: agenda/static/javascript/agenda-config-datepicker.js:33
+msgid "We"
+msgstr "Mi"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:30
+#: agenda/static/javascript/agenda-config-datepicker.js:34
+msgid "Th"
+msgstr "Do"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:30
+#: agenda/static/javascript/agenda-config-datepicker.js:34
+msgid "Fr"
+msgstr "Fr"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:30
+#: agenda/static/javascript/agenda-config-datepicker.js:34
+msgid "Sa"
+msgstr "Sa"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:45
+msgid "Time"
+msgstr "Zeit"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:46
+msgid "Hour"
+msgstr "Stunde"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:47
+msgid "Minute"
+msgstr "Minute"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:48
+msgid "Current time"
+msgstr "Aktuelle Zeit"
+
+#: agenda/static/javascript/agenda-config-datepicker.js:49
+msgid "Close"
+msgstr "Schließen"
+
#: agenda/static/javascript/agenda.js:27
#, c-format
msgid ", of which %s are hidden."
diff --git a/openslides/mediafile/models.py b/openslides/mediafile/models.py
index 806d9ed70..98ab41f9a 100644
--- a/openslides/mediafile/models.py
+++ b/openslides/mediafile/models.py
@@ -13,7 +13,7 @@
import mimetypes
from django.db import models
-from django.utils.translation import ugettext_noop
+from django.utils.translation import ugettext_lazy, ugettext_noop
from openslides.utils.person.models import PersonField
@@ -23,16 +23,16 @@ class Mediafile(models.Model):
Class for uploaded files which can be delivered under a certain url.
"""
- mediafile = models.FileField(upload_to='file')
+ mediafile = models.FileField(upload_to='file', verbose_name=ugettext_lazy("File"))
"""
See https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield
for more information.
"""
- title = models.CharField(max_length=255, unique=True)
+ title = models.CharField(max_length=255, unique=True, verbose_name=ugettext_lazy("Title"))
"""A string representing the title of the file."""
- uploader = PersonField(blank=True)
+ uploader = PersonField(blank=True, verbose_name=ugettext_lazy("Uploaded by"))
"""A person – the uploader of a file."""
timestamp = models.DateTimeField(auto_now_add=True)
diff --git a/openslides/mediafile/static/styles/mediafile.css b/openslides/mediafile/static/styles/mediafile.css
index 99f7d28cd..1ce9b1168 100644
--- a/openslides/mediafile/static/styles/mediafile.css
+++ b/openslides/mediafile/static/styles/mediafile.css
@@ -8,5 +8,9 @@
/** Navigation icons (mapping to glyphicons-halflings) **/
.icon-mediafile {
- background-position: -96px -24px;
+ background-image: url("../img/glyphicons_062_paperclip.png");
+ background-position: 0;
+}
+.leftmenu ul li.active a span.ico i.icon-mediafile {
+ background-image: url("../img/glyphicons_062_paperclip_white.png");
}
diff --git a/openslides/mediafile/templates/mediafile/mediafile_list.html b/openslides/mediafile/templates/mediafile/mediafile_list.html
index 73b7b3530..eb39c2afe 100644
--- a/openslides/mediafile/templates/mediafile/mediafile_list.html
+++ b/openslides/mediafile/templates/mediafile/mediafile_list.html
@@ -19,7 +19,7 @@
{% trans 'Type' %}
{% trans 'Size' %}
{% trans 'Upload time' %}
- {% trans 'Uploader' %}
+ {% trans 'Uploaded by' %}
{% if perms.mediafile.can_manage %}
{% trans "Actions" %}
{% endif %}
diff --git a/openslides/motion/forms.py b/openslides/motion/forms.py
index d5a7e76c8..989af7a6e 100644
--- a/openslides/motion/forms.py
+++ b/openslides/motion/forms.py
@@ -11,7 +11,7 @@
"""
from django import forms
-from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext as _, ugettext_lazy
from openslides.utils.forms import CssClassMixin
from openslides.utils.forms import CleanHtmlFormMixin
@@ -30,18 +30,18 @@ class BaseMotionForm(CleanHtmlFormMixin, CssClassMixin, forms.ModelForm):
"""
clean_html_fields = ('text', 'reason')
- title = forms.CharField(widget=forms.TextInput(), label=_("Title"))
+ title = forms.CharField(widget=forms.TextInput(), label=ugettext_lazy("Title"))
"""
Title of the motion. Will be saved in a MotionVersion object.
"""
- text = forms.CharField(widget=forms.Textarea(), label=_("Text"))
+ text = forms.CharField(widget=forms.Textarea(), label=ugettext_lazy("Text"))
"""
Text of the motion. Will be saved in a MotionVersion object.
"""
reason = forms.CharField(
- widget=forms.Textarea(), required=False, label=_("Reason"))
+ widget=forms.Textarea(), required=False, label=ugettext_lazy("Reason"))
"""
Reason of the motion. will be saved in a MotionVersion object.
"""
@@ -64,7 +64,7 @@ class BaseMotionForm(CleanHtmlFormMixin, CssClassMixin, forms.ModelForm):
class MotionSubmitterMixin(forms.ModelForm):
"""Mixin to append the submitter field to a MotionForm."""
- submitter = MultiplePersonFormField(label=_("Submitter"))
+ submitter = MultiplePersonFormField(label=ugettext_lazy("Submitter"))
"""Submitter of the motion. Can be one or more persons."""
def __init__(self, *args, **kwargs):
@@ -78,7 +78,7 @@ class MotionSubmitterMixin(forms.ModelForm):
class MotionSupporterMixin(forms.ModelForm):
"""Mixin to append the supporter field to a Motionform."""
- supporter = MultiplePersonFormField(required=False, label=_("Supporters"))
+ supporter = MultiplePersonFormField(required=False, label=ugettext_lazy("Supporters"))
"""Supporter of the motion. Can be one or more persons."""
def __init__(self, *args, **kwargs):
@@ -93,8 +93,8 @@ class MotionDisableVersioningMixin(forms.ModelForm):
"""Mixin to add the option to the form to choose to disable versioning."""
disable_versioning = forms.BooleanField(
- required=False, label=_("Don't create a new version"),
- help_text=_("Don't create a new version. Useful e. g. for trivial changes."))
+ required=False, label=ugettext_lazy("Don't create a new version"),
+ help_text=ugettext_lazy("Don't create a new version. Useful e.g. for trivial changes."))
"""BooleanField to decide, if a new version will be created, or the
last_version will be used."""
@@ -102,10 +102,10 @@ class MotionDisableVersioningMixin(forms.ModelForm):
class MotionCategoryMixin(forms.ModelForm):
"""Mixin to let the user choose the category for the motion."""
- category = forms.ModelChoiceField(queryset=Category.objects.all(), required=False)
+ category = forms.ModelChoiceField(queryset=Category.objects.all(), required=False, label=ugettext_lazy("Category"))
class MotionIdentifierMixin(forms.ModelForm):
"""Mixin to let the user choose the identifier for the motion."""
- identifier = forms.CharField(required=False)
+ identifier = forms.CharField(required=False, label=ugettext_lazy("Identifier"))
diff --git a/openslides/motion/models.py b/openslides/motion/models.py
index 1d3e9f0ff..e54379c87 100644
--- a/openslides/motion/models.py
+++ b/openslides/motion/models.py
@@ -21,7 +21,7 @@ from django.db.models import Max
from django.dispatch import receiver
from django.utils import formats
from django.utils.translation import pgettext
-from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _
+from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop
from openslides.utils.person import PersonField
from openslides.config.api import config
@@ -565,7 +565,7 @@ class MotionVersion(models.Model):
title = models.CharField(max_length=255, verbose_name=ugettext_lazy("Title"))
"""The title of a motion."""
- text = models.TextField(verbose_name=_("Text"))
+ text = models.TextField(verbose_name=ugettext_lazy("Text"))
"""The text of a motion."""
reason = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Reason"))
@@ -585,7 +585,7 @@ class MotionVersion(models.Model):
def __unicode__(self):
"""Return a string, representing this object."""
- counter = self.version_number or _('new')
+ counter = self.version_number or ugettext_lazy('new')
return "%s Version %s" % (self.motion, counter) # TODO: Should this really be self.motion or the title of the specific version?
def get_absolute_url(self, link='detail'):
diff --git a/openslides/motion/pdf.py b/openslides/motion/pdf.py
index 8ea7a0279..a029b2b2f 100644
--- a/openslides/motion/pdf.py
+++ b/openslides/motion/pdf.py
@@ -167,7 +167,7 @@ def motion_to_pdf(pdf, motion):
# motion reason
if motion.reason:
- pdf.append(Paragraph(_("Reason:"), stylesheet['Heading3']))
+ pdf.append(Paragraph(_("Reason")+":", stylesheet['Heading3']))
convert_html_to_reportlab(pdf, motion.reason)
return pdf
diff --git a/openslides/motion/signals.py b/openslides/motion/signals.py
index 76f2f9668..8f86ffc4d 100644
--- a/openslides/motion/signals.py
+++ b/openslides/motion/signals.py
@@ -30,36 +30,36 @@ def setup_motion_config_page(sender, **kwargs):
name='motion_stop_submitting',
default_value=False,
form_field=forms.BooleanField(
- label=_('Stop submitting new motions by non-staff users'),
+ label=ugettext_lazy('Stop submitting new motions by non-staff users'),
required=False))
motion_min_supporters = ConfigVariable(
name='motion_min_supporters',
default_value=0,
form_field=forms.IntegerField(
widget=forms.TextInput(attrs={'class': 'small-input'}),
- label=_('Number of (minimum) required supporters for a motion'),
+ label=ugettext_lazy('Number of (minimum) required supporters for a motion'),
initial=4,
min_value=0,
max_value=8,
- help_text=_('Choose 0 to disable the supporting system')))
+ help_text=ugettext_lazy('Choose 0 to disable the supporting system')))
motion_preamble = ConfigVariable(
name='motion_preamble',
default_value=_('The assembly may decide,'),
form_field=forms.CharField(
widget=forms.TextInput(),
required=False,
- label=_('Motion preamble')))
+ label=ugettext_lazy('Motion preamble')))
motion_pdf_ballot_papers_selection = ConfigVariable(
name='motion_pdf_ballot_papers_selection',
default_value='CUSTOM_NUMBER',
form_field=forms.ChoiceField(
widget=forms.Select(),
required=False,
- label=_('Number of ballot papers (selection)'),
+ label=ugettext_lazy('Number of ballot papers (selection)'),
choices=[
- ('NUMBER_OF_DELEGATES', _('Number of all delegates')),
- ('NUMBER_OF_ALL_PARTICIPANTS', _('Number of all participants')),
- ('CUSTOM_NUMBER', _("Use the following custom number"))]))
+ ('NUMBER_OF_DELEGATES', ugettext_lazy('Number of all delegates')),
+ ('NUMBER_OF_ALL_PARTICIPANTS', ugettext_lazy('Number of all participants')),
+ ('CUSTOM_NUMBER', ugettext_lazy("Use the following custom number"))]))
motion_pdf_ballot_papers_number = ConfigVariable(
name='motion_pdf_ballot_papers_number',
default_value=8,
@@ -67,46 +67,46 @@ def setup_motion_config_page(sender, **kwargs):
widget=forms.TextInput(attrs={'class': 'small-input'}),
required=False,
min_value=1,
- label=_('Custom number of ballot papers')))
+ label=ugettext_lazy('Custom number of ballot papers')))
motion_pdf_title = ConfigVariable(
name='motion_pdf_title',
default_value=_('Motions'),
form_field=forms.CharField(
widget=forms.TextInput(),
required=False,
- label=_('Title for PDF document (all motions)')))
+ label=ugettext_lazy('Title for PDF document (all motions)')))
motion_pdf_preamble = ConfigVariable(
name='motion_pdf_preamble',
default_value='',
form_field=forms.CharField(
widget=forms.Textarea(),
required=False,
- label=_('Preamble text for PDF document (all motions)')))
+ label=ugettext_lazy('Preamble text for PDF document (all motions)')))
motion_allow_disable_versioning = ConfigVariable(
name='motion_allow_disable_versioning',
default_value=False,
form_field=forms.BooleanField(
- label=_('Allow to disable versioning'),
+ label=ugettext_lazy('Allow to disable versioning'),
required=False))
motion_workflow = ConfigVariable(
name='motion_workflow',
default_value=1,
form_field=forms.ChoiceField(
widget=forms.Select(),
- label=_('Workflow of new motions'),
+ label=ugettext_lazy('Workflow of new motions'),
required=True,
- choices=[(workflow.pk, workflow.name) for workflow in Workflow.objects.all()]))
+ choices=[(workflow.pk, ugettext_lazy(workflow.name)) for workflow in Workflow.objects.all()]))
motion_identifier = ConfigVariable(
name='motion_identifier',
default_value='manually',
form_field=forms.ChoiceField(
widget=forms.Select(),
required=False,
- label=_('Identifier'),
+ label=ugettext_lazy('Identifier'),
choices=[
- ('manually', _('Set it manually')),
- ('per_category', _('Numbered per category')),
- ('serially_numbered', _('Serially numbered'))]))
+ ('manually', ugettext_lazy('Set it manually')),
+ ('per_category', ugettext_lazy('Numbered per category')),
+ ('serially_numbered', ugettext_lazy('Serially numbered'))]))
return ConfigPage(title=ugettext_noop('Motion'),
url='motion',
diff --git a/openslides/motion/templates/motion/category_list.html b/openslides/motion/templates/motion/category_list.html
index 41e9f821d..3544997ff 100644
--- a/openslides/motion/templates/motion/category_list.html
+++ b/openslides/motion/templates/motion/category_list.html
@@ -10,7 +10,7 @@
{% trans "Categories" %}
{% if perms.motion.can_manage_motion %}
- {% trans 'New' %}
+ {% trans 'New' %}
{% endif %}
{% trans "Back to overview" %}
diff --git a/openslides/motion/templates/motion/motion_detail.html b/openslides/motion/templates/motion/motion_detail.html
index a7969e7c2..10595e5ed 100644
--- a/openslides/motion/templates/motion/motion_detail.html
+++ b/openslides/motion/templates/motion/motion_detail.html
@@ -126,11 +126,11 @@
-
+
{# TODO: add delete version function #}
-
+
diff --git a/openslides/motion/templates/motion/motion_diff.html b/openslides/motion/templates/motion/motion_diff.html
index f03d54b85..9a4397da0 100644
--- a/openslides/motion/templates/motion/motion_diff.html
+++ b/openslides/motion/templates/motion/motion_diff.html
@@ -34,11 +34,11 @@
{% trans "Version" %} {{ version_rev1.version_number }}
- {% trans "created: " %} {{ version_rev1.creation_time }}
+ {% trans "created" %}: {{ version_rev1.creation_time }}
{{ version_rev1.title }}
{% trans "Version" %} {{ version_rev2.version_number }}
- {% trans "created: " %} {{ version_rev1.creation_time }}
+ {% trans "created" %}: {{ version_rev1.creation_time }}
{{ version_rev2.title }}
diff --git a/openslides/motion/templates/motion/motion_form.html b/openslides/motion/templates/motion/motion_form.html
index e8242cd64..72bb29bdb 100644
--- a/openslides/motion/templates/motion/motion_form.html
+++ b/openslides/motion/templates/motion/motion_form.html
@@ -31,7 +31,11 @@
{% trans "New motion" %}
{% endif %}
- {% trans "Back to overview" %}
+ {% if motion %}
+ {% trans "Back to motion" %}
+ {% else %}
+ {% trans "Back to overview" %}
+ {% endif %}