From e84015e48ef3708bcb9e06aa407f5a1d1a6c3dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 8 Apr 2016 12:16:57 +0200 Subject: [PATCH] Fix issue 4056, 4075 and a minor refactor --- taiga/export_import/api.py | 117 +++++++++---------- taiga/export_import/dump_service.py | 19 +++- taiga/locale/ca/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/de/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/en/LC_MESSAGES/django.po | 104 +++++++++-------- taiga/locale/es/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/fi/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/fr/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/it/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/nl/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/pl/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/pt_BR/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/ru/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/sv/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/locale/tr/LC_MESSAGES/django.po | 108 ++++++++++-------- taiga/locale/zh-Hant/LC_MESSAGES/django.po | 109 ++++++++++-------- taiga/projects/api.py | 21 ++-- taiga/projects/serializers.py | 2 - taiga/projects/services/__init__.py | 6 +- taiga/projects/services/members.py | 39 +------ taiga/projects/services/projects.py | 126 +++++++++++++++++++++ taiga/users/services.py | 68 +++-------- tests/integration/test_importer_api.py | 8 +- tests/integration/test_projects.py | 4 +- 24 files changed, 1093 insertions(+), 837 deletions(-) create mode 100644 taiga/projects/services/projects.py diff --git a/taiga/export_import/api.py b/taiga/export_import/api.py index 1ae5ca4b..5b570980 100644 --- a/taiga/export_import/api.py +++ b/taiga/export_import/api.py @@ -91,13 +91,18 @@ class ProjectImporterViewSet(mixins.ImportThrottlingPolicyMixin, CreateModelMixi data = request.DATA.copy() data['owner'] = data.get('owner', request.user.email) + # Validate if the project can be imported is_private = data.get('is_private', False) - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project( + total_memberships = len([m for m in data.get("memberships", []) + if m.get("email", None) != data["owner"]]) + total_memberships = total_memberships + 1 # 1 is the owner + (enough_slots, error_message) = users_service.has_available_slot_for_import_new_project( self.request.user, - Project(is_private=is_private, id=None) + is_private, + total_memberships ) if not enough_slots: - raise exc.NotEnoughSlotsForProject(is_private, 1, not_enough_slots_error) + raise exc.NotEnoughSlotsForProject(is_private, total_memberships, error_message) # Create Project project_serialized = service.store_project(data) @@ -115,14 +120,6 @@ class ProjectImporterViewSet(mixins.ImportThrottlingPolicyMixin, CreateModelMixi # Create memberships if "memberships" in data: - members = len([m for m in data.get("memberships", []) if m.get("email", None) != data["owner"]]) - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project( - self.request.user, - Project(is_private=is_private, id=None), - members - ) - if not enough_slots: - raise exc.NotEnoughSlotsForProject(is_private, max(members, 1), not_enough_slots_error) service.store_memberships(project_serialized.object, data) try: @@ -200,53 +197,6 @@ class ProjectImporterViewSet(mixins.ImportThrottlingPolicyMixin, CreateModelMixi headers = self.get_success_headers(response_data) return response.Created(response_data, headers=headers) - @list_route(methods=["POST"]) - @method_decorator(atomic) - def load_dump(self, request): - throttle = throttling.ImportDumpModeRateThrottle() - - if not throttle.allow_request(request, self): - self.throttled(request, throttle.wait()) - - self.check_permissions(request, "load_dump", None) - - dump = request.FILES.get('dump', None) - - if not dump: - raise exc.WrongArguments(_("Needed dump file")) - - reader = codecs.getreader("utf-8") - - try: - dump = json.load(reader(dump)) - is_private = dump.get("is_private", False) - except Exception: - raise exc.WrongArguments(_("Invalid dump format")) - - slug = dump.get('slug', None) - if slug is not None and Project.objects.filter(slug=slug).exists(): - del dump['slug'] - - user = request.user - dump['owner'] = user.email - - members = len([m for m in dump.get("memberships", []) if m.get("email", None) != dump["owner"]]) - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project( - user, - Project(is_private=is_private, id=None), - members - ) - if not enough_slots: - raise exc.NotEnoughSlotsForProject(is_private, max(members, 1), not_enough_slots_error) - - if settings.CELERY_ENABLED: - task = tasks.load_project_dump.delay(user, dump) - return response.Accepted({"import_id": task.id}) - - project = dump_service.dict_to_project(dump, request.user) - response_data = ProjectSerializer(project).data - return response.Created(response_data) - @detail_route(methods=['post']) @method_decorator(atomic) def issue(self, request, *args, **kwargs): @@ -342,3 +292,54 @@ class ProjectImporterViewSet(mixins.ImportThrottlingPolicyMixin, CreateModelMixi headers = self.get_success_headers(wiki_link.data) return response.Created(wiki_link.data, headers=headers) + + @list_route(methods=["POST"]) + @method_decorator(atomic) + def load_dump(self, request): + throttle = throttling.ImportDumpModeRateThrottle() + + if not throttle.allow_request(request, self): + self.throttled(request, throttle.wait()) + + self.check_permissions(request, "load_dump", None) + + dump = request.FILES.get('dump', None) + + if not dump: + raise exc.WrongArguments(_("Needed dump file")) + + reader = codecs.getreader("utf-8") + + try: + dump = json.load(reader(dump)) + except Exception: + raise exc.WrongArguments(_("Invalid dump format")) + + slug = dump.get('slug', None) + if slug is not None and Project.objects.filter(slug=slug).exists(): + del dump['slug'] + + user = request.user + dump['owner'] = user.email + + # Validate if the project can be imported + is_private = dump.get("is_private", False) + total_memberships = len([m for m in dump.get("memberships", []) + if m.get("email", None) != dump["owner"]]) + total_memberships = total_memberships + 1 # 1 is the owner + (enough_slots, error_message) = users_service.has_available_slot_for_import_new_project( + user, + is_private, + total_memberships + ) + if not enough_slots: + raise exc.NotEnoughSlotsForProject(is_private, total_memberships, error_message) + + if settings.CELERY_ENABLED: + task = tasks.load_project_dump.delay(user, dump) + return response.Accepted({"import_id": task.id}) + + project = dump_service.dict_to_project(dump, request.user) + response_data = ProjectSerializer(project).data + return response.Created(response_data) + diff --git a/taiga/export_import/dump_service.py b/taiga/export_import/dump_service.py index b68f3bf9..e7c8848f 100644 --- a/taiga/export_import/dump_service.py +++ b/taiga/export_import/dump_service.py @@ -15,6 +15,9 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from django.db.transaction import atomic + +from django.utils.decorators import method_decorator from django.utils.translation import ugettext as _ from taiga.projects.models import Membership, Project @@ -88,17 +91,23 @@ def store_tags_colors(project, data): return None +@method_decorator(atomic) def dict_to_project(data, owner=None): if owner: data["owner"] = owner.email - members = len([m for m in data.get("memberships", []) if m.get("email", None) != data["owner"]]) - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project( + + # Validate if the owner can have this project + is_private = data.get("is_private", False) + total_memberships = len([m for m in data.get("memberships", []) + if m.get("email", None) != data["owner"]]) + total_memberships = total_memberships + 1 # 1 is the owner + (enough_slots, error_message) = users_service.has_available_slot_for_import_new_project( owner, - Project(is_private=data.get("is_private", False), id=None), - members + is_private, + total_memberships ) if not enough_slots: - raise TaigaImportError(not_enough_slots_error) + raise TaigaImportError(error_message) project_serialized = service.store_project(data) diff --git a/taiga/locale/ca/LC_MESSAGES/django.po b/taiga/locale/ca/LC_MESSAGES/django.po index da3a1146..10eb5a90 100644 --- a/taiga/locale/ca/LC_MESSAGES/django.po +++ b/taiga/locale/ca/LC_MESSAGES/django.po @@ -9,10 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Catalan (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/ca/)\n" "MIME-Version: 1.0\n" @@ -185,7 +184,7 @@ msgstr "" "està corrupte." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -469,71 +468,71 @@ msgstr "" " Comentari: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Es necessita arxiu dump." -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Format d'arxiu dump invàlid" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "" @@ -723,7 +722,7 @@ msgstr "" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "Nom" @@ -1176,13 +1175,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "No tens permisos per a veure açò." @@ -1212,7 +1211,7 @@ msgstr "Amo" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "Projecte" @@ -1251,7 +1250,7 @@ msgstr "està obsolet " #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "Ordre" @@ -1531,7 +1530,7 @@ msgstr "Fans" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2358,50 +2357,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Opcions per defecte" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Estatus d'històries d'usuari" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Punts" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Estatus de tasques" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Estatus d'incidéncies" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Tipus d'incidéncies" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioritats" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Severitats" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Rols" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "" @@ -3271,7 +3292,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "permissos" @@ -3287,14 +3308,6 @@ msgstr "Nom d'usuari invàlid" msgid "Username or password does not matches user." msgstr "" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/de/LC_MESSAGES/django.po b/taiga/locale/de/LC_MESSAGES/django.po index 1e58b906..5c261f3f 100644 --- a/taiga/locale/de/LC_MESSAGES/django.po +++ b/taiga/locale/de/LC_MESSAGES/django.po @@ -17,10 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: German (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/de/)\n" "MIME-Version: 1.0\n" @@ -215,7 +214,7 @@ msgstr "" "haben, ist entweder kein Bild oder defekt." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -524,71 +523,71 @@ msgstr "" "Kommentar: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Es ist mindestens eine Rolle nötig" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Exportdatei erforderlich" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Ungültiges Exportdatei Format" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "Fehler beim Importieren der Projektdaten" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "Fehler beim Importieren der Listen von Projektattributen" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "Fehler beim Importieren der vorgegebenen Projekt Attributwerte " -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "Fehler beim Importieren der Kundenattribute" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "Fehler beim Importieren der Rollen" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "Fehler beim Importieren der Mitgliedschaften" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "Fehler beim Import der Sprints" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "Fehler beim Importieren von Wiki Seiten" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "Fehler beim Importieren von Wiki Links" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "Fehler beim Importieren der Tickets" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "Fehler beim Importieren der User-Stories" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "Fehler beim Importieren der Aufgaben" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "Fehler beim Importieren der Schlagworte" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "Fehler beim Importieren der Chroniken" @@ -871,7 +870,7 @@ msgstr "Authentifizierung erforderlich" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "Name" @@ -1366,13 +1365,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Sie haben keine Berechtigungen für diese Ansicht" @@ -1402,7 +1401,7 @@ msgstr "Besitzer" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "Projekt" @@ -1441,7 +1440,7 @@ msgstr "wurde verworfen" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "Reihenfolge" @@ -1725,7 +1724,7 @@ msgstr "Likes" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "Slug" @@ -2830,50 +2829,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Voreingestellte Optionen" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Status für User-Stories" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Punkte" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Aufgaben Status" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Ticket Status" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Ticket Arten" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioritäten" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Gewichtung" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Rollen" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Zukünftiger Sprint" @@ -3796,7 +3817,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "Berechtigungen" @@ -3812,14 +3833,6 @@ msgstr "Ungültiger Benutzername. Versuchen Sie es mit einem anderen." msgid "Username or password does not matches user." msgstr "Benutzername oder Passwort stimmen mit keinem Benutzer überein." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/en/LC_MESSAGES/django.po b/taiga/locale/en/LC_MESSAGES/django.po index 8bfe1422..7e173433 100644 --- a/taiga/locale/en/LC_MESSAGES/django.po +++ b/taiga/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" "PO-Revision-Date: 2015-03-25 20:09+0100\n" "Last-Translator: Taiga Dev Team \n" "Language-Team: Taiga Dev Team \n" @@ -176,7 +176,7 @@ msgid "" msgstr "" #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -457,71 +457,71 @@ msgid "" " " msgstr "" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "" @@ -711,7 +711,7 @@ msgstr "" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "" @@ -1148,13 +1148,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "" @@ -1184,7 +1184,7 @@ msgstr "" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "" @@ -1223,7 +1223,7 @@ msgstr "" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "" @@ -1503,7 +1503,7 @@ msgstr "" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "" @@ -2324,50 +2324,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "" @@ -3214,7 +3236,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "" @@ -3230,14 +3252,6 @@ msgstr "" msgid "Username or password does not matches user." msgstr "" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/es/LC_MESSAGES/django.po b/taiga/locale/es/LC_MESSAGES/django.po index 00a75a9c..f9b32379 100644 --- a/taiga/locale/es/LC_MESSAGES/django.po +++ b/taiga/locale/es/LC_MESSAGES/django.po @@ -16,10 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Spanish (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/es/)\n" "MIME-Version: 1.0\n" @@ -202,7 +201,7 @@ msgid "" msgstr "Adjunta una imagen válida. El fichero no es una imagen o está dañada." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -511,71 +510,71 @@ msgstr "" "\n" "Comentario: %(comment)s" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Necesitamos al menos un rol" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Se necesita el fichero con los datos exportados" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Formato de fichero de exportación inválido" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "error importando los datos del proyecto" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "error importando la listados de valores de attributos del proyecto" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "error importando los valores por defecto de los atributos del proyecto" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "error importando los atributos personalizados" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "error importando los roles" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "error importando los miembros" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "error importando los sprints" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "error importando las páginas del wiki" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "error importando los enlaces del wiki" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "error importando las peticiones" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "error importando las historias de usuario" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "error importando las tareas" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "error importando las etiquetas" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "error importando los timelines" @@ -853,7 +852,7 @@ msgstr "Se requiere autenticación" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "nombre" @@ -1346,7 +1345,7 @@ msgstr "El usuario no existe" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" @@ -1354,7 +1353,7 @@ msgstr "" "El proyecto debe tener un dueño y al menos uno de los usuarios debe ser un " "administrador activo" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "No tienes suficientes permisos para ver esto." @@ -1384,7 +1383,7 @@ msgstr "Dueño" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "Proyecto" @@ -1423,7 +1422,7 @@ msgstr "está desactualizado" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "orden" @@ -1703,7 +1702,7 @@ msgstr "Likes" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2765,50 +2764,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Opciones por defecto" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Estados de historia de usuario" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Puntos" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Estado de tareas" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Estados de peticion" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Tipos de petición" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioridades" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Gravedades" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Roles" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "No puedes tener más proyectos privados" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "No puedes tener más proyectos públicos" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Sprint futuro" @@ -3734,7 +3755,7 @@ msgstr "máximo de membresías para cada proyecto privado poseído" msgid "max number of memberships for each owned public project" msgstr "máximo de membresías para cada proyecto público poseído" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "permisos" @@ -3750,14 +3771,6 @@ msgstr "Nombre de usuario inválido. Prueba con otro." msgid "Username or password does not matches user." msgstr "Nombre de usuario o contraseña inválidos." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "No puedes tener más proyectos privados" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "No puedes tener más proyectos públicos" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/fi/LC_MESSAGES/django.po b/taiga/locale/fi/LC_MESSAGES/django.po index 6f73ebe2..1d97923b 100644 --- a/taiga/locale/fi/LC_MESSAGES/django.po +++ b/taiga/locale/fi/LC_MESSAGES/django.po @@ -9,10 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Finnish (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/fi/)\n" "MIME-Version: 1.0\n" @@ -187,7 +186,7 @@ msgstr "" "vioittunut." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -494,71 +493,71 @@ msgstr "" "\n" "Kommentti: %(comment)s" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Tarvitaan tiedosto" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Virheellinen tiedostomuoto" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "virhe projektidatan tuonnissa" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "virhe atribuuttilistan tuonnissa" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "virhe oletusarvojen tuonnissa" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "virhe omien arvojen tuonnissa" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "virhe roolien tuonnissa" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "virhe jäsenyyksien tuonnissa" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "virhe kierroksien tuonnissa" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "virhe wiki-sivujen tuonnissa" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "virhe viki-linkkien tuonnissa" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "virhe pyyntöjen tuonnissa" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "virhe käyttäjätarinoiden tuonnissa" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "virhe tehtävien tuonnissa" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "virhe avainsanojen sisäänlukemisessa" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "virhe aikajanojen tuonnissa" @@ -833,7 +832,7 @@ msgstr "" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "nimi" @@ -1305,13 +1304,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Sinulla ei ole oikeuksia nähdä tätä." @@ -1341,7 +1340,7 @@ msgstr "omistaja" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "projekti" @@ -1380,7 +1379,7 @@ msgstr "on poistettu" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "order" @@ -1660,7 +1659,7 @@ msgstr "" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "hukka-aika" @@ -2727,50 +2726,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Oletusoptiot" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Käyttäjätarinatilat" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Pisteet" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Tehtävien tilat" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Pyyntöjen tilat" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "pyyntötyypit" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Kiireellisyydet" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Vakavuudet" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Roolit" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Tuleva kierros" @@ -3672,7 +3693,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "oikeudet" @@ -3688,14 +3709,6 @@ msgstr "Tuntematon käyttäjänimi, yritä uudelleen." msgid "Username or password does not matches user." msgstr "Käyttäjätunnus tai salasana eivät ole oikein." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/fr/LC_MESSAGES/django.po b/taiga/locale/fr/LC_MESSAGES/django.po index 67c37f2f..9533481a 100644 --- a/taiga/locale/fr/LC_MESSAGES/django.po +++ b/taiga/locale/fr/LC_MESSAGES/django.po @@ -22,10 +22,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: French (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/fr/)\n" "MIME-Version: 1.0\n" @@ -211,7 +210,7 @@ msgstr "" "image ou était une image corrompue." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -528,72 +527,72 @@ msgstr "" " Commentaire : %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Veuillez sélectionner au moins un rôle." -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Fichier de dump obligatoire" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Format de dump invalide" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "Erreur lors de l'importation de données" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "erreur lors de l'importation des listes des attributs de projet" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "" "erreur lors de l'importation des valeurs par défaut des attributs de projet" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "Erreur à l'importation des champs personnalisés" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "Erreur à l'importation des rôles" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "Erreur à l'importation des groupes d'utilisateurs" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "Erreur lors de l'importation des sprints." -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "Erreur à l'importation des pages Wiki" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "Erreur à l'importation des liens Wiki" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "erreur à l'importation des problèmes" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "erreur à l'importation des histoires utilisateur" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "Erreur lors de l'importation des tâches." -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "erreur lors de l'importation des mots-clés" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "erreur lors de l'import des timelines" @@ -857,7 +856,7 @@ msgstr "Authentification requise" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "nom" @@ -1318,13 +1317,13 @@ msgstr "L'utilisateur n'existe pas" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Vous n'avez pas les permissions pour consulter cet élément" @@ -1354,7 +1353,7 @@ msgstr "propriétaire" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "projet" @@ -1393,7 +1392,7 @@ msgstr "est obsolète" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "ordre" @@ -1673,7 +1672,7 @@ msgstr "Aime" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2524,50 +2523,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Options par défaut" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Etats de la User Story" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Points" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Etats des tâches" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Statuts des problèmes" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Types de problèmes" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Priorités" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Sévérités" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Rôles" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Sprint futurs" @@ -3460,7 +3481,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "permissions" @@ -3476,14 +3497,6 @@ msgstr "Nom d'utilisateur invalide. Essayez avec un autre nom." msgid "Username or password does not matches user." msgstr "Aucun utilisateur avec ce nom ou ce mot de passe." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/it/LC_MESSAGES/django.po b/taiga/locale/it/LC_MESSAGES/django.po index ba84680a..1054bf89 100644 --- a/taiga/locale/it/LC_MESSAGES/django.po +++ b/taiga/locale/it/LC_MESSAGES/django.po @@ -14,10 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Italian (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/it/)\n" "MIME-Version: 1.0\n" @@ -196,7 +195,7 @@ msgstr "" "o l'immagine potrebbe essere corrotta. " #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -518,72 +517,72 @@ msgstr "" "\n" "Commento: %(comment)s" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "C'è bisogno di almeno un ruolo" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "E' richiesto un file di dump" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Formato di dump invalido" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "Errore nell'importazione del progetto dati" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "Errore nell'importazione della lista degli attributi di progetto" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "" "Errore nell'importazione dei valori predefiniti degli attributi del progetto." -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "Errore nell'importazione degli attributi personalizzati" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "Errore nell'importazione i ruoli" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "Errore nell'importazione delle iscrizioni" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "errore nell'importazione degli sprints" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "Errore nell'importazione delle pagine wiki" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "Errore nell'importazione dei link di wiki" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "errore nell'importazione dei problemi" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "Errore nell'importazione delle user story" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "Errore nell'importazione dei compiti " -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "Errore nell'importazione dei tags" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "Errore nell'importazione delle timelines" @@ -920,7 +919,7 @@ msgstr "E' richiesta l'autenticazione" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "nome" @@ -1439,13 +1438,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Non hai il permesso di vedere questo elemento." @@ -1475,7 +1474,7 @@ msgstr "proprietario" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "progetto" @@ -1514,7 +1513,7 @@ msgstr "non approvato" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "ordine" @@ -1794,7 +1793,7 @@ msgstr "Piaciuto" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "lumaca" @@ -3002,50 +3001,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Opzioni predefinite" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Stati della storia utente" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Punti" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Stati del compito" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Stati del problema" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Tipologie del problema" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Priorità" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Criticità" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Ruoli" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Sprint futuri" @@ -3972,7 +3993,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "permessi" @@ -3988,14 +4009,6 @@ msgstr "Nome utente non valido. Provane uno diverso." msgid "Username or password does not matches user." msgstr "Il nome utente o la password non corrispondono all'utente." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/nl/LC_MESSAGES/django.po b/taiga/locale/nl/LC_MESSAGES/django.po index b1172cc3..e2543498 100644 --- a/taiga/locale/nl/LC_MESSAGES/django.po +++ b/taiga/locale/nl/LC_MESSAGES/django.po @@ -9,10 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Dutch (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/nl/)\n" "MIME-Version: 1.0\n" @@ -196,7 +195,7 @@ msgstr "" "een afbeelding ofwel een corrupte afbeelding." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -507,71 +506,71 @@ msgstr "" " Commentaar: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "We hadden minstens één rol nodig" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Dump file nodig" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Ongeldig dump formaat" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "fout bij het importeren van project data" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "fout bij importeren van project attributenlijst" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "fout bij importeren van standaard projectattributen waarden" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "fout bij importeren eigen attributen" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "fout bij importeren rollen" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "fout bij importeren lidmaatschappen" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "fout bij importeren sprints" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "fout bij importeren wiki pagina's" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "fout bij importeren wiki links" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "fout bij importeren issues" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "fout bij importeren user stories" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "fout bij importeren taken" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "fout bij importeren tags" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "fout bij importeren tijdlijnen" @@ -783,7 +782,7 @@ msgstr "" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "naam" @@ -1239,13 +1238,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Je hebt geen toestamming om dat te bekijken." @@ -1275,7 +1274,7 @@ msgstr "eigenaar" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "project" @@ -1314,7 +1313,7 @@ msgstr "is verouderd" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "volgorde" @@ -1596,7 +1595,7 @@ msgstr "Personen die dit leuk vinden" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2447,50 +2446,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Standaard opties" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Status van User story" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Punten" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Statussen van taken" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Statussen van Issues" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Types van issue" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioriteiten" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Ernstniveaus" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Rollen" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Toekomstige sprint" @@ -3365,7 +3386,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "toestemmingen" @@ -3381,14 +3402,6 @@ msgstr "Ongeldige gebruikersnaam. Probeer met een andere." msgid "Username or password does not matches user." msgstr "Gebruikersnaam of wachtwoord stemt niet overeen met gebruiker." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/pl/LC_MESSAGES/django.po b/taiga/locale/pl/LC_MESSAGES/django.po index 01eeb2dc..f205e65f 100644 --- a/taiga/locale/pl/LC_MESSAGES/django.po +++ b/taiga/locale/pl/LC_MESSAGES/django.po @@ -10,10 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Polish (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/pl/)\n" "MIME-Version: 1.0\n" @@ -190,7 +189,7 @@ msgstr "" "jest uszkodzony." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -508,71 +507,71 @@ msgstr "" " Komentarz: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Potrzeba conajmiej jednej roli" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Wymagany plik zrzutu" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Nieprawidłowy format zrzutu" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "błąd w trakcie importu danych projektu" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "błąd w trakcie importu atrybutów projektu" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "błąd w trakcie importu domyślnych atrybutów projektu" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "błąd w trakcie importu niestandardowych atrybutów" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "błąd w trakcie importu ról" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "błąd w trakcie importu członkostw" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "błąd w trakcie importu sprintów" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "błąd w trakcie importu stron Wiki" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "błąd w trakcie importu linków Wiki" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "błąd w trakcie importu zgłoszeń" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "błąd w trakcie importu historyjek użytkownika" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "błąd w trakcie importu zadań" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "błąd w trakcie importu tagów" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "błąd w trakcie importu osi czasu" @@ -851,7 +850,7 @@ msgstr "" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "nazwa" @@ -1347,13 +1346,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Nie masz uprawnień by to zobaczyć." @@ -1383,7 +1382,7 @@ msgstr "właściciel" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "projekt" @@ -1422,7 +1421,7 @@ msgstr "jest przestarzałe" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "kolejność" @@ -1702,7 +1701,7 @@ msgstr "" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2784,50 +2783,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Domyślne opcje" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Statusy historyjek użytkownika" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Punkty" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Statusy zadań" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Statusy zgłoszeń" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Typu zgłoszeń" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Priorytety" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Ważność" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Role" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Przyszły sprint" @@ -3736,7 +3757,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "uprawnienia" @@ -3752,14 +3773,6 @@ msgstr "Niepoprawna nazwa użytkownika. Spróbuj podać inną." msgid "Username or password does not matches user." msgstr "Nazwa użytkownika lub hasło są nieprawidłowe" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/pt_BR/LC_MESSAGES/django.po b/taiga/locale/pt_BR/LC_MESSAGES/django.po index ca6d64ba..41b4e7b3 100644 --- a/taiga/locale/pt_BR/LC_MESSAGES/django.po +++ b/taiga/locale/pt_BR/LC_MESSAGES/django.po @@ -19,10 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/taiga-agile-llc/" "taiga-back/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -197,7 +196,7 @@ msgstr "" "está corrompido." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -516,71 +515,71 @@ msgstr "" " Comentário: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Nós precisamos de pelo menos uma função" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Necessário de arquivo de restauração" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Formato de aquivo de restauração inválido" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "erro ao importar informações de projeto" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "erro importando lista de atributos do projeto" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "erro importando valores de atributos do projeto padrão" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "erro importando atributos personalizados" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "erro importando funcões" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "erro importando filiações" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "erro importando sprints" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "erro importando páginas wiki" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "erro importando wiki links" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "erro importando casos" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "erro importando user stories" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "erro importando tarefas" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "erro importando tags" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "erro importando linha do tempo" @@ -858,7 +857,7 @@ msgstr "Autenticação necessária" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "Nome" @@ -1353,13 +1352,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Você não tem permissão para ver isso" @@ -1389,7 +1388,7 @@ msgstr "dono" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "projeto" @@ -1428,7 +1427,7 @@ msgstr "está obsoleto" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "ordem" @@ -1708,7 +1707,7 @@ msgstr "Curtidas" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slug" @@ -2768,50 +2767,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Opções padrão" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Status de user story" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Pontos" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Status de tarefas" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Status de casos" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Tipos de casos" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioridades" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Severidades" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Funções" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Sprint futuro" @@ -3715,7 +3736,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "permissões" @@ -3731,14 +3752,6 @@ msgstr "Usuário inválido. Tente com um diferente." msgid "Username or password does not matches user." msgstr "Usuário ou senha não correspondem ao usuário" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/ru/LC_MESSAGES/django.po b/taiga/locale/ru/LC_MESSAGES/django.po index 437a2093..ddcdfa3c 100644 --- a/taiga/locale/ru/LC_MESSAGES/django.po +++ b/taiga/locale/ru/LC_MESSAGES/django.po @@ -15,10 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Russian (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/ru/)\n" "MIME-Version: 1.0\n" @@ -200,7 +199,7 @@ msgstr "" "изображение, либо не корректное изображение." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -518,71 +517,71 @@ msgstr "" " Комментарий: %(comment)s\n" " " -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Нам была нужна хотя бы одна роль" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Необходим дамп-файл" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Неправильный формат дампа" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "ошибка при импорте данных проекта" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "ошибка при импорте списков свойств проекта" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "ошибка при импорте значений по умолчанию свойств проекта" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "ошибка при импорте пользовательских свойств" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "ошибка при импорте ролей" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "ошибка при импорте членства" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "ошибка при импорте спринтов" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "ошибка при импорте вики-страниц" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "ошибка при импорте вики-ссылок" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "ошибка при импорте запросов" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "ошибка импорта историй от пользователей" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "ошибка импорта задач" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "ошибка импорта тэгов" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "ошибка импорта хронологии проекта" @@ -858,7 +857,7 @@ msgstr "Необходима аутентификация" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "имя" @@ -1354,13 +1353,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "У вас нет разрешения на просмотр." @@ -1390,7 +1389,7 @@ msgstr "владелец" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "проект" @@ -1429,7 +1428,7 @@ msgstr "устаревшее" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "порядок" @@ -1713,7 +1712,7 @@ msgstr "Лайки" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "ссылочное имя" @@ -2783,50 +2782,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Параметры по умолчанию" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Статусу пользовательских историй" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Очки" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Статусы задачи" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Статусы запроса" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Типы запроса" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Приоритеты" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Степени важности" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Роли" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Будущий спринт" @@ -3730,7 +3751,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "разрешения" @@ -3746,14 +3767,6 @@ msgstr "Неверное имя пользователя. Попробуйте msgid "Username or password does not matches user." msgstr "Имя пользователя или пароль не соответствуют пользователю." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/sv/LC_MESSAGES/django.po b/taiga/locale/sv/LC_MESSAGES/django.po index 42b6dac3..d217159d 100644 --- a/taiga/locale/sv/LC_MESSAGES/django.po +++ b/taiga/locale/sv/LC_MESSAGES/django.po @@ -8,10 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Swedish (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/sv/)\n" "MIME-Version: 1.0\n" @@ -189,7 +188,7 @@ msgstr "" "eller en skadad bild." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -492,71 +491,71 @@ msgid "" " " msgstr "" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "Vi behöver minst en roll" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "Behöver en hämtningsfil" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Invalid hämtningsfilformat" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "fel vid import av projektdata" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "fel vid import av en lista på projektegenskaper" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "fel vid import av standard projektegenskapsvärden" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "fel vid import av anpassade egenskaper" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "fel vid importering av roller" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "fel vid import av medlemskap" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "felaktig import av sprintar" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "vel vid import av wiki-sidor" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "fel vid import av wiki-länkar" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "fel vid import av ärenden" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "fel vid import av användarhistorier" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "fel vid import av uppgifter" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "fel vid importering av taggar" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "fel vid importering av tidslinje" @@ -746,7 +745,7 @@ msgstr "Verifiering krävs" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "namn" @@ -1194,13 +1193,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Du har inte behörighet att se det. " @@ -1230,7 +1229,7 @@ msgstr "ägare" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "projekt" @@ -1269,7 +1268,7 @@ msgstr "undviks" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "sortera" @@ -1549,7 +1548,7 @@ msgstr "Gillar" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "slugg" @@ -2370,50 +2369,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Standardval" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Status för användarhistorien" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Poäng" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Status för uppgifter" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Status för ärenden" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Ärendetyper" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Prioritet" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Allvarsgrad" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Roller" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Framtidig sprint" @@ -3280,7 +3301,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "behörigheter" @@ -3296,14 +3317,6 @@ msgstr "Felaktigt användarnamn. Försök med ett annat användarnamn." msgid "Username or password does not matches user." msgstr "Användarnamn eller lösenord passar inte." -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/tr/LC_MESSAGES/django.po b/taiga/locale/tr/LC_MESSAGES/django.po index 591cb691..fe7cf855 100644 --- a/taiga/locale/tr/LC_MESSAGES/django.po +++ b/taiga/locale/tr/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-04-04 13:40+0000\n" -"Last-Translator: catborise \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Turkish (http://www.transifex.com/taiga-agile-llc/taiga-back/" "language/tr/)\n" "MIME-Version: 1.0\n" @@ -196,7 +196,7 @@ msgstr "" "resim dosyası değil." #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -501,71 +501,71 @@ msgstr "" "\n" "Yorumlar: %(comment)s" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "En azından bir role ihtiyacımız var" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "İhtiyaç duyulan döküm dosyası" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "Geçersiz döküm biçemi" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "İçeri aktarılan proje verisinde hata" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "proje öznitelikleri listesi içeriye aktarılırken hata oluştu" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "varsayılan proje öznitelikleri değerlerinin içeriye aktarımında hata" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "özel öznitelikler içeri aktarılırken hata" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "İçeri aktarılan rollerde hata" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "İçeri aktarılan üyeliklerde hata" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "İçeri aktarılan sprintlerde hata" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "İçeri aktarılan wiki sayfalarında hata" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "İçeri aktarılan wiki bağlantılarında hata" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "İçeri aktarılan taleplerde hata" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "İçeri aktarılan kullanıcı hikayelerinde hata" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "İçeri aktarılan görevlerde hata" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "İçeri aktarılan etiketlerde hata" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "zaman çizelgesi içeri aktarılırken hata" @@ -840,7 +840,7 @@ msgstr "Kimlik doğrulama gerekli" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "isim" @@ -1300,13 +1300,13 @@ msgstr "Kullanıcı mevcut değil" msgid "The user must be already a project member" msgstr "Kullanıcı zaten proje üyesi durumunda" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "Görebilmek için yetkiniz yok." @@ -1336,7 +1336,7 @@ msgstr "sahip" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "proje" @@ -1375,7 +1375,7 @@ msgstr "kaldırıldı" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "sıra" @@ -1655,7 +1655,7 @@ msgstr "Beğeniler" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "satır" @@ -2542,50 +2542,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "Varsayılan ayarlar" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "Kullanıcı hikayelerinin durumları" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "Puanlar" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "Görevlerin durumları" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "Taleplerin durumları" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "Taleplerin tipleri" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "Öncelikler" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "Önem dereceleri" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "Roller" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "Gelecek sprint" @@ -3447,7 +3469,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "izinler" @@ -3463,14 +3485,6 @@ msgstr "Geçersiz kullanıcı adı. Farklı birşeyle yeniden deneyin." msgid "Username or password does not matches user." msgstr "Kullanıcı adı veya parola kullanıcıyla uyuşmuyor" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/locale/zh-Hant/LC_MESSAGES/django.po b/taiga/locale/zh-Hant/LC_MESSAGES/django.po index 86d2219b..0734e55d 100644 --- a/taiga/locale/zh-Hant/LC_MESSAGES/django.po +++ b/taiga/locale/zh-Hant/LC_MESSAGES/django.po @@ -11,10 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: taiga-back\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-05 19:23+0200\n" -"PO-Revision-Date: 2016-03-30 10:59+0000\n" -"Last-Translator: Alejandro Alonso Fernández \n" +"POT-Creation-Date: 2016-04-08 13:23+0200\n" +"PO-Revision-Date: 2016-04-08 11:23+0000\n" +"Last-Translator: Taiga Dev Team \n" "Language-Team: Chinese Traditional (http://www.transifex.com/taiga-agile-llc/" "taiga-back/language/zh-Hant/)\n" "MIME-Version: 1.0\n" @@ -183,7 +182,7 @@ msgid "" msgstr "上傳有效圖片,你所上傳的檔案非圖檔或已損壞" #: taiga/base/api/mixins.py:255 taiga/base/exceptions.py:209 -#: taiga/hooks/api.py:68 taiga/projects/api.py:641 +#: taiga/hooks/api.py:68 taiga/projects/api.py:642 #: taiga/projects/issues/api.py:233 taiga/projects/mixins/ordering.py:58 #: taiga/projects/tasks/api.py:152 taiga/projects/tasks/api.py:174 #: taiga/projects/userstories/api.py:218 taiga/projects/userstories/api.py:238 @@ -499,71 +498,71 @@ msgstr "" "\n" "評論: %(comment)s" -#: taiga/export_import/api.py:114 +#: taiga/export_import/api.py:119 msgid "We needed at least one role" msgstr "我們至少需要一個角色" -#: taiga/export_import/api.py:216 +#: taiga/export_import/api.py:309 msgid "Needed dump file" msgstr "需要的堆存檔案" -#: taiga/export_import/api.py:224 +#: taiga/export_import/api.py:316 msgid "Invalid dump format" msgstr "無效堆存格式" -#: taiga/export_import/dump_service.py:106 +#: taiga/export_import/dump_service.py:115 msgid "error importing project data" msgstr "滙入重要專案資料出錯" -#: taiga/export_import/dump_service.py:119 +#: taiga/export_import/dump_service.py:128 msgid "error importing lists of project attributes" msgstr "滙入標籤出錯" -#: taiga/export_import/dump_service.py:124 +#: taiga/export_import/dump_service.py:133 msgid "error importing default project attributes values" msgstr "滙入預設專案屬性數值出錯" -#: taiga/export_import/dump_service.py:134 +#: taiga/export_import/dump_service.py:143 msgid "error importing custom attributes" msgstr "滙入客制性屬出錯" -#: taiga/export_import/dump_service.py:139 +#: taiga/export_import/dump_service.py:148 msgid "error importing roles" msgstr "滙入角色出錯" -#: taiga/export_import/dump_service.py:154 +#: taiga/export_import/dump_service.py:163 msgid "error importing memberships" msgstr "滙入成員資格出錯" -#: taiga/export_import/dump_service.py:159 +#: taiga/export_import/dump_service.py:168 msgid "error importing sprints" msgstr "滙入衝刺任務出錯" -#: taiga/export_import/dump_service.py:164 +#: taiga/export_import/dump_service.py:173 msgid "error importing wiki pages" msgstr "滙入維基頁出錯" -#: taiga/export_import/dump_service.py:169 +#: taiga/export_import/dump_service.py:178 msgid "error importing wiki links" msgstr "滙入維基連結出錯" -#: taiga/export_import/dump_service.py:174 +#: taiga/export_import/dump_service.py:183 msgid "error importing issues" msgstr "滙入問題出錯" -#: taiga/export_import/dump_service.py:179 +#: taiga/export_import/dump_service.py:188 msgid "error importing user stories" msgstr "滙入使用者故事出錯" -#: taiga/export_import/dump_service.py:184 +#: taiga/export_import/dump_service.py:193 msgid "error importing tasks" msgstr "滙入任務出錯" -#: taiga/export_import/dump_service.py:189 +#: taiga/export_import/dump_service.py:198 msgid "error importing tags" msgstr "滙入標籤出錯" -#: taiga/export_import/dump_service.py:193 +#: taiga/export_import/dump_service.py:202 msgid "error importing timelines" msgstr "滙入時間軸出錯" @@ -838,7 +837,7 @@ msgstr "要求取得授權" #: taiga/projects/models.py:536 taiga/projects/models.py:573 #: taiga/projects/models.py:596 taiga/projects/models.py:619 #: taiga/projects/models.py:654 taiga/projects/models.py:677 -#: taiga/users/models.py:289 taiga/webhooks/models.py:28 +#: taiga/users/models.py:292 taiga/webhooks/models.py:28 msgid "name" msgstr "姓名" @@ -1327,13 +1326,13 @@ msgstr "" msgid "The user must be already a project member" msgstr "" -#: taiga/projects/api.py:671 +#: taiga/projects/api.py:672 msgid "" "The project must have an owner and at least one of the users must be an " "active admin" msgstr "" -#: taiga/projects/api.py:705 +#: taiga/projects/api.py:706 msgid "You don't have permisions to see that." msgstr "您無觀看權限" @@ -1363,7 +1362,7 @@ msgstr "所有者" #: taiga/projects/notifications/models.py:73 #: taiga/projects/notifications/models.py:90 taiga/projects/tasks/models.py:42 #: taiga/projects/userstories/models.py:64 taiga/projects/wiki/models.py:30 -#: taiga/projects/wiki/models.py:68 taiga/users/models.py:302 +#: taiga/projects/wiki/models.py:68 taiga/users/models.py:305 msgid "project" msgstr "專案" @@ -1402,7 +1401,7 @@ msgstr "棄用" #: taiga/projects/models.py:513 taiga/projects/models.py:540 #: taiga/projects/models.py:575 taiga/projects/models.py:598 #: taiga/projects/models.py:623 taiga/projects/models.py:656 -#: taiga/projects/wiki/models.py:73 taiga/users/models.py:297 +#: taiga/projects/wiki/models.py:73 taiga/users/models.py:300 msgid "order" msgstr "次序" @@ -1682,7 +1681,7 @@ msgstr "喜歡" #: taiga/projects/milestones/models.py:41 taiga/projects/models.py:148 #: taiga/projects/models.py:474 taiga/projects/models.py:538 #: taiga/projects/models.py:621 taiga/projects/models.py:679 -#: taiga/projects/wiki/models.py:32 taiga/users/models.py:291 +#: taiga/projects/wiki/models.py:32 taiga/users/models.py:294 msgid "slug" msgstr "代稱" @@ -2753,50 +2752,72 @@ msgstr "" msgid "At least one user must be an active admin for this project." msgstr "" -#: taiga/projects/serializers.py:394 +#: taiga/projects/serializers.py:392 msgid "Default options" msgstr "預設選項" -#: taiga/projects/serializers.py:395 +#: taiga/projects/serializers.py:393 msgid "User story's statuses" msgstr "使用者故事狀態" -#: taiga/projects/serializers.py:396 +#: taiga/projects/serializers.py:394 msgid "Points" msgstr "點數" -#: taiga/projects/serializers.py:397 +#: taiga/projects/serializers.py:395 msgid "Task's statuses" msgstr "任務狀態" -#: taiga/projects/serializers.py:398 +#: taiga/projects/serializers.py:396 msgid "Issue's statuses" msgstr "問題狀態" -#: taiga/projects/serializers.py:399 +#: taiga/projects/serializers.py:397 msgid "Issue's types" msgstr "問題類型" -#: taiga/projects/serializers.py:400 +#: taiga/projects/serializers.py:398 msgid "Priorities" msgstr "優先性" -#: taiga/projects/serializers.py:401 +#: taiga/projects/serializers.py:399 msgid "Severities" msgstr "嚴重性" -#: taiga/projects/serializers.py:402 +#: taiga/projects/serializers.py:400 msgid "Roles" msgstr "角色" -#: taiga/projects/services/members.py:147 taiga/users/services.py:625 +#: taiga/projects/services/members.py:116 msgid "You have reached your current limit of memberships for private projects" msgstr "" -#: taiga/projects/services/members.py:151 taiga/users/services.py:634 +#: taiga/projects/services/members.py:120 msgid "You have reached your current limit of memberships for public projects" msgstr "" +#: taiga/projects/services/projects.py:69 +#: taiga/projects/services/projects.py:106 taiga/users/services.py:582 +msgid "You can't have more private projects" +msgstr "" + +#: taiga/projects/services/projects.py:73 +#: taiga/projects/services/projects.py:110 taiga/users/services.py:585 +msgid "" +"This project reaches your current limit of memberships for private projects" +msgstr "" + +#: taiga/projects/services/projects.py:77 +#: taiga/projects/services/projects.py:114 taiga/users/services.py:589 +msgid "You can't have more public projects" +msgstr "" + +#: taiga/projects/services/projects.py:81 +#: taiga/projects/services/projects.py:118 taiga/users/services.py:592 +msgid "" +"This project reaches your current limit of memberships for public projects" +msgstr "" + #: taiga/projects/services/stats.py:196 msgid "Future sprint" msgstr "未來之衝刺" @@ -3685,7 +3706,7 @@ msgstr "" msgid "max number of memberships for each owned public project" msgstr "" -#: taiga/users/models.py:294 +#: taiga/users/models.py:297 msgid "permissions" msgstr "許可" @@ -3701,14 +3722,6 @@ msgstr "無效使用者名稱,請重試其它名稱 " msgid "Username or password does not matches user." msgstr "用戶名稱與密碼不符" -#: taiga/users/services.py:602 -msgid "You can't have more private projects" -msgstr "" - -#: taiga/users/services.py:612 -msgid "You can't have more public projects" -msgstr "" - #: taiga/users/templates/emails/change_email-body-html.jinja:4 #, python-format msgid "" diff --git a/taiga/projects/api.py b/taiga/projects/api.py index 07aaaab1..a7c3aa61 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -378,13 +378,13 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, project = self.get_object() self.check_permissions(request, "transfer_accept", project) - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project( - request.user, + (can_transfer, error_message) = services.check_if_project_can_be_transfered( project, + request.user, ) - if not enough_slots: + if not can_transfer: members = project.memberships.count() - raise exc.NotEnoughSlotsForProject(project.is_private, members, not_enough_slots_error) + raise exc.NotEnoughSlotsForProject(project.is_private, members, error_message) reason = request.DATA.get('reason', None) services.accept_project_transfer(project, request.user, token, reason) @@ -422,12 +422,13 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, obj.owner = self.request.user obj.template = self.request.QUERY_PARAMS.get('template', None) - # Validate if the owner have enought slots to create or update the project - # TODO: Move to the ProjectAdminSerializer - (enough_slots, not_enough_slots_error) = users_service.has_available_slot_for_project(obj.owner, obj) - if not enough_slots: - members = max(obj.memberships.count(), 1) - raise exc.NotEnoughSlotsForProject(obj.is_private, members, not_enough_slots_error) + if not obj.id or self.get_object().is_private != obj.is_private: + # Validate if the owner have enought slots to create the project + # or if you are changing the privacity + (can_create_or_update, error_message) = services.check_if_project_can_be_created_or_updated(obj) + if not can_create_or_update: + members = max(obj.memberships.count(), 1) + raise exc.NotEnoughSlotsForProject(obj.is_private, members, error_message) self._set_base_permissions(obj) super().pre_save(obj) diff --git a/taiga/projects/serializers.py b/taiga/projects/serializers.py index 829eec89..95f05703 100644 --- a/taiga/projects/serializers.py +++ b/taiga/projects/serializers.py @@ -373,8 +373,6 @@ class ProjectDetailAdminSerializer(ProjectDetailSerializer): return services.get_max_memberships_for_project(obj) - - ###################################################### ## Liked ###################################################### diff --git a/taiga/projects/services/__init__.py b/taiga/projects/services/__init__.py index a4a1d465..d813423d 100644 --- a/taiga/projects/services/__init__.py +++ b/taiga/projects/services/__init__.py @@ -39,17 +39,19 @@ from .members import create_members_in_bulk from .members import get_members_from_bulk from .members import remove_user_from_project, project_has_valid_admins, can_user_leave_project from .members import get_max_memberships_for_project, get_total_project_memberships -from .members import check_if_project_privacity_can_be_changed from .members import check_if_project_can_have_more_memberships from .modules_config import get_modules_config +from .projects import check_if_project_privacity_can_be_changed +from .projects import check_if_project_can_be_created_or_updated +from .projects import check_if_project_can_be_transfered + from .stats import get_stats_for_project_issues from .stats import get_stats_for_project from .stats import get_member_stats_for_project from .tags_colors import update_project_tags_colors_handler -from .modules_config import get_modules_config from .transfer import request_project_transfer, start_project_transfer from .transfer import accept_project_transfer, reject_project_transfer diff --git a/taiga/projects/services/members.py b/taiga/projects/services/members.py index 1174bdf3..039ffd32 100644 --- a/taiga/projects/services/members.py +++ b/taiga/projects/services/members.py @@ -102,45 +102,14 @@ def get_total_project_memberships(project): return project.memberships.count() -ERROR_MAX_PUBLIC_PROJECTS_MEMBERSHIPS = 'max_public_projects_memberships' -ERROR_MAX_PRIVATE_PROJECTS_MEMBERSHIPS = 'max_private_projects_memberships' -ERROR_MAX_PUBLIC_PROJECTS = 'max_public_projects' -ERROR_MAX_PRIVATE_PROJECTS = 'max_private_projects' - -def check_if_project_privacity_can_be_changed(project): - """Return if the project privacity can be changed from private to public or viceversa. +def check_if_project_can_have_more_memberships(project, total_new_memberships): + """Return if a project can have more n new memberships. :param project: A project object. + :param total_new_memberships: the total of new memberships to add (int). - :return: True if it can be changed or False if can't. + :return: {bool, error_mesage} return a tuple (can add new members?, error message). """ - if project.is_private: - current_memberships = project.memberships.count() - max_memberships = project.owner.max_memberships_public_projects - error_members_exceeded = ERROR_MAX_PUBLIC_PROJECTS_MEMBERSHIPS - - current_projects = project.owner.owned_projects.filter(is_private=False).count() - max_projects = project.owner.max_public_projects - error_project_exceeded = ERROR_MAX_PUBLIC_PROJECTS - else: - current_memberships = project.memberships.count() - max_memberships = project.owner.max_memberships_private_projects - error_members_exceeded = ERROR_MAX_PRIVATE_PROJECTS_MEMBERSHIPS - - current_projects = project.owner.owned_projects.filter(is_private=True).count() - max_projects = project.owner.max_private_projects - error_project_exceeded = ERROR_MAX_PRIVATE_PROJECTS - - if max_memberships is not None and current_memberships > max_memberships: - return {'can_be_updated': False, 'reason': error_members_exceeded} - - if max_projects is not None and current_projects >= max_projects: - return {'can_be_updated': False, 'reason': error_project_exceeded} - - return {'can_be_updated': True, 'reason': None} - - -def check_if_project_can_have_more_memberships(project, total_new_memberships): if project.is_private: total_memberships = project.memberships.count() + total_new_memberships max_memberships = project.owner.max_memberships_private_projects diff --git a/taiga/projects/services/projects.py b/taiga/projects/services/projects.py new file mode 100644 index 00000000..306c585f --- /dev/null +++ b/taiga/projects/services/projects.py @@ -0,0 +1,126 @@ +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino +# Copyright (C) 2014-2016 David Barragán +# Copyright (C) 2014-2016 Alejandro Alonso +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from django.utils.translation import ugettext as _ + + +ERROR_MAX_PUBLIC_PROJECTS_MEMBERSHIPS = 'max_public_projects_memberships' +ERROR_MAX_PRIVATE_PROJECTS_MEMBERSHIPS = 'max_private_projects_memberships' +ERROR_MAX_PUBLIC_PROJECTS = 'max_public_projects' +ERROR_MAX_PRIVATE_PROJECTS = 'max_private_projects' + +def check_if_project_privacity_can_be_changed(project): + """Return if the project privacity can be changed from private to public or viceversa. + + :param project: A project object. + + :return: A dict like this {'can_be_updated': bool, 'reason': error message}. + """ + if project.is_private: + current_memberships = project.memberships.count() + max_memberships = project.owner.max_memberships_public_projects + error_memberships_exceeded = ERROR_MAX_PUBLIC_PROJECTS_MEMBERSHIPS + + current_projects = project.owner.owned_projects.filter(is_private=False).count() + max_projects = project.owner.max_public_projects + error_project_exceeded = ERROR_MAX_PUBLIC_PROJECTS + else: + current_memberships = project.memberships.count() + max_memberships = project.owner.max_memberships_private_projects + error_memberships_exceeded = ERROR_MAX_PRIVATE_PROJECTS_MEMBERSHIPS + + current_projects = project.owner.owned_projects.filter(is_private=True).count() + max_projects = project.owner.max_private_projects + error_project_exceeded = ERROR_MAX_PRIVATE_PROJECTS + + if max_memberships is not None and current_memberships > max_memberships: + return {'can_be_updated': False, 'reason': error_memberships_exceeded} + + if max_projects is not None and current_projects >= max_projects: + return {'can_be_updated': False, 'reason': error_project_exceeded} + + return {'can_be_updated': True, 'reason': None} + + +def check_if_project_can_be_created_or_updated(project): + """Return if the project can be create or update (the privacity). + + :param project: A project object. + + :return: {bool, error_mesage} return a tuple (can be created or updated, error message). + """ + if project.is_private: + current_projects = project.owner.owned_projects.filter(is_private=True).count() + max_projects = project.owner.max_private_projects + error_project_exceeded = _("You can't have more private projects") + + current_memberships = project.memberships.count() or 1 + max_memberships = project.owner.max_memberships_private_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for private projects") + else: + current_projects = project.owner.owned_projects.filter(is_private=False).count() + max_projects = project.owner.max_public_projects + error_project_exceeded = _("You can't have more public projects") + + current_memberships = project.memberships.count() or 1 + max_memberships = project.owner.max_memberships_public_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for public projects") + + if max_projects is not None and current_projects >= max_projects: + return (False, error_project_exceeded) + + if max_memberships is not None and current_memberships > max_memberships: + return (False, error_memberships_exceeded) + + return (True, None) + + +def check_if_project_can_be_transfered(project, new_owner): + """Return if the project can be transfered to another member. + + :param project: A project object. + :param new_owner: The new owner. + + :return: {bool, error_mesage} return a tuple (can be transfered?, error message). + """ + if project.owner == new_owner: + return (True, None) + + if project.is_private: + current_projects = new_owner.owned_projects.filter(is_private=True).count() + max_projects = new_owner.max_private_projects + error_project_exceeded = _("You can't have more private projects") + + current_memberships = project.memberships.count() + max_memberships = new_owner.max_memberships_private_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for private projects") + else: + current_projects = new_owner.owned_projects.filter(is_private=False).count() + max_projects = new_owner.max_public_projects + error_project_exceeded = _("You can't have more public projects") + + current_memberships = project.memberships.count() + max_memberships = new_owner.max_memberships_public_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for public projects") + + if max_projects is not None and current_projects >= max_projects: + return (False, error_project_exceeded) + + if max_memberships is not None and current_memberships > max_memberships: + return (False, error_memberships_exceeded) + + return (True, None) diff --git a/taiga/users/services.py b/taiga/users/services.py index b18e8b36..7e210275 100644 --- a/taiga/users/services.py +++ b/taiga/users/services.py @@ -575,60 +575,26 @@ def get_voted_list(for_user, from_user, type=None, q=None): ] -def has_available_slot_for_project(user, project, new_members=0): - # TODO: Refactor: Create one service for every type of action and move to project services - # - # - has_available_slot_to_create_new_project() - # - has_available_slot_to_update_this_project() - # - has_available_slot_to_transfer_this_project() - # - has_available_slot_to_import_this_project() - # - has_available_slot_to_add_members_to_this_project() - - (enough, error) = _has_available_slot_for_project_type(user, project) - if not enough: - return (enough, error) - return _has_available_slot_for_project_members(user, project, new_members) - - -def _has_available_slot_for_project_type(user, project): - if project.is_private: - if user.max_private_projects is None: - return (True, None) - - current_private_projects = user.owned_projects.filter(is_private=True).exclude(id=project.id).count() - if current_private_projects < user.max_private_projects: - return (True, None) - - return (False, _("You can't have more private projects")) +def has_available_slot_for_import_new_project(owner, is_private, total_memberships): + if is_private: + current_projects = owner.owned_projects.filter(is_private=True).count() + max_projects = owner.max_private_projects + error_project_exceeded = _("You can't have more private projects") + max_memberships = owner.max_memberships_private_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for private projects") else: - if user.max_public_projects is None: - return (True, None) + current_projects = owner.owned_projects.filter(is_private=False).count() + max_projects = owner.max_public_projects + error_project_exceeded = _("You can't have more public projects") - current_public_project = user.owned_projects.filter(is_private=False).exclude(id=project.id).count() - if current_public_project < user.max_public_projects: - return (True, None) + max_memberships = owner.max_memberships_public_projects + error_memberships_exceeded = _("This project reaches your current limit of memberships for public projects") - return (False, _("You can't have more public projects")) + if max_projects is not None and current_projects >= max_projects: + return (False, error_project_exceeded) + if max_memberships is not None and total_memberships > max_memberships: + return (False, error_memberships_exceeded) -def _has_available_slot_for_project_members(user, project, new_members): - current_memberships = max(project.memberships.count(), 1) - - if project.is_private: - if user.max_memberships_private_projects is None: - return (True, None) - - if current_memberships + new_members <= user.max_memberships_private_projects: - return (True, None) - - return (False, _("You have reached your current limit of memberships for private projects")) - - else: - if user.max_memberships_public_projects is None: - return (True, None) - - if current_memberships + new_members <= user.max_memberships_public_projects: - return (True, None) - - return (False, _("You have reached your current limit of memberships for public projects")) + return (True, None) diff --git a/tests/integration/test_importer_api.py b/tests/integration/test_importer_api.py index 5b6a178c..a881e67d 100644 --- a/tests/integration/test_importer_api.py +++ b/tests/integration/test_importer_api.py @@ -1061,7 +1061,7 @@ def test_dict_to_project_with_no_members_private_project_slots_available(client) with pytest.raises(TaigaImportError) as excinfo: project = dict_to_project(data, owner=user) - assert "reached your current limit of memberships for private" in str(excinfo.value) + assert "reaches your current limit of memberships for private" in str(excinfo.value) def test_dict_to_project_with_no_members_public_project_slots_available(client): @@ -1096,7 +1096,7 @@ def test_dict_to_project_with_no_members_public_project_slots_available(client): with pytest.raises(TaigaImportError) as excinfo: project = dict_to_project(data, owner=user) - assert "reached your current limit of memberships for public" in str(excinfo.value) + assert "reaches your current limit of memberships for public" in str(excinfo.value) def test_invalid_dump_import(client): @@ -1322,7 +1322,7 @@ def test_valid_dump_import_without_enough_membership_private_project_slots_one_p response = client.post(url, {'dump': data}) assert response.status_code == 400 - assert "reached your current limit of memberships for private" in response.data["_error_message"] + assert "reaches your current limit of memberships for private" in response.data["_error_message"] assert Project.objects.filter(slug="project-without-memberships-slots").count() == 0 @@ -1369,7 +1369,7 @@ def test_valid_dump_import_without_enough_membership_public_project_slots_one_pr response = client.post(url, {'dump': data}) assert response.status_code == 400 - assert "reached your current limit of memberships for public" in response.data["_error_message"] + assert "reaches your current limit of memberships for public" in response.data["_error_message"] assert Project.objects.filter(slug="project-without-memberships-slots").count() == 0 diff --git a/tests/integration/test_projects.py b/tests/integration/test_projects.py index b086f402..14a8c7f4 100644 --- a/tests/integration/test_projects.py +++ b/tests/integration/test_projects.py @@ -1423,10 +1423,10 @@ def test_project_transfer_validate_token_from_no_admin_member_with_valid_token(c #################################################################################### -# Test taiga.projects.services.members.check_if_project_privacity_can_be_changed +# Test taiga.projects.services.projects.check_if_project_privacity_can_be_changed #################################################################################### -from taiga.projects.services.members import ( +from taiga.projects.services.projects import ( check_if_project_privacity_can_be_changed, ERROR_MAX_PUBLIC_PROJECTS_MEMBERSHIPS, ERROR_MAX_PUBLIC_PROJECTS,