diff --git a/CHANGELOG.md b/CHANGELOG.md index 9802e4e96d..1629809dcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,19 +8,22 @@ and this project adheres to ## [Unreleased] +## [3.4.0] - 2025-07-09 + ### Added - ✨(frontend) multi-pages #701 +- ✨(frontend) Duplicate a doc #1078 +- ✨Ask for access #1081 +- ✨(frontend) add customization for translations #857 - ✨(backend) add ancestors links definitions to document abilities #846 - ✨(backend) include ancestors accesses on document accesses list view # 846 - ✨(backend) add ancestors links reach and role to document API #846 -- ✨(frontend) add customization for translations #857 -- ✨(frontend) Duplicate a doc #1078 - 📝(project) add troubleshoot doc #1066 - 📝(project) add system-requirement doc #1066 - 🔧(front) configure x-frame-options to DENY in nginx conf #1084 -- ✨(backend) allow to disable checking unsafe mimetype on attachment upload -- ✨Ask for access #1081 +- ✨(backend) allow to disable checking unsafe mimetype on + attachment upload #1099 - ✨(doc) add documentation to install with compose #855 - ✨ Give priority to users connected to collaboration server (aka no websocket feature) #1093 @@ -43,8 +46,7 @@ and this project adheres to - 🐛(frontend) fix meta title #1017 - 🔧(git) set LF line endings for all text files #1032 - 📝(docs) minor fixes to docs/env.md -- ✨(backend) support `_FILE` environment variables for secrets #912 -- ✨(frontend) support `_FILE` environment variables for secrets #912 +- ✨support `_FILE` environment variables for secrets #912 ### Removed @@ -634,7 +636,8 @@ and this project adheres to - ✨(frontend) Coming Soon page (#67) - 🚀 Impress, project to manage your documents easily and collaboratively. -[unreleased]: https://github.com/numerique-gouv/impress/compare/v3.3.0...main +[unreleased]: https://github.com/numerique-gouv/impress/compare/v3.4.0...main +[v3.4.0]: https://github.com/numerique-gouv/impress/releases/v3.4.0 [v3.3.0]: https://github.com/numerique-gouv/impress/releases/v3.3.0 [v3.2.1]: https://github.com/numerique-gouv/impress/releases/v3.2.1 [v3.2.0]: https://github.com/numerique-gouv/impress/releases/v3.2.0 diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index 3fd349b335..7919033e16 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -948,33 +948,34 @@ def duplicate(self, request, *args, **kwargs): **link_kwargs, ) - # Always add the logged-in user as OWNER - accesses_to_create = [ - models.DocumentAccess( - document=duplicated_document, - user=request.user, - role=models.RoleChoices.OWNER, - ) - ] - - # If accesses should be duplicated, add other users' accesses as per original document - if with_accesses and is_owner_or_admin: - original_accesses = models.DocumentAccess.objects.filter( - document=document - ).exclude(user=request.user) - - accesses_to_create.extend( + # Always add the logged-in user as OWNER for root documents + if document.is_root(): + accesses_to_create = [ models.DocumentAccess( document=duplicated_document, - user_id=access.user_id, - team=access.team, - role=access.role, + user=request.user, + role=models.RoleChoices.OWNER, + ) + ] + + # If accesses should be duplicated, add other users' accesses as per original document + if with_accesses and is_owner_or_admin: + original_accesses = models.DocumentAccess.objects.filter( + document=document + ).exclude(user=request.user) + + accesses_to_create.extend( + models.DocumentAccess( + document=duplicated_document, + user_id=access.user_id, + team=access.team, + role=access.role, + ) + for access in original_accesses ) - for access in original_accesses - ) - # Bulk create all the duplicated accesses - models.DocumentAccess.objects.bulk_create(accesses_to_create) + # Bulk create all the duplicated accesses + models.DocumentAccess.objects.bulk_create(accesses_to_create) return drf_response.Response( {"id": str(duplicated_document.id)}, status=status.HTTP_201_CREATED diff --git a/src/backend/core/tests/documents/test_api_documents_ask_for_access.py b/src/backend/core/tests/documents/test_api_documents_ask_for_access.py index 88a886d501..23bb8d505d 100644 --- a/src/backend/core/tests/documents/test_api_documents_ask_for_access.py +++ b/src/backend/core/tests/documents/test_api_documents_ask_for_access.py @@ -48,7 +48,7 @@ def test_api_documents_ask_for_access_create_authenticated(): An email should be sent to document owners and admins to notify them. """ owner_user = UserFactory(language="en-us") - admin_user = UserFactory(language="fr-fr") + admin_user = UserFactory(language="en-us") document = DocumentFactory( users=[ (owner_user, RoleChoices.OWNER), diff --git a/src/backend/core/tests/documents/test_api_documents_duplicate.py b/src/backend/core/tests/documents/test_api_documents_duplicate.py index 8ce7b78a88..3a781bb8d4 100644 --- a/src/backend/core/tests/documents/test_api_documents_duplicate.py +++ b/src/backend/core/tests/documents/test_api_documents_duplicate.py @@ -252,3 +252,44 @@ def test_api_documents_duplicate_with_accesses_non_admin(role): duplicated_accesses = duplicated_document.accesses assert duplicated_accesses.count() == 1 assert duplicated_accesses.get(user=user).role == "owner" + + +@pytest.mark.parametrize("role", ["editor", "reader"]) +def test_api_documents_duplicate_non_root_document(role): + """ + Non-root documents can be duplicated but without accesses. + """ + user = factories.UserFactory() + client = APIClient() + client.force_login(user) + + document = factories.DocumentFactory(users=[(user, "owner")]) + child = factories.DocumentFactory( + parent=document, users=[(user, role)], title="document with accesses" + ) + + assert child.accesses.count() == 1 + + # Duplicate the document via the API endpoint requesting to duplicate accesses + response = client.post( + f"/api/v1.0/documents/{child.id!s}/duplicate/", + {"with_accesses": True}, + format="json", + ) + + assert response.status_code == 201 + + duplicated_document = models.Document.objects.get(id=response.json()["id"]) + assert duplicated_document.title == "Copy of document with accesses" + assert duplicated_document.content == child.content + assert duplicated_document.link_reach == child.link_reach + assert duplicated_document.link_role == child.link_role + assert duplicated_document.creator == user + assert duplicated_document.duplicated_from == child + assert duplicated_document.attachments == [] + + # No access should be created for non root documents + duplicated_accesses = duplicated_document.accesses + assert duplicated_accesses.count() == 0 + assert duplicated_document.is_sibling_of(child) + assert duplicated_document.is_child_of(document) diff --git a/src/backend/locale/br_FR/LC_MESSAGES/django.po b/src/backend/locale/br_FR/LC_MESSAGES/django.po index 3556327082..16315730e6 100644 --- a/src/backend/locale/br_FR/LC_MESSAGES/django.po +++ b/src/backend/locale/br_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Breton\n" "Language: br_FR\n" @@ -46,31 +46,61 @@ msgstr "Me eo an aozer" msgid "Favorite" msgstr "Sinedoù" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Ur restr nevez a zo bet krouet ganeoc'h!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "C'hwi zo bet disklaeriet perc'henn ur restr nevez:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Korf" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Doare korf" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Stumm" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "eilenn {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lenner" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Merour" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Perc'henn" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Publik" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Bugel kentañ" @@ -95,295 +125,292 @@ msgstr "Kleiz" msgid "Right" msgstr "Dehoù" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lenner" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Merour" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Perc'henn" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Publik" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "krouet d'ar/al" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "hizivaet d'ar/al" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "anv klok" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "anv berr" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "yezh" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "trevnad" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "implijer" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "implijerien" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "titl" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "publik" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Patrom" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Patromoù" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "" -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Digeriñ" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/de_DE/LC_MESSAGES/django.po b/src/backend/locale/de_DE/LC_MESSAGES/django.po index f3f1c03c91..e7faafa4df 100644 --- a/src/backend/locale/de_DE/LC_MESSAGES/django.po +++ b/src/backend/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -46,31 +46,61 @@ msgstr "Ersteller bin ich" msgid "Favorite" msgstr "Favorit" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Ein neues Dokument wurde in Ihrem Namen erstellt!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Sie sind Besitzer eines neuen Dokuments:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Inhalt" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Typ" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Format" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "Kopie von {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lesen" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Bearbeiten" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Administrator" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Besitzer" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Beschränkt" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Authentifiziert" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Öffentlich" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Erstes Unterelement" @@ -95,295 +125,292 @@ msgstr "Links" msgid "Right" msgstr "Rechts" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lesen" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Bearbeiten" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Administrator" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Besitzer" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Beschränkt" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Authentifiziert" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Öffentlich" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "primärer Schlüssel für den Datensatz als UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "Erstellt" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "Datum und Uhrzeit, an dem ein Datensatz erstellt wurde" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "Aktualisiert" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "Datum und Uhrzeit, an dem zuletzt aktualisiert wurde" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "Wir konnten keinen Benutzer mit diesem Abo finden, aber die E-Mail-Adresse ist bereits einem registrierten Benutzer zugeordnet." -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "Geben Sie eine gültige Unterseite ein. Dieser Wert darf nur Buchstaben, Zahlen und die @/./+/-/_/: Zeichen enthalten." -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "unter" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Erforderlich. 255 Zeichen oder weniger. Buchstaben, Zahlen und die Zeichen @/./+/-/_/:" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "Name" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "Kurzbezeichnung" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "Identitäts-E-Mail-Adresse" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "Admin E-Mail-Adresse" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "Sprache" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "Die Sprache, in der der Benutzer die Benutzeroberfläche sehen möchte." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "Die Zeitzone, in der der Nutzer Zeiten sehen möchte." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "Gerät" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Ob der Benutzer ein Gerät oder ein echter Benutzer ist." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "Status des Teammitgliedes" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Gibt an, ob der Benutzer sich in diese Admin-Seite einloggen kann." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "aktiviert" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Ob dieser Benutzer als aktiviert behandelt werden soll. Deaktivieren Sie diese Option, anstatt Konten zu löschen." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "Benutzer" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "Benutzer" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "Titel" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "Auszug" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Dokument" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Dokumente" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Unbenanntes Dokument" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} hat ein Dokument mit Ihnen geteilt!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} hat Sie mit der Rolle \"{role}\" zu folgendem Dokument eingeladen:" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} hat ein Dokument mit Ihnen geteilt: {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "Dokument/Benutzer Linkverfolgung" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "Dokument/Benutzer Linkverfolgung" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "Für dieses Dokument/ diesen Benutzer ist bereits eine Linkverfolgung vorhanden." -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Dokumentenfavorit" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Dokumentfavoriten" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "Dieses Dokument ist bereits durch den gleichen Benutzer favorisiert worden." -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "Dokument/Benutzerbeziehung" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "Dokument/Benutzerbeziehungen" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "Dieser Benutzer befindet sich bereits in diesem Dokument." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Dieses Team befindet sich bereits in diesem Dokument." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "Benutzer oder Team müssen gesetzt werden, nicht beides." -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "Beschreibung" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "Code" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "CSS" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "öffentlich" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Ob diese Vorlage für jedermann öffentlich ist." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Vorlage" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Vorlagen" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "Vorlage/Benutzer-Beziehung" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "Vorlage/Benutzerbeziehungen" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "Dieser Benutzer ist bereits in dieser Vorlage." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Dieses Team ist bereits in diesem Template." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "E-Mail-Adresse" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Einladung zum Dokument" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Dokumenteinladungen" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Diese E-Mail ist bereits einem registrierten Benutzer zugeordnet." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logo-E-Mail" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Öffnen" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr " Docs, Ihr neues unentbehrliches Werkzeug für die Organisation, den Austausch und die Zusammenarbeit in Ihren Dokumenten als Team. " -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " Erstellt von %(brandname)s " diff --git a/src/backend/locale/en_US/LC_MESSAGES/django.po b/src/backend/locale/en_US/LC_MESSAGES/django.po index dfc56fb69d..07193c9770 100644 --- a/src/backend/locale/en_US/LC_MESSAGES/django.po +++ b/src/backend/locale/en_US/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: English\n" "Language: en_US\n" @@ -46,344 +46,371 @@ msgstr "" msgid "Favorite" msgstr "" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "" -#: build/lib/core/enums.py:36 core/enums.py:36 -msgid "First child" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" msgstr "" -#: build/lib/core/enums.py:37 core/enums.py:37 -msgid "Last child" +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" msgstr "" -#: build/lib/core/enums.py:38 core/enums.py:38 -msgid "First sibling" +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" msgstr "" -#: build/lib/core/enums.py:39 core/enums.py:39 -msgid "Last sibling" +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" msgstr "" -#: build/lib/core/enums.py:40 core/enums.py:40 -msgid "Left" +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" msgstr "" -#: build/lib/core/enums.py:41 core/enums.py:41 -msgid "Right" +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" msgstr "" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" msgstr "" -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" +#: build/lib/core/enums.py:36 core/enums.py:36 +msgid "First child" msgstr "" -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" +#: build/lib/core/enums.py:37 core/enums.py:37 +msgid "Last child" msgstr "" -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" +#: build/lib/core/enums.py:38 core/enums.py:38 +msgid "First sibling" msgstr "" -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" +#: build/lib/core/enums.py:39 core/enums.py:39 +msgid "Last sibling" msgstr "" -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" +#: build/lib/core/enums.py:40 core/enums.py:40 +msgid "Left" msgstr "" -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" +#: build/lib/core/enums.py:41 core/enums.py:41 +msgid "Right" msgstr "" -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "" -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/es_ES/LC_MESSAGES/django.po b/src/backend/locale/es_ES/LC_MESSAGES/django.po index c85de6cdae..ddcc6c8818 100644 --- a/src/backend/locale/es_ES/LC_MESSAGES/django.po +++ b/src/backend/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -46,31 +46,61 @@ msgstr "Yo soy el creador" msgid "Favorite" msgstr "Favorito" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "¡Un nuevo documento se ha creado por ti!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Se le ha concedido la propiedad de un nuevo documento :" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Cuerpo" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Tipo de Cuerpo" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Formato" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "copia de {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lector" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Editor" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Administrador" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Propietario" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Restringido" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Autentificado" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Público" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Primer nodo" @@ -95,295 +125,292 @@ msgstr "Izquierda" msgid "Right" msgstr "Derecha" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lector" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Editor" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Administrador" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Propietario" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Restringido" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Autentificado" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Público" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "clave primaria para el registro como UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "creado el" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "fecha y hora en la que se creó un registro" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "actualizado el" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "fecha y hora en la que un registro fue actualizado por última vez" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "No se ha podido encontrar un usuario con este sub (UUID), pero el correo electrónico ya está asociado con un usuario." -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "Introduzca un sub (UUID) válido. Este valor solo puede contener letras, números y los siguientes caracteres @/./+/-/_/:" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "sub (UUID)" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Requerido. 255 caracteres o menos. Letras, números y los siguientes caracteres @/./+/-/_/: solamente." -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "nombre completo" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "nombre abreviado" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "correo electrónico de identidad" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "correo electrónico del administrador" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "idioma" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "El idioma en el que el usuario desea ver la interfaz." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "La zona horaria en la que el usuario quiere ver los tiempos." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "dispositivo" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Si el usuario es un dispositivo o un usuario real." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "rol en el equipo" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Si el usuario puede iniciar sesión en esta página web de administración." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "activo" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Si este usuario debe ser considerado como activo. Deseleccionar en lugar de eliminar cuentas." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "usuario" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "usuarios" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "título" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "resumen" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Documento" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Documentos" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Documento sin título" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "¡{name} ha compartido un documento contigo!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "Te ha invitado {name} al siguiente documento con el rol \"{role}\" :" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} ha compartido un documento contigo: {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "Traza del enlace de documento/usuario" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "Trazas del enlace de documento/usuario" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "Ya existe una traza de enlace para este documento/usuario." -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Documento favorito" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Documentos favoritos" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "Este documento ya ha sido marcado como favorito por el usuario." -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "Relación documento/usuario" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "Relaciones documento/usuario" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "Este usuario ya forma parte del documento." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Este equipo ya forma parte del documento." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "Debe establecerse un usuario o un equipo, no ambos." -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "Este usuario ya ha solicitado acceso a este documento." + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "¡{name} desea acceder a un documento!" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "descripción" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "código" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "público" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Si esta plantilla es pública para que cualquiera la utilice." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Plantilla" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Plantillas" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "Relación plantilla/usuario" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "Relaciones plantilla/usuario" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "Este usuario ya forma parte de la plantilla." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Este equipo ya se encuentra en esta plantilla." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "dirección de correo electrónico" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Invitación al documento" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Invitaciones a documentos" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Este correo electrónico está asociado a un usuario registrado." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logo de correo electrónico" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Abrir" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "Docs, su nueva herramienta esencial para organizar, compartir y colaborar en sus documentos como equipo." -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " Presentado por %(brandname)s " diff --git a/src/backend/locale/fr_FR/LC_MESSAGES/django.po b/src/backend/locale/fr_FR/LC_MESSAGES/django.po index 9e76e6a371..6c5f8dba13 100644 --- a/src/backend/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/backend/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 11:52\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -46,31 +46,61 @@ msgstr "Je suis l'auteur" msgid "Favorite" msgstr "Favoris" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Un nouveau document a été créé pour vous !" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Vous avez été déclaré propriétaire d'un nouveau document :" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Corps" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Type de corps" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Format" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "copie de {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lecteur" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Éditeur" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Administrateur" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Propriétaire" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Restreint" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Authentifié" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Public" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Premier enfant" @@ -95,295 +125,292 @@ msgstr "Gauche" msgid "Right" msgstr "Droite" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lecteur" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Éditeur" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Administrateur" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Propriétaire" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Restreint" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Authentifié" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Public" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "identifiant/id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "clé primaire pour l'enregistrement en tant que UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "créé le" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "date et heure de création de l'enregistrement" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "mis à jour le" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "date et heure de la dernière mise à jour de l'enregistrement" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "Nous n'avons pas pu trouver un utilisateur avec ce sous-groupe mais l'e-mail est déjà associé à un utilisateur enregistré." -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "Saisissez un sous-groupe valide. Cette valeur ne peut contenir que des lettres, des chiffres et les caractères @/./+/-/_/: uniquement." -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "sous-groupe" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Obligatoire. 255 caractères ou moins. Lettres, chiffres et caractères @/./+/-/_/: uniquement." -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "nom complet" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "nom court" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "adresse e-mail d'identité" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "adresse e-mail de l'administrateur" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "langue" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "La langue dans laquelle l'utilisateur veut voir l'interface." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "Le fuseau horaire dans lequel l'utilisateur souhaite voir les heures." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "appareil" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Si l'utilisateur est un appareil ou un utilisateur réel." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "statut d'équipe" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Si l'utilisateur peut se connecter à ce site d'administration." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "actif" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Si cet utilisateur doit être traité comme actif. Désélectionnez ceci au lieu de supprimer des comptes." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "utilisateur" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "utilisateurs" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "titre" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "extrait" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Document" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Documents" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Document sans titre" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} a partagé un document avec vous!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} vous a invité avec le rôle \"{role}\" sur le document suivant :" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} a partagé un document avec vous : {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "Trace du lien document/utilisateur" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "Traces du lien document/utilisateur" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "Une trace de lien existe déjà pour ce document/utilisateur." -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Document favori" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Documents favoris" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "Ce document est déjà un favori de cet utilisateur." -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "Relation document/utilisateur" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "Relations document/utilisateur" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "Cet utilisateur est déjà dans ce document." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Cette équipe est déjà dans ce document." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "L'utilisateur ou l'équipe doivent être définis, pas les deux." -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "Demande d'accès au document" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "Demande d'accès au document" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "Cet utilisateur a déjà demandé l'accès à ce document." + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "{name} souhaiterait accéder au document suivant !" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "{name} souhaiterait accéder au document suivant :" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "{name} demande l'accès au document : {title}" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "description" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "code" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "CSS" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "public" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Si ce modèle est public, utilisable par n'importe qui." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Modèle" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Modèles" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "Relation modèle/utilisateur" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "Relations modèle/utilisateur" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "Cet utilisateur est déjà dans ce modèle." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Cette équipe est déjà modèle." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "adresse e-mail" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Invitation à un document" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Invitations à un document" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Cette adresse email est déjà associée à un utilisateur inscrit." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logo de l'e-mail" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Ouvrir" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr " Docs, votre nouvel outil incontournable pour organiser, partager et collaborer sur vos documents en équipe. " -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " Proposé par %(brandname)s " diff --git a/src/backend/locale/it_IT/LC_MESSAGES/django.po b/src/backend/locale/it_IT/LC_MESSAGES/django.po index 820a94382b..5619550857 100644 --- a/src/backend/locale/it_IT/LC_MESSAGES/django.po +++ b/src/backend/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -46,31 +46,61 @@ msgstr "Il creatore sono io" msgid "Favorite" msgstr "Preferiti" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Un nuovo documento è stato creato a tuo nome!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Sei ora proprietario di un nuovo documento:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Corpo" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Formato" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "copia di {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lettore" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Editor" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Amministratore" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Proprietario" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Limitato" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Autenticato" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Pubblico" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "" @@ -95,295 +125,292 @@ msgstr "Sinistra" msgid "Right" msgstr "Destra" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lettore" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Editor" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Amministratore" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Proprietario" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Limitato" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Autenticato" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Pubblico" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "Id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "chiave primaria per il record come UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "creato il" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "data e ora in cui è stato creato un record" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "aggiornato il" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "data e ora in cui l’ultimo record è stato aggiornato" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Richiesto. 255 caratteri o meno. Solo lettere, numeri e @/./+/-/_/: caratteri." -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "nome completo" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "nome" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "indirizzo email di identità" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "Indirizzo email dell'amministratore" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "lingua" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "La lingua in cui l'utente vuole vedere l'interfaccia." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "Il fuso orario in cui l'utente vuole vedere gli orari." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "dispositivo" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Se l'utente è un dispositivo o un utente reale." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "stato del personale" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Indica se l'utente può accedere a questo sito amministratore." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "attivo" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Indica se questo utente deve essere trattato come attivo. Deseleziona invece di eliminare gli account." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "utente" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "utenti" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "titolo" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Documento" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Documenti" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Documento senza titolo" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} ha condiviso un documento con te!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} ti ha invitato con il ruolo \"{role}\" nel seguente documento:" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} ha condiviso un documento con te: {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Documento preferito" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Documenti preferiti" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "Questo utente è già presente in questo documento." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Questo team è già presente in questo documento." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "descrizione" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "code" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "pubblico" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Indica se questo modello è pubblico per chiunque." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Modello" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Modelli" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "Questo utente è già in questo modello." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Questo team è già in questo modello." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "indirizzo e-mail" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Invito al documento" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Inviti al documento" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Questa email è già associata a un utente registrato." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logo e-mail" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Apri" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/nl_NL/LC_MESSAGES/django.po b/src/backend/locale/nl_NL/LC_MESSAGES/django.po index f52df04086..585a2bd209 100644 --- a/src/backend/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/backend/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -46,31 +46,61 @@ msgstr "Ik ben Eigenaar" msgid "Favorite" msgstr "Favoriete" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Een nieuw document was gecreëerd voor u!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "U heeft eigenaarschap van een nieuw document:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Text" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Text type" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Formaat" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "kopie van {title}" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Lezer" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Bewerker" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Administrator" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Eigenaar" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Niet toegestaan" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Geauthenticeerd" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Publiek" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Eerste node" @@ -95,295 +125,292 @@ msgstr "Links" msgid "Right" msgstr "Rechts" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Lezer" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Bewerker" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Administrator" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Eigenaar" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Niet toegestaan" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Geauthenticeerd" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Publiek" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "primaire sleutel voor dossier als UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "gemaakt op" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "datum en tijd wanneer dossier was gecreëerd" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "Laatst gewijzigd op" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "datum en tijd waarop dossier laatst was gewijzigd" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "Wij konden geen gebruiker vinden met deze id, maar de email is al geassocieerd met een geregistreerde gebruiker." -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr ".Geef een valide id. De waarde mag alleen letters, nummers en @/./.+/-/_: karakters bevatten." -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "id" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Verplicht. 255 karakters of minder. Alleen letters, nummers en @/./+/-/_/: karakters zijn toegestaan." -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "volledige naam" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "gebruikersnaam" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "identiteit email adres" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "admin email adres" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "taal" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "De taal waarin de gebruiker de interface wilt zien." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "De tijdzone waarin de gebruiker de tijden wilt zien." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "apparaat" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Of de gebruiker een apparaat is of een echte gebruiker." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "beheerder status" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Of de gebruiker kan inloggen in het admin gedeelte." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "actief" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Of een gebruiker als actief moet worden beschouwd. Deselecteer dit in plaats van het account te deleten." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "gebruiker" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "gebruikers" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "titel" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "uittreksel" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Document" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Documenten" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Naamloos Document" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} heeft een document met gedeeld!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} heeft u uitgenodigd met de rol \"{role}\" op het volgende document:" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} heeft een document met u gedeeld: {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "Document/gebruiker url" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "Document/gebruiker url" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "Een url bestaat al voor dit document/deze gebruiker." -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Document favoriet" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Document favorieten" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "Dit document is al in gebruik als favoriete door dezelfde gebruiker." -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "Document/gebruiker relatie" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "Document/gebruiker relaties" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "De gebruiker is al in dit document." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Het team is al in dit document." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "Een gebruiker of team moet gekozen worden, maar niet beide." -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "omschrijving" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "code" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "publiek" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Of dit template als publiek is en door iedereen te gebruiken is." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Template" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Templates" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "Template/gebruiker relatie" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "Template/gebruiker relaties" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "De gebruiker bestaat al in dit template." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Het team bestaat al in dit template." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "email adres" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Document uitnodiging" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Document uitnodigingen" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Deze email is al geassocieerd met een geregistreerde gebruiker." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logo email" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Open" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr " Docs, jouw nieuwe essentiële tool voor het organiseren, delen en collaboreren van documenten als team. " -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " Geleverd door %(brandname)s " diff --git a/src/backend/locale/pt_PT/LC_MESSAGES/django.po b/src/backend/locale/pt_PT/LC_MESSAGES/django.po index bb9e975159..003190c79d 100644 --- a/src/backend/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/backend/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -46,344 +46,371 @@ msgstr "" msgid "Favorite" msgstr "" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "" -#: build/lib/core/enums.py:36 core/enums.py:36 -msgid "First child" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" msgstr "" -#: build/lib/core/enums.py:37 core/enums.py:37 -msgid "Last child" +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" msgstr "" -#: build/lib/core/enums.py:38 core/enums.py:38 -msgid "First sibling" +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" msgstr "" -#: build/lib/core/enums.py:39 core/enums.py:39 -msgid "Last sibling" +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" msgstr "" -#: build/lib/core/enums.py:40 core/enums.py:40 -msgid "Left" +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" msgstr "" -#: build/lib/core/enums.py:41 core/enums.py:41 -msgid "Right" +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" msgstr "" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" msgstr "" -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" +#: build/lib/core/enums.py:36 core/enums.py:36 +msgid "First child" msgstr "" -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" +#: build/lib/core/enums.py:37 core/enums.py:37 +msgid "Last child" msgstr "" -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" +#: build/lib/core/enums.py:38 core/enums.py:38 +msgid "First sibling" msgstr "" -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" +#: build/lib/core/enums.py:39 core/enums.py:39 +msgid "Last sibling" msgstr "" -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" +#: build/lib/core/enums.py:40 core/enums.py:40 +msgid "Left" msgstr "" -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" +#: build/lib/core/enums.py:41 core/enums.py:41 +msgid "Right" msgstr "" -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "" -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/sl_SI/LC_MESSAGES/django.po b/src/backend/locale/sl_SI/LC_MESSAGES/django.po index 5605507bc5..9c7a9ac756 100644 --- a/src/backend/locale/sl_SI/LC_MESSAGES/django.po +++ b/src/backend/locale/sl_SI/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -46,31 +46,61 @@ msgstr "Ustvaril sem jaz" msgid "Favorite" msgstr "Priljubljena" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Nov dokument je bil ustvarjen v vašem imenu!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Dodeljeno vam je bilo lastništvo nad novim dokumentom:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "Telo" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "Vrsta telesa" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Oblika" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "Bralec" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "Urednik" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Skrbnik" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "Lastnik" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "Omejeno" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "Preverjeno" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Javno" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "Prvi otrok" @@ -95,295 +125,292 @@ msgstr "Levo" msgid "Right" msgstr "Desno" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "Bralec" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "Urednik" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Skrbnik" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "Lastnik" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "Omejeno" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "Preverjeno" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Javno" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "primarni ključ za zapis kot UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "ustvarjen na" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "datum in čas, ko je bil zapis ustvarjen" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "posodobljeno dne" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "datum in čas, ko je bil zapis nazadnje posodobljen" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "Nismo mogli najti uporabnika s tem sub, vendar je e-poštni naslov že povezan z registriranim uporabnikom." -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "Vnesite veljavno sub. Ta vrednost lahko vsebuje samo črke, številke in znake @/./+/-/_/:." -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "Obvezno. 255 znakov ali manj. Samo črke, številke in znaki @/./+/-/_/: ." -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "polno ime" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "kratko ime" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "elektronski naslov identitete" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "elektronski naslov skrbnika" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "jezik" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "Jezik, v katerem uporabnik želi videti vmesnik." -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "Časovni pas, v katerem želi uporabnik videti uro." -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "naprava" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "Ali je uporabnik naprava ali pravi uporabnik." -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "kadrovski status" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "Ali se uporabnik lahko prijavi na to skrbniško mesto." -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "aktivni" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Ali je treba tega uporabnika obravnavati kot aktivnega. Namesto brisanja računov počistite to izbiro." -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "uporabnik" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "uporabniki" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "naslov" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "odlomek" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "Dokument" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "Dokumenti" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "Dokument brez naslova" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} je delil dokument z vami!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} vas je povabil z vlogo \"{role}\" na naslednjem dokumentu:" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} je delil dokument z vami: {title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "Dokument/sled povezave uporabnika" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "Sledi povezav dokumenta/uporabnika" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "Za ta dokument/uporabnika že obstaja sled povezave." -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "Priljubljeni dokument" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "Priljubljeni dokumenti" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "Ta dokument je že ciljno usmerjen s priljubljenim primerkom relacije za istega uporabnika." -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "Odnos dokument/uporabnik" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "Odnosi dokument/uporabnik" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "Ta uporabnik je že v tem dokumentu." -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "Ta ekipa je že v tem dokumentu." -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "Nastaviti je treba bodisi uporabnika ali ekipo, a ne obojega." -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "opis" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "koda" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "javno" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "Ali je ta predloga javna za uporabo." -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "Predloga" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "Predloge" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "Odnos predloga/uporabnik" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "Odnosi med predlogo in uporabnikom" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "Ta uporabnik je že v tej predlogi." -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "Ta ekipa je že v tej predlogi." -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "elektronski naslov" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Vabilo na dokument" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Vabila na dokument" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Ta e-poštni naslov je že povezan z registriranim uporabnikom." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "E-pošta z logotipom" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Odpri" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr " Dokumenti, vaše novo bistveno orodje za organiziranje, skupno rabo in skupinsko sodelovanje pri dokumentih. " -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " Pod okriljem %(brandname)s " diff --git a/src/backend/locale/sv_SE/LC_MESSAGES/django.po b/src/backend/locale/sv_SE/LC_MESSAGES/django.po index dd2f89a0fc..eb643b1d2a 100644 --- a/src/backend/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/backend/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -46,31 +46,61 @@ msgstr "Skaparen är jag" msgid "Favorite" msgstr "Favoriter" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "Ett nytt dokument skapades åt dig!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "Du har beviljats äganderätt till ett nytt dokument:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "Format" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "Administratör" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "Publik" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "" @@ -95,295 +125,292 @@ msgstr "" msgid "Right" msgstr "" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "Administratör" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "Publik" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "aktiv" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "e-postadress" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "Bjud in dokument" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "Inbjudningar dokument" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "Denna e-postadress är redan associerad med en registrerad användare." -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "Logotyp e-post" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "Öppna" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/tr_TR/LC_MESSAGES/django.po b/src/backend/locale/tr_TR/LC_MESSAGES/django.po index 80217d7f28..93f0c529f0 100644 --- a/src/backend/locale/tr_TR/LC_MESSAGES/django.po +++ b/src/backend/locale/tr_TR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -46,344 +46,371 @@ msgstr "" msgid "Favorite" msgstr "" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "" -#: build/lib/core/enums.py:36 core/enums.py:36 -msgid "First child" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" msgstr "" -#: build/lib/core/enums.py:37 core/enums.py:37 -msgid "Last child" +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" msgstr "" -#: build/lib/core/enums.py:38 core/enums.py:38 -msgid "First sibling" +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" msgstr "" -#: build/lib/core/enums.py:39 core/enums.py:39 -msgid "Last sibling" +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" msgstr "" -#: build/lib/core/enums.py:40 core/enums.py:40 -msgid "Left" +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" msgstr "" -#: build/lib/core/enums.py:41 core/enums.py:41 -msgid "Right" +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" msgstr "" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" msgstr "" -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" +#: build/lib/core/enums.py:36 core/enums.py:36 +msgid "First child" msgstr "" -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" +#: build/lib/core/enums.py:37 core/enums.py:37 +msgid "Last child" msgstr "" -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" +#: build/lib/core/enums.py:38 core/enums.py:38 +msgid "First sibling" msgstr "" -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" +#: build/lib/core/enums.py:39 core/enums.py:39 +msgid "Last sibling" msgstr "" -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" +#: build/lib/core/enums.py:40 core/enums.py:40 +msgid "Left" msgstr "" -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" +#: build/lib/core/enums.py:41 core/enums.py:41 +msgid "Right" msgstr "" -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "" -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr "" -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr "" diff --git a/src/backend/locale/zh_CN/LC_MESSAGES/django.po b/src/backend/locale/zh_CN/LC_MESSAGES/django.po index bfd8f284bb..e9bd35103f 100644 --- a/src/backend/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/backend/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: lasuite-docs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-22 12:09+0000\n" -"PO-Revision-Date: 2025-05-22 14:16\n" +"POT-Creation-Date: 2025-07-08 15:21+0000\n" +"PO-Revision-Date: 2025-07-09 10:42\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -46,31 +46,61 @@ msgstr "创建者是我" msgid "Favorite" msgstr "收藏" -#: build/lib/core/api/serializers.py:446 core/api/serializers.py:446 +#: build/lib/core/api/serializers.py:467 core/api/serializers.py:467 msgid "A new document was created on your behalf!" msgstr "已为您创建了一份新文档!" -#: build/lib/core/api/serializers.py:450 core/api/serializers.py:450 +#: build/lib/core/api/serializers.py:471 core/api/serializers.py:471 msgid "You have been granted ownership of a new document:" msgstr "您已被授予新文档的所有权:" -#: build/lib/core/api/serializers.py:586 core/api/serializers.py:586 +#: build/lib/core/api/serializers.py:608 core/api/serializers.py:608 msgid "Body" msgstr "正文" -#: build/lib/core/api/serializers.py:589 core/api/serializers.py:589 +#: build/lib/core/api/serializers.py:611 core/api/serializers.py:611 msgid "Body type" msgstr "正文类型" -#: build/lib/core/api/serializers.py:595 core/api/serializers.py:595 +#: build/lib/core/api/serializers.py:617 core/api/serializers.py:617 msgid "Format" msgstr "格式" -#: build/lib/core/api/viewsets.py:967 core/api/viewsets.py:967 +#: build/lib/core/api/viewsets.py:943 core/api/viewsets.py:943 #, python-brace-format msgid "copy of {title}" msgstr "{title} 的副本" +#: build/lib/core/choices.py:35 build/lib/core/choices.py:42 core/choices.py:35 +#: core/choices.py:42 +msgid "Reader" +msgstr "阅读者" + +#: build/lib/core/choices.py:36 build/lib/core/choices.py:43 core/choices.py:36 +#: core/choices.py:43 +msgid "Editor" +msgstr "编辑者" + +#: build/lib/core/choices.py:44 core/choices.py:44 +msgid "Administrator" +msgstr "超级管理员" + +#: build/lib/core/choices.py:45 core/choices.py:45 +msgid "Owner" +msgstr "所有者" + +#: build/lib/core/choices.py:56 core/choices.py:56 +msgid "Restricted" +msgstr "受限的" + +#: build/lib/core/choices.py:60 core/choices.py:60 +msgid "Authenticated" +msgstr "已验证" + +#: build/lib/core/choices.py:62 core/choices.py:62 +msgid "Public" +msgstr "公开" + #: build/lib/core/enums.py:36 core/enums.py:36 msgid "First child" msgstr "第一个子项" @@ -95,295 +125,292 @@ msgstr "左" msgid "Right" msgstr "右" -#: build/lib/core/models.py:56 build/lib/core/models.py:63 core/models.py:56 -#: core/models.py:63 -msgid "Reader" -msgstr "阅读者" - -#: build/lib/core/models.py:57 build/lib/core/models.py:64 core/models.py:57 -#: core/models.py:64 -msgid "Editor" -msgstr "编辑者" - -#: build/lib/core/models.py:65 core/models.py:65 -msgid "Administrator" -msgstr "超级管理员" - -#: build/lib/core/models.py:66 core/models.py:66 -msgid "Owner" -msgstr "所有者" - -#: build/lib/core/models.py:77 core/models.py:77 -msgid "Restricted" -msgstr "受限的" - -#: build/lib/core/models.py:81 core/models.py:81 -msgid "Authenticated" -msgstr "已验证" - -#: build/lib/core/models.py:83 core/models.py:83 -msgid "Public" -msgstr "公开" - -#: build/lib/core/models.py:154 core/models.py:154 +#: build/lib/core/models.py:79 core/models.py:79 msgid "id" msgstr "id" -#: build/lib/core/models.py:155 core/models.py:155 +#: build/lib/core/models.py:80 core/models.py:80 msgid "primary key for the record as UUID" msgstr "记录的主密钥为 UUID" -#: build/lib/core/models.py:161 core/models.py:161 +#: build/lib/core/models.py:86 core/models.py:86 msgid "created on" msgstr "创建时间" -#: build/lib/core/models.py:162 core/models.py:162 +#: build/lib/core/models.py:87 core/models.py:87 msgid "date and time at which a record was created" msgstr "记录的创建日期和时间" -#: build/lib/core/models.py:167 core/models.py:167 +#: build/lib/core/models.py:92 core/models.py:92 msgid "updated on" msgstr "更新时间" -#: build/lib/core/models.py:168 core/models.py:168 +#: build/lib/core/models.py:93 core/models.py:93 msgid "date and time at which a record was last updated" msgstr "记录的最后更新时间" -#: build/lib/core/models.py:204 core/models.py:204 +#: build/lib/core/models.py:129 core/models.py:129 msgid "We couldn't find a user with this sub but the email is already associated with a registered user." msgstr "未找到具有该 sub 的用户,但该邮箱已关联到一个注册用户。" -#: build/lib/core/models.py:217 core/models.py:217 +#: build/lib/core/models.py:142 core/models.py:142 msgid "Enter a valid sub. This value may contain only letters, numbers, and @/./+/-/_/: characters." msgstr "请输入有效的 sub。该值只能包含字母、数字及 @/./+/-/_/: 字符。" -#: build/lib/core/models.py:223 core/models.py:223 +#: build/lib/core/models.py:148 core/models.py:148 msgid "sub" msgstr "sub" -#: build/lib/core/models.py:225 core/models.py:225 +#: build/lib/core/models.py:150 core/models.py:150 msgid "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: characters only." msgstr "必填。最多 255 个字符,仅允许字母、数字及 @/./+/-/_/: 字符。" -#: build/lib/core/models.py:234 core/models.py:234 +#: build/lib/core/models.py:159 core/models.py:159 msgid "full name" msgstr "全名" -#: build/lib/core/models.py:235 core/models.py:235 +#: build/lib/core/models.py:160 core/models.py:160 msgid "short name" msgstr "简称" -#: build/lib/core/models.py:237 core/models.py:237 +#: build/lib/core/models.py:162 core/models.py:162 msgid "identity email address" msgstr "身份电子邮件地址" -#: build/lib/core/models.py:242 core/models.py:242 +#: build/lib/core/models.py:167 core/models.py:167 msgid "admin email address" msgstr "管理员电子邮件地址" -#: build/lib/core/models.py:249 core/models.py:249 +#: build/lib/core/models.py:174 core/models.py:174 msgid "language" msgstr "语言" -#: build/lib/core/models.py:250 core/models.py:250 +#: build/lib/core/models.py:175 core/models.py:175 msgid "The language in which the user wants to see the interface." msgstr "用户希望看到的界面语言。" -#: build/lib/core/models.py:258 core/models.py:258 +#: build/lib/core/models.py:183 core/models.py:183 msgid "The timezone in which the user wants to see times." msgstr "用户查看时间希望的时区。" -#: build/lib/core/models.py:261 core/models.py:261 +#: build/lib/core/models.py:186 core/models.py:186 msgid "device" msgstr "设备" -#: build/lib/core/models.py:263 core/models.py:263 +#: build/lib/core/models.py:188 core/models.py:188 msgid "Whether the user is a device or a real user." msgstr "用户是设备还是真实用户。" -#: build/lib/core/models.py:266 core/models.py:266 +#: build/lib/core/models.py:191 core/models.py:191 msgid "staff status" msgstr "员工状态" -#: build/lib/core/models.py:268 core/models.py:268 +#: build/lib/core/models.py:193 core/models.py:193 msgid "Whether the user can log into this admin site." msgstr "用户是否可以登录该管理员站点。" -#: build/lib/core/models.py:271 core/models.py:271 +#: build/lib/core/models.py:196 core/models.py:196 msgid "active" msgstr "激活" -#: build/lib/core/models.py:274 core/models.py:274 +#: build/lib/core/models.py:199 core/models.py:199 msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "是否应将此用户视为活跃用户。取消选择此选项而不是删除账户。" -#: build/lib/core/models.py:286 core/models.py:286 +#: build/lib/core/models.py:211 core/models.py:211 msgid "user" msgstr "用户" -#: build/lib/core/models.py:287 core/models.py:287 +#: build/lib/core/models.py:212 core/models.py:212 msgid "users" msgstr "个用户" -#: build/lib/core/models.py:470 build/lib/core/models.py:1155 -#: core/models.py:470 core/models.py:1155 +#: build/lib/core/models.py:368 build/lib/core/models.py:1281 +#: core/models.py:368 core/models.py:1281 msgid "title" msgstr "标题" -#: build/lib/core/models.py:471 core/models.py:471 +#: build/lib/core/models.py:369 core/models.py:369 msgid "excerpt" msgstr "摘要" -#: build/lib/core/models.py:519 core/models.py:519 +#: build/lib/core/models.py:418 core/models.py:418 msgid "Document" msgstr "文档" -#: build/lib/core/models.py:520 core/models.py:520 +#: build/lib/core/models.py:419 core/models.py:419 msgid "Documents" msgstr "个文档" -#: build/lib/core/models.py:532 build/lib/core/models.py:873 core/models.py:532 -#: core/models.py:873 +#: build/lib/core/models.py:431 build/lib/core/models.py:820 core/models.py:431 +#: core/models.py:820 msgid "Untitled Document" msgstr "未命名文档" -#: build/lib/core/models.py:908 core/models.py:908 +#: build/lib/core/models.py:855 core/models.py:855 #, python-brace-format msgid "{name} shared a document with you!" msgstr "{name} 与您共享了一个文档!" -#: build/lib/core/models.py:912 core/models.py:912 +#: build/lib/core/models.py:859 core/models.py:859 #, python-brace-format msgid "{name} invited you with the role \"{role}\" on the following document:" msgstr "{name} 邀请您以“{role}”角色访问以下文档:" -#: build/lib/core/models.py:918 core/models.py:918 +#: build/lib/core/models.py:865 core/models.py:865 #, python-brace-format msgid "{name} shared a document with you: {title}" msgstr "{name} 与您共享了一个文档:{title}" -#: build/lib/core/models.py:1016 core/models.py:1016 +#: build/lib/core/models.py:964 core/models.py:964 msgid "Document/user link trace" msgstr "文档/用户链接跟踪" -#: build/lib/core/models.py:1017 core/models.py:1017 +#: build/lib/core/models.py:965 core/models.py:965 msgid "Document/user link traces" msgstr "个文档/用户链接跟踪" -#: build/lib/core/models.py:1023 core/models.py:1023 +#: build/lib/core/models.py:971 core/models.py:971 msgid "A link trace already exists for this document/user." msgstr "此文档/用户的链接跟踪已存在。" -#: build/lib/core/models.py:1046 core/models.py:1046 +#: build/lib/core/models.py:994 core/models.py:994 msgid "Document favorite" msgstr "文档收藏" -#: build/lib/core/models.py:1047 core/models.py:1047 +#: build/lib/core/models.py:995 core/models.py:995 msgid "Document favorites" msgstr "文档收藏夹" -#: build/lib/core/models.py:1053 core/models.py:1053 +#: build/lib/core/models.py:1001 core/models.py:1001 msgid "This document is already targeted by a favorite relation instance for the same user." msgstr "该文档已被同一用户的收藏关系实例关联。" -#: build/lib/core/models.py:1075 core/models.py:1075 +#: build/lib/core/models.py:1023 core/models.py:1023 msgid "Document/user relation" msgstr "文档/用户关系" -#: build/lib/core/models.py:1076 core/models.py:1076 +#: build/lib/core/models.py:1024 core/models.py:1024 msgid "Document/user relations" msgstr "文档/用户关系集" -#: build/lib/core/models.py:1082 core/models.py:1082 +#: build/lib/core/models.py:1030 core/models.py:1030 msgid "This user is already in this document." msgstr "该用户已在此文档中。" -#: build/lib/core/models.py:1088 core/models.py:1088 +#: build/lib/core/models.py:1036 core/models.py:1036 msgid "This team is already in this document." msgstr "该团队已在此文档中。" -#: build/lib/core/models.py:1094 build/lib/core/models.py:1242 -#: core/models.py:1094 core/models.py:1242 +#: build/lib/core/models.py:1042 build/lib/core/models.py:1367 +#: core/models.py:1042 core/models.py:1367 msgid "Either user or team must be set, not both." msgstr "必须设置用户或团队之一,不能同时设置两者。" -#: build/lib/core/models.py:1156 core/models.py:1156 +#: build/lib/core/models.py:1188 core/models.py:1188 +msgid "Document ask for access" +msgstr "" + +#: build/lib/core/models.py:1189 core/models.py:1189 +msgid "Document ask for accesses" +msgstr "" + +#: build/lib/core/models.py:1195 core/models.py:1195 +msgid "This user has already asked for access to this document." +msgstr "" + +#: build/lib/core/models.py:1260 core/models.py:1260 +#, python-brace-format +msgid "{name} would like access to a document!" +msgstr "" + +#: build/lib/core/models.py:1264 core/models.py:1264 +#, python-brace-format +msgid "{name} would like access to the following document:" +msgstr "" + +#: build/lib/core/models.py:1270 core/models.py:1270 +#, python-brace-format +msgid "{name} is asking for access to the document: {title}" +msgstr "" + +#: build/lib/core/models.py:1282 core/models.py:1282 msgid "description" msgstr "说明" -#: build/lib/core/models.py:1157 core/models.py:1157 +#: build/lib/core/models.py:1283 core/models.py:1283 msgid "code" msgstr "代码" -#: build/lib/core/models.py:1158 core/models.py:1158 +#: build/lib/core/models.py:1284 core/models.py:1284 msgid "css" msgstr "css" -#: build/lib/core/models.py:1160 core/models.py:1160 +#: build/lib/core/models.py:1286 core/models.py:1286 msgid "public" msgstr "公开" -#: build/lib/core/models.py:1162 core/models.py:1162 +#: build/lib/core/models.py:1288 core/models.py:1288 msgid "Whether this template is public for anyone to use." msgstr "该模板是否公开供任何人使用。" -#: build/lib/core/models.py:1168 core/models.py:1168 +#: build/lib/core/models.py:1294 core/models.py:1294 msgid "Template" msgstr "模板" -#: build/lib/core/models.py:1169 core/models.py:1169 +#: build/lib/core/models.py:1295 core/models.py:1295 msgid "Templates" msgstr "模板" -#: build/lib/core/models.py:1223 core/models.py:1223 +#: build/lib/core/models.py:1348 core/models.py:1348 msgid "Template/user relation" msgstr "模板/用户关系" -#: build/lib/core/models.py:1224 core/models.py:1224 +#: build/lib/core/models.py:1349 core/models.py:1349 msgid "Template/user relations" msgstr "模板/用户关系集" -#: build/lib/core/models.py:1230 core/models.py:1230 +#: build/lib/core/models.py:1355 core/models.py:1355 msgid "This user is already in this template." msgstr "该用户已在此模板中。" -#: build/lib/core/models.py:1236 core/models.py:1236 +#: build/lib/core/models.py:1361 core/models.py:1361 msgid "This team is already in this template." msgstr "该团队已在此模板中。" -#: build/lib/core/models.py:1259 core/models.py:1259 +#: build/lib/core/models.py:1438 core/models.py:1438 msgid "email address" msgstr "电子邮件地址" -#: build/lib/core/models.py:1278 core/models.py:1278 +#: build/lib/core/models.py:1457 core/models.py:1457 msgid "Document invitation" msgstr "文档邀请" -#: build/lib/core/models.py:1279 core/models.py:1279 +#: build/lib/core/models.py:1458 core/models.py:1458 msgid "Document invitations" msgstr "文档邀请" -#: build/lib/core/models.py:1299 core/models.py:1299 +#: build/lib/core/models.py:1478 core/models.py:1478 msgid "This email is already associated to a registered user." msgstr "此电子邮件已经与现有注册用户关联。" -#: core/templates/mail/html/invitation.html:162 -#: core/templates/mail/text/invitation.txt:3 +#: core/templates/mail/html/template.html:162 +#: core/templates/mail/text/template.txt:3 msgid "Logo email" msgstr "徽标邮件" -#: core/templates/mail/html/invitation.html:209 -#: core/templates/mail/text/invitation.txt:10 +#: core/templates/mail/html/template.html:209 +#: core/templates/mail/text/template.txt:10 msgid "Open" msgstr "打开" -#: core/templates/mail/html/invitation.html:226 -#: core/templates/mail/text/invitation.txt:14 +#: core/templates/mail/html/template.html:226 +#: core/templates/mail/text/template.txt:14 msgid " Docs, your new essential tool for organizing, sharing and collaborating on your documents as a team. " msgstr " Docs——您的全新必备工具,帮助团队组织、共享和协作处理文档。 " -#: core/templates/mail/html/invitation.html:233 -#: core/templates/mail/text/invitation.txt:16 +#: core/templates/mail/html/template.html:233 +#: core/templates/mail/text/template.txt:16 #, python-format msgid " Brought to you by %(brandname)s " msgstr " 由 %(brandname)s 倾力打造。 " diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 46867bee4e..b2ff3590e2 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "impress" -version = "3.3.0" +version = "3.4.0" authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }] classifiers = [ "Development Status :: 5 - Production/Stable", diff --git a/src/frontend/apps/e2e/__tests__/app-impress/common.ts b/src/frontend/apps/e2e/__tests__/app-impress/common.ts index 09928f1d8a..703aae233c 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/common.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/common.ts @@ -276,7 +276,6 @@ export const mockedDocument = async (page: Page, data: object) => { ancestors_link_role: null, created_at: '2021-09-01T09:00:00Z', user_role: 'owner', - user_roles: ['owner'], ...doc, }, }); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts index 9a187abb0b..dd47f2d0a4 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-editor.spec.ts @@ -10,6 +10,7 @@ import { overrideConfig, verifyDocName, } from './common'; +import { createRootSubPage } from './sub-pages-utils'; test.beforeEach(async ({ page }) => { await page.goto('/'); @@ -524,6 +525,8 @@ test.describe('Doc Editor', () => { page, browserName, }) => { + test.slow(); + /** * The good port is 4444, but we want to simulate a not connected * collaborative server. @@ -536,7 +539,12 @@ test.describe('Doc Editor', () => { await page.goto('/'); - const [title] = await createDoc(page, 'editing-blocking', browserName, 1); + const [parentTitle] = await createDoc( + page, + 'editing-blocking', + browserName, + 1, + ); const card = page.getByLabel('It is the card information'); await expect( @@ -571,12 +579,20 @@ test.describe('Doc Editor', () => { // Close the modal await page.getByRole('button', { name: 'close' }).first().click(); + const urlParentDoc = page.url(); + + const { name: childTitle } = await createRootSubPage( + page, + browserName, + 'editing-blocking - child', + ); + let responseCanEdit = await responseCanEditPromise; expect(responseCanEdit.ok()).toBeTruthy(); let jsonCanEdit = (await responseCanEdit.json()) as { can_edit: boolean }; expect(jsonCanEdit.can_edit).toBeTruthy(); - const urlDoc = page.url(); + const urlChildDoc = page.url(); /** * We open another browser that will connect to the collaborative server @@ -603,14 +619,14 @@ test.describe('Doc Editor', () => { }, ); - await otherPage.goto(urlDoc); + await otherPage.goto(urlChildDoc); const webSocket = await webSocketPromise; expect(webSocket.url()).toContain( 'ws://localhost:4444/collaboration/ws/?room=', ); - await verifyDocName(otherPage, title); + await verifyDocName(otherPage, childTitle); await page.reload(); @@ -633,6 +649,10 @@ test.describe('Doc Editor', () => { await expect(editor).toHaveAttribute('contenteditable', 'false'); + await page.goto(urlParentDoc); + + await verifyDocName(page, parentTitle); + await page.getByRole('button', { name: 'Share' }).click(); await page.getByLabel('Visibility mode').click(); @@ -641,18 +661,9 @@ test.describe('Doc Editor', () => { // Close the modal await page.getByRole('button', { name: 'close' }).first().click(); - await page.reload(); - - responseCanEditPromise = page.waitForResponse( - (response) => - response.url().includes(`/can-edit/`) && response.status() === 200, - ); + await page.goto(urlChildDoc); - responseCanEdit = await responseCanEditPromise; - expect(responseCanEdit.ok()).toBeTruthy(); - - jsonCanEdit = (await responseCanEdit.json()) as { can_edit: boolean }; - expect(jsonCanEdit.can_edit).toBeTruthy(); + await expect(editor).toHaveAttribute('contenteditable', 'true'); await expect( card.getByText('Others are editing. Your network prevent changes.'), diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid-dnd.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid-dnd.spec.ts index 69f97d68be..32c43c2fee 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid-dnd.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid-dnd.spec.ts @@ -158,7 +158,7 @@ test.describe('Doc grid dnd', () => { await expect(dragOverlay).toBeVisible(); await expect(dragOverlay).toHaveText( - 'You must have admin rights to move the document', + 'You must be the owner to move the document', ); await page.mouse.up(); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts index 52f7e88cfb..e1869c3fa0 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts @@ -9,6 +9,7 @@ import { mockedInvitations, verifyDocName, } from './common'; +import { createRootSubPage } from './sub-pages-utils'; test.beforeEach(async ({ page }) => { await page.goto('/'); @@ -456,6 +457,32 @@ test.describe('Doc Header', () => { await page.getByText(duplicateDuplicateTitle).click(); await expect(page.getByText('Hello Duplicated World')).toBeVisible(); }); + + test('it duplicates a child document', async ({ page, browserName }) => { + await createDoc(page, `Duplicate doc`, browserName); + + const { name: childTitle } = await createRootSubPage( + page, + browserName, + 'Duplicate doc - child', + ); + + const editor = page.locator('.ProseMirror'); + await editor.click(); + await editor.fill('Hello Duplicated World'); + + await page.getByLabel('Open the document options').click(); + + await page.getByRole('menuitem', { name: 'Duplicate' }).click(); + await expect( + page.getByText('Document duplicated successfully!'), + ).toBeVisible(); + + const duplicateDuplicateTitle = 'Copy of ' + childTitle; + await expect( + page.getByTestId('doc-tree').getByText(duplicateDuplicateTitle), + ).toBeVisible(); + }); }); test.describe('Documents Header mobile', () => { diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts index 7e29ce610c..31e4161b76 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-tree.spec.ts @@ -2,6 +2,7 @@ import { expect, test } from '@playwright/test'; import { + addNewMember, createDoc, expectLoginPage, keyCloakSignIn, @@ -12,8 +13,11 @@ import { import { clickOnAddRootSubPage, createRootSubPage } from './sub-pages-utils'; test.describe('Doc Tree', () => { - test('create new sub pages', async ({ page, browserName }) => { + test.beforeEach(async ({ page }) => { await page.goto('/'); + }); + + test('create new sub pages', async ({ page, browserName }) => { const [titleParent] = await createDoc( page, 'doc-tree-content', @@ -58,7 +62,6 @@ test.describe('Doc Tree', () => { }); test('check the reorder of sub pages', async ({ page, browserName }) => { - await page.goto('/'); await createDoc(page, 'doc-tree-content', browserName, 1); const addButton = page.getByRole('button', { name: 'New doc' }); await expect(addButton).toBeVisible(); @@ -165,7 +168,6 @@ test.describe('Doc Tree', () => { }); test('it detaches a document', async ({ page, browserName }) => { - await page.goto('/'); const [docParent] = await createDoc( page, 'doc-tree-detach', @@ -202,6 +204,55 @@ test.describe('Doc Tree', () => { await header.locator('h2').getByText('Docs').click(); await expect(page.getByText(docChild)).toBeVisible(); }); + + test('Only owner can detaches a document', async ({ page, browserName }) => { + const [docParent] = await createDoc( + page, + 'doc-tree-detach', + browserName, + 1, + ); + + await verifyDocName(page, docParent); + + await page.getByRole('button', { name: 'Share' }).click(); + + await addNewMember(page, 0, 'Owner', 'impress'); + + const list = page.getByTestId('doc-share-quick-search'); + const currentUser = list.getByTestId( + `doc-share-member-row-user@${browserName}.test`, + ); + const currentUserRole = currentUser.getByLabel('doc-role-dropdown'); + await currentUserRole.click(); + await page.getByLabel('Administrator').click(); + await list.click(); + + await page.getByRole('button', { name: 'Ok' }).click(); + + const { name: docChild } = await createRootSubPage( + page, + browserName, + 'doc-tree-detach-child', + ); + + const docTree = page.getByTestId('doc-tree'); + await expect(docTree.getByText(docChild)).toBeVisible(); + await docTree.click(); + const child = docTree + .getByRole('treeitem') + .locator('.--docs-sub-page-item') + .filter({ + hasText: docChild, + }); + await child.hover(); + const menu = child.getByText(`more_horiz`); + await menu.click(); + + await expect( + page.getByRole('menuitem', { name: 'Move to my docs' }), + ).toHaveAttribute('aria-disabled', 'true'); + }); }); test.describe('Doc Tree: Inheritance', () => { diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts index a0833d437d..89721ab9a7 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts @@ -441,7 +441,7 @@ test.describe('Doc Visibility: Authenticated', () => { const { name: childTitle } = await createRootSubPage( page, browserName, - 'Authenticated read onlyc - child', + 'Authenticated read only - child', ); const urlChildDoc = page.url(); diff --git a/src/frontend/apps/e2e/package.json b/src/frontend/apps/e2e/package.json index e4e4aeafbf..71abc88582 100644 --- a/src/frontend/apps/e2e/package.json +++ b/src/frontend/apps/e2e/package.json @@ -1,6 +1,6 @@ { "name": "app-e2e", - "version": "3.3.0", + "version": "3.4.0", "private": true, "scripts": { "lint": "eslint . --ext .ts", diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index a776035e27..9eaca4d8db 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -1,6 +1,6 @@ { "name": "app-impress", - "version": "3.3.0", + "version": "3.4.0", "private": true, "scripts": { "dev": "next dev", diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/api/useDuplicateDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/api/useDuplicateDoc.tsx index 3e04c229f7..0c6c9193b1 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/api/useDuplicateDoc.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/api/useDuplicateDoc.tsx @@ -7,6 +7,7 @@ import * as Y from 'yjs'; import { APIError, errorCauses, fetchAPI } from '@/api'; import { toBase64 } from '@/docs/doc-editor'; +import { KEY_DOC_TREE } from '@/docs/doc-tree'; import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning'; import { useProviderStore } from '../stores'; @@ -85,6 +86,9 @@ export function useDuplicateDoc(options: DuplicateDocOptions) { void queryClient.resetQueries({ queryKey: [KEY_LIST_DOC], }); + void queryClient.resetQueries({ + queryKey: [KEY_DOC_TREE], + }); void options.onSuccess?.(data, variables, context); }, }); diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx index fd7b038ac4..a85b5f676e 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx @@ -98,14 +98,12 @@ export const ModalRemoveDoc = ({ className="--docs--modal-remove-doc" > {!isError && ( - <> - - - This document and any sub-documents will be - permanently deleted. This action is irreversible. - - - + + + This document and any sub-documents will be + permanently deleted. This action is irreversible. + + )} {isError && } diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/hooks/useIsCollaborativeEditable.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/hooks/useIsCollaborativeEditable.tsx index 1ad4ebd48d..968ee5dec6 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/hooks/useIsCollaborativeEditable.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/hooks/useIsCollaborativeEditable.tsx @@ -5,15 +5,20 @@ import { useIsOffline } from '@/features/service-worker'; import { KEY_CAN_EDIT, useDocCanEdit } from '../api/useDocCanEdit'; import { useProviderStore } from '../stores'; -import { Doc, LinkReach } from '../types'; +import { Doc, LinkReach, LinkRole } from '../types'; export const useIsCollaborativeEditable = (doc: Doc) => { const { isConnected } = useProviderStore(); const { data: conf } = useConfig(); - const docIsPublic = doc.link_reach === LinkReach.PUBLIC; - const docIsAuth = doc.link_reach === LinkReach.AUTHENTICATED; - const docHasMember = doc.nb_accesses_direct > 1; + const docIsPublic = + doc.computed_link_reach === LinkReach.PUBLIC && + doc.computed_link_role === LinkRole.EDITOR; + const docIsAuth = + doc.computed_link_reach === LinkReach.AUTHENTICATED && + doc.computed_link_role === LinkRole.EDITOR; + const docHasMember = + doc.nb_accesses_direct > 1 || doc.nb_accesses_ancestors > 1; const isUserReader = !doc.abilities.partial_update; const isShared = docIsPublic || docIsAuth || docHasMember; const { isOffline } = useIsOffline(); @@ -21,23 +26,23 @@ export const useIsCollaborativeEditable = (doc: Doc) => { const [isEditable, setIsEditable] = useState(true); const [isLoading, setIsLoading] = useState(!_isEditable); const timeout = useRef(null); - const { - data: { can_edit } = { can_edit: _isEditable }, - isLoading: isLoadingCanEdit, - } = useDocCanEdit(doc.id, { - enabled: !_isEditable, - queryKey: [KEY_CAN_EDIT, doc.id], - staleTime: 0, - }); + const { data: editingRight, isLoading: isLoadingCanEdit } = useDocCanEdit( + doc.id, + { + enabled: !_isEditable, + queryKey: [KEY_CAN_EDIT, doc.id], + staleTime: 0, + }, + ); useEffect(() => { - if (isLoadingCanEdit) { + if (isLoadingCanEdit || _isEditable || !editingRight) { return; } // Connection to the WebSocket can take some time, so we set a timeout to ensure the loading state is cleared after a reasonable time. timeout.current = setTimeout(() => { - setIsEditable(can_edit); + setIsEditable(editingRight.can_edit); setIsLoading(false); }, 1500); @@ -46,7 +51,7 @@ export const useIsCollaborativeEditable = (doc: Doc) => { clearTimeout(timeout.current); } }; - }, [can_edit, isLoadingCanEdit]); + }, [editingRight, isLoadingCanEdit, _isEditable]); useEffect(() => { if (!_isEditable) { @@ -59,7 +64,7 @@ export const useIsCollaborativeEditable = (doc: Doc) => { setIsEditable(true); setIsLoading(false); - }, [_isEditable, isLoading]); + }, [_isEditable]); if (!conf?.COLLABORATION_WS_NOT_CONNECTED_READY_ONLY) { return { diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/types.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/types.tsx index a1db947abe..7c8c2ea8e9 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/types.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/types.tsx @@ -70,7 +70,6 @@ export interface Doc { numchild: number; updated_at: string; user_role: Role; - user_roles: Role[]; abilities: { accesses_manage: boolean; accesses_view: boolean; diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts b/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts index 6cdf42901a..584ed8989e 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/api/index.ts @@ -1,3 +1,4 @@ export * from './useCreateChildren'; export * from './useDocChildren'; +export * from './useDocTree'; export * from './useMove'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/api/useDocTree.tsx b/src/frontend/apps/impress/src/features/docs/doc-tree/api/useDocTree.tsx index bebb1d8282..c5501cf528 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/api/useDocTree.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/api/useDocTree.tsx @@ -25,7 +25,7 @@ export const getDocTree = async ({ docId }: DocsTreeParams): Promise => { return response.json() as Promise; }; -export const KEY_LIST_DOC_CHILDREN = 'doc-tree'; +export const KEY_DOC_TREE = 'doc-tree'; export function useDocTree( params: DocsTreeParams, @@ -35,7 +35,7 @@ export function useDocTree( >, ) { return useQuery({ - queryKey: [KEY_LIST_DOC_CHILDREN, params], + queryKey: [KEY_DOC_TREE, params], queryFn: () => getDocTree(params), staleTime: 0, refetchOnWindowFocus: false, diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx index add3753c8a..37fe819942 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeItemActions.tsx @@ -11,7 +11,12 @@ import { css } from 'styled-components'; import { Box, BoxButton, Icon } from '@/components'; -import { Doc, ModalRemoveDoc, useCopyDocLink } from '../../doc-management'; +import { + Doc, + ModalRemoveDoc, + Role, + useCopyDocLink, +} from '../../doc-management'; import { useCreateChildrenDoc } from '../api/useCreateChildren'; import { useDetachDoc } from '../api/useDetach'; import MoveDocIcon from '../assets/doc-extract-bold.svg'; @@ -70,7 +75,7 @@ export const DocTreeItemActions = ({ ? [ { label: t('Move to my docs'), - isDisabled: !doc.abilities.move, + isDisabled: doc.user_role !== Role.OWNER, icon: ( { const overlayText = useMemo(() => { if (!canDrag) { - return t('You must have admin rights to move the document'); + return t('You must be the owner to move the document'); } if (!canDrop) { return t('You must be at least the editor of the target document'); diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/hooks/useDragAndDrop.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/hooks/useDragAndDrop.tsx index 68b844250c..81410c0f62 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/hooks/useDragAndDrop.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/hooks/useDragAndDrop.tsx @@ -9,7 +9,7 @@ import { } from '@dnd-kit/core'; import { useState } from 'react'; -import { Doc } from '@/docs/doc-management'; +import { Doc, Role } from '@/docs/doc-management'; export type DocDragEndData = { sourceDocumentId: string; @@ -26,7 +26,7 @@ export function useDragAndDrop(onDrag: (data: DocDragEndData) => void) { const [selectedDoc, setSelectedDoc] = useState(); const [canDrop, setCanDrop] = useState(); - const canDrag = !!selectedDoc?.abilities.move; + const canDrag = selectedDoc?.user_role === Role.OWNER; const mouseSensor = useSensor(MouseSensor, { activationConstraint }); const touchSensor = useSensor(TouchSensor, { activationConstraint }); diff --git a/src/frontend/apps/impress/src/features/service-worker/plugins/ApiPlugin.ts b/src/frontend/apps/impress/src/features/service-worker/plugins/ApiPlugin.ts index dfd5bd0029..f050e98ee1 100644 --- a/src/frontend/apps/impress/src/features/service-worker/plugins/ApiPlugin.ts +++ b/src/frontend/apps/impress/src/features/service-worker/plugins/ApiPlugin.ts @@ -209,7 +209,6 @@ export class ApiPlugin implements WorkboxPlugin { }, link_reach: LinkReach.RESTRICTED, link_role: LinkRole.READER, - user_roles: [Role.OWNER], user_role: Role.OWNER, path: '', computed_link_reach: LinkReach.RESTRICTED, diff --git a/src/frontend/apps/impress/src/i18n/translations.json b/src/frontend/apps/impress/src/i18n/translations.json index 24985d1b25..33896e3db1 100644 --- a/src/frontend/apps/impress/src/i18n/translations.json +++ b/src/frontend/apps/impress/src/i18n/translations.json @@ -56,7 +56,6 @@ "Anyone with the link can edit the document if they are logged in": "Jeder mit dem Link kann das Dokument bearbeiten, wenn er angemeldet ist", "Anyone with the link can see the document": "Jeder mit dem Link kann das Dokument ansehen", "Anyone with the link can view the document if they are logged in": "Jeder mit dem Link kann das Dokument ansehen, wenn er angemeldet ist", - "Are you sure you want to delete this document ?": "Soll dieses Dokument wirklich gelöscht werden?", "Available soon": "Bald verfügbar", "Banner image": "Bannerbild", "Beautify": "Verschönern", @@ -89,20 +88,16 @@ "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Pages: Ihr neuer Begleiter für eine effiziente, intuitive und sichere Zusammenarbeit bei Dokumenten.", "Document accessible to any connected person": "Dokument für jeden verbundenen Benutzer zugänglich", "Document owner": "Besitzer des Dokuments", - "Document title updated successfully": "Titel des Dokuments erfolgreich aktualisiert", "Docx": "Docx", "Download": "Herunterladen", "Download anyway": "Trotzdem herunterladen", "Download your document in a .docx or .pdf format.": "Ihr Dokument als .docx- oder .pdf-Datei herunterladen.", - "Edition": "Bearbeiten", "Editor": "Editor", "Editor unavailable": "Editor nicht verfügbar", "Emojify": "Emojifizieren", "Empty template": "Leere Vorlage", "Error during delete invitation": "Fehler beim Löschen der Einladung", - "Error during invitation update": "Fehler beim Aktualisieren der Einladung", "Error during update invitation": "Fehler beim Aktualisieren der Einladung", - "Error while deleting invitation": "Fehler beim Löschen der Einladung", "Export": "Exportieren", "Failed to add the member in the document.": "Fehler beim Hinzufügen des Mitglieds zum Dokument.", "Failed to copy link": "Link konnte nicht kopiert werden", @@ -209,8 +204,6 @@ "Warning": "Warnung", "Write": "Schreiben", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "Sie sind der einzige Besitzer dieser Gruppe. Machen Sie ein anderes Mitglied zum Gruppenbesitzer, bevor Sie Ihre eigene Rolle ändern oder aus Ihrem Dokument entfernen können.", - "You do not have permission to view this document.": "Ihnen fehlt die Berechtigung, dieses Dokument einzusehen.", - "You do not have permission to view users sharing this document or modify link settings.": "Ihnen fehlt die Berechtigung, die das Dokument teilenden Benutzer einzusehen oder die Linkeinstellungen zu ändern.", "Your current document will revert to this version.": "Ihr aktuelles Dokument wird auf diese Version zurückgesetzt.", "Your {{format}} was downloaded succesfully": "Ihr {{format}} wurde erfolgreich heruntergeladen", "home-content-open-source-part1": "Doms ist auf <2>Django Rest Framework und <6>Next.js aufgebaut. Wir verwenden auch <9>Yjs und <13>BlockNote.js, zwei Projekte, die wir mit Stolz sponsern.", @@ -233,6 +226,8 @@ "A new way to organize knowledge.": "Una nueva manera de organizar conocimiento.", "AI Actions": "Acciones de IA", "AI seems busy! Please try again.": "¡La IA parece ocupada! Por favor, inténtelo de nuevo.", + "Access Denied - Error 403": "Acceso denegado - Error 403", + "Access request sent successfully.": "Solicitud de acceso enviada con éxito.", "Accessible to anyone": "Accesible para todos", "Accessible to authenticated users": "Accesible a usuarios autenticados", "Add": "Añadir", @@ -246,7 +241,6 @@ "Anyone with the link can edit the document if they are logged in": "Cualquiera con el enlace puede editar el documento si ha iniciado sesión", "Anyone with the link can see the document": "Cualquiera con el enlace puede ver el documento", "Anyone with the link can view the document if they are logged in": "Cualquiera con el enlace puede ver el documento si ha iniciado sesión", - "Are you sure you want to delete this document ?": "¿Estás seguro de que deseas eliminar este documento?", "Available soon": "Próximamente disponible", "Banner image": "Imagen de portada", "Beautify": "Embellecer", @@ -280,20 +274,16 @@ "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Docs: su nuevo compañero para colaborar en documentos de forma eficiente, intuitiva y segura.", "Document accessible to any connected person": "Documento accesible a cualquier persona conectada", "Document owner": "Propietario del documento", - "Document title updated successfully": "El título del documento se ha actualizado correctamente", "Docx": "Docx", "Download": "Descargar", "Download anyway": "Descargar de todos modos", "Download your document in a .docx or .pdf format.": "Descargue su documento en formato .docx o .pdf.", - "Edition": "Edición", "Editor": "Editor", "Editor unavailable": "Editor no disponible", "Emojify": "Emojizar", "Empty template": "Plantilla vacía", "Error during delete invitation": "Error al eliminar la invitación", - "Error during invitation update": "Error al actualizar la invitación", "Error during update invitation": "Error al actualizar la invitación", - "Error while deleting invitation": "Error al eliminar la invitación", "Export": "Exportar", "Failed to add the member in the document.": "Error al añadir un miembro al documento.", "Failed to copy link": "Error al copiar el enlace", @@ -308,6 +298,7 @@ "Illustration": "Ilustración", "Image 401": "Imagen 401", "Image 403": "Imagen 403", + "Insufficient access rights to view the document.": "Derechos de acceso insuficientes para visualizar el documento.", "Invite": "Invitar", "It is the card information about the document.": "Es la información del documento.", "It is the document title": "Es el título del documento", @@ -342,6 +333,7 @@ "Organize": "Organiza", "Owner": "Propietario", "PDF": "PDF", + "Page Not Found - Error 404": "Página no encontrada - Error 404", "Pending invitations": "Invitaciones pendientes", "Pin": "Anclar", "Pin document icon": "Icono para marcar el documento como favorito", @@ -357,6 +349,7 @@ "Remove": "Eliminar", "Rename": "Cambiar el nombre", "Rephrase": "Reformular", + "Request access": "Solicitar acceso", "Restore": "Recuperar", "Search": "Buscar", "Search modal": "Modal de búsqueda", @@ -400,8 +393,6 @@ "Warning": "Aviso", "Write": "Escribe", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "Eres el único propietario de este grupo, haz que otro miembro sea el propietario del grupo para poder cambiar tu propio rol o ser eliminado del documento.", - "You do not have permission to view this document.": "No tienes permisos para ver este documento.", - "You do not have permission to view users sharing this document or modify link settings.": "No tiene permiso para ver los usuarios que comparten este documento o modificar la configuración del enlace.", "Your current document will revert to this version.": "Tu documento actual se revertirá a esta versión.", "Your {{format}} was downloaded succesfully": "Su {{format}} se ha descargado correctamente", "home-content-open-source-part1": "Docs está construido sobre <2>Django Rest Framework y <6>Next.js. También utilizamos <9>Yjs y <13>BlockNote.js, dos proyectos que estamos orgullosos de patrocinar.", @@ -416,6 +407,9 @@ "A new way to organize knowledge.": "Une nouvelle façon d’organiser les connaissances.", "AI Actions": "Actions IA", "AI seems busy! Please try again.": "L'IA semble occupée ! Veuillez réessayer.", + "Access Denied - Error 403": "Accès refusé - Erreur 403", + "Access Requests": "Demandes d'accès", + "Access request sent successfully.": "Demande d'accès envoyée avec succès.", "Accessible to anyone": "Accessible à tout le monde", "Accessible to authenticated users": "Accessible aux utilisateurs authentifiés", "Add": "Ajouter", @@ -430,10 +424,12 @@ "Anyone with the link can edit the document if they are logged in": "N'importe qui avec le lien peut éditer le document à condition qu'il soit connecté", "Anyone with the link can see the document": "N'importe qui avec le lien peut voir le document", "Anyone with the link can view the document if they are logged in": "N'importe qui avec le lien peut voir le document à condition qu'il soit connecté", - "Are you sure you want to delete this document ?": "Êtes-vous sûr(e) de vouloir supprimer ce document ?", + "Approve": "Approuver", + "As this is a sub-document, please request access to the parent document to enable these features.": "Comme il s'agit d'un sous-document, veuillez demander l'accès au document parent pour activer ces fonctionnalités.", "Available soon": "Disponible prochainement", "Banner image": "Image de la bannière", "Beautify": "Embellir", + "By moving this document to {{targetDocumentTitle}}, it will lose its current access rights and inherit the permissions of that document. This access change cannot be undone.": "En déplaçant ce document vers {{targetDocumentTitle}}, il perdra ses droits d'accès actuels et héritera les permissions de ce document. Ce changement d'accès ne peut pas être annulé.", "Callout": "Alerte", "Can't load this page, please check your internet connection.": "Impossible de charger cette page, veuillez vérifier votre connexion Internet.", "Cancel": "Annuler", @@ -441,7 +437,9 @@ "Collaborate": "Collaborer", "Collaborate and write in real time, without layout constraints.": "Collaborez et rédigez en temps réel, sans contrainte de mise en page.", "Collaborative writing, Simplified.": "L'écriture collaborative simplifiée.", + "Confirm": "Confirmez", "Confirm deletion": "Confirmer la suppression", + "Confirmation button": "Bouton de confirmation", "Connected": "Connecté", "Content modal to delete document": "Contenu modal pour supprimer le document", "Content modal to explain why the user cannot edit": "Contenu modal pour expliquer pourquoi l'utilisateur ne peut pas modifier", @@ -451,6 +449,7 @@ "Copy as {{format}}": "Copier en {{format}}", "Copy link": "Copier le lien", "Correct": "Corriger", + "Current doc": "Doc actuel", "Delete": "Supprimer", "Delete a doc": "Supprimer un doc", "Delete document": "Supprimer le document", @@ -462,49 +461,56 @@ "Docs makes real-time collaboration simple. Invite collaborators - public officials or external partners - with one click to see their changes live, while maintaining precise access control for data security.": "Docs simplifie la collaboration en temps réel. Invitez des collaborateurs - agents publics ou partenaires externes - d'un clic pour voir leurs modifications en direct, tout en gardant un contrôle précis des accès pour la sécurité des données.", "Docs offers an intuitive writing experience. Its minimalist interface favors content over layout, while offering the essentials: media import, offline mode and keyboard shortcuts for greater efficiency.": "Docs propose une expérience d'écriture intuitive. Son interface minimaliste privilégie le contenu sur la mise en page, tout en offrant l'essentiel : import de médias, mode hors-ligne et raccourcis clavier pour plus d'efficacité.", "Docs transforms your documents into knowledge bases thanks to subpages, powerful search and the ability to pin your important documents.": "Docs transforme vos documents en bases de connaissances grâce aux sous-pages, une recherche performante et la possibilité d'épingler vos documents importants.", - "Docs use WebSockets to enable real-time editing. These communication channels allow instant and bidirectional exchanges between your browser and our servers. To access collaborative editing, please contact your IT department to enable WebSockets.": "Docs utilise les WebSockets pour permettre l'édition en temps réel. Ces canaux de communication permettent des échanges instantanés et bidirectionnels entre votre navigateur et nos serveurs. Pour accéder à l'édition collaborative, veuillez contacter votre service informatique afin d'autoriser les WebSockets.", "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Docs : Votre nouveau compagnon pour collaborer sur des documents efficacement, intuitivement et en toute sécurité.", "Document accessible to any connected person": "Document accessible à toute personne connectée", + "Document duplicated successfully!": "Document dupliqué avec succès !", "Document owner": "Propriétaire du document", - "Document title updated successfully": "Titre du document mis à jour avec succès", "Docx": "Docx", "Download": "Télécharger", "Download anyway": "Télécharger malgré tout", "Download your document in a .docx or .pdf format.": "Téléchargez votre document au format .docx ou .pdf.", - "Edition": "Édition", + "Duplicate": "Dupliquer", + "Editing": "Édition", "Editor": "Éditeur", "Editor unavailable": "Éditeur indisponible", "Emojify": "Emojifié", "Empty template": "Sans modèle", "Error during delete invitation": "Erreur lors de la suppression de l'invitation", - "Error during invitation update": "Erreur lors de la mise à jour de l'invitation", "Error during update invitation": "Erreur lors de la mise à jour de l'invitation", "Error while deleting invitation": "Erreur lors de la suppression de l'invitation", + "Error while removing the request.": "Erreur lors de la suppression de la demande.", + "Error while updating the member role.": "Erreur lors de la mise à jour du rôle du membre.", "Export": "Exporter", "Failed to add the member in the document.": "Impossible d'ajouter le membre dans le document.", "Failed to copy link": "Échec de la copie du lien", "Failed to copy to clipboard": "Échec de la copie dans le presse-papier", "Failed to create the invitation for {{email}}.": "Impossible de créer l'invitation pour {{email}}.", + "Failed to duplicate the document...": "Échec de la duplication du document...", "Flexible export.": "Un export flexible.", "Format": "Format", "Govs ❤️ Open Source.": "Gouvernements ❤️ Open Source.", "History": "Historique", "Home": "Accueil", + "I understand": "J’ai compris", "If a member is editing, his works can be lost.": "Si un membre est en train d'éditer, ses travaux peuvent être perdus.", + "If you wish to be able to co-edit in real-time, contact your Information Systems Security Manager about allowing WebSockets.": "Si vous souhaitez être en mesure de coéditer en temps réel, contactez votre gestionnaire de sécurité des systèmes d'information pour autoriser les web sockets.", "Illustration": "Image", "Image 401": "Image 401", "Image 403": "Image 403", + "Insufficient access rights to view the document.": "Droits d'accès insuffisants pour voir le document.", "Invite": "Inviter", "It is the card information about the document.": "Il s'agit de la carte d'information du document.", "It is the document title": "Il s'agit du titre du document", "It seems that the page you are looking for does not exist or cannot be displayed correctly.": "Il semble que la page que vous cherchez n'existe pas ou ne puisse pas être affichée correctement.", - "Know more": "En savoir plus", "Language": "Langue", "Last update: {{update}}": "Dernière mise à jour : {{update}}", + "Learn more": "En savoir plus", "Link Copied !": "Lien copié !", "Link parameters": "Paramètres du lien", "List invitation card": "Carte de liste d'invitation", "List members card": "Carte liste des membres", + "List request access card": "Carte de liste des demandes d'accès", + "List search user result card": "Liste des résultats de la recherche utilisateur", "Load more": "Afficher plus", "Log in to access the document.": "Connectez-vous pour accéder au document.", "Login": "Connexion", @@ -513,6 +519,9 @@ "Modal confirmation to download the attachment": "Modale de confirmation pour télécharger la pièce jointe", "Modal confirmation to restore the version": "Modale de confirmation pour restaurer la version", "More docs": "Plus de documents", + "Move": "Déplacer", + "Move document": "Déplacer le document", + "Move to my docs": "Déplacer vers mes docs", "My docs": "Mes documents", "Name": "Nom", "New doc": "Nouveau doc", @@ -528,9 +537,13 @@ "Open the document options": "Ouvrir les options du document", "Open the header menu": "Ouvrir le menu d'en-tête", "Organize": "Organiser", + "Others are editing this document. Unfortunately your network blocks WebSockets, the technology enabling real-time co-editing.": "D'autres sont en train de modifier ce document. Malheureusement, votre réseau bloque les web sockets, la technologie permettant la coédition en temps réel.", + "Others are editing. Your network prevent changes.": "D'autres sont en cours d'édition. Votre réseau empêche les changements.", "Owner": "Propriétaire", "PDF": "PDF", + "Page Not Found - Error 404": "Page introuvable - Erreur 404", "Pending invitations": "Invitations en attente", + "People with access via the parent document": "Personnes ayant accès au document parent", "Pin": "Épingler", "Pin document icon": "Icône épingler un document", "Pinned documents": "Documents épinglés", @@ -543,13 +556,17 @@ "Reader": "Lecteur", "Reading": "Lecture seule", "Remove": "Supprimer", + "Remove access": "Supprimer l'accès", "Rename": "Renommer", "Rephrase": "Reformuler", + "Request access": "Demander l'accès", + "Reset": "Réinitialiser", "Restore": "Restaurer", "Search": "Rechercher", "Search modal": "Modale de partage", "Search user result": "Résultat de la recherche utilisateur", "Select a document": "Sélectionnez un document", + "Select a page": "Sélectionner une page", "Select a version on the right to restore": "Sélectionnez une version à droite à restaurer", "Share": "Partager", "Share modal": "Modale de partage", @@ -561,6 +578,7 @@ "Shared with {{count}} users_many": "Partagé entre {{count}} utilisateurs", "Shared with {{count}} users_one": "Partagé avec {{count}} utilisateur", "Shared with {{count}} users_other": "Partagé entre {{count}} utilisateurs", + "Sharing rules differ from the parent page": "Les règles de partage diffèrent de la page parente", "Show more": "Voir plus", "Simple and secure collaboration.": "Une collaboration simple et sécurisée.", "Simple document icon": "Icône simple du document", @@ -573,12 +591,15 @@ "The document has been deleted.": "Le document a bien été supprimé.", "The document visibility has been updated.": "La visibilité du document a été mise à jour.", "The export failed": "L’exportation a échoué", - "The network configuration of your workstation or internet connection does not allow editing shared documents.": "La configuration réseau de votre poste de travail ou de votre connexion internet ne permet pas d’éditer des documents partagés.", + "This document and <1>any sub-documents will be permanently deleted. This action is irreversible.": "Ce document et <1>tous les sous-documents seront définitivement supprimés. Cette action est irréversible.", "This file is flagged as unsafe.": "Ce fichier est marqué comme non sûr.", + "This means you can't edit until others leave.": "Cela signifie que vous ne pouvez pas éditer tant que d'autres éditeurs sont présents sur le document.", + "This user has access inherited from a parent page.": "Cet utilisateur a un accès hérité d'une page parente.", "To facilitate the circulation of documents, Docs allows you to export your content to the most common formats: PDF, Word or OpenDocument.": "Pour faciliter la circulation des documents, Docs permet d'exporter vos contenus vers les formats les plus courants : PDF, Word ou OpenDocument.", "Too many requests. Please wait 60 seconds.": "Trop de demandes. Veuillez patienter 60 secondes.", "Type a name or email": "Tapez un nom ou un email", "Type the name of a document": "Tapez le nom d'un document", + "Unnamed document": "Document sans titre", "Unpin": "Désépingler", "Untitled document": "Document sans titre", "Updated at": "Mise à jour le", @@ -588,13 +609,16 @@ "Visibility": "Visibilité", "Visibility mode": "Mode de visibilité", "Warning": "Attention", - "Why can't I edit?": "Pourquoi ne puis-je pas éditer ?", + "Why you can't edit the document?": "Pourquoi vous ne pouvez pas modifier le document ?", "Write": "Écrire", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "Vous êtes le seul propriétaire de ce groupe, faites d'un autre membre le propriétaire du groupe, avant de pouvoir modifier votre propre rôle ou vous supprimer du document.", - "You do not have permission to view this document.": "Vous n'avez pas la permission de voir ce document.", - "You do not have permission to view users sharing this document or modify link settings.": "Vous n'avez pas la permission de voir les utilisateurs partageant ce document ou de modifier les paramètres du lien.", + "You can view this document but need additional access to see its members or modify settings.": "Vous pouvez voir ce document mais vous avez besoin d'un accès supplémentaire pour voir ses membres ou modifier les paramètres.", + "You cannot restrict access to a subpage relative to its parent page.": "Vous ne pouvez pas restreindre l'accès à une sous-page par rapport à sa page parente.", + "You must be at least the editor of the target document": "Vous devez au moins être éditeur du document cible", + "You must be the owner to move the document": "Vous devez être le propriétaire pour déplacer le document", + "You're currently viewing a sub-document. To gain access, please request permission from the main document.": "Vous visualisez actuellement un sous-document. Pour obtenir un accès, veuillez demander la permission du document principal.", + "Your access request for this document is pending.": "Votre demande d'accès à ce document est en attente.", "Your current document will revert to this version.": "Votre document actuel va revenir à cette version.", - "Your network do not allow you to edit": "Votre réseau ne vous permet pas de modifier", "Your {{format}} was downloaded succesfully": "Votre {{format}} a été téléchargé avec succès", "home-content-open-source-part1": "Docs est construit sur <2>Django Rest Framework et <6>Next.js. Nous utilisons également <9>Yjs et <13>BlockNote.js, deux projets que nous sommes fiers de sponsoriser.", "home-content-open-source-part2": "Vous pouvez facilement auto-héberger Docs (consultez notre <2>documentation d'installation).
Docs utilise une <7>licence (MIT) adaptée à l'innovation et aux entreprises.
Les contributions sont les bienvenues (consultez notre feuille de route <13>ici).", @@ -619,7 +643,6 @@ "Anyone with the link can edit the document if they are logged in": "Chiunque abbia il link può modificare il documento se ha effettuato l'accesso", "Anyone with the link can see the document": "Chiunque abbia il link può vedere il documento", "Anyone with the link can view the document if they are logged in": "Chiunque abbia il link può visualizzare il documento se ha effettuato l'accesso", - "Are you sure you want to delete this document ?": "Sei sicuro di voler cancellare questo documento ?", "Available soon": "Presto disponibile", "Banner image": "Immagine del banner", "Beautify": "Filtro bellezza", @@ -646,7 +669,6 @@ "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Docs: Il tuo nuovo compagno di collaborare sui documenti in modo efficiente, intuitivo e sicuro.", "Document accessible to any connected person": "Documento accessibile a qualsiasi persona collegata", "Document owner": "Proprietario del documento", - "Document title updated successfully": "Titolo del documento aggiornato correttamente", "Docx": "Docx", "Download": "Scarica", "Download anyway": "Scarica comunque", @@ -656,9 +678,7 @@ "Emojify": "Emojify", "Empty template": "Modello vuoto", "Error during delete invitation": "Errore durante l'eliminazione dell'invito", - "Error during invitation update": "Errore durante l'aggiornamento dell'invito", "Error during update invitation": "Errore durante l'aggiornamento dell'invito", - "Error while deleting invitation": "Errore durante l'eliminazione dell'invito", "Export": "Esporta", "Failed to add the member in the document.": "Impossibile aggiungere l'utente al documento.", "Failed to copy link": "Impossibile copiare il link", @@ -750,8 +770,6 @@ "Warning": "Attenzione", "Write": "Scrivi", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "Sei l'unico proprietario di questo gruppo, devi nominare proprietario un altro membro del gruppo prima di poter cambiare il proprio ruolo o di essere rimosso dal documento.", - "You do not have permission to view this document.": "Non disponi dell'autorizzazione per visualizzare questo contenuto.", - "You do not have permission to view users sharing this document or modify link settings.": "Non hai i permessi per visualizzare gli utenti che condividono questo documento o modificare le impostazioni di collegamento.", "Your current document will revert to this version.": "Il tuo documento attuale tornerà a questa versione.", "Your {{format}} was downloaded succesfully": "Il tuo {{format}} è stato scaricato con successo" } @@ -775,7 +793,6 @@ "Anyone with the link can edit the document if they are logged in": "Iedereen met deze link kan het document bewerken als ze ingelogd zijn", "Anyone with the link can see the document": "Iedereen met de link kan het document bekijken", "Anyone with the link can view the document if they are logged in": "Iedereen met deze link kan het document zien als ze ingelogd zijn", - "Are you sure you want to delete this document ?": "Weet u zeker dat u het document wilt verwijderen?", "Available soon": "Binnenkort beschikbaar", "Banner image": "Banner afbeelding", "Beautify": "Maak mooier", @@ -808,20 +825,16 @@ "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Docs: Je nieuwe metgezel om efficiënt, intuïtief en veilig samen te werken aan documenten.", "Document accessible to any connected person": "Document is toegankelijk voor ieder verbonden persoon", "Document owner": "Document eigenaar", - "Document title updated successfully": "Document titel succesvol actueel gemaakt", "Docx": "Docx", "Download": "Download", "Download anyway": "Download alsnog", "Download your document in a .docx or .pdf format.": "Download jouw document in .docx of .pdf formaat.", - "Edition": "Editie", "Editor": "Bewerker", "Editor unavailable": "Editor onbereikbaar", "Emojify": "Maak met emoji's", "Empty template": "Lege template", "Error during delete invitation": "Fout bij verwijderen uitnodiging", - "Error during invitation update": "Fout bij updaten uitnodiging", "Error during update invitation": "Fout bij updaten uitnodiging", - "Error while deleting invitation": "Fout bij verwijderen uitnodiging", "Export": "Exporteer", "Failed to add the member in the document.": "Toevoegen van het lid in het document is mislukt.", "Failed to copy link": "Link kopiëren gefaald", @@ -928,8 +941,6 @@ "Warning": "Waarschuwing", "Write": "Schrijf", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "U bent de enige eigenaar van deze groep, maak een ander lid de groepseigenaar voordat u uw eigen rol kunt wijzigen of kan worden verwijderd van het document.", - "You do not have permission to view this document.": "U heeft geen toestemming on dit document te mogen zien.", - "You do not have permission to view users sharing this document or modify link settings.": "U heeft geen rechten om gebruikers of links aan te passen of te zien", "Your current document will revert to this version.": "Uw huidige document wordt teruggezet naar deze versie.", "Your {{format}} was downloaded succesfully": "Jouw {{format}} is succesvol gedownload", "home-content-open-source-part1": "Docs is gebouwd op <2>Django Rest Framework en <6>Next.js. We gebruiken ook <9>Yjs en <13>BlockNote.js, twee projecten die we met trots sponsoren.", @@ -984,7 +995,6 @@ "Add a horizontal line": "Yatay çizgi ekle", "Administrator": "Yönetici", "Anonymous": "Anonim", - "Are you sure you want to delete this document ?": "Bu belgeyi silmek istediğinize emin misiniz?", "Available soon": "Çok yakında!", "Banner image": "Afiş görseli", "Beautify": "Güzelleştir", @@ -1004,7 +1014,6 @@ "Docs": "Docs", "Docs Logo": "Docs logosu", "Document accessible to any connected person": "Bağlanan herhangi bir kişi tarafından erişilebilen belge", - "Document title updated successfully": "Belge başlığı güncellendi", "Docx": "Docx", "Download": "İndir", "Download anyway": "Yine de indir", @@ -1071,7 +1080,6 @@ "Anyone with the link can edit the document if they are logged in": "已登录的被分享人可以编辑文档内容", "Anyone with the link can see the document": "被分享人可以查看文档", "Anyone with the link can view the document if they are logged in": "已登录的被分享人可以查看文档内容", - "Are you sure you want to delete this document ?": "确定要删除此文档?", "Available soon": "即将推出", "Banner image": "Banner图像", "Beautify": "美化", @@ -1105,20 +1113,16 @@ "Docs: Your new companion to collaborate on documents efficiently, intuitively, and securely.": "Docs 为您提供高效、直观且安全的文档协作解决方案。", "Document accessible to any connected person": "任何来访的人都可以访问文档", "Document owner": "文档所有者", - "Document title updated successfully": "文档标题更新成功", "Docx": "Doc", "Download": "下载", "Download anyway": "仍要下载", "Download your document in a .docx or .pdf format.": "以doc或者pdf格式下载。", - "Edition": "编辑", "Editor": "编辑者", "Editor unavailable": "编辑功能不可用", "Emojify": "表情符号", "Empty template": "空模板", "Error during delete invitation": "更新邀请时出错", - "Error during invitation update": "邀请更新时出错", "Error during update invitation": "更新邀请时出错", - "Error while deleting invitation": "删除邀请时出错", "Export": "导出", "Failed to add the member in the document.": "添加成员失败。", "Failed to copy link": "复制链接失败", @@ -1225,8 +1229,6 @@ "Warning": "警告", "Write": "写入", "You are the sole owner of this group, make another member the group owner before you can change your own role or be removed from your document.": "您是当前群组唯一所有者,需先指定另一管理员,才能更改自身角色或退出文档。", - "You do not have permission to view this document.": "您无权查看此文档。", - "You do not have permission to view users sharing this document or modify link settings.": "您没有权限查看共享此文档或修改链接。", "Your current document will revert to this version.": "您当前的文档将恢复到这个版本。", "Your {{format}} was downloaded succesfully": "你的{{format}}已成功下载", "home-content-open-source-part1": "Docs基于<2>Django Rest Framework和<6>Next.js构建。我们还使用<9>Yjs和<13>BlockNote.js,这两个项目我们很自豪能够赞助。", diff --git a/src/frontend/package.json b/src/frontend/package.json index 57fba5941e..297b244afa 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,6 +1,6 @@ { "name": "impress", - "version": "3.3.0", + "version": "3.4.0", "private": true, "workspaces": { "packages": [ diff --git a/src/frontend/packages/eslint-config-impress/package.json b/src/frontend/packages/eslint-config-impress/package.json index 3f9aed414f..d2f9bdf90b 100644 --- a/src/frontend/packages/eslint-config-impress/package.json +++ b/src/frontend/packages/eslint-config-impress/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-impress", - "version": "3.3.0", + "version": "3.4.0", "license": "MIT", "scripts": { "lint": "eslint --ext .js ." diff --git a/src/frontend/packages/i18n/package.json b/src/frontend/packages/i18n/package.json index 5d3d49c707..cef4456f02 100644 --- a/src/frontend/packages/i18n/package.json +++ b/src/frontend/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "packages-i18n", - "version": "3.3.0", + "version": "3.4.0", "private": true, "scripts": { "extract-translation": "yarn extract-translation:impress", diff --git a/src/frontend/servers/y-provider/package.json b/src/frontend/servers/y-provider/package.json index c6ba82616c..e368dca6ec 100644 --- a/src/frontend/servers/y-provider/package.json +++ b/src/frontend/servers/y-provider/package.json @@ -1,6 +1,6 @@ { "name": "server-y-provider", - "version": "3.3.0", + "version": "3.4.0", "description": "Y.js provider for docs", "repository": "https://github.com/numerique-gouv/impress", "license": "MIT", diff --git a/src/helm/helmfile.yaml b/src/helm/helmfile.yaml index 8b34eea184..be3ccfa5a9 100644 --- a/src/helm/helmfile.yaml +++ b/src/helm/helmfile.yaml @@ -1,7 +1,7 @@ environments: dev: values: - - version: 3.3.0 + - version: 3.4.0 --- repositories: - name: bitnami diff --git a/src/helm/impress/Chart.yaml b/src/helm/impress/Chart.yaml index b6f5de0f3e..4d29dec82a 100644 --- a/src/helm/impress/Chart.yaml +++ b/src/helm/impress/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 type: application name: docs -version: 3.4.0-beta.2 +version: 3.4.0 appVersion: latest diff --git a/src/mail/package.json b/src/mail/package.json index d904d626bb..539613eedc 100644 --- a/src/mail/package.json +++ b/src/mail/package.json @@ -1,6 +1,6 @@ { "name": "mail_mjml", - "version": "3.3.0", + "version": "3.4.0", "description": "An util to generate html and text django's templates from mjml templates", "type": "module", "dependencies": {