Eco account unit tests

* adds eco account unit tests
* adds validity check to eco account form to check on existing deductions and potential conflict with reduced deductable surface
* improves geojson handling on SimpleGeomForm
* adds/updates translation
pull/347/head
mpeltriaux 1 year ago
parent 5684b9b6d9
commit 3fa76063d0

@ -172,6 +172,23 @@ class EditEcoAccountForm(NewEcoAccountForm):
disabled_fields disabled_fields
) )
def is_valid(self):
valid = super().is_valid()
deductable_surface = self.cleaned_data.get("surface")
deduction_surface_sum = self.instance.get_deductions_surface()
if deductable_surface < deduction_surface_sum:
self.add_error(
"surface",
_("{}m² have been deducted from this eco account so far. The given value of {} would be too low.").format(
deduction_surface_sum,
deductable_surface
)
)
valid &= False
return valid
def save(self, user: User, geom_form: SimpleGeomForm): def save(self, user: User, geom_form: SimpleGeomForm):
with transaction.atomic(): with transaction.atomic():
# Fetch data from cleaned POST values # Fetch data from cleaned POST values

@ -59,20 +59,6 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
def __str__(self): def __str__(self):
return f"{self.identifier} ({self.title})" return f"{self.identifier} ({self.title})"
def clean(self):
# Deductable surface can not be larger than added states after surface
after_state_sum = self.get_surface_after_states()
if self.deductable_surface > after_state_sum:
raise ValidationError(_("Deductable surface can not be larger than existing surfaces in after states"))
# Deductable surface can not be lower than amount of already deducted surfaces
# User needs to contact deducting user in case of further problems
deducted_sum = self.get_deductions_surface()
if self.deductable_surface < deducted_sum:
raise ValidationError(
_("Deductable surface can not be smaller than the sum of already existing deductions. Please contact the responsible users for the deductions!")
)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.identifier is None or len(self.identifier) == 0: if self.identifier is None or len(self.identifier) == 0:
# Create new identifier if none was given # Create new identifier if none was given

@ -0,0 +1,7 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 30.08.23
"""

@ -0,0 +1,128 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 30.08.23
"""
from django.core.exceptions import ObjectDoesNotExist
from django.urls import reverse
from compensation.models import EcoAccountDocument
from konova.tests.test_views import BaseTestCase
from konova.utils.message_templates import DOCUMENT_REMOVED_TEMPLATE, DEDUCTION_REMOVED
from user.models import UserAction
class EcoAccountTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_str(self):
self.assertEqual(str(self.eco_account), f"{self.eco_account.identifier} ({self.eco_account.title})")
def test_save(self):
old_id = self.eco_account.identifier
self.assertIsNotNone(self.eco_account.identifier)
self.eco_account.identifier = None
self.eco_account.save()
self.assertIsNotNone(self.eco_account.identifier)
self.assertNotEqual(old_id, self.eco_account.identifier)
def test_property_deductions_surface_sum(self):
self.assertEqual(
self.eco_account.deductions_surface_sum,
self.eco_account.get_deductions_surface()
)
def test_get_documents(self):
docs = self.eco_account.get_documents()
self.assertEqual(docs.count(), 0)
doc = self.create_dummy_document(EcoAccountDocument, self.eco_account)
self.assertIn(doc, self.eco_account.get_documents())
def test_get_share_link(self):
self.assertEqual(
self.eco_account.get_share_link(),
reverse(
"compensation:acc:share-token",
args=(self.eco_account.id, self.eco_account.access_token)
)
)
def test_get_deductable_rest_relative(self):
self.assertEqual(self.eco_account.deductions.count(), 0)
self.eco_account.deductable_surface = 5.0
self.eco_account.save()
self.eco_account.update_deductable_rest()
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 100)
self.eco_account.deductable_surface = None
self.eco_account.save()
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 0)
class EcoAccountDocumentTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_delete(self):
doc = self.create_dummy_document(
EcoAccountDocument,
self.eco_account
)
doc_title = doc.title
docs = self.eco_account.get_documents()
self.assertIn(doc, docs)
doc.delete(user=self.superuser)
last_log = self.eco_account.log.first()
self.assertEqual(last_log.user, self.superuser)
self.assertEqual(last_log.action, UserAction.EDITED)
self.assertEqual(last_log.comment, DOCUMENT_REMOVED_TEMPLATE.format(
doc_title
))
try:
doc.refresh_from_db()
self.fail("Document should not have been fetchable")
except ObjectDoesNotExist:
pass
class EcoAccountDeductionTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_str(self):
self.assertEqual(str(self.deduction), f"{self.deduction.surface} of {self.deduction.account}")
def test_delete(self):
self.deduction.account = self.eco_account
self.deduction.intervention = self.intervention
self.deduction.save()
self.eco_account.update_deductable_rest()
old_deductable_rest = self.eco_account.deductable_rest
deduction_surface = self.deduction.surface
self.deduction.delete(self.superuser)
last_log_intervention = self.intervention.log.first()
last_log_account = self.eco_account.log.first()
logs = [
last_log_intervention,
last_log_account,
]
for log in logs:
self.assertEqual(log.action, UserAction.EDITED)
self.assertEqual(log.user, self.superuser)
self.assertEqual(log.comment, DEDUCTION_REMOVED)
self.assertLess(old_deductable_rest, self.eco_account.deductable_rest)
self.assertEqual(old_deductable_rest + deduction_surface, self.eco_account.deductable_rest)
try:
self.deduction.refresh_from_db()
self.fail("Deduction still fetchable after deleting")
except ObjectDoesNotExist:
pass

@ -150,7 +150,9 @@ def edit_view(request: HttpRequest, id: str):
data_form = EditEcoAccountForm(request.POST or None, instance=acc) data_form = EditEcoAccountForm(request.POST or None, instance=acc)
geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=acc) geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=acc)
if request.method == "POST": if request.method == "POST":
if data_form.is_valid() and geom_form.is_valid(): data_form_valid = data_form.is_valid()
geom_form_valid = geom_form.is_valid()
if data_form_valid and geom_form_valid:
# The data form takes the geom form for processing, as well as the performing user # The data form takes the geom form for processing, as well as the performing user
acc = data_form.save(request.user, geom_form) acc = data_form.save(request.user, geom_form)
messages.success(request, _("Eco-Account {} edited").format(acc.identifier)) messages.success(request, _("Eco-Account {} edited").format(acc.identifier))

@ -8,10 +8,10 @@ Created on: 15.08.22
import json import json
from django.contrib.gis import gdal from django.contrib.gis import gdal
from django.contrib.gis.forms import MultiPolygonField
from django.contrib.gis.geos import MultiPolygon, Polygon from django.contrib.gis.geos import MultiPolygon, Polygon
from django.contrib.gis.geos.prototypes.io import WKTWriter from django.contrib.gis.geos.prototypes.io import WKTWriter
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.forms import JSONField
from konova.forms.base_form import BaseForm from konova.forms.base_form import BaseForm
from konova.models import Geometry from konova.models import Geometry
@ -27,8 +27,7 @@ class SimpleGeomForm(BaseForm):
""" """
read_only = True read_only = True
geometry_simplified = False geometry_simplified = False
geom = MultiPolygonField( geom = JSONField(
srid=DEFAULT_SRID_RLP,
label=_("Geometry"), label=_("Geometry"),
help_text=_(""), help_text=_(""),
label_suffix="", label_suffix="",

Binary file not shown.

@ -43,7 +43,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-10 10:16+0200\n" "POT-Creation-Date: 2023-08-30 13:24+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -96,15 +96,16 @@ msgstr "Verantwortliche Stelle"
msgid "Click for selection" msgid "Click for selection"
msgstr "Auswählen..." msgstr "Auswählen..."
#: analysis/forms.py:70 #: analysis/forms.py:70 analysis/tests/unit/test_forms.py:25
msgid "Generate report" msgid "Generate report"
msgstr "Bericht generieren" msgstr "Bericht generieren"
#: analysis/forms.py:71 #: analysis/forms.py:71 analysis/tests/unit/test_forms.py:26
msgid "Select a timespan and the desired conservation office" msgid "Select a timespan and the desired conservation office"
msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle" msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle"
#: analysis/forms.py:74 konova/forms/modals/base_form.py:30 #: analysis/forms.py:74 analysis/tests/unit/test_forms.py:29
#: konova/forms/modals/base_form.py:30
msgid "Continue" msgid "Continue"
msgstr "Weiter" msgstr "Weiter"
@ -484,7 +485,15 @@ msgstr "Ökokonto XY; Flur ABC"
msgid "Edit Eco-Account" msgid "Edit Eco-Account"
msgstr "Ökokonto bearbeiten" msgstr "Ökokonto bearbeiten"
#: compensation/forms/eco_account.py:232 #: compensation/forms/eco_account.py:183
msgid ""
"{}m² have been deducted from this eco account so far. The given value of {} "
"would be too low."
msgstr ""
"{}n² wurden bereits von diesem Ökokonto abgebucht. Der eingegebene Wert von {} "
"wäre daher zu klein."
#: compensation/forms/eco_account.py:249
msgid "The account can not be removed, since there are still deductions." msgid "The account can not be removed, since there are still deductions."
msgstr "" msgstr ""
"Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen " "Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen "
@ -597,16 +606,19 @@ msgid "Insert the amount"
msgstr "Menge eingeben" msgstr "Menge eingeben"
#: compensation/forms/modals/compensation_action.py:94 #: compensation/forms/modals/compensation_action.py:94
#: compensation/tests/compensation/unit/test_forms.py:42
msgid "New action" msgid "New action"
msgstr "Neue Maßnahme" msgstr "Neue Maßnahme"
#: compensation/forms/modals/compensation_action.py:95 #: compensation/forms/modals/compensation_action.py:95
#: compensation/tests/compensation/unit/test_forms.py:43
msgid "Insert data for the new action" msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein" msgstr "Geben Sie die Daten der neuen Maßnahme ein"
#: compensation/forms/modals/compensation_action.py:119 #: compensation/forms/modals/compensation_action.py:119
#: compensation/templates/compensation/detail/compensation/includes/actions.html:68 #: compensation/templates/compensation/detail/compensation/includes/actions.html:68
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67 #: compensation/templates/compensation/detail/eco_account/includes/actions.html:67
#: compensation/tests/compensation/unit/test_forms.py:84
#: ema/templates/ema/detail/includes/actions.html:65 #: ema/templates/ema/detail/includes/actions.html:65
msgid "Edit action" msgid "Edit action"
msgstr "Maßnahme bearbeiten" msgstr "Maßnahme bearbeiten"
@ -640,18 +652,21 @@ msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
#: compensation/forms/modals/deadline.py:65 #: compensation/forms/modals/deadline.py:65
#: konova/tests/unit/test_deadline.py:29
msgid "New deadline" msgid "New deadline"
msgstr "Neue Frist" msgstr "Neue Frist"
#: compensation/forms/modals/deadline.py:66 #: compensation/forms/modals/deadline.py:66
#: konova/tests/unit/test_deadline.py:30
msgid "Insert data for the new deadline" msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein" msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/forms/modals/deadline.py:75 #: compensation/forms/modals/deadline.py:78
#: konova/tests/unit/test_deadline.py:57
msgid "Please explain this 'other' type of deadline." msgid "Please explain this 'other' type of deadline."
msgstr "Bitte erklären Sie um welchen 'sonstigen' Termin es sich handelt." msgstr "Bitte erklären Sie um welchen 'sonstigen' Termin es sich handelt."
#: compensation/forms/modals/deadline.py:92 #: compensation/forms/modals/deadline.py:95
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62
#: ema/templates/ema/detail/includes/deadlines.html:62 #: ema/templates/ema/detail/includes/deadlines.html:62
@ -706,10 +721,12 @@ msgid "in m²"
msgstr "" msgstr ""
#: compensation/forms/modals/state.py:72 #: compensation/forms/modals/state.py:72
#: compensation/tests/compensation/unit/test_forms.py:175
msgid "New state" msgid "New state"
msgstr "Neuer Zustand" msgstr "Neuer Zustand"
#: compensation/forms/modals/state.py:73 #: compensation/forms/modals/state.py:73
#: compensation/tests/compensation/unit/test_forms.py:176
msgid "Insert data for the new state" msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein" msgstr "Geben Sie die Daten des neuen Zustandes ein"
@ -722,6 +739,7 @@ msgstr "Objekt entfernt"
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:62 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62 #: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:62 #: compensation/templates/compensation/detail/eco_account/includes/states-before.html:62
#: compensation/tests/compensation/unit/test_forms.py:236
#: ema/templates/ema/detail/includes/states-after.html:60 #: ema/templates/ema/detail/includes/states-after.html:60
#: ema/templates/ema/detail/includes/states-before.html:60 #: ema/templates/ema/detail/includes/states-before.html:60
msgid "Edit state" msgid "Edit state"
@ -755,21 +773,6 @@ msgstr ""
msgid "Pieces" msgid "Pieces"
msgstr "Stück" msgstr "Stück"
#: compensation/models/eco_account.py:62
msgid ""
"Deductable surface can not be larger than existing surfaces in after states"
msgstr ""
"Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
"überschreiten"
#: compensation/models/eco_account.py:69
msgid ""
"Deductable surface can not be smaller than the sum of already existing "
"deductions. Please contact the responsible users for the deductions!"
msgstr ""
"Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar einstellen "
"wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!"
#: compensation/tables/compensation.py:33 compensation/tables/eco_account.py:34 #: compensation/tables/compensation.py:33 compensation/tables/eco_account.py:34
#: ema/tables.py:36 intervention/tables.py:33 #: ema/tables.py:36 intervention/tables.py:33
#: konova/filters/mixins/geo_reference.py:42 #: konova/filters/mixins/geo_reference.py:42
@ -1424,6 +1427,7 @@ msgid "Binding on"
msgstr "Datum Bestandskraft bzw. Rechtskraft" msgstr "Datum Bestandskraft bzw. Rechtskraft"
#: intervention/forms/intervention.py:216 #: intervention/forms/intervention.py:216
#: intervention/tests/unit/test_forms.py:27
#: intervention/views/intervention.py:105 #: intervention/views/intervention.py:105
msgid "New intervention" msgid "New intervention"
msgstr "Neuer Eingriff" msgstr "Neuer Eingriff"
@ -1802,7 +1806,6 @@ msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
#: konova/forms/modals/document_form.py:49 #: konova/forms/modals/document_form.py:49
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
#: venv_py3.9/lib/python3.9/site-packages/django/db/models/fields/files.py:231
msgid "File" msgid "File"
msgstr "Datei" msgstr "Datei"
@ -2234,15 +2237,11 @@ msgstr "Dokument bearbeitet"
msgid "Edited general data" msgid "Edited general data"
msgstr "Allgemeine Daten bearbeitet" msgstr "Allgemeine Daten bearbeitet"
#: konova/utils/message_templates.py:82 #: konova/utils/message_templates.py:84
msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt"
#: konova/utils/message_templates.py:85
msgid "Geometry conflict detected with {}" msgid "Geometry conflict detected with {}"
msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}" msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}"
#: konova/utils/message_templates.py:86 #: konova/utils/message_templates.py:85
msgid "" msgid ""
"The geometry contained more than {} vertices. It had to be simplified to " "The geometry contained more than {} vertices. It had to be simplified to "
"match the allowed limit of {} vertices." "match the allowed limit of {} vertices."
@ -2250,20 +2249,20 @@ msgstr ""
"Die Geometrie enthielt mehr als {} Eckpunkte. Sie musste vereinfacht werden " "Die Geometrie enthielt mehr als {} Eckpunkte. Sie musste vereinfacht werden "
"um die Obergrenze von {} erlaubten Eckpunkten einzuhalten." "um die Obergrenze von {} erlaubten Eckpunkten einzuhalten."
#: konova/utils/message_templates.py:89 #: konova/utils/message_templates.py:88
msgid "This intervention has {} revocations" msgid "This intervention has {} revocations"
msgstr "Dem Eingriff liegen {} Widersprüche vor" msgstr "Dem Eingriff liegen {} Widersprüche vor"
#: konova/utils/message_templates.py:92 #: konova/utils/message_templates.py:91
msgid "Checked on {} by {}" msgid "Checked on {} by {}"
msgstr "Am {} von {} geprüft worden" msgstr "Am {} von {} geprüft worden"
#: konova/utils/message_templates.py:93 #: konova/utils/message_templates.py:92
msgid "Data has changed since last check on {} by {}" msgid "Data has changed since last check on {} by {}"
msgstr "" msgstr ""
"Daten wurden nach der letzten Prüfung geändert. Letzte Prüfung am {} durch {}" "Daten wurden nach der letzten Prüfung geändert. Letzte Prüfung am {} durch {}"
#: konova/utils/message_templates.py:94 #: konova/utils/message_templates.py:93
msgid "Current data not checked yet" msgid "Current data not checked yet"
msgstr "Momentane Daten noch nicht geprüft" msgstr "Momentane Daten noch nicht geprüft"
@ -2297,7 +2296,7 @@ msgstr ""
"Dieses Datum ist unrealistisch. Geben Sie bitte das korrekte Datum ein " "Dieses Datum ist unrealistisch. Geben Sie bitte das korrekte Datum ein "
"(>1950)." "(>1950)."
#: konova/views/home.py:74 templates/navbars/navbar.html:16 #: konova/views/home.py:75 templates/navbars/navbar.html:16
msgid "Home" msgid "Home"
msgstr "Home" msgstr "Home"
@ -2305,7 +2304,7 @@ msgstr "Home"
msgid "Log" msgid "Log"
msgstr "Log" msgstr "Log"
#: konova/views/map_proxy.py:71 #: konova/views/map_proxy.py:70
msgid "" msgid ""
"The external service is currently unavailable.<br>Please try again in a few " "The external service is currently unavailable.<br>Please try again in a few "
"moments..." "moments..."
@ -3118,26 +3117,20 @@ msgstr "Team verlassen"
#: venv/lib/python3.7/site-packages/bootstrap4/components.py:17 #: venv/lib/python3.7/site-packages/bootstrap4/components.py:17
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3 #: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/messages.html:4 #: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/components.py:17
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
msgid "close" msgid "close"
msgstr "Schließen" msgstr "Schließen"
#: venv/lib/python3.7/site-packages/click/_termui_impl.py:496 #: venv/lib/python3.7/site-packages/click/_termui_impl.py:496
#: venv_py3.9/lib/python3.9/site-packages/click/_termui_impl.py:496
#, python-brace-format #, python-brace-format
msgid "{editor}: Editing failed" msgid "{editor}: Editing failed"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_termui_impl.py:500 #: venv/lib/python3.7/site-packages/click/_termui_impl.py:500
#: venv_py3.9/lib/python3.9/site-packages/click/_termui_impl.py:500
#, python-brace-format #, python-brace-format
msgid "{editor}: Editing failed: {e}" msgid "{editor}: Editing failed: {e}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:20 #: venv/lib/python3.7/site-packages/click/_unicodefun.py:20
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:20
msgid "" msgid ""
"Click will abort further execution because Python was configured to use " "Click will abort further execution because Python was configured to use "
"ASCII as encoding for the environment. Consult https://click.palletsprojects." "ASCII as encoding for the environment. Consult https://click.palletsprojects."
@ -3145,7 +3138,6 @@ msgid ""
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:56 #: venv/lib/python3.7/site-packages/click/_unicodefun.py:56
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:56
msgid "" msgid ""
"Additional information: on this system no suitable UTF-8 locales were " "Additional information: on this system no suitable UTF-8 locales were "
"discovered. This most likely requires resolving by reconfiguring the locale " "discovered. This most likely requires resolving by reconfiguring the locale "
@ -3153,14 +3145,12 @@ msgid ""
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:65 #: venv/lib/python3.7/site-packages/click/_unicodefun.py:65
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:65
msgid "" msgid ""
"This system supports the C.UTF-8 locale which is recommended. You might be " "This system supports the C.UTF-8 locale which is recommended. You might be "
"able to resolve your issue by exporting the following environment variables:" "able to resolve your issue by exporting the following environment variables:"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:75 #: venv/lib/python3.7/site-packages/click/_unicodefun.py:75
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:75
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"This system lists some UTF-8 supporting locales that you can pick from. The " "This system lists some UTF-8 supporting locales that you can pick from. The "
@ -3168,7 +3158,6 @@ msgid ""
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:93 #: venv/lib/python3.7/site-packages/click/_unicodefun.py:93
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:93
msgid "" msgid ""
"Click discovered that you exported a UTF-8 locale but the locale system " "Click discovered that you exported a UTF-8 locale but the locale system "
"could not pick up from it because it does not exist. The exported locale is " "could not pick up from it because it does not exist. The exported locale is "
@ -3176,32 +3165,25 @@ msgid ""
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1095 #: venv/lib/python3.7/site-packages/click/core.py:1095
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1095
msgid "Aborted!" msgid "Aborted!"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1279 #: venv/lib/python3.7/site-packages/click/core.py:1279
#: venv/lib/python3.7/site-packages/click/decorators.py:434 #: venv/lib/python3.7/site-packages/click/decorators.py:434
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1279
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:434
msgid "Show this message and exit." msgid "Show this message and exit."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1308 #: venv/lib/python3.7/site-packages/click/core.py:1308
#: venv/lib/python3.7/site-packages/click/core.py:1334 #: venv/lib/python3.7/site-packages/click/core.py:1334
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1308
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1334
#, python-brace-format #, python-brace-format
msgid "(Deprecated) {text}" msgid "(Deprecated) {text}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1351 #: venv/lib/python3.7/site-packages/click/core.py:1351
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1351
msgid "Options" msgid "Options"
msgstr "Optionen" msgstr "Optionen"
#: venv/lib/python3.7/site-packages/click/core.py:1375 #: venv/lib/python3.7/site-packages/click/core.py:1375
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1375
#, python-brace-format #, python-brace-format
msgid "Got unexpected extra argument ({args})" msgid "Got unexpected extra argument ({args})"
msgid_plural "Got unexpected extra arguments ({args})" msgid_plural "Got unexpected extra arguments ({args})"
@ -3209,32 +3191,26 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/core.py:1390 #: venv/lib/python3.7/site-packages/click/core.py:1390
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1390
msgid "DeprecationWarning: The command {name!r} is deprecated." msgid "DeprecationWarning: The command {name!r} is deprecated."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1607 #: venv/lib/python3.7/site-packages/click/core.py:1607
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1607
msgid "Commands" msgid "Commands"
msgstr "Befehle" msgstr "Befehle"
#: venv/lib/python3.7/site-packages/click/core.py:1639 #: venv/lib/python3.7/site-packages/click/core.py:1639
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1639
msgid "Missing command." msgid "Missing command."
msgstr "Befehl fehlt" msgstr "Befehl fehlt"
#: venv/lib/python3.7/site-packages/click/core.py:1717 #: venv/lib/python3.7/site-packages/click/core.py:1717
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1717
msgid "No such command {name!r}." msgid "No such command {name!r}."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2258 #: venv/lib/python3.7/site-packages/click/core.py:2258
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2258
msgid "Value must be an iterable." msgid "Value must be an iterable."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2278 #: venv/lib/python3.7/site-packages/click/core.py:2278
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2278
#, python-brace-format #, python-brace-format
msgid "Takes {nargs} values but 1 was given." msgid "Takes {nargs} values but 1 was given."
msgid_plural "Takes {nargs} values but {len} were given." msgid_plural "Takes {nargs} values but {len} were given."
@ -3242,99 +3218,81 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/core.py:2701 #: venv/lib/python3.7/site-packages/click/core.py:2701
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2701
#, python-brace-format #, python-brace-format
msgid "env var: {var}" msgid "env var: {var}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2724 #: venv/lib/python3.7/site-packages/click/core.py:2724
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2724
msgid "(dynamic)" msgid "(dynamic)"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2735 #: venv/lib/python3.7/site-packages/click/core.py:2735
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2735
#, python-brace-format #, python-brace-format
msgid "default: {default}" msgid "default: {default}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2748 #: venv/lib/python3.7/site-packages/click/core.py:2748
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2748
msgid "required" msgid "required"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/decorators.py:339 #: venv/lib/python3.7/site-packages/click/decorators.py:339
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:339
#, python-format #, python-format
msgid "%(prog)s, version %(version)s" msgid "%(prog)s, version %(version)s"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/decorators.py:403 #: venv/lib/python3.7/site-packages/click/decorators.py:403
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:403
msgid "Show the version and exit." msgid "Show the version and exit."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:43 #: venv/lib/python3.7/site-packages/click/exceptions.py:43
#: venv/lib/python3.7/site-packages/click/exceptions.py:79 #: venv/lib/python3.7/site-packages/click/exceptions.py:79
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:43
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:79
#, python-brace-format #, python-brace-format
msgid "Error: {message}" msgid "Error: {message}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:71 #: venv/lib/python3.7/site-packages/click/exceptions.py:71
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:71
#, python-brace-format #, python-brace-format
msgid "Try '{command} {option}' for help." msgid "Try '{command} {option}' for help."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:120 #: venv/lib/python3.7/site-packages/click/exceptions.py:120
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:120
#, python-brace-format #, python-brace-format
msgid "Invalid value: {message}" msgid "Invalid value: {message}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:122 #: venv/lib/python3.7/site-packages/click/exceptions.py:122
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:122
#, python-brace-format #, python-brace-format
msgid "Invalid value for {param_hint}: {message}" msgid "Invalid value for {param_hint}: {message}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:178 #: venv/lib/python3.7/site-packages/click/exceptions.py:178
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:178
msgid "Missing argument" msgid "Missing argument"
msgstr "Argument fehlt" msgstr "Argument fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:180 #: venv/lib/python3.7/site-packages/click/exceptions.py:180
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:180
msgid "Missing option" msgid "Missing option"
msgstr "Option fehlt" msgstr "Option fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:182 #: venv/lib/python3.7/site-packages/click/exceptions.py:182
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:182
msgid "Missing parameter" msgid "Missing parameter"
msgstr "Parameter fehlt" msgstr "Parameter fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:184 #: venv/lib/python3.7/site-packages/click/exceptions.py:184
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:184
#, python-brace-format #, python-brace-format
msgid "Missing {param_type}" msgid "Missing {param_type}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:191 #: venv/lib/python3.7/site-packages/click/exceptions.py:191
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:191
#, python-brace-format #, python-brace-format
msgid "Missing parameter: {param_name}" msgid "Missing parameter: {param_name}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:211 #: venv/lib/python3.7/site-packages/click/exceptions.py:211
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:211
#, python-brace-format #, python-brace-format
msgid "No such option: {name}" msgid "No such option: {name}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:223 #: venv/lib/python3.7/site-packages/click/exceptions.py:223
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:223
#, python-brace-format #, python-brace-format
msgid "Did you mean {possibility}?" msgid "Did you mean {possibility}?"
msgid_plural "(Possible options: {possibilities})" msgid_plural "(Possible options: {possibilities})"
@ -3342,75 +3300,61 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:261 #: venv/lib/python3.7/site-packages/click/exceptions.py:261
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:261
msgid "unknown error" msgid "unknown error"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:268 #: venv/lib/python3.7/site-packages/click/exceptions.py:268
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:268
msgid "Could not open file {filename!r}: {message}" msgid "Could not open file {filename!r}: {message}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:231 #: venv/lib/python3.7/site-packages/click/parser.py:231
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:231
msgid "Argument {name!r} takes {nargs} values." msgid "Argument {name!r} takes {nargs} values."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:413 #: venv/lib/python3.7/site-packages/click/parser.py:413
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:413
msgid "Option {name!r} does not take a value." msgid "Option {name!r} does not take a value."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:474 #: venv/lib/python3.7/site-packages/click/parser.py:474
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:474
msgid "Option {name!r} requires an argument." msgid "Option {name!r} requires an argument."
msgid_plural "Option {name!r} requires {nargs} arguments." msgid_plural "Option {name!r} requires {nargs} arguments."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/shell_completion.py:316 #: venv/lib/python3.7/site-packages/click/shell_completion.py:316
#: venv_py3.9/lib/python3.9/site-packages/click/shell_completion.py:316
msgid "Shell completion is not supported for Bash versions older than 4.4." msgid "Shell completion is not supported for Bash versions older than 4.4."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/shell_completion.py:322 #: venv/lib/python3.7/site-packages/click/shell_completion.py:322
#: venv_py3.9/lib/python3.9/site-packages/click/shell_completion.py:322
msgid "Couldn't detect Bash version, shell completion is not supported." msgid "Couldn't detect Bash version, shell completion is not supported."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:161 #: venv/lib/python3.7/site-packages/click/termui.py:161
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:161
msgid "Repeat for confirmation" msgid "Repeat for confirmation"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:178 #: venv/lib/python3.7/site-packages/click/termui.py:178
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:178
msgid "Error: The value you entered was invalid." msgid "Error: The value you entered was invalid."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:180 #: venv/lib/python3.7/site-packages/click/termui.py:180
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:180
#, python-brace-format #, python-brace-format
msgid "Error: {e.message}" msgid "Error: {e.message}"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:191 #: venv/lib/python3.7/site-packages/click/termui.py:191
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:191
msgid "Error: The two entered values do not match." msgid "Error: The two entered values do not match."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:247 #: venv/lib/python3.7/site-packages/click/termui.py:247
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:247
msgid "Error: invalid input" msgid "Error: invalid input"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:798 #: venv/lib/python3.7/site-packages/click/termui.py:798
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:798
msgid "Press any key to continue..." msgid "Press any key to continue..."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:258 #: venv/lib/python3.7/site-packages/click/types.py:258
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:258
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Choose from:\n" "Choose from:\n"
@ -3418,82 +3362,67 @@ msgid ""
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:290 #: venv/lib/python3.7/site-packages/click/types.py:290
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:290
msgid "{value!r} is not {choice}." msgid "{value!r} is not {choice}."
msgid_plural "{value!r} is not one of {choices}." msgid_plural "{value!r} is not one of {choices}."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/types.py:380 #: venv/lib/python3.7/site-packages/click/types.py:380
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:380
msgid "{value!r} does not match the format {format}." msgid "{value!r} does not match the format {format}."
msgid_plural "{value!r} does not match the formats {formats}." msgid_plural "{value!r} does not match the formats {formats}."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/types.py:402 #: venv/lib/python3.7/site-packages/click/types.py:402
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:402
msgid "{value!r} is not a valid {number_type}." msgid "{value!r} is not a valid {number_type}."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:458 #: venv/lib/python3.7/site-packages/click/types.py:458
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:458
#, python-brace-format #, python-brace-format
msgid "{value} is not in the range {range}." msgid "{value} is not in the range {range}."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:599 #: venv/lib/python3.7/site-packages/click/types.py:599
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:599
msgid "{value!r} is not a valid boolean." msgid "{value!r} is not a valid boolean."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:623 #: venv/lib/python3.7/site-packages/click/types.py:623
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:623
msgid "{value!r} is not a valid UUID." msgid "{value!r} is not a valid UUID."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:801 #: venv/lib/python3.7/site-packages/click/types.py:801
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:801
msgid "file" msgid "file"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:803 #: venv/lib/python3.7/site-packages/click/types.py:803
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:803
msgid "directory" msgid "directory"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:805 #: venv/lib/python3.7/site-packages/click/types.py:805
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:805
msgid "path" msgid "path"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:851 #: venv/lib/python3.7/site-packages/click/types.py:851
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:851
msgid "{name} {filename!r} does not exist." msgid "{name} {filename!r} does not exist."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:860 #: venv/lib/python3.7/site-packages/click/types.py:860
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:860
msgid "{name} {filename!r} is a file." msgid "{name} {filename!r} is a file."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:868 #: venv/lib/python3.7/site-packages/click/types.py:868
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:868
msgid "{name} {filename!r} is a directory." msgid "{name} {filename!r} is a directory."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:876 #: venv/lib/python3.7/site-packages/click/types.py:876
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:876
msgid "{name} {filename!r} is not writable." msgid "{name} {filename!r} is not writable."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:884 #: venv/lib/python3.7/site-packages/click/types.py:884
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:884
msgid "{name} {filename!r} is not readable." msgid "{name} {filename!r} is not readable."
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:951 #: venv/lib/python3.7/site-packages/click/types.py:951
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:951
#, python-brace-format #, python-brace-format
msgid "{len_type} values are required, but {len_value} was given." msgid "{len_type} values are required, but {len_value} was given."
msgid_plural "{len_type} values are required, but {len_value} were given." msgid_plural "{len_type} values are required, but {len_value} were given."
@ -3501,22 +3430,18 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: venv/lib/python3.7/site-packages/django/contrib/messages/apps.py:7 #: venv/lib/python3.7/site-packages/django/contrib/messages/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/messages/apps.py:7
msgid "Messages" msgid "Messages"
msgstr "Nachrichten" msgstr "Nachrichten"
#: venv/lib/python3.7/site-packages/django/contrib/sitemaps/apps.py:7 #: venv/lib/python3.7/site-packages/django/contrib/sitemaps/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/sitemaps/apps.py:7
msgid "Site Maps" msgid "Site Maps"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/django/contrib/staticfiles/apps.py:9 #: venv/lib/python3.7/site-packages/django/contrib/staticfiles/apps.py:9
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/staticfiles/apps.py:9
msgid "Static Files" msgid "Static Files"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/django/contrib/syndication/apps.py:7 #: venv/lib/python3.7/site-packages/django/contrib/syndication/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/syndication/apps.py:7
msgid "Syndication" msgid "Syndication"
msgstr "" msgstr ""
@ -4688,6 +4613,24 @@ msgstr ""
msgid "Unable to connect to qpid with SASL mechanism %s" msgid "Unable to connect to qpid with SASL mechanism %s"
msgstr "" msgstr ""
#~ msgid ""
#~ "Deductable surface can not be larger than existing surfaces in after "
#~ "states"
#~ msgstr ""
#~ "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
#~ "überschreiten"
#~ msgid ""
#~ "Deductable surface can not be smaller than the sum of already existing "
#~ "deductions. Please contact the responsible users for the deductions!"
#~ msgstr ""
#~ "Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar "
#~ "einstellen wollen. Kontaktieren Sie die für die Abbuchungen "
#~ "verantwortlichen Nutzer!"
#~ msgid "Added deadline"
#~ msgstr "Frist/Termin hinzugefügt"
#~ msgid "Change default configuration for your KSP map" #~ msgid "Change default configuration for your KSP map"
#~ msgstr "Karteneinstellungen ändern" #~ msgstr "Karteneinstellungen ändern"

Loading…
Cancel
Save