fix: merge conflicts

This commit is contained in:
Ephraim Atta-Duncan
2024-10-28 10:09:49 +00:00
47 changed files with 7453 additions and 840 deletions

View File

@ -1,11 +1,11 @@
{
"name": "@documenso/marketing",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"private": true,
"license": "AGPL-3.0",
"scripts": {
"dev": "next dev -p 3001",
"build": "turbo run translate:extract && turbo run translate:compile && 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",

View File

@ -1,11 +1,11 @@
{
"name": "@documenso/web",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"private": true,
"license": "AGPL-3.0",
"scripts": {
"dev": "next dev -p 3000",
"build": "turbo run translate:extract && turbo run translate:compile && 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",

View File

@ -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}
/>

View File

@ -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}
/>

View File

@ -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>

View File

@ -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`}

View File

@ -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>

View File

@ -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"

View File

@ -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} />

8
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "@documenso/root",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@documenso/root",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"workspaces": [
"apps/*",
"packages/*"
@ -80,7 +80,7 @@
},
"apps/marketing": {
"name": "@documenso/marketing",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"license": "AGPL-3.0",
"dependencies": {
"@documenso/assets": "*",
@ -441,7 +441,7 @@
},
"apps/web": {
"name": "@documenso/web",
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"license": "AGPL-3.0",
"dependencies": {
"@documenso/api": "*",

View File

@ -1,6 +1,6 @@
{
"private": true,
"version": "1.7.2-rc.0",
"version": "1.7.2-rc.1",
"scripts": {
"build": "turbo run build",
"build:web": "turbo run build --filter=@documenso/web",

View File

@ -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,

View File

@ -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,
},
};
}),
});

View File

@ -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),
});

View 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();
});
});

View File

@ -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 || ''));

View File

@ -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": "",

View File

@ -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>;

View File

@ -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,
},
});

View File

@ -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,
},
});

View File

@ -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,
},
});
};

View File

@ -8,6 +8,7 @@ export const getUserTokens = async ({ userId }: GetUserTokensOptions) => {
return await prisma.apiToken.findMany({
where: {
userId,
teamId: null,
},
select: {
id: true,

View File

@ -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,
};
};

View File

@ -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);

View File

@ -51,6 +51,11 @@ export const findTemplates = async ({
},
Field: true,
Recipient: true,
templateMeta: {
select: {
signingOrder: true,
},
},
directLink: {
select: {
token: true,

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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"
@ -115,7 +115,7 @@ msgstr "Admin"
msgid "Advanced Options"
msgstr "Erweiterte Optionen"
#: packages/ui/primitives/document-flow/add-fields.tsx:565
#: 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"
@ -145,11 +145,11 @@ 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"
@ -162,10 +162,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 "Cannot update signer because they have already signed a field"
#: packages/lib/constants/recipient-roles.ts:17
msgid "Cc"
msgstr "Cc"
@ -183,7 +179,7 @@ msgstr "CC'd"
msgid "Character Limit"
msgstr "Zeichenbeschränkung"
#: packages/ui/primitives/document-flow/add-fields.tsx:993
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
msgid "Checkbox"
msgstr "Checkbox"
@ -196,7 +192,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"
@ -216,7 +212,7 @@ msgstr ""
msgid "Configure Direct Recipient"
msgstr "Direkten Empfänger konfigurieren"
#: packages/ui/primitives/document-flow/add-fields.tsx:566
#: 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}"
@ -237,7 +233,7 @@ msgstr ""
msgid "Custom Text"
msgstr "Benutzerdefinierter Text"
#: packages/ui/primitives/document-flow/add-fields.tsx:889
#: packages/ui/primitives/document-flow/add-fields.tsx:922
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
msgid "Date"
msgstr "Datum"
@ -293,7 +289,7 @@ msgstr ""
msgid "Drag & drop your PDF here."
msgstr "Ziehen Sie Ihr PDF hierher."
#: packages/ui/primitives/document-flow/add-fields.tsx:1019
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
msgid "Dropdown"
msgstr "Dropdown"
@ -302,7 +298,7 @@ msgstr "Dropdown"
msgid "Dropdown options"
msgstr "Dropdown-Optionen"
#: packages/ui/primitives/document-flow/add-fields.tsx:837
#: 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
@ -315,7 +311,7 @@ msgstr "E-Mail"
msgid "Email Options"
msgstr "E-Mail-Optionen"
#: packages/ui/primitives/document-flow/add-fields.tsx:1082
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
msgid "Empty field"
msgstr "Leeres Feld"
@ -328,6 +324,10 @@ 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"
@ -356,7 +356,7 @@ msgstr "Zeichenbeschränkung des Feldes"
#: 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 ""
msgstr "Feldschriftgröße"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
msgid "Field format"
@ -377,7 +377,7 @@ msgstr "Feldplatzhalter"
#: 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 ""
msgstr "Schriftgröße"
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
msgid "Global recipient action authentication"
@ -387,7 +387,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"
@ -407,6 +407,7 @@ 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"
<<<<<<< HEAD
#: 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"
@ -415,6 +416,13 @@ msgstr "Ich bin verpflichtet, eine Kopie dieses Dokuments zu erhalten"
msgid "Inbox"
msgstr ""
||||||| e0c948c2
#: 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"
=======
>>>>>>> main
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
msgid "Inherit authentication method"
@ -447,7 +455,7 @@ msgstr "Nachricht <0>(Optional)</0>"
msgid "Min"
msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:863
#: 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
@ -469,12 +477,12 @@ msgstr "Muss unterzeichnen"
msgid "Needs to view"
msgstr "Muss sehen"
#: packages/ui/primitives/document-flow/add-fields.tsx:674
#: 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:690
#: 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"
@ -499,7 +507,7 @@ msgstr "Kein Unterschriftsfeld gefunden"
msgid "No value found."
msgstr "Kein Wert gefunden."
#: packages/ui/primitives/document-flow/add-fields.tsx:941
#: packages/ui/primitives/document-flow/add-fields.tsx:974
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
msgid "Number"
msgstr "Nummer"
@ -538,7 +546,7 @@ msgstr "Wählen Sie eine Zahl"
msgid "Placeholder"
msgstr "Platzhalter"
#: packages/ui/primitives/document-flow/add-fields.tsx:967
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
msgid "Radio"
msgstr "Radio"
@ -565,7 +573,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"
@ -574,7 +582,7 @@ msgstr "Rot"
msgid "Redirect URL"
msgstr "Weiterleitungs-URL"
#: packages/ui/primitives/document-flow/add-fields.tsx:1069
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
msgid "Remove"
msgstr "Entfernen"
@ -646,6 +654,7 @@ msgstr "Erweiterte Einstellungen anzeigen"
msgid "Sign"
msgstr "Unterschreiben"
<<<<<<< HEAD
#: packages/ui/components/document/next-inbox-item-button.tsx:70
msgid "Sign Next Document"
msgstr ""
@ -653,6 +662,11 @@ msgstr ""
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| f05b670d
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| e0c948c2
#: packages/ui/primitives/document-flow/add-fields.tsx:785
=======
#: packages/ui/primitives/document-flow/add-fields.tsx:818
>>>>>>> main
#: 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
@ -700,7 +714,7 @@ msgstr "Einreichen"
msgid "Template title"
msgstr "Vorlagentitel"
#: packages/ui/primitives/document-flow/add-fields.tsx:915
#: packages/ui/primitives/document-flow/add-fields.tsx:948
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
msgid "Text"
msgstr "Text"
@ -761,7 +775,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:746
#: 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."
@ -773,14 +787,10 @@ 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:1050
#: 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 "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: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 "Dieser Unterzeichner hat das Dokument bereits unterschrieben."
@ -798,7 +808,7 @@ msgstr "Zeitzone"
msgid "Title"
msgstr "Titel"
#: packages/ui/primitives/document-flow/add-fields.tsx:1033
#: 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."
@ -832,23 +842,19 @@ msgstr "Wert"
#: packages/lib/constants/recipient-roles.ts:26
#: packages/ui/components/document/next-inbox-item-button.tsx:119
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?"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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."
@ -377,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 "Part-Time"
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
msgid "Premium Profile Name"
msgstr "Premium Profilname"
@ -430,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."

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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/(signing)/sign/[token]/form.tsx:115
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
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
@ -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"
@ -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
@ -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."
@ -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"
@ -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."

View File

@ -110,7 +110,7 @@ msgstr "Admin"
msgid "Advanced Options"
msgstr "Advanced Options"
#: packages/ui/primitives/document-flow/add-fields.tsx:565
#: 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"
@ -140,11 +140,11 @@ 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"
@ -157,10 +157,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"
@ -178,7 +174,7 @@ msgstr "CC'd"
msgid "Character Limit"
msgstr "Character Limit"
#: packages/ui/primitives/document-flow/add-fields.tsx:993
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
msgid "Checkbox"
msgstr "Checkbox"
@ -191,7 +187,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"
@ -211,7 +207,7 @@ msgstr "Completed"
msgid "Configure Direct Recipient"
msgstr "Configure Direct Recipient"
#: packages/ui/primitives/document-flow/add-fields.tsx:566
#: 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"
@ -232,7 +228,7 @@ msgstr "Created {0}"
msgid "Custom Text"
msgstr "Custom Text"
#: packages/ui/primitives/document-flow/add-fields.tsx:889
#: packages/ui/primitives/document-flow/add-fields.tsx:922
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
msgid "Date"
msgstr "Date"
@ -288,7 +284,7 @@ msgstr "Draft"
msgid "Drag & drop your PDF here."
msgstr "Drag & drop your PDF here."
#: packages/ui/primitives/document-flow/add-fields.tsx:1019
#: packages/ui/primitives/document-flow/add-fields.tsx:1052
#: packages/ui/primitives/template-flow/add-template-fields.tsx:814
msgid "Dropdown"
msgstr "Dropdown"
@ -297,7 +293,7 @@ msgstr "Dropdown"
msgid "Dropdown options"
msgstr "Dropdown options"
#: packages/ui/primitives/document-flow/add-fields.tsx:837
#: 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
@ -310,7 +306,7 @@ msgstr "Email"
msgid "Email Options"
msgstr "Email Options"
#: packages/ui/primitives/document-flow/add-fields.tsx:1082
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
msgid "Empty field"
msgstr "Empty field"
@ -323,6 +319,10 @@ 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"
@ -382,7 +382,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"
@ -402,6 +402,7 @@ 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"
<<<<<<< HEAD
#: 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"
@ -410,6 +411,13 @@ msgstr "I am required to receive a copy of this document"
msgid "Inbox"
msgstr "Inbox"
||||||| e0c948c2
#: 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"
=======
>>>>>>> main
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
msgid "Inherit authentication method"
@ -442,7 +450,7 @@ msgstr "Message <0>(Optional)</0>"
msgid "Min"
msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:863
#: 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
@ -464,12 +472,12 @@ msgstr "Needs to sign"
msgid "Needs to view"
msgstr "Needs to view"
#: packages/ui/primitives/document-flow/add-fields.tsx:674
#: 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:690
#: 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"
@ -494,7 +502,7 @@ msgstr "No signature field found"
msgid "No value found."
msgstr "No value found."
#: packages/ui/primitives/document-flow/add-fields.tsx:941
#: packages/ui/primitives/document-flow/add-fields.tsx:974
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
msgid "Number"
msgstr "Number"
@ -533,7 +541,7 @@ msgstr "Pick a number"
msgid "Placeholder"
msgstr "Placeholder"
#: packages/ui/primitives/document-flow/add-fields.tsx:967
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
msgid "Radio"
msgstr "Radio"
@ -560,7 +568,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"
@ -569,7 +577,7 @@ msgstr "Red"
msgid "Redirect URL"
msgstr "Redirect URL"
#: packages/ui/primitives/document-flow/add-fields.tsx:1069
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
msgid "Remove"
msgstr "Remove"
@ -641,6 +649,7 @@ msgstr "Show advanced settings"
msgid "Sign"
msgstr "Sign"
<<<<<<< HEAD
#: packages/ui/components/document/next-inbox-item-button.tsx:70
msgid "Sign Next Document"
msgstr "Sign Next Document"
@ -648,6 +657,11 @@ msgstr "Sign Next Document"
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| f05b670d
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| e0c948c2
#: packages/ui/primitives/document-flow/add-fields.tsx:785
=======
#: packages/ui/primitives/document-flow/add-fields.tsx:818
>>>>>>> main
#: 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
@ -695,7 +709,7 @@ msgstr "Submit"
msgid "Template title"
msgstr "Template title"
#: packages/ui/primitives/document-flow/add-fields.tsx:915
#: packages/ui/primitives/document-flow/add-fields.tsx:948
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
msgid "Text"
msgstr "Text"
@ -756,7 +770,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:746
#: 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."
@ -768,14 +782,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:1050
#: 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."
@ -793,7 +803,7 @@ msgstr "Time Zone"
msgid "Title"
msgstr "Title"
#: packages/ui/primitives/document-flow/add-fields.tsx:1033
#: 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."
@ -841,10 +851,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?"

View File

@ -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."
@ -372,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"
@ -425,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."

View File

@ -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/(signing)/sign/[token]/form.tsx:115
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
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
@ -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"
@ -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
@ -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."
@ -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"
@ -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."

View 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."

View 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. Thats 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 dont 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 "Its 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."

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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"
@ -115,7 +115,7 @@ msgstr "Administrateur"
msgid "Advanced Options"
msgstr "Options avancées"
#: packages/ui/primitives/document-flow/add-fields.tsx:565
#: 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"
@ -145,11 +145,11 @@ 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"
@ -162,10 +162,6 @@ msgstr "Annuler"
msgid "Cannot remove signer"
msgstr "Impossible de retirer le signataire"
#: 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"
@ -183,7 +179,7 @@ msgstr "CC'd"
msgid "Character Limit"
msgstr "Limite de caractères"
#: packages/ui/primitives/document-flow/add-fields.tsx:993
#: packages/ui/primitives/document-flow/add-fields.tsx:1026
#: packages/ui/primitives/template-flow/add-template-fields.tsx:788
msgid "Checkbox"
msgstr "Case à cocher"
@ -196,7 +192,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"
@ -216,7 +212,7 @@ msgstr ""
msgid "Configure Direct Recipient"
msgstr "Configurer le destinataire direct"
#: packages/ui/primitives/document-flow/add-fields.tsx:566
#: 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}"
@ -237,7 +233,7 @@ msgstr ""
msgid "Custom Text"
msgstr "Texte personnalisé"
#: packages/ui/primitives/document-flow/add-fields.tsx:889
#: packages/ui/primitives/document-flow/add-fields.tsx:922
#: packages/ui/primitives/template-flow/add-template-fields.tsx:684
msgid "Date"
msgstr "Date"
@ -293,7 +289,7 @@ msgstr ""
msgid "Drag & drop your PDF here."
msgstr "Faites glisser et déposez votre PDF ici."
#: packages/ui/primitives/document-flow/add-fields.tsx:1019
#: 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"
@ -302,7 +298,7 @@ msgstr "Liste déroulante"
msgid "Dropdown options"
msgstr "Options de liste déroulante"
#: packages/ui/primitives/document-flow/add-fields.tsx:837
#: 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
@ -315,7 +311,7 @@ msgstr "Email"
msgid "Email Options"
msgstr "Options d'email"
#: packages/ui/primitives/document-flow/add-fields.tsx:1082
#: packages/ui/primitives/document-flow/add-fields.tsx:1117
msgid "Empty field"
msgstr "Champ vide"
@ -328,6 +324,10 @@ 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"
@ -356,7 +356,7 @@ msgstr "Limite de caractères du champ"
#: 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 ""
msgstr "Taille de police du champ"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
msgid "Field format"
@ -377,7 +377,7 @@ msgstr "Espace réservé du champ"
#: 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 ""
msgstr "Taille de Police"
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
msgid "Global recipient action authentication"
@ -387,7 +387,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"
@ -407,6 +407,7 @@ 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"
<<<<<<< HEAD
#: 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"
@ -415,6 +416,13 @@ msgstr "Je dois recevoir une copie de ce document"
msgid "Inbox"
msgstr ""
||||||| e0c948c2
#: 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"
=======
>>>>>>> main
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:29
#: packages/ui/components/recipient/recipient-action-auth-select.tsx:87
msgid "Inherit authentication method"
@ -447,7 +455,7 @@ msgstr "Message <0>(Optionnel)</0>"
msgid "Min"
msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:863
#: 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
@ -469,12 +477,12 @@ msgstr "Nécessite une signature"
msgid "Needs to view"
msgstr "Nécessite une visualisation"
#: packages/ui/primitives/document-flow/add-fields.tsx:674
#: 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:690
#: 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"
@ -499,7 +507,7 @@ msgstr "Aucun champ de signature trouvé"
msgid "No value found."
msgstr "Aucune valeur trouvée."
#: packages/ui/primitives/document-flow/add-fields.tsx:941
#: packages/ui/primitives/document-flow/add-fields.tsx:974
#: packages/ui/primitives/template-flow/add-template-fields.tsx:736
msgid "Number"
msgstr "Numéro"
@ -538,7 +546,7 @@ msgstr "Choisissez un numéro"
msgid "Placeholder"
msgstr "Espace réservé"
#: packages/ui/primitives/document-flow/add-fields.tsx:967
#: packages/ui/primitives/document-flow/add-fields.tsx:1000
#: packages/ui/primitives/template-flow/add-template-fields.tsx:762
msgid "Radio"
msgstr "Radio"
@ -565,7 +573,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"
@ -574,7 +582,7 @@ msgstr "Rouge"
msgid "Redirect URL"
msgstr "URL de redirection"
#: packages/ui/primitives/document-flow/add-fields.tsx:1069
#: packages/ui/primitives/document-flow/add-fields.tsx:1104
msgid "Remove"
msgstr "Retirer"
@ -646,6 +654,7 @@ msgstr "Afficher les paramètres avancés"
msgid "Sign"
msgstr "Signer"
<<<<<<< HEAD
#: packages/ui/components/document/next-inbox-item-button.tsx:70
msgid "Sign Next Document"
msgstr ""
@ -653,6 +662,11 @@ msgstr ""
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| f05b670d
#: packages/ui/primitives/document-flow/add-fields.tsx:742
||||||| e0c948c2
#: packages/ui/primitives/document-flow/add-fields.tsx:785
=======
#: packages/ui/primitives/document-flow/add-fields.tsx:818
>>>>>>> main
#: 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
@ -700,7 +714,7 @@ msgstr "Soumettre"
msgid "Template title"
msgstr "Titre du modèle"
#: packages/ui/primitives/document-flow/add-fields.tsx:915
#: packages/ui/primitives/document-flow/add-fields.tsx:948
#: packages/ui/primitives/template-flow/add-template-fields.tsx:710
msgid "Text"
msgstr "Texte"
@ -761,7 +775,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:746
#: 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."
@ -773,14 +787,10 @@ 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:1050
#: 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 "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: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 "Ce signataire a déjà signé le document."
@ -798,7 +808,7 @@ msgstr "Fuseau horaire"
msgid "Title"
msgstr "Titre"
#: packages/ui/primitives/document-flow/add-fields.tsx:1033
#: 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}."
@ -846,10 +856,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 ?"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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."
@ -377,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 "Part-Time"
#: apps/marketing/src/components/(marketing)/pricing-table.tsx:151
msgid "Premium Profile Name"
msgstr "Nom de profil premium"
@ -430,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."

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-10-08 12:05\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/(signing)/sign/[token]/form.tsx:115
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
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
@ -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é"
@ -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
@ -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é."
@ -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"
@ -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."

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "DocumentMeta" ADD COLUMN "enabledTypedSignature" BOOLEAN NOT NULL DEFAULT false;

View File

@ -0,0 +1,9 @@
/*
Warnings:
- You are about to drop the column `enabledTypedSignature` on the `DocumentMeta` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "DocumentMeta" DROP COLUMN "enabledTypedSignature",
ADD COLUMN "typedSignatureEnabled" BOOLEAN NOT NULL DEFAULT false;

View File

@ -359,16 +359,17 @@ model DocumentData {
}
model DocumentMeta {
id String @id @default(cuid())
subject String?
message String?
timezone String? @default("Etc/UTC") @db.Text
password String?
dateFormat String? @default("yyyy-MM-dd hh:mm a") @db.Text
documentId Int @unique
document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
redirectUrl String?
signingOrder DocumentSigningOrder @default(PARALLEL)
id String @id @default(cuid())
subject String?
message String?
timezone String? @default("Etc/UTC") @db.Text
password String?
dateFormat String? @default("yyyy-MM-dd hh:mm a") @db.Text
documentId Int @unique
document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
redirectUrl String?
signingOrder DocumentSigningOrder @default(PARALLEL)
typedSignatureEnabled Boolean @default(false)
}
enum ReadStatus {

View File

@ -42,7 +42,7 @@ export const seedTeam = async ({
createMany: {
data: [teamOwner, ...teamMembers].map((user) => ({
userId: user.id,
role: TeamMemberRole.ADMIN,
role: user === teamOwner ? TeamMemberRole.ADMIN : TeamMemberRole.MEMBER,
})),
},
},

View File

@ -42,6 +42,7 @@ import {
ZSetSettingsForDocumentMutationSchema,
ZSetSigningOrderForDocumentMutationSchema,
ZSetTitleForDocumentMutationSchema,
ZUpdateTypedSignatureSettingsMutationSchema,
} from './schema';
export const documentRouter = router({
@ -332,6 +333,46 @@ export const documentRouter = router({
}
}),
updateTypedSignatureSettings: authenticatedProcedure
.input(ZUpdateTypedSignatureSettingsMutationSchema)
.mutation(async ({ input, ctx }) => {
try {
const { documentId, teamId, typedSignatureEnabled } = input;
const document = await getDocumentById({
id: documentId,
teamId,
userId: ctx.user.id,
}).catch(() => null);
if (!document) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'Document not found',
});
}
return await upsertDocumentMeta({
documentId,
typedSignatureEnabled,
userId: ctx.user.id,
requestMetadata: extractNextApiRequestMetadata(ctx.req),
});
} catch (err) {
console.error(err);
if (err instanceof TRPCError) {
throw err;
}
throw new TRPCError({
code: 'BAD_REQUEST',
message:
'We were unable to update the settings for this document. Please try again later.',
});
}
}),
sendDocument: authenticatedProcedure
.input(ZSendDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {

View File

@ -158,6 +158,16 @@ export type TSetSigningOrderForDocumentMutationSchema = z.infer<
typeof ZSetSigningOrderForDocumentMutationSchema
>;
export const ZUpdateTypedSignatureSettingsMutationSchema = z.object({
documentId: z.number(),
teamId: z.number().optional(),
typedSignatureEnabled: z.boolean(),
});
export type TUpdateTypedSignatureSettingsMutationSchema = z.infer<
typeof ZUpdateTypedSignatureSettingsMutationSchema
>;
export const ZResendDocumentMutationSchema = z.object({
documentId: z.number(),
recipients: z.array(z.number()).min(1),

View File

@ -47,7 +47,9 @@ import { cn } from '../../lib/utils';
import { Alert, AlertDescription } from '../alert';
import { Button } from '../button';
import { Card, CardContent } from '../card';
import { Checkbox } from '../checkbox';
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../command';
import { Form, FormControl, FormField, FormItem, FormLabel } from '../form/form';
import { Popover, PopoverContent, PopoverTrigger } from '../popover';
import { useStep } from '../stepper';
import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';
@ -96,6 +98,7 @@ export type AddFieldsFormProps = {
onSubmit: (_data: TAddFieldsFormSchema) => void;
canGoBack?: boolean;
isDocumentPdfLoaded: boolean;
typedSignatureEnabled?: boolean;
teamId?: number;
};
@ -107,6 +110,7 @@ export const AddFieldsFormPartial = ({
onSubmit,
canGoBack = false,
isDocumentPdfLoaded,
typedSignatureEnabled,
teamId,
}: AddFieldsFormProps) => {
const { toast } = useToast();
@ -120,13 +124,7 @@ export const AddFieldsFormPartial = ({
const [showAdvancedSettings, setShowAdvancedSettings] = useState(false);
const [currentField, setCurrentField] = useState<FieldFormType>();
const {
control,
handleSubmit,
formState: { isSubmitting },
setValue,
getValues,
} = useForm<TAddFieldsFormSchema>({
const form = useForm<TAddFieldsFormSchema>({
defaultValues: {
fields: fields.map((field) => ({
nativeId: field.id,
@ -141,6 +139,7 @@ export const AddFieldsFormPartial = ({
recipients.find((recipient) => recipient.id === field.recipientId)?.email ?? '',
fieldMeta: field.fieldMeta ? ZFieldMetaSchema.parse(field.fieldMeta) : undefined,
})),
typedSignatureEnabled: typedSignatureEnabled ?? false,
},
});
@ -148,10 +147,10 @@ export const AddFieldsFormPartial = ({
useHotkeys(['ctrl+v', 'meta+v'], (evt) => onFieldPaste(evt));
useHotkeys(['ctrl+d', 'meta+d'], (evt) => onFieldCopy(evt, { duplicate: true }));
const onFormSubmit = handleSubmit(onSubmit);
const onFormSubmit = form.handleSubmit(onSubmit);
const handleSavedFieldSettings = (fieldState: FieldMeta) => {
const initialValues = getValues();
const initialValues = form.getValues();
const updatedFields = initialValues.fields.map((field) => {
if (field.formId === currentField?.formId) {
@ -166,7 +165,7 @@ export const AddFieldsFormPartial = ({
return field;
});
setValue('fields', updatedFields);
form.setValue('fields', updatedFields);
};
const {
@ -175,7 +174,7 @@ export const AddFieldsFormPartial = ({
update,
fields: localFields,
} = useFieldArray({
control,
control: form.control,
name: 'fields',
});
@ -530,6 +529,12 @@ export const AddFieldsFormPartial = ({
);
}, [recipientsByRole]);
const isTypedSignatureEnabled = form.watch('typedSignatureEnabled');
const handleTypedSignatureChange = (value: boolean) => {
form.setValue('typedSignatureEnabled', value, { shouldDirty: true });
};
const handleAdvancedSettings = () => {
setShowAdvancedSettings((prev) => !prev);
};
@ -577,6 +582,7 @@ export const AddFieldsFormPartial = ({
title={documentFlow.title}
description={documentFlow.description}
/>
<DocumentFlowFormContainerContent>
<div className="flex flex-col">
{selectedField && (
@ -760,269 +766,297 @@ export const AddFieldsFormPartial = ({
</Popover>
)}
<div className="-mx-2 flex-1 overflow-y-auto px-2">
<fieldset disabled={isFieldsDisabled} className="my-2 grid grid-cols-3 gap-4">
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.SIGNATURE)}
onMouseDown={() => setSelectedField(FieldType.SIGNATURE)}
data-selected={selectedField === FieldType.SIGNATURE ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-lg font-normal',
fontCaveat.className,
)}
>
<Trans>Signature</Trans>
</p>
</CardContent>
</Card>
</button>
<Form {...form}>
<FormField
control={form.control}
name="typedSignatureEnabled"
render={({ field: { value, ...field } }) => (
<FormItem className="mb-6 flex flex-row items-center space-x-2 space-y-0">
<FormControl>
<Checkbox
{...field}
id="typedSignatureEnabled"
checkClassName="text-white"
checked={value}
onCheckedChange={(checked) => field.onChange(checked)}
disabled={form.formState.isSubmitting}
/>
</FormControl>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.INITIALS)}
onMouseDown={() => setSelectedField(FieldType.INITIALS)}
data-selected={selectedField === FieldType.INITIALS ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Contact className="h-4 w-4" />
Initials
</p>
</CardContent>
</Card>
</button>
<FormLabel
htmlFor="typedSignatureEnabled"
className="text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
<Trans>Enable Typed Signatures</Trans>
</FormLabel>
</FormItem>
)}
/>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.EMAIL)}
onMouseDown={() => setSelectedField(FieldType.EMAIL)}
data-selected={selectedField === FieldType.EMAIL ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<div className="-mx-2 flex-1 overflow-y-auto px-2">
<fieldset disabled={isFieldsDisabled} className="my-2 grid grid-cols-3 gap-4">
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.SIGNATURE)}
onMouseDown={() => setSelectedField(FieldType.SIGNATURE)}
data-selected={selectedField === FieldType.SIGNATURE ? true : undefined}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Mail className="h-4 w-4" />
<Trans>Email</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-lg font-normal',
fontCaveat.className,
)}
>
<Trans>Signature</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.NAME)}
onMouseDown={() => setSelectedField(FieldType.NAME)}
data-selected={selectedField === FieldType.NAME ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.INITIALS)}
onMouseDown={() => setSelectedField(FieldType.INITIALS)}
data-selected={selectedField === FieldType.INITIALS ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<User className="h-4 w-4" />
<Trans>Name</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Contact className="h-4 w-4" />
Initials
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.DATE)}
onMouseDown={() => setSelectedField(FieldType.DATE)}
data-selected={selectedField === FieldType.DATE ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.EMAIL)}
onMouseDown={() => setSelectedField(FieldType.EMAIL)}
data-selected={selectedField === FieldType.EMAIL ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<CalendarDays className="h-4 w-4" />
<Trans>Date</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="flex flex-col items-center justify-center px-6 py-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Mail className="h-4 w-4" />
<Trans>Email</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.TEXT)}
onMouseDown={() => setSelectedField(FieldType.TEXT)}
data-selected={selectedField === FieldType.TEXT ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.NAME)}
onMouseDown={() => setSelectedField(FieldType.NAME)}
data-selected={selectedField === FieldType.NAME ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Type className="h-4 w-4" />
<Trans>Text</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<User className="h-4 w-4" />
<Trans>Name</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.NUMBER)}
onMouseDown={() => setSelectedField(FieldType.NUMBER)}
data-selected={selectedField === FieldType.NUMBER ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.DATE)}
onMouseDown={() => setSelectedField(FieldType.DATE)}
data-selected={selectedField === FieldType.DATE ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Hash className="h-4 w-4" />
<Trans>Number</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<CalendarDays className="h-4 w-4" />
<Trans>Date</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.RADIO)}
onMouseDown={() => setSelectedField(FieldType.RADIO)}
data-selected={selectedField === FieldType.RADIO ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.TEXT)}
onMouseDown={() => setSelectedField(FieldType.TEXT)}
data-selected={selectedField === FieldType.TEXT ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Disc className="h-4 w-4" />
<Trans>Radio</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Type className="h-4 w-4" />
<Trans>Text</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.CHECKBOX)}
onMouseDown={() => setSelectedField(FieldType.CHECKBOX)}
data-selected={selectedField === FieldType.CHECKBOX ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.NUMBER)}
onMouseDown={() => setSelectedField(FieldType.NUMBER)}
data-selected={selectedField === FieldType.NUMBER ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<CheckSquare className="h-4 w-4" />
<Trans>Checkbox</Trans>
</p>
</CardContent>
</Card>
</button>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Hash className="h-4 w-4" />
<Trans>Number</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.DROPDOWN)}
onMouseDown={() => setSelectedField(FieldType.DROPDOWN)}
data-selected={selectedField === FieldType.DROPDOWN ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.RADIO)}
onMouseDown={() => setSelectedField(FieldType.RADIO)}
data-selected={selectedField === FieldType.RADIO ? true : undefined}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<ChevronDown className="h-4 w-4" />
<Trans>Dropdown</Trans>
</p>
</CardContent>
</Card>
</button>
</fieldset>
</div>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<Disc className="h-4 w-4" />
<Trans>Radio</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.CHECKBOX)}
onMouseDown={() => setSelectedField(FieldType.CHECKBOX)}
data-selected={selectedField === FieldType.CHECKBOX ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<CheckSquare className="h-4 w-4" />
<Trans>Checkbox</Trans>
</p>
</CardContent>
</Card>
</button>
<button
type="button"
className="group h-full w-full"
onClick={() => setSelectedField(FieldType.DROPDOWN)}
onMouseDown={() => setSelectedField(FieldType.DROPDOWN)}
data-selected={selectedField === FieldType.DROPDOWN ? true : undefined}
>
<Card
className={cn(
'flex h-full w-full cursor-pointer items-center justify-center group-disabled:opacity-50',
// selectedSignerStyles.borderClass,
)}
>
<CardContent className="p-4">
<p
className={cn(
'text-muted-foreground group-data-[selected]:text-foreground flex items-center justify-center gap-x-1.5 text-sm font-normal',
)}
>
<ChevronDown className="h-4 w-4" />
<Trans>Dropdown</Trans>
</p>
</CardContent>
</Card>
</button>
</fieldset>
</div>
</Form>
</div>
</DocumentFlowFormContainerContent>
@ -1059,8 +1093,9 @@ export const AddFieldsFormPartial = ({
<DocumentFlowFormContainerStep step={currentStep} maxStep={totalSteps} />
<DocumentFlowFormContainerActions
loading={isSubmitting}
disabled={isSubmitting}
loading={form.formState.isSubmitting}
disabled={form.formState.isSubmitting}
disableNextStep={hasErrors}
onGoBackClick={() => {
previousStep();
remove();

View File

@ -18,6 +18,7 @@ export const ZAddFieldsFormSchema = z.object({
fieldMeta: ZFieldMetaSchema,
}),
),
typedSignatureEnabled: z.boolean(),
});
export type TAddFieldsFormSchema = z.infer<typeof ZAddFieldsFormSchema>;

View File

@ -3,12 +3,15 @@
import type { HTMLAttributes, MouseEvent, PointerEvent, TouchEvent } from 'react';
import { useEffect, useMemo, useRef, useState } from 'react';
import { Caveat } from 'next/font/google';
import { Trans } from '@lingui/macro';
import { Undo2 } from 'lucide-react';
import type { StrokeOptions } from 'perfect-freehand';
import { getStroke } from 'perfect-freehand';
import { unsafe_useEffectOnce } from '@documenso/lib/client-only/hooks/use-effect-once';
import { Input } from '@documenso/ui/primitives/input';
import {
Select,
SelectContent,
@ -21,12 +24,20 @@ import { cn } from '../../lib/utils';
import { getSvgPathFromStroke } from './helper';
import { Point } from './point';
const fontCaveat = Caveat({
weight: ['500'],
subsets: ['latin'],
display: 'swap',
variable: '--font-caveat',
});
const DPI = 2;
export type SignaturePadProps = Omit<HTMLAttributes<HTMLCanvasElement>, 'onChange'> & {
onChange?: (_signatureDataUrl: string | null) => void;
containerClassName?: string;
disabled?: boolean;
allowTypedSignature?: boolean;
};
export const SignaturePad = ({
@ -35,6 +46,7 @@ export const SignaturePad = ({
defaultValue,
onChange,
disabled = false,
allowTypedSignature,
...props
}: SignaturePadProps) => {
const $el = useRef<HTMLCanvasElement>(null);
@ -44,6 +56,7 @@ export const SignaturePad = ({
const [lines, setLines] = useState<Point[][]>([]);
const [currentLine, setCurrentLine] = useState<Point[]>([]);
const [selectedColor, setSelectedColor] = useState('black');
const [typedSignature, setTypedSignature] = useState('');
const perfectFreehandOptions = useMemo(() => {
const size = $el.current ? Math.min($el.current.height, $el.current.width) * 0.03 : 10;
@ -181,34 +194,107 @@ export const SignaturePad = ({
onChange?.(null);
setTypedSignature('');
setLines([]);
setCurrentLine([]);
};
const renderTypedSignature = () => {
if ($el.current && typedSignature) {
const ctx = $el.current.getContext('2d');
if (ctx) {
const canvasWidth = $el.current.width;
const canvasHeight = $el.current.height;
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillStyle = selectedColor;
// Calculate the desired width (25ch)
const desiredWidth = canvasWidth * 0.85; // 85% of canvas width
// Start with a base font size
let fontSize = 18;
ctx.font = `${fontSize}px ${fontCaveat.style.fontFamily}`;
// Measure 10 characters and calculate scale factor
const characterWidth = ctx.measureText('m'.repeat(10)).width;
const scaleFactor = desiredWidth / characterWidth;
// Apply scale factor to font size
fontSize = fontSize * scaleFactor;
// Adjust font size if it exceeds canvas width
ctx.font = `${fontSize}px ${fontCaveat.style.fontFamily}`;
const textWidth = ctx.measureText(typedSignature).width;
if (textWidth > desiredWidth) {
fontSize = fontSize * (desiredWidth / textWidth);
}
// Set final font and render text
ctx.font = `${fontSize}px ${fontCaveat.style.fontFamily}`;
ctx.fillText(typedSignature, canvasWidth / 2, canvasHeight / 2);
}
}
};
const handleTypedSignatureChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const newValue = event.target.value;
setTypedSignature(newValue);
if (newValue.trim() !== '') {
onChange?.($el.current?.toDataURL() || null);
} else {
onChange?.(null);
}
};
useEffect(() => {
if (typedSignature.trim() !== '') {
renderTypedSignature();
onChange?.($el.current?.toDataURL() || null);
} else {
onClearClick();
}
}, [typedSignature, selectedColor]);
const onUndoClick = () => {
if (lines.length === 0) {
if (lines.length === 0 && typedSignature.length === 0) {
return;
}
const newLines = lines.slice(0, -1);
setLines(newLines);
if (typedSignature.length > 0) {
const newTypedSignature = typedSignature.slice(0, -1);
setTypedSignature(newTypedSignature);
// You might want to call onChange here as well
// onChange?.(newTypedSignature);
} else {
const newLines = lines.slice(0, -1);
setLines(newLines);
// Clear the canvas
if ($el.current) {
const ctx = $el.current.getContext('2d');
const { width, height } = $el.current;
ctx?.clearRect(0, 0, width, height);
// Clear and redraw the canvas
if ($el.current) {
const ctx = $el.current.getContext('2d');
const { width, height } = $el.current;
ctx?.clearRect(0, 0, width, height);
if (typeof defaultValue === 'string' && $imageData.current) {
ctx?.putImageData($imageData.current, 0, 0);
if (typeof defaultValue === 'string' && $imageData.current) {
ctx?.putImageData($imageData.current, 0, 0);
}
newLines.forEach((line) => {
const pathData = new Path2D(
getSvgPathFromStroke(getStroke(line, perfectFreehandOptions)),
);
ctx?.fill(pathData);
});
onChange?.($el.current.toDataURL());
}
newLines.forEach((line) => {
const pathData = new Path2D(getSvgPathFromStroke(getStroke(line, perfectFreehandOptions)));
ctx?.fill(pathData);
});
onChange?.($el.current.toDataURL());
}
};
@ -263,6 +349,21 @@ export const SignaturePad = ({
{...props}
/>
{allowTypedSignature && (
<div
className={cn('ml-4 pb-1', {
'ml-10': lines.length > 0 || typedSignature.length > 0,
})}
>
<Input
placeholder="Type your signature"
className="w-1/2 border-none p-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0"
value={typedSignature}
onChange={handleTypedSignatureChange}
/>
</div>
)}
<div className="text-foreground absolute right-2 top-2 filter">
<Select defaultValue={selectedColor} onValueChange={(value) => setSelectedColor(value)}>
<SelectTrigger className="h-auto w-auto border-none p-0.5">
@ -311,13 +412,13 @@ export const SignaturePad = ({
</button>
</div>
{lines.length > 0 && (
{(lines.length > 0 || typedSignature.length > 0) && (
<div className="absolute bottom-4 left-4 flex gap-2">
<button
type="button"
title="undo"
className="focus-visible:ring-ring ring-offset-background text-muted-foreground/60 hover:text-muted-foreground rounded-full p-0 text-[0.688rem] focus-visible:outline-none focus-visible:ring-2"
onClick={() => onUndoClick()}
onClick={onUndoClick}
>
<Undo2 className="h-4 w-4" />
<span className="sr-only">Undo</span>

View File

@ -34,9 +34,6 @@
"dependsOn": ["^build"],
"cache": false
},
"translate:extract": {
"cache": false
},
"translate:compile": {
"cache": false
}