Compare commits

...

11 Commits

Author SHA1 Message Date
0eff336175 v1.8.0-rc.4 2024-11-19 16:44:25 +11:00
9bdd5c31cc fix: sort recipients for template with signing order (#1468) 2024-11-18 15:54:51 +07:00
57ad7c150b chore: add translations (#1474) 2024-11-18 08:40:25 +11:00
b0829e6cdf v1.8.0-rc.3 2024-11-16 09:23:05 +11:00
08a446fefd feat: support windows for 2fa tokens (#1478)
## Description

When using 2fa enabled authentication on direct templates we run into an
issue where a 2fa token has been attached to a field but it's submitted
at a later point.

To better facilitate this we have introduced the ability to have a
window of valid tokens.

This won't affect other signing methods since tokens are verified
immediately after they're entered.

## Related Issue

N/A

## Changes Made

- Updated our validate2FAToken method to use a window based approach
rather than the default verify method.

## Testing Performed

- Created a series of tokens and tested upon different intervals and
windows to confirm functionality works as expected.
2024-11-16 09:17:45 +11:00
f15f9ecdd1 chore: update docs 2024-11-15 21:47:22 +07:00
979e3f3e71 fix: always allow access to billing (#1476) 2024-11-15 21:34:39 +07:00
876803b5db fix: handle team invites being accepted but not added 2024-11-15 13:27:36 +11:00
1c87cb1e0d v1.8.0-rc.2 2024-11-15 01:56:22 +11:00
5398026b80 feat: signature rejection (#1472)
## Description

Adds support for rejecting a given document informing the document
owner.

Flows for resolving a rejection don't currently exist so it's up to the
document owner to reach out to the recipient and work out a way to move
forward via a new document or offline agreement.

## Related Issue


## Changes Made

- Added new rejection properties to the recipient schema
- Added API endpoints to support rejection
- Added email templates for notifying the document owner and recipient
- Added a dialog on the signing page to start the rejection flow.

## Testing Performed

- Manually tested the flow end to end
- Automated tests are planned
2024-11-14 21:37:42 +11:00
f2439abbc9 chore: update docs 2024-11-12 23:12:13 +07:00
61 changed files with 1960 additions and 357 deletions

View File

@ -2,7 +2,7 @@ name: Publish Docker
on:
push:
branches: ["release"]
branches: ['release']
jobs:
build_and_publish_platform_containers:

View File

@ -11,6 +11,10 @@ Digitally signing documents requires a signing certificate in `.p12` format. You
Follow the steps below to create a free, self-signed certificate for local development.
<Callout type="warning">
These steps should be run on a UNIX based system, otherwise you may run into an error.
</Callout>
<Steps>
### Generate Private Key

View File

@ -1,6 +1,6 @@
{
"name": "@documenso/marketing",
"version": "1.8.0-rc.0",
"version": "1.8.0-rc.4",
"private": true,
"license": "AGPL-3.0",
"scripts": {

View File

@ -163,6 +163,7 @@ export const SinglePlayerClient = () => {
expired: null,
signedAt: null,
readStatus: 'OPENED',
rejectionReason: null,
documentDeletedAt: null,
signingStatus: 'NOT_SIGNED',
sendStatus: 'NOT_SENT',

View File

@ -1,6 +1,6 @@
{
"name": "@documenso/web",
"version": "1.8.0-rc.0",
"version": "1.8.0-rc.4",
"private": true,
"license": "AGPL-3.0",
"scripts": {

View File

@ -4,7 +4,7 @@ import { useMemo } from 'react';
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { CheckCheckIcon, CheckIcon, Loader, MailOpen } from 'lucide-react';
import { AlertTriangle, CheckCheckIcon, CheckIcon, Loader, MailOpen } from 'lucide-react';
import { DateTime } from 'luxon';
import { match } from 'ts-pattern';
@ -133,6 +133,11 @@ export const DocumentPageViewRecentActivity = ({
<CheckIcon className="h-3 w-3" aria-hidden="true" />
</div>
))
.with(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED, () => (
<div className="bg-widget rounded-full border border-gray-300 p-1 dark:border-neutral-600">
<AlertTriangle className="h-3 w-3" aria-hidden="true" />
</div>
))
.with(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_OPENED, () => (
<div className="bg-widget rounded-full border border-gray-300 p-1 dark:border-neutral-600">
<MailOpen className="h-3 w-3" aria-hidden="true" />

View File

@ -4,7 +4,15 @@ import Link from 'next/link';
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { CheckIcon, Clock, MailIcon, MailOpenIcon, PenIcon, PlusIcon } from 'lucide-react';
import {
AlertTriangle,
CheckIcon,
Clock,
MailIcon,
MailOpenIcon,
PenIcon,
PlusIcon,
} from 'lucide-react';
import { match } from 'ts-pattern';
import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles';
@ -15,6 +23,7 @@ import { CopyTextButton } from '@documenso/ui/components/common/copy-text-button
import { SignatureIcon } from '@documenso/ui/icons/signature';
import { AvatarWithText } from '@documenso/ui/primitives/avatar';
import { Badge } from '@documenso/ui/primitives/badge';
import { PopoverHover } from '@documenso/ui/primitives/popover';
import { useToast } from '@documenso/ui/primitives/use-toast';
export type DocumentPageViewRecipientsProps = {
@ -123,6 +132,26 @@ export const DocumentPageViewRecipients = ({
</Badge>
)}
{document.status !== DocumentStatus.DRAFT &&
recipient.signingStatus === SigningStatus.REJECTED && (
<PopoverHover
trigger={
<Badge variant="destructive">
<AlertTriangle className="mr-1 h-3 w-3" />
<Trans>Rejected</Trans>
</Badge>
}
>
<p className="text-sm">
<Trans>Reason for rejection: </Trans>
</p>
<p className="text-muted-foreground mt-1 text-sm">
{recipient.rejectionReason}
</p>
</PopoverHover>
)}
{document.status === DocumentStatus.PENDING &&
recipient.signingStatus === SigningStatus.NOT_SIGNED &&
recipient.role !== RecipientRole.CC && (

View File

@ -78,7 +78,7 @@ export const DocumentsDataTable = ({
{
header: _(msg`Status`),
accessorKey: 'status',
cell: ({ row }) => <DocumentStatus status={row.getValue('status')} />,
cell: ({ row }) => <DocumentStatus status={row.original.status} />,
size: 140,
},
{

View File

@ -12,9 +12,10 @@ import { createBillingPortal } from './create-billing-portal.action';
export type BillingPortalButtonProps = {
buttonProps?: React.ComponentProps<typeof Button>;
children?: React.ReactNode;
};
export const BillingPortalButton = ({ buttonProps }: BillingPortalButtonProps) => {
export const BillingPortalButton = ({ buttonProps, children }: BillingPortalButtonProps) => {
const { _ } = useLingui();
const { toast } = useToast();
@ -63,7 +64,7 @@ export const BillingPortalButton = ({ buttonProps }: BillingPortalButtonProps) =
onClick={async () => handleFetchPortalUrl()}
loading={isFetchingPortalUrl}
>
<Trans>Manage Subscription</Trans>
{children || <Trans>Manage Subscription</Trans>}
</Button>
);
};

View File

@ -68,60 +68,74 @@ export default async function BillingSettingsPage() {
return (
<div>
<h3 className="text-2xl font-semibold">
<Trans>Billing</Trans>
</h3>
<div className="flex flex-row items-end justify-between">
<div>
<h3 className="text-2xl font-semibold">
<Trans>Billing</Trans>
</h3>
<div className="text-muted-foreground mt-2 text-sm">
{isMissingOrInactiveOrFreePlan && (
<p>
<Trans>
You are currently on the <span className="font-semibold">Free Plan</span>.
</Trans>
</p>
)}
{/* Todo: Translation */}
{!isMissingOrInactiveOrFreePlan &&
match(subscription.status)
.with('ACTIVE', () => (
<p>
{subscriptionProduct ? (
<span>
You are currently subscribed to{' '}
<span className="font-semibold">{subscriptionProduct.name}</span>
</span>
) : (
<span>You currently have an active plan</span>
)}
{subscription.periodEnd && (
<span>
{' '}
which is set to{' '}
{subscription.cancelAtPeriodEnd ? (
<span>
end on{' '}
<span className="font-semibold">{i18n.date(subscription.periodEnd)}.</span>
</span>
) : (
<span>
automatically renew on{' '}
<span className="font-semibold">{i18n.date(subscription.periodEnd)}.</span>
</span>
)}
</span>
)}
</p>
))
.with('PAST_DUE', () => (
<div className="text-muted-foreground mt-2 text-sm">
{isMissingOrInactiveOrFreePlan && (
<p>
<Trans>
Your current plan is past due. Please update your payment information.
You are currently on the <span className="font-semibold">Free Plan</span>.
</Trans>
</p>
))
.otherwise(() => null)}
)}
{/* Todo: Translation */}
{!isMissingOrInactiveOrFreePlan &&
match(subscription.status)
.with('ACTIVE', () => (
<p>
{subscriptionProduct ? (
<span>
You are currently subscribed to{' '}
<span className="font-semibold">{subscriptionProduct.name}</span>
</span>
) : (
<span>You currently have an active plan</span>
)}
{subscription.periodEnd && (
<span>
{' '}
which is set to{' '}
{subscription.cancelAtPeriodEnd ? (
<span>
end on{' '}
<span className="font-semibold">
{i18n.date(subscription.periodEnd)}.
</span>
</span>
) : (
<span>
automatically renew on{' '}
<span className="font-semibold">
{i18n.date(subscription.periodEnd)}.
</span>
</span>
)}
</span>
)}
</p>
))
.with('PAST_DUE', () => (
<p>
<Trans>
Your current plan is past due. Please update your payment information.
</Trans>
</p>
))
.otherwise(() => null)}
</div>
</div>
{isMissingOrInactiveOrFreePlan && (
<BillingPortalButton>
<Trans>Manage billing</Trans>
</BillingPortalButton>
)}
</div>
<hr className="my-4" />

View File

@ -99,6 +99,10 @@ export default async function SigningPage({ params: { token } }: SigningPageProp
const { documentMeta } = document;
if (recipient.signingStatus === SigningStatus.REJECTED) {
return redirect(`/sign/${token}/rejected`);
}
if (
document.status === DocumentStatus.COMPLETED ||
recipient.signingStatus === SigningStatus.SIGNED

View File

@ -0,0 +1,170 @@
'use client';
import { useEffect, useState } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { zodResolver } from '@hookform/resolvers/zod';
import { Trans, msg } from '@lingui/macro';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import type { Document } from '@documenso/prisma/client';
import { trpc } from '@documenso/trpc/react';
import { Button } from '@documenso/ui/primitives/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@documenso/ui/primitives/dialog';
import {
Form,
FormControl,
FormField,
FormItem,
FormMessage,
} from '@documenso/ui/primitives/form/form';
import { Textarea } from '@documenso/ui/primitives/textarea';
import { useToast } from '@documenso/ui/primitives/use-toast';
const ZRejectDocumentFormSchema = z.object({
reason: z
.string()
.min(5, msg`Please provide a reason`)
.max(500, msg`Reason must be less than 500 characters`),
});
type TRejectDocumentFormSchema = z.infer<typeof ZRejectDocumentFormSchema>;
export interface RejectDocumentDialogProps {
document: Pick<Document, 'id'>;
token: string;
}
export function RejectDocumentDialog({ document, token }: RejectDocumentDialogProps) {
const { toast } = useToast();
const router = useRouter();
const searchParams = useSearchParams();
const [isOpen, setIsOpen] = useState(false);
const { mutateAsync: rejectDocumentWithToken } =
trpc.recipient.rejectDocumentWithToken.useMutation();
const form = useForm<TRejectDocumentFormSchema>({
resolver: zodResolver(ZRejectDocumentFormSchema),
defaultValues: {
reason: '',
},
});
const onRejectDocument = async ({ reason }: TRejectDocumentFormSchema) => {
try {
// TODO: Add trpc mutation here
await rejectDocumentWithToken({
documentId: document.id,
token,
reason,
});
toast({
title: 'Document rejected',
description: 'The document has been successfully rejected.',
duration: 5000,
});
setIsOpen(false);
router.push(`/sign/${token}/rejected`);
} catch (err) {
toast({
title: 'Error',
description: 'An error occurred while rejecting the document. Please try again.',
variant: 'destructive',
duration: 5000,
});
}
};
useEffect(() => {
if (searchParams?.get('reject') === 'true') {
setIsOpen(true);
}
}, []);
useEffect(() => {
if (!isOpen) {
form.reset();
}
}, [isOpen]);
return (
<Dialog open={isOpen} onOpenChange={setIsOpen}>
<DialogTrigger asChild>
<Button variant="outline">
<Trans>Reject Document</Trans>
</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>
<Trans>Reject Document</Trans>
</DialogTitle>
<DialogDescription>
<Trans>
Are you sure you want to reject this document? This action cannot be undone.
</Trans>
</DialogDescription>
</DialogHeader>
<Form {...form}>
<form onSubmit={form.handleSubmit(onRejectDocument)} className="space-y-4">
<FormField
control={form.control}
name="reason"
render={({ field }) => (
<FormItem>
<FormControl>
<Textarea
{...field}
rows={4}
placeholder="Please provide a reason for rejecting this document"
disabled={form.formState.isSubmitting}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<DialogFooter>
<Button
type="button"
variant="ghost"
onClick={() => setIsOpen(false)}
disabled={form.formState.isSubmitting}
>
<Trans>Cancel</Trans>
</Button>
<Button
type="submit"
variant="destructive"
loading={form.formState.isSubmitting}
disabled={!form.formState.isValid}
>
<Trans>Reject Document</Trans>
</Button>
</DialogFooter>
</form>
</Form>
</DialogContent>
</Dialog>
);
}

View File

@ -0,0 +1,110 @@
import Link from 'next/link';
import { notFound } from 'next/navigation';
import { Trans } from '@lingui/macro';
import { XCircle } from 'lucide-react';
import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server';
import { getServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
import { getDocumentAndSenderByToken } from '@documenso/lib/server-only/document/get-document-by-token';
import { isRecipientAuthorized } from '@documenso/lib/server-only/document/is-recipient-authorized';
import { getFieldsForToken } from '@documenso/lib/server-only/field/get-fields-for-token';
import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-recipient-by-token';
import { FieldType } from '@documenso/prisma/client';
import { Badge } from '@documenso/ui/primitives/badge';
import { Button } from '@documenso/ui/primitives/button';
import { truncateTitle } from '~/helpers/truncate-title';
import { SigningAuthPageView } from '../signing-auth-page';
export type RejectedSigningPageProps = {
params: {
token?: string;
};
};
export default async function RejectedSigningPage({ params: { token } }: RejectedSigningPageProps) {
await setupI18nSSR();
if (!token) {
return notFound();
}
const { user } = await getServerComponentSession();
const document = await getDocumentAndSenderByToken({
token,
requireAccessAuth: false,
}).catch(() => null);
if (!document) {
return notFound();
}
const truncatedTitle = truncateTitle(document.title);
const [fields, recipient] = await Promise.all([
getFieldsForToken({ token }),
getRecipientByToken({ token }).catch(() => null),
]);
if (!recipient) {
return notFound();
}
const isDocumentAccessValid = await isRecipientAuthorized({
type: 'ACCESS',
documentAuthOptions: document.authOptions,
recipient,
userId: user?.id,
});
if (!isDocumentAccessValid) {
return <SigningAuthPageView email={recipient.email} />;
}
const recipientName =
recipient.name ||
fields.find((field) => field.type === FieldType.NAME)?.customText ||
recipient.email;
return (
<div className="flex flex-col items-center pt-24 lg:pt-36 xl:pt-44">
<Badge variant="neutral" size="default" className="mb-6 rounded-xl border bg-transparent">
{truncatedTitle}
</Badge>
<div className="flex flex-col items-center">
<div className="flex items-center gap-x-4">
<XCircle className="text-destructive h-10 w-10" />
<h2 className="max-w-[35ch] text-center text-2xl font-semibold leading-normal md:text-3xl lg:text-4xl">
<Trans>Document Rejected</Trans>
</h2>
</div>
<div className="text-destructive mt-4 flex items-center text-center text-sm">
<Trans>You have rejected this document</Trans>
</div>
<p className="text-muted-foreground mt-6 max-w-[60ch] text-center text-sm">
<Trans>
The document owner has been notified of your decision. They may contact you with further
instructions if necessary.
</Trans>
</p>
<p className="text-muted-foreground mt-2 max-w-[60ch] text-center text-sm">
<Trans>No further action is required from you at this time.</Trans>
</p>
{user && (
<Button className="mt-6" asChild>
<Link href={`/`}>Return Home</Link>
</Button>
)}
</div>
</div>
);
}

View File

@ -31,6 +31,7 @@ import { InitialsField } from './initials-field';
import { NameField } from './name-field';
import { NumberField } from './number-field';
import { RadioField } from './radio-field';
import { RejectDocumentDialog } from './reject-document-dialog';
import { SignatureField } from './signature-field';
import { TextField } from './text-field';
@ -57,28 +58,32 @@ export const SigningPageView = ({
{document.title}
</h1>
<div className="mt-2.5 flex items-center gap-x-6">
<p
className="text-muted-foreground truncate"
title={document.User.name ? document.User.name : ''}
>
{document.User.name}
</p>
</div>
<div className="mt-2.5 flex flex-wrap items-center justify-between gap-x-6">
<div>
<p
className="text-muted-foreground truncate"
title={document.User.name ? document.User.name : ''}
>
{document.User.name}
</p>
<p className="text-muted-foreground">
{match(recipient.role)
.with(RecipientRole.VIEWER, () => (
<Trans>({document.User.email}) has invited you to view this document</Trans>
))
.with(RecipientRole.SIGNER, () => (
<Trans>({document.User.email}) has invited you to sign this document</Trans>
))
.with(RecipientRole.APPROVER, () => (
<Trans>({document.User.email}) has invited you to approve this document</Trans>
))
.otherwise(() => null)}
</p>
<p className="text-muted-foreground">
{match(recipient.role)
.with(RecipientRole.VIEWER, () => (
<Trans>({document.User.email}) has invited you to view this document</Trans>
))
.with(RecipientRole.SIGNER, () => (
<Trans>({document.User.email}) has invited you to sign this document</Trans>
))
.with(RecipientRole.APPROVER, () => (
<Trans>({document.User.email}) has invited you to approve this document</Trans>
))
.otherwise(() => null)}
</p>
</div>
<RejectDocumentDialog document={document} token={recipient.token} />
</div>
<div className="mt-8 grid grid-cols-12 gap-y-8 lg:gap-x-8 lg:gap-y-0">
<Card

View File

@ -1,3 +1,4 @@
import { RecipientStatusType } from '@documenso/lib/client-only/recipient-type';
import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar';
const ZIndexes: { [key: string]: string } = {
@ -12,7 +13,7 @@ export type StackAvatarProps = {
first?: boolean;
zIndex?: string;
fallbackText?: string;
type: 'unsigned' | 'waiting' | 'opened' | 'completed';
type: RecipientStatusType;
};
export const StackAvatar = ({ first, zIndex, fallbackText = '', type }: StackAvatarProps) => {
@ -24,19 +25,24 @@ export const StackAvatar = ({ first, zIndex, fallbackText = '', type }: StackAva
zIndexClass = ZIndexes[zIndex] ?? '';
}
console.log({ type, fallbackText });
switch (type) {
case 'unsigned':
case RecipientStatusType.UNSIGNED:
classes = 'bg-dawn-200 text-dawn-900';
break;
case 'opened':
case RecipientStatusType.OPENED:
classes = 'bg-yellow-200 text-yellow-700';
break;
case 'waiting':
case RecipientStatusType.WAITING:
classes = 'bg-water text-water-700';
break;
case 'completed':
case RecipientStatusType.COMPLETED:
classes = 'bg-documenso-200 text-documenso-800';
break;
case RecipientStatusType.REJECTED:
classes = 'bg-red-200 text-red-800';
break;
default:
break;
}

View File

@ -8,7 +8,7 @@ import { useLingui } from '@lingui/react';
import { RecipientStatusType, getRecipientType } from '@documenso/lib/client-only/recipient-type';
import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles';
import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
import type { DocumentStatus, Recipient } from '@documenso/prisma/client';
import { type DocumentStatus, type Recipient } from '@documenso/prisma/client';
import { PopoverHover } from '@documenso/ui/primitives/popover';
import { AvatarWithRecipient } from './avatar-with-recipient';
@ -46,7 +46,22 @@ export const StackAvatarsWithTooltip = ({
(recipient) => getRecipientType(recipient) === RecipientStatusType.UNSIGNED,
);
const sortedRecipients = useMemo(() => recipients.sort((a, b) => a.id - b.id), [recipients]);
const rejectedRecipients = recipients.filter(
(recipient) => getRecipientType(recipient) === RecipientStatusType.REJECTED,
);
const sortedRecipients = useMemo(() => {
const otherRecipients = recipients.filter(
(recipient) => getRecipientType(recipient) !== RecipientStatusType.REJECTED,
);
return [
...rejectedRecipients.sort((a, b) => a.id - b.id),
...otherRecipients.sort((a, b) => {
return a.id - b.id;
}),
];
}, [recipients]);
return (
<PopoverHover
@ -80,6 +95,30 @@ export const StackAvatarsWithTooltip = ({
</div>
)}
{rejectedRecipients.length > 0 && (
<div>
<h1 className="text-base font-medium">
<Trans>Rejected</Trans>
</h1>
{rejectedRecipients.map((recipient: Recipient) => (
<div key={recipient.id} className="my-1 flex items-center gap-2">
<StackAvatar
first={true}
key={recipient.id}
type={getRecipientType(recipient)}
fallbackText={recipientAbbreviation(recipient)}
/>
<div>
<p className="text-muted-foreground text-sm">{recipient.email}</p>
<p className="text-muted-foreground/70 text-xs">
{_(RECIPIENT_ROLES_DESCRIPTION[recipient.role].roleName)}
</p>
</div>
</div>
))}
</div>
)}
{waitingRecipients.length > 0 && (
<div>
<h1 className="text-base font-medium">

View File

@ -169,6 +169,7 @@ export const DocumentHistorySheet = ({
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_DELETED },
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_OPENED },
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_COMPLETED },
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED },
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_SENT },
{ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_MOVED_TO_TEAM },
() => null,

8
package-lock.json generated
View File

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

View File

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

View File

@ -168,6 +168,9 @@ export const ApiContractV1 = c.router(
500: ZUnsuccessfulResponseSchema,
},
summary: 'Send a document for signing',
// I'm aware this should be in the variable itself, which it is, however it's difficult for users to find in our current UI.
description:
'Notes\n\n`sendEmail` - Whether to send an email to the recipients asking them to action the document. If you disable this, you will need to manually distribute the document to the recipients using the generated signing links. Defaults to true',
},
resendDocument: {

View File

@ -67,7 +67,10 @@ export type TSuccessfulDocumentResponseSchema = z.infer<typeof ZSuccessfulDocume
export const ZSendDocumentForSigningMutationSchema = z
.object({
sendEmail: z.boolean().optional().default(true),
sendEmail: z.boolean().optional().default(true).openapi({
description:
'Whether to send an email to the recipients asking them to action the document. If you disable this, you will need to manually distribute the document to the recipients using the generated signing links.',
}),
})
.or(z.literal('').transform(() => ({ sendEmail: true })));

View File

@ -1,3 +1,5 @@
import { useMemo } from 'react';
import { Trans } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { match } from 'ts-pattern';
@ -36,6 +38,14 @@ export const TemplateDocumentInvite = ({
const { actionVerb } = RECIPIENT_ROLES_DESCRIPTION[role];
const rejectDocumentLink = useMemo(() => {
const url = new URL(signDocumentLink);
url.searchParams.set('reject', 'true');
return url.toString();
}, []);
return (
<>
<TemplateDocumentImage className="mt-6" assetBaseUrl={assetBaseUrl} />
@ -79,6 +89,13 @@ export const TemplateDocumentInvite = ({
</Text>
<Section className="mb-6 mt-8 text-center">
<Button
className="mr-4 inline-flex items-center justify-center rounded-lg bg-red-500 px-6 py-3 text-center text-sm font-medium text-black no-underline"
href={rejectDocumentLink}
>
<Trans>Reject Document</Trans>
</Button>
<Button
className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline"
href={signDocumentLink}

View File

@ -0,0 +1,48 @@
import { Trans } from '@lingui/macro';
import { Button, Heading, Text } from '../components';
export interface TemplateDocumentRejectedProps {
documentName: string;
recipientName: string;
rejectionReason?: string;
documentUrl: string;
}
export function TemplateDocumentRejected({
documentName,
recipientName: signerName,
rejectionReason,
documentUrl,
}: TemplateDocumentRejectedProps) {
return (
<div className="mt-4">
<Heading className="mb-4 text-center text-2xl font-semibold text-slate-800">
<Trans>Document Rejected</Trans>
</Heading>
<Text className="mb-4 text-base">
<Trans>
{signerName} has rejected the document "{documentName}".
</Trans>
</Text>
{rejectionReason && (
<Text className="mb-4 text-base text-slate-400">
<Trans>Reason for rejection: {rejectionReason}</Trans>
</Text>
)}
<Text className="mb-6 text-base">
<Trans>You can view the document and its status by clicking the button below.</Trans>
</Text>
<Button
href={documentUrl}
className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline"
>
<Trans>View Document</Trans>
</Button>
</div>
);
}

View File

@ -0,0 +1,48 @@
import { Trans } from '@lingui/macro';
import { Container, Heading, Section, Text } from '../components';
interface TemplateDocumentRejectionConfirmedProps {
recipientName: string;
documentName: string;
documentOwnerName: string;
reason?: string;
}
export function TemplateDocumentRejectionConfirmed({
recipientName,
documentName,
documentOwnerName,
reason,
}: TemplateDocumentRejectionConfirmedProps) {
return (
<Container>
<Section>
<Heading className="text-2xl font-semibold">
<Trans>Rejection Confirmed</Trans>
</Heading>
<Text className="text-primary text-base">
<Trans>
This email confirms that you have rejected the document{' '}
<strong className="font-bold">"{documentName}"</strong> sent by {documentOwnerName}.
</Trans>
</Text>
{reason && (
<Text className="text-base font-medium text-slate-400">
<Trans>Rejection reason: {reason}</Trans>
</Text>
)}
<Text className="text-base">
<Trans>
The document owner has been notified of this rejection. No further action is required
from you at this time. The document owner may contact you with any questions regarding
this rejection.
</Trans>
</Text>
</Section>
</Container>
);
}

View File

@ -0,0 +1,70 @@
import { msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { Body, Container, Head, Html, Img, Preview, Section } from '../components';
import { useBranding } from '../providers/branding';
import { TemplateDocumentRejected } from '../template-components/template-document-rejected';
import { TemplateFooter } from '../template-components/template-footer';
type DocumentRejectedEmailProps = {
recipientName: string;
documentName: string;
documentUrl: string;
rejectionReason: string;
assetBaseUrl?: string;
};
export function DocumentRejectedEmail({
recipientName,
documentName,
documentUrl,
rejectionReason,
assetBaseUrl = 'http://localhost:3002',
}: DocumentRejectedEmailProps) {
const { _ } = useLingui();
const branding = useBranding();
const previewText = _(msg`${recipientName} has rejected the document '${documentName}'`);
const getAssetUrl = (path: string) => {
return new URL(path, assetBaseUrl).toString();
};
return (
<Html>
<Head />
<Preview>{previewText}</Preview>
<Body className="mx-auto my-auto bg-white font-sans">
<Section>
<Container className="mx-auto mb-2 mt-8 max-w-xl rounded-lg border border-solid border-slate-200 p-4 backdrop-blur-sm">
<Section>
{branding.brandingEnabled && branding.brandingLogo ? (
<Img src={branding.brandingLogo} alt="Branding Logo" className="mb-4 h-6" />
) : (
<Img
src={getAssetUrl('/static/logo.png')}
alt="Documenso Logo"
className="mb-4 h-6"
/>
)}
<TemplateDocumentRejected
recipientName={recipientName}
documentName={documentName}
documentUrl={documentUrl}
rejectionReason={rejectionReason}
/>
</Section>
</Container>
<Container className="mx-auto max-w-xl">
<TemplateFooter />
</Container>
</Section>
</Body>
</Html>
);
}
export default DocumentRejectedEmail;

View File

@ -0,0 +1,70 @@
import { msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { Body, Container, Head, Html, Img, Preview, Section } from '../components';
import { useBranding } from '../providers/branding';
import { TemplateDocumentRejectionConfirmed } from '../template-components/template-document-rejection-confirmed';
import { TemplateFooter } from '../template-components/template-footer';
export type DocumentRejectionConfirmedEmailProps = {
recipientName: string;
documentName: string;
documentOwnerName: string;
reason: string;
assetBaseUrl?: string;
};
export function DocumentRejectionConfirmedEmail({
recipientName,
documentName,
documentOwnerName,
reason,
assetBaseUrl = 'http://localhost:3002',
}: DocumentRejectionConfirmedEmailProps) {
const { _ } = useLingui();
const branding = useBranding();
const previewText = _(msg`You have rejected the document '${documentName}'`);
const getAssetUrl = (path: string) => {
return new URL(path, assetBaseUrl).toString();
};
return (
<Html>
<Head />
<Preview>{previewText}</Preview>
<Body className="mx-auto my-auto bg-white font-sans">
<Section>
<Container className="mx-auto mb-2 mt-8 max-w-xl rounded-lg border border-solid border-slate-200 p-4 backdrop-blur-sm">
<Section>
{branding.brandingEnabled && branding.brandingLogo ? (
<Img src={branding.brandingLogo} alt="Branding Logo" className="mb-4 h-6" />
) : (
<Img
src={getAssetUrl('/static/logo.png')}
alt="Documenso Logo"
className="mb-4 h-6"
/>
)}
<TemplateDocumentRejectionConfirmed
recipientName={recipientName}
documentName={documentName}
documentOwnerName={documentOwnerName}
reason={reason}
/>
</Section>
</Container>
<Container className="mx-auto max-w-xl">
<TemplateFooter />
</Container>
</Section>
</Body>
</Html>
);
}
export default DocumentRejectionConfirmedEmail;

View File

@ -6,6 +6,7 @@ export enum RecipientStatusType {
OPENED = 'opened',
WAITING = 'waiting',
UNSIGNED = 'unsigned',
REJECTED = 'rejected',
}
export const getRecipientType = (recipient: Recipient) => {
@ -16,6 +17,10 @@ export const getRecipientType = (recipient: Recipient) => {
return RecipientStatusType.COMPLETED;
}
if (recipient.signingStatus === SigningStatus.REJECTED) {
return RecipientStatusType.REJECTED;
}
if (
recipient.sendStatus === SendStatus.SENT &&
recipient.readStatus === ReadStatus.OPENED &&

View File

@ -1,5 +1,6 @@
import { JobClient } from './client/client';
import { SEND_CONFIRMATION_EMAIL_JOB_DEFINITION } from './definitions/emails/send-confirmation-email';
import { SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION } from './definitions/emails/send-rejection-emails';
import { SEND_SIGNING_EMAIL_JOB_DEFINITION } from './definitions/emails/send-signing-email';
import { SEND_TEAM_DELETED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-team-deleted-email';
import { SEND_TEAM_MEMBER_JOINED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-team-member-joined-email';
@ -17,6 +18,7 @@ export const jobsClient = new JobClient([
SEND_TEAM_MEMBER_LEFT_EMAIL_JOB_DEFINITION,
SEND_TEAM_DELETED_EMAIL_JOB_DEFINITION,
SEAL_DOCUMENT_JOB_DEFINITION,
SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION,
] as const);
export const jobs = jobsClient;

View File

@ -0,0 +1,169 @@
import { createElement } from 'react';
import { msg } from '@lingui/macro';
import { z } from 'zod';
import { mailer } from '@documenso/email/mailer';
import DocumentRejectedEmail from '@documenso/email/templates/document-rejected';
import DocumentRejectionConfirmedEmail from '@documenso/email/templates/document-rejection-confirmed';
import { prisma } from '@documenso/prisma';
import { SendStatus, SigningStatus } from '@documenso/prisma/client';
import { getI18nInstance } from '../../../client-only/providers/i18n.server';
import { NEXT_PUBLIC_WEBAPP_URL } from '../../../constants/app';
import { FROM_ADDRESS, FROM_NAME } from '../../../constants/email';
import { extractDerivedDocumentEmailSettings } from '../../../types/document-email';
import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n';
import { teamGlobalSettingsToBranding } from '../../../utils/team-global-settings-to-branding';
import { formatDocumentsPath } from '../../../utils/teams';
import { type JobDefinition } from '../../client/_internal/job';
const SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_ID = 'send.signing.rejected.emails';
const SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_SCHEMA = z.object({
documentId: z.number(),
recipientId: z.number(),
});
export const SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION = {
id: SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_ID,
name: 'Send Rejection Emails',
version: '1.0.0',
trigger: {
name: SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_ID,
schema: SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_SCHEMA,
},
handler: async ({ payload, io }) => {
const { documentId, recipientId } = payload;
const [document, recipient] = await Promise.all([
prisma.document.findFirstOrThrow({
where: {
id: documentId,
},
include: {
User: true,
documentMeta: true,
team: {
select: {
teamEmail: true,
name: true,
url: true,
teamGlobalSettings: true,
},
},
},
}),
prisma.recipient.findFirstOrThrow({
where: {
id: recipientId,
signingStatus: SigningStatus.REJECTED,
},
}),
]);
const { documentMeta, team, User: documentOwner } = document;
const isEmailEnabled = extractDerivedDocumentEmailSettings(
document.documentMeta,
).recipientSigningRequest;
if (!isEmailEnabled) {
return;
}
const i18n = await getI18nInstance(documentMeta?.language);
// Send confirmation email to the recipient who rejected
await io.runTask('send-rejection-confirmation-email', async () => {
const recipientTemplate = createElement(DocumentRejectionConfirmedEmail, {
recipientName: recipient.name,
documentName: document.title,
documentOwnerName: document.User.name || document.User.email,
reason: recipient.rejectionReason || '',
assetBaseUrl: NEXT_PUBLIC_WEBAPP_URL(),
});
const branding = document.team?.teamGlobalSettings
? teamGlobalSettingsToBranding(document.team.teamGlobalSettings)
: undefined;
const [html, text] = await Promise.all([
renderEmailWithI18N(recipientTemplate, { lang: documentMeta?.language, branding }),
renderEmailWithI18N(recipientTemplate, {
lang: documentMeta?.language,
branding,
plainText: true,
}),
]);
await mailer.sendMail({
to: {
name: recipient.name,
address: recipient.email,
},
from: {
name: FROM_NAME,
address: FROM_ADDRESS,
},
subject: i18n._(msg`Document "${document.title}" - Rejection Confirmed`),
html,
text,
});
});
// Send notification email to document owner
await io.runTask('send-owner-notification-email', async () => {
const ownerTemplate = createElement(DocumentRejectedEmail, {
recipientName: recipient.name,
documentName: document.title,
documentUrl: `${NEXT_PUBLIC_WEBAPP_URL()}${formatDocumentsPath(document.team?.url)}/${
document.id
}`,
rejectionReason: recipient.rejectionReason || '',
assetBaseUrl: NEXT_PUBLIC_WEBAPP_URL(),
});
const branding = document.team?.teamGlobalSettings
? teamGlobalSettingsToBranding(document.team.teamGlobalSettings)
: undefined;
const [html, text] = await Promise.all([
renderEmailWithI18N(ownerTemplate, { lang: documentMeta?.language, branding }),
renderEmailWithI18N(ownerTemplate, {
lang: documentMeta?.language,
branding,
plainText: true,
}),
]);
await mailer.sendMail({
to: {
name: documentOwner.name || '',
address: documentOwner.email,
},
from: {
name: FROM_NAME,
address: FROM_ADDRESS,
},
subject: i18n._(msg`Document "${document.title}" - Rejected by ${recipient.name}`),
html,
text,
});
});
await io.runTask('update-recipient', async () => {
await prisma.recipient.update({
where: {
id: recipient.id,
},
data: {
sendStatus: SendStatus.SENT,
},
});
});
},
} as const satisfies JobDefinition<
typeof SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_ID,
z.infer<typeof SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION_SCHEMA>
>;

View File

@ -1,21 +1,25 @@
import { base32 } from '@scure/base';
import { TOTPController } from 'oslo/otp';
import { generateHOTP } from 'oslo/otp';
import type { User } from '@documenso/prisma/client';
import { DOCUMENSO_ENCRYPTION_KEY } from '../../constants/crypto';
import { symmetricDecrypt } from '../../universal/crypto';
const totp = new TOTPController();
type VerifyTwoFactorAuthenticationTokenOptions = {
user: User;
totpCode: string;
// The number of windows to look back
window?: number;
// The duration that the token is valid for in seconds
period?: number;
};
export const verifyTwoFactorAuthenticationToken = async ({
user,
totpCode,
window = 1,
period = 30_000,
}: VerifyTwoFactorAuthenticationTokenOptions) => {
const key = DOCUMENSO_ENCRYPTION_KEY;
@ -27,7 +31,21 @@ export const verifyTwoFactorAuthenticationToken = async ({
'utf-8',
);
const isValidToken = await totp.verify(totpCode, base32.decode(secret));
const decodedSecret = base32.decode(secret);
return isValidToken;
let now = Date.now();
for (let i = 0; i < window; i++) {
const counter = Math.floor(now / period);
const hotp = await generateHOTP(decodedSecret, counter);
if (totpCode === hotp) {
return true;
}
now -= period;
}
return false;
};

View File

@ -13,6 +13,7 @@ export const getRecipientsStats = async () => {
[ReadStatus.NOT_OPENED]: 0,
[SigningStatus.SIGNED]: 0,
[SigningStatus.NOT_SIGNED]: 0,
[SigningStatus.REJECTED]: 0,
[SendStatus.SENT]: 0,
[SendStatus.NOT_SENT]: 0,
};

View File

@ -66,6 +66,7 @@ export const findDocumentAuditLogs = async ({
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_DELETED,
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_OPENED,
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_COMPLETED,
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED,
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_SENT,
DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_MOVED_TO_TEAM,
],

View File

@ -112,6 +112,7 @@ export const isRecipientAuthorized = async ({
return await verifyTwoFactorAuthenticationToken({
user,
totpCode: token,
window: 10, // 5 minutes worth of tokens
});
})
.exhaustive();

View File

@ -0,0 +1,92 @@
import { SigningStatus } from '@prisma/client';
import { TRPCError } from '@trpc/server';
import { jobs } from '@documenso/lib/jobs/client';
import { prisma } from '@documenso/prisma';
import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs';
import type { RequestMetadata } from '../../universal/extract-request-metadata';
import { createDocumentAuditLogData } from '../../utils/document-audit-logs';
export type RejectDocumentWithTokenOptions = {
token: string;
documentId: number;
reason: string;
requestMetadata?: RequestMetadata;
};
export async function rejectDocumentWithToken({
token,
documentId,
reason,
requestMetadata,
}: RejectDocumentWithTokenOptions) {
// Find the recipient and document in a single query
const recipient = await prisma.recipient.findFirst({
where: {
token,
documentId,
},
include: {
Document: {
include: {
User: true,
},
},
},
});
const document = recipient?.Document;
if (!recipient || !document) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'Document or recipient not found',
});
}
// Add the audit log entry before updating the recipient
// Update the recipient status to rejected
const [updatedRecipient] = await prisma.$transaction([
prisma.recipient.update({
where: {
id: recipient.id,
},
data: {
signedAt: new Date(),
signingStatus: SigningStatus.REJECTED,
rejectionReason: reason,
},
}),
prisma.documentAuditLog.create({
data: createDocumentAuditLogData({
documentId,
type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED,
user: {
name: recipient.name,
email: recipient.email,
},
data: {
recipientEmail: recipient.email,
recipientName: recipient.name,
recipientId: recipient.id,
recipientRole: recipient.role,
reason,
},
requestMetadata,
}),
}),
]);
// Send email notifications
await jobs.triggerJob({
name: 'send.signing.rejected.emails',
payload: {
recipientId: recipient.id,
documentId,
},
});
return updatedRecipient;
}

View File

@ -17,6 +17,7 @@ import { createDocumentAuditLogData } from '../../utils/document-audit-logs';
import { renderCustomEmailTemplate } from '../../utils/render-custom-email-template';
import { renderEmailWithI18N } from '../../utils/render-email-with-i18n';
import { teamGlobalSettingsToBranding } from '../../utils/team-global-settings-to-branding';
import { formatDocumentsPath } from '../../utils/teams';
export interface SendDocumentOptions {
documentId: number;
@ -59,7 +60,9 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo
const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000';
let documentOwnerDownloadLink = `${NEXT_PUBLIC_WEBAPP_URL()}/documents/${document.id}`;
let documentOwnerDownloadLink = `${NEXT_PUBLIC_WEBAPP_URL()}${formatDocumentsPath(
document.team?.url,
)}/${document.id}`;
if (document.team?.url) {
documentOwnerDownloadLink = `${NEXT_PUBLIC_WEBAPP_URL()}/t/${document.team.url}/documents/${

View File

@ -42,7 +42,16 @@ export const acceptTeamInvitation = async ({ userId, teamId }: AcceptTeamInvitat
});
if (teamMemberInvite.status === TeamMemberInviteStatus.ACCEPTED) {
return;
const memberExists = await tx.teamMember.findFirst({
where: {
teamId: teamMemberInvite.teamId,
userId: user.id,
},
});
if (memberExists) {
return;
}
}
const { team } = teamMemberInvite;

View File

@ -3,7 +3,7 @@ import { hash } from '@node-rs/bcrypt';
import { getStripeCustomerByUser } from '@documenso/ee/server-only/stripe/get-customer';
import { updateSubscriptionItemQuantity } from '@documenso/ee/server-only/stripe/update-subscription-item-quantity';
import { prisma } from '@documenso/prisma';
import { IdentityProvider, Prisma, TeamMemberInviteStatus } from '@documenso/prisma/client';
import { IdentityProvider, TeamMemberInviteStatus } from '@documenso/prisma/client';
import { IS_BILLING_ENABLED } from '../../constants/app';
import { SALT_ROUNDS } from '../../constants/auth';
@ -59,11 +59,11 @@ export const createUser = async ({ name, email, password, signature, url }: Crea
const acceptedTeamInvites = await prisma.teamMemberInvite.findMany({
where: {
status: TeamMemberInviteStatus.ACCEPTED,
email: {
equals: email,
mode: Prisma.QueryMode.insensitive,
mode: 'insensitive',
},
status: TeamMemberInviteStatus.ACCEPTED,
},
});

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -79,7 +79,7 @@ msgstr "{inviterName} hat das Dokument {documentName} storniert, du musst es nic
msgid "{inviterName} has cancelled the document<0/>\"{documentName}\""
msgstr "{inviterName} hat das Dokument<0/>\"{documentName}\" storniert"
#: packages/email/template-components/template-document-invite.tsx:65
#: packages/email/template-components/template-document-invite.tsx:75
msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgstr "{inviterName} hat dich eingeladen, {0}<0/>\"{documentName}\""
@ -99,7 +99,7 @@ msgstr "{inviterName} hat dich aus dem Dokument {documentName} entfernt."
msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} hat dich aus dem Dokument<0/>\"{documentName}\" entfernt"
#: packages/email/template-components/template-document-invite.tsx:53
#: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
msgstr "{inviterName} im Namen von {teamName} hat Sie eingeladen, {0}"
@ -151,11 +151,11 @@ msgstr "{prefix} hat ein Feld entfernt"
msgid "{prefix} removed a recipient"
msgstr "{prefix} hat einen Empfänger entfernt"
#: packages/lib/utils/document-audit-logs.ts:355
#: packages/lib/utils/document-audit-logs.ts:365
msgid "{prefix} resent an email to {0}"
msgstr "{prefix} hat eine E-Mail an {0} erneut gesendet"
#: packages/lib/utils/document-audit-logs.ts:356
#: packages/lib/utils/document-audit-logs.ts:366
msgid "{prefix} sent an email to {0}"
msgstr "{prefix} hat eine E-Mail an {0} gesendet"
@ -207,7 +207,15 @@ msgstr "{prefix} hat die Sichtbarkeit des Dokuments aktualisiert"
msgid "{recipientName} {action} a document by using one of your direct links"
msgstr "{recipientName} {action} ein Dokument, indem Sie einen Ihrer direkten Links verwenden"
#: packages/email/template-components/template-document-invite.tsx:58
#: packages/email/templates/document-rejected.tsx:27
msgid "{recipientName} has rejected the document '{documentName}'"
msgstr "{recipientName} hat das Dokument '{documentName}' abgelehnt"
#: packages/email/template-components/template-document-rejected.tsx:25
msgid "{signerName} has rejected the document \"{documentName}\"."
msgstr "{signerName} hat das Dokument \"{documentName}\" abgelehnt."
#: packages/email/template-components/template-document-invite.tsx:68
msgid "{teamName} has invited you to {0}"
msgstr "{teamName} hat Sie eingeladen, {0}"
@ -231,6 +239,10 @@ msgstr "{userName} hat das Dokument in CC gesetzt"
msgid "{userName} completed their task"
msgstr "{userName} hat ihre Aufgabe abgeschlossen"
#: packages/lib/utils/document-audit-logs.ts:355
msgid "{userName} rejected the document"
msgstr "{userName} hat das Dokument abgelehnt"
#: packages/lib/utils/document-audit-logs.ts:341
msgid "{userName} signed the document"
msgstr "{userName} hat das Dokument unterschrieben"
@ -398,7 +410,7 @@ msgstr "Weitere Option hinzufügen"
msgid "Add another value"
msgstr "Weiteren Wert hinzufügen"
#: packages/ui/primitives/document-flow/add-signers.tsx:662
#: packages/ui/primitives/document-flow/add-signers.tsx:691
msgid "Add myself"
msgstr "Mich selbst hinzufügen"
@ -410,7 +422,7 @@ msgstr "Mich hinzufügen"
msgid "Add Placeholder Recipient"
msgstr "Platzhalterempfänger hinzufügen"
#: packages/ui/primitives/document-flow/add-signers.tsx:651
#: packages/ui/primitives/document-flow/add-signers.tsx:680
msgid "Add Signer"
msgstr "Unterzeichner hinzufügen"
@ -460,7 +472,7 @@ msgstr "Ein Fehler ist beim Laden des Dokuments aufgetreten."
msgid "Approve"
msgstr "Genehmigen"
#: packages/email/template-components/template-document-invite.tsx:89
#: packages/email/template-components/template-document-invite.tsx:106
msgid "Approve Document"
msgstr "Dokument genehmigen"
@ -590,7 +602,7 @@ msgstr "Fortsetzen"
#~ msgid "Continue by {0} the document."
#~ msgstr "Continue by {0} the document."
#: packages/email/template-components/template-document-invite.tsx:76
#: packages/email/template-components/template-document-invite.tsx:86
msgid "Continue by approving the document."
msgstr "Fahre fort, indem du das Dokument genehmigst."
@ -598,11 +610,11 @@ msgstr "Fahre fort, indem du das Dokument genehmigst."
msgid "Continue by downloading the document."
msgstr "Fahre fort, indem du das Dokument herunterlädst."
#: packages/email/template-components/template-document-invite.tsx:74
#: packages/email/template-components/template-document-invite.tsx:84
msgid "Continue by signing the document."
msgstr "Fahre fort, indem du das Dokument signierst."
#: packages/email/template-components/template-document-invite.tsx:75
#: packages/email/template-components/template-document-invite.tsx:85
msgid "Continue by viewing the document."
msgstr "Fahre fort, indem du das Dokument ansiehst."
@ -658,6 +670,14 @@ msgstr "Hast du keinen Passwortwechsel angefordert? Wir helfen dir, dein Konto a
msgid "Direct link receiver"
msgstr "Empfänger des direkten Links"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:149
msgid "Document \"{0}\" - Rejected by {1}"
msgstr "Dokument \"{0}\" - Abgelehnt von {1}"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:109
msgid "Document \"{0}\" - Rejection Confirmed"
msgstr "Dokument \"{0}\" - Ablehnung Bestätigt"
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
#: packages/ui/primitives/document-flow/add-settings.tsx:216
#: packages/ui/primitives/template-flow/add-template-settings.tsx:202
@ -673,8 +693,8 @@ msgstr "Die Authentifizierung für den Dokumentenzugriff wurde aktualisiert"
msgid "Document Cancelled"
msgstr "Dokument storniert"
#: packages/lib/utils/document-audit-logs.ts:359
#: packages/lib/utils/document-audit-logs.ts:360
#: packages/lib/utils/document-audit-logs.ts:369
#: packages/lib/utils/document-audit-logs.ts:370
msgid "Document completed"
msgstr "Dokument abgeschlossen"
@ -728,6 +748,13 @@ msgstr "Dokument geöffnet"
msgid "Document pending email"
msgstr "E-Mail über ausstehende Dokumente"
#: packages/email/template-components/template-document-rejected.tsx:21
msgid "Document Rejected"
msgstr "Dokument Abgelehnt"
#~ msgid "Document Rejection Confirmed"
#~ msgstr "Document Rejection Confirmed"
#: packages/lib/utils/document-audit-logs.ts:330
msgid "Document sent"
msgstr "Dokument gesendet"
@ -773,8 +800,8 @@ msgstr "Dropdown-Optionen"
#: packages/lib/constants/document.ts:28
#: packages/ui/primitives/document-flow/add-fields.tsx:875
#: packages/ui/primitives/document-flow/add-signature.tsx:272
#: packages/ui/primitives/document-flow/add-signers.tsx:500
#: packages/ui/primitives/document-flow/add-signers.tsx:507
#: packages/ui/primitives/document-flow/add-signers.tsx:512
#: packages/ui/primitives/document-flow/add-signers.tsx:519
#: packages/ui/primitives/document-flow/types.ts:54
#: packages/ui/primitives/template-flow/add-template-fields.tsx:638
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
@ -790,11 +817,11 @@ msgstr "E-Mail ist erforderlich"
msgid "Email Options"
msgstr "E-Mail-Optionen"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email resent"
msgstr "E-Mail erneut gesendet"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email sent"
msgstr "E-Mail gesendet"
@ -903,6 +930,9 @@ msgstr "Zurück"
msgid "Green"
msgstr "Grün"
#~ msgid "Hello {recipientName},"
#~ msgstr "Hello {recipientName},"
#: packages/email/templates/reset-password.tsx:56
msgid "Hi, {userName} <0>({userEmail})</0>"
msgstr "Hallo, {userName} <0>({userEmail})</0>"
@ -988,8 +1018,8 @@ msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:901
#: 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/document-flow/add-signers.tsx:550
#: packages/ui/primitives/document-flow/add-signers.tsx:556
#: packages/ui/primitives/document-flow/types.ts:55
#: packages/ui/primitives/template-flow/add-template-fields.tsx:664
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
@ -1107,7 +1137,7 @@ msgstr "Wählen Sie eine Zahl"
msgid "Placeholder"
msgstr "Platzhalter"
#: packages/email/template-components/template-document-invite.tsx:46
#: packages/email/template-components/template-document-invite.tsx:56
msgid "Please {0} your document<0/>\"{documentName}\""
msgstr "Bitte {0} dein Dokument<0/>\"{documentName}\""
@ -1156,11 +1186,16 @@ msgstr "Radio-Werte"
msgid "Read only"
msgstr "Nur lesen"
#: packages/email/template-components/template-document-rejected.tsx:32
msgid "Reason for rejection: {rejectionReason}"
msgstr "Grund für die Ablehnung: {rejectionReason}"
#: packages/ui/components/recipient/recipient-role-select.tsx:95
msgid "Receives copy"
msgstr "Erhält Kopie"
#: packages/lib/utils/document-audit-logs.ts:338
#: packages/lib/utils/document-audit-logs.ts:353
msgid "Recipient"
msgstr "Empfänger"
@ -1187,6 +1222,18 @@ msgstr "Rot"
msgid "Redirect URL"
msgstr "Weiterleitungs-URL"
#: packages/email/template-components/template-document-invite.tsx:96
msgid "Reject Document"
msgstr "Dokument Ablehnen"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:22
msgid "Rejection Confirmed"
msgstr "Ablehnung Bestätigt"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:34
msgid "Rejection reason: {reason}"
msgstr "Ablehnungsgrund: {reason}"
#: packages/lib/server-only/document/resend-document.tsx:192
msgid "Reminder: {0}"
msgstr "Erinnerung: {0}"
@ -1306,7 +1353,7 @@ msgstr "Link teilen"
msgid "Share your signing experience!"
msgstr "Teilen Sie Ihre Unterzeichnungserfahrung!"
#: packages/ui/primitives/document-flow/add-signers.tsx:680
#: packages/ui/primitives/document-flow/add-signers.tsx:709
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
msgid "Show advanced settings"
msgstr "Erweiterte Einstellungen anzeigen"
@ -1315,7 +1362,7 @@ msgstr "Erweiterte Einstellungen anzeigen"
msgid "Sign"
msgstr "Unterschreiben"
#: packages/email/template-components/template-document-invite.tsx:87
#: packages/email/template-components/template-document-invite.tsx:104
msgid "Sign Document"
msgstr "Dokument signieren"
@ -1351,8 +1398,8 @@ msgstr "Unterzeichner müssen eindeutige E-Mails haben"
msgid "Signing"
msgstr "Unterzeichnung"
#: packages/lib/server-only/document/send-completed-email.ts:111
#: packages/lib/server-only/document/send-completed-email.ts:191
#: packages/lib/server-only/document/send-completed-email.ts:114
#: packages/lib/server-only/document/send-completed-email.ts:194
msgid "Signing Complete!"
msgstr "Unterzeichnung abgeschlossen!"
@ -1432,6 +1479,13 @@ msgstr "Die Authentifizierung, die erforderlich ist, damit Empfänger das Signat
msgid "The authentication required for recipients to view the document."
msgstr "Die Authentifizierung, die erforderlich ist, damit Empfänger das Dokument anzeigen können."
#~ msgid "The document owner has been notified of this rejection. No further action is required from you at this time."
#~ msgstr "The document owner has been notified of this rejection. No further action is required from you at this time."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:39
msgid "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
msgstr "Der Dokumenteninhaber wurde über diese Ablehnung informiert. Es sind derzeit keine weiteren Maßnahmen von Ihnen erforderlich. Der Dokumenteninhaber kann Sie bei Fragen zu dieser Ablehnung kontaktieren."
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
msgid "The document's name"
msgstr "Der Name des Dokuments"
@ -1512,6 +1566,13 @@ msgstr "Dieses Dokument ist durch ein Passwort geschützt. Bitte geben Sie das P
msgid "This document was sent using <0>Documenso.</0>"
msgstr "Dieses Dokument wurde mit <0>Documenso.</0> gesendet"
#~ msgid "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#~ msgstr "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:26
msgid "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
msgstr "Diese E-Mail bestätigt, dass Sie das Dokument <0>\"{documentName}\"</0> abgelehnt haben, das von {documentOwnerName} gesendet wurde."
#: packages/ui/components/document/document-email-checkboxes.tsx:94
msgid "This email is sent to the recipient if they are removed from a pending document."
msgstr "Diese E-Mail wird an den Empfänger gesendet, wenn er von einem ausstehenden Dokument entfernt wird."
@ -1608,7 +1669,8 @@ msgstr "Sehen Sie sich alle Dokumente an, die an diese E-Mail-Adresse gesendet w
msgid "View document"
msgstr "Dokument anzeigen"
#: packages/email/template-components/template-document-invite.tsx:88
#: packages/email/template-components/template-document-invite.tsx:105
#: packages/email/template-components/template-document-rejected.tsx:44
#: packages/ui/primitives/document-flow/add-subject.tsx:90
#: packages/ui/primitives/document-flow/add-subject.tsx:91
msgid "View Document"
@ -1686,6 +1748,10 @@ msgstr "Sie können den Zugriff jederzeit in Ihren Teameinstellungen auf Documen
msgid "You can use the following variables in your message:"
msgstr "Sie können die folgenden Variablen in Ihrer Nachricht verwenden:"
#: packages/email/template-components/template-document-rejected.tsx:37
msgid "You can view the document and its status by clicking the button below."
msgstr "Sie können das Dokument und seinen Status einsehen, indem Sie auf die Schaltfläche unten klicken."
#: packages/ui/primitives/document-dropzone.tsx:43
msgid "You cannot upload documents at this time."
msgstr "Sie können derzeit keine Dokumente hochladen."
@ -1719,6 +1785,13 @@ msgstr "Du hast das Dokument {0} initiiert, das erfordert, dass du {recipientAct
msgid "You have reached your document limit."
msgstr "Sie haben Ihr Dokumentenlimit erreicht."
#: packages/email/templates/document-rejection-confirmed.tsx:27
msgid "You have rejected the document '{documentName}'"
msgstr "Sie haben das Dokument '{documentName}' abgelehnt"
#~ msgid "You have rejected the document \"{documentName}\""
#~ msgstr "You have rejected the document \"{documentName}\""
#: packages/email/template-components/template-document-self-signed.tsx:42
msgid "You have signed “{documentName}”"
msgstr "Du hast „{documentName}“ unterzeichnet"

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

File diff suppressed because one or more lines are too long

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -50,15 +50,15 @@ msgstr "\"{placeholderEmail}\" im Namen von \"{0}\" hat Sie eingeladen, \"Beispi
msgid "\"{teamUrl}\" has invited you to sign \"example document\"."
msgstr "\"{teamUrl}\" hat Sie eingeladen, \"Beispieldokument\" zu unterschreiben."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:78
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:79
msgid "({0}) has invited you to approve this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu genehmigen"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
msgid "({0}) has invited you to sign this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu unterzeichnen"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
msgid "({0}) has invited you to view this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu betrachten"
@ -658,7 +658,7 @@ msgstr "Genehmigen"
msgid "Approve Document"
msgstr "Dokument genehmigen"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:85
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:94
msgid "Approved"
msgstr "Genehmigt"
@ -666,6 +666,10 @@ msgstr "Genehmigt"
msgid "Are you sure you want to delete this token?"
msgstr "Bist du sicher, dass du dieses Token löschen möchtest?"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:120
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Sind Sie sicher, dass Sie dieses Dokument ablehnen möchten? Diese Aktion kann nicht rückgängig gemacht werden."
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:188
msgid "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
msgstr "Bist du sicher, dass du den <0>{passkeyName}</0> Passkey entfernen möchtest."
@ -814,6 +818,7 @@ msgstr "Durch die Verwendung der elektronischen Unterschriftsfunktion stimmen Si
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220
#: 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]/reject-document-dialog.tsx:153
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
@ -946,7 +951,7 @@ msgid "Complete Viewing"
msgstr "Betrachten abschließen"
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:208
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:77
#: apps/web/src/components/formatter/document-status.tsx:28
msgid "Completed"
msgstr "Abgeschlossen"
@ -1043,7 +1048,7 @@ msgstr "Steuert das Format der Nachricht, die gesendet wird, wenn ein Empfänger
msgid "Copied"
msgstr "Kopiert"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:133
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:162
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:77
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:31
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:163
@ -1517,6 +1522,10 @@ msgstr "Dokumentpräferenzen aktualisiert"
msgid "Document re-sent"
msgstr "Dokument erneut gesendet"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:83
msgid "Document Rejected"
msgstr "Dokument abgelehnt"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:36
msgid "Document resealed"
msgstr "Dokument wieder versiegelt"
@ -2300,7 +2309,7 @@ msgstr "Mitglied seit"
msgid "Members"
msgstr "Mitglieder"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:46
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:55
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:35
msgid "Modify recipients"
msgstr "Empfänger ändern"
@ -2394,6 +2403,10 @@ msgstr "Nächstes Feld"
msgid "No active drafts"
msgstr "Keine aktiven Entwürfe"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:99
msgid "No further action is required from you at this time."
msgstr "Es sind derzeit keine weiteren Maßnahmen Ihrerseits erforderlich."
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx:42
msgid "No payment required"
msgstr "Keine Zahlung erforderlich"
@ -2410,7 +2423,7 @@ msgstr "Keine aktuellen Aktivitäten"
msgid "No recent documents"
msgstr "Keine aktuellen Dokumente"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:61
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:70
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:49
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:96
msgid "No recipients"
@ -2500,7 +2513,7 @@ msgstr "Nur Manager und darüber können auf das Dokument zugreifen und es anzei
msgid "Oops! Something went wrong."
msgstr "Hoppla! Etwas ist schief gelaufen."
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:140
msgid "Opened"
msgstr "Geöffnet"
@ -2599,7 +2612,7 @@ msgstr "Zahlung ist erforderlich, um die Erstellung Ihres Teams abzuschließen."
msgid "Payment overdue"
msgstr "Zahlung überfällig"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:122
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:131
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:211
#: apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx:82
#: apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx:77
@ -2692,6 +2705,10 @@ msgstr "Bitte beachten Sie, dass Sie den Zugriff auf alle Dokumente, die mit die
msgid "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
msgstr "Bitte beachten Sie, dass Sie den Zugriff auf alle mit diesem Team verbundenen Dokumente verlieren werden und alle Mitglieder entfernt und benachrichtigt werden."
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:37
msgid "Please provide a reason"
msgstr "Bitte geben Sie einen Grund an"
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:127
msgid "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
msgstr "Bitte geben Sie ein Token von der Authentifizierungs-App oder einen Backup-Code an. Wenn Sie keinen Backup-Code haben, kontaktieren Sie bitte den Support."
@ -2800,7 +2817,7 @@ msgstr "Nur-Lese-Feld"
msgid "Read the full <0>signature disclosure</0>."
msgstr "Lesen Sie die vollständige <0>Offenlegung der Unterschrift</0>."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:97
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:106
msgid "Ready"
msgstr "Bereit"
@ -2808,6 +2825,14 @@ msgstr "Bereit"
msgid "Reason"
msgstr "Grund"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:146
msgid "Reason for rejection:"
msgstr "Grund für die Ablehnung:"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:38
msgid "Reason must be less than 500 characters"
msgstr "Der Grund muss weniger als 500 Zeichen lang sein"
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:62
msgid "Reauthentication is required to sign this field"
msgstr "Eine erneute Authentifizierung ist erforderlich, um dieses Feld zu unterschreiben"
@ -2832,7 +2857,7 @@ msgid "Recipient updated"
msgstr "Empfänger aktualisiert"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx:66
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:40
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:49
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:30
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:139
msgid "Recipients"
@ -2860,6 +2885,17 @@ msgstr "Wiederherstellungscodes"
msgid "Registration Successful"
msgstr "Registrierung erfolgreich"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:109
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:116
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:162
msgid "Reject Document"
msgstr "Dokument ablehnen"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:141
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
msgid "Rejected"
msgstr "Abgelehnt"
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:34
msgid "Remembered your password? <0>Sign In</0>"
msgstr "Haben Sie Ihr Passwort vergessen? <0>Einloggen</0>"
@ -3089,7 +3125,7 @@ msgstr "Zurücksetzungs-E-Mail wird gesendet..."
msgid "Sending..."
msgstr "Senden..."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:92
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:101
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:248
msgid "Sent"
msgstr "Gesendet"
@ -3236,7 +3272,7 @@ msgstr "Gesammelte Unterschriften"
msgid "Signatures will appear once the document has been completed"
msgstr "Unterschriften erscheinen, sobald das Dokument abgeschlossen ist"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:105
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:114
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:270
#: apps/web/src/components/document/document-read-only-fields.tsx:84
msgid "Signed"
@ -3645,6 +3681,10 @@ msgstr "Das Dokument wurde erfolgreich in das ausgewählte Team verschoben."
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/(signing)/sign/[token]/rejected/page.tsx:92
msgid "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
msgstr "Der Dokumenteneigentümer wurde über Ihre Entscheidung informiert. Er kann Sie bei Bedarf mit weiteren Anweisungen kontaktieren."
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:182
msgid "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."
@ -3699,7 +3739,7 @@ msgstr "Der Empfänger wurde erfolgreich aktualisiert"
msgid "The selected team member will receive an email which they must accept before the team is transferred"
msgstr "Das ausgewählte Teammitglied erhält eine E-Mail, die es akzeptieren muss, bevor das Team übertragen wird"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:134
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:163
#: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:118
msgid "The signing link has been copied to your clipboard."
@ -4141,7 +4181,7 @@ msgstr "Anmeldung nicht möglich"
msgid "Unauthorized"
msgstr "Nicht autorisiert"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:155
msgid "Uncompleted"
msgstr "Unvollendet"
@ -4386,12 +4426,12 @@ msgstr "Wiederherstellungscodes ansehen"
msgid "View teams"
msgstr "Teams ansehen"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:111
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:120
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:259
msgid "Viewed"
msgstr "Angesehen"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:125
msgid "Waiting"
msgstr "Warten"
@ -4846,6 +4886,10 @@ msgstr "Sie haben Ihr Dokumentenlimit erreicht."
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>"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:88
msgid "You have rejected this document"
msgstr "Sie haben dieses Dokument abgelehnt"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:50
msgid "You have successfully left this team."
msgstr "Sie haben dieses Team erfolgreich verlassen."

View File

@ -74,7 +74,7 @@ msgstr "{inviterName} has cancelled the document {documentName}, you don't need
msgid "{inviterName} has cancelled the document<0/>\"{documentName}\""
msgstr "{inviterName} has cancelled the document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:65
#: packages/email/template-components/template-document-invite.tsx:75
msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgstr "{inviterName} has invited you to {0}<0/>\"{documentName}\""
@ -94,7 +94,7 @@ msgstr "{inviterName} has removed you from the document {documentName}."
msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} has removed you from the document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:53
#: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
msgstr "{inviterName} on behalf of {teamName} has invited you to {0}"
@ -146,11 +146,11 @@ msgstr "{prefix} removed a field"
msgid "{prefix} removed a recipient"
msgstr "{prefix} removed a recipient"
#: packages/lib/utils/document-audit-logs.ts:355
#: packages/lib/utils/document-audit-logs.ts:365
msgid "{prefix} resent an email to {0}"
msgstr "{prefix} resent an email to {0}"
#: packages/lib/utils/document-audit-logs.ts:356
#: packages/lib/utils/document-audit-logs.ts:366
msgid "{prefix} sent an email to {0}"
msgstr "{prefix} sent an email to {0}"
@ -202,7 +202,15 @@ msgstr "{prefix} updated the document visibility"
msgid "{recipientName} {action} a document by using one of your direct links"
msgstr "{recipientName} {action} a document by using one of your direct links"
#: packages/email/template-components/template-document-invite.tsx:58
#: packages/email/templates/document-rejected.tsx:27
msgid "{recipientName} has rejected the document '{documentName}'"
msgstr "{recipientName} has rejected the document '{documentName}'"
#: packages/email/template-components/template-document-rejected.tsx:25
msgid "{signerName} has rejected the document \"{documentName}\"."
msgstr "{signerName} has rejected the document \"{documentName}\"."
#: packages/email/template-components/template-document-invite.tsx:68
msgid "{teamName} has invited you to {0}"
msgstr "{teamName} has invited you to {0}"
@ -226,6 +234,10 @@ msgstr "{userName} CC'd the document"
msgid "{userName} completed their task"
msgstr "{userName} completed their task"
#: packages/lib/utils/document-audit-logs.ts:355
msgid "{userName} rejected the document"
msgstr "{userName} rejected the document"
#: packages/lib/utils/document-audit-logs.ts:341
msgid "{userName} signed the document"
msgstr "{userName} signed the document"
@ -393,7 +405,7 @@ msgstr "Add another option"
msgid "Add another value"
msgstr "Add another value"
#: packages/ui/primitives/document-flow/add-signers.tsx:662
#: packages/ui/primitives/document-flow/add-signers.tsx:691
msgid "Add myself"
msgstr "Add myself"
@ -405,7 +417,7 @@ msgstr "Add Myself"
msgid "Add Placeholder Recipient"
msgstr "Add Placeholder Recipient"
#: packages/ui/primitives/document-flow/add-signers.tsx:651
#: packages/ui/primitives/document-flow/add-signers.tsx:680
msgid "Add Signer"
msgstr "Add Signer"
@ -455,7 +467,7 @@ msgstr "An error occurred while loading the document."
msgid "Approve"
msgstr "Approve"
#: packages/email/template-components/template-document-invite.tsx:89
#: packages/email/template-components/template-document-invite.tsx:106
msgid "Approve Document"
msgstr "Approve Document"
@ -585,7 +597,7 @@ msgstr "Continue"
#~ msgid "Continue by {0} the document."
#~ msgstr "Continue by {0} the document."
#: packages/email/template-components/template-document-invite.tsx:76
#: packages/email/template-components/template-document-invite.tsx:86
msgid "Continue by approving the document."
msgstr "Continue by approving the document."
@ -593,11 +605,11 @@ msgstr "Continue by approving the document."
msgid "Continue by downloading the document."
msgstr "Continue by downloading the document."
#: packages/email/template-components/template-document-invite.tsx:74
#: packages/email/template-components/template-document-invite.tsx:84
msgid "Continue by signing the document."
msgstr "Continue by signing the document."
#: packages/email/template-components/template-document-invite.tsx:75
#: packages/email/template-components/template-document-invite.tsx:85
msgid "Continue by viewing the document."
msgstr "Continue by viewing the document."
@ -653,6 +665,14 @@ msgstr "Didn't request a password change? We are here to help you secure your ac
msgid "Direct link receiver"
msgstr "Direct link receiver"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:149
msgid "Document \"{0}\" - Rejected by {1}"
msgstr "Document \"{0}\" - Rejected by {1}"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:109
msgid "Document \"{0}\" - Rejection Confirmed"
msgstr "Document \"{0}\" - Rejection Confirmed"
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
#: packages/ui/primitives/document-flow/add-settings.tsx:216
#: packages/ui/primitives/template-flow/add-template-settings.tsx:202
@ -668,8 +688,8 @@ msgstr "Document access auth updated"
msgid "Document Cancelled"
msgstr "Document Cancelled"
#: packages/lib/utils/document-audit-logs.ts:359
#: packages/lib/utils/document-audit-logs.ts:360
#: packages/lib/utils/document-audit-logs.ts:369
#: packages/lib/utils/document-audit-logs.ts:370
msgid "Document completed"
msgstr "Document completed"
@ -723,6 +743,13 @@ msgstr "Document opened"
msgid "Document pending email"
msgstr "Document pending email"
#: packages/email/template-components/template-document-rejected.tsx:21
msgid "Document Rejected"
msgstr "Document Rejected"
#~ msgid "Document Rejection Confirmed"
#~ msgstr "Document Rejection Confirmed"
#: packages/lib/utils/document-audit-logs.ts:330
msgid "Document sent"
msgstr "Document sent"
@ -768,8 +795,8 @@ msgstr "Dropdown options"
#: packages/lib/constants/document.ts:28
#: packages/ui/primitives/document-flow/add-fields.tsx:875
#: packages/ui/primitives/document-flow/add-signature.tsx:272
#: packages/ui/primitives/document-flow/add-signers.tsx:500
#: packages/ui/primitives/document-flow/add-signers.tsx:507
#: packages/ui/primitives/document-flow/add-signers.tsx:512
#: packages/ui/primitives/document-flow/add-signers.tsx:519
#: packages/ui/primitives/document-flow/types.ts:54
#: packages/ui/primitives/template-flow/add-template-fields.tsx:638
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
@ -785,11 +812,11 @@ msgstr "Email is required"
msgid "Email Options"
msgstr "Email Options"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email resent"
msgstr "Email resent"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email sent"
msgstr "Email sent"
@ -898,6 +925,9 @@ msgstr "Go Back"
msgid "Green"
msgstr "Green"
#~ msgid "Hello {recipientName},"
#~ msgstr "Hello {recipientName},"
#: packages/email/templates/reset-password.tsx:56
msgid "Hi, {userName} <0>({userEmail})</0>"
msgstr "Hi, {userName} <0>({userEmail})</0>"
@ -983,8 +1013,8 @@ msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:901
#: 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/document-flow/add-signers.tsx:550
#: packages/ui/primitives/document-flow/add-signers.tsx:556
#: packages/ui/primitives/document-flow/types.ts:55
#: packages/ui/primitives/template-flow/add-template-fields.tsx:664
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
@ -1102,7 +1132,7 @@ msgstr "Pick a number"
msgid "Placeholder"
msgstr "Placeholder"
#: packages/email/template-components/template-document-invite.tsx:46
#: packages/email/template-components/template-document-invite.tsx:56
msgid "Please {0} your document<0/>\"{documentName}\""
msgstr "Please {0} your document<0/>\"{documentName}\""
@ -1151,11 +1181,16 @@ msgstr "Radio values"
msgid "Read only"
msgstr "Read only"
#: packages/email/template-components/template-document-rejected.tsx:32
msgid "Reason for rejection: {rejectionReason}"
msgstr "Reason for rejection: {rejectionReason}"
#: packages/ui/components/recipient/recipient-role-select.tsx:95
msgid "Receives copy"
msgstr "Receives copy"
#: packages/lib/utils/document-audit-logs.ts:338
#: packages/lib/utils/document-audit-logs.ts:353
msgid "Recipient"
msgstr "Recipient"
@ -1182,6 +1217,18 @@ msgstr "Red"
msgid "Redirect URL"
msgstr "Redirect URL"
#: packages/email/template-components/template-document-invite.tsx:96
msgid "Reject Document"
msgstr "Reject Document"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:22
msgid "Rejection Confirmed"
msgstr "Rejection Confirmed"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:34
msgid "Rejection reason: {reason}"
msgstr "Rejection reason: {reason}"
#: packages/lib/server-only/document/resend-document.tsx:192
msgid "Reminder: {0}"
msgstr "Reminder: {0}"
@ -1301,7 +1348,7 @@ msgstr "Share the Link"
msgid "Share your signing experience!"
msgstr "Share your signing experience!"
#: packages/ui/primitives/document-flow/add-signers.tsx:680
#: packages/ui/primitives/document-flow/add-signers.tsx:709
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
msgid "Show advanced settings"
msgstr "Show advanced settings"
@ -1310,7 +1357,7 @@ msgstr "Show advanced settings"
msgid "Sign"
msgstr "Sign"
#: packages/email/template-components/template-document-invite.tsx:87
#: packages/email/template-components/template-document-invite.tsx:104
msgid "Sign Document"
msgstr "Sign Document"
@ -1346,8 +1393,8 @@ msgstr "Signers must have unique emails"
msgid "Signing"
msgstr "Signing"
#: packages/lib/server-only/document/send-completed-email.ts:111
#: packages/lib/server-only/document/send-completed-email.ts:191
#: packages/lib/server-only/document/send-completed-email.ts:114
#: packages/lib/server-only/document/send-completed-email.ts:194
msgid "Signing Complete!"
msgstr "Signing Complete!"
@ -1427,6 +1474,13 @@ msgstr "The authentication required for recipients to sign the signature field."
msgid "The authentication required for recipients to view the document."
msgstr "The authentication required for recipients to view the document."
#~ msgid "The document owner has been notified of this rejection. No further action is required from you at this time."
#~ msgstr "The document owner has been notified of this rejection. No further action is required from you at this time."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:39
msgid "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
msgstr "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
msgid "The document's name"
msgstr "The document's name"
@ -1507,6 +1561,13 @@ msgstr "This document is password protected. Please enter the password to view t
msgid "This document was sent using <0>Documenso.</0>"
msgstr "This document was sent using <0>Documenso.</0>"
#~ msgid "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#~ msgstr "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:26
msgid "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
msgstr "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
#: packages/ui/components/document/document-email-checkboxes.tsx:94
msgid "This email is sent to the recipient if they are removed from a pending document."
msgstr "This email is sent to the recipient if they are removed from a pending document."
@ -1603,7 +1664,8 @@ msgstr "View all documents sent to and from this email address"
msgid "View document"
msgstr "View document"
#: packages/email/template-components/template-document-invite.tsx:88
#: packages/email/template-components/template-document-invite.tsx:105
#: packages/email/template-components/template-document-rejected.tsx:44
#: packages/ui/primitives/document-flow/add-subject.tsx:90
#: packages/ui/primitives/document-flow/add-subject.tsx:91
msgid "View Document"
@ -1681,6 +1743,10 @@ msgstr "You can revoke access at any time in your team settings on Documenso <0>
msgid "You can use the following variables in your message:"
msgstr "You can use the following variables in your message:"
#: packages/email/template-components/template-document-rejected.tsx:37
msgid "You can view the document and its status by clicking the button below."
msgstr "You can view the document and its status by clicking the button below."
#: packages/ui/primitives/document-dropzone.tsx:43
msgid "You cannot upload documents at this time."
msgstr "You cannot upload documents at this time."
@ -1714,6 +1780,13 @@ msgstr "You have initiated the document {0} that requires you to {recipientActio
msgid "You have reached your document limit."
msgstr "You have reached your document limit."
#: packages/email/templates/document-rejection-confirmed.tsx:27
msgid "You have rejected the document '{documentName}'"
msgstr "You have rejected the document '{documentName}'"
#~ msgid "You have rejected the document \"{documentName}\""
#~ msgstr "You have rejected the document \"{documentName}\""
#: packages/email/template-components/template-document-self-signed.tsx:42
msgid "You have signed “{documentName}”"
msgstr "You have signed “{documentName}”"

File diff suppressed because one or more lines are too long

View File

@ -45,15 +45,15 @@ msgstr "\"{placeholderEmail}\" on behalf of \"{0}\" has invited you to sign \"ex
msgid "\"{teamUrl}\" has invited you to sign \"example document\"."
msgstr "\"{teamUrl}\" has invited you to sign \"example document\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:78
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:79
msgid "({0}) has invited you to approve this document"
msgstr "({0}) has invited you to approve this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
msgid "({0}) has invited you to sign this document"
msgstr "({0}) has invited you to sign this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
msgid "({0}) has invited you to view this document"
msgstr "({0}) has invited you to view this document"
@ -653,7 +653,7 @@ msgstr "Approve"
msgid "Approve Document"
msgstr "Approve Document"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:85
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:94
msgid "Approved"
msgstr "Approved"
@ -661,6 +661,10 @@ msgstr "Approved"
msgid "Are you sure you want to delete this token?"
msgstr "Are you sure you want to delete this token?"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:120
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Are you sure you want to reject this document? This action cannot be undone."
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:188
msgid "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
msgstr "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
@ -809,6 +813,7 @@ msgstr "By using the electronic signature feature, you are consenting to conduct
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220
#: 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]/reject-document-dialog.tsx:153
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
@ -941,7 +946,7 @@ msgid "Complete Viewing"
msgstr "Complete Viewing"
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:208
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:77
#: apps/web/src/components/formatter/document-status.tsx:28
msgid "Completed"
msgstr "Completed"
@ -1038,7 +1043,7 @@ msgstr "Controls the formatting of the message that will be sent when inviting a
msgid "Copied"
msgstr "Copied"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:133
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:162
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:77
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:31
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:163
@ -1512,6 +1517,10 @@ msgstr "Document preferences updated"
msgid "Document re-sent"
msgstr "Document re-sent"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:83
msgid "Document Rejected"
msgstr "Document Rejected"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:36
msgid "Document resealed"
msgstr "Document resealed"
@ -2295,7 +2304,7 @@ msgstr "Member Since"
msgid "Members"
msgstr "Members"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:46
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:55
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:35
msgid "Modify recipients"
msgstr "Modify recipients"
@ -2389,6 +2398,10 @@ msgstr "Next field"
msgid "No active drafts"
msgstr "No active drafts"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:99
msgid "No further action is required from you at this time."
msgstr "No further action is required from you at this time."
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx:42
msgid "No payment required"
msgstr "No payment required"
@ -2405,7 +2418,7 @@ msgstr "No recent activity"
msgid "No recent documents"
msgstr "No recent documents"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:61
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:70
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:49
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:96
msgid "No recipients"
@ -2495,7 +2508,7 @@ msgstr "Only managers and above can access and view the document"
msgid "Oops! Something went wrong."
msgstr "Oops! Something went wrong."
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:140
msgid "Opened"
msgstr "Opened"
@ -2594,7 +2607,7 @@ msgstr "Payment is required to finalise the creation of your team."
msgid "Payment overdue"
msgstr "Payment overdue"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:122
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:131
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:211
#: apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx:82
#: apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx:77
@ -2687,6 +2700,10 @@ msgstr "Please note that this action is irreversible. Once confirmed, your webho
msgid "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
msgstr "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:37
msgid "Please provide a reason"
msgstr "Please provide a reason"
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:127
msgid "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
msgstr "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
@ -2795,7 +2812,7 @@ msgstr "Read only field"
msgid "Read the full <0>signature disclosure</0>."
msgstr "Read the full <0>signature disclosure</0>."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:97
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:106
msgid "Ready"
msgstr "Ready"
@ -2803,6 +2820,14 @@ msgstr "Ready"
msgid "Reason"
msgstr "Reason"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:146
msgid "Reason for rejection:"
msgstr "Reason for rejection:"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:38
msgid "Reason must be less than 500 characters"
msgstr "Reason must be less than 500 characters"
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:62
msgid "Reauthentication is required to sign this field"
msgstr "Reauthentication is required to sign this field"
@ -2827,7 +2852,7 @@ msgid "Recipient updated"
msgstr "Recipient updated"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx:66
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:40
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:49
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:30
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:139
msgid "Recipients"
@ -2855,6 +2880,17 @@ msgstr "Recovery codes"
msgid "Registration Successful"
msgstr "Registration Successful"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:109
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:116
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:162
msgid "Reject Document"
msgstr "Reject Document"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:141
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
msgid "Rejected"
msgstr "Rejected"
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:34
msgid "Remembered your password? <0>Sign In</0>"
msgstr "Remembered your password? <0>Sign In</0>"
@ -3084,7 +3120,7 @@ msgstr "Sending Reset Email..."
msgid "Sending..."
msgstr "Sending..."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:92
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:101
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:248
msgid "Sent"
msgstr "Sent"
@ -3231,7 +3267,7 @@ msgstr "Signatures Collected"
msgid "Signatures will appear once the document has been completed"
msgstr "Signatures will appear once the document has been completed"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:105
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:114
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:270
#: apps/web/src/components/document/document-read-only-fields.tsx:84
msgid "Signed"
@ -3640,6 +3676,10 @@ 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/(signing)/sign/[token]/rejected/page.tsx:92
msgid "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
msgstr "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:182
msgid "The document was created but could not be sent to recipients."
msgstr "The document was created but could not be sent to recipients."
@ -3694,7 +3734,7 @@ msgstr "The recipient has been updated successfully"
msgid "The selected team member will receive an email which they must accept before the team is transferred"
msgstr "The selected team member will receive an email which they must accept before the team is transferred"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:134
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:163
#: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:118
msgid "The signing link has been copied to your clipboard."
@ -4136,7 +4176,7 @@ msgstr "Unable to sign in"
msgid "Unauthorized"
msgstr "Unauthorized"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:155
msgid "Uncompleted"
msgstr "Uncompleted"
@ -4381,12 +4421,12 @@ msgstr "View Recovery Codes"
msgid "View teams"
msgstr "View teams"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:111
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:120
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:259
msgid "Viewed"
msgstr "Viewed"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:125
msgid "Waiting"
msgstr "Waiting"
@ -4841,6 +4881,10 @@ msgstr "You have reached your document limit."
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>"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:88
msgid "You have rejected this document"
msgstr "You have rejected this document"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:50
msgid "You have successfully left this team."
msgstr "You have successfully left this team."

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: es\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -79,7 +79,7 @@ msgstr "{inviterName} ha cancelado el documento {documentName}, ya no necesitas
msgid "{inviterName} has cancelled the document<0/>\"{documentName}\""
msgstr "{inviterName} ha cancelado el documento<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:65
#: packages/email/template-components/template-document-invite.tsx:75
msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgstr "{inviterName} te ha invitado a {0}<0/>\"{documentName}\""
@ -99,7 +99,7 @@ msgstr "{inviterName} te ha eliminado del documento {documentName}."
msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} te ha eliminado del documento<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:53
#: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
msgstr "{inviterName} en nombre de {teamName} te ha invitado a {0}"
@ -151,11 +151,11 @@ msgstr "{prefix} eliminó un campo"
msgid "{prefix} removed a recipient"
msgstr "{prefix} eliminó un destinatario"
#: packages/lib/utils/document-audit-logs.ts:355
#: packages/lib/utils/document-audit-logs.ts:365
msgid "{prefix} resent an email to {0}"
msgstr "{prefix} reenviaron un correo electrónico a {0}"
#: packages/lib/utils/document-audit-logs.ts:356
#: packages/lib/utils/document-audit-logs.ts:366
msgid "{prefix} sent an email to {0}"
msgstr "{prefix} envió un correo electrónico a {0}"
@ -207,7 +207,15 @@ msgstr "{prefix} actualizó la visibilidad del documento"
msgid "{recipientName} {action} a document by using one of your direct links"
msgstr "{recipientName} {action} un documento utilizando uno de tus enlaces directos"
#: packages/email/template-components/template-document-invite.tsx:58
#: packages/email/templates/document-rejected.tsx:27
msgid "{recipientName} has rejected the document '{documentName}'"
msgstr "{recipientName} ha rechazado el documento '{documentName}'"
#: packages/email/template-components/template-document-rejected.tsx:25
msgid "{signerName} has rejected the document \"{documentName}\"."
msgstr "{signerName} ha rechazado el documento \"{documentName}\"."
#: packages/email/template-components/template-document-invite.tsx:68
msgid "{teamName} has invited you to {0}"
msgstr "{teamName} te ha invitado a {0}"
@ -231,6 +239,10 @@ msgstr "{userName} envió una copia del documento"
msgid "{userName} completed their task"
msgstr "{userName} completó su tarea"
#: packages/lib/utils/document-audit-logs.ts:355
msgid "{userName} rejected the document"
msgstr "{userName} rechazó el documento"
#: packages/lib/utils/document-audit-logs.ts:341
msgid "{userName} signed the document"
msgstr "{userName} firmó el documento"
@ -398,7 +410,7 @@ msgstr "Agregar otra opción"
msgid "Add another value"
msgstr "Agregar otro valor"
#: packages/ui/primitives/document-flow/add-signers.tsx:662
#: packages/ui/primitives/document-flow/add-signers.tsx:691
msgid "Add myself"
msgstr "Agregame"
@ -410,7 +422,7 @@ msgstr "Agregame"
msgid "Add Placeholder Recipient"
msgstr "Agregar destinatario de marcador de posición"
#: packages/ui/primitives/document-flow/add-signers.tsx:651
#: packages/ui/primitives/document-flow/add-signers.tsx:680
msgid "Add Signer"
msgstr "Agregar firmante"
@ -460,7 +472,7 @@ msgstr "Se produjo un error al cargar el documento."
msgid "Approve"
msgstr "Aprobar"
#: packages/email/template-components/template-document-invite.tsx:89
#: packages/email/template-components/template-document-invite.tsx:106
msgid "Approve Document"
msgstr "Aprobar Documento"
@ -590,7 +602,7 @@ msgstr "Continuar"
#~ msgid "Continue by {0} the document."
#~ msgstr "Continue by {0} the document."
#: packages/email/template-components/template-document-invite.tsx:76
#: packages/email/template-components/template-document-invite.tsx:86
msgid "Continue by approving the document."
msgstr "Continúa aprobando el documento."
@ -598,11 +610,11 @@ msgstr "Continúa aprobando el documento."
msgid "Continue by downloading the document."
msgstr "Continúa descargando el documento."
#: packages/email/template-components/template-document-invite.tsx:74
#: packages/email/template-components/template-document-invite.tsx:84
msgid "Continue by signing the document."
msgstr "Continúa firmando el documento."
#: packages/email/template-components/template-document-invite.tsx:75
#: packages/email/template-components/template-document-invite.tsx:85
msgid "Continue by viewing the document."
msgstr "Continúa viendo el documento."
@ -658,6 +670,14 @@ msgstr "¿No solicitaste un cambio de contraseña? Estamos aquí para ayudarte a
msgid "Direct link receiver"
msgstr "Receptor de enlace directo"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:149
msgid "Document \"{0}\" - Rejected by {1}"
msgstr "Documento \"{0}\" - Rechazado por {1}"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:109
msgid "Document \"{0}\" - Rejection Confirmed"
msgstr "Documento \"{0}\" - Rechazo confirmado"
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
#: packages/ui/primitives/document-flow/add-settings.tsx:216
#: packages/ui/primitives/template-flow/add-template-settings.tsx:202
@ -673,8 +693,8 @@ msgstr "Se actualizó la autenticación de acceso al documento"
msgid "Document Cancelled"
msgstr "Documento cancelado"
#: packages/lib/utils/document-audit-logs.ts:359
#: packages/lib/utils/document-audit-logs.ts:360
#: packages/lib/utils/document-audit-logs.ts:369
#: packages/lib/utils/document-audit-logs.ts:370
msgid "Document completed"
msgstr "Documento completado"
@ -728,6 +748,13 @@ msgstr "Documento abierto"
msgid "Document pending email"
msgstr "Correo electrónico de documento pendiente"
#: packages/email/template-components/template-document-rejected.tsx:21
msgid "Document Rejected"
msgstr "Documento Rechazado"
#~ msgid "Document Rejection Confirmed"
#~ msgstr "Document Rejection Confirmed"
#: packages/lib/utils/document-audit-logs.ts:330
msgid "Document sent"
msgstr "Documento enviado"
@ -773,8 +800,8 @@ msgstr "Opciones de menú desplegable"
#: packages/lib/constants/document.ts:28
#: packages/ui/primitives/document-flow/add-fields.tsx:875
#: packages/ui/primitives/document-flow/add-signature.tsx:272
#: packages/ui/primitives/document-flow/add-signers.tsx:500
#: packages/ui/primitives/document-flow/add-signers.tsx:507
#: packages/ui/primitives/document-flow/add-signers.tsx:512
#: packages/ui/primitives/document-flow/add-signers.tsx:519
#: packages/ui/primitives/document-flow/types.ts:54
#: packages/ui/primitives/template-flow/add-template-fields.tsx:638
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
@ -790,11 +817,11 @@ msgstr "Se requiere email"
msgid "Email Options"
msgstr "Opciones de correo electrónico"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email resent"
msgstr "Correo electrónico reeenviado"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email sent"
msgstr "Correo electrónico enviado"
@ -903,6 +930,9 @@ msgstr "Regresar"
msgid "Green"
msgstr "Verde"
#~ msgid "Hello {recipientName},"
#~ msgstr "Hello {recipientName},"
#: packages/email/templates/reset-password.tsx:56
msgid "Hi, {userName} <0>({userEmail})</0>"
msgstr "Hola, {userName} <0>({userEmail})</0>"
@ -988,8 +1018,8 @@ msgstr "Mín"
#: packages/ui/primitives/document-flow/add-fields.tsx:901
#: 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/document-flow/add-signers.tsx:550
#: packages/ui/primitives/document-flow/add-signers.tsx:556
#: packages/ui/primitives/document-flow/types.ts:55
#: packages/ui/primitives/template-flow/add-template-fields.tsx:664
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
@ -1107,7 +1137,7 @@ msgstr "Seleccione un número"
msgid "Placeholder"
msgstr "Marcador de posición"
#: packages/email/template-components/template-document-invite.tsx:46
#: packages/email/template-components/template-document-invite.tsx:56
msgid "Please {0} your document<0/>\"{documentName}\""
msgstr "Por favor {0} tu documento<0/>\"{documentName}\""
@ -1156,11 +1186,16 @@ msgstr "Valores de radio"
msgid "Read only"
msgstr "Solo lectura"
#: packages/email/template-components/template-document-rejected.tsx:32
msgid "Reason for rejection: {rejectionReason}"
msgstr "Razón del rechazo: {rejectionReason}"
#: packages/ui/components/recipient/recipient-role-select.tsx:95
msgid "Receives copy"
msgstr "Recibe copia"
#: packages/lib/utils/document-audit-logs.ts:338
#: packages/lib/utils/document-audit-logs.ts:353
msgid "Recipient"
msgstr "Destinatario"
@ -1187,6 +1222,18 @@ msgstr "Rojo"
msgid "Redirect URL"
msgstr "URL de redirección"
#: packages/email/template-components/template-document-invite.tsx:96
msgid "Reject Document"
msgstr "Rechazar Documento"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:22
msgid "Rejection Confirmed"
msgstr "Rechazo Confirmado"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:34
msgid "Rejection reason: {reason}"
msgstr "Razón del rechazo: {reason}"
#: packages/lib/server-only/document/resend-document.tsx:192
msgid "Reminder: {0}"
msgstr "Recordatorio: {0}"
@ -1306,7 +1353,7 @@ msgstr "Compartir el enlace"
msgid "Share your signing experience!"
msgstr "¡Comparte tu experiencia de firma!"
#: packages/ui/primitives/document-flow/add-signers.tsx:680
#: packages/ui/primitives/document-flow/add-signers.tsx:709
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
msgid "Show advanced settings"
msgstr "Mostrar configuraciones avanzadas"
@ -1315,7 +1362,7 @@ msgstr "Mostrar configuraciones avanzadas"
msgid "Sign"
msgstr "Firmar"
#: packages/email/template-components/template-document-invite.tsx:87
#: packages/email/template-components/template-document-invite.tsx:104
msgid "Sign Document"
msgstr "Firmar Documento"
@ -1351,8 +1398,8 @@ msgstr "Los firmantes deben tener correos electrónicos únicos"
msgid "Signing"
msgstr "Firmando"
#: packages/lib/server-only/document/send-completed-email.ts:111
#: packages/lib/server-only/document/send-completed-email.ts:191
#: packages/lib/server-only/document/send-completed-email.ts:114
#: packages/lib/server-only/document/send-completed-email.ts:194
msgid "Signing Complete!"
msgstr "¡Firma completa!"
@ -1432,6 +1479,13 @@ msgstr "La autenticación requerida para que los destinatarios firmen el campo d
msgid "The authentication required for recipients to view the document."
msgstr "La autenticación requerida para que los destinatarios vean el documento."
#~ msgid "The document owner has been notified of this rejection. No further action is required from you at this time."
#~ msgstr "The document owner has been notified of this rejection. No further action is required from you at this time."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:39
msgid "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
msgstr "El propietario del documento ha sido notificado de este rechazo. No se requiere ninguna acción adicional de su parte en este momento. El propietario del documento puede contactarlo con cualquier pregunta relacionada con este rechazo."
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
msgid "The document's name"
msgstr "El nombre del documento"
@ -1512,6 +1566,13 @@ msgstr "Este documento está protegido por contraseña. Por favor ingrese la con
msgid "This document was sent using <0>Documenso.</0>"
msgstr "Este documento fue enviado usando <0>Documenso.</0>"
#~ msgid "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#~ msgstr "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:26
msgid "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
msgstr "Este correo electrónico confirma que ha rechazado el documento <0>\"{documentName}\"</0> enviado por {documentOwnerName}."
#: packages/ui/components/document/document-email-checkboxes.tsx:94
msgid "This email is sent to the recipient if they are removed from a pending document."
msgstr "Este correo electrónico se envía al destinatario si es eliminado de un documento pendiente."
@ -1608,7 +1669,8 @@ msgstr "Ver todos los documentos enviados hacia y desde esta dirección de corre
msgid "View document"
msgstr "Ver documento"
#: packages/email/template-components/template-document-invite.tsx:88
#: packages/email/template-components/template-document-invite.tsx:105
#: packages/email/template-components/template-document-rejected.tsx:44
#: packages/ui/primitives/document-flow/add-subject.tsx:90
#: packages/ui/primitives/document-flow/add-subject.tsx:91
msgid "View Document"
@ -1686,6 +1748,10 @@ msgstr "Puedes revocar el acceso en cualquier momento en la configuración de tu
msgid "You can use the following variables in your message:"
msgstr "Puede usar las siguientes variables en su mensaje:"
#: packages/email/template-components/template-document-rejected.tsx:37
msgid "You can view the document and its status by clicking the button below."
msgstr "Puede ver el documento y su estado haciendo clic en el botón de abajo."
#: packages/ui/primitives/document-dropzone.tsx:43
msgid "You cannot upload documents at this time."
msgstr "No puede cargar documentos en este momento."
@ -1719,6 +1785,13 @@ msgstr "Has iniciado el documento {0} que requiere que {recipientActionVerb}."
msgid "You have reached your document limit."
msgstr "Ha alcanzado su límite de documentos."
#: packages/email/templates/document-rejection-confirmed.tsx:27
msgid "You have rejected the document '{documentName}'"
msgstr "Ha rechazado el documento '{documentName}'"
#~ msgid "You have rejected the document \"{documentName}\""
#~ msgstr "You have rejected the document \"{documentName}\""
#: packages/email/template-components/template-document-self-signed.tsx:42
msgid "You have signed “{documentName}”"
msgstr "Has firmado “{documentName}”"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: es\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: es\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -50,15 +50,15 @@ msgstr "\"{placeholderEmail}\" en nombre de \"{0}\" te ha invitado a firmar \"do
msgid "\"{teamUrl}\" has invited you to sign \"example document\"."
msgstr "\"{teamUrl}\" te ha invitado a firmar \"ejemplo de documento\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:78
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:79
msgid "({0}) has invited you to approve this document"
msgstr "({0}) te ha invitado a aprobar este documento"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
msgid "({0}) has invited you to sign this document"
msgstr "({0}) te ha invitado a firmar este documento"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
msgid "({0}) has invited you to view this document"
msgstr "({0}) te ha invitado a ver este documento"
@ -658,7 +658,7 @@ msgstr "Aprobar"
msgid "Approve Document"
msgstr "Aprobar Documento"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:85
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:94
msgid "Approved"
msgstr "Aprobado"
@ -666,6 +666,10 @@ msgstr "Aprobado"
msgid "Are you sure you want to delete this token?"
msgstr "¿Estás seguro de que deseas eliminar este token?"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:120
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Are you sure you want to reject this document? This action cannot be undone."
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:188
msgid "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
msgstr "¿Está seguro de que desea eliminar la clave de acceso <0>{passkeyName}</0>?"
@ -814,6 +818,7 @@ msgstr "Al utilizar la función de firma electrónica, usted está consintiendo
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220
#: 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]/reject-document-dialog.tsx:153
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
@ -946,7 +951,7 @@ msgid "Complete Viewing"
msgstr "Completar Visualización"
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:208
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:77
#: apps/web/src/components/formatter/document-status.tsx:28
msgid "Completed"
msgstr "Completado"
@ -1043,7 +1048,7 @@ msgstr "Controla el formato del mensaje que se enviará al invitar a un destinat
msgid "Copied"
msgstr "Copiado"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:133
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:162
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:77
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:31
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:163
@ -1517,6 +1522,10 @@ msgstr "Preferencias del documento actualizadas"
msgid "Document re-sent"
msgstr "Documento reenviado"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:83
msgid "Document Rejected"
msgstr "Document Rejected"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:36
msgid "Document resealed"
msgstr "Documento sellado nuevamente"
@ -2300,7 +2309,7 @@ msgstr "Miembro desde"
msgid "Members"
msgstr "Miembros"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:46
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:55
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:35
msgid "Modify recipients"
msgstr "Modificar destinatarios"
@ -2394,6 +2403,10 @@ msgstr "Siguiente campo"
msgid "No active drafts"
msgstr "No hay borradores activos"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:99
msgid "No further action is required from you at this time."
msgstr "No further action is required from you at this time."
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx:42
msgid "No payment required"
msgstr "No se requiere pago"
@ -2410,7 +2423,7 @@ msgstr "No hay actividad reciente"
msgid "No recent documents"
msgstr "No hay documentos recientes"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:61
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:70
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:49
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:96
msgid "No recipients"
@ -2500,7 +2513,7 @@ msgstr "Solo los gerentes y superiores pueden acceder y ver el documento"
msgid "Oops! Something went wrong."
msgstr "¡Ups! Algo salió mal."
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:140
msgid "Opened"
msgstr "Abierto"
@ -2599,7 +2612,7 @@ msgstr "Se requiere pago para finalizar la creación de tu equipo."
msgid "Payment overdue"
msgstr "Pago atrasado"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:122
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:131
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:211
#: apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx:82
#: apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx:77
@ -2692,6 +2705,10 @@ msgstr "Por favor, ten en cuenta que esta acción es irreversible. Una vez confi
msgid "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
msgstr "Por favor, ten en cuenta que perderás acceso a todos los documentos asociados con este equipo y todos los miembros serán eliminados y notificados"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:37
msgid "Please provide a reason"
msgstr "Please provide a reason"
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:127
msgid "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
msgstr "Por favor, proporciona un token del autenticador o un código de respaldo. Si no tienes un código de respaldo disponible, contacta al soporte."
@ -2800,7 +2817,7 @@ msgstr "Campo de solo lectura"
msgid "Read the full <0>signature disclosure</0>."
msgstr "Lea la <0>divulgación de firma</0> completa."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:97
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:106
msgid "Ready"
msgstr "Listo"
@ -2808,6 +2825,14 @@ msgstr "Listo"
msgid "Reason"
msgstr "Razón"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:146
msgid "Reason for rejection:"
msgstr "Reason for rejection:"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:38
msgid "Reason must be less than 500 characters"
msgstr "Reason must be less than 500 characters"
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:62
msgid "Reauthentication is required to sign this field"
msgstr "Se requiere reautenticación para firmar este campo"
@ -2832,7 +2857,7 @@ msgid "Recipient updated"
msgstr "Destinatario actualizado"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx:66
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:40
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:49
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:30
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:139
msgid "Recipients"
@ -2860,6 +2885,17 @@ msgstr "Códigos de recuperación"
msgid "Registration Successful"
msgstr "Registro exitoso"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:109
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:116
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:162
msgid "Reject Document"
msgstr "Reject Document"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:141
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
msgid "Rejected"
msgstr "Rejected"
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:34
msgid "Remembered your password? <0>Sign In</0>"
msgstr "¿Recordaste tu contraseña? <0>Iniciar sesión</0>"
@ -3089,7 +3125,7 @@ msgstr "Enviando correo de restablecimiento..."
msgid "Sending..."
msgstr "Enviando..."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:92
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:101
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:248
msgid "Sent"
msgstr "Enviado"
@ -3236,7 +3272,7 @@ msgstr "Firmas recolectadas"
msgid "Signatures will appear once the document has been completed"
msgstr "Las firmas aparecerán una vez que el documento se haya completado"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:105
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:114
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:270
#: apps/web/src/components/document/document-read-only-fields.tsx:84
msgid "Signed"
@ -3645,6 +3681,10 @@ msgstr "El documento ha sido movido con éxito al equipo seleccionado."
msgid "The document is now completed, please follow any instructions provided within the parent application."
msgstr "El documento ahora está completado, por favor sigue cualquier instrucción proporcionada dentro de la aplicación principal."
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:92
msgid "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
msgstr "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:182
msgid "The document was created but could not be sent to recipients."
msgstr "El documento fue creado pero no se pudo enviar a los destinatarios."
@ -3699,7 +3739,7 @@ msgstr "El destinatario ha sido actualizado con éxito"
msgid "The selected team member will receive an email which they must accept before the team is transferred"
msgstr "El miembro del equipo seleccionado recibirá un correo electrónico que debe aceptar antes de que se transfiera el equipo"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:134
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:163
#: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:118
msgid "The signing link has been copied to your clipboard."
@ -4141,7 +4181,7 @@ msgstr "No se pudo iniciar sesión"
msgid "Unauthorized"
msgstr "No autorizado"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:155
msgid "Uncompleted"
msgstr "Incompleto"
@ -4386,12 +4426,12 @@ msgstr "Ver Códigos de Recuperación"
msgid "View teams"
msgstr "Ver equipos"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:111
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:120
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:259
msgid "Viewed"
msgstr "Visto"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:125
msgid "Waiting"
msgstr "Esperando"
@ -4846,6 +4886,10 @@ msgstr "Has alcanzado tu límite de documentos."
msgid "You have reached your document limit. <0>Upgrade your account to continue!</0>"
msgstr "Has alcanzado tu límite de documentos. <0>¡Actualiza tu cuenta para continuar!</0>"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:88
msgid "You have rejected this document"
msgstr "You have rejected this document"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:50
msgid "You have successfully left this team."
msgstr "Has salido de este equipo con éxito."

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@ -79,7 +79,7 @@ msgstr "{inviterName} a annulé le document {documentName}, vous n'avez plus bes
msgid "{inviterName} has cancelled the document<0/>\"{documentName}\""
msgstr "{inviterName} a annulé le document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:65
#: packages/email/template-components/template-document-invite.tsx:75
msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgstr "{inviterName} vous a invité à {0}<0/>\"{documentName}\""
@ -99,7 +99,7 @@ msgstr "{inviterName} vous a retiré du document {documentName}."
msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} vous a retiré du document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:53
#: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
msgstr "{inviterName} au nom de {teamName} vous a invité à {0}"
@ -151,11 +151,11 @@ msgstr "{prefix} a supprimé un champ"
msgid "{prefix} removed a recipient"
msgstr "{prefix} a supprimé un destinataire"
#: packages/lib/utils/document-audit-logs.ts:355
#: packages/lib/utils/document-audit-logs.ts:365
msgid "{prefix} resent an email to {0}"
msgstr "{prefix} a renvoyé un e-mail à {0}"
#: packages/lib/utils/document-audit-logs.ts:356
#: packages/lib/utils/document-audit-logs.ts:366
msgid "{prefix} sent an email to {0}"
msgstr "{prefix} a envoyé un email à {0}"
@ -207,7 +207,15 @@ msgstr "{prefix} a mis à jour la visibilité du document"
msgid "{recipientName} {action} a document by using one of your direct links"
msgstr "{recipientName} {action} un document en utilisant l'un de vos liens directs"
#: packages/email/template-components/template-document-invite.tsx:58
#: packages/email/templates/document-rejected.tsx:27
msgid "{recipientName} has rejected the document '{documentName}'"
msgstr "{recipientName} a rejeté le document '{documentName}'"
#: packages/email/template-components/template-document-rejected.tsx:25
msgid "{signerName} has rejected the document \"{documentName}\"."
msgstr "{signerName} a rejeté le document \"{documentName}\"."
#: packages/email/template-components/template-document-invite.tsx:68
msgid "{teamName} has invited you to {0}"
msgstr "{teamName} vous a invité à {0}"
@ -231,6 +239,10 @@ msgstr "{userName} a mis en copie le document"
msgid "{userName} completed their task"
msgstr "{userName} a complété sa tâche"
#: packages/lib/utils/document-audit-logs.ts:355
msgid "{userName} rejected the document"
msgstr "{userName} a rejeté le document"
#: packages/lib/utils/document-audit-logs.ts:341
msgid "{userName} signed the document"
msgstr "{userName} a signé le document"
@ -398,7 +410,7 @@ msgstr "Ajouter une autre option"
msgid "Add another value"
msgstr "Ajouter une autre valeur"
#: packages/ui/primitives/document-flow/add-signers.tsx:662
#: packages/ui/primitives/document-flow/add-signers.tsx:691
msgid "Add myself"
msgstr "Ajoutez-moi"
@ -410,7 +422,7 @@ msgstr "Ajoutez-moi"
msgid "Add Placeholder Recipient"
msgstr "Ajouter un destinataire de substitution"
#: packages/ui/primitives/document-flow/add-signers.tsx:651
#: packages/ui/primitives/document-flow/add-signers.tsx:680
msgid "Add Signer"
msgstr "Ajouter un signataire"
@ -460,7 +472,7 @@ msgstr "Une erreur s'est produite lors du chargement du document."
msgid "Approve"
msgstr "Approuver"
#: packages/email/template-components/template-document-invite.tsx:89
#: packages/email/template-components/template-document-invite.tsx:106
msgid "Approve Document"
msgstr "Approuver le document"
@ -590,7 +602,7 @@ msgstr "Continuer"
#~ msgid "Continue by {0} the document."
#~ msgstr "Continue by {0} the document."
#: packages/email/template-components/template-document-invite.tsx:76
#: packages/email/template-components/template-document-invite.tsx:86
msgid "Continue by approving the document."
msgstr "Continuez en approuvant le document."
@ -598,11 +610,11 @@ msgstr "Continuez en approuvant le document."
msgid "Continue by downloading the document."
msgstr "Continuez en téléchargeant le document."
#: packages/email/template-components/template-document-invite.tsx:74
#: packages/email/template-components/template-document-invite.tsx:84
msgid "Continue by signing the document."
msgstr "Continuez en signant le document."
#: packages/email/template-components/template-document-invite.tsx:75
#: packages/email/template-components/template-document-invite.tsx:85
msgid "Continue by viewing the document."
msgstr "Continuez en visualisant le document."
@ -658,6 +670,14 @@ msgstr "Vous n'avez pas demandé de changement de mot de passe ? Nous sommes ici
msgid "Direct link receiver"
msgstr "Receveur de lien direct"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:149
msgid "Document \"{0}\" - Rejected by {1}"
msgstr "Document \"{0}\" - Rejeté par {1}"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:109
msgid "Document \"{0}\" - Rejection Confirmed"
msgstr "Document \"{0}\" - Rejet Confirmé"
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
#: packages/ui/primitives/document-flow/add-settings.tsx:216
#: packages/ui/primitives/template-flow/add-template-settings.tsx:202
@ -673,8 +693,8 @@ msgstr "L'authentification d'accès au document a été mise à jour"
msgid "Document Cancelled"
msgstr "Document Annulé"
#: packages/lib/utils/document-audit-logs.ts:359
#: packages/lib/utils/document-audit-logs.ts:360
#: packages/lib/utils/document-audit-logs.ts:369
#: packages/lib/utils/document-audit-logs.ts:370
msgid "Document completed"
msgstr "Document terminé"
@ -728,6 +748,13 @@ msgstr "Document ouvert"
msgid "Document pending email"
msgstr "E-mail de document en attente"
#: packages/email/template-components/template-document-rejected.tsx:21
msgid "Document Rejected"
msgstr "Document Rejeté"
#~ msgid "Document Rejection Confirmed"
#~ msgstr "Document Rejection Confirmed"
#: packages/lib/utils/document-audit-logs.ts:330
msgid "Document sent"
msgstr "Document envoyé"
@ -773,8 +800,8 @@ msgstr "Options de liste déroulante"
#: packages/lib/constants/document.ts:28
#: packages/ui/primitives/document-flow/add-fields.tsx:875
#: packages/ui/primitives/document-flow/add-signature.tsx:272
#: packages/ui/primitives/document-flow/add-signers.tsx:500
#: packages/ui/primitives/document-flow/add-signers.tsx:507
#: packages/ui/primitives/document-flow/add-signers.tsx:512
#: packages/ui/primitives/document-flow/add-signers.tsx:519
#: packages/ui/primitives/document-flow/types.ts:54
#: packages/ui/primitives/template-flow/add-template-fields.tsx:638
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
@ -790,11 +817,11 @@ msgstr "L'email est requis"
msgid "Email Options"
msgstr "Options d'email"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email resent"
msgstr "Email renvoyé"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email sent"
msgstr "Email envoyé"
@ -903,6 +930,9 @@ msgstr "Retourner"
msgid "Green"
msgstr "Vert"
#~ msgid "Hello {recipientName},"
#~ msgstr "Hello {recipientName},"
#: packages/email/templates/reset-password.tsx:56
msgid "Hi, {userName} <0>({userEmail})</0>"
msgstr "Bonjour, {userName} <0>({userEmail})</0>"
@ -988,8 +1018,8 @@ msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:901
#: 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/document-flow/add-signers.tsx:550
#: packages/ui/primitives/document-flow/add-signers.tsx:556
#: packages/ui/primitives/document-flow/types.ts:55
#: packages/ui/primitives/template-flow/add-template-fields.tsx:664
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
@ -1107,7 +1137,7 @@ msgstr "Choisissez un numéro"
msgid "Placeholder"
msgstr "Espace réservé"
#: packages/email/template-components/template-document-invite.tsx:46
#: packages/email/template-components/template-document-invite.tsx:56
msgid "Please {0} your document<0/>\"{documentName}\""
msgstr "Veuillez {0} votre document<0/>\"{documentName}\""
@ -1156,11 +1186,16 @@ msgstr "Valeurs radio"
msgid "Read only"
msgstr "Lecture seule"
#: packages/email/template-components/template-document-rejected.tsx:32
msgid "Reason for rejection: {rejectionReason}"
msgstr "Raison du rejet : {rejectionReason}"
#: packages/ui/components/recipient/recipient-role-select.tsx:95
msgid "Receives copy"
msgstr "Recevoir une copie"
#: packages/lib/utils/document-audit-logs.ts:338
#: packages/lib/utils/document-audit-logs.ts:353
msgid "Recipient"
msgstr "Destinataire"
@ -1187,6 +1222,18 @@ msgstr "Rouge"
msgid "Redirect URL"
msgstr "URL de redirection"
#: packages/email/template-components/template-document-invite.tsx:96
msgid "Reject Document"
msgstr "Rejeter le Document"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:22
msgid "Rejection Confirmed"
msgstr "Rejet Confirmé"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:34
msgid "Rejection reason: {reason}"
msgstr "Motif du rejet : {reason}"
#: packages/lib/server-only/document/resend-document.tsx:192
msgid "Reminder: {0}"
msgstr "Rappel : {0}"
@ -1306,7 +1353,7 @@ msgstr "Partager le lien"
msgid "Share your signing experience!"
msgstr "Partagez votre expérience de signature !"
#: packages/ui/primitives/document-flow/add-signers.tsx:680
#: packages/ui/primitives/document-flow/add-signers.tsx:709
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
msgid "Show advanced settings"
msgstr "Afficher les paramètres avancés"
@ -1315,7 +1362,7 @@ msgstr "Afficher les paramètres avancés"
msgid "Sign"
msgstr "Signer"
#: packages/email/template-components/template-document-invite.tsx:87
#: packages/email/template-components/template-document-invite.tsx:104
msgid "Sign Document"
msgstr "Signer le document"
@ -1351,8 +1398,8 @@ msgstr "Les signataires doivent avoir des e-mails uniques"
msgid "Signing"
msgstr "Signature en cours"
#: packages/lib/server-only/document/send-completed-email.ts:111
#: packages/lib/server-only/document/send-completed-email.ts:191
#: packages/lib/server-only/document/send-completed-email.ts:114
#: packages/lib/server-only/document/send-completed-email.ts:194
msgid "Signing Complete!"
msgstr "Signature Complète !"
@ -1432,6 +1479,13 @@ msgstr "L'authentification requise pour que les destinataires signent le champ d
msgid "The authentication required for recipients to view the document."
msgstr "L'authentification requise pour que les destinataires visualisent le document."
#~ msgid "The document owner has been notified of this rejection. No further action is required from you at this time."
#~ msgstr "The document owner has been notified of this rejection. No further action is required from you at this time."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:39
msgid "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
msgstr "Le propriétaire du document a été informé de ce rejet. Aucune action supplémentaire n'est requise de votre part pour le moment. Le propriétaire du document peut vous contacter pour toute question concernant ce rejet."
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
msgid "The document's name"
msgstr "Le nom du document"
@ -1512,6 +1566,13 @@ msgstr "Ce document est protégé par mot de passe. Veuillez entrer le mot de pa
msgid "This document was sent using <0>Documenso.</0>"
msgstr "Ce document a été envoyé via <0>Documenso.</0>"
#~ msgid "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#~ msgstr "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:26
msgid "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
msgstr "Cet e-mail confirme que vous avez rejeté le document <0>\"{documentName}\"</0> envoyé par {documentOwnerName}."
#: packages/ui/components/document/document-email-checkboxes.tsx:94
msgid "This email is sent to the recipient if they are removed from a pending document."
msgstr "Cet e-mail est envoyé au destinataire s'il est retiré d'un document en attente."
@ -1608,7 +1669,8 @@ msgstr "Voir tous les documents envoyés à et depuis cette adresse e-mail"
msgid "View document"
msgstr "Voir le document"
#: packages/email/template-components/template-document-invite.tsx:88
#: packages/email/template-components/template-document-invite.tsx:105
#: packages/email/template-components/template-document-rejected.tsx:44
#: packages/ui/primitives/document-flow/add-subject.tsx:90
#: packages/ui/primitives/document-flow/add-subject.tsx:91
msgid "View Document"
@ -1686,6 +1748,10 @@ msgstr "Vous pouvez révoquer l'accès à tout moment dans les paramètres de vo
msgid "You can use the following variables in your message:"
msgstr "Vous pouvez utiliser les variables suivantes dans votre message :"
#: packages/email/template-components/template-document-rejected.tsx:37
msgid "You can view the document and its status by clicking the button below."
msgstr "Vous pouvez voir le document et son statut en cliquant sur le bouton ci-dessous."
#: packages/ui/primitives/document-dropzone.tsx:43
msgid "You cannot upload documents at this time."
msgstr "Vous ne pouvez pas télécharger de documents pour le moment."
@ -1719,6 +1785,13 @@ msgstr "Vous avez initié le document {0} qui nécessite que vous {recipientActi
msgid "You have reached your document limit."
msgstr "Vous avez atteint votre limite de documents."
#: packages/email/templates/document-rejection-confirmed.tsx:27
msgid "You have rejected the document '{documentName}'"
msgstr "Vous avez rejeté le document '{documentName}'"
#~ msgid "You have rejected the document \"{documentName}\""
#~ msgstr "You have rejected the document \"{documentName}\""
#: packages/email/template-components/template-document-self-signed.tsx:42
msgid "You have signed “{documentName}”"
msgstr "Vous avez signé “{documentName}”"

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

File diff suppressed because one or more lines are too long

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-11-12 05:45\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@ -50,15 +50,15 @@ msgstr "\"{placeholderEmail}\" au nom de \"{0}\" vous a invité à signer \"exem
msgid "\"{teamUrl}\" has invited you to sign \"example document\"."
msgstr "\"{teamUrl}\" vous a invité à signer \"example document\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:78
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:79
msgid "({0}) has invited you to approve this document"
msgstr "({0}) vous a invité à approuver ce document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
msgid "({0}) has invited you to sign this document"
msgstr "({0}) vous a invité à signer ce document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
msgid "({0}) has invited you to view this document"
msgstr "({0}) vous a invité à consulter ce document"
@ -658,7 +658,7 @@ msgstr "Approuver"
msgid "Approve Document"
msgstr "Approuver le document"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:85
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:94
msgid "Approved"
msgstr "Approuvé"
@ -666,6 +666,10 @@ msgstr "Approuvé"
msgid "Are you sure you want to delete this token?"
msgstr "Êtes-vous sûr de vouloir supprimer ce jeton ?"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:120
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Êtes-vous sûr de vouloir rejeter ce document ? Cette action ne peut pas être annulée."
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:188
msgid "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
msgstr "Êtes-vous sûr de vouloir supprimer la clé de passe <0>{passkeyName}</0>."
@ -814,6 +818,7 @@ msgstr "En utilisant la fonctionnalité de signature électronique, vous consent
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220
#: 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]/reject-document-dialog.tsx:153
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
@ -946,7 +951,7 @@ msgid "Complete Viewing"
msgstr "Compléter la visualisation"
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:208
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:77
#: apps/web/src/components/formatter/document-status.tsx:28
msgid "Completed"
msgstr "Complété"
@ -1043,7 +1048,7 @@ msgstr "Contrôle le formatage du message qui sera envoyé lors de l'invitation
msgid "Copied"
msgstr "Copié"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:133
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:162
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:77
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:31
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:163
@ -1517,6 +1522,10 @@ msgstr "Préférences de document mises à jour"
msgid "Document re-sent"
msgstr "Document renvoyé"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:83
msgid "Document Rejected"
msgstr "Document rejeté"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:36
msgid "Document resealed"
msgstr "Document resealé"
@ -2300,7 +2309,7 @@ msgstr "Membre depuis"
msgid "Members"
msgstr "Membres"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:46
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:55
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:35
msgid "Modify recipients"
msgstr "Modifier les destinataires"
@ -2394,6 +2403,10 @@ msgstr "Champ suivant"
msgid "No active drafts"
msgstr "Pas de brouillons actifs"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:99
msgid "No further action is required from you at this time."
msgstr "Aucune autre action n'est requise de votre part pour le moment."
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx:42
msgid "No payment required"
msgstr "Aucun paiement requis"
@ -2410,7 +2423,7 @@ msgstr "Aucune activité récente"
msgid "No recent documents"
msgstr "Aucun document récent"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:61
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:70
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:49
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:96
msgid "No recipients"
@ -2500,7 +2513,7 @@ msgstr "Seuls les responsables et au-dessus peuvent accéder et voir le document
msgid "Oops! Something went wrong."
msgstr "Oups ! Quelque chose a mal tourné."
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:140
msgid "Opened"
msgstr "Ouvert"
@ -2599,7 +2612,7 @@ msgstr "Un paiement est requis pour finaliser la création de votre équipe."
msgid "Payment overdue"
msgstr "Paiement en retard"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:122
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:131
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:211
#: apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx:82
#: apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx:77
@ -2692,6 +2705,10 @@ msgstr "Veuillez noter que cette action est irréversible. Une fois confirmée,
msgid "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
msgstr "Veuillez noter que vous perdrez l'accès à tous les documents associés à cette équipe et que tous les membres seront supprimés et notifiés"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:37
msgid "Please provide a reason"
msgstr "Veuillez fournir une raison"
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:127
msgid "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
msgstr "Veuillez fournir un jeton de l'authentificateur, ou un code de secours. Si vous n'avez pas de code de secours disponible, veuillez contacter le support."
@ -2800,7 +2817,7 @@ msgstr "Champ en lecture seule"
msgid "Read the full <0>signature disclosure</0>."
msgstr "Lisez l'intégralité de la <0>divulgation de signature</0>."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:97
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:106
msgid "Ready"
msgstr "Prêt"
@ -2808,6 +2825,14 @@ msgstr "Prêt"
msgid "Reason"
msgstr "Raison"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:146
msgid "Reason for rejection:"
msgstr "Raison du rejet :"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:38
msgid "Reason must be less than 500 characters"
msgstr "La raison doit contenir moins de 500 caractères"
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:62
msgid "Reauthentication is required to sign this field"
msgstr "Une nouvelle authentification est requise pour signer ce champ"
@ -2832,7 +2857,7 @@ msgid "Recipient updated"
msgstr "Destinataire mis à jour"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx:66
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:40
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:49
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:30
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:139
msgid "Recipients"
@ -2860,6 +2885,17 @@ msgstr "Codes de récupération"
msgid "Registration Successful"
msgstr "Inscription réussie"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:109
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:116
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:162
msgid "Reject Document"
msgstr "Rejeter le document"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:141
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
msgid "Rejected"
msgstr "Rejeté"
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:34
msgid "Remembered your password? <0>Sign In</0>"
msgstr "Vous vous souvenez de votre mot de passe ? <0>Connectez-vous</0>"
@ -3089,7 +3125,7 @@ msgstr "Envoi de l'e-mail de réinitialisation..."
msgid "Sending..."
msgstr "Envoi..."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:92
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:101
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:248
msgid "Sent"
msgstr "Envoyé"
@ -3236,7 +3272,7 @@ msgstr "Signatures collectées"
msgid "Signatures will appear once the document has been completed"
msgstr "Les signatures apparaîtront une fois le document complété"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:105
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:114
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:270
#: apps/web/src/components/document/document-read-only-fields.tsx:84
msgid "Signed"
@ -3645,6 +3681,10 @@ 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/(signing)/sign/[token]/rejected/page.tsx:92
msgid "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
msgstr "Le propriétaire du document a été informé de votre décision. Il peut vous contacter pour des instructions supplémentaires si nécessaire."
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:182
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."
@ -3699,7 +3739,7 @@ msgstr "Le destinataire a été mis à jour avec succès"
msgid "The selected team member will receive an email which they must accept before the team is transferred"
msgstr "Le membre d'équipe sélectionné recevra un e-mail qu'il devra accepter avant que l'équipe soit transférée"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:134
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:163
#: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:118
msgid "The signing link has been copied to your clipboard."
@ -4141,7 +4181,7 @@ msgstr "Impossible de se connecter"
msgid "Unauthorized"
msgstr "Non autorisé"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:155
msgid "Uncompleted"
msgstr "Non complet"
@ -4386,12 +4426,12 @@ msgstr "Voir les codes de récupération"
msgid "View teams"
msgstr "Voir les équipes"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:111
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:120
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:259
msgid "Viewed"
msgstr "Vu"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:125
msgid "Waiting"
msgstr "En attente"
@ -4846,6 +4886,10 @@ msgstr "Vous avez atteint votre limite de documents."
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>"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:88
msgid "You have rejected this document"
msgstr "Vous avez rejeté ce document"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:50
msgid "You have successfully left this team."
msgstr "Vous avez quitté cette équipe avec succès."

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 08:43\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
@ -79,7 +79,7 @@ msgstr "{inviterName} anulował dokument {documentName}, nie musisz go już podp
msgid "{inviterName} has cancelled the document<0/>\"{documentName}\""
msgstr "{inviterName} anulował dokument<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:65
#: packages/email/template-components/template-document-invite.tsx:75
msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgstr "{inviterName} zaprosił Cię do {0}<0/>\"{documentName}\""
@ -99,7 +99,7 @@ msgstr "{inviterName} usunął Cię z dokumentu {documentName}."
msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} usunął cię z dokumentu<0/>„{documentName}”"
#: packages/email/template-components/template-document-invite.tsx:53
#: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
msgstr "{inviterName} w imieniu {teamName} zaprosił cię do {0}"
@ -151,11 +151,11 @@ msgstr "{prefix} usunął pole"
msgid "{prefix} removed a recipient"
msgstr "{prefix} usunął odbiorcę"
#: packages/lib/utils/document-audit-logs.ts:355
#: packages/lib/utils/document-audit-logs.ts:365
msgid "{prefix} resent an email to {0}"
msgstr "{prefix} ponownie wysłał e-mail do {0}"
#: packages/lib/utils/document-audit-logs.ts:356
#: packages/lib/utils/document-audit-logs.ts:366
msgid "{prefix} sent an email to {0}"
msgstr "{prefix} wysłał e-mail do {0}"
@ -207,7 +207,15 @@ msgstr "{prefix} zaktualizowana widoczność dokumentu"
msgid "{recipientName} {action} a document by using one of your direct links"
msgstr "{recipientName} {action} dokument, korzystając z jednego z Twoich bezpośrednich linków"
#: packages/email/template-components/template-document-invite.tsx:58
#: packages/email/templates/document-rejected.tsx:27
msgid "{recipientName} has rejected the document '{documentName}'"
msgstr "{recipientName} odrzucił dokument '{documentName}'"
#: packages/email/template-components/template-document-rejected.tsx:25
msgid "{signerName} has rejected the document \"{documentName}\"."
msgstr "{signerName} odrzucił dokument \"{documentName}\"."
#: packages/email/template-components/template-document-invite.tsx:68
msgid "{teamName} has invited you to {0}"
msgstr "{teamName} zaprosił cię do {0}"
@ -231,6 +239,10 @@ msgstr "{userName} dodał CC do dokumentu"
msgid "{userName} completed their task"
msgstr "{userName} zakończył swoje zadanie"
#: packages/lib/utils/document-audit-logs.ts:355
msgid "{userName} rejected the document"
msgstr "{userName} odrzucił dokument"
#: packages/lib/utils/document-audit-logs.ts:341
msgid "{userName} signed the document"
msgstr "{userName} podpisał dokument"
@ -398,7 +410,7 @@ msgstr "Dodaj kolejną opcję"
msgid "Add another value"
msgstr "Dodaj kolejną wartość"
#: packages/ui/primitives/document-flow/add-signers.tsx:662
#: packages/ui/primitives/document-flow/add-signers.tsx:691
msgid "Add myself"
msgstr "Dodaj siebie"
@ -410,7 +422,7 @@ msgstr "Dodaj siebie"
msgid "Add Placeholder Recipient"
msgstr "Dodaj odbiorcę zastępczego"
#: packages/ui/primitives/document-flow/add-signers.tsx:651
#: packages/ui/primitives/document-flow/add-signers.tsx:680
msgid "Add Signer"
msgstr "Dodaj sygnatariusza"
@ -460,7 +472,7 @@ msgstr "Wystąpił błąd podczas ładowania dokumentu."
msgid "Approve"
msgstr "Zatwierdź"
#: packages/email/template-components/template-document-invite.tsx:89
#: packages/email/template-components/template-document-invite.tsx:106
msgid "Approve Document"
msgstr "Zatwierdź dokument"
@ -590,7 +602,7 @@ msgstr "Kontynuuj"
#~ msgid "Continue by {0} the document."
#~ msgstr "Continue by {0} the document."
#: packages/email/template-components/template-document-invite.tsx:76
#: packages/email/template-components/template-document-invite.tsx:86
msgid "Continue by approving the document."
msgstr "Kontynuuj, zatwierdzając dokument."
@ -598,11 +610,11 @@ msgstr "Kontynuuj, zatwierdzając dokument."
msgid "Continue by downloading the document."
msgstr "Kontynuuj, pobierając dokument."
#: packages/email/template-components/template-document-invite.tsx:74
#: packages/email/template-components/template-document-invite.tsx:84
msgid "Continue by signing the document."
msgstr "Kontynuuj, podpisując dokument."
#: packages/email/template-components/template-document-invite.tsx:75
#: packages/email/template-components/template-document-invite.tsx:85
msgid "Continue by viewing the document."
msgstr "Kontynuuj, wyświetlając dokument."
@ -658,6 +670,14 @@ msgstr "Nie prosiłeś o zmianę hasła? Jesteśmy tutaj, aby pomóc Ci zabezpie
msgid "Direct link receiver"
msgstr "Odbiorca linku bezpośredniego"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:149
msgid "Document \"{0}\" - Rejected by {1}"
msgstr "Dokument \"{0}\" - Odrzucony przez {1}"
#: packages/lib/jobs/definitions/emails/send-rejection-emails.ts:109
msgid "Document \"{0}\" - Rejection Confirmed"
msgstr "Dokument \"{0}\" - Odrzucenie potwierdzone"
#: packages/ui/components/document/document-global-auth-access-select.tsx:62
#: packages/ui/primitives/document-flow/add-settings.tsx:216
#: packages/ui/primitives/template-flow/add-template-settings.tsx:202
@ -673,8 +693,8 @@ msgstr "Zaktualizowano autoryzację dostępu do dokumentu"
msgid "Document Cancelled"
msgstr "Dokument anulowany"
#: packages/lib/utils/document-audit-logs.ts:359
#: packages/lib/utils/document-audit-logs.ts:360
#: packages/lib/utils/document-audit-logs.ts:369
#: packages/lib/utils/document-audit-logs.ts:370
msgid "Document completed"
msgstr "Dokument ukończony"
@ -728,6 +748,13 @@ msgstr "Dokument otwarty"
msgid "Document pending email"
msgstr "E-mail oczekującego dokumentu"
#: packages/email/template-components/template-document-rejected.tsx:21
msgid "Document Rejected"
msgstr "Dokument odrzucone"
#~ msgid "Document Rejection Confirmed"
#~ msgstr "Document Rejection Confirmed"
#: packages/lib/utils/document-audit-logs.ts:330
msgid "Document sent"
msgstr "Dokument wysłany"
@ -773,8 +800,8 @@ msgstr "Opcje rozwijane"
#: packages/lib/constants/document.ts:28
#: packages/ui/primitives/document-flow/add-fields.tsx:875
#: packages/ui/primitives/document-flow/add-signature.tsx:272
#: packages/ui/primitives/document-flow/add-signers.tsx:500
#: packages/ui/primitives/document-flow/add-signers.tsx:507
#: packages/ui/primitives/document-flow/add-signers.tsx:512
#: packages/ui/primitives/document-flow/add-signers.tsx:519
#: packages/ui/primitives/document-flow/types.ts:54
#: packages/ui/primitives/template-flow/add-template-fields.tsx:638
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463
@ -790,11 +817,11 @@ msgstr "Email jest wymagany"
msgid "Email Options"
msgstr "Opcje e-mail"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email resent"
msgstr "E-mail wysłany ponownie"
#: packages/lib/utils/document-audit-logs.ts:353
#: packages/lib/utils/document-audit-logs.ts:363
msgid "Email sent"
msgstr "E-mail wysłany"
@ -903,6 +930,9 @@ msgstr "Wróć"
msgid "Green"
msgstr "Zielony"
#~ msgid "Hello {recipientName},"
#~ msgstr "Hello {recipientName},"
#: packages/email/templates/reset-password.tsx:56
msgid "Hi, {userName} <0>({userEmail})</0>"
msgstr "Cześć, {userName} <0>({userEmail})</0>"
@ -988,8 +1018,8 @@ msgstr "Min"
#: packages/ui/primitives/document-flow/add-fields.tsx:901
#: 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/document-flow/add-signers.tsx:550
#: packages/ui/primitives/document-flow/add-signers.tsx:556
#: packages/ui/primitives/document-flow/types.ts:55
#: packages/ui/primitives/template-flow/add-template-fields.tsx:664
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498
@ -1107,7 +1137,7 @@ msgstr "Wybierz numer"
msgid "Placeholder"
msgstr "Zastępczy tekst"
#: packages/email/template-components/template-document-invite.tsx:46
#: packages/email/template-components/template-document-invite.tsx:56
msgid "Please {0} your document<0/>\"{documentName}\""
msgstr "Proszę {0} Twój dokument<0/>\"{documentName}\""
@ -1156,11 +1186,16 @@ msgstr "Wartości radiowe"
msgid "Read only"
msgstr "Tylko do odczytu"
#: packages/email/template-components/template-document-rejected.tsx:32
msgid "Reason for rejection: {rejectionReason}"
msgstr "Powód odrzucenia: {rejectionReason}"
#: packages/ui/components/recipient/recipient-role-select.tsx:95
msgid "Receives copy"
msgstr "Otrzymuje kopię"
#: packages/lib/utils/document-audit-logs.ts:338
#: packages/lib/utils/document-audit-logs.ts:353
msgid "Recipient"
msgstr "Odbiorca"
@ -1187,6 +1222,18 @@ msgstr "Czerwony"
msgid "Redirect URL"
msgstr "Adres URL przekierowania"
#: packages/email/template-components/template-document-invite.tsx:96
msgid "Reject Document"
msgstr "Odrzuć dokument"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:22
msgid "Rejection Confirmed"
msgstr "Odmowa potwierdzona"
#: packages/email/template-components/template-document-rejection-confirmed.tsx:34
msgid "Rejection reason: {reason}"
msgstr "Powód odrzucenia: {reason}"
#: packages/lib/server-only/document/resend-document.tsx:192
msgid "Reminder: {0}"
msgstr "Przypomnienie: {0}"
@ -1306,7 +1353,7 @@ msgstr "Udostępnij link"
msgid "Share your signing experience!"
msgstr "Podziel się swoim doświadczeniem podpisywania!"
#: packages/ui/primitives/document-flow/add-signers.tsx:680
#: packages/ui/primitives/document-flow/add-signers.tsx:709
#: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655
msgid "Show advanced settings"
msgstr "Pokaż ustawienia zaawansowane"
@ -1315,7 +1362,7 @@ msgstr "Pokaż ustawienia zaawansowane"
msgid "Sign"
msgstr "Podpisz"
#: packages/email/template-components/template-document-invite.tsx:87
#: packages/email/template-components/template-document-invite.tsx:104
msgid "Sign Document"
msgstr "Podpisz dokument"
@ -1351,8 +1398,8 @@ msgstr "Podpisujący muszą mieć unikalne emaile"
msgid "Signing"
msgstr "Podpisywanie"
#: packages/lib/server-only/document/send-completed-email.ts:111
#: packages/lib/server-only/document/send-completed-email.ts:191
#: packages/lib/server-only/document/send-completed-email.ts:114
#: packages/lib/server-only/document/send-completed-email.ts:194
msgid "Signing Complete!"
msgstr "Podpisywanie zakończone!"
@ -1432,6 +1479,13 @@ msgstr "Uwierzytelnianie wymagane dla odbiorców do podpisania pola podpisu."
msgid "The authentication required for recipients to view the document."
msgstr "Uwierzytelnianie wymagane dla odbiorców do wyświetlenia dokumentu."
#~ msgid "The document owner has been notified of this rejection. No further action is required from you at this time."
#~ msgstr "The document owner has been notified of this rejection. No further action is required from you at this time."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:39
msgid "The document owner has been notified of this rejection. No further action is required from you at this time. The document owner may contact you with any questions regarding this rejection."
msgstr "Właściciel dokumentu został poinformowany o tym odrzuceniu. W tej chwili nie są wymagane żadne dalsze działania z Twojej strony. Właściciel dokumentu może się z Tobą skontaktować z pytaniami dotyczącymi tego odrzucenia."
#: packages/ui/components/document/document-send-email-message-helper.tsx:31
msgid "The document's name"
msgstr "Nazwa dokumentu"
@ -1512,6 +1566,13 @@ msgstr "Ten dokument jest zabezpieczony hasłem. Proszę wprowadzić hasło, aby
msgid "This document was sent using <0>Documenso.</0>"
msgstr "Ten dokument został wysłany za pomocą <0>Documenso.</0>"
#~ msgid "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#~ msgstr "This email confirms that you have rejected the document \"{documentName}\" sent by {documentOwnerName}."
#: packages/email/template-components/template-document-rejection-confirmed.tsx:26
msgid "This email confirms that you have rejected the document <0>\"{documentName}\"</0> sent by {documentOwnerName}."
msgstr "Ten email potwierdza, że odrzuciłeś dokument <0>\"{documentName}\"</0> wysłany przez {documentOwnerName}."
#: packages/ui/components/document/document-email-checkboxes.tsx:94
msgid "This email is sent to the recipient if they are removed from a pending document."
msgstr "Ten e-mail jest wysyłany do odbiorcy, jeśli zostanie usunięty z oczekującego dokumentu."
@ -1608,7 +1669,8 @@ msgstr "Wyświetl wszystkie dokumenty wysłane do i z tego adresu e-mail"
msgid "View document"
msgstr "Zobacz dokument"
#: packages/email/template-components/template-document-invite.tsx:88
#: packages/email/template-components/template-document-invite.tsx:105
#: packages/email/template-components/template-document-rejected.tsx:44
#: packages/ui/primitives/document-flow/add-subject.tsx:90
#: packages/ui/primitives/document-flow/add-subject.tsx:91
msgid "View Document"
@ -1686,6 +1748,10 @@ msgstr "Możesz w każdej chwili cofnąć dostęp w ustawieniach zespołu na Doc
msgid "You can use the following variables in your message:"
msgstr "Możesz użyć następujących zmiennych w swojej wiadomości:"
#: packages/email/template-components/template-document-rejected.tsx:37
msgid "You can view the document and its status by clicking the button below."
msgstr "Możesz zobaczyć dokument i jego status, klikając przycisk poniżej."
#: packages/ui/primitives/document-dropzone.tsx:43
msgid "You cannot upload documents at this time."
msgstr "Nie możesz przesyłać dokumentów w tej chwili."
@ -1719,6 +1785,13 @@ msgstr "Rozpocząłeś dokument {0}, który wymaga, abyś go {recipientActionVer
msgid "You have reached your document limit."
msgstr "Osiągnąłeś limit dokumentów."
#: packages/email/templates/document-rejection-confirmed.tsx:27
msgid "You have rejected the document '{documentName}'"
msgstr "Odrzuciłeś dokument '{documentName}'"
#~ msgid "You have rejected the document \"{documentName}\""
#~ msgstr "You have rejected the document \"{documentName}\""
#: packages/email/template-components/template-document-self-signed.tsx:42
msgid "You have signed “{documentName}”"
msgstr "Podpisałeś „{documentName}”"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 08:43\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-11-12 08:43\n"
"PO-Revision-Date: 2024-11-14 12:05\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
@ -50,15 +50,15 @@ msgstr "\"{placeholderEmail}\" w imieniu \"{0}\" zaprosił Cię do podpisania \"
msgid "\"{teamUrl}\" has invited you to sign \"example document\"."
msgstr "\"{teamUrl}\" zaprosił Cię do podpisania \"przykładowego dokumentu\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:78
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:79
msgid "({0}) has invited you to approve this document"
msgstr "({0}) zaprosił Cię do zatwierdzenia tego dokumentu"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
msgid "({0}) has invited you to sign this document"
msgstr "({0}) zaprosił Cię do podpisania tego dokumentu"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
msgid "({0}) has invited you to view this document"
msgstr "({0}) zaprosił Cię do przeglądania tego dokumentu"
@ -658,7 +658,7 @@ msgstr "Zatwierdź"
msgid "Approve Document"
msgstr "Zatwierdź dokument"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:85
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:94
msgid "Approved"
msgstr "Zatwierdzono"
@ -666,6 +666,10 @@ msgstr "Zatwierdzono"
msgid "Are you sure you want to delete this token?"
msgstr "Czy na pewno chcesz usunąć ten token?"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:120
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Czy na pewno chcesz odrzucić ten dokument? Ta akcja nie może być cofnięta."
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:188
msgid "Are you sure you want to remove the <0>{passkeyName}</0> passkey."
msgstr "Czy na pewno chcesz usunąć klucz hasła <0>{passkeyName}</0>?"
@ -814,6 +818,7 @@ msgstr "Korzystając z funkcji podpisu elektronicznego, wyrażasz zgodę na prze
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220
#: 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]/reject-document-dialog.tsx:153
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:248
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:333
@ -946,7 +951,7 @@ msgid "Complete Viewing"
msgstr "Zakończ przeglądanie"
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:208
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:62
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:77
#: apps/web/src/components/formatter/document-status.tsx:28
msgid "Completed"
msgstr "Zakończono"
@ -1043,7 +1048,7 @@ msgstr "Kontroluje formatowanie wiadomości, która zostanie wysłana podczas za
msgid "Copied"
msgstr "Skopiowano"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:133
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:162
#: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:77
#: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:31
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:163
@ -1517,6 +1522,10 @@ msgstr "Preferencje dokumentu zaktualizowane"
msgid "Document re-sent"
msgstr "Dokument ponownie wysłany"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:83
msgid "Document Rejected"
msgstr "Dokument Odrzucone"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:36
msgid "Document resealed"
msgstr "Dokument ponownie zaplombowany"
@ -2300,7 +2309,7 @@ msgstr "Członek od"
msgid "Members"
msgstr "Członkowie"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:46
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:55
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:35
msgid "Modify recipients"
msgstr "Modyfikuj odbiorców"
@ -2394,6 +2403,10 @@ msgstr "Następne pole"
msgid "No active drafts"
msgstr "Brak aktywnych szkiców"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:99
msgid "No further action is required from you at this time."
msgstr "Nie są wymagane żadne dalsze działania z Twojej strony w tym momencie."
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx:42
msgid "No payment required"
msgstr "Brak wymaganej płatności"
@ -2410,7 +2423,7 @@ msgstr "Brak ostatnich aktywności"
msgid "No recent documents"
msgstr "Brak ostatnich dokumentów"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:61
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:70
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:49
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:96
msgid "No recipients"
@ -2498,26 +2511,26 @@ msgstr "Tylko menedżerowie i wyżej mogą uzyskać dostęp do dokumentu i go wy
#: apps/web/src/app/(teams)/t/[teamUrl]/not-found.tsx:19
#: apps/web/src/components/partials/not-found.tsx:49
msgid "Oops! Something went wrong."
msgstr "Oops! Something went wrong."
msgstr "Ups! Coś poszło nie tak."
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:140
msgid "Opened"
msgstr "Lub"
msgstr "Otwarto"
#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:337
#: apps/web/src/components/forms/signup.tsx:243
#: apps/web/src/components/forms/signup.tsx:267
#: apps/web/src/components/forms/v2/signup.tsx:383
msgid "Or"
msgstr "Lub kontynuuj z"
msgstr "Lub"
#: apps/web/src/components/forms/signin.tsx:390
msgid "Or continue with"
msgstr "Or continue with"
msgstr "Lub kontynuuj z"
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:341
msgid "Otherwise, the document will be created as a draft."
msgstr "Otherwise, the document will be created as a draft."
msgstr "W przeciwnym razie dokument zostanie utworzony jako wersja robocza."
#: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:86
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:103
@ -2525,35 +2538,35 @@ msgstr "Otherwise, the document will be created as a draft."
#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:86
#: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:109
msgid "Owner"
msgstr "Opłacona"
msgstr "Właściciel"
#: apps/web/src/components/(teams)/tables/team-billing-invoices-data-table.tsx:79
msgid "Paid"
msgstr "Klucz dostępu"
msgstr "Opłacono"
#: apps/web/src/components/forms/signin.tsx:435
msgid "Passkey"
msgstr "Klucz dostępu już istnieje dla podanego autoryzatora"
msgstr "Klucz dostępu"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:229
msgid "Passkey already exists for the provided authenticator"
msgstr "Passkey already exists for the provided authenticator"
msgstr "Klucz dostępu już istnieje dla podanego uwierzytelniającego"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:219
msgid "Passkey creation cancelled due to one of the following reasons:"
msgstr "Passkey creation cancelled due to one of the following reasons:"
msgstr "Tworzenie klucza dostępu anulowane z jednego z następujących powodów:"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:88
msgid "Passkey has been removed"
msgstr "Klucz dostępu został zaktualizowany"
msgstr "Klucz dostępu został usunięty"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:68
msgid "Passkey has been updated"
msgstr "Nazwa klucza dostępu"
msgstr "Klucz dostępu został zaktualizowany"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:177
msgid "Passkey name"
msgstr "Klucze dostępu"
msgstr "Nazwa klucza dostępu"
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:121
msgid "Passkey Re-Authentication"
@ -2562,15 +2575,15 @@ msgstr "Ponowna autoryzacja za pomocą klucza"
#: apps/web/src/app/(dashboard)/settings/security/page.tsx:106
#: apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx:32
msgid "Passkeys"
msgstr "Passkeys"
msgstr "Klucze dostępu"
#: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:158
msgid "Passkeys allow you to sign in and authenticate using biometrics, password managers, etc."
msgstr "Passkeys allow you to sign in and authenticate using biometrics, password managers, etc."
msgstr "Klucze dostępu pozwalają na logowanie i uwierzytelnianie przy użyciu danych biometrycznych, menedżerów haseł itp."
#: apps/web/src/components/forms/signin.tsx:161
msgid "Passkeys are not supported on this browser"
msgstr "Hasło"
msgstr "Klucze dostępu nie są obsługiwane w tej przeglądarce"
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:70
#: apps/web/src/components/forms/password.tsx:123
@ -2579,34 +2592,34 @@ msgstr "Hasło"
#: apps/web/src/components/forms/signup.tsx:196
#: apps/web/src/components/forms/v2/signup.tsx:344
msgid "Password"
msgstr "Hasło zaktualizowane"
msgstr "Hasło"
#: apps/web/src/components/forms/password.tsx:71
#: apps/web/src/components/forms/reset-password.tsx:72
msgid "Password updated"
msgstr "Zapłać"
msgstr "Hasło zaktualizowane"
#: apps/web/src/components/(teams)/tables/pending-user-teams-data-table-actions.tsx:46
msgid "Pay"
msgstr "Pay"
msgstr "Zapłać"
#: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:89
msgid "Payment is required to finalise the creation of your team."
msgstr "Payment is required to finalise the creation of your team."
msgstr "Płatność jest wymagana do zakończenia tworzenia zespołu."
#: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:82
#: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:107
msgid "Payment overdue"
msgstr "Oczekujące"
msgstr "Płatność zaległa"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:122
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:131
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-documents-table.tsx:211
#: apps/web/src/components/(teams)/tables/teams-member-page-data-table.tsx:82
#: apps/web/src/components/(teams)/tables/user-settings-teams-page-data-table.tsx:77
#: apps/web/src/components/document/document-read-only-fields.tsx:89
#: apps/web/src/components/formatter/document-status.tsx:22
msgid "Pending"
msgstr "Oczekujące dokumenty"
msgstr "Oczekujące"
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:51
msgid "Pending documents"
@ -2618,11 +2631,11 @@ msgstr "Oczekujące zaproszenia"
#: apps/web/src/app/(dashboard)/settings/teams/team-invitations.tsx:62
msgid "Pending invitations"
msgstr "Pending invitations"
msgstr "Oczekujące zaproszenia"
#: apps/web/src/components/(teams)/tables/pending-user-teams-data-table-actions.tsx:28
msgid "Pending team deleted."
msgstr "Pending team deleted."
msgstr "Oczekujący zespół usunięty."
#: apps/web/src/components/(dashboard)/layout/menu-switcher.tsx:134
msgid "Personal"
@ -2692,6 +2705,10 @@ msgstr "Please note that this action is irreversible. Once confirmed, your webho
msgid "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
msgstr "Please note that you will lose access to all documents associated with this team & all the members will be removed and notified"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:37
msgid "Please provide a reason"
msgstr "Proszę podać powód"
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:127
msgid "Please provide a token from the authenticator, or a backup code. If you do not have a backup code available, please contact support."
msgstr "Proszę podać token z swojego autoryzatora lub kod zapasowy."
@ -2800,7 +2817,7 @@ msgstr "Gotowe"
msgid "Read the full <0>signature disclosure</0>."
msgstr "Przeczytaj pełne <0>ujawnienie podpisu</0>."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:97
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:106
msgid "Ready"
msgstr "Wymagana ponowna autoryzacja, aby podpisać to pole"
@ -2808,6 +2825,14 @@ msgstr "Wymagana ponowna autoryzacja, aby podpisać to pole"
msgid "Reason"
msgstr "Powód"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:146
msgid "Reason for rejection:"
msgstr "Powód odrzucenia:"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:38
msgid "Reason must be less than 500 characters"
msgstr "Powód musi mieć mniej niż 500 znaków"
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:62
msgid "Reauthentication is required to sign this field"
msgstr "Ostatnia aktywność"
@ -2832,7 +2857,7 @@ msgid "Recipient updated"
msgstr "Odbiorca zaktualizowany"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/page.tsx:66
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:40
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:49
#: apps/web/src/app/(dashboard)/templates/[id]/template-page-view-recipients.tsx:30
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/audit-log/page.tsx:139
msgid "Recipients"
@ -2860,6 +2885,17 @@ msgstr "Kody odzyskiwania"
msgid "Registration Successful"
msgstr "Rejestracja zakończona sukcesem"
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:109
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:116
#: apps/web/src/app/(signing)/sign/[token]/reject-document-dialog.tsx:162
msgid "Reject Document"
msgstr "Odrzuć dokument"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:141
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:101
msgid "Rejected"
msgstr "Odrzucony"
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:34
msgid "Remembered your password? <0>Sign In</0>"
msgstr "Pamiętasz swoje hasło? <0>Zaloguj się</0>"
@ -3089,7 +3125,7 @@ msgstr "Wysyłanie e-maila resetującego..."
msgid "Sending..."
msgstr "Wysyłanie..."
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:92
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:101
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:248
msgid "Sent"
msgstr "Wysłano"
@ -3236,7 +3272,7 @@ msgstr "Zebrane podpisy"
msgid "Signatures will appear once the document has been completed"
msgstr "Podpisy pojawią się po ukończeniu dokumentu"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:105
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:114
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:270
#: apps/web/src/components/document/document-read-only-fields.tsx:84
msgid "Signed"
@ -3645,6 +3681,10 @@ msgstr "Dokument został pomyślnie przeniesiony do wybranego zespołu."
msgid "The document is now completed, please follow any instructions provided within the parent application."
msgstr "Dokument jest teraz zakończony, proszę postępować zgodnie z wszelkimi instrukcjami podanymi w aplikacji nadrzędnej."
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:92
msgid "The document owner has been notified of your decision. They may contact you with further instructions if necessary."
msgstr "Właściciel dokumentu został poinformowany o Twojej decyzji. Mogą się z Tobą skontaktować w celu podania dalszych instrukcji, jeśli to konieczne."
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:182
msgid "The document was created but could not be sent to recipients."
msgstr "Dokument został utworzony, ale nie mógł zostać wysłany do odbiorców."
@ -3699,7 +3739,7 @@ msgstr "Odbiorca został pomyślnie zaktualizowany"
msgid "The selected team member will receive an email which they must accept before the team is transferred"
msgstr "Wybrany członek zespołu otrzyma e-mail, który musi zaakceptować przed przeniesieniem zespołu"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:134
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:163
#: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41
#: apps/web/src/components/document/document-recipient-link-copy-dialog.tsx:118
msgid "The signing link has been copied to your clipboard."
@ -4141,7 +4181,7 @@ msgstr "Nie można się zalogować"
msgid "Unauthorized"
msgstr "Nieautoryzowany"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:155
msgid "Uncompleted"
msgstr "Niezakończony"
@ -4386,12 +4426,12 @@ msgstr "Wyświetl kody odzyskiwania"
msgid "View teams"
msgstr "Wyświetl zespoły"
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:111
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:120
#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:259
msgid "Viewed"
msgstr "Wyświetlono"
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:86
#: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:125
msgid "Waiting"
msgstr "Czekam"
@ -4846,6 +4886,10 @@ msgstr "Osiągnąłeś limit dokumentów."
msgid "You have reached your document limit. <0>Upgrade your account to continue!</0>"
msgstr "Osiągnąłeś limit dokumentów. <0>Ulepsz swoje konto, aby kontynuować!</0>"
#: apps/web/src/app/(signing)/sign/[token]/rejected/page.tsx:88
msgid "You have rejected this document"
msgstr "Odrzuciłeś ten dokument"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:50
msgid "You have successfully left this team."
msgstr "Sukces! Opuszczono ten zespół."

View File

@ -33,6 +33,7 @@ export const ZDocumentAuditLogTypeSchema = z.enum([
'DOCUMENT_GLOBAL_AUTH_ACTION_UPDATED', // When the global action authentication is updated.
'DOCUMENT_META_UPDATED', // When the document meta data is updated.
'DOCUMENT_OPENED', // When the document is opened by a recipient.
'DOCUMENT_RECIPIENT_REJECTED', // When a recipient rejects the document.
'DOCUMENT_RECIPIENT_COMPLETED', // When a recipient completes all their required tasks for the document.
'DOCUMENT_SENT', // When the document transitions from DRAFT to PENDING.
'DOCUMENT_TITLE_UPDATED', // When the document title is updated.
@ -363,6 +364,16 @@ export const ZDocumentAuditLogEventDocumentRecipientCompleteSchema = z.object({
}),
});
/**
* Event: Document recipient completed the document (the recipient has fully actioned and completed their required steps for the document).
*/
export const ZDocumentAuditLogEventDocumentRecipientRejectedSchema = z.object({
type: z.literal(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED),
data: ZBaseRecipientDataSchema.extend({
reason: z.string(),
}),
});
/**
* Event: Document sent.
*/
@ -487,6 +498,7 @@ export const ZDocumentAuditLogSchema = ZDocumentAuditLogBaseSchema.and(
ZDocumentAuditLogEventDocumentMetaUpdatedSchema,
ZDocumentAuditLogEventDocumentOpenedSchema,
ZDocumentAuditLogEventDocumentRecipientCompleteSchema,
ZDocumentAuditLogEventDocumentRecipientRejectedSchema,
ZDocumentAuditLogEventDocumentSentSchema,
ZDocumentAuditLogEventDocumentTitleUpdatedSchema,
ZDocumentAuditLogEventDocumentExternalIdUpdatedSchema,

View File

@ -349,6 +349,16 @@ export const formatDocumentAuditLogAction = (
identified: result,
};
})
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED }, ({ data }) => {
const userName = prefix || _(msg`Recipient`);
const result = msg`${userName} rejected the document`;
return {
anonymous: result,
identified: result,
};
})
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.EMAIL_SENT }, ({ data }) => ({
anonymous: data.isResending ? msg`Email resent` : msg`Email sent`,
identified: data.isResending

View File

@ -0,0 +1,5 @@
-- AlterEnum
ALTER TYPE "SigningStatus" ADD VALUE 'REJECTED';
-- AlterTable
ALTER TABLE "Recipient" ADD COLUMN "rejectionReason" TEXT;

View File

@ -393,6 +393,7 @@ enum SendStatus {
enum SigningStatus {
NOT_SIGNED
SIGNED
REJECTED
}
enum RecipientRole {
@ -414,6 +415,7 @@ model Recipient {
signedAt DateTime?
authOptions Json?
signingOrder Int?
rejectionReason String?
role RecipientRole @default(SIGNER)
readStatus ReadStatus @default(NOT_OPENED)
signingStatus SigningStatus @default(NOT_SIGNED)

View File

@ -1,6 +1,7 @@
import { TRPCError } from '@trpc/server';
import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token';
import { rejectDocumentWithToken } from '@documenso/lib/server-only/document/reject-document-with-token';
import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
import { setRecipientsForTemplate } from '@documenso/lib/server-only/recipient/set-recipients-for-template';
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
@ -10,6 +11,7 @@ import {
ZAddSignersMutationSchema,
ZAddTemplateSignersMutationSchema,
ZCompleteDocumentWithTokenMutationSchema,
ZRejectDocumentWithTokenMutationSchema,
} from './schema';
export const recipientRouter = router({
@ -94,4 +96,26 @@ export const recipientRouter = router({
});
}
}),
rejectDocumentWithToken: procedure
.input(ZRejectDocumentWithTokenMutationSchema)
.mutation(async ({ input, ctx }) => {
try {
const { token, documentId, reason } = input;
return await rejectDocumentWithToken({
token,
documentId,
reason,
requestMetadata: extractNextApiRequestMetadata(ctx.req),
});
} catch (err) {
console.error(err);
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'We were unable to handle this request. Please try again later.',
});
}
}),
});

View File

@ -69,3 +69,14 @@ export const ZCompleteDocumentWithTokenMutationSchema = z.object({
export type TCompleteDocumentWithTokenMutationSchema = z.infer<
typeof ZCompleteDocumentWithTokenMutationSchema
>;
export const ZRejectDocumentWithTokenMutationSchema = z.object({
token: z.string(),
documentId: z.number(),
reason: z.string(),
authOptions: ZRecipientActionAuthSchema.optional(),
});
export type TRejectDocumentWithTokenMutationSchema = z.infer<
typeof ZRejectDocumentWithTokenMutationSchema
>;

View File

@ -1,6 +1,6 @@
'use client';
import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
import type { DropResult, SensorAPI } from '@hello-pangea/dnd';
import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
@ -94,7 +94,7 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
];
}
return recipients.map((recipient, index) => ({
let mappedRecipients = recipients.map((recipient, index) => ({
nativeId: recipient.id,
formId: String(recipient.id),
name: recipient.name,
@ -103,6 +103,14 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
actionAuth: ZRecipientAuthOptionsSchema.parse(recipient.authOptions)?.actionAuth ?? undefined,
signingOrder: recipient.signingOrder ?? index + 1,
}));
if (signingOrder === DocumentSigningOrder.SEQUENTIAL) {
mappedRecipients = mappedRecipients.sort(
(a, b) => (a.signingOrder ?? 0) - (b.signingOrder ?? 0),
);
}
return mappedRecipients;
};
const form = useForm<TAddTemplatePlacholderRecipientsFormSchema>({