Compare commits
37 Commits
exp/next-1
...
v1.7.2-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
| 0cee07aed3 | |||
| f76f87ff1c | |||
| 6020336792 | |||
| 634b30aa54 | |||
| 7fc497a642 | |||
| e30ceeb038 | |||
| 872762661a | |||
| 5fcd8610c9 | |||
| b8310237e4 | |||
| 4a6238dc52 | |||
| 6fa5f63b69 | |||
| c7564ba8f7 | |||
| eafd7c551b | |||
| 514edf01d3 | |||
| 1a73c68d07 | |||
| 1a9dcadba5 | |||
| e0c948c2ac | |||
| 0bd2760792 | |||
| abc559d923 | |||
| 9ffdbe9c81 | |||
| 2c1a18bafc | |||
| a2db5e9642 | |||
| 4ec9dc78c1 | |||
| faf2bd5384 | |||
| d40ed94b74 | |||
| cd3d9b701b | |||
| e40f47a73c | |||
| 64ea4a6f9f | |||
| 18115e95d7 | |||
| e736261056 | |||
| 2e57da7549 | |||
| 574454db0a | |||
| f05b670d93 | |||
| 318149fbf3 | |||
| 5f19dcf25c | |||
| c99cf4b848 | |||
| 18ec40f6af |
38
.github/workflows/translations-extract.yml
vendored
@ -1,38 +0,0 @@
|
||||
# Extract and compile translations for all PRs.
|
||||
|
||||
name: 'Extract and compile translations'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
pull_request:
|
||||
branches: ['main']
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
extract_translations:
|
||||
name: Extract and compile translations
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
- uses: ./.github/actions/node-install
|
||||
|
||||
- name: Extract and compile translations
|
||||
run: |
|
||||
npm run translate:extract
|
||||
npm run translate:compile
|
||||
|
||||
- name: Check and commit any files created
|
||||
run: |
|
||||
git config --global user.name 'github-actions'
|
||||
git config --global user.email 'github-actions@documenso.com'
|
||||
git add packages/lib/translations
|
||||
git diff --staged --quiet --exit-code || (git commit -m "chore: extract translations" && git push)
|
||||
7
.github/workflows/translations-upload.yml
vendored
@ -22,13 +22,12 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
|
||||
- uses: ./.github/actions/node-install
|
||||
|
||||
- name: Extract and compile translations
|
||||
run: |
|
||||
npm run translate:extract
|
||||
npm run translate:compile
|
||||
- name: Extract translations
|
||||
run: npm run translate:extract
|
||||
|
||||
- name: Check and commit any files created
|
||||
run: |
|
||||
|
||||
@ -13,9 +13,4 @@ node "$MONOREPO_ROOT/scripts/copy-wellknown.cjs"
|
||||
git add "$MONOREPO_ROOT/apps/web/public/"
|
||||
git add "$MONOREPO_ROOT/apps/marketing/public/"
|
||||
|
||||
echo "Extract and compile translations"
|
||||
npm run translate:extract
|
||||
npm run translate:compile
|
||||
git add "$MONOREPO_ROOT/packages/lib/translations/"
|
||||
|
||||
npx lint-staged
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"index": "Getting Started",
|
||||
"contributing-translations": "Contributing Translations"
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
---
|
||||
title: Contributing Translations
|
||||
description: Learn how to contribute translations to Documenso and become part of our community.
|
||||
---
|
||||
|
||||
import { Callout, Steps } from 'nextra/components';
|
||||
|
||||
# Contributing Translations
|
||||
|
||||
We are always open for help with translations! Currently we utilise AI to generate the initial translations for new languages, which are then improved over time by our awesome community.
|
||||
|
||||
If you are looking for development notes on translations, you can find them [here](/developers/local-development/translations).
|
||||
|
||||
<Callout type="info">
|
||||
Contributions are made through GitHub Pull Requests, so you will need a GitHub account to
|
||||
contribute.
|
||||
</Callout>
|
||||
|
||||
## Overview
|
||||
|
||||
We store our translations in PO files, which are located in our GitHub repository [here](https://github.com/documenso/documenso/tree/main/packages/lib/translations).
|
||||
|
||||
The translation files are organized into folders represented by their respective language codes (`en` for English, `de` for German, etc). Each language folder contains three PO files:
|
||||
|
||||
1. `web.po`: Translations for the web application
|
||||
2. `marketing.po`: Translations for the marketing application
|
||||
3. `common.po`: Shared translations between web and marketing
|
||||
|
||||
Each PO file contains translations which look like this:
|
||||
|
||||
```po
|
||||
#: apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx:61
|
||||
msgid "Want to send slick signing links like this one? <0>Check out Documenso.</0>"
|
||||
msgstr "Möchten Sie auffällige Signatur-Links wie diesen senden? <0>Überprüfen Sie Documenso.</0>"
|
||||
```
|
||||
|
||||
- `msgid`: The original text in English (never edit this manually)
|
||||
- `msgstr`: The translated text in the target language
|
||||
|
||||
<Callout type="warning">
|
||||
Notice the `<0>` tags? These represent HTML elements and must remain in both the `msgid` and `msgstr`. Make sure to translate the content between these tags while keeping the tags intact.
|
||||
</Callout>
|
||||
|
||||
## How to Contribute
|
||||
|
||||
### Updating Existing Translations
|
||||
|
||||
1. Fork the repository.
|
||||
2. Navigate to the appropriate language folder.
|
||||
3. Open the PO file you want to update (web.po, marketing.po, or common.po).
|
||||
4. Make your changes, ensuring you follow the PO file format.
|
||||
5. Commit your changes with a message such as `chore: update German translations`
|
||||
6. Create a Pull Request.
|
||||
|
||||
### Adding a New Language
|
||||
|
||||
If you want to add translations for a language that doesn't exist yet:
|
||||
|
||||
1. Create an issue in our GitHub repository requesting the addition of the new language.
|
||||
2. Wait for our team to review and approve the request.
|
||||
3. Once approved, we will set up the necessary files and kickstart the translations with AI to provide initial coverage.
|
||||
|
||||
## Need Help?
|
||||
|
||||
<Callout type="info">
|
||||
If you have any questions, hop into our [Discord](https://documen.so/discord) and ask us directly!
|
||||
</Callout>
|
||||
|
||||
Thank you for helping make Documenso more accessible to users around the world!
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Contributing Guide
|
||||
title: Getting started
|
||||
description: Learn how to contribute to Documenso and become part of our community.
|
||||
---
|
||||
|
||||
507
apps/documentation/pages/developers/public-api/reference.mdx
Normal file
@ -0,0 +1,507 @@
|
||||
---
|
||||
title: API Reference
|
||||
description: Reference documentation for the Documenso public API.
|
||||
---
|
||||
|
||||
import { Callout, Steps } from 'nextra/components';
|
||||
|
||||
# API Reference
|
||||
|
||||
The Swagger UI for the API is available at [/api/v1/openapi](https://app.documenso.com/api/v1/openapi). This page provides detailed information about the API endpoints, request and response formats, and authentication requirements.
|
||||
|
||||
## Upload a Document
|
||||
|
||||
Uploading a document to your Documenso account requires a two-step process.
|
||||
|
||||
<Steps>
|
||||
|
||||
### Create Document
|
||||
|
||||
First, you need to make a `POST` request to the `/api/v1/documents` endpoint, which takes a JSON payload with the following fields:
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "string",
|
||||
"externalId": "string",
|
||||
"recipients": [
|
||||
{
|
||||
"name": "string",
|
||||
"email": "user@example.com",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 0
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"subject": "string",
|
||||
"message": "string",
|
||||
"timezone": "Etc/UTC",
|
||||
"dateFormat": "yyyy-MM-dd hh:mm a",
|
||||
"redirectUrl": "string",
|
||||
"signingOrder": "PARALLEL"
|
||||
},
|
||||
"authOptions": {
|
||||
"globalAccessAuth": "ACCOUNT",
|
||||
"globalActionAuth": "ACCOUNT"
|
||||
},
|
||||
"formValues": {
|
||||
"additionalProp1": "string",
|
||||
"additionalProp2": "string",
|
||||
"additionalProp3": "string"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `title` _(required)_ - This represents the document's title.
|
||||
- `externalId` - This is an optional field that you can use to store an external identifier for the document. This can be useful for tracking the document in your system.
|
||||
- `recipients` _(required)_ - This is an array of recipient objects. Each recipient object has the following fields:
|
||||
- `name` - The name of the recipient.
|
||||
- `email` - The email address of the recipient.
|
||||
- `role` - The role of the recipient. See the [available roles](/users/signing-documents#roles).
|
||||
- `signingOrder` - The order in which the recipient should sign the document. This is an integer value starting from 0.
|
||||
- `meta` - This object contains additional metadata for the document. It has the following fields:
|
||||
- `subject` - The subject of the email that will be sent to the recipients.
|
||||
- `message` - The message of the email that will be sent to the recipients.
|
||||
- `timezone` - The timezone in which the document should be signed.
|
||||
- `dateFormat` - The date format that should be used in the document.
|
||||
- `redirectUrl` - The URL to which the user should be redirected after signing the document.
|
||||
- `signingOrder` - The signing order for the document. This can be either `SEQUENTIAL` or `PARALLEL`.
|
||||
- `authOptions` - This object contains authentication options for the document. It has the following fields:
|
||||
- `globalAccessAuth` - The authentication level required to access the document. This can be either `ACCOUNT` or `null`.
|
||||
- If the document is set to `ACCOUNT`, all recipients must authenticate with their Documenso account to access it.
|
||||
- The document can be accessed without a Documenso account if it's set to `null`.
|
||||
- `globalActionAuth` - The authentication level required to perform actions on the document. This can be `ACCOUNT`, `PASSKEY`, `TWO_FACTOR_AUTH`, or `null`.
|
||||
- If the document is set to `ACCOUNT`, all recipients must authenticate with their Documenso account to perform actions on the document.
|
||||
- If it's set to `PASSKEY`, all recipients must have the passkey active to perform actions on the document.
|
||||
- If it's set to `TWO_FACTOR_AUTH`, all recipients must have the two-factor authentication active to perform actions on the document.
|
||||
- If it's set to `null`, all the recipients can perform actions on the document without any authentication.
|
||||
- `formValues` - This object contains additional form values for the document. This property only works with native PDF fields and accepts three types: number, text and boolean.
|
||||
|
||||
<Callout type="info">
|
||||
The `globalActionAuth` property is only available for Enterprise accounts.
|
||||
</Callout>
|
||||
|
||||
Here's an example of the JSON payload for uploading a document:
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "my-document.pdf",
|
||||
"externalId": "12345",
|
||||
"recipients": [
|
||||
{
|
||||
"name": "Alex Blake",
|
||||
"email": "alexblake@email.com",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 1
|
||||
},
|
||||
{
|
||||
"name": "Ash Drew",
|
||||
"email": "ashdrew@email.com",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 0
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"subject": "Sign the document",
|
||||
"message": "Hey there, please sign this document.",
|
||||
"timezone": "Europe/London",
|
||||
"dateFormat": "Day, Month Year",
|
||||
"redirectUrl": "https://mysite.com/welcome",
|
||||
"signingOrder": "SEQUENTIAL"
|
||||
},
|
||||
"authOptions": {
|
||||
"globalAccessAuth": "ACCOUNT",
|
||||
"globalActionAuth": "PASSKEY"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Upload to S3
|
||||
|
||||
A successful API call to the `/api/v1/documents` endpoint returns a JSON response containing the upload URL, document ID, and recipient information.
|
||||
|
||||
The upload URL is a pre-signed S3 URL that you can use to upload the document to the Documenso (or your) S3 bucket. You need to make a `PUT` request to this URL to upload the document.
|
||||
|
||||
```json
|
||||
{
|
||||
"uploadUrl": "https://<url>/<bucket-name>/<id>/my-document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=<credentials>&X-Amz-Date=<date>&X-Amz-Expires=3600&X-Amz-Signature=<signature>&X-Amz-SignedHeaders=host&x-id=PutObject",
|
||||
"documentId": 51,
|
||||
"recipients": [
|
||||
{
|
||||
"recipientId": 11,
|
||||
"name": "Alex Blake",
|
||||
"email": "alexblake@email.com",
|
||||
"token": "<unique-signer-token>",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 1,
|
||||
"signingUrl": "https://app.documenso.com/sign/<unique-signer-token>"
|
||||
},
|
||||
{
|
||||
"recipientId": 12,
|
||||
"name": "Ash Drew",
|
||||
"email": "ashdrew@email.com",
|
||||
"token": "<unique-signer-token>",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 0,
|
||||
"signingUrl": "https://app.documenso.com/sign/<unique-signer-token>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
When you make the `PUT` request to the pre-signed URL, you need to include the document file you want to upload. The image below shows how to upload a document to the S3 bucket via Postman.
|
||||
|
||||

|
||||
|
||||
Here's an example of how to upload a document using cURL:
|
||||
|
||||
```bash
|
||||
curl --location --request PUT 'https://<url>/<bucket-name>/<id>/my-document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=<credentials>&X-Amz-Date=<date>&X-Amz-Expires=3600&X-Amz-Signature=<signature>&X-Amz-SignedHeaders=host&x-id=PutObject' \
|
||||
--form '=@"/Users/my-user/Documents/documenso.pdf"'
|
||||
```
|
||||
|
||||
Once the document is successfully uploaded, you can access it in your Documenso account dashboard. The screenshot below shows the document that was uploaded via the API.
|
||||
|
||||

|
||||
|
||||
</Steps>
|
||||
|
||||
## Generate Document From Template
|
||||
|
||||
Documenso allows you to generate documents from templates. This is useful when you have a standard document format you want to reuse.
|
||||
|
||||
The API endpoint for generating a document from a template is `/api/v1/templates/{templateId}/generate-document`, and it takes a JSON payload with the following fields:
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "string",
|
||||
"externalId": "string",
|
||||
"recipients": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "string",
|
||||
"email": "user@example.com",
|
||||
"signingOrder": 0
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"subject": "string",
|
||||
"message": "string",
|
||||
"timezone": "string",
|
||||
"dateFormat": "string",
|
||||
"redirectUrl": "string",
|
||||
"signingOrder": "PARALLEL"
|
||||
},
|
||||
"authOptions": {
|
||||
"globalAccessAuth": "ACCOUNT",
|
||||
"globalActionAuth": "ACCOUNT"
|
||||
},
|
||||
"formValues": {
|
||||
"additionalProp1": "string",
|
||||
"additionalProp2": "string",
|
||||
"additionalProp3": "string"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The JSON payload is identical to the payload for uploading a document, so you can read more about the fields in the [Create Document](/developers/public-api/reference#create-document) step. For this API endpoint, the `recipients` property is required.
|
||||
|
||||
<Steps>
|
||||
|
||||
### Grab the Template ID
|
||||
|
||||
The first step is to retrieve the template ID from the Documenso dashboard. You can find the template ID in the URL by navigating to the template details page.
|
||||
|
||||

|
||||
|
||||
In this case, the template ID is "99999".
|
||||
|
||||
### Retrieve the Recipient(s) ID(s)
|
||||
|
||||
Once you have the template ID, the next step involves retrieving the ID(s) of the recipient(s) from the template. You can do this by making a GET request to `/api/v1/templates/{template-id}`.
|
||||
|
||||
A successful response looks as follows:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 0,
|
||||
"externalId": "string",
|
||||
"type": "PUBLIC",
|
||||
"title": "string",
|
||||
"userId": 0,
|
||||
"teamId": 0,
|
||||
"templateDocumentDataId": "string",
|
||||
"createdAt": "2024-10-11T08:46:58.247Z",
|
||||
"updatedAt": "2024-10-11T08:46:58.247Z",
|
||||
"templateMeta": {
|
||||
"id": "string",
|
||||
"subject": "string",
|
||||
"message": "string",
|
||||
"timezone": "string",
|
||||
"dateFormat": "string",
|
||||
"templateId": 0,
|
||||
"redirectUrl": "string",
|
||||
"signingOrder": "PARALLEL"
|
||||
},
|
||||
"directLink": {
|
||||
"token": "string",
|
||||
"enabled": true
|
||||
},
|
||||
"templateDocumentData": {
|
||||
"id": "string",
|
||||
"type": "S3_PATH",
|
||||
"data": "string"
|
||||
},
|
||||
"Field": [
|
||||
{
|
||||
"id": 0,
|
||||
"recipientId": 0,
|
||||
"type": "SIGNATURE",
|
||||
"page": 0,
|
||||
"positionX": "string",
|
||||
"positionY": "string",
|
||||
"width": "string",
|
||||
"height": "string"
|
||||
}
|
||||
],
|
||||
"Recipient": [
|
||||
{
|
||||
"id": 0,
|
||||
"email": "user@example.com",
|
||||
"name": "string",
|
||||
"signingOrder": 0,
|
||||
"authOptions": "string",
|
||||
"role": "CC"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You'll need the recipient(s) ID(s) for the next step.
|
||||
|
||||
### Generate the Document
|
||||
|
||||
To generate a document from the template, you need to make a POST request to the `/api/v1/templates/{template-id}/generate-document` endpoint.
|
||||
|
||||
At the minimum, you must provide the `recipients` array in the JSON payload. Here's an example of the JSON payload:
|
||||
|
||||
```json
|
||||
{
|
||||
"recipients": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "Ash Drew",
|
||||
"email": "ashdrew@email.com",
|
||||
"signingOrder": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Filling the `recipients` array with the corresponding recipient for each template placeholder recipient is recommended. For example, if the template has two placeholders, you should provide at least two recipients in the `recipients` array. Otherwise, the document will be sent to inexistent recipients such as `<recipient.1@documenso.com>`. However, the recipients can always be edited via the API or the web app.
|
||||
|
||||
A successful response will contain the document ID and recipient(s) information.
|
||||
|
||||
```json
|
||||
{
|
||||
"documentId": 999,
|
||||
"recipients": [
|
||||
{
|
||||
"recipientId": 0,
|
||||
"name": "Ash Drew",
|
||||
"email": "ashdrew@email.com",
|
||||
"token": "<signing-token>",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": null,
|
||||
"signingUrl": "https://app.documenso.com/sign/<signing-token>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can now access the document in your Documenso account dashboard. The screenshot below shows the document that was generated from the template.
|
||||
|
||||

|
||||
|
||||
</Steps>
|
||||
|
||||
## Add Fields to Document
|
||||
|
||||
The API allows you to add fields to a document via the `/api/v1/documents/{documentId}/fields` endpoint. This is useful when you want to add fields to a document before sending it to recipients.
|
||||
|
||||
To add fields to a document, you need to make a `POST` request with a JSON payload containing the field(s) information.
|
||||
|
||||
```json
|
||||
{
|
||||
"recipientId": 0,
|
||||
"type": "SIGNATURE",
|
||||
"pageNumber": 0,
|
||||
"pageX": 0,
|
||||
"pageY": 0,
|
||||
"pageWidth": 0,
|
||||
"pageHeight": 0,
|
||||
"fieldMeta": {
|
||||
"label": "string",
|
||||
"placeholder": "string",
|
||||
"required": true,
|
||||
"readOnly": true,
|
||||
"type": "text",
|
||||
"text": "string",
|
||||
"characterLimit": 0
|
||||
}
|
||||
}
|
||||
|
||||
// or
|
||||
|
||||
[
|
||||
{
|
||||
"recipientId": 0,
|
||||
"type": "SIGNATURE",
|
||||
"pageNumber": 0,
|
||||
"pageX": 0,
|
||||
"pageY": 0,
|
||||
"pageWidth": 0,
|
||||
"pageHeight": 0
|
||||
},
|
||||
{
|
||||
"recipientId": 0,
|
||||
"type": "TEXT",
|
||||
"pageNumber": 0,
|
||||
"pageX": 0,
|
||||
"pageY": 0,
|
||||
"pageWidth": 0,
|
||||
"pageHeight": 0,
|
||||
"fieldMeta": {
|
||||
"label": "string",
|
||||
"placeholder": "string",
|
||||
"required": true,
|
||||
"readOnly": true,
|
||||
"type": "text",
|
||||
"text": "string",
|
||||
"characterLimit": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
<Callout type="info">This endpoint accepts either one field or an array of fields.</Callout>
|
||||
|
||||
Before adding fields to a document, you need each recipient's ID. If the document already has recipients, you can query the document to retrieve the recipient's details. If the document has no recipients, you need to add a recipient via the UI or API before adding a field.
|
||||
|
||||
<Steps>
|
||||
|
||||
### Retrieve the Recipient(s) ID(s)
|
||||
|
||||
Perform a `GET` request to the `/api/v1/documents/{id}` to retrieve the details of a specific document, including the recipient's information.
|
||||
|
||||
An example response would look like this:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 137,
|
||||
"externalId": null,
|
||||
"userId": 3,
|
||||
"teamId": null,
|
||||
"title": "documenso.pdf",
|
||||
"status": "DRAFT",
|
||||
"documentDataId": "<document-data-id>",
|
||||
"createdAt": "2024-10-11T12:29:12.725Z",
|
||||
"updatedAt": "2024-10-11T12:29:12.725Z",
|
||||
"completedAt": null,
|
||||
"recipients": [
|
||||
{
|
||||
"id": 55,
|
||||
"documentId": 137,
|
||||
"email": "ashdrew@email.com",
|
||||
"name": "Ash Drew",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": null,
|
||||
"token": "<signing-token>",
|
||||
"signedAt": null,
|
||||
"readStatus": "NOT_OPENED",
|
||||
"signingStatus": "NOT_SIGNED",
|
||||
"sendStatus": "NOT_SENT",
|
||||
"signingUrl": "https://app.documenso.com/sign/<signing-token>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
From this response, you'll only need the recipient ID, which is `55` in this case.
|
||||
|
||||
### (OR) Add a Recipient
|
||||
|
||||
If the document doesn't already have recipient(s), you can add recipient(s) via the API. Make a `POST` request to the `/api/v1/documents/{documentId}/recipients` endpoint with the recipient information. This endpoint takes the following JSON payload:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "string",
|
||||
"email": "user@example.com",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 0,
|
||||
"authOptions": {
|
||||
"actionAuth": "ACCOUNT"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Callout type="info">The `authOptions` property is only available for Enterprise accounts.</Callout>
|
||||
|
||||
Here's an example of the JSON payload for adding a recipient:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Ash Drew",
|
||||
"email": "ashdrew@email.com",
|
||||
"role": "SIGNER",
|
||||
"signingOrder": 0
|
||||
}
|
||||
```
|
||||
|
||||
A successful request will return a JSON response with the newly added recipient. You can now use the recipient ID to add fields to the document.
|
||||
|
||||
### Add Field(s)
|
||||
|
||||
Now you can make a `POST` request to the `/api/v1/documents/{documentId}/fields` endpoint with the field(s) information. Here's an example:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"recipientId": 55,
|
||||
"type": "SIGNATURE",
|
||||
"pageNumber": 1,
|
||||
"pageX": 50,
|
||||
"pageY": 20,
|
||||
"pageWidth": 25,
|
||||
"pageHeight": 5
|
||||
},
|
||||
{
|
||||
"recipientId": 55,
|
||||
"type": "TEXT",
|
||||
"pageNumber": 1,
|
||||
"pageX": 20,
|
||||
"pageY": 50,
|
||||
"pageWidth": 30,
|
||||
"pageHeight": 7.5,
|
||||
"fieldMeta": {
|
||||
"label": "Address",
|
||||
"placeholder": "32 New York Street, 41241",
|
||||
"required": true,
|
||||
"readOnly": false,
|
||||
"type": "text",
|
||||
"text": "32 New York Street, 41241",
|
||||
"characterLimit": 40
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
<Callout type="info">
|
||||
The `text` field represents the default value of the field. If the user doesn't provide any other
|
||||
value, this is the value that will be used to sign the field.
|
||||
</Callout>
|
||||
|
||||
A successful request will return a JSON response with the newly added fields. The image below illustrates the fields added to the document via the API.
|
||||
|
||||

|
||||
|
||||
</Steps>
|
||||
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 65 KiB |
@ -0,0 +1,82 @@
|
||||
---
|
||||
title: Cal.com Chooses Documenso for DPA and BAA Scalability and Compliance
|
||||
description: Learn how Cal.com scales their Data Processing Agreement (DPA) and Business Associate Agreement (BAA) processes with Documenso’s open source platform as they grow.
|
||||
authorName: 'Timur Ercan'
|
||||
authorImage: '/blog/blog-author-timur.jpeg'
|
||||
authorRole: 'Co-Founder'
|
||||
date: 2024-10-11
|
||||
tags:
|
||||
- Customer Story
|
||||
- Open Startup
|
||||
- Open Source
|
||||
---
|
||||
|
||||
<figure>
|
||||
<MdxNextImage
|
||||
src="/blog/cal2.png"
|
||||
width="1260"
|
||||
height="630"
|
||||
alt="Scheduling Infrastructure for Everyone"
|
||||
/>
|
||||
|
||||
<figcaption className="text-center">
|
||||
Scheduling Infrastructure for Everyone.
|
||||
</figcaption>
|
||||
</figure>
|
||||
TL;DR: Cal.com uses Documenso’s template direct links to facilitate low-friction compliance paperwork, enhancing scalability and user experience.
|
||||
|
||||
## Cal.com – The Most Public Private Company
|
||||
|
||||
[Cal.com](Cal.com) is an open source company that needs no introduction. Founded in 2021 by Bailey Pumfleet and Peer Richelsen, it quickly evolved from an open source alternative to the widespread but limited scheduling platform Calendly into the internet’s most beloved scheduling solution. Starting with just two founders, Cal.com has grown into a team of 22, facilitating millions of bookings per year for its ever-growing user and customer base.
|
||||
|
||||
Their commitment to transparency is evident as they follow the [open startup movement](https://cal.com/open), opening up not only their source code but also providing insights into their business operations. Their Commercial Open Source Software (COSS) model, combining a company and an open source project, has inspired a whole cohort of startups joining the space—not least of which is Documenso.
|
||||
|
||||
## The Need
|
||||
|
||||
At this point, Cal.com serves customers of all sizes, from single users to large enterprises. To provide the best product for their customers, they are certified for SOC 2, HIPAA, GDPR, and many other compliance regulations. One challenge that comes with this is the increasing number of waivers that need to be signed when onboarding customers. Business Associate Agreements (BAAs) and Data Processing Agreements (DPAs) are two of the more commonly known examples. To get these signed with minimal effort for both sides, they were looking for a solution to handle these at scale.
|
||||
|
||||
> We love open source.
|
||||
|
||||
— Peer Richelsen, Co-Founder, Cal.com
|
||||
|
||||
Being an open source company, they also prefer open source in their vendors—for both the shared philosophy and the higher level of trust. The goal was to integrate signing into the checkout process as seamlessly as possible.
|
||||
|
||||
## The Solution
|
||||
|
||||
<figure>
|
||||
<MdxNextImage
|
||||
src="/blog/cal.png"
|
||||
width="1260"
|
||||
height="630"
|
||||
alt="Cal.com direct link template to sign a DPA"
|
||||
/>
|
||||
|
||||
<figcaption className="text-center">
|
||||
Sign a DPA with Cal by clicking a link anytime.
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
Documenso offers exactly this solution through direct link templates, enabling Cal.com to:
|
||||
|
||||
- Provide Immediate Access: Customers can access and sign necessary compliance documents through direct links at any time.
|
||||
- Enhance User Experience: Users are immediately forwarded to onboarding after signing.
|
||||
- Ensure Easy Access: The documents are stored within the company’s team account, allowing easy access for anyone who needs them.
|
||||
|
||||
Direct Link templates can also easily be embedded, using the [Documenso widget](https://documen.so/embedded). Embedding anywhere, pre-Filling the templates and notfiying the compliance team at certain point of the flow are a few of the many option the team now has in continously enhanceing their onboard and compliance UX.
|
||||
|
||||
Read more about our direct link templates here: [Direct Link Signing](https://docs.documenso.com/users/direct-links).
|
||||
|
||||
## The Journey
|
||||
|
||||
Initially, Cal.com’s team approached the new solution with skepticism. As Bailey reflected:
|
||||
|
||||
> We were intrigued but skeptical at first, as we put a lot of thought into compliance and doing things right. Documenso’s documentation and support showcased how their direct link templates could meet our needs while being highly compliant.
|
||||
|
||||
This experience highlights Documenso’s trust philosophy. We strive to be transparent in everything we do and let people judge for themselves. It also shows that we neither want nor get trust by default. Doing things right is a conversation worth having, especially in a space as opaque as digital signatures. It goes without saying that the whole team is hyped to have Cal.com on board and yet another open source company joining the open signing movement 🚀
|
||||
|
||||
If you have any questions or comments, please reach out on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord).
|
||||
|
||||
Thinking about switching to a modern signing platform? Reach out anytime: [https://documen.so/sales](https://documen.so/sales)
|
||||
|
||||
Best from Hamburg\
|
||||
Timur
|
||||
@ -0,0 +1,85 @@
|
||||
---
|
||||
title: 'Customer Story Prisma: 4 Reasons why Prisma chose Documenso for Signatures'
|
||||
description: We are happy to welcome Prisma, another OSS company, as a customer. Read here why they choose us.
|
||||
authorName: 'Timur Ercan'
|
||||
authorImage: '/blog/blog-author-timur.jpeg'
|
||||
authorRole: 'Co-Founder'
|
||||
date: 2024-09-26
|
||||
tags:
|
||||
- Prisma
|
||||
- Customer Story
|
||||
- Open Source
|
||||
---
|
||||
|
||||
<figure>
|
||||
<MdxNextImage
|
||||
src="/blog/prisma.png"
|
||||
width="1200"
|
||||
height="675"
|
||||
alt="Primsa Landing Page We simplify database migration, connection pooling, database queries, and readable data models."
|
||||
/>
|
||||
|
||||
<figcaption className="text-center">
|
||||
Prisma uses Documenso for collaborative team signing.
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
> TLDR; Prisma is now using Documenso, and [we added visibility scopes](https://docs.documenso.com/users/document-visibility)
|
||||
|
||||
# Prisma
|
||||
|
||||
Prisma is an open-source company known for its modern OSS ORM (Object-Relational Mapping) tools that simplify database interactions for developers. Their flagship product, Prisma ORM, provides a type-safe way to query databases like PostgreSQL, MySQL, and many more. With the addition of Prisma Studio, an intuitive database management interface, Prisma makes it easier and more efficient for developers to work with databases. With their new additions, Prisma Pulse and Accelerate, you can react to real-time database changes and optimize your queries. And they are completely [open source](https://github.com/prisma/prisma)!
|
||||
|
||||
# We choose Prisma too!
|
||||
|
||||
I discovered Prisma when planning the tech stack for the [first version of Documenso](https://github.com/documenso/documenso/releases/tag/0.9-developer-preview). Prisma has felt natural to use since day one and has been the base of our database architecture ever since. It's great to see them develop and grow with us.
|
||||
|
||||
# Why they choose us
|
||||
|
||||
## 1. Signature Flows
|
||||
|
||||
Documenso signing flows are highly configurable, designed to adapt to the needs of any document signing process. Whether you're working with different roles, varying settings, or specific delivery methods, Documenso offers the flexibility to suit your requirements. You can choose to send documents via email, share a manual link, generate a link through the API, or even use a static direct link for quick access—all while ensuring a smooth signing experience.
|
||||
|
||||
Additionally, you can create templates to streamline and reuse common workflows, saving valuable time. Direct link templates enable users to drive the flow themselves, providing a straightforward path for signing. For a seamless experience, Documenso also allows you to embed the signing process directly into your website, ensuring an uninterrupted, integrated workflow tailored to your needs.
|
||||
|
||||
## 2. Modern UX
|
||||
|
||||
<figure>
|
||||
<MdxNextImage
|
||||
src="/blog/dsux.png"
|
||||
width="1200"
|
||||
height="675"
|
||||
alt="A completed document in Documenso, ready to download."
|
||||
/>
|
||||
|
||||
<figcaption className="text-center">
|
||||
We call Documenso's design "Happy Minimalism"
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
We’ve crafted Documenso with a sleek, modern interface that makes it incredibly easy to use. Whether you’re signing documents, managing workflows, or fine-tuning settings, its intuitive design allows you to accomplish tasks quickly and effortlessly. More than just powerful, Documenso is a pleasure to navigate—designed to be accessible to everyone, no matter their level of tech experience.
|
||||
|
||||
## 3. Teams
|
||||
|
||||
### Teamwork Makes the Dream Work
|
||||
|
||||
Documenso makes teamwork a breeze with its team management features. You can easily set up and organize teams, making it simple to share and manage documents and workflows together. This is a lifesaver for larger organizations or teams spread across different departments, ensuring everyone stays in sync and on track. Different visibility scopes ensure private documents stay private and others are shared for easy collaboration.
|
||||
|
||||
### Document Visibility
|
||||
|
||||
Collaboration within a team often demands different levels of access to documents. For instance, the Documenso team at Prisma needed a way to set custom visibility on some documents while keeping others accessible to everyone. To address this need, we introduced role-based visibility scopes. This feature allows teams to manage documents more effectively. They can make certain documents visible only to managers or, in special cases, restricted to admins. This ensures sensitive information stays protected while general documents remain accessible to those who need them.
|
||||
|
||||
Learn more about visibility scopes and [how they can benefit your team here](https://docs.documenso.com/users/document-visibility).
|
||||
|
||||
## 4. OSS!
|
||||
|
||||
As you might know, we are open-source! This means you can peek under the hood, tweak things to your liking, and even contribute to making the platform better. We love the community-driven aspect of open-source, and it aligns perfectly with our goal to keep improving and innovating with input from our users.
|
||||
|
||||
So, whether you're looking to streamline your document workflows or just need a solid, reliable platform, Documenso has got your back. And we're thrilled to serve another OSS company and help make the space more open.
|
||||
|
||||
If you have any questions or comments, please reach out on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord).
|
||||
|
||||
Thinking about switching to a modern signing platform? Reach out anytime: [https://documen.so/sales](https://documen.so/sales)
|
||||
|
||||
Best from Hamburg\
|
||||
Timur
|
||||
86
apps/marketing/content/blog/go-fork-yourself.mdx
Normal file
@ -0,0 +1,86 @@
|
||||
---
|
||||
title: Go Fork Yourself
|
||||
description: Curious about our take on open-source and code forking? Discover why we see forking not as a threat but as a vital part of the Open Source ecosystem.
|
||||
authorName: 'Timur Ercan'
|
||||
authorImage: '/blog/blog-author-timur.jpeg'
|
||||
authorRole: 'Co-Founder'
|
||||
date: 2024-10-03
|
||||
tags:
|
||||
- Culture
|
||||
- Open Startup
|
||||
- Open Source
|
||||
---
|
||||
|
||||
> TLDR; At Documenso, we see OSS as co-owned by all. Forking—collaborative or not—is part of the open-source spirit.
|
||||
|
||||
## Freedom vs. Ownership
|
||||
|
||||
Recently, there has been a lot of debate on the subject of forks and the usage of OSS IP (Open Source Software Intellectual Property). While I mostly aim to stay out of these controversies (as there is no “winning”), I wanted to take this opportunity to share my views on IP and forking culture here at Documenso. I don’t presume this is the ideal path, but for me, it’s the only path that makes sense.
|
||||
|
||||
What these issues show foremost, in my opinion, is that the concept of Open Source is still evolving. I have heard many say, “Open Source is clearly defined” and that there is no ambiguity anymore. That may be true on the legal side, but there are vast differences in how these rules are interpreted and lived out. Here are a few questions to illustrate the point:
|
||||
|
||||
1. Is it okay to use an open-source project without ever giving back?
|
||||
2. Is it okay to fork (some might say copy) an OSS product and build something on top of it?
|
||||
3. Are we morally obliged to fight those who provide different answers to these questions than we do?
|
||||
|
||||
## Embracing Forks and Collaboration
|
||||
|
||||
Since starting Documenso, I’ve thought a lot about what it actually means to be Open Source for us. So far, it has been about openness in working with everyone, from contributors to customers and sharing our work transparently. For this, we have been richly rewarded with attention and reach. This collaborative give-and-take is what people commonly associate with being Open Source, and it seems ideal.
|
||||
|
||||
Yet, there are the questions mentioned above. And while these may be contentious, my take is straightforward:
|
||||
|
||||
1. Yes.
|
||||
2. Yes.
|
||||
3. No.
|
||||
|
||||
I say this because, to me, the principles of Open Source are rooted in freedom and collaboration. That means allowing others to use, improve, or even compete with what you’ve built without feeling possessive over the code. The beauty of Open Source lies in its openness—its ability to be forked, reused, and adapted by anyone.
|
||||
|
||||
You may answer these questions differently for your own reasons. One thing I’ve found lacking in the discourse is the fact that Open Source is still being treated as socially proprietary. If it’s under an open-source license, you can fork it and try to improve upon the original, and there’s nothing wrong with that. The same is true for closed-source startups. Yet in Open Source, there’s a notion that it’s somehow “dirty,” even though the license explicitly allows it.
|
||||
|
||||
## Forking in Action: Real-World Examples
|
||||
|
||||
When the team behind **Node.js** disagreed with its governance and pace of development, they forked the project to create **io.js**. This wasn’t seen as dirty but as a necessary push for change. In fact, the fork resulted in positive changes—better community governance and faster development—which eventually led to the merge of the two projects under the Node.js Foundation. It shows that forking can be a catalyst for improvement, not just competition.
|
||||
|
||||
## The Misconception of “Exploitative” Usage
|
||||
|
||||
However, sometimes forks don’t merge back but still bring positive change. A good example is **Jenkins**, which was forked from **Hudson** over disagreements in governance after Oracle acquired Sun Microsystems. Jenkins quickly overtook Hudson in terms of community support, development, and innovation. Rather than being seen as a hostile move, the fork enabled Jenkins to become a thriving project, better aligned with the open-source ethos of collaboration and transparency. It emphasizes that forking isn’t inherently exploitative; it can simply be a way to realize a project’s full potential.
|
||||
|
||||
And then there’s **MariaDB**, a fork of **MySQL**. After Oracle acquired MySQL, many in the community feared the project’s open-source nature could be compromised. The fork preserved its spirit, and MariaDB has since grown to become a popular and thriving database. It’s a reminder that sometimes, forking is not just acceptable—it’s necessary to uphold the values and freedoms of open-source software.
|
||||
|
||||
<figure>
|
||||
<MdxNextImage
|
||||
src="/blog/owncode.jpeg"
|
||||
width="1200"
|
||||
height="675"
|
||||
alt="Meme: If everyone owns the code, no one does."
|
||||
/>
|
||||
|
||||
<figcaption className="text-center">
|
||||
Funny Meme to drive the point home.
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
My view is that the code is not “your” code, just as Documenso’s code is not “our” code. It’s been co-owned by the world ever since we published the repo under AGPL V3. That is the whole point. It’s finally not owned by anyone (cue the “everyone/no one” meme). Open Source is for everyone, even competitors. Yet, we are still treating the licenses as extensions of the old, proprietary world and defending perceived injustices based on that model.
|
||||
|
||||
> Side Note: Full compliance with all license and other legal rules is a given here.
|
||||
|
||||
## Documenso’s Approach: Co-Ownership and Community
|
||||
|
||||
So, if you want to fork Documenso and build a business on it, you can. Whether that’s a cool thing to do is another matter. Whether you do a better job than us is also another matter (you won’t). But if you do, I’ll be the first to join. But why not join us from the start since you already have the upside? We exist because we believe this to be the best way forward—not because we force it.
|
||||
|
||||
## The Bigger Picture: Open-Source as Progress
|
||||
|
||||
I’ve also thought a lot about question #3. I understand the impulse to fight anyone who doesn’t appreciate this collaborative approach, but there is no part of this model that backs that up. You are free to “exploit” as long as it’s in a way that adds value. The fallacy is in considering someone else using the OSS part for their business as treason, which it’s not. It’s the whole point.
|
||||
|
||||
While some might say this is theoretical and that reality is different, this is the version of Open Source on which we are building Documenso. The point here is that OSS companies must be resilient to handle forking and competition; without this resilience, an open source driven economy can’t thrive. The focus on freedom and collaboration means being prepared for forks and challenges as part of the growth, not as threats.
|
||||
|
||||
Of course, all of this applies to Documenso, the OSS project, not Documenso Inc., the company, which is very much a privately owned, for-profit entity. However, since the goal is to scale Documenso to the entire world, there is plenty of room to see everyone as co-owners of the Open Source project rather than as competitors. In the end, Open Source is about progress through freedom. If you don’t like how we run things, go fork yourself and hold us accountable. We don’t own this; we just happened to start it.
|
||||
|
||||
> Since this article is open source as well, you are free to fork it and change it here: [https://documen.so/repo](https://documen.so/repo)
|
||||
|
||||
If you have any questions or comments, please reach out on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord).
|
||||
|
||||
Thinking about switching to a modern signing platform? Reach out anytime: [https://documen.so/sales](https://documen.so/sales)
|
||||
|
||||
Best from Hamburg\
|
||||
Timur
|
||||
@ -8,6 +8,61 @@ Check out what's new in the latest version and read our thoughts on it. For more
|
||||
|
||||
---
|
||||
|
||||
# Documenso v1.7.1: Signing order and document visibility
|
||||
|
||||
We're excited to introduce Documenso v1.7.1, bringing you improved control over your document signing process. Here are the key updates:
|
||||
|
||||
## 🌟 Key New Features
|
||||
|
||||
### 1. Signing Order
|
||||
|
||||
Specify the sequence in which recipients sign your documents. This ensures a structured signing process, particularly useful for complex agreements or hierarchical approvals.
|
||||
|
||||
<video
|
||||
src="/changelog/signing-order-demo.mp4"
|
||||
className="aspect-video w-full"
|
||||
autoPlay
|
||||
loop
|
||||
controls
|
||||
/>
|
||||
|
||||
### 2. Document Visibility
|
||||
|
||||
Manage who can view your documents and when. This feature offers greater privacy and flexibility in your document sharing workflows.
|
||||
|
||||
<video
|
||||
src="/changelog/document-visibility-demo.mp4"
|
||||
className="aspect-video w-full"
|
||||
autoPlay
|
||||
loop
|
||||
controls
|
||||
/>
|
||||
|
||||
## 🔧 Other Improvements
|
||||
|
||||
- Added language switcher for easier language selection
|
||||
- Support for smaller field bounds in documents
|
||||
- Improved select field UX
|
||||
- Enhanced template functionality for advanced fields
|
||||
- Added authOptions to the API
|
||||
- Various UI refinements and bug fixes
|
||||
|
||||
## 💡 Recent Features
|
||||
|
||||
Don't forget about these powerful features from our recent v1.7.0 release:
|
||||
|
||||
- Embedded Signing Experience
|
||||
- Copy and Paste Fields
|
||||
- Customizable Signature Colors
|
||||
|
||||
## 👏 Thank You
|
||||
|
||||
As always, we're grateful for our community's contributions and feedback. Your input continues to shape Documenso into the leading open-source document signing solution.
|
||||
|
||||
We're eager to see how these new features enhance your document workflows. Enjoy exploring Documenso v1.7.1!
|
||||
|
||||
---
|
||||
|
||||
# Documenso v1.7.0: Embedded Signing, Copy and Paste, and More
|
||||
|
||||
We're thrilled to announce the release of Documenso v1.7.0, packed with exciting new features and improvements that enhance document signing flexibility, user experience, and global accessibility.
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@documenso/marketing",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0",
|
||||
"scripts": {
|
||||
"dev": "next dev -p 3001",
|
||||
"build": "next build",
|
||||
"build": "npm run translate:extract --prefix ../../ && turbo run translate:compile && next build",
|
||||
"start": "next start -p 3001",
|
||||
"lint": "next lint",
|
||||
"lint:fix": "next lint --fix",
|
||||
@ -56,4 +56,4 @@
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
apps/marketing/public/blog/cal.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
apps/marketing/public/blog/cal2.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
apps/marketing/public/blog/dsux.png
Normal file
|
After Width: | Height: | Size: 692 KiB |
BIN
apps/marketing/public/blog/owncode.jpeg
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
apps/marketing/public/blog/prisma.png
Normal file
|
After Width: | Height: | Size: 435 KiB |
BIN
apps/marketing/public/changelog/document-visibility-demo.mp4
Normal file
BIN
apps/marketing/public/changelog/signing-order-demo.mp4
Normal file
@ -19,10 +19,10 @@ export const TEAM_MEMBERS = [
|
||||
},
|
||||
{
|
||||
name: 'Ephraim Atta-Duncan',
|
||||
role: 'Software Engineer - Intern',
|
||||
salary: 15_000,
|
||||
role: 'Software Engineer - I',
|
||||
salary: 60_000,
|
||||
location: 'Ghana',
|
||||
engagement: msg`Part-Time`,
|
||||
engagement: msg`Full-Time`,
|
||||
joinDate: 'June 6th, 2023',
|
||||
},
|
||||
{
|
||||
|
||||
@ -108,14 +108,21 @@ export const Carousel = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
setSelectedIndex(emblaApi.selectedScrollSnap());
|
||||
emblaThumbsApi.scrollTo(emblaApi.selectedScrollSnap());
|
||||
const newIndex = emblaApi.selectedScrollSnap();
|
||||
|
||||
setSelectedIndex(newIndex);
|
||||
emblaThumbsApi.scrollTo(newIndex);
|
||||
|
||||
resetProgress();
|
||||
|
||||
const currentVideo = videoRefs.current[newIndex];
|
||||
if (currentVideo) {
|
||||
currentVideo.currentTime = 0;
|
||||
}
|
||||
|
||||
// moduleResolution: bundler breaks this type
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
||||
const autoplay = emblaApi.plugins()?.autoplay as unknown as AutoplayType | undefined;
|
||||
const autoplay = emblaApi?.plugins()?.autoplay as unknown as AutoplayType | undefined;
|
||||
|
||||
if (autoplay) {
|
||||
autoplay.reset();
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@documenso/web",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0",
|
||||
"scripts": {
|
||||
"dev": "next dev -p 3000",
|
||||
"build": "next build",
|
||||
"build": "npm run translate:extract --prefix ../../ && turbo run translate:compile && next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"e2e:prepare": "next build && next start",
|
||||
@ -74,4 +74,4 @@
|
||||
"@types/ua-parser-js": "^0.7.39",
|
||||
"typescript": "5.2.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,6 +112,24 @@ export const EditDocumentForm = ({
|
||||
},
|
||||
});
|
||||
|
||||
const { mutateAsync: updateTypedSignature } =
|
||||
trpc.document.updateTypedSignatureSettings.useMutation({
|
||||
...DO_NOT_INVALIDATE_QUERY_ON_MUTATION,
|
||||
onSuccess: (newData) => {
|
||||
utils.document.getDocumentWithDetailsById.setData(
|
||||
{
|
||||
id: initialDocument.id,
|
||||
teamId: team?.id,
|
||||
},
|
||||
(oldData) => ({
|
||||
...(oldData || initialDocument),
|
||||
...newData,
|
||||
id: Number(newData.id),
|
||||
}),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
const { mutateAsync: addSigners } = trpc.recipient.addSigners.useMutation({
|
||||
...DO_NOT_INVALIDATE_QUERY_ON_MUTATION,
|
||||
onSuccess: (newRecipients) => {
|
||||
@ -258,6 +276,11 @@ export const EditDocumentForm = ({
|
||||
fields: data.fields,
|
||||
});
|
||||
|
||||
await updateTypedSignature({
|
||||
documentId: document.id,
|
||||
typedSignatureEnabled: data.typedSignatureEnabled,
|
||||
});
|
||||
|
||||
// Clear all field data from localStorage
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
@ -387,6 +410,7 @@ export const EditDocumentForm = ({
|
||||
fields={fields}
|
||||
onSubmit={onAddFieldsFormSubmit}
|
||||
isDocumentPdfLoaded={isDocumentPdfLoaded}
|
||||
typedSignatureEnabled={document.documentMeta?.typedSignatureEnabled}
|
||||
teamId={team?.id}
|
||||
/>
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-documen
|
||||
import { Avatar, AvatarFallback, AvatarImage } from '@documenso/ui/primitives/avatar';
|
||||
import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs';
|
||||
|
||||
import { DocumentSearch } from '~/components/(dashboard)/document-search/document-search';
|
||||
import { PeriodSelector } from '~/components/(dashboard)/period-selector/period-selector';
|
||||
import { isPeriodSelectorValue } from '~/components/(dashboard)/period-selector/types';
|
||||
import { DocumentStatus } from '~/components/formatter/document-status';
|
||||
@ -25,16 +26,17 @@ import { DataTableSenderFilter } from './data-table-sender-filter';
|
||||
import { EmptyDocumentState } from './empty-state';
|
||||
import { UploadDocument } from './upload-document';
|
||||
|
||||
export type DocumentsPageViewProps = {
|
||||
export interface DocumentsPageViewProps {
|
||||
searchParams?: {
|
||||
status?: ExtendedDocumentStatus;
|
||||
period?: PeriodSelectorValue;
|
||||
page?: string;
|
||||
perPage?: string;
|
||||
senderIds?: string;
|
||||
search?: string;
|
||||
};
|
||||
team?: Team & { teamEmail?: TeamEmail | null } & { currentTeamMember?: { role: TeamMemberRole } };
|
||||
};
|
||||
}
|
||||
|
||||
export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPageViewProps) => {
|
||||
const { user } = await getRequiredServerComponentSession();
|
||||
@ -44,6 +46,7 @@ export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPa
|
||||
const page = Number(searchParams.page) || 1;
|
||||
const perPage = Number(searchParams.perPage) || 20;
|
||||
const senderIds = parseToIntegerArray(searchParams.senderIds ?? '');
|
||||
const search = searchParams.search || '';
|
||||
const currentTeam = team
|
||||
? { id: team.id, url: team.url, teamEmail: team.teamEmail?.email }
|
||||
: undefined;
|
||||
@ -52,6 +55,7 @@ export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPa
|
||||
const getStatOptions: GetStatsInput = {
|
||||
user,
|
||||
period,
|
||||
search,
|
||||
};
|
||||
|
||||
if (team) {
|
||||
@ -79,6 +83,7 @@ export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPa
|
||||
perPage,
|
||||
period,
|
||||
senderIds,
|
||||
search,
|
||||
});
|
||||
|
||||
const getTabHref = (value: typeof status) => {
|
||||
@ -135,10 +140,7 @@ export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPa
|
||||
<DocumentStatus status={value} />
|
||||
|
||||
{value !== ExtendedDocumentStatus.ALL && (
|
||||
<span className="ml-1 inline-block opacity-50">
|
||||
{Math.min(stats[value], 99)}
|
||||
{stats[value] > 99 && '+'}
|
||||
</span>
|
||||
<span className="ml-1 inline-block opacity-50">{stats[value]}</span>
|
||||
)}
|
||||
</Link>
|
||||
</TabsTrigger>
|
||||
@ -151,6 +153,9 @@ export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPa
|
||||
<div className="flex w-48 flex-wrap items-center justify-between gap-x-2 gap-y-4">
|
||||
<PeriodSelector />
|
||||
</div>
|
||||
<div className="flex w-48 flex-wrap items-center justify-between gap-x-2 gap-y-4">
|
||||
<DocumentSearch initialValue={search} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -144,6 +144,7 @@ export const TemplatesDataTable = ({
|
||||
<div className="flex items-center gap-x-4">
|
||||
<UseTemplateDialog
|
||||
templateId={row.original.id}
|
||||
templateSigningOrder={row.original.templateMeta?.signingOrder}
|
||||
recipients={row.original.Recipient}
|
||||
documentRootPath={documentRootPath}
|
||||
/>
|
||||
|
||||
@ -434,12 +434,14 @@ export const TemplateDirectLinkDialog = ({
|
||||
<Button
|
||||
type="button"
|
||||
loading={isTogglingTemplateAccess}
|
||||
onClick={async () =>
|
||||
toggleTemplateDirectLink({
|
||||
onClick={async () => {
|
||||
await toggleTemplateDirectLink({
|
||||
templateId: template.id,
|
||||
enabled: isEnabled,
|
||||
})
|
||||
}
|
||||
}).catch((e) => null);
|
||||
|
||||
onOpenChange(false);
|
||||
}}
|
||||
>
|
||||
<Trans>Save</Trans>
|
||||
</Button>
|
||||
|
||||
@ -15,7 +15,9 @@ import {
|
||||
} from '@documenso/lib/constants/template';
|
||||
import { AppError } from '@documenso/lib/errors/app-error';
|
||||
import type { Recipient } from '@documenso/prisma/client';
|
||||
import { DocumentSigningOrder } from '@documenso/prisma/client';
|
||||
import { trpc } from '@documenso/trpc/react';
|
||||
import { cn } from '@documenso/ui/lib/utils';
|
||||
import { Button } from '@documenso/ui/primitives/button';
|
||||
import { Checkbox } from '@documenso/ui/primitives/checkbox';
|
||||
import {
|
||||
@ -51,6 +53,7 @@ const ZAddRecipientsForNewDocumentSchema = z
|
||||
id: z.number(),
|
||||
email: z.string().email(),
|
||||
name: z.string(),
|
||||
signingOrder: z.number().optional(),
|
||||
}),
|
||||
),
|
||||
})
|
||||
@ -86,6 +89,7 @@ type TAddRecipientsForNewDocumentSchema = z.infer<typeof ZAddRecipientsForNewDoc
|
||||
|
||||
export type UseTemplateDialogProps = {
|
||||
templateId: number;
|
||||
templateSigningOrder?: DocumentSigningOrder | null;
|
||||
recipients: Recipient[];
|
||||
documentRootPath: string;
|
||||
};
|
||||
@ -94,6 +98,7 @@ export function UseTemplateDialog({
|
||||
recipients,
|
||||
documentRootPath,
|
||||
templateId,
|
||||
templateSigningOrder,
|
||||
}: UseTemplateDialogProps) {
|
||||
const router = useRouter();
|
||||
|
||||
@ -108,21 +113,24 @@ export function UseTemplateDialog({
|
||||
resolver: zodResolver(ZAddRecipientsForNewDocumentSchema),
|
||||
defaultValues: {
|
||||
sendDocument: false,
|
||||
recipients: recipients.map((recipient) => {
|
||||
const isRecipientEmailPlaceholder = recipient.email.match(
|
||||
TEMPLATE_RECIPIENT_EMAIL_PLACEHOLDER_REGEX,
|
||||
);
|
||||
recipients: recipients
|
||||
.sort((a, b) => (a.signingOrder || 0) - (b.signingOrder || 0))
|
||||
.map((recipient) => {
|
||||
const isRecipientEmailPlaceholder = recipient.email.match(
|
||||
TEMPLATE_RECIPIENT_EMAIL_PLACEHOLDER_REGEX,
|
||||
);
|
||||
|
||||
const isRecipientNamePlaceholder = recipient.name.match(
|
||||
TEMPLATE_RECIPIENT_NAME_PLACEHOLDER_REGEX,
|
||||
);
|
||||
const isRecipientNamePlaceholder = recipient.name.match(
|
||||
TEMPLATE_RECIPIENT_NAME_PLACEHOLDER_REGEX,
|
||||
);
|
||||
|
||||
return {
|
||||
id: recipient.id,
|
||||
name: !isRecipientNamePlaceholder ? recipient.name : '',
|
||||
email: !isRecipientEmailPlaceholder ? recipient.email : '',
|
||||
};
|
||||
}),
|
||||
return {
|
||||
id: recipient.id,
|
||||
name: !isRecipientNamePlaceholder ? recipient.name : '',
|
||||
email: !isRecipientEmailPlaceholder ? recipient.email : '',
|
||||
signingOrder: recipient.signingOrder ?? undefined,
|
||||
};
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@ -203,6 +211,33 @@ export function UseTemplateDialog({
|
||||
<div className="custom-scrollbar -m-1 max-h-[60vh] space-y-4 overflow-y-auto p-1">
|
||||
{formRecipients.map((recipient, index) => (
|
||||
<div className="flex w-full flex-row space-x-4" key={recipient.id}>
|
||||
{templateSigningOrder === DocumentSigningOrder.SEQUENTIAL && (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={`recipients.${index}.signingOrder`}
|
||||
render={({ field }) => (
|
||||
<FormItem
|
||||
className={cn('w-20', {
|
||||
'mt-8': index === 0,
|
||||
})}
|
||||
>
|
||||
<FormControl>
|
||||
<Input
|
||||
{...field}
|
||||
disabled
|
||||
className="items-center justify-center"
|
||||
value={
|
||||
field.value?.toString() ||
|
||||
recipients[index]?.signingOrder?.toString()
|
||||
}
|
||||
/>
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={`recipients.${index}.email`}
|
||||
|
||||
@ -9,9 +9,10 @@ import { useSession } from 'next-auth/react';
|
||||
import { useForm } from 'react-hook-form';
|
||||
|
||||
import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics';
|
||||
import type { DocumentAndSender } from '@documenso/lib/server-only/document/get-document-by-token';
|
||||
import type { TRecipientActionAuth } from '@documenso/lib/types/document-auth';
|
||||
import { sortFieldsByPosition, validateFieldsInserted } from '@documenso/lib/utils/fields';
|
||||
import { type Document, type Field, type Recipient, RecipientRole } from '@documenso/prisma/client';
|
||||
import { type Field, type Recipient, RecipientRole } from '@documenso/prisma/client';
|
||||
import { trpc } from '@documenso/trpc/react';
|
||||
import { FieldToolTip } from '@documenso/ui/components/field/field-tooltip';
|
||||
import { cn } from '@documenso/ui/lib/utils';
|
||||
@ -25,7 +26,7 @@ import { useRequiredSigningContext } from './provider';
|
||||
import { SignDialog } from './sign-dialog';
|
||||
|
||||
export type SigningFormProps = {
|
||||
document: Document;
|
||||
document: DocumentAndSender;
|
||||
recipient: Recipient;
|
||||
fields: Field[];
|
||||
redirectUrl?: string | null;
|
||||
@ -196,6 +197,7 @@ export const SigningForm = ({
|
||||
onChange={(value) => {
|
||||
setSignature(value);
|
||||
}}
|
||||
allowTypedSignature={document.documentMeta?.typedSignatureEnabled}
|
||||
/>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@ -31,12 +31,12 @@ import { useRequiredSigningContext } from './provider';
|
||||
import { SigningFieldContainer } from './signing-field-container';
|
||||
|
||||
type SignatureFieldState = 'empty' | 'signed-image' | 'signed-text';
|
||||
|
||||
export type SignatureFieldProps = {
|
||||
field: FieldWithSignature;
|
||||
recipient: Recipient;
|
||||
onSignField?: (value: TSignFieldWithTokenMutationSchema) => Promise<void> | void;
|
||||
onUnsignField?: (value: TRemovedSignedFieldWithTokenMutationSchema) => Promise<void> | void;
|
||||
typedSignatureEnabled?: boolean;
|
||||
};
|
||||
|
||||
export const SignatureField = ({
|
||||
@ -44,6 +44,7 @@ export const SignatureField = ({
|
||||
recipient,
|
||||
onSignField,
|
||||
onUnsignField,
|
||||
typedSignatureEnabled,
|
||||
}: SignatureFieldProps) => {
|
||||
const router = useRouter();
|
||||
|
||||
@ -92,14 +93,12 @@ export const SignatureField = ({
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* When the user clicks the sign button in the dialog where they enter their signature.
|
||||
*/
|
||||
const onDialogSignClick = () => {
|
||||
setShowSignatureModal(false);
|
||||
setProvidedSignature(localSignature);
|
||||
|
||||
if (!localSignature) {
|
||||
return;
|
||||
}
|
||||
@ -109,7 +108,6 @@ export const SignatureField = ({
|
||||
actionTarget: field.type,
|
||||
});
|
||||
};
|
||||
|
||||
const onSign = async (authOptions?: TRecipientActionAuth, signature?: string) => {
|
||||
try {
|
||||
const value = signature || providedSignature;
|
||||
@ -231,11 +229,11 @@ export const SignatureField = ({
|
||||
id="signature"
|
||||
className="border-border mt-2 h-44 w-full rounded-md border"
|
||||
onChange={(value) => setLocalSignature(value)}
|
||||
allowTypedSignature={typedSignatureEnabled}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<SigningDisclosure />
|
||||
|
||||
<DialogFooter>
|
||||
<div className="flex w-full flex-1 flex-nowrap gap-4">
|
||||
<Button
|
||||
@ -249,7 +247,6 @@ export const SignatureField = ({
|
||||
>
|
||||
<Trans>Cancel</Trans>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
type="button"
|
||||
className="flex-1"
|
||||
|
||||
@ -128,7 +128,7 @@ export const SigningFieldContainer = ({
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={cn('[container-type:size]', type === 'Checkbox' ? 'group' : '')}>
|
||||
<div className={cn('[container-type:size]', { group: type === 'Checkbox' })}>
|
||||
<FieldRootContainer field={field}>
|
||||
{!field.inserted && !loading && !readOnlyField && (
|
||||
<button
|
||||
|
||||
@ -112,7 +112,12 @@ export const SigningPageView = ({
|
||||
{fields.map((field) =>
|
||||
match(field.type)
|
||||
.with(FieldType.SIGNATURE, () => (
|
||||
<SignatureField key={field.id} field={field} recipient={recipient} />
|
||||
<SignatureField
|
||||
key={field.id}
|
||||
field={field}
|
||||
recipient={recipient}
|
||||
typedSignatureEnabled={documentMeta?.typedSignatureEnabled}
|
||||
/>
|
||||
))
|
||||
.with(FieldType.INITIALS, () => (
|
||||
<InitialsField key={field.id} field={field} recipient={recipient} />
|
||||
|
||||
@ -318,6 +318,7 @@ export const EmbedDirectTemplateClientPage = ({
|
||||
|
||||
{/* Widget */}
|
||||
<div
|
||||
key={isExpanded ? 'expanded' : 'collapsed'}
|
||||
className="group/document-widget fixed bottom-8 left-0 z-50 h-fit w-full flex-shrink-0 px-6 md:sticky md:top-4 md:z-auto md:w-[350px] md:px-0"
|
||||
data-expanded={isExpanded || undefined}
|
||||
>
|
||||
@ -367,7 +368,7 @@ export const EmbedDirectTemplateClientPage = ({
|
||||
className="bg-background mt-2"
|
||||
disabled={isNameLocked}
|
||||
value={fullName}
|
||||
onChange={(e) => !isNameLocked && setFullName(e.target.value.trim())}
|
||||
onChange={(e) => !isNameLocked && setFullName(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -394,13 +395,17 @@ export const EmbedDirectTemplateClientPage = ({
|
||||
<Card className="mt-2" gradient degrees={-120}>
|
||||
<CardContent className="p-0">
|
||||
<SignaturePad
|
||||
key={signature}
|
||||
className="h-44 w-full"
|
||||
disabled={isThrottled || isSubmitting}
|
||||
defaultValue={signature ?? undefined}
|
||||
onChange={(value) => {
|
||||
setSignature(value);
|
||||
}}
|
||||
allowTypedSignature={Boolean(
|
||||
metadata &&
|
||||
'typedSignatureEnabled' in metadata &&
|
||||
metadata.typedSignatureEnabled,
|
||||
)}
|
||||
/>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@ -198,6 +198,7 @@ export const EmbedSignDocumentClientPage = ({
|
||||
|
||||
{/* Widget */}
|
||||
<div
|
||||
key={isExpanded ? 'expanded' : 'collapsed'}
|
||||
className="group/document-widget fixed bottom-8 left-0 z-50 h-fit w-full flex-shrink-0 px-6 md:sticky md:top-4 md:z-auto md:w-[350px] md:px-0"
|
||||
data-expanded={isExpanded || undefined}
|
||||
>
|
||||
@ -247,7 +248,7 @@ export const EmbedSignDocumentClientPage = ({
|
||||
className="bg-background mt-2"
|
||||
disabled={isNameLocked}
|
||||
value={fullName}
|
||||
onChange={(e) => !isNameLocked && setFullName(e.target.value.trim())}
|
||||
onChange={(e) => !isNameLocked && setFullName(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -273,13 +274,17 @@ export const EmbedSignDocumentClientPage = ({
|
||||
<Card className="mt-2" gradient degrees={-120}>
|
||||
<CardContent className="p-0">
|
||||
<SignaturePad
|
||||
key={signature}
|
||||
className="h-44 w-full"
|
||||
disabled={isThrottled || isSubmitting}
|
||||
defaultValue={signature ?? undefined}
|
||||
onChange={(value) => {
|
||||
setSignature(value);
|
||||
}}
|
||||
allowTypedSignature={Boolean(
|
||||
metadata &&
|
||||
'typedSignatureEnabled' in metadata &&
|
||||
metadata.typedSignatureEnabled,
|
||||
)}
|
||||
/>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
'use client';
|
||||
|
||||
import { useMemo } from 'react';
|
||||
|
||||
import { Trans } from '@lingui/macro';
|
||||
import { useLingui } from '@lingui/react';
|
||||
|
||||
import { getRecipientType } from '@documenso/lib/client-only/recipient-type';
|
||||
import { RecipientStatusType, getRecipientType } from '@documenso/lib/client-only/recipient-type';
|
||||
import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles';
|
||||
import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
|
||||
import type { DocumentStatus, Recipient } from '@documenso/prisma/client';
|
||||
@ -29,24 +31,26 @@ export const StackAvatarsWithTooltip = ({
|
||||
const { _ } = useLingui();
|
||||
|
||||
const waitingRecipients = recipients.filter(
|
||||
(recipient) => getRecipientType(recipient) === 'waiting',
|
||||
(recipient) => getRecipientType(recipient) === RecipientStatusType.WAITING,
|
||||
);
|
||||
|
||||
const openedRecipients = recipients.filter(
|
||||
(recipient) => getRecipientType(recipient) === 'opened',
|
||||
(recipient) => getRecipientType(recipient) === RecipientStatusType.OPENED,
|
||||
);
|
||||
|
||||
const completedRecipients = recipients.filter(
|
||||
(recipient) => getRecipientType(recipient) === 'completed',
|
||||
(recipient) => getRecipientType(recipient) === RecipientStatusType.COMPLETED,
|
||||
);
|
||||
|
||||
const uncompletedRecipients = recipients.filter(
|
||||
(recipient) => getRecipientType(recipient) === 'unsigned',
|
||||
(recipient) => getRecipientType(recipient) === RecipientStatusType.UNSIGNED,
|
||||
);
|
||||
|
||||
const sortedRecipients = useMemo(() => recipients.sort((a, b) => a.id - b.id), [recipients]);
|
||||
|
||||
return (
|
||||
<PopoverHover
|
||||
trigger={children || <StackAvatars recipients={recipients} />}
|
||||
trigger={children || <StackAvatars recipients={sortedRecipients} />}
|
||||
contentProps={{
|
||||
className: 'flex flex-col gap-y-5 py-2',
|
||||
side: position,
|
||||
@ -65,7 +69,7 @@ export const StackAvatarsWithTooltip = ({
|
||||
type={getRecipientType(recipient)}
|
||||
fallbackText={recipientAbbreviation(recipient)}
|
||||
/>
|
||||
<div className="">
|
||||
<div>
|
||||
<p className="text-muted-foreground text-sm">{recipient.email}</p>
|
||||
<p className="text-muted-foreground/70 text-xs">
|
||||
{_(RECIPIENT_ROLES_DESCRIPTION[recipient.role].roleName)}
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import React from 'react';
|
||||
|
||||
import { getRecipientType } from '@documenso/lib/client-only/recipient-type';
|
||||
import {
|
||||
getExtraRecipientsType,
|
||||
getRecipientType,
|
||||
} from '@documenso/lib/client-only/recipient-type';
|
||||
import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
|
||||
import type { Recipient } from '@documenso/prisma/client';
|
||||
|
||||
@ -13,20 +16,27 @@ export function StackAvatars({ recipients }: { recipients: Recipient[] }) {
|
||||
const remainingItems = recipients.length - itemsToRender.length;
|
||||
|
||||
return itemsToRender.map((recipient: Recipient, index: number) => {
|
||||
const first = index === 0 ? true : false;
|
||||
const first = index === 0;
|
||||
|
||||
const lastItemText =
|
||||
index === itemsToRender.length - 1 && remainingItems > 0
|
||||
? `+${remainingItems + 1}`
|
||||
: undefined;
|
||||
if (index === 4 && remainingItems > 0) {
|
||||
return (
|
||||
<StackAvatar
|
||||
key="extra-recipient"
|
||||
first={first}
|
||||
zIndex={String(zIndex - index * 10)}
|
||||
type={getExtraRecipientsType(recipients.slice(4))}
|
||||
fallbackText={`+${remainingItems + 1}`}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<StackAvatar
|
||||
key={recipient.id}
|
||||
first={first}
|
||||
zIndex={String(zIndex - index * 10)}
|
||||
type={lastItemText && index === 4 ? 'unsigned' : getRecipientType(recipient)}
|
||||
fallbackText={lastItemText ? lastItemText : recipientAbbreviation(recipient)}
|
||||
type={getRecipientType(recipient)}
|
||||
fallbackText={recipientAbbreviation(recipient)}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
'use client';
|
||||
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
|
||||
import { useRouter, useSearchParams } from 'next/navigation';
|
||||
|
||||
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
|
||||
import { Input } from '@documenso/ui/primitives/input';
|
||||
|
||||
export const DocumentSearch = ({ initialValue = '' }: { initialValue?: string }) => {
|
||||
const router = useRouter();
|
||||
const searchParams = useSearchParams();
|
||||
const [searchTerm, setSearchTerm] = useState(initialValue);
|
||||
const debouncedSearchTerm = useDebouncedValue(searchTerm, 500);
|
||||
|
||||
const handleSearch = useCallback(
|
||||
(term: string) => {
|
||||
const params = new URLSearchParams(searchParams?.toString() ?? '');
|
||||
if (term) {
|
||||
params.set('search', term);
|
||||
} else {
|
||||
params.delete('search');
|
||||
}
|
||||
router.push(`?${params.toString()}`);
|
||||
},
|
||||
[router, searchParams],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
handleSearch(searchTerm);
|
||||
}, [debouncedSearchTerm]);
|
||||
|
||||
return (
|
||||
<Input
|
||||
type="search"
|
||||
placeholder="Search documents..."
|
||||
value={searchTerm}
|
||||
onChange={(e) => setSearchTerm(e.target.value)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -89,7 +89,7 @@ export const DocumentReadOnlyFields = ({ documentMeta, fields }: DocumentReadOnl
|
||||
className="h-full w-full object-contain dark:invert"
|
||||
/>
|
||||
) : (
|
||||
<p className="font-signature text-muted-foreground text-lg duration-200 sm:text-xl md:text-2xl lg:text-3xl">
|
||||
<p className="font-signature text-muted-foreground text-lg duration-200 sm:text-xl md:text-2xl">
|
||||
{field.Signature?.typedSignature}
|
||||
</p>
|
||||
),
|
||||
@ -122,7 +122,7 @@ export const DocumentReadOnlyFields = ({ documentMeta, fields }: DocumentReadOnl
|
||||
{field.Recipient.signingStatus === SigningStatus.NOT_SIGNED && (
|
||||
<p
|
||||
className={cn('text-muted-foreground text-lg duration-200', {
|
||||
'font-signature sm:text-xl md:text-2xl lg:text-3xl':
|
||||
'font-signature sm:text-xl md:text-2xl':
|
||||
field.type === FieldType.SIGNATURE ||
|
||||
field.type === FieldType.FREE_SIGNATURE,
|
||||
})}
|
||||
|
||||
@ -58,6 +58,8 @@ COPY .gitignore .gitignore
|
||||
COPY --from=builder /app/out/json/ .
|
||||
COPY --from=builder /app/out/package-lock.json ./package-lock.json
|
||||
|
||||
COPY --from=builder /app/lingui.config.ts ./lingui.config.ts
|
||||
|
||||
RUN npm ci
|
||||
|
||||
# Then copy all the source code (as it changes more often)
|
||||
|
||||
8
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@documenso/root",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@documenso/root",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"workspaces": [
|
||||
"apps/*",
|
||||
"packages/*"
|
||||
@ -80,7 +80,7 @@
|
||||
},
|
||||
"apps/marketing": {
|
||||
"name": "@documenso/marketing",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"@documenso/assets": "*",
|
||||
@ -441,7 +441,7 @@
|
||||
},
|
||||
"apps/web": {
|
||||
"name": "@documenso/web",
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"@documenso/api": "*",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"private": true,
|
||||
"version": "1.7.1-rc.3",
|
||||
"version": "1.7.2-rc.3",
|
||||
"scripts": {
|
||||
"build": "turbo run build",
|
||||
"build:web": "turbo run build --filter=@documenso/web",
|
||||
|
||||
@ -12,10 +12,12 @@ import {
|
||||
ZDeleteFieldMutationSchema,
|
||||
ZDeleteRecipientMutationSchema,
|
||||
ZDownloadDocumentSuccessfulSchema,
|
||||
ZFindTeamMembersResponseSchema,
|
||||
ZGenerateDocumentFromTemplateMutationResponseSchema,
|
||||
ZGenerateDocumentFromTemplateMutationSchema,
|
||||
ZGetDocumentsQuerySchema,
|
||||
ZGetTemplatesQuerySchema,
|
||||
ZInviteTeamMemberMutationSchema,
|
||||
ZNoBodyMutationSchema,
|
||||
ZResendDocumentForSigningMutationSchema,
|
||||
ZSendDocumentForSigningMutationSchema,
|
||||
@ -26,13 +28,17 @@ import {
|
||||
ZSuccessfulGetDocumentResponseSchema,
|
||||
ZSuccessfulGetTemplateResponseSchema,
|
||||
ZSuccessfulGetTemplatesResponseSchema,
|
||||
ZSuccessfulInviteTeamMemberResponseSchema,
|
||||
ZSuccessfulRecipientResponseSchema,
|
||||
ZSuccessfulRemoveTeamMemberResponseSchema,
|
||||
ZSuccessfulResendDocumentResponseSchema,
|
||||
ZSuccessfulResponseSchema,
|
||||
ZSuccessfulSigningResponseSchema,
|
||||
ZSuccessfulUpdateTeamMemberResponseSchema,
|
||||
ZUnsuccessfulResponseSchema,
|
||||
ZUpdateFieldMutationSchema,
|
||||
ZUpdateRecipientMutationSchema,
|
||||
ZUpdateTeamMemberMutationSchema,
|
||||
} from './schema';
|
||||
|
||||
const c = initContract();
|
||||
@ -273,6 +279,61 @@ export const ApiContractV1 = c.router(
|
||||
},
|
||||
summary: 'Delete a field from a document',
|
||||
},
|
||||
|
||||
findTeamMembers: {
|
||||
method: 'GET',
|
||||
path: '/api/v1/team/:id/members',
|
||||
responses: {
|
||||
200: ZFindTeamMembersResponseSchema,
|
||||
400: ZUnsuccessfulResponseSchema,
|
||||
401: ZUnsuccessfulResponseSchema,
|
||||
404: ZUnsuccessfulResponseSchema,
|
||||
500: ZUnsuccessfulResponseSchema,
|
||||
},
|
||||
summary: 'List team members',
|
||||
},
|
||||
|
||||
inviteTeamMember: {
|
||||
method: 'POST',
|
||||
path: '/api/v1/team/:id/members/invite',
|
||||
body: ZInviteTeamMemberMutationSchema,
|
||||
responses: {
|
||||
200: ZSuccessfulInviteTeamMemberResponseSchema,
|
||||
400: ZUnsuccessfulResponseSchema,
|
||||
401: ZUnsuccessfulResponseSchema,
|
||||
404: ZUnsuccessfulResponseSchema,
|
||||
500: ZUnsuccessfulResponseSchema,
|
||||
},
|
||||
summary: 'Invite a member to a team',
|
||||
},
|
||||
|
||||
updateTeamMember: {
|
||||
method: 'PUT',
|
||||
path: '/api/v1/team/:id/members/:memberId',
|
||||
body: ZUpdateTeamMemberMutationSchema,
|
||||
responses: {
|
||||
200: ZSuccessfulUpdateTeamMemberResponseSchema,
|
||||
400: ZUnsuccessfulResponseSchema,
|
||||
401: ZUnsuccessfulResponseSchema,
|
||||
404: ZUnsuccessfulResponseSchema,
|
||||
500: ZUnsuccessfulResponseSchema,
|
||||
},
|
||||
summary: 'Update a team member',
|
||||
},
|
||||
|
||||
removeTeamMember: {
|
||||
method: 'DELETE',
|
||||
path: '/api/v1/team/:id/members/:memberId',
|
||||
body: null,
|
||||
responses: {
|
||||
200: ZSuccessfulRemoveTeamMemberResponseSchema,
|
||||
400: ZUnsuccessfulResponseSchema,
|
||||
401: ZUnsuccessfulResponseSchema,
|
||||
404: ZUnsuccessfulResponseSchema,
|
||||
500: ZUnsuccessfulResponseSchema,
|
||||
},
|
||||
summary: 'Remove a member from a team',
|
||||
},
|
||||
},
|
||||
{
|
||||
baseHeaders: ZAuthorizationHeadersSchema,
|
||||
|
||||
@ -26,6 +26,8 @@ import { getRecipientById } from '@documenso/lib/server-only/recipient/get-recip
|
||||
import { getRecipientsForDocument } from '@documenso/lib/server-only/recipient/get-recipients-for-document';
|
||||
import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
|
||||
import { updateRecipient } from '@documenso/lib/server-only/recipient/update-recipient';
|
||||
import { createTeamMemberInvites } from '@documenso/lib/server-only/team/create-team-member-invites';
|
||||
import { deleteTeamMembers } from '@documenso/lib/server-only/team/delete-team-members';
|
||||
import type { CreateDocumentFromTemplateResponse } from '@documenso/lib/server-only/template/create-document-from-template';
|
||||
import { createDocumentFromTemplate } from '@documenso/lib/server-only/template/create-document-from-template';
|
||||
import { createDocumentFromTemplateLegacy } from '@documenso/lib/server-only/template/create-document-from-template-legacy';
|
||||
@ -49,7 +51,12 @@ import {
|
||||
} from '@documenso/lib/universal/upload/server-actions';
|
||||
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
||||
import { prisma } from '@documenso/prisma';
|
||||
import { DocumentDataType, DocumentStatus, SigningStatus } from '@documenso/prisma/client';
|
||||
import {
|
||||
DocumentDataType,
|
||||
DocumentStatus,
|
||||
SigningStatus,
|
||||
TeamMemberRole,
|
||||
} from '@documenso/prisma/client';
|
||||
|
||||
import { ApiContractV1 } from './contract';
|
||||
import { authenticatedMiddleware } from './middleware/authenticated';
|
||||
@ -1279,4 +1286,270 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, {
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
findTeamMembers: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: teamId } = args.params;
|
||||
|
||||
if (team?.id !== Number(teamId)) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const self = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
userId: user.id,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (self?.role !== TeamMemberRole.ADMIN) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const members = await prisma.teamMember.findMany({
|
||||
where: {
|
||||
teamId: team.id,
|
||||
},
|
||||
include: {
|
||||
user: true,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
body: {
|
||||
members: members.map((member) => ({
|
||||
id: member.id,
|
||||
email: member.user.email,
|
||||
role: member.role,
|
||||
})),
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
inviteTeamMember: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: teamId } = args.params;
|
||||
|
||||
const { email, role } = args.body;
|
||||
|
||||
if (team?.id !== Number(teamId)) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const self = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
userId: user.id,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (self?.role !== TeamMemberRole.ADMIN) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const hasAlreadyBeenInvited = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
teamId: team.id,
|
||||
user: {
|
||||
email,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (hasAlreadyBeenInvited) {
|
||||
return {
|
||||
status: 400,
|
||||
body: {
|
||||
message: 'This user has already been invited to the team',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
await createTeamMemberInvites({
|
||||
userId: user.id,
|
||||
userName: user.name ?? '',
|
||||
teamId: team.id,
|
||||
invitations: [
|
||||
{
|
||||
email,
|
||||
role,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
body: {
|
||||
message: 'An invite has been sent to the member',
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
updateTeamMember: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: teamId, memberId } = args.params;
|
||||
|
||||
const { role } = args.body;
|
||||
|
||||
if (team?.id !== Number(teamId)) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const self = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
userId: user.id,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (self?.role !== TeamMemberRole.ADMIN) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const member = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
id: Number(memberId),
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (!member) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
message: 'The provided member id does not exist.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const updatedMember = await prisma.teamMember.update({
|
||||
where: {
|
||||
id: member.id,
|
||||
},
|
||||
data: {
|
||||
role,
|
||||
},
|
||||
include: {
|
||||
user: true,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
body: {
|
||||
id: updatedMember.id,
|
||||
email: updatedMember.user.email,
|
||||
role: updatedMember.role,
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
removeTeamMember: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: teamId, memberId } = args.params;
|
||||
|
||||
if (team?.id !== Number(teamId)) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const self = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
userId: user.id,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (self?.role !== TeamMemberRole.ADMIN) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You are not authorized to perform actions against this team.',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const member = await prisma.teamMember.findFirst({
|
||||
where: {
|
||||
id: Number(memberId),
|
||||
teamId: Number(teamId),
|
||||
},
|
||||
include: {
|
||||
user: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!member) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
message: 'Member not found',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
if (team.ownerUserId === member.userId) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You cannot remove the owner of the team',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
if (member.userId === user.id) {
|
||||
return {
|
||||
status: 403,
|
||||
body: {
|
||||
message: 'You cannot remove yourself from the team',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
await deleteTeamMembers({
|
||||
userId: user.id,
|
||||
teamId: team.id,
|
||||
teamMemberIds: [member.id],
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
body: {
|
||||
id: member.id,
|
||||
email: member.user.email,
|
||||
role: member.role,
|
||||
},
|
||||
};
|
||||
}),
|
||||
});
|
||||
|
||||
@ -19,6 +19,7 @@ import {
|
||||
RecipientRole,
|
||||
SendStatus,
|
||||
SigningStatus,
|
||||
TeamMemberRole,
|
||||
TemplateType,
|
||||
} from '@documenso/prisma/client';
|
||||
|
||||
@ -532,3 +533,41 @@ export const ZGetTemplatesQuerySchema = z.object({
|
||||
page: z.coerce.number().min(1).optional().default(1),
|
||||
perPage: z.coerce.number().min(1).optional().default(1),
|
||||
});
|
||||
|
||||
export const ZFindTeamMembersResponseSchema = z.object({
|
||||
members: z.array(
|
||||
z.object({
|
||||
id: z.number(),
|
||||
email: z.string().email(),
|
||||
role: z.nativeEnum(TeamMemberRole),
|
||||
}),
|
||||
),
|
||||
});
|
||||
|
||||
export const ZInviteTeamMemberMutationSchema = z.object({
|
||||
email: z
|
||||
.string()
|
||||
.email()
|
||||
.transform((email) => email.toLowerCase()),
|
||||
role: z.nativeEnum(TeamMemberRole).optional().default(TeamMemberRole.MEMBER),
|
||||
});
|
||||
|
||||
export const ZSuccessfulInviteTeamMemberResponseSchema = z.object({
|
||||
message: z.string(),
|
||||
});
|
||||
|
||||
export const ZUpdateTeamMemberMutationSchema = z.object({
|
||||
role: z.nativeEnum(TeamMemberRole),
|
||||
});
|
||||
|
||||
export const ZSuccessfulUpdateTeamMemberResponseSchema = z.object({
|
||||
id: z.number(),
|
||||
email: z.string().email(),
|
||||
role: z.nativeEnum(TeamMemberRole),
|
||||
});
|
||||
|
||||
export const ZSuccessfulRemoveTeamMemberResponseSchema = z.object({
|
||||
id: z.number(),
|
||||
email: z.string().email(),
|
||||
role: z.nativeEnum(TeamMemberRole),
|
||||
});
|
||||
|
||||
278
packages/app-tests/e2e/api/v1/team-user-management.spec.ts
Normal file
@ -0,0 +1,278 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
|
||||
import {
|
||||
ZFindTeamMembersResponseSchema,
|
||||
ZSuccessfulInviteTeamMemberResponseSchema,
|
||||
ZSuccessfulRemoveTeamMemberResponseSchema,
|
||||
ZSuccessfulUpdateTeamMemberResponseSchema,
|
||||
ZUnsuccessfulResponseSchema,
|
||||
} from '@documenso/api/v1/schema';
|
||||
import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app';
|
||||
import { createApiToken } from '@documenso/lib/server-only/public-api/create-api-token';
|
||||
import { prisma } from '@documenso/prisma';
|
||||
import { TeamMemberRole } from '@documenso/prisma/client';
|
||||
import { seedTeam } from '@documenso/prisma/seed/teams';
|
||||
import { seedUser } from '@documenso/prisma/seed/users';
|
||||
|
||||
test.describe('Team API', () => {
|
||||
test('findTeamMembers: should list team members', async ({ request }) => {
|
||||
const team = await seedTeam({
|
||||
createTeamMembers: 3,
|
||||
});
|
||||
|
||||
const ownerMember = team.members.find((member) => member.userId === team.owner.id)!;
|
||||
|
||||
// Should not be undefined
|
||||
expect(ownerMember).toBeTruthy();
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: team.owner.id,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const response = await request.get(`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.ok()).toBeTruthy();
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
const parsed = ZFindTeamMembersResponseSchema.safeParse(data);
|
||||
|
||||
const safeData = parsed.success ? parsed.data : null;
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
|
||||
expect(safeData!.members).toHaveLength(4); // Owner + 3 members
|
||||
expect(safeData!.members[0]).toHaveProperty('id');
|
||||
expect(safeData!.members[0]).toHaveProperty('email');
|
||||
expect(safeData!.members[0]).toHaveProperty('role');
|
||||
|
||||
expect(safeData!.members).toContainEqual({
|
||||
id: ownerMember.id,
|
||||
email: ownerMember.user.email,
|
||||
role: ownerMember.role,
|
||||
});
|
||||
});
|
||||
|
||||
test('inviteTeamMember: should invite a new team member', async ({ request }) => {
|
||||
const team = await seedTeam();
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: team.owner.id,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const newUser = await seedUser();
|
||||
|
||||
const response = await request.post(
|
||||
`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members/invite`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: {
|
||||
email: newUser.email,
|
||||
role: TeamMemberRole.MEMBER,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.ok()).toBeTruthy();
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
const parsed = ZSuccessfulInviteTeamMemberResponseSchema.safeParse(data);
|
||||
|
||||
const safeData = parsed.success ? parsed.data : null;
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
expect(safeData!.message).toBe('An invite has been sent to the member');
|
||||
|
||||
const invite = await prisma.teamMemberInvite.findFirst({
|
||||
where: {
|
||||
email: newUser.email,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
expect(invite).toBeTruthy();
|
||||
});
|
||||
|
||||
test('updateTeamMember: should update a team member role', async ({ request }) => {
|
||||
const team = await seedTeam({
|
||||
createTeamMembers: 3,
|
||||
});
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: team.owner.id,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const member = team.members.find((member) => member.role === TeamMemberRole.MEMBER)!;
|
||||
|
||||
// Should not be undefined
|
||||
expect(member).toBeTruthy();
|
||||
|
||||
const response = await request.put(
|
||||
`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members/${member.id}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: {
|
||||
role: TeamMemberRole.ADMIN,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.ok()).toBeTruthy();
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
const parsed = ZSuccessfulUpdateTeamMemberResponseSchema.safeParse(data);
|
||||
|
||||
const safeData = parsed.success ? parsed.data : null;
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
|
||||
expect(safeData!.id).toBe(member.id);
|
||||
expect(safeData!.email).toBe(member.user.email);
|
||||
expect(safeData!.role).toBe(TeamMemberRole.ADMIN);
|
||||
});
|
||||
|
||||
test('removeTeamMember: should remove a team member', async ({ request }) => {
|
||||
const team = await seedTeam({
|
||||
createTeamMembers: 3,
|
||||
});
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: team.owner.id,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const member = team.members.find((member) => member.role === TeamMemberRole.MEMBER)!;
|
||||
|
||||
// Should not be undefined
|
||||
expect(member).toBeTruthy();
|
||||
|
||||
const response = await request.delete(
|
||||
`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members/${member.id}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
const parsed = ZSuccessfulRemoveTeamMemberResponseSchema.safeParse(data);
|
||||
|
||||
const safeData = parsed.success ? parsed.data : null;
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
|
||||
expect(safeData!.id).toBe(member.id);
|
||||
expect(safeData!.email).toBe(member.user.email);
|
||||
expect(safeData!.role).toBe(member.role);
|
||||
|
||||
const removedMemberCount = await prisma.teamMember.count({
|
||||
where: {
|
||||
id: member.id,
|
||||
teamId: team.id,
|
||||
},
|
||||
});
|
||||
|
||||
expect(removedMemberCount).toBe(0);
|
||||
});
|
||||
|
||||
test('removeTeamMember: should not remove team owner', async ({ request }) => {
|
||||
const team = await seedTeam({
|
||||
createTeamMembers: 3,
|
||||
});
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: team.owner.id,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const ownerMember = team.members.find((member) => member.userId === team.owner.id)!;
|
||||
|
||||
// Should not be undefined
|
||||
expect(ownerMember).toBeTruthy();
|
||||
|
||||
const response = await request.delete(
|
||||
`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members/${ownerMember.id}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.status()).toBe(403);
|
||||
|
||||
const parsed = ZUnsuccessfulResponseSchema.safeParse(await response.json());
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
});
|
||||
|
||||
test('removeTeamMember: should not remove self', async ({ request }) => {
|
||||
const team = await seedTeam({
|
||||
createTeamMembers: 3,
|
||||
});
|
||||
|
||||
const member = team.members.find((member) => member.role === TeamMemberRole.MEMBER)!;
|
||||
|
||||
// Make our non-owner member an admin
|
||||
await prisma.teamMember.update({
|
||||
where: {
|
||||
id: member.id,
|
||||
},
|
||||
data: {
|
||||
role: TeamMemberRole.ADMIN,
|
||||
},
|
||||
});
|
||||
|
||||
const { token } = await createApiToken({
|
||||
userId: member.userId,
|
||||
teamId: team.id,
|
||||
tokenName: 'test',
|
||||
expiresIn: null,
|
||||
});
|
||||
|
||||
const response = await request.delete(
|
||||
`${WEBAPP_BASE_URL}/api/v1/team/${team.id}/members/${member.id}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.status()).toBe(403);
|
||||
|
||||
const parsed = ZUnsuccessfulResponseSchema.safeParse(await response.json());
|
||||
|
||||
expect(parsed.success).toBeTruthy();
|
||||
});
|
||||
});
|
||||
249
packages/app-tests/e2e/teams/search-documents.spec.ts
Normal file
@ -0,0 +1,249 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
|
||||
import { DocumentStatus, TeamMemberRole } from '@documenso/prisma/client';
|
||||
import { seedDocuments, seedTeamDocuments } from '@documenso/prisma/seed/documents';
|
||||
import { seedTeam, seedTeamMember } from '@documenso/prisma/seed/teams';
|
||||
import { seedUser } from '@documenso/prisma/seed/users';
|
||||
|
||||
import { apiSignin, apiSignout } from '../fixtures/authentication';
|
||||
import { checkDocumentTabCount } from '../fixtures/documents';
|
||||
|
||||
test('[TEAMS]: search respects team document visibility', async ({ page }) => {
|
||||
const team = await seedTeam();
|
||||
const adminUser = await seedTeamMember({ teamId: team.id, role: TeamMemberRole.ADMIN });
|
||||
const managerUser = await seedTeamMember({ teamId: team.id, role: TeamMemberRole.MANAGER });
|
||||
const memberUser = await seedTeamMember({ teamId: team.id, role: TeamMemberRole.MEMBER });
|
||||
|
||||
await seedDocuments([
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'EVERYONE',
|
||||
title: 'Searchable Document for Everyone',
|
||||
},
|
||||
},
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'MANAGER_AND_ABOVE',
|
||||
title: 'Searchable Document for Managers',
|
||||
},
|
||||
},
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'ADMIN',
|
||||
title: 'Searchable Document for Admins',
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
const testCases = [
|
||||
{ user: adminUser, visibleDocs: 3 },
|
||||
{ user: managerUser, visibleDocs: 2 },
|
||||
{ user: memberUser, visibleDocs: 1 },
|
||||
];
|
||||
|
||||
for (const { user, visibleDocs } of testCases) {
|
||||
await apiSignin({
|
||||
page,
|
||||
email: user.email,
|
||||
redirectPath: `/t/${team.url}/documents`,
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Searchable');
|
||||
await page.waitForURL(/search=Searchable/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', visibleDocs);
|
||||
|
||||
await apiSignout({ page });
|
||||
}
|
||||
});
|
||||
|
||||
test('[TEAMS]: search does not reveal documents from other teams', async ({ page }) => {
|
||||
const { team: teamA, teamMember2: teamAMember } = await seedTeamDocuments();
|
||||
const { team: teamB } = await seedTeamDocuments();
|
||||
|
||||
await seedDocuments([
|
||||
{
|
||||
sender: teamA.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: teamA.id,
|
||||
visibility: 'EVERYONE',
|
||||
title: 'Unique Team A Document',
|
||||
},
|
||||
},
|
||||
{
|
||||
sender: teamB.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: teamB.id,
|
||||
visibility: 'EVERYONE',
|
||||
title: 'Unique Team B Document',
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
await apiSignin({
|
||||
page,
|
||||
email: teamAMember.email,
|
||||
redirectPath: `/t/${teamA.url}/documents`,
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Unique');
|
||||
await page.waitForURL(/search=Unique/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', 1);
|
||||
await expect(page.getByRole('link', { name: 'Unique Team A Document' })).toBeVisible();
|
||||
await expect(page.getByRole('link', { name: 'Unique Team B Document' })).not.toBeVisible();
|
||||
|
||||
await apiSignout({ page });
|
||||
});
|
||||
|
||||
test('[PERSONAL]: search does not reveal team documents in personal account', async ({ page }) => {
|
||||
const { team, teamMember2 } = await seedTeamDocuments();
|
||||
|
||||
await seedDocuments([
|
||||
{
|
||||
sender: teamMember2,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: null,
|
||||
title: 'Personal Unique Document',
|
||||
},
|
||||
},
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'EVERYONE',
|
||||
title: 'Team Unique Document',
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
await apiSignin({
|
||||
page,
|
||||
email: teamMember2.email,
|
||||
redirectPath: '/documents',
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Unique');
|
||||
await page.waitForURL(/search=Unique/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', 1);
|
||||
await expect(page.getByRole('link', { name: 'Personal Unique Document' })).toBeVisible();
|
||||
await expect(page.getByRole('link', { name: 'Team Unique Document' })).not.toBeVisible();
|
||||
|
||||
await apiSignout({ page });
|
||||
});
|
||||
|
||||
test('[TEAMS]: search respects recipient visibility regardless of team visibility', async ({
|
||||
page,
|
||||
}) => {
|
||||
const team = await seedTeam();
|
||||
const memberUser = await seedTeamMember({ teamId: team.id, role: TeamMemberRole.MEMBER });
|
||||
|
||||
await seedDocuments([
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [memberUser],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'ADMIN',
|
||||
title: 'Admin Document with Member Recipient',
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
await apiSignin({
|
||||
page,
|
||||
email: memberUser.email,
|
||||
redirectPath: `/t/${team.url}/documents`,
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Admin Document');
|
||||
await page.waitForURL(/search=Admin(%20|\+|\s)Document/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', 1);
|
||||
await expect(
|
||||
page.getByRole('link', { name: 'Admin Document with Member Recipient' }),
|
||||
).toBeVisible();
|
||||
|
||||
await apiSignout({ page });
|
||||
});
|
||||
|
||||
test('[TEAMS]: search by recipient name respects visibility', async ({ page }) => {
|
||||
const team = await seedTeam();
|
||||
const adminUser = await seedTeamMember({ teamId: team.id, role: TeamMemberRole.ADMIN });
|
||||
const memberUser = await seedTeamMember({
|
||||
teamId: team.id,
|
||||
role: TeamMemberRole.MEMBER,
|
||||
name: 'Team Member',
|
||||
});
|
||||
|
||||
const uniqueRecipient = await seedUser();
|
||||
|
||||
await seedDocuments([
|
||||
{
|
||||
sender: team.owner,
|
||||
recipients: [uniqueRecipient],
|
||||
type: DocumentStatus.COMPLETED,
|
||||
documentOptions: {
|
||||
teamId: team.id,
|
||||
visibility: 'ADMIN',
|
||||
title: 'Admin Document for Unique Recipient',
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
// Admin should see the document when searching by recipient name
|
||||
await apiSignin({
|
||||
page,
|
||||
email: adminUser.email,
|
||||
redirectPath: `/t/${team.url}/documents`,
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Unique Recipient');
|
||||
await page.waitForURL(/search=Unique(%20|\+|\s)Recipient/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', 1);
|
||||
await expect(
|
||||
page.getByRole('link', { name: 'Admin Document for Unique Recipient' }),
|
||||
).toBeVisible();
|
||||
|
||||
await apiSignout({ page });
|
||||
|
||||
// Member should not see the document when searching by recipient name
|
||||
await apiSignin({
|
||||
page,
|
||||
email: memberUser.email,
|
||||
redirectPath: `/t/${team.url}/documents`,
|
||||
});
|
||||
|
||||
await page.getByPlaceholder('Search documents...').fill('Unique Recipient');
|
||||
await page.waitForURL(/search=Unique(%20|\+|\s)Recipient/);
|
||||
|
||||
await checkDocumentTabCount(page, 'All', 0);
|
||||
await expect(
|
||||
page.getByRole('link', { name: 'Admin Document for Unique Recipient' }),
|
||||
).not.toBeVisible();
|
||||
|
||||
await apiSignout({ page });
|
||||
});
|
||||
@ -112,7 +112,6 @@ test('[DIRECT_TEMPLATES]: toggle direct template link', async ({ page }) => {
|
||||
await page.getByRole('switch').click();
|
||||
await page.getByRole('button', { name: 'Save' }).click();
|
||||
await expect(page.getByText('Direct link signing has been').first()).toBeVisible();
|
||||
await page.getByLabel('Direct Link Signing', { exact: true }).press('Escape');
|
||||
|
||||
// Check that the direct template link is no longer accessible.
|
||||
await page.goto(formatDirectTemplatePath(template.directLink?.token || ''));
|
||||
|
||||
@ -5,9 +5,9 @@
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test:dev": "playwright test",
|
||||
"test-ui:dev": "playwright test --ui",
|
||||
"test:e2e": "start-server-and-test \"npm run start -w @documenso/web\" http://localhost:3000 \"playwright test\""
|
||||
"test:dev": "NODE_OPTIONS=--experimental-require-module playwright test",
|
||||
"test-ui:dev": "NODE_OPTIONS=--experimental-require-module playwright test --ui",
|
||||
"test:e2e": "NODE_OPTIONS=--experimental-require-module start-server-and-test \"npm run start -w @documenso/web\" http://localhost:3000 \"playwright test\""
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
|
||||
@ -1,15 +1,10 @@
|
||||
import { checkboxValidationSigns } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants';
|
||||
|
||||
interface CheckboxFieldMeta {
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
validationRule?: string;
|
||||
validationLength?: number;
|
||||
}
|
||||
import type { TCheckboxFieldMeta } from '../types/field-meta';
|
||||
|
||||
export const validateCheckboxField = (
|
||||
values: string[],
|
||||
fieldMeta: CheckboxFieldMeta,
|
||||
fieldMeta: TCheckboxFieldMeta,
|
||||
isSigningPage: boolean = false,
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
|
||||
@ -1,14 +1,10 @@
|
||||
interface DropdownFieldMeta {
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
values?: { value: string }[];
|
||||
defaultValue?: string;
|
||||
}
|
||||
import type { TDropdownFieldMeta as DropdownFieldMeta } from '../types/field-meta';
|
||||
|
||||
export const validateDropdownField = (
|
||||
value: string | undefined,
|
||||
fieldMeta: DropdownFieldMeta,
|
||||
isSigningPage: boolean = false,
|
||||
fontSize?: number,
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
|
||||
@ -50,5 +46,9 @@ export const validateDropdownField = (
|
||||
errors.push('Duplicate values are not allowed');
|
||||
}
|
||||
|
||||
if (fontSize && (fontSize < 8 || fontSize > 96)) {
|
||||
errors.push('Font size must be between 8 and 96.');
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
|
||||
19
packages/lib/advanced-fields-validation/validate-fields.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import type {
|
||||
TDateFieldMeta as DateFieldMeta,
|
||||
TEmailFieldMeta as EmailFieldMeta,
|
||||
TInitialsFieldMeta as InitialsFieldMeta,
|
||||
TNameFieldMeta as NameFieldMeta,
|
||||
} from '../types/field-meta';
|
||||
|
||||
export const validateFields = (
|
||||
fieldMeta: DateFieldMeta | EmailFieldMeta | InitialsFieldMeta | NameFieldMeta,
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
const { fontSize } = fieldMeta;
|
||||
|
||||
if (fontSize && (fontSize < 8 || fontSize > 96)) {
|
||||
errors.push('Font size must be between 8 and 96.');
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
@ -1,12 +1,5 @@
|
||||
// import { numberFormatValues } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants';
|
||||
|
||||
interface NumberFieldMeta {
|
||||
minValue?: number;
|
||||
maxValue?: number;
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
numberFormat?: string;
|
||||
}
|
||||
import type { TNumberFieldMeta as NumberFieldMeta } from '../types/field-meta';
|
||||
|
||||
export const validateNumberField = (
|
||||
value: string,
|
||||
@ -15,7 +8,7 @@ export const validateNumberField = (
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
|
||||
const { minValue, maxValue, readOnly, required, numberFormat } = fieldMeta || {};
|
||||
const { minValue, maxValue, readOnly, required, numberFormat, fontSize } = fieldMeta || {};
|
||||
|
||||
const formatRegex: { [key: string]: RegExp } = {
|
||||
'123,456,789.00': /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d{1,2})?$/,
|
||||
@ -63,5 +56,9 @@ export const validateNumberField = (
|
||||
errors.push('A field cannot be both read-only and required');
|
||||
}
|
||||
|
||||
if (fontSize && (fontSize < 8 || fontSize > 96)) {
|
||||
errors.push('Font size must be between 8 and 96.');
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
|
||||
@ -1,8 +1,4 @@
|
||||
interface RadioFieldMeta {
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
values?: { checked: boolean; value: string }[];
|
||||
}
|
||||
import type { TRadioFieldMeta as RadioFieldMeta } from '../types/field-meta';
|
||||
|
||||
export const validateRadioField = (
|
||||
value: string | undefined,
|
||||
|
||||
@ -1,8 +1,4 @@
|
||||
interface TextFieldMeta {
|
||||
characterLimit?: number;
|
||||
readOnly?: boolean;
|
||||
required?: boolean;
|
||||
}
|
||||
import type { TTextFieldMeta as TextFieldMeta } from '../types/field-meta';
|
||||
|
||||
export const validateTextField = (
|
||||
value: string,
|
||||
@ -11,7 +7,7 @@ export const validateTextField = (
|
||||
): string[] => {
|
||||
const errors = [];
|
||||
|
||||
const { characterLimit, readOnly, required } = fieldMeta;
|
||||
const { characterLimit, readOnly, required, fontSize } = fieldMeta;
|
||||
|
||||
if (required && !value && isSigningPage) {
|
||||
errors.push('Value is required');
|
||||
@ -29,5 +25,9 @@ export const validateTextField = (
|
||||
errors.push('A field cannot be both read-only and required');
|
||||
}
|
||||
|
||||
if (fontSize && (fontSize < 8 || fontSize > 96)) {
|
||||
errors.push('Font size must be between 8 and 96.');
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
|
||||
@ -2,7 +2,7 @@ import { useCallback, useEffect, useState } from 'react';
|
||||
|
||||
import { getBoundingClientRect } from '@documenso/lib/client-only/get-bounding-client-rect';
|
||||
import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer';
|
||||
import { Field } from '@documenso/prisma/client';
|
||||
import type { Field } from '@documenso/prisma/client';
|
||||
|
||||
export const useFieldPageCoords = (field: Field) => {
|
||||
const [coords, setCoords] = useState({
|
||||
|
||||
@ -15,9 +15,10 @@ type SupportedLanguages = (typeof SUPPORTED_LANGUAGE_CODES)[number];
|
||||
async function loadCatalog(lang: SupportedLanguages): Promise<{
|
||||
[k: string]: Messages;
|
||||
}> {
|
||||
const { messages } = await import(
|
||||
`../../translations/${lang}/${IS_APP_WEB ? 'web' : 'marketing'}.js`
|
||||
);
|
||||
const extension = process.env.NODE_ENV === 'development' ? 'po' : 'js';
|
||||
const context = IS_APP_WEB ? 'web' : 'marketing';
|
||||
|
||||
const { messages } = await import(`../../translations/${lang}/${context}.${extension}`);
|
||||
|
||||
return {
|
||||
[lang]: messages,
|
||||
|
||||
@ -1,12 +1,19 @@
|
||||
import type { Recipient } from '@documenso/prisma/client';
|
||||
import { ReadStatus, RecipientRole, SendStatus, SigningStatus } from '@documenso/prisma/client';
|
||||
|
||||
export enum RecipientStatusType {
|
||||
COMPLETED = 'completed',
|
||||
OPENED = 'opened',
|
||||
WAITING = 'waiting',
|
||||
UNSIGNED = 'unsigned',
|
||||
}
|
||||
|
||||
export const getRecipientType = (recipient: Recipient) => {
|
||||
if (
|
||||
recipient.role === RecipientRole.CC ||
|
||||
(recipient.sendStatus === SendStatus.SENT && recipient.signingStatus === SigningStatus.SIGNED)
|
||||
) {
|
||||
return 'completed';
|
||||
return RecipientStatusType.COMPLETED;
|
||||
}
|
||||
|
||||
if (
|
||||
@ -14,12 +21,33 @@ export const getRecipientType = (recipient: Recipient) => {
|
||||
recipient.readStatus === ReadStatus.OPENED &&
|
||||
recipient.signingStatus === SigningStatus.NOT_SIGNED
|
||||
) {
|
||||
return 'opened';
|
||||
return RecipientStatusType.OPENED;
|
||||
}
|
||||
|
||||
if (recipient.sendStatus === 'SENT' && recipient.signingStatus === 'NOT_SIGNED') {
|
||||
return 'waiting';
|
||||
if (
|
||||
recipient.sendStatus === SendStatus.SENT &&
|
||||
recipient.signingStatus === SigningStatus.NOT_SIGNED
|
||||
) {
|
||||
return RecipientStatusType.WAITING;
|
||||
}
|
||||
|
||||
return 'unsigned';
|
||||
return RecipientStatusType.UNSIGNED;
|
||||
};
|
||||
|
||||
export const getExtraRecipientsType = (extraRecipients: Recipient[]) => {
|
||||
const types = extraRecipients.map((r) => getRecipientType(r));
|
||||
|
||||
if (types.includes(RecipientStatusType.UNSIGNED)) {
|
||||
return RecipientStatusType.UNSIGNED;
|
||||
}
|
||||
|
||||
if (types.includes(RecipientStatusType.OPENED)) {
|
||||
return RecipientStatusType.OPENED;
|
||||
}
|
||||
|
||||
if (types.includes(RecipientStatusType.WAITING)) {
|
||||
return RecipientStatusType.WAITING;
|
||||
}
|
||||
|
||||
return RecipientStatusType.COMPLETED;
|
||||
};
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const SUPPORTED_LANGUAGE_CODES = ['de', 'en', 'fr'] as const;
|
||||
export const SUPPORTED_LANGUAGE_CODES = ['de', 'en', 'fr', 'es'] as const;
|
||||
|
||||
export const ZSupportedLanguageCodeSchema = z.enum(SUPPORTED_LANGUAGE_CODES).catch('en');
|
||||
|
||||
@ -42,4 +42,8 @@ export const SUPPORTED_LANGUAGES: Record<string, SupportedLanguage> = {
|
||||
full: 'French',
|
||||
short: 'fr',
|
||||
},
|
||||
es: {
|
||||
full: 'Spanish',
|
||||
short: 'es',
|
||||
},
|
||||
} satisfies Record<SupportedLanguageCodes, SupportedLanguage>;
|
||||
|
||||
@ -18,6 +18,7 @@ export type CreateDocumentMetaOptions = {
|
||||
dateFormat?: string;
|
||||
redirectUrl?: string;
|
||||
signingOrder?: DocumentSigningOrder;
|
||||
typedSignatureEnabled?: boolean;
|
||||
userId: number;
|
||||
requestMetadata: RequestMetadata;
|
||||
};
|
||||
@ -32,6 +33,7 @@ export const upsertDocumentMeta = async ({
|
||||
userId,
|
||||
redirectUrl,
|
||||
signingOrder,
|
||||
typedSignatureEnabled,
|
||||
requestMetadata,
|
||||
}: CreateDocumentMetaOptions) => {
|
||||
const user = await prisma.user.findFirstOrThrow({
|
||||
@ -82,6 +84,7 @@ export const upsertDocumentMeta = async ({
|
||||
documentId,
|
||||
redirectUrl,
|
||||
signingOrder,
|
||||
typedSignatureEnabled,
|
||||
},
|
||||
update: {
|
||||
subject,
|
||||
@ -91,6 +94,7 @@ export const upsertDocumentMeta = async ({
|
||||
timezone,
|
||||
redirectUrl,
|
||||
signingOrder,
|
||||
typedSignatureEnabled,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ export type FindDocumentsOptions = {
|
||||
};
|
||||
period?: PeriodSelectorValue;
|
||||
senderIds?: number[];
|
||||
search?: string;
|
||||
};
|
||||
|
||||
export const findDocuments = async ({
|
||||
@ -37,6 +38,7 @@ export const findDocuments = async ({
|
||||
orderBy,
|
||||
period,
|
||||
senderIds,
|
||||
search,
|
||||
}: FindDocumentsOptions) => {
|
||||
const { user, team } = await prisma.$transaction(async (tx) => {
|
||||
const user = await tx.user.findFirstOrThrow({
|
||||
@ -92,6 +94,14 @@ export const findDocuments = async ({
|
||||
})
|
||||
.otherwise(() => undefined);
|
||||
|
||||
const searchFilter: Prisma.DocumentWhereInput = {
|
||||
OR: [
|
||||
{ title: { contains: search, mode: 'insensitive' } },
|
||||
{ Recipient: { some: { name: { contains: search, mode: 'insensitive' } } } },
|
||||
{ Recipient: { some: { email: { contains: search, mode: 'insensitive' } } } },
|
||||
],
|
||||
};
|
||||
|
||||
const visibilityFilters = [
|
||||
match(teamMemberRole)
|
||||
.with(TeamMemberRole.ADMIN, () => ({
|
||||
@ -188,7 +198,7 @@ export const findDocuments = async ({
|
||||
}
|
||||
|
||||
const whereClause: Prisma.DocumentWhereInput = {
|
||||
AND: [{ ...termFilters }, { ...filters }, { ...deletedFilter }],
|
||||
AND: [{ ...termFilters }, { ...filters }, { ...deletedFilter }, { ...searchFilter }],
|
||||
};
|
||||
|
||||
if (period) {
|
||||
|
||||
@ -15,9 +15,10 @@ export type GetStatsInput = {
|
||||
user: User;
|
||||
team?: Omit<GetTeamCountsOption, 'createdAt'>;
|
||||
period?: PeriodSelectorValue;
|
||||
search?: string;
|
||||
};
|
||||
|
||||
export const getStats = async ({ user, period, ...options }: GetStatsInput) => {
|
||||
export const getStats = async ({ user, period, search, ...options }: GetStatsInput) => {
|
||||
let createdAt: Prisma.DocumentWhereInput['createdAt'];
|
||||
|
||||
if (period) {
|
||||
@ -31,8 +32,14 @@ export const getStats = async ({ user, period, ...options }: GetStatsInput) => {
|
||||
}
|
||||
|
||||
const [ownerCounts, notSignedCounts, hasSignedCounts] = await (options.team
|
||||
? getTeamCounts({ ...options.team, createdAt, currentUserEmail: user.email, userId: user.id })
|
||||
: getCounts({ user, createdAt }));
|
||||
? getTeamCounts({
|
||||
...options.team,
|
||||
createdAt,
|
||||
currentUserEmail: user.email,
|
||||
userId: user.id,
|
||||
search,
|
||||
})
|
||||
: getCounts({ user, createdAt, search }));
|
||||
|
||||
const stats: Record<ExtendedDocumentStatus, number> = {
|
||||
[ExtendedDocumentStatus.DRAFT]: 0,
|
||||
@ -72,9 +79,18 @@ export const getStats = async ({ user, period, ...options }: GetStatsInput) => {
|
||||
type GetCountsOption = {
|
||||
user: User;
|
||||
createdAt: Prisma.DocumentWhereInput['createdAt'];
|
||||
search?: string;
|
||||
};
|
||||
|
||||
const getCounts = async ({ user, createdAt }: GetCountsOption) => {
|
||||
const getCounts = async ({ user, createdAt, search }: GetCountsOption) => {
|
||||
const searchFilter: Prisma.DocumentWhereInput = {
|
||||
OR: [
|
||||
{ title: { contains: search, mode: 'insensitive' } },
|
||||
{ Recipient: { some: { name: { contains: search, mode: 'insensitive' } } } },
|
||||
{ Recipient: { some: { email: { contains: search, mode: 'insensitive' } } } },
|
||||
],
|
||||
};
|
||||
|
||||
return Promise.all([
|
||||
// Owner counts.
|
||||
prisma.document.groupBy({
|
||||
@ -87,6 +103,7 @@ const getCounts = async ({ user, createdAt }: GetCountsOption) => {
|
||||
createdAt,
|
||||
teamId: null,
|
||||
deletedAt: null,
|
||||
AND: [searchFilter],
|
||||
},
|
||||
}),
|
||||
// Not signed counts.
|
||||
@ -105,6 +122,7 @@ const getCounts = async ({ user, createdAt }: GetCountsOption) => {
|
||||
},
|
||||
},
|
||||
createdAt,
|
||||
AND: [searchFilter],
|
||||
},
|
||||
}),
|
||||
// Has signed counts.
|
||||
@ -142,6 +160,7 @@ const getCounts = async ({ user, createdAt }: GetCountsOption) => {
|
||||
},
|
||||
},
|
||||
],
|
||||
AND: [searchFilter],
|
||||
},
|
||||
}),
|
||||
]);
|
||||
@ -155,6 +174,7 @@ type GetTeamCountsOption = {
|
||||
userId: number;
|
||||
createdAt: Prisma.DocumentWhereInput['createdAt'];
|
||||
currentTeamMemberRole?: TeamMemberRole;
|
||||
search?: string;
|
||||
};
|
||||
|
||||
const getTeamCounts = async (options: GetTeamCountsOption) => {
|
||||
@ -169,6 +189,14 @@ const getTeamCounts = async (options: GetTeamCountsOption) => {
|
||||
}
|
||||
: undefined;
|
||||
|
||||
const searchFilter: Prisma.DocumentWhereInput = {
|
||||
OR: [
|
||||
{ title: { contains: options.search, mode: 'insensitive' } },
|
||||
{ Recipient: { some: { name: { contains: options.search, mode: 'insensitive' } } } },
|
||||
{ Recipient: { some: { email: { contains: options.search, mode: 'insensitive' } } } },
|
||||
],
|
||||
};
|
||||
|
||||
let ownerCountsWhereInput: Prisma.DocumentWhereInput = {
|
||||
userId: userIdWhereClause,
|
||||
createdAt,
|
||||
@ -220,6 +248,7 @@ const getTeamCounts = async (options: GetTeamCountsOption) => {
|
||||
},
|
||||
},
|
||||
],
|
||||
...searchFilter,
|
||||
};
|
||||
|
||||
if (teamEmail) {
|
||||
|
||||
@ -4,5 +4,8 @@ import { cookies } from 'next/headers';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/require-await
|
||||
export const switchI18NLanguage = async (lang: string) => {
|
||||
cookies().set('language', lang);
|
||||
// Two year expiry.
|
||||
const maxAge = 60 * 60 * 24 * 365 * 2;
|
||||
|
||||
cookies().set('language', lang, { maxAge });
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
// https://github.com/Hopding/pdf-lib/issues/20#issuecomment-412852821
|
||||
import fontkit from '@pdf-lib/fontkit';
|
||||
import { PDFDocument, RotationTypes, degrees, radiansToDegrees } from 'pdf-lib';
|
||||
import type { PDFDocument } from 'pdf-lib';
|
||||
import { RotationTypes, degrees, radiansToDegrees } from 'pdf-lib';
|
||||
import { P, match } from 'ts-pattern';
|
||||
|
||||
import {
|
||||
@ -13,7 +14,16 @@ import { FieldType } from '@documenso/prisma/client';
|
||||
import { isSignatureFieldType } from '@documenso/prisma/guards/is-signature-field';
|
||||
import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
|
||||
|
||||
import { ZCheckboxFieldMeta, ZRadioFieldMeta } from '../../types/field-meta';
|
||||
import {
|
||||
ZCheckboxFieldMeta,
|
||||
ZDateFieldMeta,
|
||||
ZEmailFieldMeta,
|
||||
ZInitialsFieldMeta,
|
||||
ZNameFieldMeta,
|
||||
ZNumberFieldMeta,
|
||||
ZRadioFieldMeta,
|
||||
ZTextFieldMeta,
|
||||
} from '../../types/field-meta';
|
||||
|
||||
export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignature) => {
|
||||
const fontCaveat = await fetch(process.env.FONT_CAVEAT_URI).then(async (res) =>
|
||||
@ -32,7 +42,6 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
|
||||
|
||||
const minFontSize = isSignatureField ? MIN_HANDWRITING_FONT_SIZE : MIN_STANDARD_FONT_SIZE;
|
||||
const maxFontSize = isSignatureField ? DEFAULT_HANDWRITING_FONT_SIZE : DEFAULT_STANDARD_FONT_SIZE;
|
||||
let fontSize = maxFontSize;
|
||||
|
||||
const page = pages.at(field.page - 1);
|
||||
|
||||
@ -207,16 +216,33 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
|
||||
}
|
||||
})
|
||||
.otherwise((field) => {
|
||||
const fieldMetaParsers = {
|
||||
[FieldType.TEXT]: ZTextFieldMeta,
|
||||
[FieldType.NUMBER]: ZNumberFieldMeta,
|
||||
[FieldType.DATE]: ZDateFieldMeta,
|
||||
[FieldType.EMAIL]: ZEmailFieldMeta,
|
||||
[FieldType.NAME]: ZNameFieldMeta,
|
||||
[FieldType.INITIALS]: ZInitialsFieldMeta,
|
||||
} as const;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
||||
const Parser = fieldMetaParsers[field.type as keyof typeof fieldMetaParsers];
|
||||
const meta = Parser ? Parser.safeParse(field.fieldMeta) : null;
|
||||
|
||||
const customFontSize = meta?.success && meta.data.fontSize ? meta.data.fontSize : null;
|
||||
const longestLineInTextForWidth = field.customText
|
||||
.split('\n')
|
||||
.sort((a, b) => b.length - a.length)[0];
|
||||
|
||||
let fontSize = customFontSize || maxFontSize;
|
||||
let textWidth = font.widthOfTextAtSize(longestLineInTextForWidth, fontSize);
|
||||
const textHeight = font.heightAtSize(fontSize);
|
||||
|
||||
const scalingFactor = Math.min(fieldWidth / textWidth, fieldHeight / textHeight, 1);
|
||||
if (!customFontSize) {
|
||||
const scalingFactor = Math.min(fieldWidth / textWidth, fieldHeight / textHeight, 1);
|
||||
fontSize = Math.max(Math.min(fontSize * scalingFactor, maxFontSize), minFontSize);
|
||||
}
|
||||
|
||||
fontSize = Math.max(Math.min(fontSize * scalingFactor, maxFontSize), minFontSize);
|
||||
textWidth = font.widthOfTextAtSize(longestLineInTextForWidth, fontSize);
|
||||
|
||||
let textX = fieldX + (fieldWidth - textWidth) / 2;
|
||||
@ -250,17 +276,6 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
|
||||
return pdf;
|
||||
};
|
||||
|
||||
export const insertFieldInPDFBytes = async (
|
||||
pdf: ArrayBuffer | Uint8Array | string,
|
||||
field: FieldWithSignature,
|
||||
) => {
|
||||
const pdfDoc = await PDFDocument.load(pdf);
|
||||
|
||||
await insertFieldInPDF(pdfDoc, field);
|
||||
|
||||
return await pdfDoc.save();
|
||||
};
|
||||
|
||||
const adjustPositionForRotation = (
|
||||
pageWidth: number,
|
||||
pageHeight: number,
|
||||
|
||||
@ -10,6 +10,7 @@ export async function insertTextInPDF(
|
||||
positionY: number,
|
||||
page = 0,
|
||||
useHandwritingFont = true,
|
||||
customFontSize?: number,
|
||||
): Promise<string> {
|
||||
// Fetch the font file from the public URL.
|
||||
const fontResponse = await fetch(CAVEAT_FONT_PATH());
|
||||
@ -24,7 +25,7 @@ export async function insertTextInPDF(
|
||||
const pages = pdfDoc.getPages();
|
||||
const pdfPage = pages[page];
|
||||
|
||||
const textSize = useHandwritingFont ? 50 : 15;
|
||||
const textSize = customFontSize || (useHandwritingFont ? 50 : 15);
|
||||
const textWidth = font.widthOfTextAtSize(text, textSize);
|
||||
const textHeight = font.heightAtSize(textSize);
|
||||
const fieldSize = { width: 250, height: 64 };
|
||||
|
||||
@ -51,7 +51,7 @@ export const createApiToken = async ({
|
||||
name: tokenName,
|
||||
token: hashedToken,
|
||||
expires: expiresIn ? DateTime.now().plus(timeConstantsRecords[expiresIn]).toJSDate() : null,
|
||||
userId: teamId ? null : userId,
|
||||
userId,
|
||||
teamId,
|
||||
},
|
||||
});
|
||||
|
||||
@ -25,8 +25,7 @@ export const deleteTokenById = async ({ id, userId, teamId }: DeleteTokenByIdOpt
|
||||
return await prisma.apiToken.delete({
|
||||
where: {
|
||||
id,
|
||||
userId: teamId ? null : userId,
|
||||
teamId,
|
||||
teamId: teamId ?? null,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
@ -8,6 +8,7 @@ export const getUserTokens = async ({ userId }: GetUserTokensOptions) => {
|
||||
return await prisma.apiToken.findMany({
|
||||
where: {
|
||||
userId,
|
||||
teamId: null,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
|
||||
@ -23,7 +23,8 @@ export const getApiTokenByToken = async ({ token }: { token: string }) => {
|
||||
throw new Error('Expired token');
|
||||
}
|
||||
|
||||
if (apiToken.team) {
|
||||
// Handle a silly choice from many moons ago
|
||||
if (apiToken.team && !apiToken.user) {
|
||||
apiToken.user = await prisma.user.findFirst({
|
||||
where: {
|
||||
id: apiToken.team.ownerUserId,
|
||||
@ -33,9 +34,13 @@ export const getApiTokenByToken = async ({ token }: { token: string }) => {
|
||||
|
||||
const { user } = apiToken;
|
||||
|
||||
// This will never happen but we need to narrow types
|
||||
if (!user) {
|
||||
throw new Error('Invalid token');
|
||||
}
|
||||
|
||||
return { ...apiToken, user };
|
||||
return {
|
||||
...apiToken,
|
||||
user,
|
||||
};
|
||||
};
|
||||
|
||||
@ -17,6 +17,7 @@ import {
|
||||
RecipientRole,
|
||||
SendStatus,
|
||||
SigningStatus,
|
||||
WebhookTriggerEvents,
|
||||
} from '@documenso/prisma/client';
|
||||
import type { TSignFieldWithTokenMutationSchema } from '@documenso/trpc/server/field-router/schema';
|
||||
|
||||
@ -39,6 +40,7 @@ import {
|
||||
import { formatDocumentsPath } from '../../utils/teams';
|
||||
import { sendDocument } from '../document/send-document';
|
||||
import { validateFieldAuth } from '../document/validate-field-auth';
|
||||
import { triggerWebhook } from '../webhooks/trigger/trigger-webhook';
|
||||
|
||||
export type CreateDocumentFromDirectTemplateOptions = {
|
||||
directRecipientName?: string;
|
||||
@ -553,6 +555,23 @@ export const createDocumentFromDirectTemplate = async ({
|
||||
teamId: template.teamId || undefined,
|
||||
requestMetadata,
|
||||
});
|
||||
|
||||
const updatedDocument = await prisma.document.findFirstOrThrow({
|
||||
where: {
|
||||
id: documentId,
|
||||
},
|
||||
include: {
|
||||
documentData: true,
|
||||
Recipient: true,
|
||||
},
|
||||
});
|
||||
|
||||
await triggerWebhook({
|
||||
event: WebhookTriggerEvents.DOCUMENT_SIGNED,
|
||||
data: updatedDocument,
|
||||
userId: updatedDocument.userId,
|
||||
teamId: updatedDocument.teamId ?? undefined,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('[CREATE_DOCUMENT_FROM_DIRECT_TEMPLATE]:', err);
|
||||
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import { nanoid } from '@documenso/lib/universal/id';
|
||||
import { prisma } from '@documenso/prisma';
|
||||
import type { DocumentSigningOrder, Field } from '@documenso/prisma/client';
|
||||
import {
|
||||
DocumentSigningOrder,
|
||||
DocumentSource,
|
||||
type Field,
|
||||
type Recipient,
|
||||
RecipientRole,
|
||||
SendStatus,
|
||||
@ -153,7 +154,7 @@ export const createDocumentFromTemplate = async ({
|
||||
const document = await tx.document.create({
|
||||
data: {
|
||||
source: DocumentSource.TEMPLATE,
|
||||
externalId,
|
||||
externalId: externalId || template.externalId,
|
||||
templateId: template.id,
|
||||
userId,
|
||||
teamId: template.teamId,
|
||||
@ -172,7 +173,9 @@ export const createDocumentFromTemplate = async ({
|
||||
dateFormat: override?.dateFormat || template.templateMeta?.dateFormat,
|
||||
redirectUrl: override?.redirectUrl || template.templateMeta?.redirectUrl,
|
||||
signingOrder:
|
||||
override?.signingOrder || template.templateMeta?.signingOrder || undefined,
|
||||
override?.signingOrder ||
|
||||
template.templateMeta?.signingOrder ||
|
||||
DocumentSigningOrder.PARALLEL,
|
||||
},
|
||||
},
|
||||
Recipient: {
|
||||
|
||||
@ -51,6 +51,11 @@ export const findTemplates = async ({
|
||||
},
|
||||
Field: true,
|
||||
Recipient: true,
|
||||
templateMeta: {
|
||||
select: {
|
||||
signingOrder: true,
|
||||
},
|
||||
},
|
||||
directLink: {
|
||||
select: {
|
||||
token: true,
|
||||
|
||||
@ -100,7 +100,7 @@ export const updateTemplateSettings = async ({
|
||||
},
|
||||
data: {
|
||||
title: data.title,
|
||||
externalId: data.externalId || null,
|
||||
externalId: data.externalId,
|
||||
type: data.type,
|
||||
publicDescription: data.publicDescription,
|
||||
publicTitle: data.publicTitle,
|
||||
|
||||
4
packages/lib/translations/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# Compiled translations.
|
||||
*.js
|
||||
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-16 16:03\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -73,11 +73,11 @@ msgstr "Fügen Sie dem Dokument eine externe ID hinzu. Diese kann verwendet werd
|
||||
msgid "Add an external ID to the template. This can be used to identify in external systems."
|
||||
msgstr "Fügen Sie der Vorlage eine externe ID hinzu. Diese kann zur Identifizierung in externen Systemen verwendet werden."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
|
||||
msgid "Add another option"
|
||||
msgstr "Weitere Option hinzufügen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
|
||||
msgid "Add another value"
|
||||
msgstr "Weiteren Wert hinzufügen"
|
||||
@ -98,11 +98,11 @@ msgstr "Platzhalterempfänger hinzufügen"
|
||||
msgid "Add Signer"
|
||||
msgstr "Unterzeichner hinzufügen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
|
||||
msgid "Add text"
|
||||
msgstr "Text hinzufügen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
|
||||
msgid "Add text to the field"
|
||||
msgstr "Text zum Feld hinzufügen"
|
||||
|
||||
@ -115,7 +115,7 @@ msgstr "Admin"
|
||||
msgid "Advanced Options"
|
||||
msgstr "Erweiterte Optionen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:527
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:570
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:402
|
||||
msgid "Advanced settings"
|
||||
msgstr "Erweiterte Einstellungen"
|
||||
@ -140,15 +140,15 @@ msgstr "Genehmiger"
|
||||
msgid "Approving"
|
||||
msgstr "Genehmigung"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:276
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:377
|
||||
msgid "Black"
|
||||
msgstr "Schwarz"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:290
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:391
|
||||
msgid "Blue"
|
||||
msgstr "Blau"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
@ -157,10 +157,6 @@ msgstr "Abbrechen"
|
||||
msgid "Cannot remove signer"
|
||||
msgstr "Unterzeichner kann nicht entfernt werden"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:221
|
||||
#~ msgid "Cannot update signer because they have already signed a field"
|
||||
#~ msgstr ""
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:17
|
||||
msgid "Cc"
|
||||
msgstr "Cc"
|
||||
@ -174,16 +170,16 @@ msgstr "CC"
|
||||
msgid "CC'd"
|
||||
msgstr "CC'd"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
|
||||
msgid "Character Limit"
|
||||
msgstr "Zeichenbeschränkung"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:950
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
|
||||
msgid "Checkbox"
|
||||
msgstr "Checkbox"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
|
||||
msgid "Checkbox values"
|
||||
msgstr "Checkbox-Werte"
|
||||
|
||||
@ -191,7 +187,7 @@ msgstr "Checkbox-Werte"
|
||||
msgid "Clear filters"
|
||||
msgstr "Filter löschen"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:310
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:411
|
||||
msgid "Clear Signature"
|
||||
msgstr "Unterschrift löschen"
|
||||
|
||||
@ -207,7 +203,7 @@ msgstr "Schließen"
|
||||
msgid "Configure Direct Recipient"
|
||||
msgstr "Direkten Empfänger konfigurieren"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:528
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:571
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:403
|
||||
msgid "Configure the {0} field"
|
||||
msgstr "Konfigurieren Sie das Feld {0}"
|
||||
@ -224,7 +220,7 @@ msgstr "In die Zwischenablage kopiert"
|
||||
msgid "Custom Text"
|
||||
msgstr "Benutzerdefinierter Text"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:846
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:922
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
@ -256,16 +252,16 @@ msgstr "Herunterladen"
|
||||
msgid "Drag & drop your PDF here."
|
||||
msgstr "Ziehen Sie Ihr PDF hierher."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:976
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
|
||||
msgid "Dropdown"
|
||||
msgstr "Dropdown"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
|
||||
msgid "Dropdown options"
|
||||
msgstr "Dropdown-Optionen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:794
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:870
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:272
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:500
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:632
|
||||
@ -278,6 +274,10 @@ msgstr "E-Mail"
|
||||
msgid "Email Options"
|
||||
msgstr "E-Mail-Optionen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
|
||||
msgid "Empty field"
|
||||
msgstr "Leeres Feld"
|
||||
|
||||
#: packages/lib/constants/template.ts:8
|
||||
msgid "Enable Direct Link Signing"
|
||||
msgstr "Direktlink-Signierung aktivieren"
|
||||
@ -287,11 +287,15 @@ msgstr "Direktlink-Signierung aktivieren"
|
||||
msgid "Enable signing order"
|
||||
msgstr "Aktiviere die Signaturreihenfolge"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:790
|
||||
msgid "Enable Typed Signatures"
|
||||
msgstr "Aktivieren Sie getippte Unterschriften"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:84
|
||||
msgid "Enter password"
|
||||
msgstr "Passwort eingeben"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
@ -300,26 +304,44 @@ msgstr "Fehler"
|
||||
msgid "External ID"
|
||||
msgstr "Externe ID"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
|
||||
msgid "Failed to save settings."
|
||||
msgstr "Einstellungen konnten nicht gespeichert werden."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
|
||||
msgid "Field character limit"
|
||||
msgstr "Zeichenbeschränkung des Feldes"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
|
||||
msgid "Field font size"
|
||||
msgstr "Feldschriftgröße"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
|
||||
msgid "Field format"
|
||||
msgstr "Feldformat"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
|
||||
msgid "Field label"
|
||||
msgstr "Feldbeschriftung"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
|
||||
msgid "Field placeholder"
|
||||
msgstr "Feldplatzhalter"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
|
||||
msgid "Font Size"
|
||||
msgstr "Schriftgröße"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
|
||||
msgid "Global recipient action authentication"
|
||||
msgstr "Globale Empfängerauthentifizierung"
|
||||
@ -328,7 +350,7 @@ msgstr "Globale Empfängerauthentifizierung"
|
||||
msgid "Go Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:297
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:398
|
||||
msgid "Green"
|
||||
msgstr "Grün"
|
||||
|
||||
@ -348,18 +370,14 @@ msgstr "Ich bin ein Genehmiger dieses Dokuments"
|
||||
msgid "I am required to receive a copy of this document"
|
||||
msgstr "Ich bin verpflichtet, eine Kopie dieses Dokuments zu erhalten"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:74
|
||||
#~ msgid "I am required to recieve a copy of this document"
|
||||
#~ msgstr "I am required to recieve a copy of this document"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
|
||||
msgid "Inherit authentication method"
|
||||
msgstr "Authentifizierungsmethode erben"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
|
||||
msgid "Label"
|
||||
msgstr "Beschriftung"
|
||||
|
||||
@ -367,7 +385,7 @@ msgstr "Beschriftung"
|
||||
msgid "Manager"
|
||||
msgstr "Manager"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
|
||||
msgid "Max"
|
||||
msgstr "Max"
|
||||
|
||||
@ -380,11 +398,11 @@ msgstr "Mitglied"
|
||||
msgid "Message <0>(Optional)</0>"
|
||||
msgstr "Nachricht <0>(Optional)</0>"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
|
||||
msgid "Min"
|
||||
msgstr "Min"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:820
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:896
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:298
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:535
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:541
|
||||
@ -406,12 +424,12 @@ msgstr "Muss unterzeichnen"
|
||||
msgid "Needs to view"
|
||||
msgstr "Muss sehen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:631
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:680
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:497
|
||||
msgid "No recipient matching this description was found."
|
||||
msgstr "Kein passender Empfänger mit dieser Beschreibung gefunden."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:647
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:696
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:513
|
||||
msgid "No recipients with this role"
|
||||
msgstr "Keine Empfänger mit dieser Rolle"
|
||||
@ -436,12 +454,12 @@ msgstr "Kein Unterschriftsfeld gefunden"
|
||||
msgid "No value found."
|
||||
msgstr "Kein Wert gefunden."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:898
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:974
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
|
||||
msgid "Number"
|
||||
msgstr "Nummer"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
|
||||
msgid "Number format"
|
||||
msgstr "Zahlenformat"
|
||||
|
||||
@ -461,17 +479,17 @@ msgstr "Seite {0} von {1}"
|
||||
msgid "Password Required"
|
||||
msgstr "Passwort erforderlich"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
|
||||
msgid "Pick a number"
|
||||
msgstr "Wählen Sie eine Zahl"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
|
||||
msgid "Placeholder"
|
||||
msgstr "Platzhalter"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:924
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
|
||||
msgid "Radio"
|
||||
msgstr "Radio"
|
||||
@ -480,11 +498,11 @@ msgstr "Radio"
|
||||
msgid "Radio values"
|
||||
msgstr "Radio-Werte"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
|
||||
msgid "Read only"
|
||||
msgstr "Nur lesen"
|
||||
|
||||
@ -498,7 +516,7 @@ msgstr "Erhält Kopie"
|
||||
msgid "Recipient action authentication"
|
||||
msgstr "Empfängeraktion Authentifizierung"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:283
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:384
|
||||
msgid "Red"
|
||||
msgstr "Rot"
|
||||
|
||||
@ -507,15 +525,15 @@ msgstr "Rot"
|
||||
msgid "Redirect URL"
|
||||
msgstr "Weiterleitungs-URL"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1027
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
|
||||
msgid "Required field"
|
||||
msgstr "Pflichtfeld"
|
||||
|
||||
@ -523,7 +541,7 @@ msgstr "Pflichtfeld"
|
||||
msgid "Rows per page"
|
||||
msgstr "Zeilen pro Seite"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
@ -535,7 +553,7 @@ msgstr "Vorlage speichern"
|
||||
msgid "Search languages..."
|
||||
msgstr "Sprachen suchen..."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
|
||||
msgid "Select"
|
||||
msgstr "Auswählen"
|
||||
|
||||
@ -543,11 +561,11 @@ msgstr "Auswählen"
|
||||
msgid "Select an option"
|
||||
msgstr "Option auswählen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
|
||||
msgid "Select at least"
|
||||
msgstr "Wählen Sie mindestens"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
msgid "Select default option"
|
||||
msgstr "Standardoption auswählen"
|
||||
|
||||
@ -578,7 +596,7 @@ msgstr "Erweiterte Einstellungen anzeigen"
|
||||
msgid "Sign"
|
||||
msgstr "Unterschreiben"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:742
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:818
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:323
|
||||
#: packages/ui/primitives/document-flow/field-icon.tsx:52
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:580
|
||||
@ -626,7 +644,7 @@ msgstr "Einreichen"
|
||||
msgid "Template title"
|
||||
msgstr "Vorlagentitel"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:872
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:948
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
|
||||
msgid "Text"
|
||||
msgstr "Text"
|
||||
@ -687,7 +705,7 @@ msgstr "Der Name des Unterzeichners"
|
||||
msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step."
|
||||
msgstr "Dies kann überschrieben werden, indem die Authentifizierungsanforderungen im nächsten Schritt direkt für jeden Empfänger festgelegt werden."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:703
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:752
|
||||
msgid "This document has already been sent to this recipient. You can no longer edit this recipient."
|
||||
msgstr "Dieses Dokument wurde bereits an diesen Empfänger gesendet. Sie können diesen Empfänger nicht mehr bearbeiten."
|
||||
|
||||
@ -699,17 +717,13 @@ msgstr "Dieses Dokument ist durch ein Passwort geschützt. Bitte geben Sie das P
|
||||
msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them."
|
||||
msgstr "Dieses Feld kann nicht geändert oder gelöscht werden. Wenn Sie den direkten Link dieser Vorlage teilen oder zu Ihrem öffentlichen Profil hinzufügen, kann jeder, der darauf zugreift, seinen Namen und seine E-Mail-Adresse eingeben und die ihm zugewiesenen Felder ausfüllen."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1007
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1084
|
||||
msgid "This recipient can no longer be modified as they have signed a field, or completed the document."
|
||||
msgstr ""
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:195
|
||||
#~ msgid "This signer has already received the document."
|
||||
#~ msgstr "Dieser Unterzeichner hat das Dokument bereits erhalten."
|
||||
msgstr "Dieser Empfänger kann nicht mehr bearbeitet werden, da er ein Feld unterschrieben oder das Dokument abgeschlossen hat."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:194
|
||||
msgid "This signer has already signed the document."
|
||||
msgstr ""
|
||||
msgstr "Dieser Unterzeichner hat das Dokument bereits unterschrieben."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:48
|
||||
msgid "This will override any global settings."
|
||||
@ -724,7 +738,7 @@ msgstr "Zeitzone"
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:990
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1067
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:828
|
||||
msgid "To proceed further, please set at least one value for the {0} field."
|
||||
msgstr "Um fortzufahren, legen Sie bitte mindestens einen Wert für das Feld {0} fest."
|
||||
@ -745,35 +759,31 @@ msgstr "Upgrade"
|
||||
msgid "Upload Template Document"
|
||||
msgstr "Vorlagendokument hochladen"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
|
||||
msgid "Validation"
|
||||
msgstr "Validierung"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
|
||||
msgid "Value"
|
||||
msgstr "Wert"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:26
|
||||
msgid "View"
|
||||
msgstr "View"
|
||||
msgstr "Betrachten"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:27
|
||||
msgid "Viewed"
|
||||
msgstr "Viewed"
|
||||
msgstr "Betrachtet"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:29
|
||||
msgid "Viewer"
|
||||
msgstr "Viewer"
|
||||
msgstr "Betrachter"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:28
|
||||
msgid "Viewing"
|
||||
msgstr "Viewing"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:280
|
||||
#~ msgid "White"
|
||||
#~ msgstr "White"
|
||||
msgstr "Betrachten"
|
||||
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44
|
||||
msgid "You are about to send this document to the recipients. Are you sure you want to continue?"
|
||||
|
||||
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-16 14:04\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -160,10 +160,6 @@ msgstr "Dokumentation"
|
||||
msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application."
|
||||
msgstr "Betten Sie Documenso ganz einfach in Ihr Produkt ein. Kopieren und fügen Sie einfach unser React-Widget in Ihre Anwendung ein."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42
|
||||
#~ msgid "Easy Sharing (Soon)."
|
||||
#~ msgstr "Easy Sharing (Soon)."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46
|
||||
msgid "Easy Sharing."
|
||||
msgstr "Einfaches Teilen."
|
||||
@ -223,6 +219,7 @@ msgstr "Aus dem Blog"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:9
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:17
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:33
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:41
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:49
|
||||
@ -376,18 +373,10 @@ msgstr "Unsere benutzerdefinierten Vorlagen verfügen über intelligente Regeln,
|
||||
msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features."
|
||||
msgstr "Unsere Enterprise-Lizenz ist ideal für große Organisationen, die auf Documenso für all ihre Signaturanforderungen umsteigen möchten. Sie ist sowohl für unser Cloud-Angebot als auch für selbstgehostete Setups verfügbar und bietet eine breite Palette an Compliance- und Verwaltungsfunktionen."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:20
|
||||
#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:65
|
||||
msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership."
|
||||
msgstr "Unsere selbstgehostete Option ist ideal für kleine Teams und Einzelpersonen, die eine einfache Lösung benötigen. Sie können unser docker-basiertes Setup verwenden, um in wenigen Minuten loszulegen. Übernehmen Sie die Kontrolle mit vollständiger Anpassbarkeit und Datenhoheit."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
msgid "Part-Time"
|
||||
msgstr "Teilzeit"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
|
||||
msgid "Premium Profile Name"
|
||||
msgstr "Premium Profilname"
|
||||
@ -429,10 +418,6 @@ msgstr "Gehalt"
|
||||
msgid "Save $60 or $120"
|
||||
msgstr "Sparen Sie $60 oder $120"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47
|
||||
#~ msgid "Search languages..."
|
||||
#~ msgstr "Search languages..."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:109
|
||||
msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us."
|
||||
msgstr "Sicher. Unsere Rechenzentren befinden sich in Frankfurt (Deutschland) und bieten uns die besten lokalen Datenschutzgesetze. Uns ist die sensible Natur unserer Daten sehr bewusst und wir folgen bewährten Praktiken, um die Sicherheit und Integrität der uns anvertrauten Daten zu gewährleisten."
|
||||
@ -614,6 +599,6 @@ msgstr "Ja! Documenso wird unter der GNU AGPL V3 Open-Source-Lizenz angeboten. D
|
||||
msgid "You can self-host Documenso for free or use our ready-to-use hosted version. The hosted version comes with additional support, painless scalability and more. Early adopters will get access to all features we build this year, for no additional cost! Forever! Yes, that includes multiple users per account later. If you want Documenso for your enterprise, we are happy to talk about your needs."
|
||||
msgstr "Sie können Documenso kostenlos selbst hosten oder unsere sofort einsatzbereite gehostete Version nutzen. Die gehostete Version bietet zusätzlichen Support, schmerzfreie Skalierbarkeit und mehr. Frühzeitige Anwender erhalten in diesem Jahr Zugriff auf alle Funktionen, die wir entwickeln, ohne zusätzliche Kosten! Für immer! Ja, das beinhaltet später mehrere Benutzer pro Konto. Wenn Sie Documenso für Ihr Unternehmen möchten, sprechen wir gerne über Ihre Bedürfnisse."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:265
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:272
|
||||
msgid "Your browser does not support the video tag."
|
||||
msgstr "Ihr Browser unterstützt das Video-Tag nicht."
|
||||
|
||||
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-16 16:03\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -137,7 +137,7 @@ msgstr "404 Vorlage nicht gefunden"
|
||||
msgid "A confirmation email has been sent, and it should arrive in your inbox shortly."
|
||||
msgstr "Eine Bestätigungs-E-Mail wurde gesendet, und sie sollte in Kürze in deinem Posteingang ankommen."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201
|
||||
msgid "A draft document will be created"
|
||||
msgstr "Ein Entwurf wird erstellt"
|
||||
|
||||
@ -220,7 +220,7 @@ msgstr "Aktive Abonnements"
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:157
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87
|
||||
msgid "Add all relevant fields for each recipient."
|
||||
msgstr "Fügen Sie alle relevanten Felder für jeden Empfänger hinzu."
|
||||
@ -241,7 +241,7 @@ msgstr "Fügen Sie einen Authenticator hinzu, um als sekundäre Authentifizierun
|
||||
msgid "Add email"
|
||||
msgstr "E-Mail hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:156
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86
|
||||
msgid "Add Fields"
|
||||
msgstr "Felder hinzufügen"
|
||||
@ -250,10 +250,6 @@ msgstr "Felder hinzufügen"
|
||||
msgid "Add more"
|
||||
msgstr "Mehr hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270
|
||||
#~ msgid "Add number"
|
||||
#~ msgstr "Add number"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154
|
||||
msgid "Add passkey"
|
||||
@ -263,11 +259,11 @@ msgstr "Passkey hinzufügen"
|
||||
msgid "Add Placeholders"
|
||||
msgstr "Platzhalter hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:151
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169
|
||||
msgid "Add Signers"
|
||||
msgstr "Unterzeichner hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:161
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179
|
||||
msgid "Add Subject"
|
||||
msgstr "Betreff hinzufügen"
|
||||
|
||||
@ -275,23 +271,15 @@ msgstr "Betreff hinzufügen"
|
||||
msgid "Add team email"
|
||||
msgstr "Team-E-Mail hinzufügen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256
|
||||
#~ msgid "Add text"
|
||||
#~ msgstr "Add text"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272
|
||||
#~ msgid "Add Text"
|
||||
#~ msgstr "Add Text"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170
|
||||
msgid "Add the people who will sign the document."
|
||||
msgstr "Fügen Sie die Personen hinzu, die das Dokument unterschreiben werden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203
|
||||
msgid "Add the recipients to create the document with"
|
||||
msgstr "Fügen Sie die Empfänger hinzu, um das Dokument zu erstellen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:162
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180
|
||||
msgid "Add the subject and message you wish to send to signers."
|
||||
msgstr "Fügen Sie den Betreff und die Nachricht hinzu, die Sie den Unterzeichnern senden möchten."
|
||||
|
||||
@ -370,17 +358,17 @@ msgstr "Eine E-Mail, in der die Übertragung dieses Teams angefordert wird, wurd
|
||||
msgid "An error occurred"
|
||||
msgstr "Ein Fehler ist aufgetreten"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231
|
||||
msgid "An error occurred while adding signers."
|
||||
msgstr "Ein Fehler ist aufgetreten, während Unterzeichner hinzugefügt wurden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:278
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301
|
||||
msgid "An error occurred while adding the fields."
|
||||
msgstr "Ein Fehler ist aufgetreten, während die Felder hinzugefügt wurden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161
|
||||
msgid "An error occurred while creating document from template."
|
||||
msgstr "Ein Fehler ist aufgetreten, während das Dokument aus der Vorlage erstellt wurde."
|
||||
|
||||
@ -426,7 +414,7 @@ msgstr "Ein Fehler ist aufgetreten, während die Vorlage verschoben wurde."
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:129
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:173
|
||||
msgid "An error occurred while removing the signature."
|
||||
msgstr "Ein Fehler ist aufgetreten, während die Unterschrift entfernt wurde."
|
||||
|
||||
@ -434,7 +422,7 @@ msgstr "Ein Fehler ist aufgetreten, während die Unterschrift entfernt wurde."
|
||||
msgid "An error occurred while removing the text."
|
||||
msgstr "Ein Fehler ist aufgetreten, während der Text entfernt wurde."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:309
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332
|
||||
msgid "An error occurred while sending the document."
|
||||
msgstr "Ein Fehler ist aufgetreten, während das Dokument gesendet wurde."
|
||||
|
||||
@ -449,7 +437,7 @@ msgstr "Beim Senden Ihrer Bestätigungs-E-Mail ist ein Fehler aufgetreten"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:149
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:147
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:168
|
||||
msgid "An error occurred while signing the document."
|
||||
msgstr "Ein Fehler ist aufgetreten, während das Dokument unterzeichnet wurde."
|
||||
@ -458,7 +446,7 @@ msgstr "Ein Fehler ist aufgetreten, während das Dokument unterzeichnet wurde."
|
||||
msgid "An error occurred while trying to create a checkout session."
|
||||
msgstr "Ein Fehler ist aufgetreten, während versucht wurde, eine Checkout-Sitzung zu erstellen."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:214
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166
|
||||
msgid "An error occurred while updating the document settings."
|
||||
msgstr "Ein Fehler ist aufgetreten, während die Dokumenteinstellungen aktualisiert wurden."
|
||||
@ -561,7 +549,7 @@ msgstr "Bist du dir sicher, dass du dieses Team löschen möchtest?"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98
|
||||
#: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116
|
||||
@ -660,16 +648,16 @@ msgstr "Durch die Aktivierung von 2FA müssen Sie jedes Mal, wenn Sie sich anmel
|
||||
#: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:250
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:176
|
||||
@ -752,14 +740,14 @@ msgid "Click to copy signing link for sending to recipient"
|
||||
msgstr "Klicken Sie, um den Signatur-Link zu kopieren, um ihn an den Empfänger zu senden"
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:114
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:115
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:439
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:318
|
||||
msgid "Click to insert field"
|
||||
msgstr "Klicken Sie, um das Feld einzufügen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
@ -771,8 +759,8 @@ msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:429
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:308
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:534
|
||||
msgid "Complete"
|
||||
msgstr "Vollständig"
|
||||
@ -789,7 +777,7 @@ msgstr "Unterzeichnung abschließen"
|
||||
msgid "Complete Viewing"
|
||||
msgstr "Betrachten abschließen"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:58
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
|
||||
#: apps/web/src/components/formatter/document-status.tsx:28
|
||||
msgid "Completed"
|
||||
msgstr "Abgeschlossen"
|
||||
@ -802,7 +790,7 @@ msgstr "Abgeschlossene Dokumente"
|
||||
msgid "Completed Documents"
|
||||
msgstr "Abgeschlossene Dokumente"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:147
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165
|
||||
msgid "Configure general settings for the document."
|
||||
msgstr "Konfigurieren Sie die allgemeinen Einstellungen für das Dokument."
|
||||
|
||||
@ -814,7 +802,7 @@ msgstr "Konfigurieren Sie die allgemeinen Einstellungen für die Vorlage."
|
||||
msgid "Configure template"
|
||||
msgstr "Vorlage konfigurieren"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:460
|
||||
msgid "Confirm"
|
||||
msgstr "Bestätigen"
|
||||
@ -900,11 +888,11 @@ msgstr "Ein Team erstellen, um mit Ihren Teammitgliedern zusammenzuarbeiten."
|
||||
msgid "Create account"
|
||||
msgstr "Konto erstellen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345
|
||||
msgid "Create and send"
|
||||
msgstr "Erstellen und senden"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347
|
||||
msgid "Create as draft"
|
||||
msgstr "Als Entwurf erstellen"
|
||||
|
||||
@ -916,7 +904,7 @@ msgstr "Direkten Link erstellen"
|
||||
msgid "Create Direct Signing Link"
|
||||
msgstr "Direkten Signatur-Link erstellen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197
|
||||
msgid "Create document from template"
|
||||
msgstr "Dokument aus der Vorlage erstellen"
|
||||
|
||||
@ -988,11 +976,6 @@ msgstr "Erstellt am"
|
||||
msgid "Created on {0}"
|
||||
msgstr "Erstellt am {0}"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94
|
||||
#~ msgid "Created on <0/>"
|
||||
#~ msgstr "Created on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100
|
||||
msgid "Created on{0}"
|
||||
msgstr ">>>>>>> 4ca18b99 (fix: refactor dates)"
|
||||
@ -1107,10 +1090,6 @@ msgstr "Gelöscht"
|
||||
msgid "Deleting account..."
|
||||
msgstr "Konto wird gelöscht..."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135
|
||||
#~ msgid "Deleting document"
|
||||
#~ msgstr "Deleting document"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75
|
||||
msgid "Device"
|
||||
msgstr "Gerät"
|
||||
@ -1215,7 +1194,7 @@ msgstr "Dokument abgeschlossen"
|
||||
msgid "Document Completed!"
|
||||
msgstr "Dokument abgeschlossen!"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150
|
||||
msgid "Document created"
|
||||
msgstr "Dokument erstellt"
|
||||
|
||||
@ -1246,7 +1225,7 @@ msgstr "Dokument-ID"
|
||||
msgid "Document inbox"
|
||||
msgstr "Dokumenten-Posteingang"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179
|
||||
msgid "Document Limit Exceeded!"
|
||||
msgstr "Dokumentenlimit überschritten!"
|
||||
|
||||
@ -1274,7 +1253,7 @@ msgstr "Dokument erneut gesendet"
|
||||
msgid "Document resealed"
|
||||
msgstr "Dokument wieder versiegelt"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:298
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321
|
||||
msgid "Document sent"
|
||||
msgstr "Dokument gesendet"
|
||||
|
||||
@ -1316,7 +1295,7 @@ msgstr "Dokument wird dauerhaft gelöscht"
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx:109
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/loading.tsx:16
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx:15
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:119
|
||||
#: apps/web/src/app/(profile)/p/[url]/page.tsx:166
|
||||
#: apps/web/src/app/not-found.tsx:21
|
||||
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:205
|
||||
@ -1402,8 +1381,8 @@ msgstr "Webhook bearbeiten"
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255
|
||||
#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118
|
||||
#: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376
|
||||
@ -1491,10 +1470,10 @@ msgstr "Geben Sie hier Ihren Text ein"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:247
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:277
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:308
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331
|
||||
#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112
|
||||
@ -1503,7 +1482,7 @@ msgstr "Geben Sie hier Ihren Text ein"
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212
|
||||
@ -1519,8 +1498,8 @@ msgstr "Geben Sie hier Ihren Text ein"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:194
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:101
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:128
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:174
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:146
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:172
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:167
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:195
|
||||
#: apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx:54
|
||||
@ -1544,20 +1523,10 @@ msgstr "Zeitüberschreitung überschritten"
|
||||
msgid "Expired"
|
||||
msgstr "Abgelaufen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106
|
||||
#~ msgid "Expires on"
|
||||
#~ msgstr "Expires on"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71
|
||||
msgid "Expires on {0}"
|
||||
msgstr ">>>>>>> 4ca18b99 (fix: refactor dates)"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108
|
||||
#~ msgid "Expires on <0/>"
|
||||
#~ msgstr "Expires on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107
|
||||
msgid "Expires on{0}"
|
||||
msgstr "Läuft ab am{0}"
|
||||
@ -1597,7 +1566,7 @@ msgstr "Haben Sie Ihr Passwort vergessen?"
|
||||
msgid "Full Name"
|
||||
msgstr "Vollständiger Name"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76
|
||||
#: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60
|
||||
#: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43
|
||||
@ -1659,10 +1628,6 @@ msgstr "Ausblenden"
|
||||
msgid "Hide additional information"
|
||||
msgstr "Zusätzliche Informationen ausblenden"
|
||||
|
||||
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40
|
||||
#~ msgid "I am the owner of this document"
|
||||
#~ msgstr "I am the owner of this document"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173
|
||||
msgid "I'm sure! Delete it"
|
||||
@ -2006,8 +1971,8 @@ msgstr "Meine Vorlagen"
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:61
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277
|
||||
#: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170
|
||||
#: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153
|
||||
@ -2037,8 +2002,8 @@ msgstr "Neuer Teamowner"
|
||||
msgid "New Template"
|
||||
msgstr "Neue Vorlage"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:420
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:299
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:521
|
||||
msgid "Next"
|
||||
msgstr "Nächster"
|
||||
@ -2143,7 +2108,7 @@ msgstr "Sobald Sie den QR-Code gescannt oder den Code manuell eingegeben haben,
|
||||
msgid "Oops! Something went wrong."
|
||||
msgstr "Hoppla! Etwas ist schief gelaufen."
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:97
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
|
||||
msgid "Opened"
|
||||
msgstr "Geöffnet"
|
||||
|
||||
@ -2158,7 +2123,7 @@ msgstr "Oder"
|
||||
msgid "Or continue with"
|
||||
msgstr "Oder fahren Sie fort mit"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324
|
||||
msgid "Otherwise, the document will be created as a draft."
|
||||
msgstr "Andernfalls wird das Dokument als Entwurf erstellt."
|
||||
|
||||
@ -2294,11 +2259,11 @@ msgstr "Bitte kontaktieren Sie den Support, wenn Sie diese Aktion rückgängig m
|
||||
msgid "Please enter a meaningful name for your token. This will help you identify it later."
|
||||
msgstr "Bitte geben Sie einen aussagekräftigen Namen für Ihr Token ein. Dies wird Ihnen helfen, es später zu identifizieren."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:134
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:135
|
||||
msgid "Please mark as viewed to complete"
|
||||
msgstr "Bitte als angesehen markieren, um abzuschließen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459
|
||||
msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder."
|
||||
msgstr "Bitte beachten Sie, dass das Fortfahren den direkten Linkempfänger entfernt und ihn in einen Platzhalter umwandelt."
|
||||
|
||||
@ -2589,7 +2554,7 @@ msgstr "Rolle"
|
||||
msgid "Roles"
|
||||
msgstr "Rollen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342
|
||||
msgid "Save"
|
||||
@ -2658,7 +2623,7 @@ msgstr "Passkey auswählen"
|
||||
msgid "Send confirmation email"
|
||||
msgstr "Bestätigungs-E-Mail senden"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308
|
||||
msgid "Send document"
|
||||
msgstr "Dokument senden"
|
||||
|
||||
@ -2730,20 +2695,16 @@ msgstr "Vorlagen in Ihrem Team-Öffentliches Profil anzeigen, damit Ihre Zielgru
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:182
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:224
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:124
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:259
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:256
|
||||
#: apps/web/src/components/ui/user-profile-skeleton.tsx:75
|
||||
#: apps/web/src/components/ui/user-profile-timur.tsx:81
|
||||
msgid "Sign"
|
||||
msgstr "Unterzeichnen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:217
|
||||
msgid "Sign as {0} <0>({1})</0>"
|
||||
msgstr "Unterzeichnen als {0} <0>({1})</0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#~ msgid "Sign as <0>{0} <1>({1})</1></0>"
|
||||
#~ msgstr "Sign as <0>{0} <1>({1})</1></0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183
|
||||
msgid "Sign as<0>{0} <1>({1})</1></0>"
|
||||
msgstr "Unterzeichnen als<0>{0} <1>({1})</1></0>"
|
||||
@ -2802,8 +2763,8 @@ msgstr "Registrieren mit OIDC"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:197
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:227
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270
|
||||
#: apps/web/src/components/forms/profile.tsx:132
|
||||
@ -3098,40 +3059,40 @@ msgstr "Teams"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:83
|
||||
msgid "Teams restricted"
|
||||
msgstr "Teams restricted"
|
||||
msgstr "Teams beschränkt"
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:408
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:271
|
||||
msgid "Template"
|
||||
msgstr "Template"
|
||||
msgstr "Vorlage"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:41
|
||||
msgid "Template deleted"
|
||||
msgstr "Template deleted"
|
||||
msgstr "Vorlage gelöscht"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:67
|
||||
msgid "Template document uploaded"
|
||||
msgstr "Template document uploaded"
|
||||
msgstr "Vorlagendokument hochgeladen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:42
|
||||
msgid "Template duplicated"
|
||||
msgstr "Template duplicated"
|
||||
msgstr "Vorlage dupliziert"
|
||||
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:134
|
||||
msgid "Template has been removed from your public profile."
|
||||
msgstr "Template has been removed from your public profile."
|
||||
msgstr "Vorlage ist von Deinem öffentlichen Profil entfernt worden."
|
||||
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:171
|
||||
msgid "Template has been updated."
|
||||
msgstr "Template has been updated."
|
||||
msgstr "Vorlage wurde aktualisiert."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:48
|
||||
msgid "Template moved"
|
||||
msgstr "Template moved"
|
||||
msgstr "Vorlage verschoben"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:219
|
||||
msgid "Template saved"
|
||||
msgstr "Template saved"
|
||||
msgstr "Vorlage gespeichert"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view.tsx:60
|
||||
#: apps/web/src/app/(dashboard)/templates/templates-page-view.tsx:55
|
||||
@ -3139,11 +3100,11 @@ msgstr "Template saved"
|
||||
#: apps/web/src/components/(dashboard)/layout/desktop-nav.tsx:22
|
||||
#: apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx:39
|
||||
msgid "Templates"
|
||||
msgstr "Templates"
|
||||
msgstr "Vorlagen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:106
|
||||
msgid "Templates allow you to quickly generate documents with pre-filled recipients and fields."
|
||||
msgstr "Templates allow you to quickly generate documents with pre-filled recipients and fields."
|
||||
msgstr "Vorlagen erlauben dir das schnelle Erstlelen von Dokumenten mit vorausgefüllten Empfängern und Feldern."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272
|
||||
@ -3152,39 +3113,39 @@ msgstr "Text"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:166
|
||||
msgid "Text Color"
|
||||
msgstr "Text Color"
|
||||
msgstr "Textfarbe"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:52
|
||||
msgid "The account has been deleted successfully."
|
||||
msgstr "The account has been deleted successfully."
|
||||
msgstr "Das Konto wurde erfolgreich gelöscht."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:197
|
||||
msgid "The content to show in the banner, HTML is allowed"
|
||||
msgstr "The content to show in the banner, HTML is allowed"
|
||||
msgstr "Der Inhalt, der im Banne rgezeig wird, HTML ist erlaubt"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:32
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:164
|
||||
msgid "The direct link has been copied to your clipboard"
|
||||
msgstr "The direct link has been copied to your clipboard"
|
||||
msgstr "Der direkte Linkt wurde in die Zwischenablage kopiert"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:50
|
||||
msgid "The document has been successfully moved to the selected team."
|
||||
msgstr "The document has been successfully moved to the selected team."
|
||||
msgstr "Das Dokument wurde erfolgreich in das ausgewählte Team verschoben."
|
||||
|
||||
#: apps/web/src/app/embed/completed.tsx:29
|
||||
msgid "The document is now completed, please follow any instructions provided within the parent application."
|
||||
msgstr "Das Dokument ist jetzt abgeschlossen. Bitte folgen Sie allen Anweisungen, die in der übergeordneten Anwendung bereitgestellt werden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167
|
||||
msgid "The document was created but could not be sent to recipients."
|
||||
msgstr "The document was created but could not be sent to recipients."
|
||||
msgstr "Das Dokument wurde erstellt, konnte aber nicht an die Empfänger versendet werden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:161
|
||||
msgid "The document will be hidden from your account"
|
||||
msgstr "The document will be hidden from your account"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316
|
||||
msgid "The document will be immediately sent to recipients if this is checked."
|
||||
msgstr "The document will be immediately sent to recipients if this is checked."
|
||||
|
||||
@ -3636,7 +3597,7 @@ msgstr "Unable to sign in"
|
||||
msgid "Unauthorized"
|
||||
msgstr "Unauthorized"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:112
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
|
||||
msgid "Uncompleted"
|
||||
msgstr "Uncompleted"
|
||||
|
||||
@ -3742,7 +3703,7 @@ msgstr "Authenticator verwenden"
|
||||
msgid "Use Backup Code"
|
||||
msgstr "Backup-Code verwenden"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191
|
||||
msgid "Use Template"
|
||||
msgstr "Vorlage verwenden"
|
||||
|
||||
@ -3848,7 +3809,7 @@ msgstr "Teams ansehen"
|
||||
msgid "Viewed"
|
||||
msgstr "Angesehen"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:82
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
|
||||
msgid "Waiting"
|
||||
msgstr "Warten"
|
||||
|
||||
@ -4176,10 +4137,6 @@ msgstr "Sie stehen kurz davor, den Zugriff für das Team <0>{0}</0> ({1}) zu wid
|
||||
msgid "You are currently on the <0>Free Plan</0>."
|
||||
msgstr "Sie befinden sich derzeit im <0>kostenlosen Plan</0>."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92
|
||||
#~ msgid "You are currently subscribed to <0>{0}</0>"
|
||||
#~ msgstr "You are currently subscribed to <0>{0}</0>"
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148
|
||||
msgid "You are currently updating <0>{teamMemberName}.</0>"
|
||||
msgstr "Sie aktualisieren derzeit <0>{teamMemberName}.</0>"
|
||||
@ -4224,10 +4181,6 @@ msgstr "Sie können ein Teammitglied, das eine höhere Rolle als Sie hat, nicht
|
||||
msgid "You cannot upload encrypted PDFs"
|
||||
msgstr "Sie können keine verschlüsselten PDFs hochladen"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97
|
||||
#~ msgid "You currently have an active plan"
|
||||
#~ msgstr "You currently have an active plan"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45
|
||||
msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance."
|
||||
msgstr "Sie haben derzeit keinen Kundenrecord, das sollte nicht passieren. Bitte kontaktieren Sie den Support um Hilfe."
|
||||
@ -4274,7 +4227,7 @@ msgstr "Sie haben das maximale Limit von {0} direkten Vorlagen erreicht. <0>Upgr
|
||||
msgid "You have reached your document limit."
|
||||
msgstr "Sie haben Ihr Dokumentenlimit erreicht."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182
|
||||
msgid "You have reached your document limit. <0>Upgrade your account to continue!</0>"
|
||||
msgstr "Sie haben Ihr Dokumentenlimit erreicht. <0>Upgrade your account to continue!</0>"
|
||||
|
||||
@ -4308,10 +4261,6 @@ msgstr "Sie haben Ihre E-Mail-Adresse für <0>{0}</0> bestätigt."
|
||||
msgid "You must be an admin of this team to manage billing."
|
||||
msgstr "Sie müssen Administrator dieses Teams sein, um die Abrechnung zu verwalten."
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80
|
||||
#~ msgid "You must enter '{confirmTransferMessage}' to proceed"
|
||||
#~ msgstr "You must enter '{confirmTransferMessage}' to proceed"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54
|
||||
@ -4374,7 +4323,7 @@ msgstr "Ihre direkten Unterzeichnungsvorlagen"
|
||||
msgid "Your document failed to upload."
|
||||
msgstr "Ihr Dokument konnte nicht hochgeladen werden."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151
|
||||
msgid "Your document has been created from the template successfully."
|
||||
msgstr "Ihr Dokument wurde erfolgreich aus der Vorlage erstellt."
|
||||
|
||||
@ -4382,7 +4331,7 @@ msgstr "Ihr Dokument wurde erfolgreich aus der Vorlage erstellt."
|
||||
msgid "Your document has been re-sent successfully."
|
||||
msgstr "Ihr Dokument wurde erfolgreich erneut gesendet."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:299
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322
|
||||
msgid "Your document has been sent successfully."
|
||||
msgstr "Ihr Dokument wurde erfolgreich gesendet."
|
||||
|
||||
|
||||
@ -68,11 +68,11 @@ msgstr "Add an external ID to the document. This can be used to identify the doc
|
||||
msgid "Add an external ID to the template. This can be used to identify in external systems."
|
||||
msgstr "Add an external ID to the template. This can be used to identify in external systems."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
|
||||
msgid "Add another option"
|
||||
msgstr "Add another option"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
|
||||
msgid "Add another value"
|
||||
msgstr "Add another value"
|
||||
@ -93,11 +93,11 @@ msgstr "Add Placeholder Recipient"
|
||||
msgid "Add Signer"
|
||||
msgstr "Add Signer"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
|
||||
msgid "Add text"
|
||||
msgstr "Add text"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
|
||||
msgid "Add text to the field"
|
||||
msgstr "Add text to the field"
|
||||
|
||||
@ -110,7 +110,7 @@ msgstr "Admin"
|
||||
msgid "Advanced Options"
|
||||
msgstr "Advanced Options"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:527
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:570
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:402
|
||||
msgid "Advanced settings"
|
||||
msgstr "Advanced settings"
|
||||
@ -135,15 +135,15 @@ msgstr "Approver"
|
||||
msgid "Approving"
|
||||
msgstr "Approving"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:276
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:377
|
||||
msgid "Black"
|
||||
msgstr "Black"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:290
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:391
|
||||
msgid "Blue"
|
||||
msgstr "Blue"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
@ -152,10 +152,6 @@ msgstr "Cancel"
|
||||
msgid "Cannot remove signer"
|
||||
msgstr "Cannot remove signer"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:221
|
||||
#~ msgid "Cannot update signer because they have already signed a field"
|
||||
#~ msgstr "Cannot update signer because they have already signed a field"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:17
|
||||
msgid "Cc"
|
||||
msgstr "Cc"
|
||||
@ -169,16 +165,16 @@ msgstr "CC"
|
||||
msgid "CC'd"
|
||||
msgstr "CC'd"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
|
||||
msgid "Character Limit"
|
||||
msgstr "Character Limit"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:950
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
|
||||
msgid "Checkbox"
|
||||
msgstr "Checkbox"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
|
||||
msgid "Checkbox values"
|
||||
msgstr "Checkbox values"
|
||||
|
||||
@ -186,7 +182,7 @@ msgstr "Checkbox values"
|
||||
msgid "Clear filters"
|
||||
msgstr "Clear filters"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:310
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:411
|
||||
msgid "Clear Signature"
|
||||
msgstr "Clear Signature"
|
||||
|
||||
@ -202,7 +198,7 @@ msgstr "Close"
|
||||
msgid "Configure Direct Recipient"
|
||||
msgstr "Configure Direct Recipient"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:528
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:571
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:403
|
||||
msgid "Configure the {0} field"
|
||||
msgstr "Configure the {0} field"
|
||||
@ -219,7 +215,7 @@ msgstr "Copied to clipboard"
|
||||
msgid "Custom Text"
|
||||
msgstr "Custom Text"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:846
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:922
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
@ -251,16 +247,16 @@ msgstr "Download"
|
||||
msgid "Drag & drop your PDF here."
|
||||
msgstr "Drag & drop your PDF here."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:976
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
|
||||
msgid "Dropdown"
|
||||
msgstr "Dropdown"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
|
||||
msgid "Dropdown options"
|
||||
msgstr "Dropdown options"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:794
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:870
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:272
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:500
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:632
|
||||
@ -273,6 +269,10 @@ msgstr "Email"
|
||||
msgid "Email Options"
|
||||
msgstr "Email Options"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
|
||||
msgid "Empty field"
|
||||
msgstr "Empty field"
|
||||
|
||||
#: packages/lib/constants/template.ts:8
|
||||
msgid "Enable Direct Link Signing"
|
||||
msgstr "Enable Direct Link Signing"
|
||||
@ -282,11 +282,15 @@ msgstr "Enable Direct Link Signing"
|
||||
msgid "Enable signing order"
|
||||
msgstr "Enable signing order"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:790
|
||||
msgid "Enable Typed Signatures"
|
||||
msgstr "Enable Typed Signatures"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:84
|
||||
msgid "Enter password"
|
||||
msgstr "Enter password"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
@ -295,26 +299,44 @@ msgstr "Error"
|
||||
msgid "External ID"
|
||||
msgstr "External ID"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
|
||||
msgid "Failed to save settings."
|
||||
msgstr "Failed to save settings."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
|
||||
msgid "Field character limit"
|
||||
msgstr "Field character limit"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
|
||||
msgid "Field font size"
|
||||
msgstr "Field font size"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
|
||||
msgid "Field format"
|
||||
msgstr "Field format"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
|
||||
msgid "Field label"
|
||||
msgstr "Field label"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
|
||||
msgid "Field placeholder"
|
||||
msgstr "Field placeholder"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
|
||||
msgid "Font Size"
|
||||
msgstr "Font Size"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
|
||||
msgid "Global recipient action authentication"
|
||||
msgstr "Global recipient action authentication"
|
||||
@ -323,7 +345,7 @@ msgstr "Global recipient action authentication"
|
||||
msgid "Go Back"
|
||||
msgstr "Go Back"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:297
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:398
|
||||
msgid "Green"
|
||||
msgstr "Green"
|
||||
|
||||
@ -343,18 +365,14 @@ msgstr "I am an approver of this document"
|
||||
msgid "I am required to receive a copy of this document"
|
||||
msgstr "I am required to receive a copy of this document"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:74
|
||||
#~ msgid "I am required to recieve a copy of this document"
|
||||
#~ msgstr "I am required to recieve a copy of this document"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
|
||||
msgid "Inherit authentication method"
|
||||
msgstr "Inherit authentication method"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
|
||||
msgid "Label"
|
||||
msgstr "Label"
|
||||
|
||||
@ -362,7 +380,7 @@ msgstr "Label"
|
||||
msgid "Manager"
|
||||
msgstr "Manager"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
|
||||
msgid "Max"
|
||||
msgstr "Max"
|
||||
|
||||
@ -375,11 +393,11 @@ msgstr "Member"
|
||||
msgid "Message <0>(Optional)</0>"
|
||||
msgstr "Message <0>(Optional)</0>"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
|
||||
msgid "Min"
|
||||
msgstr "Min"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:820
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:896
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:298
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:535
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:541
|
||||
@ -401,12 +419,12 @@ msgstr "Needs to sign"
|
||||
msgid "Needs to view"
|
||||
msgstr "Needs to view"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:631
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:680
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:497
|
||||
msgid "No recipient matching this description was found."
|
||||
msgstr "No recipient matching this description was found."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:647
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:696
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:513
|
||||
msgid "No recipients with this role"
|
||||
msgstr "No recipients with this role"
|
||||
@ -431,12 +449,12 @@ msgstr "No signature field found"
|
||||
msgid "No value found."
|
||||
msgstr "No value found."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:898
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:974
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
|
||||
msgid "Number"
|
||||
msgstr "Number"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
|
||||
msgid "Number format"
|
||||
msgstr "Number format"
|
||||
|
||||
@ -456,17 +474,17 @@ msgstr "Page {0} of {1}"
|
||||
msgid "Password Required"
|
||||
msgstr "Password Required"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
|
||||
msgid "Pick a number"
|
||||
msgstr "Pick a number"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
|
||||
msgid "Placeholder"
|
||||
msgstr "Placeholder"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:924
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
|
||||
msgid "Radio"
|
||||
msgstr "Radio"
|
||||
@ -475,11 +493,11 @@ msgstr "Radio"
|
||||
msgid "Radio values"
|
||||
msgstr "Radio values"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
|
||||
msgid "Read only"
|
||||
msgstr "Read only"
|
||||
|
||||
@ -493,7 +511,7 @@ msgstr "Receives copy"
|
||||
msgid "Recipient action authentication"
|
||||
msgstr "Recipient action authentication"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:283
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:384
|
||||
msgid "Red"
|
||||
msgstr "Red"
|
||||
|
||||
@ -502,15 +520,15 @@ msgstr "Red"
|
||||
msgid "Redirect URL"
|
||||
msgstr "Redirect URL"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1027
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
|
||||
msgid "Required field"
|
||||
msgstr "Required field"
|
||||
|
||||
@ -518,7 +536,7 @@ msgstr "Required field"
|
||||
msgid "Rows per page"
|
||||
msgstr "Rows per page"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
|
||||
@ -530,7 +548,7 @@ msgstr "Save Template"
|
||||
msgid "Search languages..."
|
||||
msgstr "Search languages..."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
|
||||
msgid "Select"
|
||||
msgstr "Select"
|
||||
|
||||
@ -538,11 +556,11 @@ msgstr "Select"
|
||||
msgid "Select an option"
|
||||
msgstr "Select an option"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
|
||||
msgid "Select at least"
|
||||
msgstr "Select at least"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
msgid "Select default option"
|
||||
msgstr "Select default option"
|
||||
|
||||
@ -573,7 +591,7 @@ msgstr "Show advanced settings"
|
||||
msgid "Sign"
|
||||
msgstr "Sign"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:742
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:818
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:323
|
||||
#: packages/ui/primitives/document-flow/field-icon.tsx:52
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:580
|
||||
@ -621,7 +639,7 @@ msgstr "Submit"
|
||||
msgid "Template title"
|
||||
msgstr "Template title"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:872
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:948
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
|
||||
msgid "Text"
|
||||
msgstr "Text"
|
||||
@ -682,7 +700,7 @@ msgstr "The signer's name"
|
||||
msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step."
|
||||
msgstr "This can be overriden by setting the authentication requirements directly on each recipient in the next step."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:703
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:752
|
||||
msgid "This document has already been sent to this recipient. You can no longer edit this recipient."
|
||||
msgstr "This document has already been sent to this recipient. You can no longer edit this recipient."
|
||||
|
||||
@ -694,14 +712,10 @@ msgstr "This document is password protected. Please enter the password to view t
|
||||
msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them."
|
||||
msgstr "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1007
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1084
|
||||
msgid "This recipient can no longer be modified as they have signed a field, or completed the document."
|
||||
msgstr "This recipient can no longer be modified as they have signed a field, or completed the document."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:165
|
||||
#~ msgid "This signer has already received the document."
|
||||
#~ msgstr "This signer has already received the document."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:194
|
||||
msgid "This signer has already signed the document."
|
||||
msgstr "This signer has already signed the document."
|
||||
@ -719,7 +733,7 @@ msgstr "Time Zone"
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:990
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1067
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:828
|
||||
msgid "To proceed further, please set at least one value for the {0} field."
|
||||
msgstr "To proceed further, please set at least one value for the {0} field."
|
||||
@ -740,13 +754,13 @@ msgstr "Upgrade"
|
||||
msgid "Upload Template Document"
|
||||
msgstr "Upload Template Document"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
|
||||
msgid "Validation"
|
||||
msgstr "Validation"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
|
||||
msgid "Value"
|
||||
msgstr "Value"
|
||||
|
||||
@ -766,10 +780,6 @@ msgstr "Viewer"
|
||||
msgid "Viewing"
|
||||
msgstr "Viewing"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:280
|
||||
#~ msgid "White"
|
||||
#~ msgstr "White"
|
||||
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44
|
||||
msgid "You are about to send this document to the recipients. Are you sure you want to continue?"
|
||||
msgstr "You are about to send this document to the recipients. Are you sure you want to continue?"
|
||||
|
||||
@ -155,10 +155,6 @@ msgstr "Documentation"
|
||||
msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application."
|
||||
msgstr "Easily embed Documenso into your product. Simply copy and paste our react widget into your application."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42
|
||||
#~ msgid "Easy Sharing (Soon)."
|
||||
#~ msgstr "Easy Sharing (Soon)."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46
|
||||
msgid "Easy Sharing."
|
||||
msgstr "Easy Sharing."
|
||||
@ -218,6 +214,7 @@ msgstr "From the blog"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:9
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:17
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:33
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:41
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:49
|
||||
@ -371,18 +368,10 @@ msgstr "Our custom templates come with smart rules that can help you save time a
|
||||
msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features."
|
||||
msgstr "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:20
|
||||
#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:65
|
||||
msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership."
|
||||
msgstr "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
msgid "Part-Time"
|
||||
msgstr "Part-Time"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
|
||||
msgid "Premium Profile Name"
|
||||
msgstr "Premium Profile Name"
|
||||
@ -424,10 +413,6 @@ msgstr "Salary"
|
||||
msgid "Save $60 or $120"
|
||||
msgstr "Save $60 or $120"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47
|
||||
#~ msgid "Search languages..."
|
||||
#~ msgstr "Search languages..."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:109
|
||||
msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us."
|
||||
msgstr "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us."
|
||||
@ -609,6 +594,6 @@ msgstr "Yes! Documenso is offered under the GNU AGPL V3 open source license. Thi
|
||||
msgid "You can self-host Documenso for free or use our ready-to-use hosted version. The hosted version comes with additional support, painless scalability and more. Early adopters will get access to all features we build this year, for no additional cost! Forever! Yes, that includes multiple users per account later. If you want Documenso for your enterprise, we are happy to talk about your needs."
|
||||
msgstr "You can self-host Documenso for free or use our ready-to-use hosted version. The hosted version comes with additional support, painless scalability and more. Early adopters will get access to all features we build this year, for no additional cost! Forever! Yes, that includes multiple users per account later. If you want Documenso for your enterprise, we are happy to talk about your needs."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:265
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:272
|
||||
msgid "Your browser does not support the video tag."
|
||||
msgstr "Your browser does not support the video tag."
|
||||
|
||||
@ -132,7 +132,7 @@ msgstr "404 Template not found"
|
||||
msgid "A confirmation email has been sent, and it should arrive in your inbox shortly."
|
||||
msgstr "A confirmation email has been sent, and it should arrive in your inbox shortly."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201
|
||||
msgid "A draft document will be created"
|
||||
msgstr "A draft document will be created"
|
||||
|
||||
@ -215,7 +215,7 @@ msgstr "Active Subscriptions"
|
||||
msgid "Add"
|
||||
msgstr "Add"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:157
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87
|
||||
msgid "Add all relevant fields for each recipient."
|
||||
msgstr "Add all relevant fields for each recipient."
|
||||
@ -236,7 +236,7 @@ msgstr "Add an authenticator to serve as a secondary authentication method when
|
||||
msgid "Add email"
|
||||
msgstr "Add email"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:156
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86
|
||||
msgid "Add Fields"
|
||||
msgstr "Add Fields"
|
||||
@ -245,10 +245,6 @@ msgstr "Add Fields"
|
||||
msgid "Add more"
|
||||
msgstr "Add more"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270
|
||||
#~ msgid "Add number"
|
||||
#~ msgstr "Add number"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154
|
||||
msgid "Add passkey"
|
||||
@ -258,11 +254,11 @@ msgstr "Add passkey"
|
||||
msgid "Add Placeholders"
|
||||
msgstr "Add Placeholders"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:151
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169
|
||||
msgid "Add Signers"
|
||||
msgstr "Add Signers"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:161
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179
|
||||
msgid "Add Subject"
|
||||
msgstr "Add Subject"
|
||||
|
||||
@ -270,23 +266,15 @@ msgstr "Add Subject"
|
||||
msgid "Add team email"
|
||||
msgstr "Add team email"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256
|
||||
#~ msgid "Add text"
|
||||
#~ msgstr "Add text"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272
|
||||
#~ msgid "Add Text"
|
||||
#~ msgstr "Add Text"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170
|
||||
msgid "Add the people who will sign the document."
|
||||
msgstr "Add the people who will sign the document."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203
|
||||
msgid "Add the recipients to create the document with"
|
||||
msgstr "Add the recipients to create the document with"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:162
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180
|
||||
msgid "Add the subject and message you wish to send to signers."
|
||||
msgstr "Add the subject and message you wish to send to signers."
|
||||
|
||||
@ -365,17 +353,17 @@ msgstr "An email requesting the transfer of this team has been sent."
|
||||
msgid "An error occurred"
|
||||
msgstr "An error occurred"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231
|
||||
msgid "An error occurred while adding signers."
|
||||
msgstr "An error occurred while adding signers."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:278
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301
|
||||
msgid "An error occurred while adding the fields."
|
||||
msgstr "An error occurred while adding the fields."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161
|
||||
msgid "An error occurred while creating document from template."
|
||||
msgstr "An error occurred while creating document from template."
|
||||
|
||||
@ -421,7 +409,7 @@ msgstr "An error occurred while moving the template."
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:129
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:173
|
||||
msgid "An error occurred while removing the signature."
|
||||
msgstr "An error occurred while removing the signature."
|
||||
|
||||
@ -429,7 +417,7 @@ msgstr "An error occurred while removing the signature."
|
||||
msgid "An error occurred while removing the text."
|
||||
msgstr "An error occurred while removing the text."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:309
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332
|
||||
msgid "An error occurred while sending the document."
|
||||
msgstr "An error occurred while sending the document."
|
||||
|
||||
@ -444,7 +432,7 @@ msgstr "An error occurred while sending your confirmation email"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:149
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:147
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:168
|
||||
msgid "An error occurred while signing the document."
|
||||
msgstr "An error occurred while signing the document."
|
||||
@ -453,7 +441,7 @@ msgstr "An error occurred while signing the document."
|
||||
msgid "An error occurred while trying to create a checkout session."
|
||||
msgstr "An error occurred while trying to create a checkout session."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:214
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166
|
||||
msgid "An error occurred while updating the document settings."
|
||||
msgstr "An error occurred while updating the document settings."
|
||||
@ -556,7 +544,7 @@ msgstr "Are you sure you wish to delete this team?"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98
|
||||
#: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116
|
||||
@ -655,16 +643,16 @@ msgstr "By enabling 2FA, you will be required to enter a code from your authenti
|
||||
#: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:250
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:176
|
||||
@ -747,14 +735,14 @@ msgid "Click to copy signing link for sending to recipient"
|
||||
msgstr "Click to copy signing link for sending to recipient"
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:114
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:115
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:439
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:318
|
||||
msgid "Click to insert field"
|
||||
msgstr "Click to insert field"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
@ -766,8 +754,8 @@ msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:429
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:308
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:534
|
||||
msgid "Complete"
|
||||
msgstr "Complete"
|
||||
@ -784,7 +772,7 @@ msgstr "Complete Signing"
|
||||
msgid "Complete Viewing"
|
||||
msgstr "Complete Viewing"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:58
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
|
||||
#: apps/web/src/components/formatter/document-status.tsx:28
|
||||
msgid "Completed"
|
||||
msgstr "Completed"
|
||||
@ -797,7 +785,7 @@ msgstr "Completed documents"
|
||||
msgid "Completed Documents"
|
||||
msgstr "Completed Documents"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:147
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165
|
||||
msgid "Configure general settings for the document."
|
||||
msgstr "Configure general settings for the document."
|
||||
|
||||
@ -809,7 +797,7 @@ msgstr "Configure general settings for the template."
|
||||
msgid "Configure template"
|
||||
msgstr "Configure template"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:460
|
||||
msgid "Confirm"
|
||||
msgstr "Confirm"
|
||||
@ -895,11 +883,11 @@ msgstr "Create a team to collaborate with your team members."
|
||||
msgid "Create account"
|
||||
msgstr "Create account"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345
|
||||
msgid "Create and send"
|
||||
msgstr "Create and send"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347
|
||||
msgid "Create as draft"
|
||||
msgstr "Create as draft"
|
||||
|
||||
@ -911,7 +899,7 @@ msgstr "Create Direct Link"
|
||||
msgid "Create Direct Signing Link"
|
||||
msgstr "Create Direct Signing Link"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197
|
||||
msgid "Create document from template"
|
||||
msgstr "Create document from template"
|
||||
|
||||
@ -983,11 +971,6 @@ msgstr "Created on"
|
||||
msgid "Created on {0}"
|
||||
msgstr "Created on {0}"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94
|
||||
#~ msgid "Created on <0/>"
|
||||
#~ msgstr "Created on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100
|
||||
msgid "Created on{0}"
|
||||
msgstr "Created on{0}"
|
||||
@ -1102,10 +1085,6 @@ msgstr "Deleted"
|
||||
msgid "Deleting account..."
|
||||
msgstr "Deleting account..."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135
|
||||
#~ msgid "Deleting document"
|
||||
#~ msgstr "Deleting document"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75
|
||||
msgid "Device"
|
||||
msgstr "Device"
|
||||
@ -1210,7 +1189,7 @@ msgstr "Document completed"
|
||||
msgid "Document Completed!"
|
||||
msgstr "Document Completed!"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150
|
||||
msgid "Document created"
|
||||
msgstr "Document created"
|
||||
|
||||
@ -1241,7 +1220,7 @@ msgstr "Document ID"
|
||||
msgid "Document inbox"
|
||||
msgstr "Document inbox"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179
|
||||
msgid "Document Limit Exceeded!"
|
||||
msgstr "Document Limit Exceeded!"
|
||||
|
||||
@ -1269,7 +1248,7 @@ msgstr "Document re-sent"
|
||||
msgid "Document resealed"
|
||||
msgstr "Document resealed"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:298
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321
|
||||
msgid "Document sent"
|
||||
msgstr "Document sent"
|
||||
|
||||
@ -1311,7 +1290,7 @@ msgstr "Document will be permanently deleted"
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx:109
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/loading.tsx:16
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx:15
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:119
|
||||
#: apps/web/src/app/(profile)/p/[url]/page.tsx:166
|
||||
#: apps/web/src/app/not-found.tsx:21
|
||||
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:205
|
||||
@ -1397,8 +1376,8 @@ msgstr "Edit webhook"
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255
|
||||
#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118
|
||||
#: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376
|
||||
@ -1486,10 +1465,10 @@ msgstr "Enter your text here"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:247
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:277
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:308
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331
|
||||
#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112
|
||||
@ -1498,7 +1477,7 @@ msgstr "Enter your text here"
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212
|
||||
@ -1514,8 +1493,8 @@ msgstr "Enter your text here"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:194
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:101
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:128
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:174
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:146
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:172
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:167
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:195
|
||||
#: apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx:54
|
||||
@ -1539,20 +1518,10 @@ msgstr "Exceeded timeout"
|
||||
msgid "Expired"
|
||||
msgstr "Expired"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106
|
||||
#~ msgid "Expires on"
|
||||
#~ msgstr "Expires on"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71
|
||||
msgid "Expires on {0}"
|
||||
msgstr "Expires on {0}"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108
|
||||
#~ msgid "Expires on <0/>"
|
||||
#~ msgstr "Expires on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107
|
||||
msgid "Expires on{0}"
|
||||
msgstr "Expires on{0}"
|
||||
@ -1592,7 +1561,7 @@ msgstr "Forgot your password?"
|
||||
msgid "Full Name"
|
||||
msgstr "Full Name"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76
|
||||
#: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60
|
||||
#: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43
|
||||
@ -1654,10 +1623,6 @@ msgstr "Hide"
|
||||
msgid "Hide additional information"
|
||||
msgstr "Hide additional information"
|
||||
|
||||
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40
|
||||
#~ msgid "I am the owner of this document"
|
||||
#~ msgstr "I am the owner of this document"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173
|
||||
msgid "I'm sure! Delete it"
|
||||
@ -2001,8 +1966,8 @@ msgstr "My templates"
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:61
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277
|
||||
#: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170
|
||||
#: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153
|
||||
@ -2032,8 +1997,8 @@ msgstr "New team owner"
|
||||
msgid "New Template"
|
||||
msgstr "New Template"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:420
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:299
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:521
|
||||
msgid "Next"
|
||||
msgstr "Next"
|
||||
@ -2138,7 +2103,7 @@ msgstr "Once you have scanned the QR code or entered the code manually, enter th
|
||||
msgid "Oops! Something went wrong."
|
||||
msgstr "Oops! Something went wrong."
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:97
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
|
||||
msgid "Opened"
|
||||
msgstr "Opened"
|
||||
|
||||
@ -2153,7 +2118,7 @@ msgstr "Or"
|
||||
msgid "Or continue with"
|
||||
msgstr "Or continue with"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324
|
||||
msgid "Otherwise, the document will be created as a draft."
|
||||
msgstr "Otherwise, the document will be created as a draft."
|
||||
|
||||
@ -2289,11 +2254,11 @@ msgstr "Please contact support if you would like to revert this action."
|
||||
msgid "Please enter a meaningful name for your token. This will help you identify it later."
|
||||
msgstr "Please enter a meaningful name for your token. This will help you identify it later."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:134
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:135
|
||||
msgid "Please mark as viewed to complete"
|
||||
msgstr "Please mark as viewed to complete"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459
|
||||
msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder."
|
||||
msgstr "Please note that proceeding will remove direct linking recipient and turn it into a placeholder."
|
||||
|
||||
@ -2584,7 +2549,7 @@ msgstr "Role"
|
||||
msgid "Roles"
|
||||
msgstr "Roles"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342
|
||||
msgid "Save"
|
||||
@ -2653,7 +2618,7 @@ msgstr "Select passkey"
|
||||
msgid "Send confirmation email"
|
||||
msgstr "Send confirmation email"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308
|
||||
msgid "Send document"
|
||||
msgstr "Send document"
|
||||
|
||||
@ -2725,20 +2690,16 @@ msgstr "Show templates in your team public profile for your audience to sign and
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:182
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:224
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:124
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:259
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:256
|
||||
#: apps/web/src/components/ui/user-profile-skeleton.tsx:75
|
||||
#: apps/web/src/components/ui/user-profile-timur.tsx:81
|
||||
msgid "Sign"
|
||||
msgstr "Sign"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:217
|
||||
msgid "Sign as {0} <0>({1})</0>"
|
||||
msgstr "Sign as {0} <0>({1})</0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#~ msgid "Sign as <0>{0} <1>({1})</1></0>"
|
||||
#~ msgstr "Sign as <0>{0} <1>({1})</1></0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183
|
||||
msgid "Sign as<0>{0} <1>({1})</1></0>"
|
||||
msgstr "Sign as<0>{0} <1>({1})</1></0>"
|
||||
@ -2797,8 +2758,8 @@ msgstr "Sign Up with OIDC"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:197
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:227
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270
|
||||
#: apps/web/src/components/forms/profile.tsx:132
|
||||
@ -3171,7 +3132,7 @@ msgstr "The document has been successfully moved to the selected team."
|
||||
msgid "The document is now completed, please follow any instructions provided within the parent application."
|
||||
msgstr "The document is now completed, please follow any instructions provided within the parent application."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167
|
||||
msgid "The document was created but could not be sent to recipients."
|
||||
msgstr "The document was created but could not be sent to recipients."
|
||||
|
||||
@ -3179,7 +3140,7 @@ msgstr "The document was created but could not be sent to recipients."
|
||||
msgid "The document will be hidden from your account"
|
||||
msgstr "The document will be hidden from your account"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316
|
||||
msgid "The document will be immediately sent to recipients if this is checked."
|
||||
msgstr "The document will be immediately sent to recipients if this is checked."
|
||||
|
||||
@ -3631,7 +3592,7 @@ msgstr "Unable to sign in"
|
||||
msgid "Unauthorized"
|
||||
msgstr "Unauthorized"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:112
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
|
||||
msgid "Uncompleted"
|
||||
msgstr "Uncompleted"
|
||||
|
||||
@ -3737,7 +3698,7 @@ msgstr "Use Authenticator"
|
||||
msgid "Use Backup Code"
|
||||
msgstr "Use Backup Code"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191
|
||||
msgid "Use Template"
|
||||
msgstr "Use Template"
|
||||
|
||||
@ -3843,7 +3804,7 @@ msgstr "View teams"
|
||||
msgid "Viewed"
|
||||
msgstr "Viewed"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:82
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
|
||||
msgid "Waiting"
|
||||
msgstr "Waiting"
|
||||
|
||||
@ -4171,10 +4132,6 @@ msgstr "You are about to revoke access for team <0>{0}</0> ({1}) to use your ema
|
||||
msgid "You are currently on the <0>Free Plan</0>."
|
||||
msgstr "You are currently on the <0>Free Plan</0>."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92
|
||||
#~ msgid "You are currently subscribed to <0>{0}</0>"
|
||||
#~ msgstr "You are currently subscribed to <0>{0}</0>"
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148
|
||||
msgid "You are currently updating <0>{teamMemberName}.</0>"
|
||||
msgstr "You are currently updating <0>{teamMemberName}.</0>"
|
||||
@ -4219,10 +4176,6 @@ msgstr "You cannot modify a team member who has a higher role than you."
|
||||
msgid "You cannot upload encrypted PDFs"
|
||||
msgstr "You cannot upload encrypted PDFs"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97
|
||||
#~ msgid "You currently have an active plan"
|
||||
#~ msgstr "You currently have an active plan"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45
|
||||
msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance."
|
||||
msgstr "You do not currently have a customer record, this should not happen. Please contact support for assistance."
|
||||
@ -4269,7 +4222,7 @@ msgstr "You have reached the maximum limit of {0} direct templates. <0>Upgrade y
|
||||
msgid "You have reached your document limit."
|
||||
msgstr "You have reached your document limit."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182
|
||||
msgid "You have reached your document limit. <0>Upgrade your account to continue!</0>"
|
||||
msgstr "You have reached your document limit. <0>Upgrade your account to continue!</0>"
|
||||
|
||||
@ -4303,10 +4256,6 @@ msgstr "You have verified your email address for <0>{0}</0>."
|
||||
msgid "You must be an admin of this team to manage billing."
|
||||
msgstr "You must be an admin of this team to manage billing."
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80
|
||||
#~ msgid "You must enter '{confirmTransferMessage}' to proceed"
|
||||
#~ msgstr "You must enter '{confirmTransferMessage}' to proceed"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54
|
||||
@ -4369,7 +4318,7 @@ msgstr "Your direct signing templates"
|
||||
msgid "Your document failed to upload."
|
||||
msgstr "Your document failed to upload."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151
|
||||
msgid "Your document has been created from the template successfully."
|
||||
msgstr "Your document has been created from the template successfully."
|
||||
|
||||
@ -4377,7 +4326,7 @@ msgstr "Your document has been created from the template successfully."
|
||||
msgid "Your document has been re-sent successfully."
|
||||
msgstr "Your document has been re-sent successfully."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:299
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322
|
||||
msgid "Your document has been sent successfully."
|
||||
msgstr "Your document has been sent successfully."
|
||||
|
||||
|
||||
802
packages/lib/translations/es/common.po
Normal file
@ -0,0 +1,802 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-07-24 13:01+1000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-10-22 02:25\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: documenso-app\n"
|
||||
"X-Crowdin-Project-ID: 694691\n"
|
||||
"X-Crowdin-Language: es-ES\n"
|
||||
"X-Crowdin-File: common.po\n"
|
||||
"X-Crowdin-File-ID: 4\n"
|
||||
|
||||
#: packages/ui/primitives/data-table-pagination.tsx:30
|
||||
msgid "{0} of {1} row(s) selected."
|
||||
msgstr "{0} de {1} fila(s) seleccionada."
|
||||
|
||||
#: packages/ui/primitives/data-table-pagination.tsx:41
|
||||
msgid "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}"
|
||||
msgstr "{visibleRows, plural, one {Mostrando # resultado.} other {Mostrando # resultados.}}"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:53
|
||||
msgid "<0>Inherit authentication method</0> - Use the global action signing authentication method configured in the \"General Settings\" step"
|
||||
msgstr "<0>Heredar método de autenticación</0> - Use el método de autenticación de firma de acción global configurado en el paso \"Configuración General\""
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:95
|
||||
msgid "<0>No restrictions</0> - No authentication required"
|
||||
msgstr "<0>Sin restricciones</0> - No se requiere autenticación"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:77
|
||||
msgid "<0>No restrictions</0> - The document can be accessed directly by the URL sent to the recipient"
|
||||
msgstr "<0>Sin restricciones</0> - El documento se puede acceder directamente a través de la URL enviada al destinatario"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:75
|
||||
msgid "<0>None</0> - No authentication required"
|
||||
msgstr "<0>Ninguno</0> - No se requiere autenticación"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:89
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:69
|
||||
msgid "<0>Require 2FA</0> - The recipient must have an account and 2FA enabled via their settings"
|
||||
msgstr "<0>Requerir 2FA</0> - El destinatario debe tener una cuenta y 2FA habilitado a través de sus configuraciones"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:72
|
||||
msgid "<0>Require account</0> - The recipient must be signed in to view the document"
|
||||
msgstr "<0>Requerir cuenta</0> - El destinatario debe haber iniciado sesión para ver el documento"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:83
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:63
|
||||
msgid "<0>Require passkey</0> - The recipient must have an account and passkey configured via their settings"
|
||||
msgstr "<0>Requerir clave de acceso</0> - El destinatario debe tener una cuenta y clave de acceso configurada a través de sus configuraciones"
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:69
|
||||
msgid "Add a document"
|
||||
msgstr "Agregar un documento"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:336
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:339
|
||||
msgid "Add a URL to redirect the user to once the document is signed"
|
||||
msgstr "Agregue una URL para redirigir al usuario una vez que se firme el documento"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:248
|
||||
msgid "Add an external ID to the document. This can be used to identify the document in external systems."
|
||||
msgstr "Agregue un ID externo al documento. Esto se puede usar para identificar el documento en sistemas externos."
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:256
|
||||
msgid "Add an external ID to the template. This can be used to identify in external systems."
|
||||
msgstr "Agregue un ID externo a la plantilla. Esto se puede usar para identificar en sistemas externos."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
|
||||
msgid "Add another option"
|
||||
msgstr "Agregar otra opción"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
|
||||
msgid "Add another value"
|
||||
msgstr "Agregar otro valor"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:662
|
||||
msgid "Add myself"
|
||||
msgstr "Agregame"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:637
|
||||
msgid "Add Myself"
|
||||
msgstr "Agregame"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:623
|
||||
msgid "Add Placeholder Recipient"
|
||||
msgstr "Agregar destinatario de marcador de posición"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:651
|
||||
msgid "Add Signer"
|
||||
msgstr "Agregar firmante"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
|
||||
msgid "Add text"
|
||||
msgstr "Agregar texto"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
|
||||
msgid "Add text to the field"
|
||||
msgstr "Agregar texto al campo"
|
||||
|
||||
#: packages/lib/constants/teams.ts:10
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:230
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:238
|
||||
msgid "Advanced Options"
|
||||
msgstr "Opciones avanzadas"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:570
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:402
|
||||
msgid "Advanced settings"
|
||||
msgstr "Configuraciones avanzadas"
|
||||
|
||||
#: packages/lib/constants/template.ts:21
|
||||
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
|
||||
msgstr "Después de la presentación, se generará automáticamente un documento y se agregará a su página de documentos. También recibirá una notificación por correo electrónico."
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:8
|
||||
msgid "Approve"
|
||||
msgstr "Aprobar"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:9
|
||||
msgid "Approved"
|
||||
msgstr "Aprobado"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:11
|
||||
msgid "Approver"
|
||||
msgstr "Aprobador"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:10
|
||||
msgid "Approving"
|
||||
msgstr "Aprobando"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:377
|
||||
msgid "Black"
|
||||
msgstr "Negro"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:391
|
||||
msgid "Blue"
|
||||
msgstr "Azul"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:193
|
||||
msgid "Cannot remove signer"
|
||||
msgstr "No se puede eliminar el firmante"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:17
|
||||
msgid "Cc"
|
||||
msgstr "Cc"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:14
|
||||
#: packages/lib/constants/recipient-roles.ts:16
|
||||
msgid "CC"
|
||||
msgstr "CC"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:15
|
||||
msgid "CC'd"
|
||||
msgstr "CC'd"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
|
||||
msgid "Character Limit"
|
||||
msgstr "Límite de caracteres"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
|
||||
msgid "Checkbox"
|
||||
msgstr "Caja de verificación"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
|
||||
msgid "Checkbox values"
|
||||
msgstr "Valores de Checkbox"
|
||||
|
||||
#: packages/ui/primitives/data-table.tsx:156
|
||||
msgid "Clear filters"
|
||||
msgstr "Limpiar filtros"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:411
|
||||
msgid "Clear Signature"
|
||||
msgstr "Limpiar firma"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:394
|
||||
msgid "Click to insert field"
|
||||
msgstr "Haga clic para insertar campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:44
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: packages/lib/constants/template.ts:12
|
||||
msgid "Configure Direct Recipient"
|
||||
msgstr "Configurar destinatario directo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:571
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:403
|
||||
msgid "Configure the {0} field"
|
||||
msgstr "Configurar el campo {0}"
|
||||
|
||||
#: packages/ui/primitives/document-flow/document-flow-root.tsx:141
|
||||
msgid "Continue"
|
||||
msgstr "Continuar"
|
||||
|
||||
#: packages/ui/components/document/document-share-button.tsx:46
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copiado al portapapeles"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:360
|
||||
msgid "Custom Text"
|
||||
msgstr "Texto personalizado"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:922
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
|
||||
msgid "Date"
|
||||
msgstr "Fecha"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:271
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:279
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de fecha"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:570
|
||||
msgid "Direct link receiver"
|
||||
msgstr "Receptor de enlace directo"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:174
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:151
|
||||
msgid "Document access"
|
||||
msgstr "Acceso al documento"
|
||||
|
||||
#: packages/lib/constants/template.ts:20
|
||||
msgid "Document Creation"
|
||||
msgstr "Creación de documento"
|
||||
|
||||
#: packages/ui/components/document/document-download-button.tsx:68
|
||||
msgid "Download"
|
||||
msgstr "Descargar"
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:162
|
||||
msgid "Drag & drop your PDF here."
|
||||
msgstr "Arrastre y suelte su PDF aquí."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
|
||||
msgid "Dropdown"
|
||||
msgstr "Menú desplegable"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
|
||||
msgid "Dropdown options"
|
||||
msgstr "Opciones de menú desplegable"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:870
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:272
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:500
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:632
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:470
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:184
|
||||
msgid "Email Options"
|
||||
msgstr "Opciones de correo electrónico"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
|
||||
msgid "Empty field"
|
||||
msgstr "Campo vacío"
|
||||
|
||||
#: packages/lib/constants/template.ts:8
|
||||
msgid "Enable Direct Link Signing"
|
||||
msgstr "Habilitar firma de enlace directo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:401
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:362
|
||||
msgid "Enable signing order"
|
||||
msgstr "Habilitar orden de firma"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:790
|
||||
msgid "Enable Typed Signatures"
|
||||
msgstr "Habilitar firmas escritas"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:84
|
||||
msgid "Enter password"
|
||||
msgstr "Ingrese la contraseña"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:241
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:249
|
||||
msgid "External ID"
|
||||
msgstr "ID externo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
|
||||
msgid "Failed to save settings."
|
||||
msgstr "Fallo al guardar configuraciones."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
|
||||
msgid "Field character limit"
|
||||
msgstr "Límite de caracteres del campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
|
||||
msgid "Field font size"
|
||||
msgstr "Tamaño de fuente del campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
|
||||
msgid "Field format"
|
||||
msgstr "Formato de campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
|
||||
msgid "Field label"
|
||||
msgstr "Etiqueta de campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
|
||||
msgid "Field placeholder"
|
||||
msgstr "Marcador de posición de campo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
|
||||
msgid "Font Size"
|
||||
msgstr "Tamaño de fuente"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
|
||||
msgid "Global recipient action authentication"
|
||||
msgstr "Autenticación de acción de destinatario global"
|
||||
|
||||
#: packages/ui/primitives/document-flow/document-flow-root.tsx:142
|
||||
msgid "Go Back"
|
||||
msgstr "Regresar"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:398
|
||||
msgid "Green"
|
||||
msgstr "Verde"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:72
|
||||
msgid "I am a signer of this document"
|
||||
msgstr "Soy un firmante de este documento"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:75
|
||||
msgid "I am a viewer of this document"
|
||||
msgstr "Soy un visualizador de este documento"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:73
|
||||
msgid "I am an approver of this document"
|
||||
msgstr "Soy un aprobador de este documento"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:74
|
||||
msgid "I am required to receive a copy of this document"
|
||||
msgstr "Se me requiere recibir una copia de este documento"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
|
||||
msgid "Inherit authentication method"
|
||||
msgstr "Heredar método de autenticación"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
|
||||
msgid "Label"
|
||||
msgstr "Etiqueta"
|
||||
|
||||
#: packages/lib/constants/teams.ts:11
|
||||
msgid "Manager"
|
||||
msgstr "Gerente"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
|
||||
msgid "Max"
|
||||
msgstr "Máx"
|
||||
|
||||
#: packages/lib/constants/teams.ts:12
|
||||
msgid "Member"
|
||||
msgstr "Miembro"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-subject.tsx:95
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:215
|
||||
msgid "Message <0>(Optional)</0>"
|
||||
msgstr "Mensaje <0>(Opcional)</0>"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
|
||||
msgid "Min"
|
||||
msgstr "Mín"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:896
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:298
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:535
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:541
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:658
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:504
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:52
|
||||
msgid "Needs to approve"
|
||||
msgstr "Necesita aprobar"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:31
|
||||
msgid "Needs to sign"
|
||||
msgstr "Necesita firmar"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:73
|
||||
msgid "Needs to view"
|
||||
msgstr "Necesita ver"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:680
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:497
|
||||
msgid "No recipient matching this description was found."
|
||||
msgstr "No se encontró ningún destinatario que coincidiera con esta descripción."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:696
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:513
|
||||
msgid "No recipients with this role"
|
||||
msgstr "No hay destinatarios con este rol"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:30
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:43
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:31
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:46
|
||||
msgid "No restrictions"
|
||||
msgstr "Sin restricciones"
|
||||
|
||||
#: packages/ui/primitives/data-table.tsx:148
|
||||
msgid "No results found"
|
||||
msgstr "No se encontraron resultados"
|
||||
|
||||
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:30
|
||||
msgid "No signature field found"
|
||||
msgstr "No se encontró campo de firma"
|
||||
|
||||
#: packages/ui/primitives/combobox.tsx:60
|
||||
#: packages/ui/primitives/multi-select-combobox.tsx:153
|
||||
msgid "No value found."
|
||||
msgstr "No se encontró valor."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:974
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
|
||||
msgid "Number"
|
||||
msgstr "Número"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
|
||||
msgid "Number format"
|
||||
msgstr "Formato de número"
|
||||
|
||||
#: packages/lib/constants/template.ts:9
|
||||
msgid "Once enabled, you can select any active recipient to be a direct link signing recipient, or create a new one. This recipient type cannot be edited or deleted."
|
||||
msgstr "Una vez habilitado, puede seleccionar cualquier destinatario activo para que sea un destinatario de firma por enlace directo, o crear uno nuevo. Este tipo de destinatario no puede ser editado ni eliminado."
|
||||
|
||||
#: packages/lib/constants/template.ts:17
|
||||
msgid "Once your template is set up, share the link anywhere you want. The person who opens the link will be able to enter their information in the direct link recipient field and complete any other fields assigned to them."
|
||||
msgstr "Una vez que su plantilla esté configurada, comparta el enlace donde desee. La persona que abra el enlace podrá ingresar su información en el campo de destinatario de enlace directo y completar cualquier otro campo que se le haya asignado."
|
||||
|
||||
#: packages/ui/primitives/data-table-pagination.tsx:77
|
||||
msgid "Page {0} of {1}"
|
||||
msgstr "Página {0} de {1}"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:62
|
||||
msgid "Password Required"
|
||||
msgstr "Se requiere contraseña"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
|
||||
msgid "Pick a number"
|
||||
msgstr "Seleccione un número"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
|
||||
msgid "Placeholder"
|
||||
msgstr "Marcador de posición"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
|
||||
msgid "Radio"
|
||||
msgstr "Radio"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:133
|
||||
msgid "Radio values"
|
||||
msgstr "Valores de radio"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
|
||||
msgid "Read only"
|
||||
msgstr "Solo lectura"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:95
|
||||
msgid "Receives copy"
|
||||
msgstr "Recibe copia"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:39
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:215
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:169
|
||||
msgid "Recipient action authentication"
|
||||
msgstr "Autenticación de acción de destinatario"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:384
|
||||
msgid "Red"
|
||||
msgstr "Rojo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:329
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:332
|
||||
msgid "Redirect URL"
|
||||
msgstr "URL de redirección"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
|
||||
msgid "Required field"
|
||||
msgstr "Campo obligatorio"
|
||||
|
||||
#: packages/ui/primitives/data-table-pagination.tsx:55
|
||||
msgid "Rows per page"
|
||||
msgstr "Filas por página"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:848
|
||||
msgid "Save Template"
|
||||
msgstr "Guardar plantilla"
|
||||
|
||||
#: packages/ui/components/common/language-switcher-dialog.tsx:34
|
||||
msgid "Search languages..."
|
||||
msgstr "Buscar idiomas..."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
|
||||
msgid "Select"
|
||||
msgstr "Seleccionar"
|
||||
|
||||
#: packages/ui/primitives/combobox.tsx:38
|
||||
msgid "Select an option"
|
||||
msgstr "Seleccionar una opción"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
|
||||
msgid "Select at least"
|
||||
msgstr "Seleccionar al menos"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
msgid "Select default option"
|
||||
msgstr "Seleccionar opción predeterminada"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-subject.tsx:124
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:34
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:64
|
||||
msgid "Send"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:41
|
||||
msgid "Send Document"
|
||||
msgstr "Enviar documento"
|
||||
|
||||
#: packages/ui/components/document/document-share-button.tsx:135
|
||||
msgid "Share Signature Card"
|
||||
msgstr "Compartir tarjeta de firma"
|
||||
|
||||
#: packages/lib/constants/template.ts:16
|
||||
msgid "Share the Link"
|
||||
msgstr "Compartir el enlace"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:680
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
|
||||
msgid "Show advanced settings"
|
||||
msgstr "Mostrar configuraciones avanzadas"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:20
|
||||
msgid "Sign"
|
||||
msgstr "Firmar"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:818
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:323
|
||||
#: packages/ui/primitives/document-flow/field-icon.tsx:52
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:580
|
||||
msgid "Signature"
|
||||
msgstr "Firma"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:21
|
||||
msgid "Signed"
|
||||
msgstr "Firmado"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:23
|
||||
msgid "Signer"
|
||||
msgstr "Firmante"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:22
|
||||
msgid "Signing"
|
||||
msgstr "Firmando"
|
||||
|
||||
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:34
|
||||
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
|
||||
msgstr "Algunos firmantes no han sido asignados a un campo de firma. Asigne al menos 1 campo de firma a cada firmante antes de continuar."
|
||||
|
||||
#: packages/ui/components/document/document-share-button.tsx:51
|
||||
msgid "Something went wrong"
|
||||
msgstr "Algo salió mal"
|
||||
|
||||
#: packages/ui/primitives/data-table.tsx:136
|
||||
msgid "Something went wrong."
|
||||
msgstr "Algo salió mal."
|
||||
|
||||
#: packages/ui/primitives/document-flow/document-flow-root.tsx:107
|
||||
msgid "Step <0>{step} of {maxStep}</0>"
|
||||
msgstr "Paso <0>{step} de {maxStep}</0>"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-subject.tsx:78
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:195
|
||||
msgid "Subject <0>(Optional)</0>"
|
||||
msgstr "Asunto <0>(Opcional)</0>"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:97
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:134
|
||||
msgid "Template title"
|
||||
msgstr "Título de plantilla"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:948
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
|
||||
msgid "Text"
|
||||
msgstr "Texto"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:44
|
||||
msgid "The authentication required for recipients to sign fields"
|
||||
msgstr "La autenticación requerida para que los destinatarios firmen campos"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:68
|
||||
msgid "The authentication required for recipients to sign the signature field."
|
||||
msgstr "La autenticación requerida para que los destinatarios firmen el campo de firma."
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-access-select.tsx:67
|
||||
msgid "The authentication required for recipients to view the document."
|
||||
msgstr "La autenticación requerida para que los destinatarios vean el documento."
|
||||
|
||||
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
|
||||
msgid "The document's name"
|
||||
msgstr "El nombre del documento"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:52
|
||||
msgid "The password you have entered is incorrect. Please try again."
|
||||
msgstr "La contraseña que ha ingresado es incorrecta. Por favor, inténtelo de nuevo."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:103
|
||||
msgid "The recipient is not required to take any action and receives a copy of the document after it is completed."
|
||||
msgstr "El destinatario no está obligado a tomar ninguna acción y recibe una copia del documento una vez completado."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:60
|
||||
msgid "The recipient is required to approve the document for it to be completed."
|
||||
msgstr "El destinatario debe aprobar el documento para que se complete."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:39
|
||||
msgid "The recipient is required to sign the document for it to be completed."
|
||||
msgstr "El destinatario debe firmar el documento para que se complete."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-role-select.tsx:81
|
||||
msgid "The recipient is required to view the document for it to be completed."
|
||||
msgstr "El destinatario debe ver el documento para que se complete."
|
||||
|
||||
#: packages/ui/components/document/document-share-button.tsx:52
|
||||
msgid "The sharing link could not be created at this time. Please try again."
|
||||
msgstr "El enlace de compartición no se pudo crear en este momento. Por favor, inténtelo de nuevo."
|
||||
|
||||
#: packages/ui/components/document/document-share-button.tsx:47
|
||||
msgid "The sharing link has been copied to your clipboard."
|
||||
msgstr "El enlace de compartición ha sido copiado a su portapapeles."
|
||||
|
||||
#: packages/ui/components/document/document-send-email-message-helper.tsx:25
|
||||
msgid "The signer's email"
|
||||
msgstr "El correo electrónico del firmante"
|
||||
|
||||
#: packages/ui/components/document/document-send-email-message-helper.tsx:19
|
||||
msgid "The signer's name"
|
||||
msgstr "El nombre del firmante"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:72
|
||||
msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step."
|
||||
msgstr "Esto se puede anular configurando los requisitos de autenticación directamente en cada destinatario en el siguiente paso."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:752
|
||||
msgid "This document has already been sent to this recipient. You can no longer edit this recipient."
|
||||
msgstr "Este documento ya ha sido enviado a este destinatario. Ya no puede editar a este destinatario."
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:66
|
||||
msgid "This document is password protected. Please enter the password to view the document."
|
||||
msgstr "Este documento está protegido por contraseña. Por favor ingrese la contraseña para ver el documento."
|
||||
|
||||
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:573
|
||||
msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them."
|
||||
msgstr "Este campo no se puede modificar ni eliminar. Cuando comparta el enlace directo de esta plantilla o lo agregue a su perfil público, cualquiera que acceda podrá ingresar su nombre y correo electrónico, y completar los campos que se le hayan asignado."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1084
|
||||
msgid "This recipient can no longer be modified as they have signed a field, or completed the document."
|
||||
msgstr "Este destinatario ya no puede ser modificado ya que ha firmado un campo o completado el documento."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:194
|
||||
msgid "This signer has already signed the document."
|
||||
msgstr "Este firmante ya ha firmado el documento."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:48
|
||||
msgid "This will override any global settings."
|
||||
msgstr "Esto anulará cualquier configuración global."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:305
|
||||
#: packages/ui/primitives/template-flow/add-template-settings.tsx:309
|
||||
msgid "Time Zone"
|
||||
msgstr "Zona horaria"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-settings.tsx:153
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1067
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:828
|
||||
msgid "To proceed further, please set at least one value for the {0} field."
|
||||
msgstr "Para continuar, por favor establezca al menos un valor para el campo {0}."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-subject.tsx:124
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: packages/lib/constants/template.ts:13
|
||||
msgid "Update the role and add fields as required for the direct recipient. The individual who uses the direct link will sign the document as the direct recipient."
|
||||
msgstr "Actualizar el rol y agregar campos según sea necesario para el destinatario directo. La persona que utilice el enlace directo firmará el documento como destinatario directo."
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:168
|
||||
msgid "Upgrade"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:70
|
||||
msgid "Upload Template Document"
|
||||
msgstr "Cargar Documento Plantilla"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
|
||||
msgid "Validation"
|
||||
msgstr "Validación"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
|
||||
msgid "Value"
|
||||
msgstr "Valor"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:26
|
||||
msgid "View"
|
||||
msgstr "Ver"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:27
|
||||
msgid "Viewed"
|
||||
msgstr "Visto"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:29
|
||||
msgid "Viewer"
|
||||
msgstr "Visor"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:28
|
||||
msgid "Viewing"
|
||||
msgstr "Viendo"
|
||||
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44
|
||||
msgid "You are about to send this document to the recipients. Are you sure you want to continue?"
|
||||
msgstr "Está a punto de enviar este documento a los destinatarios. ¿Está seguro de que desea continuar?"
|
||||
|
||||
#: packages/ui/components/document/document-send-email-message-helper.tsx:11
|
||||
msgid "You can use the following variables in your message:"
|
||||
msgstr "Puede usar las siguientes variables en su mensaje:"
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:43
|
||||
msgid "You cannot upload documents at this time."
|
||||
msgstr "No puede cargar documentos en este momento."
|
||||
|
||||
#: packages/ui/primitives/document-dropzone.tsx:69
|
||||
msgid "You have reached your document limit."
|
||||
msgstr "Ha alcanzado su límite de documentos."
|
||||
604
packages/lib/translations/es/marketing.po
Normal file
@ -0,0 +1,604 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-07-24 13:01+1000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-10-22 02:25\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: documenso-app\n"
|
||||
"X-Crowdin-Project-ID: 694691\n"
|
||||
"X-Crowdin-Language: es-ES\n"
|
||||
"X-Crowdin-File: marketing.po\n"
|
||||
"X-Crowdin-File-ID: 6\n"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/blog/page.tsx:45
|
||||
msgid "{0}"
|
||||
msgstr "{0}"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:100
|
||||
msgid "5 standard documents per month"
|
||||
msgstr "5 documentos estándar por mes"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:198
|
||||
msgid "5 Users Included"
|
||||
msgstr "5 Usuarios incluidos"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:34
|
||||
msgid "A 10x better signing experience."
|
||||
msgstr "Una experiencia de firma 10 veces mejor."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/singleplayer/client.tsx:51
|
||||
msgid "Add document"
|
||||
msgstr "Agregar documento"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:201
|
||||
msgid "Add More Users for {0}"
|
||||
msgstr "Agregar más usuarios por {0}"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:165
|
||||
msgid "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics</0>"
|
||||
msgstr "Todos nuestros métricas, finanzas y aprendizajes son públicos. Creemos en la transparencia y queremos compartir nuestro viaje contigo. Puedes leer más sobre por qué aquí: <0>Anunciando Métricas Abiertas</0>"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/funding-raised.tsx:58
|
||||
#: apps/marketing/src/app/(marketing)/open/funding-raised.tsx:65
|
||||
msgid "Amount Raised"
|
||||
msgstr "Monto recaudado"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:145
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:189
|
||||
msgid "API Access"
|
||||
msgstr "Acceso a API"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:67
|
||||
msgid "Beautiful."
|
||||
msgstr "Hermoso."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:69
|
||||
msgid "Because signing should be celebrated. That’s why we care about the smallest detail in our product."
|
||||
msgstr "Porque la firma debe ser celebrada. Por eso nos importa el más mínimo detalle en nuestro producto."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:35
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:57
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:36
|
||||
msgid "Blog"
|
||||
msgstr "Blog"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:64
|
||||
msgid "Build on top."
|
||||
msgstr "Construir sobre."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:163
|
||||
msgid "Can I use Documenso commercially?"
|
||||
msgstr "¿Puedo usar Documenso comercialmente?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:42
|
||||
msgid "Careers"
|
||||
msgstr "Carreras"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:36
|
||||
msgid "Changelog"
|
||||
msgstr "Registro de cambios"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:85
|
||||
msgid "Choose a template from the community app store. Or submit your own template for others to use."
|
||||
msgstr "Elige una plantilla de la tienda de aplicaciones de la comunidad. O envía tu propia plantilla para que otros la usen."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:219
|
||||
msgid "Community"
|
||||
msgstr "Comunidad"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-completed-documents-chart.tsx:55
|
||||
msgid "Completed Documents"
|
||||
msgstr "Documentos Completados"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-completed-documents-chart.tsx:33
|
||||
msgid "Completed Documents per Month"
|
||||
msgstr "Documentos Completados por Mes"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:65
|
||||
msgid "Connections"
|
||||
msgstr "Conexiones"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:35
|
||||
msgid "Contact Us"
|
||||
msgstr "Contáctanos"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:67
|
||||
msgid "Create connections and automations with Zapier and more to integrate with your favorite tools."
|
||||
msgstr "Crea conexiones y automatizaciones con Zapier y más para integrarte con tus herramientas favoritas."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/call-to-action.tsx:23
|
||||
msgid "Create your account and start using state-of-the-art document signing. Open and beautiful signing is within your grasp."
|
||||
msgstr "Crea tu cuenta y comienza a usar la firma de documentos de última generación. La firma abierta y hermosa está a tu alcance."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/tooltip.tsx:35
|
||||
msgid "Customers with an Active Subscriptions."
|
||||
msgstr "Clientes con suscripciones activas."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:33
|
||||
msgid "Customise and expand."
|
||||
msgstr "Personaliza y expande."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:38
|
||||
msgid "Design"
|
||||
msgstr "Diseño"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:44
|
||||
msgid "Designed for every stage of your journey."
|
||||
msgstr "Diseñado para cada etapa de tu viaje."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:40
|
||||
msgid "Direct Link"
|
||||
msgstr "Enlace Directo"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:181
|
||||
msgid "Documenso is a community effort to create an open and vibrant ecosystem around a tool, everybody is free to use and adapt. By being truly open we want to create trusted infrastructure for the future of the internet."
|
||||
msgstr "Documenso es un esfuerzo comunitario para crear un ecosistema abierto y vibrante alrededor de una herramienta que todos son libres de usar y adaptar. Al ser verdaderamente abierto, queremos crear una infraestructura confiable para el futuro de internet."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/typefully.tsx:28
|
||||
msgid "Documenso on X"
|
||||
msgstr "Documenso en X"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/hero.tsx:104
|
||||
msgid "Document signing,<0/>finally open source."
|
||||
msgstr "Firma de documentos,<0/>finalmente código abierto."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:33
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:50
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:28
|
||||
msgid "Documentation"
|
||||
msgstr "Documentación"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:110
|
||||
msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application."
|
||||
msgstr "Incrusta fácilmente Documenso en tu producto. Simplemente copia y pega nuestro widget de react en tu aplicación."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46
|
||||
msgid "Easy Sharing."
|
||||
msgstr "Compartición fácil."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:148
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:192
|
||||
msgid "Email and Discord Support"
|
||||
msgstr "Soporte por correo electrónico y Discord"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:43
|
||||
msgid "Engagement"
|
||||
msgstr "Compromiso"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/singleplayer/client.tsx:64
|
||||
msgid "Enter your details."
|
||||
msgstr "Ingresa tus detalles."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:16
|
||||
msgid "Enterprise Compliance, License or Technical Needs?"
|
||||
msgstr "¿Cumplimiento, licencia o necesidades técnicas de la empresa?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:128
|
||||
msgid "Everything you need for a great signing experience."
|
||||
msgstr "Todo lo que necesitas para una gran experiencia de firma."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:45
|
||||
msgid "Fast."
|
||||
msgstr "Rápido."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:36
|
||||
msgid "Faster, smarter and more beautiful."
|
||||
msgstr "Más rápido, más inteligente y más hermoso."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:210
|
||||
msgid "Finances"
|
||||
msgstr "Finanzas"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/typefully.tsx:38
|
||||
msgid "Follow us on X"
|
||||
msgstr "Síguenos en X"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:172
|
||||
msgid "For companies looking to scale across multiple teams."
|
||||
msgstr "Para empresas que buscan escalar en múltiples equipos."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:85
|
||||
msgid "For small teams and individuals with basic needs."
|
||||
msgstr "Para pequeños equipos e individuos con necesidades básicas."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:80
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/blog/page.tsx:26
|
||||
msgid "From the blog"
|
||||
msgstr "Del blog"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:9
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:17
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:33
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:41
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:49
|
||||
msgid "Full-Time"
|
||||
msgstr "A tiempo completo"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:87
|
||||
msgid "Get paid (Soon)."
|
||||
msgstr "Recibe pago (Pronto)."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/call-to-action.tsx:31
|
||||
msgid "Get started"
|
||||
msgstr "Empezar"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:75
|
||||
msgid "Get Started"
|
||||
msgstr "Comienza"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:47
|
||||
msgid "Get started today."
|
||||
msgstr "Comienza hoy."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/blog/page.tsx:30
|
||||
msgid "Get the latest news from Documenso, including product updates, team announcements and more!"
|
||||
msgstr "¡Obtén las últimas noticias de Documenso, incluidas actualizaciones de productos, anuncios del equipo y más!"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:233
|
||||
msgid "GitHub: Total Merged PRs"
|
||||
msgstr "GitHub: Total de PRs fusionados"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:251
|
||||
msgid "GitHub: Total Open Issues"
|
||||
msgstr "GitHub: Total de problemas abiertos"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:225
|
||||
msgid "GitHub: Total Stars"
|
||||
msgstr "GitHub: Total de estrellas"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/salary-bands.tsx:23
|
||||
msgid "Global Salary Bands"
|
||||
msgstr "Bandas salariales globales"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:261
|
||||
msgid "Growth"
|
||||
msgstr "Crecimiento"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:134
|
||||
msgid "How can I contribute?"
|
||||
msgstr "¿Cómo puedo contribuir?"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:105
|
||||
msgid "How do you handle my data?"
|
||||
msgstr "¿Cómo manejan mis datos?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:118
|
||||
msgid "Individual"
|
||||
msgstr "Individual"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:89
|
||||
msgid "Integrated payments with Stripe so you don’t have to worry about getting paid."
|
||||
msgstr "Pagos integrados con Stripe para que no tengas que preocuparte por cobrar."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:35
|
||||
msgid "Integrates with all your favourite tools."
|
||||
msgstr "Se integra con todas tus herramientas favoritas."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:289
|
||||
msgid "Is there more?"
|
||||
msgstr "¿Hay más?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:44
|
||||
msgid "It’s up to you. Either clone our repository or rely on our easy to use hosting solution."
|
||||
msgstr "Depende de ti. O bien clona nuestro repositorio o confía en nuestra solución de hosting fácil de usar."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:49
|
||||
msgid "Join Date"
|
||||
msgstr "Fecha de ingreso"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/call-to-action.tsx:19
|
||||
msgid "Join the Open Signing Movement"
|
||||
msgstr "Únete al Movimiento de Firma Abierta"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:46
|
||||
msgid "Location"
|
||||
msgstr "Ubicación"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:66
|
||||
msgid "Make it your own through advanced customization and adjustability."
|
||||
msgstr "Hazlo tuyo a través de personalización y ajustabilidad avanzadas."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:199
|
||||
msgid "Merged PR's"
|
||||
msgstr "PRs fusionados"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:234
|
||||
msgid "Merged PRs"
|
||||
msgstr "PRs fusionados"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:40
|
||||
msgid "Monthly"
|
||||
msgstr "Mensual"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:34
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-new-users-chart.tsx:30
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-new-users-chart.tsx:43
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-new-users-chart.tsx:52
|
||||
msgid "New Users"
|
||||
msgstr "Nuevos Usuarios"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:106
|
||||
msgid "No credit card required"
|
||||
msgstr "No se requiere tarjeta de crédito"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/callout.tsx:29
|
||||
#: apps/marketing/src/components/(marketing)/hero.tsx:125
|
||||
msgid "No Credit Card required"
|
||||
msgstr "No se requiere tarjeta de crédito"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:61
|
||||
msgid "None of these work for you? Try self-hosting!"
|
||||
msgstr "¿Ninguna de estas opciones funciona para ti? ¡Prueba el autoalojamiento!"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:194
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:252
|
||||
msgid "Open Issues"
|
||||
msgstr "Problemas Abiertos"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:42
|
||||
msgid "Open Source or Hosted."
|
||||
msgstr "Código Abierto o Alojado."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:161
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:37
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:64
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:40
|
||||
msgid "Open Startup"
|
||||
msgstr "Startup Abierta"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:41
|
||||
msgid "OSS Friends"
|
||||
msgstr "Amigos OSS"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:91
|
||||
msgid "Our custom templates come with smart rules that can help you save time and energy."
|
||||
msgstr "Nuestras plantillas personalizadas vienen con reglas inteligentes que pueden ayudarte a ahorrar tiempo y energía."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:20
|
||||
msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features."
|
||||
msgstr "Nuestra Licencia Empresarial es excelente para grandes organizaciones que buscan cambiar a Documenso para todas sus necesidades de firma. Está disponible para nuestra oferta en la nube, así como para configuraciones autoalojadas y ofrece una amplia gama de funciones de cumplimiento y administración."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:65
|
||||
msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership."
|
||||
msgstr "Nuestra opción de autoalojamiento es excelente para pequeños equipos e individuos que necesitan una solución simple. Puedes usar nuestra configuración basada en docker para empezar en minutos. Toma el control con total personalización y propiedad de los datos."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
|
||||
msgid "Premium Profile Name"
|
||||
msgstr "Nombre de Perfil Premium"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:40
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:31
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:42
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:24
|
||||
msgid "Pricing"
|
||||
msgstr "Precios"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:43
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:53
|
||||
msgid "Privacy"
|
||||
msgstr "Privacidad"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:58
|
||||
msgid "Profile"
|
||||
msgstr "Perfil"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:108
|
||||
msgid "React Widget (Soon)."
|
||||
msgstr "Widget de React (Pronto)."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:48
|
||||
msgid "Receive your personal link to share with everyone you care about."
|
||||
msgstr "Recibe tu enlace personal para compartirlo con todos los que te importan."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:37
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/salary-bands.tsx:37
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:40
|
||||
msgid "Salary"
|
||||
msgstr "Salario"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:62
|
||||
msgid "Save $60 or $120"
|
||||
msgstr "Ahorra $60 o $120"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:109
|
||||
msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us."
|
||||
msgstr "De manera segura. Nuestros centros de datos están ubicados en Frankfurt (Alemania), dándonos las mejores leyes de privacidad locales. Somos muy conscientes de la naturaleza sensible de nuestros datos y seguimos las mejores prácticas para garantizar la seguridad y la integridad de los datos que se nos confían."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:37
|
||||
msgid "Send, connect, receive and embed everywhere."
|
||||
msgstr "Enviar, conectar, recibir e incrustar en todas partes."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/salary-bands.tsx:34
|
||||
msgid "Seniority"
|
||||
msgstr "Antigüedad"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:39
|
||||
msgid "Shop"
|
||||
msgstr "Tienda"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/singleplayer/client.tsx:63
|
||||
msgid "Sign"
|
||||
msgstr "Firmar"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:72
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:61
|
||||
msgid "Sign in"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/header.tsx:77
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:57
|
||||
msgid "Sign up"
|
||||
msgstr "Registrarse"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:22
|
||||
msgid "Signing Process"
|
||||
msgstr "Proceso de firma"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:94
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:136
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:180
|
||||
msgid "Signup Now"
|
||||
msgstr "Regístrate ahora"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:89
|
||||
msgid "Smart."
|
||||
msgstr "Inteligente."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/hero.tsx:132
|
||||
msgid "Star on GitHub"
|
||||
msgstr "Estrella en GitHub"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:226
|
||||
msgid "Stars"
|
||||
msgstr "Estrellas"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:40
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:44
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/footer.tsx:34
|
||||
#: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:48
|
||||
msgid "Support"
|
||||
msgstr "Soporte"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/team-members.tsx:26
|
||||
msgid "Team"
|
||||
msgstr "Equipo"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:195
|
||||
msgid "Team Inbox"
|
||||
msgstr "Bandeja de entrada del equipo"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:28
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:162
|
||||
msgid "Teams"
|
||||
msgstr "Equipos"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:83
|
||||
msgid "Template Store (Soon)."
|
||||
msgstr "Tienda de Plantillas (Pronto)."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:138
|
||||
msgid "That's awesome. You can take a look at the current <0>Issues</0> and join our <1>Discord Community</1> to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️"
|
||||
msgstr "Eso es increíble. Puedes echar un vistazo a los <0>Problemas</0> actuales y unirte a nuestra <1>Comunidad de Discord</1> para mantenerte al día sobre cuáles son las prioridades actuales. En cualquier caso, somos una comunidad abierta y agradecemos todas las aportaciones, técnicas y no técnicas ❤️"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:293
|
||||
msgid "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share."
|
||||
msgstr "Esta página está evolucionando a medida que aprendemos lo que hace una gran empresa de firmas. La actualizaremos cuando tengamos más para compartir."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/salary-bands.tsx:31
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/total-signed-documents-chart.tsx:30
|
||||
#: apps/marketing/src/app/(marketing)/open/total-signed-documents-chart.tsx:55
|
||||
msgid "Total Completed Documents"
|
||||
msgstr "Total de Documentos Completados"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:267
|
||||
#: apps/marketing/src/app/(marketing)/open/page.tsx:268
|
||||
msgid "Total Customers"
|
||||
msgstr "Total de Clientes"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/funding-raised.tsx:29
|
||||
msgid "Total Funding Raised"
|
||||
msgstr "Total de Fondos Recaudados"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-total-users-chart.tsx:30
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-total-users-chart.tsx:43
|
||||
#: apps/marketing/src/app/(marketing)/open/monthly-total-users-chart.tsx:52
|
||||
msgid "Total Users"
|
||||
msgstr "Total de Usuarios"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/open-build-template-bento.tsx:31
|
||||
msgid "Truly your own."
|
||||
msgstr "Realmente tuyo."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/callout.tsx:27
|
||||
#: apps/marketing/src/components/(marketing)/hero.tsx:123
|
||||
msgid "Try our Free Plan"
|
||||
msgstr "Prueba nuestro Plan Gratuito"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/typefully.tsx:20
|
||||
msgid "Twitter Stats"
|
||||
msgstr "Estadísticas de Twitter"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:142
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:186
|
||||
msgid "Unlimited Documents per Month"
|
||||
msgstr "Documentos ilimitados por mes"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:103
|
||||
msgid "Up to 10 recipients per document"
|
||||
msgstr "Hasta 10 destinatarios por documento"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/singleplayer/client.tsx:52
|
||||
msgid "Upload a document and add fields."
|
||||
msgstr "Sube un documento y agrega campos."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:123
|
||||
msgid "Using our hosted version is the easiest way to get started, you can simply subscribe and start signing your documents. We take care of the infrastructure, so you can focus on your business. Additionally, when using our hosted version you benefit from our trusted signing certificates which helps you to build trust with your customers."
|
||||
msgstr "Usar nuestra versión alojada es la forma más fácil de comenzar, simplemente puedes suscribirte y comenzar a firmar tus documentos. Nos ocupamos de la infraestructura, para que puedas concentrarte en tu negocio. Además, al utilizar nuestra versión alojada, te beneficias de nuestros certificados de firma confiables, lo que te ayuda a generar confianza con tus clientes."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/typefully.tsx:33
|
||||
msgid "View all stats"
|
||||
msgstr "Ver todas las estadísticas"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:195
|
||||
msgid "We are happy to assist you at <0>support@documenso.com</0> or <1>in our Discord-Support-Channel</1> please message either Lucas or Timur to get added to the channel if you are not already a member."
|
||||
msgstr "Estamos felices de ayudarte en <0>support@documenso.com</0> o <1>en nuestro canal de soporte de Discord</1>. Mensaje a Lucas o Timur para que te agreguen al canal si aún no eres miembro."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:89
|
||||
msgid "What is the difference between the plans?"
|
||||
msgstr "¿Cuál es la diferencia entre los planes?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/faster-smarter-beautiful-bento.tsx:47
|
||||
msgid "When it comes to sending or receiving a contract, you can count on lightning-fast speeds."
|
||||
msgstr "Cuando se trata de enviar o recibir un contrato, puedes contar con velocidades ultrarrápidas."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:191
|
||||
msgid "Where can I get support?"
|
||||
msgstr "¿Dónde puedo obtener soporte?"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:177
|
||||
msgid "Why should I prefer Documenso over DocuSign or some other signing tool?"
|
||||
msgstr "¿Por qué debería preferir Documenso sobre DocuSign u otra herramienta de firma?"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:119
|
||||
msgid "Why should I use your hosting service?"
|
||||
msgstr "¿Por qué debería usar su servicio de alojamiento?"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:60
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:167
|
||||
msgid "Yes! Documenso is offered under the GNU AGPL V3 open source license. This means you can use it for free and even modify it to fit your needs, as long as you publish your changes under the same license."
|
||||
msgstr "¡Sí! Documenso se ofrece bajo la licencia de código abierto GNU AGPL V3. Esto significa que puedes usarlo de forma gratuita e incluso modificarlo para adaptarlo a tus necesidades, siempre que publiques tus cambios bajo la misma licencia."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:93
|
||||
msgid "You can self-host Documenso for free or use our ready-to-use hosted version. The hosted version comes with additional support, painless scalability and more. Early adopters will get access to all features we build this year, for no additional cost! Forever! Yes, that includes multiple users per account later. If you want Documenso for your enterprise, we are happy to talk about your needs."
|
||||
msgstr "Puedes autoalojar Documenso de forma gratuita o usar nuestra versión alojada lista para usar. La versión alojada viene con soporte adicional, escalabilidad sin problemas y más. Los primeros adoptantes tendrán acceso a todas las funciones que construimos este año, sin costo adicional. ¡Para siempre! Sí, eso incluye múltiples usuarios por cuenta más adelante. Si quieres Documenso para tu empresa, estaremos encantados de hablar sobre tus necesidades."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:272
|
||||
msgid "Your browser does not support the video tag."
|
||||
msgstr "Tu navegador no soporta la etiqueta de video."
|
||||
4440
packages/lib/translations/es/web.po
Normal file
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-19 09:18\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@ -73,11 +73,11 @@ msgstr "Ajouter un ID externe au document. Cela peut être utilisé pour identif
|
||||
msgid "Add an external ID to the template. This can be used to identify in external systems."
|
||||
msgstr "Ajouter un ID externe au modèle. Cela peut être utilisé pour identifier dans des systèmes externes."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
|
||||
msgid "Add another option"
|
||||
msgstr "Ajouter une autre option"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
|
||||
msgid "Add another value"
|
||||
msgstr "Ajouter une autre valeur"
|
||||
@ -98,11 +98,11 @@ msgstr "Ajouter un destinataire de substitution"
|
||||
msgid "Add Signer"
|
||||
msgstr "Ajouter un signataire"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
|
||||
msgid "Add text"
|
||||
msgstr "Ajouter du texte"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
|
||||
msgid "Add text to the field"
|
||||
msgstr "Ajouter du texte au champ"
|
||||
|
||||
@ -115,7 +115,7 @@ msgstr "Administrateur"
|
||||
msgid "Advanced Options"
|
||||
msgstr "Options avancées"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:527
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:570
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:402
|
||||
msgid "Advanced settings"
|
||||
msgstr "Paramètres avancés"
|
||||
@ -140,15 +140,15 @@ msgstr "Approuveur"
|
||||
msgid "Approving"
|
||||
msgstr "En attente d'approbation"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:276
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:377
|
||||
msgid "Black"
|
||||
msgstr "Noir"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:290
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:391
|
||||
msgid "Blue"
|
||||
msgstr "Bleu"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
@ -170,16 +170,16 @@ msgstr "CC"
|
||||
msgid "CC'd"
|
||||
msgstr "CC'd"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
|
||||
msgid "Character Limit"
|
||||
msgstr "Limite de caractères"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:950
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
|
||||
msgid "Checkbox"
|
||||
msgstr "Case à cocher"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
|
||||
msgid "Checkbox values"
|
||||
msgstr "Valeurs de case à cocher"
|
||||
|
||||
@ -187,7 +187,7 @@ msgstr "Valeurs de case à cocher"
|
||||
msgid "Clear filters"
|
||||
msgstr "Effacer les filtres"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:310
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:411
|
||||
msgid "Clear Signature"
|
||||
msgstr "Effacer la signature"
|
||||
|
||||
@ -203,7 +203,7 @@ msgstr "Fermer"
|
||||
msgid "Configure Direct Recipient"
|
||||
msgstr "Configurer le destinataire direct"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:528
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:571
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:403
|
||||
msgid "Configure the {0} field"
|
||||
msgstr "Configurer le champ {0}"
|
||||
@ -220,7 +220,7 @@ msgstr "Copié dans le presse-papiers"
|
||||
msgid "Custom Text"
|
||||
msgstr "Texte personnalisé"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:846
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:922
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
@ -252,16 +252,16 @@ msgstr "Télécharger"
|
||||
msgid "Drag & drop your PDF here."
|
||||
msgstr "Faites glisser et déposez votre PDF ici."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:976
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
|
||||
msgid "Dropdown"
|
||||
msgstr "Liste déroulante"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
|
||||
msgid "Dropdown options"
|
||||
msgstr "Options de liste déroulante"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:794
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:870
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:272
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:500
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:632
|
||||
@ -274,6 +274,10 @@ msgstr "Email"
|
||||
msgid "Email Options"
|
||||
msgstr "Options d'email"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
|
||||
msgid "Empty field"
|
||||
msgstr "Champ vide"
|
||||
|
||||
#: packages/lib/constants/template.ts:8
|
||||
msgid "Enable Direct Link Signing"
|
||||
msgstr "Activer la signature de lien direct"
|
||||
@ -283,11 +287,15 @@ msgstr "Activer la signature de lien direct"
|
||||
msgid "Enable signing order"
|
||||
msgstr "Activer l'ordre de signature"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:790
|
||||
msgid "Enable Typed Signatures"
|
||||
msgstr "Activer les signatures tapées"
|
||||
|
||||
#: packages/ui/primitives/document-password-dialog.tsx:84
|
||||
msgid "Enter password"
|
||||
msgstr "Entrez le mot de passe"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
@ -296,26 +304,44 @@ msgstr "Erreur"
|
||||
msgid "External ID"
|
||||
msgstr "ID externe"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
|
||||
msgid "Failed to save settings."
|
||||
msgstr "Échec de l'enregistrement des paramètres."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
|
||||
msgid "Field character limit"
|
||||
msgstr "Limite de caractères du champ"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
|
||||
msgid "Field font size"
|
||||
msgstr "Taille de police du champ"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
|
||||
msgid "Field format"
|
||||
msgstr "Format du champ"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
|
||||
msgid "Field label"
|
||||
msgstr "Étiquette du champ"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
|
||||
msgid "Field placeholder"
|
||||
msgstr "Espace réservé du champ"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
|
||||
msgid "Font Size"
|
||||
msgstr "Taille de Police"
|
||||
|
||||
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
|
||||
msgid "Global recipient action authentication"
|
||||
msgstr "Authentification d'action de destinataire globale"
|
||||
@ -324,7 +350,7 @@ msgstr "Authentification d'action de destinataire globale"
|
||||
msgid "Go Back"
|
||||
msgstr "Retourner"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:297
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:398
|
||||
msgid "Green"
|
||||
msgstr "Vert"
|
||||
|
||||
@ -344,18 +370,14 @@ msgstr "Je suis un approuveur de ce document"
|
||||
msgid "I am required to receive a copy of this document"
|
||||
msgstr "Je dois recevoir une copie de ce document"
|
||||
|
||||
#: packages/lib/constants/recipient-roles.ts:74
|
||||
#~ msgid "I am required to recieve a copy of this document"
|
||||
#~ msgstr "I am required to recieve a copy of this document"
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
|
||||
msgid "Inherit authentication method"
|
||||
msgstr "Hériter de la méthode d'authentification"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
|
||||
msgid "Label"
|
||||
msgstr "Étiquette"
|
||||
|
||||
@ -363,7 +385,7 @@ msgstr "Étiquette"
|
||||
msgid "Manager"
|
||||
msgstr "Gestionnaire"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
|
||||
msgid "Max"
|
||||
msgstr "Max"
|
||||
|
||||
@ -376,11 +398,11 @@ msgstr "Membre"
|
||||
msgid "Message <0>(Optional)</0>"
|
||||
msgstr "Message <0>(Optionnel)</0>"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
|
||||
msgid "Min"
|
||||
msgstr "Min"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:820
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:896
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:298
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:535
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:541
|
||||
@ -402,12 +424,12 @@ msgstr "Nécessite une signature"
|
||||
msgid "Needs to view"
|
||||
msgstr "Nécessite une visualisation"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:631
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:680
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:497
|
||||
msgid "No recipient matching this description was found."
|
||||
msgstr "Aucun destinataire correspondant à cette description n'a été trouvé."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:647
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:696
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:513
|
||||
msgid "No recipients with this role"
|
||||
msgstr "Aucun destinataire avec ce rôle"
|
||||
@ -432,12 +454,12 @@ msgstr "Aucun champ de signature trouvé"
|
||||
msgid "No value found."
|
||||
msgstr "Aucune valeur trouvée."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:898
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:974
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
|
||||
msgid "Number"
|
||||
msgstr "Numéro"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
|
||||
msgid "Number format"
|
||||
msgstr "Format de numéro"
|
||||
|
||||
@ -457,17 +479,17 @@ msgstr "Page {0} sur {1}"
|
||||
msgid "Password Required"
|
||||
msgstr "Mot de passe requis"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
|
||||
msgid "Pick a number"
|
||||
msgstr "Choisissez un numéro"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
|
||||
msgid "Placeholder"
|
||||
msgstr "Espace réservé"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:924
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
|
||||
msgid "Radio"
|
||||
msgstr "Radio"
|
||||
@ -476,11 +498,11 @@ msgstr "Radio"
|
||||
msgid "Radio values"
|
||||
msgstr "Valeurs radio"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
|
||||
msgid "Read only"
|
||||
msgstr "Lecture seule"
|
||||
|
||||
@ -494,7 +516,7 @@ msgstr "Recevoir une copie"
|
||||
msgid "Recipient action authentication"
|
||||
msgstr "Authentification d'action de destinataire"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:283
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:384
|
||||
msgid "Red"
|
||||
msgstr "Rouge"
|
||||
|
||||
@ -503,15 +525,15 @@ msgstr "Rouge"
|
||||
msgid "Redirect URL"
|
||||
msgstr "URL de redirection"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1027
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
|
||||
msgid "Remove"
|
||||
msgstr "Retirer"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
|
||||
msgid "Required field"
|
||||
msgstr "Champ requis"
|
||||
|
||||
@ -519,7 +541,7 @@ msgstr "Champ requis"
|
||||
msgid "Rows per page"
|
||||
msgstr "Lignes par page"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
|
||||
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
|
||||
msgid "Save"
|
||||
msgstr "Sauvegarder"
|
||||
|
||||
@ -531,7 +553,7 @@ msgstr "Sauvegarder le modèle"
|
||||
msgid "Search languages..."
|
||||
msgstr "Rechercher des langues..."
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
|
||||
msgid "Select"
|
||||
msgstr "Sélectionner"
|
||||
|
||||
@ -539,11 +561,11 @@ msgstr "Sélectionner"
|
||||
msgid "Select an option"
|
||||
msgstr "Sélectionner une option"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
|
||||
msgid "Select at least"
|
||||
msgstr "Sélectionnez au moins"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
|
||||
msgid "Select default option"
|
||||
msgstr "Sélectionner l'option par défaut"
|
||||
|
||||
@ -574,7 +596,7 @@ msgstr "Afficher les paramètres avancés"
|
||||
msgid "Sign"
|
||||
msgstr "Signer"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:742
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:818
|
||||
#: packages/ui/primitives/document-flow/add-signature.tsx:323
|
||||
#: packages/ui/primitives/document-flow/field-icon.tsx:52
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:580
|
||||
@ -622,7 +644,7 @@ msgstr "Soumettre"
|
||||
msgid "Template title"
|
||||
msgstr "Titre du modèle"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:872
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:948
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
|
||||
msgid "Text"
|
||||
msgstr "Texte"
|
||||
@ -683,7 +705,7 @@ msgstr "Le nom du signataire"
|
||||
msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step."
|
||||
msgstr "Cela peut être remplacé par le paramétrage direct des exigences d'authentification pour chaque destinataire à l'étape suivante."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:703
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:752
|
||||
msgid "This document has already been sent to this recipient. You can no longer edit this recipient."
|
||||
msgstr "Ce document a déjà été envoyé à ce destinataire. Vous ne pouvez plus modifier ce destinataire."
|
||||
|
||||
@ -695,17 +717,13 @@ msgstr "Ce document est protégé par mot de passe. Veuillez entrer le mot de pa
|
||||
msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them."
|
||||
msgstr "Ce champ ne peut pas être modifié ou supprimé. Lorsque vous partagez le lien direct de ce modèle ou l'ajoutez à votre profil public, toute personne qui y accède peut saisir son nom et son email, et remplir les champs qui lui sont attribués."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1007
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1084
|
||||
msgid "This recipient can no longer be modified as they have signed a field, or completed the document."
|
||||
msgstr ""
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:195
|
||||
#~ msgid "This signer has already received the document."
|
||||
#~ msgstr "Ce signataire a déjà reçu le document."
|
||||
msgstr "Ce destinataire ne peut plus être modifié car il a signé un champ ou complété le document."
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-signers.tsx:194
|
||||
msgid "This signer has already signed the document."
|
||||
msgstr ""
|
||||
msgstr "Ce signataire a déjà signé le document."
|
||||
|
||||
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:48
|
||||
msgid "This will override any global settings."
|
||||
@ -720,7 +738,7 @@ msgstr "Fuseau horaire"
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:990
|
||||
#: packages/ui/primitives/document-flow/add-fields.tsx:1067
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:828
|
||||
msgid "To proceed further, please set at least one value for the {0} field."
|
||||
msgstr "Pour continuer, veuillez définir au moins une valeur pour le champ {0}."
|
||||
@ -741,13 +759,13 @@ msgstr "Améliorer"
|
||||
msgid "Upload Template Document"
|
||||
msgstr "Télécharger le document modèle"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
|
||||
msgid "Validation"
|
||||
msgstr "Validation"
|
||||
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
|
||||
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
|
||||
msgid "Value"
|
||||
msgstr "Valeur"
|
||||
|
||||
@ -767,10 +785,6 @@ msgstr "Visiteur"
|
||||
msgid "Viewing"
|
||||
msgstr "Visionnage"
|
||||
|
||||
#: packages/ui/primitives/signature-pad/signature-pad.tsx:280
|
||||
#~ msgid "White"
|
||||
#~ msgstr "White"
|
||||
|
||||
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44
|
||||
msgid "You are about to send this document to the recipients. Are you sure you want to continue?"
|
||||
msgstr "Vous êtes sur le point d'envoyer ce document aux destinataires. Êtes-vous sûr de vouloir continuer ?"
|
||||
|
||||
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-19 09:18\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@ -160,10 +160,6 @@ msgstr "Documentation"
|
||||
msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application."
|
||||
msgstr "Intégrez facilement Documenso dans votre produit. Il vous suffit de copier et coller notre widget React dans votre application."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42
|
||||
#~ msgid "Easy Sharing (Soon)."
|
||||
#~ msgstr "Easy Sharing (Soon)."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46
|
||||
msgid "Easy Sharing."
|
||||
msgstr "Partage facile."
|
||||
@ -223,6 +219,7 @@ msgstr "Du blog"
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:9
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:17
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:33
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:41
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:49
|
||||
@ -376,18 +373,10 @@ msgstr "Nos modèles personnalisés sont dotés de règles intelligentes qui peu
|
||||
msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features."
|
||||
msgstr "Notre licence entreprise est idéale pour les grandes organisations cherchant à passer à Documenso pour tous leurs besoins de signature. Elle est disponible pour notre offre cloud ainsi que pour des configurations auto-hébergées et propose un large éventail de fonctionnalités de conformité et d'administration."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/enterprise.tsx:20
|
||||
#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:65
|
||||
msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership."
|
||||
msgstr "Notre option auto-hébergée est idéale pour les petites équipes et les individus qui ont besoin d'une solution simple. Vous pouvez utiliser notre configuration basée sur Docker pour commencer en quelques minutes. Prenez le contrôle avec une personnalisation complète et une propriété des données."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/open/data.ts:25
|
||||
msgid "Part-Time"
|
||||
msgstr "Temps partiel"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
|
||||
msgid "Premium Profile Name"
|
||||
msgstr "Nom de profil premium"
|
||||
@ -429,10 +418,6 @@ msgstr "Salaire"
|
||||
msgid "Save $60 or $120"
|
||||
msgstr "Économisez 60 $ ou 120 $"
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47
|
||||
#~ msgid "Search languages..."
|
||||
#~ msgstr "Search languages..."
|
||||
|
||||
#: apps/marketing/src/app/(marketing)/pricing/page.tsx:109
|
||||
msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us."
|
||||
msgstr "De manière sécurisée. Nos centres de données sont situés à Francfort (Allemagne), ce qui nous permet de bénéficier des meilleures lois locales sur la confidentialité. Nous sommes très conscients de la nature sensible de nos données et suivons les meilleures pratiques pour garantir la sécurité et l'intégrité des données qui nous sont confiées."
|
||||
@ -614,6 +599,6 @@ msgstr "Oui ! Documenso est proposé sous la licence open source GNU AGPL V3. Ce
|
||||
msgid "You can self-host Documenso for free or use our ready-to-use hosted version. The hosted version comes with additional support, painless scalability and more. Early adopters will get access to all features we build this year, for no additional cost! Forever! Yes, that includes multiple users per account later. If you want Documenso for your enterprise, we are happy to talk about your needs."
|
||||
msgstr "Vous pouvez auto-héberger Documenso gratuitement ou utiliser notre version hébergée prête à l'emploi. La version hébergée est accompagnée d'une assistance supplémentaire, d'une montée en charge sans effort et d'autres avantages. Les premiers adoptants auront accès à toutes les fonctionnalités que nous construirons cette année, sans coût supplémentaire ! Pour toujours ! Oui, cela inclut plusieurs utilisateurs par compte à l'avenir. Si vous souhaitez Documenso pour votre entreprise, nous serons heureux de discuter de vos besoins."
|
||||
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:265
|
||||
#: apps/marketing/src/components/(marketing)/carousel.tsx:272
|
||||
msgid "Your browser does not support the video tag."
|
||||
msgstr "Votre navigateur ne prend pas en charge la balise vidéo."
|
||||
|
||||
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: documenso-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-09-19 09:18\n"
|
||||
"PO-Revision-Date: 2024-10-18 04:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@ -137,7 +137,7 @@ msgstr "404 Modèle non trouvé"
|
||||
msgid "A confirmation email has been sent, and it should arrive in your inbox shortly."
|
||||
msgstr "Un e-mail de confirmation a été envoyé et devrait arriver dans votre boîte de réception sous peu."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201
|
||||
msgid "A draft document will be created"
|
||||
msgstr "Un document brouillon sera créé"
|
||||
|
||||
@ -220,7 +220,7 @@ msgstr "Abonnements actifs"
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:157
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87
|
||||
msgid "Add all relevant fields for each recipient."
|
||||
msgstr "Ajouter tous les champs pertinents pour chaque destinataire."
|
||||
@ -241,7 +241,7 @@ msgstr "Ajouter un authentificateur pour servir de méthode d'authentification s
|
||||
msgid "Add email"
|
||||
msgstr "Ajouter un e-mail"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:156
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86
|
||||
msgid "Add Fields"
|
||||
msgstr "Ajouter des champs"
|
||||
@ -250,10 +250,6 @@ msgstr "Ajouter des champs"
|
||||
msgid "Add more"
|
||||
msgstr "Ajouter davantage"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270
|
||||
#~ msgid "Add number"
|
||||
#~ msgstr "Add number"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154
|
||||
msgid "Add passkey"
|
||||
@ -263,11 +259,11 @@ msgstr "Ajouter une clé de passe"
|
||||
msgid "Add Placeholders"
|
||||
msgstr "Ajouter des espaces réservés"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:151
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169
|
||||
msgid "Add Signers"
|
||||
msgstr "Ajouter des signataires"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:161
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179
|
||||
msgid "Add Subject"
|
||||
msgstr "Ajouter un sujet"
|
||||
|
||||
@ -275,23 +271,15 @@ msgstr "Ajouter un sujet"
|
||||
msgid "Add team email"
|
||||
msgstr "Ajouter un e-mail d'équipe"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256
|
||||
#~ msgid "Add text"
|
||||
#~ msgstr "Add text"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272
|
||||
#~ msgid "Add Text"
|
||||
#~ msgstr "Add Text"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170
|
||||
msgid "Add the people who will sign the document."
|
||||
msgstr "Ajouter les personnes qui signeront le document."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203
|
||||
msgid "Add the recipients to create the document with"
|
||||
msgstr "Ajouter les destinataires pour créer le document avec"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:162
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180
|
||||
msgid "Add the subject and message you wish to send to signers."
|
||||
msgstr "Ajouter le sujet et le message que vous souhaitez envoyer aux signataires."
|
||||
|
||||
@ -370,17 +358,17 @@ msgstr "Un e-mail demandant le transfert de cette équipe a été envoyé."
|
||||
msgid "An error occurred"
|
||||
msgstr "Une erreur est survenue"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231
|
||||
msgid "An error occurred while adding signers."
|
||||
msgstr "Une erreur est survenue lors de l'ajout de signataires."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:278
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301
|
||||
msgid "An error occurred while adding the fields."
|
||||
msgstr "Une erreur est survenue lors de l'ajout des champs."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161
|
||||
msgid "An error occurred while creating document from template."
|
||||
msgstr "Une erreur est survenue lors de la création du document à partir d'un modèle."
|
||||
|
||||
@ -426,7 +414,7 @@ msgstr "Une erreur est survenue lors du déplacement du modèle."
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:129
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:173
|
||||
msgid "An error occurred while removing the signature."
|
||||
msgstr "Une erreur est survenue lors de la suppression de la signature."
|
||||
|
||||
@ -434,7 +422,7 @@ msgstr "Une erreur est survenue lors de la suppression de la signature."
|
||||
msgid "An error occurred while removing the text."
|
||||
msgstr "Une erreur est survenue lors de la suppression du texte."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:309
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332
|
||||
msgid "An error occurred while sending the document."
|
||||
msgstr "Une erreur est survenue lors de l'envoi du document."
|
||||
|
||||
@ -449,7 +437,7 @@ msgstr "Une erreur est survenue lors de l'envoi de votre e-mail de confirmation"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:149
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:147
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:168
|
||||
msgid "An error occurred while signing the document."
|
||||
msgstr "Une erreur est survenue lors de la signature du document."
|
||||
@ -458,7 +446,7 @@ msgstr "Une erreur est survenue lors de la signature du document."
|
||||
msgid "An error occurred while trying to create a checkout session."
|
||||
msgstr "Une erreur est survenue lors de la création d'une session de paiement."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:214
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166
|
||||
msgid "An error occurred while updating the document settings."
|
||||
msgstr "Une erreur est survenue lors de la mise à jour des paramètres du document."
|
||||
@ -561,7 +549,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer cette équipe ?"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98
|
||||
#: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81
|
||||
#: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116
|
||||
@ -660,16 +648,16 @@ msgstr "En activant l'authentification à deux facteurs (2FA), vous devrez entre
|
||||
#: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:150
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:250
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:176
|
||||
@ -752,14 +740,14 @@ msgid "Click to copy signing link for sending to recipient"
|
||||
msgstr "Cliquez pour copier le lien de signature à envoyer au destinataire"
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:114
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:115
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:439
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:318
|
||||
msgid "Click to insert field"
|
||||
msgstr "Cliquez pour insérer le champ"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121
|
||||
@ -771,8 +759,8 @@ msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:429
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:308
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:534
|
||||
msgid "Complete"
|
||||
msgstr "Compléter"
|
||||
@ -789,7 +777,7 @@ msgstr "Compléter la signature"
|
||||
msgid "Complete Viewing"
|
||||
msgstr "Compléter la visualisation"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:58
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
|
||||
#: apps/web/src/components/formatter/document-status.tsx:28
|
||||
msgid "Completed"
|
||||
msgstr "Complété"
|
||||
@ -802,7 +790,7 @@ msgstr "Documents complétés"
|
||||
msgid "Completed Documents"
|
||||
msgstr "Documents Complétés"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:147
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165
|
||||
msgid "Configure general settings for the document."
|
||||
msgstr "Configurer les paramètres généraux pour le document."
|
||||
|
||||
@ -814,7 +802,7 @@ msgstr "Configurer les paramètres généraux pour le modèle."
|
||||
msgid "Configure template"
|
||||
msgstr "Configurer le modèle"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481
|
||||
#: apps/web/src/components/templates/manage-public-template-dialog.tsx:460
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmer"
|
||||
@ -900,11 +888,11 @@ msgstr "Créer une équipe pour collaborer avec vos membres."
|
||||
msgid "Create account"
|
||||
msgstr "Créer un compte"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345
|
||||
msgid "Create and send"
|
||||
msgstr "Créer et envoyer"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347
|
||||
msgid "Create as draft"
|
||||
msgstr "Créer en tant que brouillon"
|
||||
|
||||
@ -916,7 +904,7 @@ msgstr "Créer un lien direct"
|
||||
msgid "Create Direct Signing Link"
|
||||
msgstr "Créer un lien de signature directe"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197
|
||||
msgid "Create document from template"
|
||||
msgstr "Créer un document à partir du modèle"
|
||||
|
||||
@ -988,11 +976,6 @@ msgstr "Créé le"
|
||||
msgid "Created on {0}"
|
||||
msgstr "Créé le {0}"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94
|
||||
#~ msgid "Created on <0/>"
|
||||
#~ msgstr "Created on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100
|
||||
msgid "Created on{0}"
|
||||
msgstr "Créé le{0}"
|
||||
@ -1107,10 +1090,6 @@ msgstr "Supprimé"
|
||||
msgid "Deleting account..."
|
||||
msgstr "Suppression du compte..."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135
|
||||
#~ msgid "Deleting document"
|
||||
#~ msgstr "Deleting document"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75
|
||||
msgid "Device"
|
||||
msgstr "Appareil"
|
||||
@ -1215,7 +1194,7 @@ msgstr "Document complété"
|
||||
msgid "Document Completed!"
|
||||
msgstr "Document Complété !"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150
|
||||
msgid "Document created"
|
||||
msgstr "Document créé"
|
||||
|
||||
@ -1246,7 +1225,7 @@ msgstr "ID du document"
|
||||
msgid "Document inbox"
|
||||
msgstr "Boîte de réception des documents"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179
|
||||
msgid "Document Limit Exceeded!"
|
||||
msgstr "Limite de documents dépassée !"
|
||||
|
||||
@ -1274,7 +1253,7 @@ msgstr "Document renvoyé"
|
||||
msgid "Document resealed"
|
||||
msgstr "Document resealé"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:298
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321
|
||||
msgid "Document sent"
|
||||
msgstr "Document envoyé"
|
||||
|
||||
@ -1316,7 +1295,7 @@ msgstr "Le document sera supprimé de manière permanente"
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx:109
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/loading.tsx:16
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx:15
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/documents/documents-page-view.tsx:119
|
||||
#: apps/web/src/app/(profile)/p/[url]/page.tsx:166
|
||||
#: apps/web/src/app/not-found.tsx:21
|
||||
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:205
|
||||
@ -1402,8 +1381,8 @@ msgstr "Modifier le webhook"
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255
|
||||
#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118
|
||||
#: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376
|
||||
@ -1491,10 +1470,10 @@ msgstr "Entrez votre texte ici"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41
|
||||
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:213
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:247
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:277
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:308
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331
|
||||
#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106
|
||||
#: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112
|
||||
@ -1503,7 +1482,7 @@ msgstr "Entrez votre texte ici"
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230
|
||||
#: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51
|
||||
#: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151
|
||||
#: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212
|
||||
@ -1519,8 +1498,8 @@ msgstr "Entrez votre texte ici"
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:194
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:101
|
||||
#: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:128
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:148
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:174
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:146
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:172
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:167
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:195
|
||||
#: apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx:54
|
||||
@ -1544,20 +1523,10 @@ msgstr "Délai dépassé"
|
||||
msgid "Expired"
|
||||
msgstr "Expiré"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106
|
||||
#~ msgid "Expires on"
|
||||
#~ msgstr "Expires on"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71
|
||||
msgid "Expires on {0}"
|
||||
msgstr "Expire le {0}"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108
|
||||
#~ msgid "Expires on <0/>"
|
||||
#~ msgstr "Expires on <0/>"
|
||||
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107
|
||||
msgid "Expires on{0}"
|
||||
msgstr "Expire le{0}"
|
||||
@ -1597,7 +1566,7 @@ msgstr "Mot de passe oublié ?"
|
||||
msgid "Full Name"
|
||||
msgstr "Nom complet"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:146
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164
|
||||
#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76
|
||||
#: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60
|
||||
#: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43
|
||||
@ -1659,10 +1628,6 @@ msgstr "Cacher"
|
||||
msgid "Hide additional information"
|
||||
msgstr "Cacher des informations supplémentaires"
|
||||
|
||||
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40
|
||||
#~ msgid "I am the owner of this document"
|
||||
#~ msgstr "I am the owner of this document"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173
|
||||
msgid "I'm sure! Delete it"
|
||||
@ -2006,8 +1971,8 @@ msgstr "Mes modèles"
|
||||
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:61
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277
|
||||
#: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170
|
||||
#: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153
|
||||
@ -2037,8 +2002,8 @@ msgstr "Nouveau propriétaire d'équipe"
|
||||
msgid "New Template"
|
||||
msgstr "Nouveau modèle"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:420
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:299
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:521
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
@ -2143,7 +2108,7 @@ msgstr "Une fois que vous avez scanné le code QR ou saisi le code manuellement,
|
||||
msgid "Oops! Something went wrong."
|
||||
msgstr "Oups ! Quelque chose a mal tourné."
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:97
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
|
||||
msgid "Opened"
|
||||
msgstr "Ouvert"
|
||||
|
||||
@ -2158,7 +2123,7 @@ msgstr "Ou"
|
||||
msgid "Or continue with"
|
||||
msgstr "Ou continuez avec"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324
|
||||
msgid "Otherwise, the document will be created as a draft."
|
||||
msgstr "Sinon, le document sera créé sous forme de brouillon."
|
||||
|
||||
@ -2294,11 +2259,11 @@ msgstr "Veuillez contacter le support si vous souhaitez annuler cette action."
|
||||
msgid "Please enter a meaningful name for your token. This will help you identify it later."
|
||||
msgstr "Veuillez entrer un nom significatif pour votre jeton. Cela vous aidera à l'identifier plus tard."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:134
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:135
|
||||
msgid "Please mark as viewed to complete"
|
||||
msgstr "Veuillez marquer comme vu pour terminer"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459
|
||||
msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder."
|
||||
msgstr "Veuillez noter que la poursuite supprimera le destinataire de lien direct et le transformera en espace réservé."
|
||||
|
||||
@ -2589,7 +2554,7 @@ msgstr "Rôle"
|
||||
msgid "Roles"
|
||||
msgstr "Rôles"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444
|
||||
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446
|
||||
#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342
|
||||
msgid "Save"
|
||||
@ -2658,7 +2623,7 @@ msgstr "Sélectionner la clé d'authentification"
|
||||
msgid "Send confirmation email"
|
||||
msgstr "Envoyer l'e-mail de confirmation"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308
|
||||
msgid "Send document"
|
||||
msgstr "Envoyer le document"
|
||||
|
||||
@ -2730,20 +2695,16 @@ msgstr "Afficher des modèles dans le profil public de votre équipe pour que vo
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:182
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:224
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:124
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:259
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:256
|
||||
#: apps/web/src/components/ui/user-profile-skeleton.tsx:75
|
||||
#: apps/web/src/components/ui/user-profile-timur.tsx:81
|
||||
msgid "Sign"
|
||||
msgstr "Signer"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:217
|
||||
msgid "Sign as {0} <0>({1})</0>"
|
||||
msgstr "Signer comme {0} <0>({1})</0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219
|
||||
#~ msgid "Sign as <0>{0} <1>({1})</1></0>"
|
||||
#~ msgstr "Sign as <0>{0} <1>({1})</1></0>"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183
|
||||
msgid "Sign as<0>{0} <1>({1})</1></0>"
|
||||
msgstr "Signer comme<0>{0} <1>({1})</1></0>"
|
||||
@ -2802,8 +2763,8 @@ msgstr "S'inscrire avec OIDC"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:197
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:227
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270
|
||||
#: apps/web/src/components/forms/profile.tsx:132
|
||||
@ -3176,7 +3137,7 @@ msgstr "Le document a été déplacé avec succès vers l'équipe sélectionnée
|
||||
msgid "The document is now completed, please follow any instructions provided within the parent application."
|
||||
msgstr "Le document est maintenant complet, veuillez suivre toutes les instructions fournies dans l'application parente."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167
|
||||
msgid "The document was created but could not be sent to recipients."
|
||||
msgstr "Le document a été créé mais n'a pas pu être envoyé aux destinataires."
|
||||
|
||||
@ -3184,7 +3145,7 @@ msgstr "Le document a été créé mais n'a pas pu être envoyé aux destinatair
|
||||
msgid "The document will be hidden from your account"
|
||||
msgstr "Le document sera caché de votre compte"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316
|
||||
msgid "The document will be immediately sent to recipients if this is checked."
|
||||
msgstr "Le document sera immédiatement envoyé aux destinataires si cela est coché."
|
||||
|
||||
@ -3636,7 +3597,7 @@ msgstr "Impossible de se connecter"
|
||||
msgid "Unauthorized"
|
||||
msgstr "Non autorisé"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:112
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
|
||||
msgid "Uncompleted"
|
||||
msgstr "Non complet"
|
||||
|
||||
@ -3742,7 +3703,7 @@ msgstr "Utiliser l'authentificateur"
|
||||
msgid "Use Backup Code"
|
||||
msgstr "Utiliser le code de secours"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191
|
||||
msgid "Use Template"
|
||||
msgstr "Utiliser le modèle"
|
||||
|
||||
@ -3848,7 +3809,7 @@ msgstr "Voir les équipes"
|
||||
msgid "Viewed"
|
||||
msgstr "Vu"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:82
|
||||
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
|
||||
msgid "Waiting"
|
||||
msgstr "En attente"
|
||||
|
||||
@ -4176,10 +4137,6 @@ msgstr "Vous êtes sur le point de révoquer l'accès de l'équipe <0>{0}</0> ({
|
||||
msgid "You are currently on the <0>Free Plan</0>."
|
||||
msgstr "Vous êtes actuellement sur le <0>Plan Gratuit</0>."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92
|
||||
#~ msgid "You are currently subscribed to <0>{0}</0>"
|
||||
#~ msgstr "You are currently subscribed to <0>{0}</0>"
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148
|
||||
msgid "You are currently updating <0>{teamMemberName}.</0>"
|
||||
msgstr "Vous mettez à jour actuellement <0>{teamMemberName}.</0>"
|
||||
@ -4224,10 +4181,6 @@ msgstr "Vous ne pouvez pas modifier un membre de l'équipe qui a un rôle plus
|
||||
msgid "You cannot upload encrypted PDFs"
|
||||
msgstr "Vous ne pouvez pas télécharger de PDF cryptés"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97
|
||||
#~ msgid "You currently have an active plan"
|
||||
#~ msgstr "You currently have an active plan"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45
|
||||
msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance."
|
||||
msgstr "Vous n'avez actuellement pas de dossier client, cela ne devrait pas se produire. Veuillez contacter le support pour obtenir de l'aide."
|
||||
@ -4274,7 +4227,7 @@ msgstr "Vous avez atteint la limite maximale de {0} modèles directs. <0>Mettez
|
||||
msgid "You have reached your document limit."
|
||||
msgstr "Vous avez atteint votre limite de documents."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181
|
||||
#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182
|
||||
msgid "You have reached your document limit. <0>Upgrade your account to continue!</0>"
|
||||
msgstr "Vous avez atteint votre limite de documents. <0>Mettez à niveau votre compte pour continuer !</0>"
|
||||
|
||||
@ -4308,10 +4261,6 @@ msgstr "Vous avez vérifié votre adresse e-mail pour <0>{0}</0>."
|
||||
msgid "You must be an admin of this team to manage billing."
|
||||
msgstr "Vous devez être un administrateur de cette équipe pour gérer la facturation."
|
||||
|
||||
#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80
|
||||
#~ msgid "You must enter '{confirmTransferMessage}' to proceed"
|
||||
#~ msgstr "You must enter '{confirmTransferMessage}' to proceed"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60
|
||||
#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58
|
||||
#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54
|
||||
@ -4374,7 +4323,7 @@ msgstr "Vos modèles de signature directe"
|
||||
msgid "Your document failed to upload."
|
||||
msgstr "Votre document a échoué à se télécharger."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151
|
||||
msgid "Your document has been created from the template successfully."
|
||||
msgstr "Votre document a été créé à partir du modèle avec succès."
|
||||
|
||||
@ -4382,7 +4331,7 @@ msgstr "Votre document a été créé à partir du modèle avec succès."
|
||||
msgid "Your document has been re-sent successfully."
|
||||
msgstr "Votre document a été renvoyé avec succès."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:299
|
||||
#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322
|
||||
msgid "Your document has been sent successfully."
|
||||
msgstr "Votre document a été envoyé avec succès."
|
||||
|
||||
|
||||
@ -1 +0,0 @@
|
||||
/*eslint-disable*/module.exports={messages:JSON.parse("{}")};
|
||||
@ -9,10 +9,39 @@ export const ZBaseFieldMeta = z.object({
|
||||
|
||||
export type TBaseFieldMeta = z.infer<typeof ZBaseFieldMeta>;
|
||||
|
||||
export const ZInitialsFieldMeta = z.object({
|
||||
type: z.literal('initials').default('initials'),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TInitialsFieldMeta = z.infer<typeof ZInitialsFieldMeta>;
|
||||
|
||||
export const ZNameFieldMeta = z.object({
|
||||
type: z.literal('name').default('name'),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TNameFieldMeta = z.infer<typeof ZNameFieldMeta>;
|
||||
|
||||
export const ZEmailFieldMeta = z.object({
|
||||
type: z.literal('email').default('email'),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TEmailFieldMeta = z.infer<typeof ZEmailFieldMeta>;
|
||||
|
||||
export const ZDateFieldMeta = z.object({
|
||||
type: z.literal('date').default('date'),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TDateFieldMeta = z.infer<typeof ZDateFieldMeta>;
|
||||
|
||||
export const ZTextFieldMeta = ZBaseFieldMeta.extend({
|
||||
type: z.literal('text').default('text'),
|
||||
text: z.string().optional(),
|
||||
characterLimit: z.number().optional(),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TTextFieldMeta = z.infer<typeof ZTextFieldMeta>;
|
||||
@ -23,6 +52,7 @@ export const ZNumberFieldMeta = ZBaseFieldMeta.extend({
|
||||
value: z.string().optional(),
|
||||
minValue: z.number().optional(),
|
||||
maxValue: z.number().optional(),
|
||||
fontSize: z.number().min(8).max(96).optional(),
|
||||
});
|
||||
|
||||
export type TNumberFieldMeta = z.infer<typeof ZNumberFieldMeta>;
|
||||
@ -69,6 +99,10 @@ export type TDropdownFieldMeta = z.infer<typeof ZDropdownFieldMeta>;
|
||||
|
||||
export const ZFieldMetaSchema = z
|
||||
.union([
|
||||
ZBaseFieldMeta.extend(ZInitialsFieldMeta.shape),
|
||||
ZBaseFieldMeta.extend(ZNameFieldMeta.shape),
|
||||
ZBaseFieldMeta.extend(ZEmailFieldMeta.shape),
|
||||
ZBaseFieldMeta.extend(ZDateFieldMeta.shape),
|
||||
ZTextFieldMeta,
|
||||
ZNumberFieldMeta,
|
||||
ZRadioFieldMeta,
|
||||
|
||||
@ -362,7 +362,7 @@ export const formatDocumentAuditLogAction = (auditLog: TDocumentAuditLog, userId
|
||||
})
|
||||
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.EMAIL_SENT }, ({ data }) => ({
|
||||
anonymous: `Email ${data.isResending ? 'resent' : 'sent'}`,
|
||||
identified: `${data.isResending ? 'resent' : 'sent'} an email`,
|
||||
identified: `${data.isResending ? 'resent' : 'sent'} an email to ${data.recipientEmail}`,
|
||||
}))
|
||||
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_COMPLETED }, () => {
|
||||
// Clear the prefix since this should be considered an 'anonymous' event.
|
||||
|
||||
@ -39,3 +39,27 @@ export const validateFieldsInserted = (fields: Field[]): boolean => {
|
||||
|
||||
return uninsertedFields.length === 0;
|
||||
};
|
||||
|
||||
export const validateFieldsUninserted = (): boolean => {
|
||||
const fieldCardElements = document.getElementsByClassName('react-draggable');
|
||||
|
||||
const errorElements: HTMLElement[] = [];
|
||||
|
||||
Array.from(fieldCardElements).forEach((element) => {
|
||||
const innerDiv = element.querySelector('div');
|
||||
const hasError = innerDiv?.getAttribute('data-error') === 'true';
|
||||
|
||||
if (hasError) {
|
||||
errorElements.push(element as HTMLElement);
|
||||
} else {
|
||||
element.removeAttribute('data-error');
|
||||
}
|
||||
});
|
||||
|
||||
if (errorElements.length > 0) {
|
||||
errorElements[0].scrollIntoView({ behavior: 'smooth', block: 'center' });
|
||||
return false;
|
||||
}
|
||||
|
||||
return errorElements.length === 0;
|
||||
};
|
||||
|
||||