Compare commits

..

32 Commits

Author SHA1 Message Date
Manuel Raynaud ad36210e45 🔖(patch) release 4.8.1
Added

- 🔧(backend) add DB_PSYCOPG_POOL_ENABLED settings

Changed

- ⬇️(backend) downgrade django-treebeard to version < 5.0.0
2026-03-17 13:29:05 +01:00
Manuel Raynaud 73a7c250b5 🔧(backend) add DB_PSYCOPG_POOL_ENABLED settings
The psycopg pool config was enabled by default forcing its usage. Using
psycopg pool can be difficult, finding the good configuration take time.
By default its usage should be disable and the maintainer of the
instance should decide to enable it or not.
2026-03-17 13:19:17 +01:00
Manuel Raynaud 0c17d76f60 ⬇️(backend) downgrade django-treebeard to version < 5.0.0
Since we upgraded to django-treebeard version 5 we have anormal behavior
and a high error rate on the document.path property. We must downgrade
it and avoid future upgrade from renovate.
2026-03-17 13:17:05 +01:00
Manuel Raynaud 04c9dc3294 🔧(backend) allow to configure psycopg pool timeout
We want to allow the configuration of the psycopg pool timeout.
For this we created a new setting DB_PSYCOPG_POOL_TIMEOUT
2026-03-16 15:30:23 +01:00
Manuel Raynaud 32b2641fd8 (hub) increase max pool size
In order to run the tests we need to increase the max pool size. Only
having 4 connections in the pool is not enough and all the tests using a
transaction are failing with a tiemout error.
We have the same problem running locally so the same value is added to
the postgresql environment file
2026-03-16 15:30:23 +01:00
Manuel Raynaud 07966c5461 🔧(helm) update values.yaml annotations
The annotation in the values.yaml have not been updated since a while.
This commit update them and generate the readme using the generate-readme.sh
script
2026-03-16 15:30:23 +01:00
Manuel Raynaud bcb50a5fce 🔧(helm) allow specific env var for the backend and celery deploy
We want the possibility to configure specific environment variables on
backend and celery deployment. Most of them are common but in the case
of the newly added settings DB_PSYCOPG_POOL_MIN_SIZE we want to
configure ot only on the backend deployment, not on the celery or with a
different value.
2026-03-16 15:30:22 +01:00
Manuel Raynaud ba93bcf20b 🔧(backend) enable psycopg-pool allowing configuring min and max size
We enable the pool option on the DB configuration. We want to allow the
configuration of the min and max sixe in a first time. They can be
configured using the settings DB_PSYCOPG_POOL_MIN_SIZE and
DB_PSYCOPG_POOL_MAX_SIZE. They have their default value to 4 and None.
2026-03-16 15:30:22 +01:00
Manuel Raynaud 2e05aec303 (backend) install psycopg_pool
We want to use psycopg_pool, it can be installed as a psycopg extra
dependency.
2026-03-16 15:30:22 +01:00
Anthony LC 51e8332b95 🔖(minor) release 4.8.0
Added:
- (backend) add a is_first_connection flag to the User model
- (frontend) add onboarding modal with help menu button

Changed:
- (frontend) localize LaGaufre label fallback in Docs
- (backend) add a migration cleaning on-boarding
  document accesses
- ⬆️(frontend) upgrade Next.js to v16
- ️(frontend) fix aria-label and landmark on document
  banner state
- 🌐(i18n) add "new window" translation key for waffle
  aria-label

Fixed:
- 🐛(backend) create a link_trace record for on-boarding
  documents
- 🐛(backend) manage race condition when creating sandbox
  document
- 🐛(frontend) fix flickering left panel
- ️(frontend) improve doc tree keyboard navigation
2026-03-13 18:00:32 +01:00
AntoLC eb2ee1bb7f 🌐(i18n) update translated strings
Update translated files with new translations
2026-03-13 18:00:32 +01:00
Anthony LC d34f279455 📱(frontend) improve mobile design left panel
Improve the onboarding modal design for
mobile devices.
Improve as well the left panel on mobile devices
to fit more with the Figma design.
2026-03-13 17:22:55 +01:00
Anthony LC 3eed542800 (frontend) display onboarding modal when first connection
When the user connect for the first time, we
display a onboarding modal, that explains the
main functionnalities of Docs.
2026-03-13 17:22:54 +01:00
Anthony LC 5f2c472726 🌐(frontend) add currentLocale to CunninghamProvider
In order to have the text of components from the
Cunningham library translated, we need to pass the current
locale to the CunninghamProvider.
We need to create a new ThemeProvider component that
will wrap the CunninghamProvider in order to have
react-query fully loaded.
2026-03-13 17:22:54 +01:00
Cyril 9e313e30a7 (frontend) add e2e test for onboarding modal
Ensure onboarding entrypoint and modal navigation work end-to-end.
2026-03-13 17:22:54 +01:00
Cyril 6c493c24d5 (frontend) add onboarding modal with help menu button
integrate onboarding feature accessible from left panel help menu

(frontend) add docs onboarding and help memu

Introduce an onboarding to guide users through core features.
2026-03-13 16:27:21 +01:00
Anthony LC c3acfe45d2 🐛(frontend) fix skeleton blocked on main page
If navigating quickly between documents, the
skeleton of the document page can be blocked
on the main page.
This commit fixes this issue by reseting the skeleton
state when unmounting the document page.
2026-03-13 11:10:13 +01:00
Anthony LC a9d2517c7b 🐛(frontend) fix flickering left panel
In some cases, the left panel can flicker
when navigating from the index to a document page.
This is due to different state + a transition effect.
To fix this, we remove the transition effect
when mounting.
2026-03-13 10:34:56 +01:00
Cyril a2ae41296d ️(frontend) fix doc tree keyboard navigation regressions
Shift+Tab from sub-doc returns focus to root item
2026-03-12 17:10:09 +01:00
Cyril 1016b1c25d ️(i18n) add "new window" translation key for waffle aria-label
Add key used by LaGaufreV2 for localized aria-label on external links.
2026-03-12 16:13:51 +01:00
Cyril 0c649a65b0 ️(frontend) fix redundant a-label and improper landmark on public alert
Remove aria-label and region role to avoid duplicate screen reader announcement
2026-03-12 15:10:25 +01:00
Anthony LC 11d899437a ️(frontend) improve bundle size
Improve bundle size by improving tree shaking
and code splitting.
2026-03-12 14:34:23 +01:00
Anthony LC 27c5e0ce5a (frontend) use eslint instead of next lint
Version 16 of Next.js stopped supporting eslint natively.
We need to implement it ourselves.
2026-03-12 14:34:23 +01:00
Anthony LC 9337c4b1d5 ♻️(frontend) adapt emoji copying to turbopack build
We were previously copying the emoji assets
in a webpack plugin, but that doesn't run with
turbopack. This commit moves the copying to a
pre-build script, which runs regardless of the
bundler used.
2026-03-12 14:34:23 +01:00
Anthony LC 679b29e2e0 ⬆️(frontend) upgrade Next.js to v16
Upgrade Next.js to v16, which includes Turbopack
support by default. It improves dev and build
performance considerably.
2026-03-12 14:34:23 +01:00
Manuel Raynaud 3cad1b8a39 (backend) add a migration for cleaning onboarding document accesses
We change the strategy on how the new users have access to the
onboarding documents. We should remove all created accesses we don't
want to have anymore. There is no need to add them in the link_trace
table, they are already present in the favorites and user have already
access to it.
2026-03-12 13:52:23 +01:00
Manuel Raynaud 2eb2641d2c 🐛(backend) manage race condition when creating sandbox document
When a user is created and a sandbox document should be created, we can
have a race condition on the document creation leading to an error for
the user. To avoid this we have to manage this part in a transaction and
locking the document table
2026-03-12 13:51:41 +01:00
Manuel Raynaud e36366b293 🐛(backend) create a link_trace record for onboarded documents
When a user is created, we created accesses to a list of onboarding
documents. Doing this have side effect on the proximity search feature.
Instead of creating access, we should create link_reach
2026-03-12 13:51:41 +01:00
Cyril 6d73fb69b0 ️(frontend) localize LaGaufre label fallback in Docs
We pass a translated fallback label so the waffle follows the app locale.
2026-03-12 11:07:24 +01:00
Sylvain Boissel b708c8b352 (backend) add a is_first_connection flag to the User model
Backend part of #1796.

This changes allows to display an onboarding modal the first time that
the get_me() API view is called.
I originally tried to check if `User.last_login` was `None`, but it is
updated as soon as the user is logged, so I chose to create a flag on
the model.
2026-03-11 14:34:55 +00:00
Manuel Raynaud 36c6762026 ⬇️(backend) downgrade langfuse to version 3.11.2
We to keep in sync the version of the sdk client and the version of the
langfuse server. For now we can't upgrade langfuse See
https://github.com/langfuse/langfuse/issues/11564
2026-03-11 09:54:26 +00:00
Hadrien Blanc 4637d6f1fe 📝 Fix documentation and comment typos (#1977)
Fix typos found in documentation and code comments across the codebase.
2026-03-11 09:29:57 +00:00
144 changed files with 3559 additions and 1704 deletions
+39 -5
View File
@@ -6,6 +6,39 @@ and this project adheres to
## [Unreleased]
## [v4.8.1] - 2026-03-17
### Added
- 🔧(backend) add DB_PSYCOPG_POOL_ENABLED settings #2035
### Changed
- ⬇️(backend) downgrade django-treebeard to version < 5.0.0 #2036
## [v4.8.0] - 2026-03-13
### Added
- ✨(backend) add a is_first_connection flag to the User model #1938
- ✨(frontend) add onboarding modal with help menu button #1868
### Changed
- ♿(frontend) localize LaGaufre label fallback in Docs #1979
- ✨(backend) add a migration cleaning on-boarding document accesses #1971
- ⬆️(frontend) upgrade Next.js to v16 #1980
- ♿️(frontend) fix aria-label and landmark on document banner state #1986
- 🌐(i18n) add "new window" translation key for waffle aria-label #1984
### Fixed
- 🐛(backend) create a link_trace record for on-boarding documents #1971
- 🐛(backend) manage race condition when creating sandbox document #1971
- 🐛(frontend) fix flickering left panel #1989
- ♿️(frontend) improve doc tree keyboard navigation #1981
- 🔧(helm) allow specific env var for the backend and celery deploy
## [v4.7.0] - 2026-03-09
### Added
@@ -28,7 +61,6 @@ and this project adheres to
- 🐛(frontend) fix bug when language not supported by BN #1957
- 🐛 (backend) prevent privileged users from requesting access #1898
## [v4.6.0] - 2026-03-03
### Added
@@ -304,7 +336,7 @@ and this project adheres to
- ♻️(frontend) Refactor Auth component for improved redirection logic #1461
- ♻️(frontend) replace Arial font-family with token font #1411
- ♿(frontend) improve accessibility:
- ♿(frontend) enable enter key to open documentss #1354
- ♿(frontend) enable enter key to open documents #1354
- ♿(frontend) improve modal a11y: structure, labels, title #1349
- ♿improve NVDA navigation in DocShareModal #1396
- ♿ improve accessibility by adding landmark roles to layout #1394
@@ -512,10 +544,10 @@ and this project adheres to
- ✨(backend) add endpoint checking media status #984
- ✨(backend) allow setting session cookie age via env var #977
- ✨(backend) allow theme customnization using a configuration file #948
- ✨(backend) allow theme customization using a configuration file #948
- ✨(frontend) Add a custom callout block to the editor #892
- 🚩(frontend) version MIT only #911
- ✨(backend) integrate maleware_detection from django-lasuite #936
- ✨(backend) integrate malware_detection from django-lasuite #936
- 🏗️(frontend) Footer configurable #959
- 🩺(CI) add lint spell mistakes #954
- ✨(frontend) create generic theme #792
@@ -1083,7 +1115,9 @@ and this project adheres to
- ✨(frontend) Coming Soon page (#67)
- 🚀 Impress, project to manage your documents easily and collaboratively.
[unreleased]: https://github.com/suitenumerique/docs/compare/v4.7.0...main
[unreleased]: https://github.com/suitenumerique/docs/compare/v4.8.1...main
[v4.8.1]: https://github.com/suitenumerique/docs/releases/v4.8.1
[v4.8.0]: https://github.com/suitenumerique/docs/releases/v4.8.0
[v4.7.0]: https://github.com/suitenumerique/docs/releases/v4.7.0
[v4.6.0]: https://github.com/suitenumerique/docs/releases/v4.6.0
[v4.5.0]: https://github.com/suitenumerique/docs/releases/v4.5.0
+2 -2
View File
@@ -95,8 +95,8 @@ Thank you for your contributions! 👍
## Contribute to BlockNote
We use [BlockNote](https://www.blocknotejs.org/) for the text editing features of Docs.
If you find and issue with the editor you can [report it](https://github.com/TypeCellOS/BlockNote/issues) directly on their repository.
If you find an issue with the editor you can [report it](https://github.com/TypeCellOS/BlockNote/issues) directly on their repository.
Please consider contributing to BlockNotejs, as a library, it's useful to many projects not just Docs.
The project is licended with Mozilla Public License Version 2.0 but be aware that [XL packages](https://github.com/TypeCellOS/BlockNote/blob/main/packages/xl-docx-exporter/LICENSE) are dual licenced with GNU AFFERO GENERAL PUBLIC LICENCE Version 3 and proprietary licence if you are [sponsor](https://www.blocknotejs.org/pricing).
The project is licensed with Mozilla Public License Version 2.0 but be aware that [XL packages](https://github.com/TypeCellOS/BlockNote/blob/main/packages/xl-docx-exporter/LICENSE) are dual licensed with GNU AFFERO GENERAL PUBLIC LICENSE Version 3 and proprietary license if you are a [sponsor](https://www.blocknotejs.org/pricing).
+4 -4
View File
@@ -51,7 +51,7 @@ Docs is an open-source alternative to tools like Notion or Google Docs, focused
- Slash commands & block system
- Beautiful formatting
- Offline editing
- Optional AI writing helpers (rewirite, summarize, translate, fix typos)
- Optional AI writing helpers (rewrite, summarize, translate, fix typos)
### Collaboration
@@ -120,7 +120,7 @@ docker -v
docker compose version
```
> If you encounounter permission errors, you may need to use `sudo`, or add your user to the `docker` group.
> If you encounter permission errors, you may need to use `sudo`, or add your user to the `docker` group.
### Bootstrap the project
@@ -130,9 +130,9 @@ The easiest way to start is using GNU Make:
make bootstrap FLUSH_ARGS='--no-input'
```
This builds the `app-dev` and `fronted-dev` containers, installs dependencies, runs database migrations, and compiles translations.
This builds the `app-dev` and `frontend-dev` containers, installs dependencies, runs database migrations, and compiles translations.
It is recommend to run this command after pulling new code.
It is recommended to run this command after pulling new code.
Start services:
+1 -1
View File
@@ -68,5 +68,5 @@ service.
- AI features are now limited to users who are authenticated. Before this release, even anonymous
users who gained editor access on a document with link reach used to get AI feature.
IF you want anonymous users to keep access on AI features, you must now define the
If you want anonymous users to keep access on AI features, you must now define the
`AI_ALLOW_REACH_FROM` setting to "public".
+4
View File
@@ -46,6 +46,10 @@ These are the environment variables you can set for the `impress-backend` contai
| DB_NAME | Name of the database | impress |
| DB_PASSWORD | Password to authenticate with | pass |
| DB_PORT | Port of the database | 5432 |
| DB_PSYCOPG_POOL_ENABLED | Enable or not the psycopg pool configuration in the default database options | False |
| DB_PSYCOPG_POOL_MIN_SIZE | The psycopg min pool size | 4 |
| DB_PSYCOPG_POOL_MAX_SIZE | The psycopg max pool size | None |
| DB_PSYCOPG_POOL_TIMEOUT | The default maximum time in seconds that a client can wait to receive a connection from the pool | 3 |
| DB_USER | User to authenticate with | dinum |
| DJANGO_ALLOWED_HOSTS | Allowed hosts | [] |
| DJANGO_CELERY_BROKER_TRANSPORT_OPTIONS | Celery broker transport options | {} |
+1 -1
View File
@@ -13,7 +13,7 @@ Please follow the instructions [here](/docs/installation/compose.md).
⚠️ Please keep in mind that we do not use it ourselves in production. Let us know in the issues if you run into troubles, we'll try to help.
## Other ways to install Docs
Community members have contributed several other ways to install Docs. While we owe them a big thanks 🙏, please keep in mind we (Docs maintainers) can't provide support on these installation methods as we don't use them ourselves and there are two many options out there for us to keep track of. Of course you can contact the contributors and the broader community for assistance.
Community members have contributed several other ways to install Docs. While we owe them a big thanks 🙏, please keep in mind we (Docs maintainers) can't provide support on these installation methods as we don't use them ourselves and there are too many options out there for us to keep track of. Of course you can contact the contributors and the broader community for assistance.
Here is the list of other methods in alphabetical order:
- Coop-Cloud: [code](https://git.coopcloud.tech/coop-cloud/lasuite-docs)
+3 -3
View File
@@ -134,7 +134,7 @@ DJANGO_EMAIL_URL_APP=<url used in email templates to go to the app> # e.g. "http
Built-in AI actions let users generate, summarize, translate, and correct content.
AI is disabled by default. To enable it, the following environment variables must be set in in `env.d/backend`:
AI is disabled by default. To enable it, the following environment variables must be set in `env.d/backend`:
```env
AI_FEATURE_ENABLED=true # is false by default
@@ -152,7 +152,7 @@ You can [customize your Docs instance](../theming.md) with your own theme and cu
The following environment variables must be set in `env.d/backend`:
```env
FRONTEND_THEME=default # name of your theme built with cuningham
FRONTEND_THEME=default # name of your theme built with Cunningham
FRONTEND_CSS_URL=https://storage.yourdomain.tld/themes/custom.css # custom css
```
@@ -206,7 +206,7 @@ Replace `<admin email>` with the email of your admin user and generate a secure
Your docs instance is now available on the domain you defined, https://docs.yourdomain.tld.
THe admin interface is available on https://docs.yourdomain.tld/admin with the admin user you just created.
The admin interface is available on https://docs.yourdomain.tld/admin with the admin user you just created.
## How to upgrade your Docs application
+1 -1
View File
@@ -250,4 +250,4 @@ minio-dev-backend-minio-api <none> docs-minio.127.0.0.1.nip.io
minio-dev-backend-minio-console <none> docs-minio-console.127.0.0.1.nip.io localhost 80, 443 8m48s
```
You can use Docs at https://docs.127.0.0.1.nip.io. The provisionning user in keycloak is docs/docs.
You can use Docs at https://docs.127.0.0.1.nip.io. The provisioning user in keycloak is docs/docs.
+1 -1
View File
@@ -8,4 +8,4 @@ DB_HOST=postgresql
DB_NAME=impress
DB_USER=dinum
DB_PASSWORD=pass
DB_PORT=5432
DB_PORT=5432
+12 -3
View File
@@ -43,15 +43,24 @@
"matchPackageNames": ["pydantic-ai-slim"],
"allowedVersions": "<1.59.0"
},
{
"groupName": "allowed langfuse versions",
"matchManagers": ["pep621"],
"matchPackageNames": ["langfuse"],
"allowedVersions": "<3.12.0"
},
{
"groupName": "allowed django-treebeard versions",
"matchManagers": ["pep621"],
"matchPackageNames": ["django-treebeard"],
"allowedVersions": "<5.0.0"
},
{
"enabled": false,
"groupName": "ignored js dependencies",
"matchManagers": ["npm"],
"matchPackageNames": [
"@next/eslint-plugin-next",
"eslint-config-next",
"fetch-mock",
"next",
"node",
"node-fetch",
"react-resizable-panels",
+15 -2
View File
@@ -32,8 +32,21 @@ class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.User
fields = ["id", "email", "full_name", "short_name", "language"]
read_only_fields = ["id", "email", "full_name", "short_name"]
fields = [
"id",
"email",
"full_name",
"short_name",
"language",
"is_first_connection",
]
read_only_fields = [
"id",
"email",
"full_name",
"short_name",
"is_first_connection",
]
def get_full_name(self, instance):
"""Return the full name of the user."""
+20
View File
@@ -318,6 +318,25 @@ class UserViewSet(
self.serializer_class(request.user, context=context).data
)
@drf.decorators.action(
detail=False,
methods=["post"],
url_path="onboarding-done",
permission_classes=[permissions.IsAuthenticated],
)
def onboarding_done(self, request):
"""
Allows the frontend to mark the first connection as done for the current user,
e.g. after showing an onboarding message.
"""
if request.user.is_first_connection:
request.user.is_first_connection = False
request.user.save(update_fields=["is_first_connection", "updated_at"])
return drf.response.Response(
{"detail": "Onboarding marked as done."}, status=status.HTTP_200_OK
)
class ReconciliationConfirmView(APIView):
"""API endpoint to confirm user reconciliation emails.
@@ -2224,6 +2243,7 @@ class DocumentAccessViewSet(
"user__full_name",
"user__email",
"user__language",
"user__is_first_connection",
"document__id",
"document__path",
"document__depth",
@@ -22,7 +22,7 @@ def set_path_on_existing_documents(apps, schema_editor):
# Iterate over all existing documents and make them root nodes
documents = Document.objects.order_by("created_at").values_list("id", flat=True)
numconv = NumConv(ALPHABET)
numconv = NumConv(len(ALPHABET), ALPHABET)
updates = []
for i, pk in enumerate(documents):
@@ -0,0 +1,32 @@
# Generated by Django 5.2.11 on 2026-03-04 14:49
from django.db import migrations, models
def set_is_first_connection_false(apps, schema_editor):
"""Update all existing user.is_first_connection to False."""
user = apps.get_model("core", "User")
user.objects.update(is_first_connection=False)
class Migration(migrations.Migration):
dependencies = [
("core", "0029_userreconciliationcsvimport_userreconciliation"),
]
operations = [
migrations.AddField(
model_name="user",
name="is_first_connection",
field=models.BooleanField(
default=True,
help_text="Whether the user has completed the first connection process.",
verbose_name="first connection status",
),
),
migrations.RunPython(
set_is_first_connection_false,
reverse_code=migrations.RunPython.noop,
),
]
@@ -0,0 +1,34 @@
# Generated by Django 5.2.12 on 2026-03-11 17:16
from django.conf import settings
from django.db import migrations
from core.models import PRIVILEGED_ROLES
def clean_onboarding_accesses(apps, schema_editor):
"""clean accesses on on-boarding documents."""
onboarding_document_ids = settings.USER_ONBOARDING_DOCUMENTS
if not onboarding_document_ids:
return
onboarding_document_ids = set(settings.USER_ONBOARDING_DOCUMENTS)
DocumentAccess = apps.get_model("core", "DocumentAccess")
DocumentAccess.objects.filter(document_id__in=onboarding_document_ids).exclude(
role__in=PRIVILEGED_ROLES
).delete()
class Migration(migrations.Migration):
dependencies = [
("core", "0030_user_is_first_connection"),
]
operations = [
migrations.RunPython(
clean_onboarding_accesses,
reverse_code=migrations.RunPython.noop,
),
]
+46 -28
View File
@@ -19,7 +19,7 @@ from django.core.cache import cache
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from django.core.mail import send_mail
from django.db import models, transaction
from django.db import connection, models, transaction
from django.db.models.functions import Left, Length
from django.template.loader import render_to_string
from django.utils import timezone
@@ -193,6 +193,11 @@ class User(AbstractBaseUser, BaseModel, auth_models.PermissionsMixin):
"Unselect this instead of deleting accounts."
),
)
is_first_connection = models.BooleanField(
_("first connection status"),
default=True,
help_text=_("Whether the user has completed the first connection process."),
)
objects = UserManager()
@@ -222,11 +227,11 @@ class User(AbstractBaseUser, BaseModel, auth_models.PermissionsMixin):
def _handle_onboarding_documents_access(self):
"""
If the user is new and there are documents configured to be given to new users,
give access to these documents and pin them as favorites for the user.
create link traces to these documents and pin them as favorites for the user.
"""
if settings.USER_ONBOARDING_DOCUMENTS:
onboarding_document_ids = set(settings.USER_ONBOARDING_DOCUMENTS)
onboarding_accesses = []
onboarding_link_traces = []
favorite_documents = []
for document_id in onboarding_document_ids:
try:
@@ -238,16 +243,20 @@ class User(AbstractBaseUser, BaseModel, auth_models.PermissionsMixin):
)
continue
onboarding_accesses.append(
DocumentAccess(
user=self, document=document, role=RoleChoices.READER
if document.link_reach == LinkReachChoices.RESTRICTED:
logger.warning(
"Onboarding on a restricted document is not allowed. Must be public or "
"connected. Restricted document: %s",
document_id,
)
)
continue
onboarding_link_traces.append(LinkTrace(user=self, document=document))
favorite_documents.append(
DocumentFavorite(user=self, document_id=document_id)
)
DocumentAccess.objects.bulk_create(onboarding_accesses)
LinkTrace.objects.bulk_create(onboarding_link_traces)
DocumentFavorite.objects.bulk_create(favorite_documents)
def _duplicate_onboarding_sandbox_document(self):
@@ -256,29 +265,38 @@ class User(AbstractBaseUser, BaseModel, auth_models.PermissionsMixin):
duplicate the sandbox document for the user
"""
if settings.USER_ONBOARDING_SANDBOX_DOCUMENT:
sandbox_id = settings.USER_ONBOARDING_SANDBOX_DOCUMENT
try:
template_document = Document.objects.get(id=sandbox_id)
# transaction.atomic is used in a context manager to avoid a transaction if
# the settings USER_ONBOARDING_SANDBOX_DOCUMENT is unused
with transaction.atomic():
# locks the table to ensure safe concurrent access
with connection.cursor() as cursor:
cursor.execute(
f'LOCK TABLE "{Document._meta.db_table}" ' # noqa: SLF001
"IN SHARE ROW EXCLUSIVE MODE;"
)
except Document.DoesNotExist:
logger.warning(
"Onboarding sandbox document with id %s does not exist. Skipping.",
sandbox_id,
sandbox_id = settings.USER_ONBOARDING_SANDBOX_DOCUMENT
try:
template_document = Document.objects.get(id=sandbox_id)
except Document.DoesNotExist:
logger.warning(
"Onboarding sandbox document with id %s does not exist. Skipping.",
sandbox_id,
)
return
sandbox_document = template_document.add_sibling(
"right",
title=template_document.title,
content=template_document.content,
attachments=template_document.attachments,
duplicated_from=template_document,
creator=self,
)
return
sandbox_document = template_document.add_sibling(
"right",
title=template_document.title,
content=template_document.content,
attachments=template_document.attachments,
duplicated_from=template_document,
creator=self,
)
DocumentAccess.objects.create(
user=self, document=sandbox_document, role=RoleChoices.OWNER
)
DocumentAccess.objects.create(
user=self, document=sandbox_document, role=RoleChoices.OWNER
)
def _convert_valid_invitations(self):
"""
@@ -245,15 +245,18 @@ def test_api_document_accesses_list_authenticated_related_privileged(
"path": access.document.path,
"depth": access.document.depth,
},
"user": {
"id": str(access.user.id),
"email": access.user.email,
"language": access.user.language,
"full_name": access.user.full_name,
"short_name": access.user.short_name,
}
if access.user
else None,
"user": (
{
"id": str(access.user.id),
"email": access.user.email,
"language": access.user.language,
"full_name": access.user.full_name,
"short_name": access.user.short_name,
"is_first_connection": access.user.is_first_connection,
}
if access.user
else None
),
"max_ancestors_role": None,
"max_role": access.role,
"team": access.team,
@@ -1,7 +1,5 @@
import pytest
from core import models
@pytest.mark.django_db
def test_update_blank_title_migration(migrator):
@@ -7,8 +7,6 @@ from django.core.files.storage import default_storage
import pycrdt
import pytest
from core import models
@pytest.mark.django_db
def test_populate_attachments_on_all_documents(migrator):
@@ -0,0 +1,52 @@
"""Module testing migration 0030 about adding is_first_connection to user model."""
from django.contrib.auth.hashers import make_password
import factory
import pytest
from core import models
@pytest.mark.django_db
def test_set_is_first_connection_false(migrator):
"""
Test that once the migration adding is_first_connection column to user model is applied
all existing user have the False value.
"""
old_state = migrator.apply_initial_migration(
("core", "0029_userreconciliationcsvimport_userreconciliation")
)
OldUser = old_state.apps.get_model("core", "User")
old_user1 = OldUser.objects.create(
email="email1@example.com", sub="user1", password=make_password("password")
)
old_user2 = OldUser.objects.create(
email="email2@example.com", sub="user2", password=make_password("password")
)
assert hasattr(old_user1, "is_first_connection") is False
assert hasattr(old_user2, "is_first_connection") is False
# # Apply the migration
new_state = migrator.apply_tested_migration(
("core", "0030_user_is_first_connection")
)
NewUser = new_state.apps.get_model("core", "User")
updated_user1 = NewUser.objects.get(id=old_user1.id)
assert updated_user1.is_first_connection is False
updated_user2 = NewUser.objects.get(id=old_user2.id)
assert updated_user2.is_first_connection is False
# create a new user after migration
new_user1 = NewUser.objects.create(
email="email3example.com", sub="user3", password=make_password("password")
)
assert new_user1.is_first_connection is True
@@ -0,0 +1,193 @@
"""Module testing migration 0031_clean_onboarding_accesses."""
from django.contrib.auth.hashers import make_password
import pytest
def create_user(OldUser, n):
"""Create a user with a unique sub and email based on the given index."""
return OldUser.objects.create(
email=f"user-{n}@example.com",
sub=f"user-{n}",
password=make_password("password"),
)
@pytest.mark.django_db
def test_clean_onboarding_accesses(migrator, settings):
"""Test migration 0031_clean_onboarding_accesses."""
old_state = migrator.apply_initial_migration(
("core", "0030_user_is_first_connection")
)
OldUser = old_state.apps.get_model("core", "User")
OldDocument = old_state.apps.get_model("core", "Document")
OldDocumentAccess = old_state.apps.get_model("core", "DocumentAccess")
# Create onboarding documents
onboarding_doc_1 = OldDocument.objects.create(
title="Onboarding Doc 1", depth=1, path="0000001", link_reach="public"
)
onboarding_doc_2 = OldDocument.objects.create(
title="Onboarding Doc 2", depth=1, path="0000002", link_reach="public"
)
onboarding_documents = [onboarding_doc_1, onboarding_doc_2]
settings.USER_ONBOARDING_DOCUMENTS = [str(doc.id) for doc in onboarding_documents]
# Create other documents
non_onboarding_doc_1 = OldDocument.objects.create(
title="Non-Onboarding Doc 1", depth=1, path="0000003", link_reach="public"
)
non_onboarding_doc_2 = OldDocument.objects.create(
title="Non-Onboarding Doc 2", depth=1, path="0000004", link_reach="public"
)
non_onboarding_doc_3 = OldDocument.objects.create(
title="Non-Onboarding Doc 3", depth=1, path="0000005", link_reach="public"
)
non_onboarding_documents = [
non_onboarding_doc_1,
non_onboarding_doc_2,
non_onboarding_doc_3,
]
all_documents = onboarding_documents + non_onboarding_documents
user_counter = 0
# For every document create privileged roles: owner and admin
for document in all_documents:
OldDocumentAccess.objects.create(
document=document,
user=create_user(OldUser, user_counter),
role="owner",
)
user_counter += 1
OldDocumentAccess.objects.create(
document=document,
user=create_user(OldUser, user_counter),
role="administrator",
)
user_counter += 1
# For every document, create non-privileged roles
for document in all_documents:
for role in ["reader", "editor", "commenter"]:
for _ in range(10):
OldDocumentAccess.objects.create(
document=document,
user=create_user(OldUser, user_counter),
role=role,
)
user_counter += 1
onboarding_ids = [doc.id for doc in onboarding_documents]
non_onboarding_ids = [doc.id for doc in non_onboarding_documents]
# All documents should have 32 accesses each, so 160 accesses total
assert OldDocumentAccess.objects.count() == 160
assert (
OldDocumentAccess.objects.filter(document_id__in=onboarding_ids)
.exclude(role__in=["administrator", "owner"])
.count()
== 60
)
assert (
OldDocumentAccess.objects.filter(
document_id__in=onboarding_ids, role__in=["administrator", "owner"]
).count()
== 4
)
assert (
OldDocumentAccess.objects.filter(document_id__in=non_onboarding_ids)
.exclude(role__in=["administrator", "owner"])
.count()
== 90
)
assert (
OldDocumentAccess.objects.filter(
document_id__in=non_onboarding_ids, role__in=["administrator", "owner"]
).count()
== 6
)
# Apply the migration
new_state = migrator.apply_tested_migration(
("core", "0031_clean_onboarding_accesses")
)
NewDocumentAccess = new_state.apps.get_model("core", "DocumentAccess")
# 60 accesses should have been removed (30 non-privileged for each onboarding doc)
assert NewDocumentAccess.objects.count() == 100
# Non-privileged roles should have been deleted on the onboarding documents
assert (
NewDocumentAccess.objects.filter(document_id__in=onboarding_ids)
.exclude(role__in=["administrator", "owner"])
.count()
== 0
)
# Privileged roles should have been kept
assert (
NewDocumentAccess.objects.filter(
document_id__in=onboarding_ids, role__in=["administrator", "owner"]
).count()
== 4
)
# On other documents, all accesses should remain
assert (
NewDocumentAccess.objects.filter(document_id__in=non_onboarding_ids)
.exclude(role__in=["administrator", "owner"])
.count()
== 90
)
# Privileged roles should have been kept
assert (
NewDocumentAccess.objects.filter(
document_id__in=non_onboarding_ids, role__in=["administrator", "owner"]
).count()
== 6
)
@pytest.mark.django_db
def test_clean_onboarding_accesses_no_setting(migrator, settings):
"""Test migration 0031 does not delete any access when USER_ONBOARDING_DOCUMENTS is empty."""
old_state = migrator.apply_initial_migration(
("core", "0030_user_is_first_connection")
)
OldUser = old_state.apps.get_model("core", "User")
OldDocument = old_state.apps.get_model("core", "Document")
OldDocumentAccess = old_state.apps.get_model("core", "DocumentAccess")
settings.USER_ONBOARDING_DOCUMENTS = []
doc_1 = OldDocument.objects.create(title="Doc 1", depth=1, path="0000001")
doc_2 = OldDocument.objects.create(title="Doc 2", depth=1, path="0000002")
user_counter = 0
for document in [doc_1, doc_2]:
for role in ["owner", "administrator", "reader", "editor", "commenter"]:
OldDocumentAccess.objects.create(
document=document,
user=create_user(OldUser, user_counter),
role=role,
)
user_counter += 1
assert OldDocumentAccess.objects.count() == 10
new_state = migrator.apply_tested_migration(
("core", "0031_clean_onboarding_accesses")
)
NewDocumentAccess = new_state.apps.get_model("core", "DocumentAccess")
# No accesses should have been deleted
assert NewDocumentAccess.objects.count() == 10
+29
View File
@@ -460,6 +460,7 @@ def test_api_users_retrieve_me_authenticated():
"full_name": user.full_name,
"language": user.language,
"short_name": user.short_name,
"is_first_connection": True,
}
@@ -489,9 +490,37 @@ def test_api_users_retrieve_me_authenticated_empty_name():
"full_name": "test_foo",
"language": user.language,
"short_name": "test_foo",
"is_first_connection": True,
}
def test_api_users_retrieve_me_onboarding():
"""
On first connection of a new user, the "is_first_connection" flag should be True.
The frontend can use this flag to trigger specific behavior for first time users,
e.g. showing an onboarding message, and update the flag to False after onboarding is done.
"""
user = factories.UserFactory()
client = APIClient()
client.force_login(user)
# First request: flag should be True
first_response = client.get("/api/v1.0/users/me/")
assert first_response.status_code == 200
assert first_response.json()["is_first_connection"] is True
update_response = client.post("/api/v1.0/users/onboarding-done/")
assert update_response.status_code == 200
# Second request: flag should be False
second_response = client.get("/api/v1.0/users/me/")
assert second_response.status_code == 200
assert second_response.json()["is_first_connection"] is False
def test_api_users_retrieve_anonymous():
"""Anonymous users should not be allowed to retrieve a user."""
client = APIClient()
@@ -79,7 +79,7 @@ def test_models_invitations_is_expired():
assert expired_invitation.is_expired is True
def test_models_invitationd_new_userd_convert_invitations_to_accesses():
def test_models_invitations_new_user_convert_invitations_to_accesses():
"""
Upon creating a new user, invitations linked to the email
should be converted to accesses and then deleted.
@@ -114,7 +114,7 @@ def test_models_invitationd_new_userd_convert_invitations_to_accesses():
).exists() # the other invitation remains
def test_models_invitationd_new_user_filter_expired_invitations():
def test_models_invitations_new_user_filter_expired_invitations():
"""
Upon creating a new identity, valid invitations should be converted into accesses
and expired invitations should remain unchanged.
@@ -145,7 +145,7 @@ def test_models_invitationd_new_user_filter_expired_invitations():
@pytest.mark.parametrize("num_invitations, num_queries", [(0, 3), (1, 7), (20, 7)])
def test_models_invitationd_new_userd_user_creation_constant_num_queries(
def test_models_invitations_new_userd_user_creation_constant_num_queries(
django_assert_num_queries, num_invitations, num_queries
):
"""
+68 -31
View File
@@ -3,6 +3,7 @@ Unit tests for the User model
"""
import uuid
from concurrent.futures import ThreadPoolExecutor
from unittest.mock import patch
from django.core.exceptions import ValidationError
@@ -89,24 +90,19 @@ def test_models_users_handle_onboarding_documents_access_empty_setting():
assert models.DocumentAccess.objects.filter(user=user).count() == 0
def test_models_users_handle_onboarding_documents_access_with_single_document():
def test_models_users_handle_onboarding_document_link_trace_with_single_document():
"""
When USER_ONBOARDING_DOCUMENTS has a valid document ID,
an access should be created for the new user with the READER role.
a LinkTrace should be created for the new user.
The document should be pinned as a favorite for the user.
"""
document = factories.DocumentFactory()
document = factories.DocumentFactory(link_reach=models.LinkReachChoices.PUBLIC)
with override_settings(USER_ONBOARDING_DOCUMENTS=[str(document.id)]):
user = factories.UserFactory()
assert (
models.DocumentAccess.objects.filter(user=user, document=document).count() == 1
)
access = models.DocumentAccess.objects.get(user=user, document=document)
assert access.role == models.RoleChoices.READER
assert models.LinkTrace.objects.filter(user=user, document=document).count() == 1
user_favorites = models.DocumentFavorite.objects.filter(user=user)
assert user_favorites.count() == 1
@@ -121,9 +117,15 @@ def test_models_users_handle_onboarding_documents_access_with_multiple_documents
All accesses should have the READER role.
All documents should be pinned as favorites for the user.
"""
document1 = factories.DocumentFactory(title="Document 1")
document2 = factories.DocumentFactory(title="Document 2")
document3 = factories.DocumentFactory(title="Document 3")
document1 = factories.DocumentFactory(
title="Document 1", link_reach=models.LinkReachChoices.PUBLIC
)
document2 = factories.DocumentFactory(
title="Document 2", link_reach=models.LinkReachChoices.AUTHENTICATED
)
document3 = factories.DocumentFactory(
title="Document 3", link_reach=models.LinkReachChoices.PUBLIC
)
with override_settings(
USER_ONBOARDING_DOCUMENTS=[
@@ -134,15 +136,12 @@ def test_models_users_handle_onboarding_documents_access_with_multiple_documents
):
user = factories.UserFactory()
user_accesses = models.DocumentAccess.objects.filter(user=user)
assert user_accesses.count() == 3
link_traces = models.LinkTrace.objects.filter(user=user)
assert link_traces.count() == 3
assert models.DocumentAccess.objects.filter(user=user, document=document1).exists()
assert models.DocumentAccess.objects.filter(user=user, document=document2).exists()
assert models.DocumentAccess.objects.filter(user=user, document=document3).exists()
for access in user_accesses:
assert access.role == models.RoleChoices.READER
assert models.LinkTrace.objects.filter(user=user, document=document1).exists()
assert models.LinkTrace.objects.filter(user=user, document=document2).exists()
assert models.LinkTrace.objects.filter(user=user, document=document3).exists()
user_favorites = models.DocumentFavorite.objects.filter(user=user)
assert user_favorites.count() == 3
@@ -166,7 +165,7 @@ def test_models_users_handle_onboarding_documents_access_with_invalid_document_i
call_args = mock_logger.warning.call_args
assert "Onboarding document with id" in call_args[0][0]
assert models.DocumentAccess.objects.filter(user=user).count() == 0
assert models.LinkTrace.objects.filter(user=user).count() == 0
def test_models_users_handle_onboarding_documents_access_duplicate_prevention():
@@ -174,16 +173,26 @@ def test_models_users_handle_onboarding_documents_access_duplicate_prevention():
If the same document is listed multiple times in USER_ONBOARDING_DOCUMENTS,
it should only create one access (or handle duplicates gracefully).
"""
document = factories.DocumentFactory()
document = factories.DocumentFactory(link_reach=models.LinkReachChoices.PUBLIC)
with override_settings(
USER_ONBOARDING_DOCUMENTS=[str(document.id), str(document.id)]
):
user = factories.UserFactory()
user_accesses = models.DocumentAccess.objects.filter(user=user, document=document)
link_traces = models.LinkTrace.objects.filter(user=user, document=document)
assert user_accesses.count() >= 1
assert link_traces.count() == 1
def test_models_users_handle_onboarding_documents_on_restricted_document_is_not_allowed():
"""On-boarding document can be used when restricted"""
document = factories.DocumentFactory(link_reach=models.LinkReachChoices.RESTRICTED)
with override_settings(USER_ONBOARDING_DOCUMENTS=[str(document.id)]):
user = factories.UserFactory()
assert not models.LinkTrace.objects.filter(user=user, document=document).exists()
@override_settings(USER_ONBOARDING_SANDBOX_DOCUMENT=None)
@@ -272,7 +281,9 @@ def test_models_users_duplicate_onboarding_sandbox_document_integration_with_oth
Verify that sandbox creation works alongside other onboarding methods.
"""
template_document = factories.DocumentFactory(title="Getting started with Docs")
onboarding_doc = factories.DocumentFactory(title="Onboarding Document")
onboarding_doc = factories.DocumentFactory(
title="Onboarding Document", link_reach=models.LinkReachChoices.AUTHENTICATED
)
with override_settings(
USER_ONBOARDING_SANDBOX_DOCUMENT=str(template_document.id),
@@ -284,11 +295,37 @@ def test_models_users_duplicate_onboarding_sandbox_document_integration_with_oth
creator=user, title="Getting started with Docs"
).first()
user_accesses = models.DocumentAccess.objects.filter(user=user)
assert user_accesses.count() == 2
assert models.DocumentAccess.objects.filter(user=user).count() == 1
assert models.LinkTrace.objects.filter(user=user).count() == 1
sandbox_access = user_accesses.get(document=sandbox_doc)
onboarding_access = user_accesses.get(document=onboarding_doc)
assert models.DocumentAccess.objects.filter(
document=sandbox_doc, user=user, role=models.RoleChoices.OWNER
).exists()
assert models.LinkTrace.objects.filter(document=onboarding_doc, user=user).exists()
assert sandbox_access.role == models.RoleChoices.OWNER
assert onboarding_access.role == models.RoleChoices.READER
@pytest.mark.django_db(transaction=True)
def test_models_users_duplicate_onboarding_sandbox_race_condition():
"""
It should be possible to create several documents at the same time
without causing any race conditions or data integrity issues.
"""
def create_user():
return factories.UserFactory()
template_document = factories.DocumentFactory(title="Getting started with Docs")
with (
override_settings(
USER_ONBOARDING_SANDBOX_DOCUMENT=str(template_document.id),
),
ThreadPoolExecutor(max_workers=2) as executor,
):
future1 = executor.submit(create_user)
future2 = executor.submit(create_user)
user1 = future1.result()
user2 = future2.result()
assert isinstance(user1, models.User)
assert isinstance(user2, models.User)
+36
View File
@@ -28,3 +28,39 @@ def test_invalid_settings_oidc_email_configuration():
"Both OIDC_FALLBACK_TO_EMAIL_FOR_IDENTIFICATION and "
"OIDC_ALLOW_DUPLICATE_EMAILS cannot be set to True simultaneously. "
)
def test_settings_psycopg_pool_not_enabled():
"""
Test that not changing DB_PSYCOPG_POOL_ENABLED should not configure psycopg in the DATABASES
settings.
"""
class TestSettings(Base):
"""Fake test settings without enabling psycopg"""
TestSettings.post_setup()
assert TestSettings.DATABASES["default"].get("OPTIONS") == {}
def test_settings_psycopg_pool_enabled(monkeypatch):
"""
Test when DB_PSYCOPG_POOL_ENABLED is set to True, the psycopg pool options should be present
in the DATABASES OPTIONS.
"""
monkeypatch.setenv("DB_PSYCOPG_POOL_ENABLED", "True")
class TestSettings(Base):
"""Fake test settings without enabling psycopg"""
TestSettings.post_setup()
assert TestSettings.DATABASES["default"].get("OPTIONS") == {
"pool": {
"min_size": 4,
"max_size": None,
"timeout": 3,
}
}
@@ -138,6 +138,7 @@ def create_demo(stdout):
password="!",
is_superuser=False,
is_active=True,
is_first_connection=False,
is_staff=False,
short_name=first_name,
full_name=f"{first_name:s} {random.choice(last_names):s}",
@@ -194,6 +195,7 @@ def create_demo(stdout):
password="!",
is_superuser=False,
is_active=True,
is_first_connection=False,
is_staff=False,
language=dev_user["language"] or random.choice(languages),
)
@@ -158,5 +158,9 @@
"href": "/assets/favicon-dark.png",
"type": "image/png"
}
},
"onboarding": {
"enabled": true,
"learn_more_url": ""
}
}
+31
View File
@@ -99,6 +99,7 @@ class Base(Configuration):
"localhost", environ_name="DB_HOST", environ_prefix=None
),
"PORT": values.Value(5432, environ_name="DB_PORT", environ_prefix=None),
# Psycopg pool can be configured in the post_setup method
}
}
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
@@ -999,6 +1000,36 @@ class Base(Configuration):
"OIDC_ALLOW_DUPLICATE_EMAILS cannot be set to True simultaneously. "
)
psycopg_pool_enabled = values.BooleanValue(
False, environ_name="DB_PSYCOPG_POOL_ENABLED", environ_prefix=""
)
if psycopg_pool_enabled:
cls.DATABASES["default"].update(
{
"OPTIONS": {
# https://www.psycopg.org/psycopg3/docs/api/pool.html#psycopg_pool.ConnectionPool
"pool": {
"min_size": values.IntegerValue(
4,
environ_name="DB_PSYCOPG_POOL_MIN_SIZE",
environ_prefix=None,
),
"max_size": values.IntegerValue(
None,
environ_name="DB_PSYCOPG_POOL_MAX_SIZE",
environ_prefix=None,
),
"timeout": values.IntegerValue(
3,
environ_name="DB_PSYCOPG_POOL_TIMEOUT",
environ_prefix=None,
),
}
},
}
)
class Build(Base):
"""Settings used when the application is built.
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Breton\n"
"Language: br_FR\n"
@@ -58,24 +58,24 @@ msgstr "Kuzhet"
msgid "Favorite"
msgstr "Sinedoù"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
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:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
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:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "Ar vaezienn-mañ a zo rekis."
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "eilenn {title}"
@@ -231,106 +231,114 @@ msgstr "oberiant"
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "Ma rank bezañ tretet an implijer-mañ evel oberiant. Diziuzit an dra-mañ e-plas dilemel kontoù."
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "implijer"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "implijerien"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "titl"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "bomm"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Restr"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Restroù"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Restr hep titl"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Digeriñ"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} en deus rannet ur restr ganeoc'h!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr "{name} en deus pedet ac'hanoc'h gant ar rol \"{role}\" war ar restr da-heul:"
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} en deus rannet ur restr ganeoc'h: {title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Roud liamm ar restr/an implijer"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Roudoù liamm ar restr/an implijer"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "Ur roud liamm a zo dija evit an restr/an implijer."
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Restr muiañ-karet"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Restroù muiañ-karet"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr "Ar restr-mañ a zo ur restr muiañ karet gant an implijer-mañ."
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Liamm restr/implijer"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Liammoù restr/implijer"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "An implijer-mañ a zo dija er restr-mañ."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Ar skipailh-mañ a zo dija en restr-mañ."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr "An implijer pe ar skipailh a rank bezañ termenet, ket an daou avat."
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Goulenn tizhout ar restr"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Goulennoù tizhout ar restr"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr "An implijer en deus goulennet tizhout ar restr-mañ."
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} en defe c'hoant da dizhout ar restr-mañ!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} en defe c'hoant da dizhout ar restr da-heul:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} en defe c'hoant da dizhout ar restr: {title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "postel"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Pedadenn d'ur restr"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Pedadennoù d'ur restr"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Ar postel-mañ a zo liammet ouzh un implijer enskrivet."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Favorit"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Ein neues Dokument wurde in Ihrem Namen erstellt!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "Sie sind Besitzer eines neuen Dokuments:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "Kopie von {title}"
@@ -231,106 +231,114 @@ msgstr "aktiviert"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "Benutzer"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "Benutzer"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "Titel"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "Auszug"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Dokument"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Dokumente"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Unbenanntes Dokument"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Öffnen"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} hat ein Dokument mit Ihnen geteilt!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, 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:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Dokument/Benutzer Linkverfolgung"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Dokument/Benutzer Linkverfolgung"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
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:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Dokumentenfavorit"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Dokumentfavoriten"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
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:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Dokument/Benutzerbeziehung"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Dokument/Benutzerbeziehungen"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Dieser Benutzer befindet sich bereits in diesem Dokument."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Dieses Team befindet sich bereits in diesem Dokument."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
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:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "E-Mail-Adresse"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Einladung zum Dokument"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Dokumenteinladungen"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Diese E-Mail ist bereits einem registrierten Benutzer zugeordnet."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: English\n"
"Language: en_US\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr ""
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr ""
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr ""
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr ""
@@ -231,106 +231,114 @@ msgstr ""
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr ""
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr ""
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr ""
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr ""
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr ""
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr ""
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr ""
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr ""
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr ""
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr ""
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr ""
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr ""
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr ""
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr ""
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr ""
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr ""
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr ""
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr ""
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr ""
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr ""
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr ""
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr ""
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr ""
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr ""
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr ""
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Favorito"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "¡Un nuevo documento se ha creado por ti!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
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:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "copia de {title}"
@@ -231,106 +231,114 @@ msgstr "activo"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "usuario"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "usuarios"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "título"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "resumen"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Documento"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Documentos"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Documento sin título"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Abrir"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "¡{name} ha compartido un documento contigo!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} ha compartido un documento contigo: {title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Traza del enlace de documento/usuario"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Trazas del enlace de documento/usuario"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
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:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Documento favorito"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Documentos favoritos"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
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:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Relación documento/usuario"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Relaciones documento/usuario"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Este usuario ya forma parte del documento."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Este equipo ya forma parte del documento."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
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:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Solicitud de acceso"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Solicitud de accesos"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
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:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "¡{name} desea acceder a un documento!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} desea acceso al siguiente documento:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} está pidiendo acceso al documento: {title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "dirección de correo electrónico"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Invitación al documento"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Invitaciones a documentos"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Este correo electrónico está asociado a un usuario registrado."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
@@ -58,24 +58,24 @@ msgstr "Masqué"
msgid "Favorite"
msgstr "Favoris"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Un nouveau document a été créé pour vous !"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
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:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "Ce champ est obligatoire."
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr "La portée du lien '%(link_reach)s' n'est pas autorisée en fonction de la configuration du document parent."
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "copie de {title}"
@@ -231,54 +231,62 @@ msgstr "actif"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr "état de la première connexion"
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr "Si l'utilisateur a terminé le processus de première connexion."
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "utilisateur"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "utilisateurs"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr "Adresse email active"
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr "Adresse email à désactiver"
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr "Identifiant unique dans le fichier source"
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr "En attente"
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr "Prêt"
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr "Terminé"
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr "Erreur"
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr "rapprochement de l'utilisateur"
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr "rapprochements de l'utilisateur"
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
@@ -286,54 +294,54 @@ msgstr "Vous avez demandé un rapprochement de vos comptes utilisateur sur Docs.
" Pour confirmer que vous êtes bien à l'origine de cette demande\n"
" et que cet e-mail vous appartient :"
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr "Confirmez en cliquant sur le lien pour commencer le rapprochement"
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr "Cliquez ici"
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr "Confirmer"
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr "Votre demande de rapprochement a été traitée.\n"
" De nouveaux documents sont probablement associés à votre compte :"
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr "Vos comptes ont été fusionnés"
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr "Cliquez ici pour voir"
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr "Voir mes documents"
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr "Fichier CSV"
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr "En cours"
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr "importation CSV de rapprochement utilisateur"
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr "importations CSV de rapprochement utilisateur"
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -346,171 +354,171 @@ msgstr "Votre demande de rapprochement n'a pas abouti.\n"
" Veuillez vérifier qu'il n'y a pas de fautes de frappe.\n"
" Vous pouvez envoyer une nouvelle demande avec des adresses e-mail valides."
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr "Le rapprochement de vos comptes Docs n'est pas terminé"
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr "Faire une nouvelle demande"
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "titre"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "extrait"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Document"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Documents"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Document sans titre"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Ouvrir"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} a partagé un document avec vous!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, 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:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Trace du lien document/utilisateur"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Traces du lien document/utilisateur"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
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:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Document favori"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Documents favoris"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
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:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Relation document/utilisateur"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Relations document/utilisateur"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Cet utilisateur est déjà dans ce document."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Cette équipe est déjà dans ce document."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
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:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Demande d'accès au document"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Demande d'accès au document"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
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:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} souhaiterait accéder au document suivant !"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, 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:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, 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:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr "Conversation"
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr "Conversations"
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr "Anonyme"
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr "Commentaire"
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr "Commentaires"
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr "Cet émoji a déjà été réagi à ce commentaire."
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr "Réaction"
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr "Réactions"
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "adresse e-mail"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Invitation à un document"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Invitations à un document"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Cette adresse email est déjà associée à un utilisateur inscrit."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Preferiti"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Un nuovo documento è stato creato a tuo nome!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "Sei ora proprietario di un nuovo documento:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "copia di {title}"
@@ -231,106 +231,114 @@ msgstr "attivo"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "utente"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "utenti"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "titolo"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr ""
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Documento"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Documenti"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Documento senza titolo"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Apri"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} ha condiviso un documento con te!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, 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:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr ""
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr ""
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr ""
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Documento preferito"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Documenti preferiti"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr ""
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr ""
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Questo utente è già presente in questo documento."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Questo team è già presente in questo documento."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr ""
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "indirizzo e-mail"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Invito al documento"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Inviti al documento"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Questa email è già associata a un utente registrato."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
@@ -58,24 +58,24 @@ msgstr "Gemaskeerd"
msgid "Favorite"
msgstr "Favoriet"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Een nieuw document is namens u gemaakt!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "U heeft eigenaarschap van een nieuw document gekregen:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "Dit veld is verplicht."
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr "Link bereik '%(link_reach)s' is niet toegestaan op basis van bovenliggende documentconfiguratie."
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "kopie van {title}"
@@ -231,54 +231,62 @@ msgstr "actief"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "gebruiker"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "gebruikers"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr "Actieve e-mail adres"
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr "E-mailadres om te deactiveren"
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr "Unieke ID in het bronbestand"
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr "In behandeling"
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr "Klaar"
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr "Klaar"
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr "Fout"
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr "gebruiker samenvoegen"
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr "gebruikers samenvoegen"
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
@@ -286,54 +294,54 @@ msgstr "Je hebt gevraagd om een samenvoeging van je gebruikersaccounts op Docs.\
" Om te bevestigen dat u degene bent die het verzoek\n"
" heeft geïnitieerd en dat deze e-mail van u is:"
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr "Bevestig door te klikken op de link om de samenvoeging te starten"
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr "Klik hier"
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr "Bevestig"
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr "Uw samenvoegingsverzoek is verwerkt.\n"
" Nieuwe documenten worden waarschijnlijk geassocieerd met uw account:"
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr "Je accounts zijn samengevoegd"
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr "Klik hier om te bekijken"
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr "Mijn documenten bekijken"
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr "CSV bestand"
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr "Bezig"
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr "gebruiker samenvoeging CSV import"
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr "gebruiker reconciliation CSV imports"
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -346,171 +354,171 @@ msgstr "Uw verzoek tot verzoening is mislukt.\n"
" Controleer op typefouten.\n"
" U kunt een ander verzoek indienen met de geldige e-mailadressen."
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr "Samenvoeging van je Docs accounts is niet voltooid"
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr "Maak een nieuw verzoek"
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "titel"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "uittreksel"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Document"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Documenten"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Naamloos Document"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Open"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} heeft een document met u gedeeld!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, 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:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Document/gebruiker link"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Document/gebruiker link"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "Een link bestaat al voor dit document/deze gebruiker."
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Document favoriet"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Document favorieten"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr "Dit document is al in gebruik als favoriet door dezelfde gebruiker."
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Document/gebruiker relatie"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Document/gebruiker relaties"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "De gebruiker bestaat al in dit document."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Dit team bestaat al in dit document."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
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:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Document verzoekt om toegang"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Document verzoekt om toegangen"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr "Deze gebruiker heeft al om toegang tot dit document gevraagd."
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} verzoekt toegang tot een document!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} verzoekt toegang tot het volgende document:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} verzoekt toegang tot het document: {title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr "Kanaal"
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr "Kanalen"
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr "Anoniem"
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr "Reactie"
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr "Reacties"
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr "Deze emoji is al op deze opmerking gereageerd."
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr "Reactie"
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr "Reacties"
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "e-mailadres"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Document uitnodiging"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Document uitnodigingen"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Deze email is al geassocieerd met een geregistreerde gebruiker."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Language: pt_PT\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Favorito"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Um novo documento foi criado em seu nome!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "A propriedade de um novo documento foi concedida a você:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "cópia de {title}"
@@ -231,106 +231,114 @@ msgstr ""
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr ""
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr ""
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr ""
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr ""
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr ""
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr ""
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr ""
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr ""
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr ""
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr ""
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr ""
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr ""
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr ""
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr ""
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr ""
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr ""
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr ""
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr ""
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr ""
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr ""
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr ""
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr ""
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr ""
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr ""
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr ""
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -58,24 +58,24 @@ msgstr "Скрытый"
msgid "Favorite"
msgstr "Избранное"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Новый документ был создан от вашего имени!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "Вы назначены владельцем для нового документа:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "Это поле обязательное."
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr "Доступ по ссылке '%(link_reach)s' запрещён в соответствии с настройками родительского документа."
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "копия {title}"
@@ -231,54 +231,62 @@ msgstr "активный"
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "Должен ли пользователь рассматриваться как активный. Альтернатива удалению учётных записей."
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr "состояние первого подключения"
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr "Завершил ли пользователь процесс первого соединения."
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "пользователь"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "пользователи"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr "Активный адрес электронной почты"
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr "Адрес электронной почты для деактивации"
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr "Уникальный идентификатор в исходном файле"
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr "В обработке"
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr "Готово"
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr "Выполнено"
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr "Ошибка"
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr "сверка данных пользователя"
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr "сверки данных пользователя"
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
@@ -286,54 +294,54 @@ msgstr "Вы запросили сверку учётных записей по
" Чтобы подтвердить факт того, что вы являетесь инициатором запроса\n"
" и что этот адрес принадлежит вам:"
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr "Чтобы начать сверку, подтвердите это, нажав на ссылку"
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr "Нажмите здесь"
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr "Подтверждение"
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr "Ваш запрос на сверку был обработан.\n"
" Новые документы, вероятно, связаны с вашей учётной записью:"
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr "Ваши учётные записи были объединены"
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr "Нажмите здесь, чтобы просмотреть"
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr "Просмотреть мои документы"
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr "CSV-файл"
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr "Выполнение"
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr "импорт из CSV сверки пользователей"
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr "импорты из CSV сверки пользователями"
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -346,171 +354,171 @@ msgstr "Ваш запрос на сверку не удался.\n"
" Пожалуйста, проверьте, нет ли в них опечаток.\n"
" Вы можете отправить ещё один запрос с действительными адресами электронной почты."
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr "Сверка ваших учётных записей Docs не завершена"
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr "Создать новый запрос"
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "заголовок"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "отрывок"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Документ"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Документы"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Безымянный документ"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Открыть"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} делится с вами документом!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr "{name} приглашает вас присоединиться к следующему документу с ролью \"{role}\":"
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} делится с вами документом: {title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Трассировка связи документ/пользователь"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Трассировка связей документ/пользователь"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "Для этого документа/пользователя уже существует трассировка ссылки."
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Избранный документ"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Избранные документы"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr "Этот документ уже помечен как избранный для этого пользователя."
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Отношение документ/пользователь"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Отношения документ/пользователь"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Этот пользователь уже имеет доступ к этому документу."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Эта команда уже имеет доступ к этому документу."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr "Может быть выбран либо пользователь, либо команда, но не оба варианта сразу."
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Документ запрашивает доступ"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Документ запрашивает доступы"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr "Этот пользователь уже запросил доступ к этому документу."
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} хочет получить доступ к документу!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} хочет получить доступ к следующему документу:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} запрашивает доступ к документу: {title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr "Обсуждение"
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr "Обсуждения"
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr "Аноним"
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr "Комментарий"
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr "Комментарии"
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr "Этот эмодзи уже использован в этом комментарии."
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr "Реакция"
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr "Реакции"
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "адрес электронной почты"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Приглашение для документа"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Приглашения для документов"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Этот адрес уже связан с зарегистрированным пользователем."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Language: sl_SI\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Priljubljena"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
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:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
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:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr ""
@@ -231,106 +231,114 @@ msgstr "aktivni"
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:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "uporabnik"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "uporabniki"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "naslov"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "odlomek"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Dokument"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Dokumenti"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Dokument brez naslova"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Odpri"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} je delil dokument z vami!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, 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:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} je delil dokument z vami: {title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Dokument/sled povezave uporabnika"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Sledi povezav dokumenta/uporabnika"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "Za ta dokument/uporabnika že obstaja sled povezave."
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Priljubljeni dokument"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Priljubljeni dokumenti"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
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:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Odnos dokument/uporabnik"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Odnosi dokument/uporabnik"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Ta uporabnik je že v tem dokumentu."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Ta ekipa je že v tem dokumentu."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
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:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "elektronski naslov"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Vabilo na dokument"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Vabila na dokument"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Ta e-poštni naslov je že povezan z registriranim uporabnikom."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr "Favoriter"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Ett nytt dokument skapades åt dig!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
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:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr ""
@@ -231,106 +231,114 @@ msgstr "aktiv"
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr ""
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr ""
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr ""
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr ""
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr ""
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr ""
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr ""
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr ""
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Öppna"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr ""
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr ""
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr ""
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr ""
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr ""
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr ""
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr ""
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr ""
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr ""
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr ""
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr ""
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr ""
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "e-postadress"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Bjud in dokument"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Inbjudningar dokument"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Denna e-postadress är redan associerad med en registrerad användare."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -58,24 +58,24 @@ msgstr ""
msgid "Favorite"
msgstr ""
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr ""
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr ""
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr ""
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr ""
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr ""
@@ -231,106 +231,114 @@ msgstr ""
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr ""
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr ""
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr ""
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr ""
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr ""
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr ""
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr ""
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr ""
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr ""
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr ""
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr ""
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr ""
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr ""
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr ""
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr ""
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr ""
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr ""
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr ""
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr ""
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr ""
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr ""
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr ""
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr ""
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr ""
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr ""
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr ""
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr ""
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr ""
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr ""
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr ""
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr ""
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr ""
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr ""
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr ""
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr ""
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr ""
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr ""
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr ""
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr ""
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr ""
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr ""
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
@@ -58,24 +58,24 @@ msgstr "Приховано"
msgid "Favorite"
msgstr "Обране"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "Новий документ був створений від вашого імені!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "Ви тепер є власником нового документа:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "Це поле є обов’язковим."
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr "Доступ до посилання '%(link_reach)s' заборонено на основі конфігурації батьківського документа."
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "копія {title}"
@@ -231,54 +231,62 @@ msgstr "активний"
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "Чи слід ставитися до цього користувача як до активного. Зніміть вибір замість видалення облікового запису."
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr "стан першого з'єднання"
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr "Чи завершив користувач перший процес з'єднання."
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "користувач"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "користувачі"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr "Активна електронна адреса"
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr "Електронна адреса, що буде деактивована"
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr "Унікальний ідентифікатор у вихідному файлі"
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr "В очікуванні"
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr "Готово"
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr "Виконано"
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr "Помилка"
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr "узгодження користувачів"
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr "узгодження користувачів"
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
@@ -286,54 +294,54 @@ msgstr "Ви запросили узгодження своїх облікови
" Щоб підтвердити, що саме ви ініціювали запит\n"
" і що ця електронна адреса належить вам:"
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr "Підтвердіть, натиснувши на посилання, щоб почати узгодження"
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr "Натисніть тут"
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr "Підтвердження"
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr "Ваш запит на узгодження оброблено.\n"
" Нові документи, ймовірно, пов'язані з вашим обліковим записом:"
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr "Ваші облікові записи були об'єднані"
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr "Натисніть тут, щоб переглянути"
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr "Переглянути мої документи"
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr "CSV-файл"
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr "Виконується"
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr "імпорт CSV для узгодження користувачів"
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr "імпорт CSV для узгодження користувачів"
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -346,171 +354,171 @@ msgstr "Ваш запит на узгодження не був виконани
" Перевірте, чи немає помилок.\n"
" Ви можете надіслати інший запит із дійсними адресами електронної пошти."
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr "Узгодження ваших облікових записів не завершено"
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr "Зробити новий запит"
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "заголовок"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "уривок"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "Документ"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "Документи"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "Документ без назви"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "Відкрити"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} ділиться з вами документом!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr "{name} запрошує вас для роботи з документом із роллю \"{role}\":"
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} ділиться з вами документом: {title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "Трасування посилання Документ/користувач"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "Трасування посилань Документ/користувач"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "Відстеження вже існуючих посилань для цього документа/користувача."
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "Обраний документ"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "Обрані документи"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr "Цей документ вже вказаний як обраний для одного користувача."
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "Відносини документ/користувач"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "Відносини документ/користувач"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "Цей користувач вже має доступ до цього документу."
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "Ця команда вже має доступ до цього документа."
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr "Вкажіть користувача або команду, а не обох."
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "Запит доступу до документа"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "Запит доступу для документа"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr "Цей користувач вже попросив доступ до цього документа."
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} хоче отримати доступ до документа!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} бажає отримати доступ до наступного документа:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} запитує доступ до документа: {title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr "Обговорення"
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr "Обговорення"
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr "Анонім"
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr "Коментар"
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr "Коментарі"
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr "Цим емодзі вже відреагували на цей коментар."
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr "Реакція"
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr "Реакції"
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "електронна адреса"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "Запрошення до редагування документа"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "Запрошення до редагування документів"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "Ця електронна пошта вже пов'язана з зареєстрованим користувачем."
+85 -77
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lasuite-docs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-06 09:37+0000\n"
"PO-Revision-Date: 2026-03-09 14:02\n"
"POT-Creation-Date: 2026-03-12 13:31+0000\n"
"PO-Revision-Date: 2026-03-13 16:53\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -58,24 +58,24 @@ msgstr "已隱藏"
msgid "Favorite"
msgstr "我的最愛"
#: build/lib/core/api/serializers.py:513 core/api/serializers.py:513
#: build/lib/core/api/serializers.py:526 core/api/serializers.py:526
msgid "A new document was created on your behalf!"
msgstr "已代表您建立新文件!"
#: build/lib/core/api/serializers.py:517 core/api/serializers.py:517
#: build/lib/core/api/serializers.py:530 core/api/serializers.py:530
msgid "You have been granted ownership of a new document:"
msgstr "您已獲得新文件的所有權:"
#: build/lib/core/api/serializers.py:553 core/api/serializers.py:553
#: build/lib/core/api/serializers.py:566 core/api/serializers.py:566
msgid "This field is required."
msgstr "此欄位為必填。"
#: build/lib/core/api/serializers.py:564 core/api/serializers.py:564
#: build/lib/core/api/serializers.py:577 core/api/serializers.py:577
#, python-format
msgid "Link reach '%(link_reach)s' is not allowed based on parent document configuration."
msgstr "根據父文件設定,不允許連結範圍「%(link_reach)s」。"
#: build/lib/core/api/viewsets.py:1279 core/api/viewsets.py:1279
#: build/lib/core/api/viewsets.py:1298 core/api/viewsets.py:1298
#, python-brace-format
msgid "copy of {title}"
msgstr "{title} 的副本"
@@ -231,106 +231,114 @@ msgstr "啟用"
msgid "Whether this user should be treated as active. Unselect this instead of deleting accounts."
msgstr "此使用者是否應被視為處於啟用狀態。請取消勾選此項而非刪除帳號。"
#: build/lib/core/models.py:204 core/models.py:204
#: build/lib/core/models.py:197 core/models.py:197
msgid "first connection status"
msgstr ""
#: build/lib/core/models.py:199 core/models.py:199
msgid "Whether the user has completed the first connection process."
msgstr ""
#: build/lib/core/models.py:209 core/models.py:209
msgid "user"
msgstr "使用者"
#: build/lib/core/models.py:205 core/models.py:205
#: build/lib/core/models.py:210 core/models.py:210
msgid "users"
msgstr "使用者"
#: build/lib/core/models.py:360 core/models.py:360
#: build/lib/core/models.py:378 core/models.py:378
msgid "Active email address"
msgstr ""
#: build/lib/core/models.py:361 core/models.py:361
#: build/lib/core/models.py:379 core/models.py:379
msgid "Email address to deactivate"
msgstr ""
#: build/lib/core/models.py:388 core/models.py:388
#: build/lib/core/models.py:406 core/models.py:406
msgid "Unique ID in the source file"
msgstr ""
#: build/lib/core/models.py:394 build/lib/core/models.py:692 core/models.py:394
#: core/models.py:692
#: build/lib/core/models.py:412 build/lib/core/models.py:710 core/models.py:412
#: core/models.py:710
msgid "Pending"
msgstr ""
#: build/lib/core/models.py:395 core/models.py:395
#: build/lib/core/models.py:413 core/models.py:413
msgid "Ready"
msgstr ""
#: build/lib/core/models.py:396 build/lib/core/models.py:694 core/models.py:396
#: core/models.py:694
#: build/lib/core/models.py:414 build/lib/core/models.py:712 core/models.py:414
#: core/models.py:712
msgid "Done"
msgstr ""
#: build/lib/core/models.py:397 build/lib/core/models.py:695 core/models.py:397
#: core/models.py:695
#: build/lib/core/models.py:415 build/lib/core/models.py:713 core/models.py:415
#: core/models.py:713
msgid "Error"
msgstr ""
#: build/lib/core/models.py:405 core/models.py:405
#: build/lib/core/models.py:423 core/models.py:423
msgid "user reconciliation"
msgstr ""
#: build/lib/core/models.py:406 core/models.py:406
#: build/lib/core/models.py:424 core/models.py:424
msgid "user reconciliations"
msgstr ""
#: build/lib/core/models.py:644 core/models.py:644
#: build/lib/core/models.py:662 core/models.py:662
msgid "You have requested a reconciliation of your user accounts on Docs.\n"
" To confirm that you are the one who initiated the request\n"
" and that this email belongs to you:"
msgstr ""
#: build/lib/core/models.py:650 core/models.py:650
#: build/lib/core/models.py:668 core/models.py:668
msgid "Confirm by clicking the link to start the reconciliation"
msgstr ""
#: build/lib/core/models.py:655 build/lib/core/models.py:761 core/models.py:655
#: core/models.py:761
#: build/lib/core/models.py:673 build/lib/core/models.py:779 core/models.py:673
#: core/models.py:779
msgid "Click here"
msgstr ""
#: build/lib/core/models.py:656 core/models.py:656
#: build/lib/core/models.py:674 core/models.py:674
msgid "Confirm"
msgstr ""
#: build/lib/core/models.py:667 core/models.py:667
#: build/lib/core/models.py:685 core/models.py:685
msgid "Your reconciliation request has been processed.\n"
" New documents are likely associated with your account:"
msgstr ""
#: build/lib/core/models.py:672 core/models.py:672
#: build/lib/core/models.py:690 core/models.py:690
msgid "Your accounts have been merged"
msgstr ""
#: build/lib/core/models.py:677 core/models.py:677
#: build/lib/core/models.py:695 core/models.py:695
msgid "Click here to see"
msgstr ""
#: build/lib/core/models.py:678 core/models.py:678
#: build/lib/core/models.py:696 core/models.py:696
msgid "See my documents"
msgstr ""
#: build/lib/core/models.py:688 core/models.py:688
#: build/lib/core/models.py:706 core/models.py:706
msgid "CSV file"
msgstr ""
#: build/lib/core/models.py:693 core/models.py:693
#: build/lib/core/models.py:711 core/models.py:711
msgid "Running"
msgstr ""
#: build/lib/core/models.py:703 core/models.py:703
#: build/lib/core/models.py:721 core/models.py:721
msgid "user reconciliation CSV import"
msgstr ""
#: build/lib/core/models.py:704 core/models.py:704
#: build/lib/core/models.py:722 core/models.py:722
msgid "user reconciliation CSV imports"
msgstr ""
#: build/lib/core/models.py:748 core/models.py:748
#: build/lib/core/models.py:766 core/models.py:766
#, python-brace-format
msgid "Your request for reconciliation was unsuccessful.\n"
" Reconciliation failed for the following email addresses:\n"
@@ -339,171 +347,171 @@ msgid "Your request for reconciliation was unsuccessful.\n"
" You can submit another request with the valid email addresses."
msgstr ""
#: build/lib/core/models.py:756 core/models.py:756
#: build/lib/core/models.py:774 core/models.py:774
msgid "Reconciliation of your Docs accounts not completed"
msgstr ""
#: build/lib/core/models.py:762 core/models.py:762
#: build/lib/core/models.py:780 core/models.py:780
msgid "Make a new request"
msgstr ""
#: build/lib/core/models.py:861 core/models.py:861
#: build/lib/core/models.py:879 core/models.py:879
msgid "title"
msgstr "標題"
#: build/lib/core/models.py:862 core/models.py:862
#: build/lib/core/models.py:880 core/models.py:880
msgid "excerpt"
msgstr "摘要"
#: build/lib/core/models.py:911 core/models.py:911
#: build/lib/core/models.py:929 core/models.py:929
msgid "Document"
msgstr "文件"
#: build/lib/core/models.py:912 core/models.py:912
#: build/lib/core/models.py:930 core/models.py:930
msgid "Documents"
msgstr "文件"
#: build/lib/core/models.py:924 build/lib/core/models.py:1328
#: core/models.py:924 core/models.py:1328
#: build/lib/core/models.py:942 build/lib/core/models.py:1346
#: core/models.py:942 core/models.py:1346
msgid "Untitled Document"
msgstr "未命名文件"
#: build/lib/core/models.py:1329 core/models.py:1329
#: build/lib/core/models.py:1347 core/models.py:1347
msgid "Open"
msgstr "開啟"
#: build/lib/core/models.py:1364 core/models.py:1364
#: build/lib/core/models.py:1382 core/models.py:1382
#, python-brace-format
msgid "{name} shared a document with you!"
msgstr "{name} 與您分享了一份文件!"
#: build/lib/core/models.py:1368 core/models.py:1368
#: build/lib/core/models.py:1386 core/models.py:1386
#, python-brace-format
msgid "{name} invited you with the role \"{role}\" on the following document:"
msgstr "{name} 邀請您以「{role}」角色參與以下文件:"
#: build/lib/core/models.py:1374 core/models.py:1374
#: build/lib/core/models.py:1392 core/models.py:1392
#, python-brace-format
msgid "{name} shared a document with you: {title}"
msgstr "{name} 與您分享了一份文件:{title}"
#: build/lib/core/models.py:1475 core/models.py:1475
#: build/lib/core/models.py:1493 core/models.py:1493
msgid "Document/user link trace"
msgstr "文件/使用者連結追蹤"
#: build/lib/core/models.py:1476 core/models.py:1476
#: build/lib/core/models.py:1494 core/models.py:1494
msgid "Document/user link traces"
msgstr "文件/使用者連結追蹤"
#: build/lib/core/models.py:1482 core/models.py:1482
#: build/lib/core/models.py:1500 core/models.py:1500
msgid "A link trace already exists for this document/user."
msgstr "此文件/使用者已存在連結追蹤。"
#: build/lib/core/models.py:1505 core/models.py:1505
#: build/lib/core/models.py:1523 core/models.py:1523
msgid "Document favorite"
msgstr "文件收藏"
#: build/lib/core/models.py:1506 core/models.py:1506
#: build/lib/core/models.py:1524 core/models.py:1524
msgid "Document favorites"
msgstr "文件收藏"
#: build/lib/core/models.py:1512 core/models.py:1512
#: build/lib/core/models.py:1530 core/models.py:1530
msgid "This document is already targeted by a favorite relation instance for the same user."
msgstr "此使用者已將此文件加入收藏。"
#: build/lib/core/models.py:1534 core/models.py:1534
#: build/lib/core/models.py:1552 core/models.py:1552
msgid "Document/user relation"
msgstr "文件/使用者關聯"
#: build/lib/core/models.py:1535 core/models.py:1535
#: build/lib/core/models.py:1553 core/models.py:1553
msgid "Document/user relations"
msgstr "文件/使用者關聯"
#: build/lib/core/models.py:1541 core/models.py:1541
#: build/lib/core/models.py:1559 core/models.py:1559
msgid "This user is already in this document."
msgstr "此使用者已在此文件中。"
#: build/lib/core/models.py:1547 core/models.py:1547
#: build/lib/core/models.py:1565 core/models.py:1565
msgid "This team is already in this document."
msgstr "此團隊已在此文件中。"
#: build/lib/core/models.py:1553 core/models.py:1553
#: build/lib/core/models.py:1571 core/models.py:1571
msgid "Either user or team must be set, not both."
msgstr "必須設定使用者或團隊其中之一,不能同時設定兩者。"
#: build/lib/core/models.py:1704 core/models.py:1704
#: build/lib/core/models.py:1722 core/models.py:1722
msgid "Document ask for access"
msgstr "要求文件存取權"
#: build/lib/core/models.py:1705 core/models.py:1705
#: build/lib/core/models.py:1723 core/models.py:1723
msgid "Document ask for accesses"
msgstr "要求文件存取權"
#: build/lib/core/models.py:1711 core/models.py:1711
#: build/lib/core/models.py:1729 core/models.py:1729
msgid "This user has already asked for access to this document."
msgstr "此使用者已要求過存取此文件的權限。"
#: build/lib/core/models.py:1768 core/models.py:1768
#: build/lib/core/models.py:1786 core/models.py:1786
#, python-brace-format
msgid "{name} would like access to a document!"
msgstr "{name} 想要存取文件!"
#: build/lib/core/models.py:1772 core/models.py:1772
#: build/lib/core/models.py:1790 core/models.py:1790
#, python-brace-format
msgid "{name} would like access to the following document:"
msgstr "{name} 想要存取以下文件:"
#: build/lib/core/models.py:1778 core/models.py:1778
#: build/lib/core/models.py:1796 core/models.py:1796
#, python-brace-format
msgid "{name} is asking for access to the document: {title}"
msgstr "{name} 正要求存取文件:{title}"
#: build/lib/core/models.py:1820 core/models.py:1820
#: build/lib/core/models.py:1838 core/models.py:1838
msgid "Thread"
msgstr "對話串"
#: build/lib/core/models.py:1821 core/models.py:1821
#: build/lib/core/models.py:1839 core/models.py:1839
msgid "Threads"
msgstr "對話串"
#: build/lib/core/models.py:1824 build/lib/core/models.py:1876
#: core/models.py:1824 core/models.py:1876
#: build/lib/core/models.py:1842 build/lib/core/models.py:1894
#: core/models.py:1842 core/models.py:1894
msgid "Anonymous"
msgstr "匿名"
#: build/lib/core/models.py:1871 core/models.py:1871
#: build/lib/core/models.py:1889 core/models.py:1889
msgid "Comment"
msgstr "評論"
#: build/lib/core/models.py:1872 core/models.py:1872
#: build/lib/core/models.py:1890 core/models.py:1890
msgid "Comments"
msgstr "評論"
#: build/lib/core/models.py:1921 core/models.py:1921
#: build/lib/core/models.py:1939 core/models.py:1939
msgid "This emoji has already been reacted to this comment."
msgstr "此評論已標記過此表情符號。"
#: build/lib/core/models.py:1925 core/models.py:1925
#: build/lib/core/models.py:1943 core/models.py:1943
msgid "Reaction"
msgstr "回應"
#: build/lib/core/models.py:1926 core/models.py:1926
#: build/lib/core/models.py:1944 core/models.py:1944
msgid "Reactions"
msgstr "回應"
#: build/lib/core/models.py:1936 core/models.py:1936
#: build/lib/core/models.py:1954 core/models.py:1954
msgid "email address"
msgstr "電子郵件地址"
#: build/lib/core/models.py:1955 core/models.py:1955
#: build/lib/core/models.py:1973 core/models.py:1973
msgid "Document invitation"
msgstr "文件邀請"
#: build/lib/core/models.py:1956 core/models.py:1956
#: build/lib/core/models.py:1974 core/models.py:1974
msgid "Document invitations"
msgstr "文件邀請"
#: build/lib/core/models.py:1976 core/models.py:1976
#: build/lib/core/models.py:1994 core/models.py:1994
msgid "This email is already associated to a registered user."
msgstr "此電子郵件地址已與已註冊使用者關聯。"
+4 -4
View File
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "impress"
version = "4.7.0"
version = "4.8.1"
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
@@ -40,7 +40,7 @@ dependencies = [
"django-storages[s3]==1.14.6",
"django-timezone-field>=5.1",
"django<6.0.0",
"django-treebeard==5.0.5",
"django-treebeard<5.0.0",
"djangorestframework==3.16.1",
"drf_spectacular==0.29.0",
"dockerflow==2026.1.26",
@@ -48,13 +48,13 @@ dependencies = [
"factory_boy==3.3.3",
"gunicorn==25.1.0",
"jsonschema==4.26.0",
"langfuse==3.14.5",
"langfuse==3.11.2",
"lxml==6.0.2",
"markdown==3.10.2",
"mozilla-django-oidc==5.0.2",
"nested-multipart-parser==1.6.0",
"openai==2.24.0",
"psycopg[binary]==3.3.3",
"psycopg[binary,pool]==3.3.3",
"pycrdt==0.12.47",
"pydantic==2.12.5",
"pydantic-ai-slim[openai,logfire,web]==1.58.0",
@@ -271,6 +271,49 @@ test.describe('Doc Tree', () => {
await expect(rootMoreOptionsButton).toBeFocused();
});
test('Shift+Tab from resize handle returns focus to selected sub-doc', async ({
page,
browserName,
}) => {
const [docParent] = await createDoc(
page,
'doc-tree-shift-tab',
browserName,
1,
);
await verifyDocName(page, docParent);
const { name: docChild } = await createRootSubPage(
page,
browserName,
'doc-tree-shift-tab-child',
);
const selectedSubDoc = await getTreeRow(page, docChild);
await expect(selectedSubDoc).toHaveAttribute('aria-selected', 'true');
await selectedSubDoc.focus();
await expect(selectedSubDoc).toBeFocused();
await page.keyboard.press('Tab');
await expect(page.getByLabel('Open onboarding menu')).toBeFocused();
await page.keyboard.press('Tab');
await expect(
page.locator('[data-panel-resize-handle-id]').first(),
).toBeFocused();
await page.keyboard.press('Shift+Tab');
await expect(page.getByLabel('Open onboarding menu')).toBeFocused();
await page.keyboard.press('Shift+Tab');
await expect(selectedSubDoc).toBeFocused();
});
test('it updates the child icon from the tree', async ({
page,
browserName,
@@ -0,0 +1,179 @@
import { expect, test } from '@playwright/test';
import {
TestLanguage,
overrideConfig,
waitForLanguageSwitch,
} from './utils-common';
test.describe('Help feature', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/');
});
test.describe('Onboarding modal', () => {
test('Help menu not displayed if onboarding is disabled', async ({
page,
}) => {
await overrideConfig(page, {
theme_customization: {
onboarding: {
enabled: false,
},
},
});
await expect(page.getByRole('button', { name: 'New doc' })).toBeVisible();
await expect(
page.getByRole('button', { name: 'Open onboarding menu' }),
).toBeHidden();
});
test('opens onboarding modal from help menu and can navigate/close', async ({
page,
}) => {
await overrideConfig(page, {
theme_customization: {
onboarding: {
enabled: true,
learn_more_url: 'https://example.com/learn-more',
},
},
});
await page.getByRole('button', { name: 'Open onboarding menu' }).click();
await page.getByRole('menuitem', { name: 'Onboarding' }).click();
const modal = page.getByTestId('onboarding-modal');
await expect(modal).toBeVisible();
await expect(page.getByTestId('onboarding-step-0')).toHaveAttribute(
'tabindex',
'0',
);
await page.getByTestId('onboarding-next').click();
await expect(page.getByTestId('onboarding-step-1')).toHaveAttribute(
'tabindex',
'0',
);
await page.getByTestId('onboarding-step-2').click();
await expect(page.getByTestId('onboarding-step-2')).toHaveAttribute(
'tabindex',
'0',
);
await page.getByTestId('onboarding-step-3').click();
await expect(page.getByTestId('onboarding-step-3')).toHaveAttribute(
'tabindex',
'0',
);
const learnMoreLink = page.getByRole('link', {
name: 'Learn more docs features',
});
await expect(learnMoreLink).toHaveAttribute(
'href',
'https://example.com/learn-more',
);
await learnMoreLink.click();
await page.getByRole('button', { name: /understood/i }).click();
await expect(modal).toBeHidden();
});
test('closes modal with Skip button', async ({ page }) => {
await page.getByRole('button', { name: 'Open onboarding menu' }).click();
await page.getByRole('menuitem', { name: 'Onboarding' }).click();
const modal = page.getByTestId('onboarding-modal');
await expect(modal).toBeVisible();
await expect(
page.getByRole('link', {
name: 'Learn more docs features',
}),
).toBeHidden();
await page.getByRole('button', { name: /skip/i }).click();
await expect(modal).toBeHidden();
});
test('Modal onboarding translated correctly', async ({ page }) => {
// switch to french
await waitForLanguageSwitch(page, TestLanguage.French);
await page
.getByRole('button', { name: "Ouvrir le menu d'embarquement" })
.click();
await page.getByRole('menuitem', { name: 'Premiers pas' }).click();
const modal = page.getByLabel('Apprenez les principes fondamentaux');
await expect(modal.getByText('Découvrez Docs')).toBeVisible();
await expect(
modal.getByText(/Rédigez votre document facilement/).first(),
).toBeVisible();
await expect(
modal.getByText(/Déplacez, dupliquez/).first(),
).toBeVisible();
await expect(
modal.getByRole('button', { name: /Passer/i }),
).toBeVisible();
await expect(
modal.getByRole('button', { name: /Suivant/i }),
).toBeVisible();
});
test('Modal is displayed automatically on first connection', async ({
page,
browserName,
}) => {
await expect(page.getByRole('button', { name: 'New doc' })).toBeVisible();
await expect(page.getByTestId('onboarding-modal')).toBeHidden();
await page.route(/.*\/api\/v1.0\/users\/me\//, async (route) => {
const request = route.request();
if (request.method().includes('GET')) {
await route.fulfill({
json: {
id: 'f2bfcf0b-e4b9-4153-b2e5-0d2a9a5a0a5b',
email: `user.test@${browserName.toLowerCase()}.test`,
full_name: `E2E ${browserName}`,
short_name: 'E2E',
language: 'en-us',
is_first_connection: true,
},
});
} else {
await route.continue();
}
});
let onboardingDoneCalled = false;
await page.route(
/.*\/api\/v1.0\/users\/onboarding-done\//,
async (route) => {
const request = route.request();
if (request.method().includes('POST')) {
onboardingDoneCalled = true;
await route.continue();
}
},
);
await page.goto('/');
await expect(page.getByTestId('onboarding-modal')).toBeVisible();
await page.getByRole('button', { name: /skip/i }).click();
await expect(page.getByTestId('onboarding-modal')).toBeHidden();
expect(onboardingDoneCalled).toBeTruthy();
});
});
});
-6
View File
@@ -8,12 +8,6 @@ const eslintConfig = defineConfig([
docs: docsPlugin,
},
extends: ['docs/playwright'],
languageOptions: {
parserOptions: {
tsconfigRootDir: import.meta.dirname,
project: ['./tsconfig.json'],
},
},
},
]);
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "app-e2e",
"version": "4.7.0",
"version": "4.8.1",
"repository": "https://github.com/suitenumerique/docs",
"author": "DINUM",
"license": "MIT",
+1
View File
@@ -12,6 +12,7 @@
# next.js
/.next/
/out/
next-env.d.ts
# production
/build
+8 -2
View File
@@ -18,6 +18,12 @@ const themeWhiteLabelLight = getUIKitThemesFromGlobals(whiteLabelGlobals, {
'3xs': '0.25rem',
'2xs': '0.375rem',
},
font: {
families: {
base: 'Inter Variable, Roboto Flex Variable, sans-serif',
accent: 'Inter Variable, Roboto Flex Variable, sans-serif',
},
},
},
},
});
@@ -33,8 +39,8 @@ const themesDSFRLight = getUIKitThemesFromGlobals(dsfrGlobals, {
globals: {
font: {
families: {
base: 'Marianne, Inter, Roboto Flex Variable, sans-serif',
accent: 'Marianne, Inter, Roboto Flex Variable, sans-serif',
base: 'Marianne, Inter Variable, Roboto Flex Variable, sans-serif',
accent: 'Marianne, Inter Variable, Roboto Flex Variable, sans-serif',
},
},
},
+3 -6
View File
@@ -2,17 +2,14 @@ import { defineConfig } from '@eslint/config-helpers';
import docsPlugin from 'eslint-plugin-docs';
const eslintConfig = defineConfig([
{
ignores: ['.next/**', 'out/**', 'public/service-worker.js'],
},
{
plugins: {
docs: docsPlugin,
},
extends: ['docs/next'],
languageOptions: {
parserOptions: {
tsconfigRootDir: import.meta.dirname,
project: ['./tsconfig.json'],
},
},
settings: {
next: {
rootDir: import.meta.dirname,
-6
View File
@@ -1,6 +0,0 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference path="./.next/types/routes.d.ts" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.
+17 -18
View File
@@ -1,7 +1,5 @@
const crypto = require('crypto');
const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const { InjectManifest } = require('workbox-webpack-plugin');
const buildId = crypto.randomBytes(256).toString('hex').slice(0, 8);
@@ -17,10 +15,27 @@ const nextConfig = {
// Enables the styled-components SWC transform
styledComponents: true,
},
experimental: {
// Tree-shake barrel files for these packages so webpack only bundles the
// symbols that are actually imported, reducing chunk sizes noticeably for
// Mantine and the Cunningham design system.
optimizePackageImports: ['@mantine/core', '@mantine/hooks', 'lodash'],
},
generateBuildId: () => buildId,
env: {
NEXT_PUBLIC_BUILD_ID: buildId,
},
/**
* In dev mode, Next.js doesn't use Webpack, but Turbopack.
*/
turbopack: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
webpack(config, { isServer }) {
// Grab the existing rule that handles SVG imports
const fileLoaderRule = config.module.rules.find((rule) =>
@@ -43,22 +58,6 @@ const nextConfig = {
},
);
// Copy necessary fonts from node_modules to public directory during build or dev
config.plugins.push(
new CopyPlugin({
patterns: [
{
from: path.resolve(
__dirname,
'../../node_modules/emoji-datasource-apple/img/apple/64',
),
to: path.resolve(__dirname, 'public/assets/fonts/emoji'),
force: true,
},
],
}),
);
if (!isServer && process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true') {
config.plugins.push(
new InjectManifest({
+8 -5
View File
@@ -1,17 +1,21 @@
{
"name": "app-impress",
"version": "4.7.0",
"version": "4.8.1",
"repository": "https://github.com/suitenumerique/docs",
"author": "DINUM",
"license": "MIT",
"private": true,
"scripts": {
"dev": "next dev",
"build": "prettier --check . && yarn stylelint && next build",
"predev": "node scripts/prebuild.mjs",
"build": "prettier --check . && yarn stylelint && next build --webpack",
"prebuild": "node scripts/prebuild.mjs",
"postbuild": "node scripts/postbuild.mjs",
"build:ci": "cp .env.development .env.local && yarn build",
"build-theme": "cunningham -g css,ts -o src/cunningham --utility-classes && yarn prettier && yarn stylelint --fix",
"start": "npx -y serve@latest out",
"lint": "tsc --noEmit && next lint",
"lint": "tsc --noEmit && eslint .",
"lint:verbose": "cross-env DEBUG=\"eslint:cli-engine,eslint:linter\" eslint .",
"prettier": "prettier --write .",
"stylelint": "stylelint \"**/*.css\"",
"test": "vitest",
@@ -59,7 +63,7 @@
"idb": "8.0.3",
"lodash": "4.17.23",
"luxon": "3.7.2",
"next": "15.5.10",
"next": "16.1.6",
"posthog-js": "1.347.2",
"react": "*",
"react-aria-components": "1.15.1",
@@ -90,7 +94,6 @@
"@types/react": "*",
"@types/react-dom": "*",
"@vitejs/plugin-react": "5.1.4",
"copy-webpack-plugin": "13.0.1",
"cross-env": "10.1.0",
"dotenv": "17.3.1",
"eslint-plugin-docs": "*",
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,20 @@
/**
* Copies Apple emoji images from emoji-datasource-apple into the public directory.
* Used as a pre-step for both `dev` (Turbopack) and `build` (webpack) so that
* neither pipeline needs a webpack CopyPlugin for this purpose.
*/
import { cpSync } from 'fs';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const src = resolve(
__dirname,
'../../../node_modules/emoji-datasource-apple/img/apple/64',
);
const dest = resolve(__dirname, '../public/assets/fonts/emoji');
cpSync(src, dest, { recursive: true, force: true });
console.log('✔ Emoji assets copied to public/assets/fonts/emoji');
@@ -0,0 +1,4 @@
/**
* Post-build script: runs all tasks required after `next build`.
* Add future post-build steps here.
*/
@@ -0,0 +1,5 @@
/**
* Pre-build script: runs all setup tasks required before `next build`.
* Add future build preparation steps here.
*/
import './copy-emoji.mjs';
@@ -54,6 +54,12 @@ if (!emojidata.categories.some((c) => c.id === CALLOUT_ID)) {
});
}
void init({ data: emojidata });
let hasBeenCalled = false;
export const getEmojidata = () => {
if (!hasBeenCalled) {
void init({ data: emojidata });
hasBeenCalled = true;
}
export default emojidata;
return emojidata;
};
@@ -4,7 +4,6 @@ export * from './Card';
export * from './DropButton';
export * from './dropdown-menu/DropdownMenu';
export * from './Emoji/EmojiPicker';
export { default as emojidata } from './Emoji/initEmojiCallout';
export * from './quick-search';
export * from './Icon';
export * from './InfiniteScroll';
@@ -1,4 +1,3 @@
import { CunninghamProvider } from '@gouvfr-lasuite/cunningham-react';
import {
MutationCache,
QueryClient,
@@ -7,12 +6,12 @@ import {
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import { useCunninghamTheme } from '@/cunningham';
import { Auth, KEY_AUTH, setAuthUrl } from '@/features/auth';
import { useRouteChangeCompleteFocus } from '@/hooks/useRouteChangeCompleteFocus';
import { useResponsiveStore } from '@/stores/';
import { ConfigProvider } from './config/';
import { ThemeProvider } from './config/ThemeProvider';
export const DEFAULT_QUERY_RETRY = 1;
@@ -50,7 +49,6 @@ const queryClient = new QueryClient({
});
export function AppProvider({ children }: { children: React.ReactNode }) {
const { theme } = useCunninghamTheme();
const { replace } = useRouter();
useRouteChangeCompleteFocus();
@@ -74,11 +72,11 @@ export function AppProvider({ children }: { children: React.ReactNode }) {
return (
<QueryClientProvider client={queryClient}>
<CunninghamProvider theme={theme}>
<ThemeProvider>
<ConfigProvider>
<Auth>{children}</Auth>
</ConfigProvider>
</CunninghamProvider>
</ThemeProvider>
</QueryClientProvider>
);
}
@@ -12,7 +12,6 @@ import {
useSynchronizedLanguage,
} from '@/features/language';
import { useAnalytics } from '@/libs';
import { CrispAnalytic, PostHogAnalytic } from '@/services';
import { useSentryStore } from '@/stores/useSentryStore';
import { useConfig } from './api/useConfig';
@@ -71,7 +70,9 @@ export const ConfigProvider = ({ children }: PropsWithChildren) => {
return;
}
new PostHogAnalytic(conf.POSTHOG_KEY);
void import('@/services').then(({ PostHogAnalytic }) => {
new PostHogAnalytic(conf.POSTHOG_KEY);
});
}, [conf?.POSTHOG_KEY]);
useEffect(() => {
@@ -79,7 +80,9 @@ export const ConfigProvider = ({ children }: PropsWithChildren) => {
return;
}
new CrispAnalytic({ websiteId: conf.CRISP_WEBSITE_ID });
void import('@/services').then(({ CrispAnalytic }) => {
new CrispAnalytic({ websiteId: conf.CRISP_WEBSITE_ID });
});
}, [conf?.CRISP_WEBSITE_ID]);
if (!conf) {
@@ -0,0 +1,15 @@
import { CunninghamProvider } from '@gouvfr-lasuite/cunningham-react';
import { useCunninghamTheme } from '@/cunningham';
import { useLocales } from '@/i18n/useLocale';
export function ThemeProvider({ children }: { children: React.ReactNode }) {
const { theme } = useCunninghamTheme();
const currentLocale = useLocales();
return (
<CunninghamProvider theme={theme} currentLocale={currentLocale}>
{children}
</CunninghamProvider>
);
}
@@ -7,7 +7,7 @@ import { APIError, errorCauses, fetchAPI } from '@/api';
import { Theme } from '@/cunningham/';
import { FooterType } from '@/features/footer';
import { HeaderType, WaffleType } from '@/features/header';
import { PostHogConf } from '@/services';
import type { PostHogConf } from '@/services';
type Imagetype = React.ComponentProps<typeof Image>;
@@ -16,6 +16,10 @@ interface ThemeCustomization {
light: LinkHTMLAttributes<HTMLLinkElement>;
dark: LinkHTMLAttributes<HTMLLinkElement>;
};
onboarding?: {
enabled: true;
learn_more_url?: string;
};
footer?: FooterType;
home: {
'with-proconnect'?: boolean;
@@ -4,13 +4,13 @@ describe('<useCunninghamTheme />', () => {
it('changing theme update tokens', () => {
expect(
useCunninghamTheme.getState().currentTokens.globals?.font.families.base,
).toBe('Hanken Grotesk, Inter, Roboto Flex Variable, sans-serif');
).toBe('Inter Variable, Roboto Flex Variable, sans-serif');
// Change theme
useCunninghamTheme.getState().setTheme('dsfr');
expect(
useCunninghamTheme.getState().currentTokens.globals?.font.families.base,
).toBe('Marianne, Inter, Roboto Flex Variable, sans-serif');
).toBe('Marianne, Inter Variable, Roboto Flex Variable, sans-serif');
});
});
@@ -363,9 +363,9 @@
--c--globals--font--weights--extrabold: 800;
--c--globals--font--weights--black: 900;
--c--globals--font--families--base:
hanken grotesk, inter, roboto flex variable, sans-serif;
inter variable, roboto flex variable, sans-serif;
--c--globals--font--families--accent:
hanken grotesk, inter, roboto flex variable, sans-serif;
inter variable, roboto flex variable, sans-serif;
--c--globals--spacings--0: 0;
--c--globals--spacings--l: 3rem;
--c--globals--spacings--b: 1.625rem;
@@ -1733,9 +1733,9 @@
--c--globals--font--weights--extrabold: 800;
--c--globals--font--weights--black: 900;
--c--globals--font--families--accent:
marianne, inter, roboto flex variable, sans-serif;
marianne, inter variable, roboto flex variable, sans-serif;
--c--globals--font--families--base:
marianne, inter, roboto flex variable, sans-serif;
marianne, inter variable, roboto flex variable, sans-serif;
--c--globals--spacings--0: 0;
--c--globals--spacings--none: 0;
--c--globals--spacings--auto: auto;
@@ -375,8 +375,8 @@ export const tokens = {
black: 900,
},
families: {
base: 'Hanken Grotesk, Inter, Roboto Flex Variable, sans-serif',
accent: 'Hanken Grotesk, Inter, Roboto Flex Variable, sans-serif',
base: 'Inter Variable, Roboto Flex Variable, sans-serif',
accent: 'Inter Variable, Roboto Flex Variable, sans-serif',
},
},
spacings: {
@@ -1336,8 +1336,9 @@ export const tokens = {
},
weights: { thin: 100, extrabold: 800, black: 900 },
families: {
accent: 'Marianne, Inter, Roboto Flex Variable, sans-serif',
base: 'Marianne, Inter, Roboto Flex Variable, sans-serif',
accent:
'Marianne, Inter Variable, Roboto Flex Variable, sans-serif',
base: 'Marianne, Inter Variable, Roboto Flex Variable, sans-serif',
},
},
spacings: {
+3
View File
@@ -1,3 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
declare module '*.svg' {
import * as React from 'react';
@@ -8,6 +8,7 @@
*/
export interface User {
id: string;
is_first_connection: boolean;
email: string;
full_name: string;
short_name: string;
@@ -0,0 +1,53 @@
import {
UseMutationOptions,
useMutation,
useQueryClient,
} from '@tanstack/react-query';
import { APIError, errorCauses, fetchAPI } from '@/api';
import { User } from './types';
import { KEY_AUTH } from './useAuthQuery';
type OnboardingDoneResponse = {
detail: string;
};
export const onboardingDone = async (): Promise<OnboardingDoneResponse> => {
const response = await fetchAPI(`users/onboarding-done/`, {
method: 'POST',
});
if (!response.ok) {
throw new APIError(
'Failed to complete onboarding',
await errorCauses(response),
);
}
return response.json() as Promise<OnboardingDoneResponse>;
};
type UseOnboardingDoneOptions = UseMutationOptions<
OnboardingDoneResponse,
APIError
>;
export function useOnboardingDone(options?: UseOnboardingDoneOptions) {
const queryClient = useQueryClient();
return useMutation<OnboardingDoneResponse, APIError>({
mutationFn: onboardingDone,
onSuccess: (data, variables, onMutateResult, context) => {
queryClient.setQueryData<User>([KEY_AUTH], (oldData) => {
if (!oldData) {
return oldData;
}
return {
...oldData,
is_first_connection: false,
};
});
options?.onSuccess?.(data, variables, onMutateResult, context);
},
});
}
@@ -14,6 +14,8 @@ import {
resetSilent,
} from '../utils';
import { FirstConnection } from './FirstConnection';
export const Auth = ({ children }: PropsWithChildren) => {
const {
isLoading: isAuthLoading,
@@ -21,6 +23,7 @@ export const Auth = ({ children }: PropsWithChildren) => {
isFetchedAfterMount,
authenticated,
fetchStatus,
user,
} = useAuth();
const isLoading = fetchStatus !== 'idle' || isAuthLoading;
const [isRedirecting, setIsRedirecting] = useState(false);
@@ -110,5 +113,10 @@ export const Auth = ({ children }: PropsWithChildren) => {
return <Loading $height="100vh" $width="100vw" />;
}
return children;
return (
<>
{children}
{user && user.is_first_connection && <FirstConnection />}
</>
);
};
@@ -0,0 +1,30 @@
import { useModal } from '@gouvfr-lasuite/cunningham-react';
import { useEffect } from 'react';
import { OnBoarding } from '@/features/help';
import { useOnboardingDone } from '../api/useOnboardingDone';
export const FirstConnection = () => {
const modalOnbording = useModal();
const { mutate: onboardingDone, isPending } = useOnboardingDone();
useEffect(() => {
if (isPending) {
return;
}
modalOnbording.open();
}, [modalOnbording, isPending]);
const onClose = () => {
onboardingDone();
modalOnbording.close();
};
if (!modalOnbording.isOpen && isPending) {
return null;
}
return <OnBoarding isOpen={modalOnbording.isOpen} onClose={onClose} />;
};
@@ -5,6 +5,7 @@ import {
getFormattingToolbarItems,
useDictionary,
} from '@blocknote/react';
import dynamic from 'next/dynamic';
import React, { useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
@@ -17,7 +18,14 @@ import { getCalloutFormattingToolbarItems } from '../custom-blocks';
import { FileDownloadButton } from './FileDownloadButton';
import { MarkdownButton } from './MarkdownButton';
import { ModalConfirmDownloadUnsafe } from './ModalConfirmDownloadUnsafe';
const ModalConfirmDownloadUnsafe = dynamic(
() =>
import('./ModalConfirmDownloadUnsafe').then((mod) => ({
default: mod.ModalConfirmDownloadUnsafe,
})),
{ ssr: false },
);
const AIToolbarButton = BlockNoteAI?.AIToolbarButton;
@@ -3,7 +3,6 @@ import {
useComponentsContext,
useSelectedBlocks,
} from '@blocknote/react';
import { forEach, isArray } from 'lodash';
import React, { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { css } from 'styled-components';
@@ -19,7 +18,7 @@ type Block = {
function isBlock(block: Block): block is Block {
return (
block.content &&
isArray(block.content) &&
Array.isArray(block.content) &&
block.content.length > 0 &&
typeof block.type !== 'undefined'
);
@@ -54,7 +53,7 @@ export function MarkdownButton() {
blocks = [editor.getTextCursorPosition().block];
}
forEach(blocks, async (block) => {
blocks.forEach(async (block) => {
if (!isBlock(block as unknown as Block)) {
return;
}
@@ -8,13 +8,14 @@ import {
} from '@blocknote/core';
import { insertOrUpdateBlockForSlashMenu } from '@blocknote/core/extensions';
import { BlockTypeSelectItem, createReactBlockSpec } from '@blocknote/react';
import { TFunction } from 'i18next';
import type { TFunction } from 'i18next';
import React, { useEffect, useState } from 'react';
import { createGlobalStyle, css } from 'styled-components';
import { Box, BoxButton, EmojiPicker, Icon, emojidata } from '@/components';
import { Box, BoxButton, EmojiPicker, Icon } from '@/components';
import { getEmojidata } from '@/components/Emoji/initEmojiCallout';
import { DocsBlockNoteEditor } from '../../types';
import type { DocsBlockNoteEditor } from '../../types';
const CalloutBlockStyle = createGlobalStyle`
.bn-block-content[data-content-type="callout"][data-background-color] {
@@ -125,7 +126,7 @@ const CalloutComponent = ({
{openEmojiPicker && (
<EmojiPicker
emojiData={emojidata}
emojiData={getEmojidata()}
onClickOutside={onClickOutside}
onEmojiSelect={onEmojiSelect}
withOverlay={true}
@@ -4,10 +4,9 @@ import * as Y from 'yjs';
import { useUpdateDoc } from '@/docs/doc-management/';
import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning';
import { toBase64 } from '@/utils/string';
import { isFirefox } from '@/utils/userAgent';
import { toBase64 } from '../utils';
const SAVE_INTERVAL = 60000;
export const useSaveDoc = (
@@ -1,4 +1,4 @@
import _ from 'lodash';
import isEqual from 'lodash/isEqual';
import { create } from 'zustand';
import { DocsBlockNoteEditor, HeadingBlock } from '../types';
@@ -47,7 +47,7 @@ export const useHeadingStore = create<UseHeadingStore>((set, get) => ({
),
})) as unknown as HeadingBlock[];
if (!_.isEqual(get().headings, headingBlocks)) {
if (!isEqual(get().headings, headingBlocks)) {
set(() => ({ headings: headingBlocks }));
}
},
@@ -22,6 +22,3 @@ function hslToHex(h: number, s: number, l: number) {
};
return `#${f(0)}${f(8)}${f(4)}`;
}
export const toBase64 = (str: Uint8Array) =>
Buffer.from(str).toString('base64');
@@ -9,7 +9,7 @@ export const AlertPublic = ({ isPublicDoc }: { isPublicDoc: boolean }) => {
return (
<Card
aria-label={t('Public document')}
role="presentation"
$radius={spacingsTokens['3xs']}
$direction="row"
$padding="xs"
@@ -159,7 +159,7 @@ const DocTitleInput = ({ doc }: DocTitleProps) => {
return (
<Box
className="--docs--doc-title"
className={CLASS_DOC_TITLE}
$direction="row"
$align="center"
$gap="4px"
@@ -1,6 +1,7 @@
import { Button, useModal } from '@gouvfr-lasuite/cunningham-react';
import { useTreeContext } from '@gouvfr-lasuite/ui-kit';
import { useQueryClient } from '@tanstack/react-query';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
@@ -24,13 +25,11 @@ import {
IconOptions,
} from '@/components';
import { useCunninghamTheme } from '@/cunningham';
import Export from '@/docs/doc-export/';
import {
Doc,
KEY_DOC,
KEY_LIST_DOC,
KEY_LIST_FAVORITE_DOC,
ModalRemoveDoc,
getEmojiAndTitle,
useCopyDocLink,
useCreateFavoriteDoc,
@@ -39,18 +38,47 @@ import {
useDocUtils,
useDuplicateDoc,
} from '@/docs/doc-management';
import { DocShareModal } from '@/docs/doc-share';
import {
KEY_LIST_DOC_VERSIONS,
ModalSelectVersion,
} from '@/docs/doc-versioning';
import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning';
import { useFocusStore, useResponsiveStore } from '@/stores';
import { useCopyCurrentEditorToClipboard } from '../hooks/useCopyCurrentEditorToClipboard';
import { BoutonShare } from './BoutonShare';
const ModalExport = Export?.ModalExport;
const DocShareModal = dynamic(
() =>
import('@/docs/doc-share/components/DocShareModal').then((mod) => ({
default: mod.DocShareModal,
})),
{ ssr: false },
);
const ModalRemoveDoc = dynamic(
() =>
import('@/docs/doc-management/components/ModalRemoveDoc').then((mod) => ({
default: mod.ModalRemoveDoc,
})),
{ ssr: false },
);
const ModalSelectVersion = dynamic(
() =>
import('@/docs/doc-versioning/components/ModalSelectVersion').then(
(mod) => ({ default: mod.ModalSelectVersion }),
),
{ ssr: false },
);
const ModalExport =
process.env.NEXT_PUBLIC_PUBLISH_AS_MIT === 'false'
? dynamic(
() =>
import('@/docs/doc-export/components/ModalExport').then((mod) => ({
default: mod.ModalExport,
})),
{ ssr: false },
)
: null;
interface DocToolBoxProps {
doc: Doc;
@@ -11,8 +11,8 @@ import { useTranslation } from 'react-i18next';
import * as Y from 'yjs';
import { APIError, errorCauses, fetchAPI } from '@/api';
import { toBase64 } from '@/docs/doc-editor';
import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning';
import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning/api/useDocVersions';
import { toBase64 } from '@/utils/string';
import { useProviderStore } from '../stores';
import { Doc } from '../types';
@@ -11,8 +11,8 @@ import {
PICKER_HEIGHT,
Text,
TextType,
emojidata,
} from '@/components';
import { getEmojidata } from '@/components/Emoji/initEmojiCallout';
import { useFocusStore } from '@/stores';
import { useDocTitleUpdate } from '../hooks/useDocTitleUpdate';
@@ -154,7 +154,7 @@ export const DocIcon = ({
`}
>
<EmojiPicker
emojiData={emojidata}
emojiData={getEmojidata()}
onEmojiSelect={handleEmojiSelect}
onClickOutside={handleClickOutside}
withOverlay={true}
@@ -1,7 +1,7 @@
import { useEffect } from 'react';
import { useCollaborationUrl } from '@/core/config';
import { useBroadcastStore } from '@/stores';
import { useBroadcastStore } from '@/stores/useBroadcastStore';
import { useProviderStore } from '../stores/useProviderStore';
import { Base64 } from '../types';
@@ -1,7 +1,7 @@
import { useTreeContext } from '@gouvfr-lasuite/ui-kit';
import { useCallback } from 'react';
import { useBroadcastStore } from '@/stores';
import { useBroadcastStore } from '@/stores/useBroadcastStore';
import { KEY_DOC, KEY_LIST_DOC, useUpdateDoc } from '../api';
import { Doc } from '../types';
@@ -9,7 +9,7 @@ import {
Role,
} from '@/docs/doc-management';
import { User } from '@/features/auth';
import { useBroadcastStore } from '@/stores';
import { useBroadcastStore } from '@/stores/useBroadcastStore';
import { OptionType } from '../types';
@@ -6,7 +6,7 @@ import {
import { APIError, errorCauses, fetchAPI } from '@/api';
import { KEY_DOC, KEY_LIST_DOC } from '@/docs/doc-management';
import { useBroadcastStore } from '@/stores';
import { useBroadcastStore } from '@/stores/useBroadcastStore';
import { KEY_LIST_DOC_ACCESSES } from './useDocAccesses';
import { KEY_LIST_USER } from './useUsers';
@@ -35,6 +35,7 @@ export const DocShareInvitationItem = ({
email: invitation.email,
short_name: invitation.email,
language: 'en-us',
is_first_connection: false,
};
const { toast } = useToastProvider();
@@ -353,6 +353,7 @@ const QuickSearchInviteInputSection = ({
email: userQuery,
short_name: '',
language: '',
is_first_connection: false,
};
const hasEmailInUsers = users.some(
@@ -186,6 +186,7 @@ export const DocSubPageItem = (props: TreeViewNodeProps<Doc>) => {
docId={doc.id}
title={doc.title}
buttonProps={{
tabIndex: -1,
$css: css`
&:focus-visible {
outline: 2px solid var(--c--globals--colors--brand-500);
@@ -220,6 +221,7 @@ export const DocSubPageItem = (props: TreeViewNodeProps<Doc>) => {
e.stopPropagation();
handleActivate();
}}
tabIndex={-1}
$width="100%"
$direction="row"
$gap={spacingsTokens['xs']}
@@ -19,6 +19,7 @@ import {
useTrans,
} from '@/docs/doc-management';
import { CLASS_DOC_TITLE } from '../../doc-header';
import { KEY_DOC_TREE, useDocTree } from '../api/useDocTree';
import { findIndexInTree } from '../utils';
@@ -120,11 +121,21 @@ export const DocTree = ({ currentDoc }: DocTreeProps) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
selectRoot();
navigateToRoot();
if (currentDoc.id === treeContext?.root?.id) {
document.querySelector<HTMLElement>(`.${CLASS_DOC_TITLE}`)?.focus();
} else {
selectRoot();
navigateToRoot();
}
}
},
[selectRoot, navigateToRoot, rootActionsOpen],
[
selectRoot,
navigateToRoot,
rootActionsOpen,
currentDoc.id,
treeContext?.root?.id,
],
);
// Handle menu open/close for root item - mirrors DocSubPageItem behavior
@@ -142,6 +153,13 @@ export const DocTree = ({ currentDoc }: DocTreeProps) => {
}, []);
const handleRowKeyDown = useCallback((e: React.KeyboardEvent) => {
if (e.key === 'Tab' && e.shiftKey) {
e.preventDefault();
e.stopPropagation();
rootItemRef.current?.focus();
return;
}
if (e.key !== 'Enter') {
return;
}
@@ -157,6 +175,13 @@ export const DocTree = ({ currentDoc }: DocTreeProps) => {
return;
}
const treeItem = e.currentTarget.querySelector('[role="treeitem"]');
if (treeItem?.getAttribute('aria-selected') === 'true') {
e.preventDefault();
document.querySelector<HTMLElement>(`.${CLASS_DOC_TITLE}`)?.focus();
return;
}
e.currentTarget
.querySelector<HTMLDivElement>('.c__tree-view--node')
?.click();
@@ -4,6 +4,7 @@ import {
ModalSize,
useModal,
} from '@gouvfr-lasuite/cunningham-react';
import dynamic from 'next/dynamic';
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { createGlobalStyle, css } from 'styled-components';
@@ -14,9 +15,16 @@ import { Doc } from '@/docs/doc-management';
import { Versions } from '../types';
import { DocVersionEditor } from './DocVersionEditor';
import { ModalConfirmationVersion } from './ModalConfirmationVersion';
import { VersionList } from './VersionList';
const ModalConfirmationVersion = dynamic(
() =>
import('./ModalConfirmationVersion').then((mod) => ({
default: mod.ModalConfirmationVersion,
})),
{ ssr: false },
);
const NoPaddingStyle = createGlobalStyle`
.c__modal__scroller:has(.noPadding) {
padding: 0 !important;
@@ -1,3 +1,4 @@
import dynamic from 'next/dynamic';
import { useState } from 'react';
import { Box, Text } from '@/components';
@@ -6,7 +7,13 @@ import { Doc } from '@/docs/doc-management';
import { Versions } from '../types';
import { ModalConfirmationVersion } from './ModalConfirmationVersion';
const ModalConfirmationVersion = dynamic(
() =>
import('./ModalConfirmationVersion').then((mod) => ({
default: mod.ModalConfirmationVersion,
})),
{ ssr: false },
);
interface VersionItemProps {
docId: Doc['id'];
@@ -2,6 +2,7 @@ import { DndContext, DragOverlay, Modifier } from '@dnd-kit/core';
import { getEventCoordinates } from '@dnd-kit/utilities';
import { useModal } from '@gouvfr-lasuite/cunningham-react';
import { TreeViewMoveModeEnum } from '@gouvfr-lasuite/ui-kit';
import dynamic from 'next/dynamic';
import { useEffect, useMemo, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
@@ -14,7 +15,14 @@ import { DocDragEndData, useDragAndDrop } from '../hooks/useDragAndDrop';
import { DocsGridItem } from './DocsGridItem';
import { Draggable } from './Draggable';
import { Droppable } from './Droppable';
import { ModalConfirmationMoveDoc } from './ModalConfimationMoveDoc';
const ModalConfirmationMoveDoc = dynamic(
() =>
import('./ModalConfimationMoveDoc').then((mod) => ({
default: mod.ModalConfirmationMoveDoc,
})),
{ ssr: false },
);
const snapToTopLeft: Modifier = ({
activatorEvent,

Some files were not shown because too many files have changed in this diff Show More