diff --git a/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx b/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx index 211746faf..ed495f83a 100644 --- a/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx +++ b/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx @@ -3,12 +3,13 @@ import { useCurrentOrganisation } from '@documenso/lib/client-only/providers/org import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc'; import { AppError } from '@documenso/lib/errors/app-error'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; +import { hasOverlappingFields } from '@documenso/lib/utils/fields-overlap'; import { getRecipientsWithMissingFields } from '@documenso/lib/utils/recipients'; import { zEmail } from '@documenso/lib/utils/zod'; import { trpc, trpc as trpcReact } from '@documenso/trpc/react'; import { DocumentSendEmailMessageHelper } from '@documenso/ui/components/document/document-send-email-message-helper'; import { cn } from '@documenso/ui/lib/utils'; -import { Alert, AlertDescription } from '@documenso/ui/primitives/alert'; +import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, @@ -32,7 +33,7 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { Trans, useLingui } from '@lingui/react/macro'; import { DocumentDistributionMethod, DocumentStatus, EnvelopeType } from '@prisma/client'; import { AnimatePresence, motion } from 'framer-motion'; -import { InfoIcon } from 'lucide-react'; +import { AlertTriangleIcon, InfoIcon } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { useForm } from 'react-hook-form'; import { useNavigate } from 'react-router'; @@ -138,6 +139,27 @@ export const EnvelopeDistributeDialog = ({ }); }, [recipientsWithIndex, envelope.authOptions]); + /** + * Whether any fields significantly overlap each other. This is surfaced as a + * non-blocking warning since overlapping fields still allow sending, but can + * complicate the signing process or cause fields to behave unexpectedly. + */ + const hasOverlappingEnvelopeFields = useMemo( + () => + hasOverlappingFields( + envelope.fields.map((field) => ({ + id: field.id, + envelopeItemId: field.envelopeItemId, + page: field.page, + positionX: Number(field.positionX), + positionY: Number(field.positionY), + width: Number(field.width), + height: Number(field.height), + })), + ), + [envelope.fields], + ); + const invalidEnvelopeCode = useMemo(() => { if (recipientsMissingSignatureFields.length > 0) { return 'MISSING_SIGNATURES'; @@ -240,6 +262,24 @@ export const EnvelopeDistributeDialog = ({
+ {hasOverlappingEnvelopeFields && ( + + + +
+ + Overlapping fields detected + + + + Some fields are placed on top of each other. This may complicate the signing process or cause + fields to not work as expected. + + +
+
+ )} + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions diff --git a/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx b/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx index a5676dc60..db8f6ffbb 100644 --- a/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx +++ b/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx @@ -1,3 +1,4 @@ +import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; import type { TLocalField } from '@documenso/lib/client-only/hooks/use-editor-fields'; import { usePageRenderer } from '@documenso/lib/client-only/hooks/use-page-renderer'; import { useCurrentEnvelopeEditor } from '@documenso/lib/client-only/providers/envelope-editor-provider'; @@ -13,6 +14,7 @@ import { } from '@documenso/lib/universal/field-renderer/field-renderer'; import { renderField } from '@documenso/lib/universal/field-renderer/render-field'; import { getClientSideFieldTranslations } from '@documenso/lib/utils/fields'; +import { getOverlappingFieldPairs } from '@documenso/lib/utils/fields-overlap'; import { canRecipientFieldsBeModified } from '@documenso/lib/utils/recipients'; import { Command, @@ -62,6 +64,36 @@ export const EnvelopeEditorFieldsPageRenderer = ({ pageData }: { pageData: PageR [editorFields.localFields, pageNumber, currentEnvelopeItem?.id], ); + /** + * Debounce the fields used for overlap highlighting so we don't recompute on every + * small drag/resize tick. Overlaps only occur within the same page and envelope + * item, so computing from this page's fields alone is sufficient. + */ + const debouncedPageFields = useDebouncedValue(localPageFields, 300); + + const overlappingFieldFormIds = useMemo(() => { + const formIds = new Set(); + + const pairs = getOverlappingFieldPairs( + debouncedPageFields.map((field) => ({ + id: field.formId, + envelopeItemId: field.envelopeItemId, + page: field.page, + positionX: field.positionX, + positionY: field.positionY, + width: field.width, + height: field.height, + })), + ); + + for (const pair of pairs) { + formIds.add(pair.fieldA.id); + formIds.add(pair.fieldB.id); + } + + return formIds; + }, [debouncedPageFields]); + const handleResizeOrMove = (event: KonvaEventObject) => { const isDragEvent = event.type === 'dragend'; @@ -113,6 +145,62 @@ export const EnvelopeEditorFieldsPageRenderer = ({ pageData }: { pageData: PageR pageLayer.current?.batchDraw(); }; + /** + * Draws (or removes) a dashed warning outline over a field that significantly + * overlaps another field. The highlight is a child of the field group so it moves + * and resizes with the field, and sits on top of the field's own rect (which is + * re-styled on every render and would otherwise clobber a direct stroke change). + */ + const syncOverlapHighlight = (fieldGroup: Konva.Group, isOverlapping: boolean) => { + const existingHighlight = fieldGroup.findOne('.field-overlap-highlight'); + + // Skip while a field is actively being dragged/resized. The highlight is driven + // by debounced field data, so it would lag behind and distort during the gesture. + // It is repainted once the gesture settles (the effect re-runs on isFieldChanging). + if (isFieldChanging) { + existingHighlight?.destroy(); + return; + } + + if (!isOverlapping) { + existingHighlight?.destroy(); + return; + } + + const fieldRect = fieldGroup.findOne('.field-rect'); + + if (!fieldRect) { + return; + } + + const highlightAttrs = { + x: 0, + y: 0, + width: fieldRect.width(), + height: fieldRect.height(), + stroke: '#f59e0b', + strokeWidth: 2, + dash: [6, 4], + cornerRadius: 2, + strokeScaleEnabled: false, + listening: false, + } satisfies Partial; + + if (existingHighlight instanceof Konva.Rect) { + existingHighlight.setAttrs(highlightAttrs); + existingHighlight.moveToTop(); + return; + } + + const highlight = new Konva.Rect({ + name: 'field-overlap-highlight', + ...highlightAttrs, + }); + + fieldGroup.add(highlight); + highlight.moveToTop(); + }; + const unsafeRenderFieldOnLayer = (field: TLocalField) => { if (!pageLayer.current) { return; @@ -139,6 +227,8 @@ export const EnvelopeEditorFieldsPageRenderer = ({ pageData }: { pageData: PageR mode: 'edit', }); + syncOverlapHighlight(fieldGroup, overlappingFieldFormIds.has(field.formId)); + if (!isFieldEditable) { return; } @@ -435,7 +525,7 @@ export const EnvelopeEditorFieldsPageRenderer = ({ pageData }: { pageData: PageR interactiveTransformer.current?.forceUpdate(); pageLayer.current.batchDraw(); - }, [localPageFields, selectedKonvaFieldGroups]); + }, [localPageFields, selectedKonvaFieldGroups, overlappingFieldFormIds, isFieldChanging]); const setSelectedFields = (nodes: Konva.Node[]) => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions diff --git a/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx b/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx index a5ec4ed16..945d3c308 100644 --- a/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx +++ b/apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx @@ -1,3 +1,4 @@ +import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; import { useCurrentEnvelopeEditor } from '@documenso/lib/client-only/providers/envelope-editor-provider'; import { useCurrentEnvelopeRender } from '@documenso/lib/client-only/providers/envelope-render-provider'; import { PDF_VIEWER_ERROR_MESSAGES } from '@documenso/lib/constants/pdf-viewer-i18n'; @@ -17,6 +18,7 @@ import { type TTextFieldMeta, } from '@documenso/lib/types/field-meta'; import { getEnvelopeItemPermissions } from '@documenso/lib/utils/envelope'; +import { getOverlappingFieldPairs } from '@documenso/lib/utils/fields-overlap'; import { canRecipientFieldsBeModified } from '@documenso/lib/utils/recipients'; import { AnimateGenericFadeInOut } from '@documenso/ui/components/animate/animate-generic-fade-in-out'; import { cn } from '@documenso/ui/lib/utils'; @@ -28,7 +30,7 @@ import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { DocumentStatus, FieldType, RecipientRole } from '@prisma/client'; -import { FileTextIcon, PencilIcon, SparklesIcon } from 'lucide-react'; +import { AlertTriangleIcon, FileTextIcon, PencilIcon, SparklesIcon } from 'lucide-react'; import { useEffect, useMemo, useRef, useState } from 'react'; import { useRevalidator, useSearchParams } from 'react-router'; import { isDeepEqual } from 'remeda'; @@ -78,7 +80,7 @@ export const EnvelopeEditorFieldsPage = () => { const { envelope, editorFields, navigateToStep, editorConfig } = useCurrentEnvelopeEditor(); - const { currentEnvelopeItem } = useCurrentEnvelopeRender(); + const { currentEnvelopeItem, setCurrentEnvelopeItem } = useCurrentEnvelopeRender(); const { _ } = useLingui(); @@ -93,6 +95,53 @@ export const EnvelopeEditorFieldsPage = () => { const selectedField = useMemo(() => structuredClone(editorFields.selectedField), [editorFields.selectedField]); + /** + * Debounce the fields used for overlap detection so we don't recompute on every + * small drag/resize movement, which is expensive on large field counts and can + * bog down lower-end devices. + */ + const debouncedLocalFields = useDebouncedValue(editorFields.localFields, 300); + + /** + * Fields that significantly overlap each other. Overlapping fields render poorly in + * the editor and can behave unexpectedly during signing, so we warn the author here. + */ + const overlappingFieldPairs = useMemo( + () => + getOverlappingFieldPairs( + debouncedLocalFields.map((field) => ({ + id: field.formId, + envelopeItemId: field.envelopeItemId, + page: field.page, + positionX: field.positionX, + positionY: field.positionY, + width: field.width, + height: field.height, + })), + ), + [debouncedLocalFields], + ); + + const handleReviewOverlappingField = () => { + const firstPair = overlappingFieldPairs[0]; + + if (!firstPair) { + return; + } + + const targetField = editorFields.localFields.find((field) => field.formId === firstPair.fieldA.id); + + if (!targetField) { + return; + } + + if (targetField.envelopeItemId !== currentEnvelopeItem?.id) { + setCurrentEnvelopeItem(targetField.envelopeItemId); + } + + editorFields.setSelectedField(targetField.formId); + }; + const updateSelectedFieldMeta = (fieldMeta: TFieldMetaSchema) => { if (!selectedField) { return; @@ -211,6 +260,29 @@ export const EnvelopeEditorFieldsPage = () => { )} + {overlappingFieldPairs.length > 0 && ( + +
+ + +
+ + Overlapping fields detected + + + + Some fields are placed on top of each other. This may complicate the signing process or cause + fields to not work as expected. + + +
+
+
+ )} + {currentEnvelopeItem !== null ? ( { + return request.post(`${baseUrl}/envelope/recipient/${recipientId}/reject`, { + headers: { Authorization: `Bearer ${authToken}`, 'Content-Type': 'application/json' }, + data: { + envelopeId, + recipientId, + reason, + actAsEmail, + } satisfies TRejectEnvelopeRecipientOnBehalfOfRequest, + }); +}; + +test.describe('Reject recipient on behalf of', () => { + let user: User; + let team: Team; + let token: string; + + test.beforeEach(async () => { + ({ user, team } = await seedUser()); + ({ token } = await createApiToken({ + userId: user.id, + teamId: team.id, + tokenName: 'test-reject-recipient', + expiresIn: null, + })); + }); + + test('should reject a recipient and record an external rejection audit log', async ({ request }) => { + const envelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + const recipient = envelope.recipients[0]; + + const res = await rejectRecipient(request, token, envelope.id, recipient.id, 'Declined out of band'); + + expect(res.ok()).toBeTruthy(); + expect(res.status()).toBe(200); + + const updatedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(updatedRecipient.signingStatus).toBe(SigningStatus.REJECTED); + expect(updatedRecipient.rejectionReason).toBe('Declined out of band'); + + const auditLog = await prisma.documentAuditLog.findFirst({ + where: { + envelopeId: envelope.id, + type: 'DOCUMENT_RECIPIENT_REJECTED', + }, + orderBy: { createdAt: 'desc' }, + }); + + expect(auditLog).not.toBeNull(); + + const auditData = auditLog!.data as Record; + + expect(auditData.recipientId).toBe(recipient.id); + expect(auditData.recipientEmail).toBe(recipient.email); + expect(auditData.reason).toBe('Declined out of band'); + expect(auditData.isExternal).toBe(true); + + // No actAsEmail supplied - the rejection defaults to the API user. + expect(auditLog!.userId).toBe(user.id); + expect(auditLog!.email).toBe(user.email); + expect(auditData.onBehalfOfUserEmail).toBeUndefined(); + }); + + test('should attribute the rejection to the elected team member when actAsEmail is supplied', async ({ request }) => { + const member = await seedTeamMember({ teamId: team.id }); + + const envelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + const recipient = envelope.recipients[0]; + + const res = await rejectRecipient(request, token, envelope.id, recipient.id, 'Declined out of band', member.email); + + expect(res.ok()).toBeTruthy(); + expect(res.status()).toBe(200); + + const auditLog = await prisma.documentAuditLog.findFirstOrThrow({ + where: { + envelopeId: envelope.id, + type: 'DOCUMENT_RECIPIENT_REJECTED', + }, + orderBy: { createdAt: 'desc' }, + }); + + // The audit log actor must be the elected member, not the API user. + expect(auditLog.userId).toBe(member.id); + expect(auditLog.email).toBe(member.email); + + const auditData = auditLog.data as Record; + + expect(auditData.isExternal).toBe(true); + expect(auditData.onBehalfOfUserEmail).toBe(member.email); + }); + + test('should reject when actAsEmail is not a member of the team', async ({ request }) => { + // A user that exists but belongs to a different team. + const { user: outsider } = await seedUser(); + + const envelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + const recipient = envelope.recipients[0]; + + const res = await rejectRecipient( + request, + token, + envelope.id, + recipient.id, + 'Declined out of band', + outsider.email, + ); + + expect(res.ok()).toBeFalsy(); + expect(res.status()).toBe(401); + + // The recipient must remain untouched. + const untouchedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(untouchedRecipient.signingStatus).toBe(SigningStatus.NOT_SIGNED); + expect(untouchedRecipient.rejectionReason).toBeNull(); + }); + + test('should deny rejecting a recipient that has already actioned the document', async ({ request }) => { + const envelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + const recipient = envelope.recipients[0]; + + // Reject once - succeeds. + const firstRes = await rejectRecipient(request, token, envelope.id, recipient.id, 'First rejection'); + expect(firstRes.ok()).toBeTruthy(); + + // Reject again - the recipient is no longer NOT_SIGNED. + const secondRes = await rejectRecipient(request, token, envelope.id, recipient.id, 'Second rejection'); + + expect(secondRes.ok()).toBeFalsy(); + expect(secondRes.status()).toBe(400); + + // The original rejection reason must remain unchanged. + const updatedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(updatedRecipient.rejectionReason).toBe('First rejection'); + }); + + test('should not allow rejecting a recipient in another team', async ({ request }) => { + // Seed a separate team/user that owns the document. + const { user: otherUser, team: otherTeam } = await seedUser(); + + const envelope = await seedPendingDocument(otherUser, otherTeam.id, ['recipient@test.documenso.com']); + const recipient = envelope.recipients[0]; + + // Use the original team's token - it must not be able to reject. + const res = await rejectRecipient(request, token, envelope.id, recipient.id, 'Should not work'); + + expect(res.ok()).toBeFalsy(); + expect(res.status()).toBe(404); + + // The recipient must remain untouched. + const untouchedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(untouchedRecipient.signingStatus).toBe(SigningStatus.NOT_SIGNED); + expect(untouchedRecipient.rejectionReason).toBeNull(); + }); + + test('should return 404 for a non-existent recipient', async ({ request }) => { + const envelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + + const res = await rejectRecipient(request, token, envelope.id, 999999999, 'No such recipient'); + + expect(res.ok()).toBeFalsy(); + expect(res.status()).toBe(404); + }); + + test('should return 404 when the recipient does not belong to the supplied envelope', async ({ request }) => { + const targetEnvelope = await seedPendingDocument(user, team.id, ['recipient@test.documenso.com']); + const otherEnvelope = await seedPendingDocument(user, team.id, ['other-recipient@test.documenso.com']); + + const recipient = targetEnvelope.recipients[0]; + + // Valid recipient ID, but paired with the wrong envelope ID. + const res = await rejectRecipient(request, token, otherEnvelope.id, recipient.id, 'Mismatched envelope'); + + expect(res.ok()).toBeFalsy(); + expect(res.status()).toBe(404); + + // The recipient must remain untouched. + const untouchedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(untouchedRecipient.signingStatus).toBe(SigningStatus.NOT_SIGNED); + expect(untouchedRecipient.rejectionReason).toBeNull(); + }); + + test('should enforce document visibility: manager cannot reject on an ADMIN-only document', async ({ request }) => { + // The API token belongs to a MANAGER, who cannot see ADMIN-visibility docs. + const { team: visTeam, owner } = await seedTeam(); + const manager = await seedTeamMember({ teamId: visTeam.id, role: TeamMemberRole.MANAGER }); + + const { token: managerToken } = await createApiToken({ + userId: manager.id, + teamId: visTeam.id, + tokenName: 'manager-reject-token', + expiresIn: null, + }); + + // ADMIN-visibility document owned by the team owner. + const envelope = await seedPendingDocument(owner, visTeam.id, ['recipient@test.documenso.com'], { + createDocumentOptions: { visibility: DocumentVisibility.ADMIN }, + }); + const recipient = envelope.recipients[0]; + + const res = await rejectRecipient( + request, + managerToken, + envelope.id, + recipient.id, + 'Should be hidden by visibility', + ); + + // Visibility failure surfaces as not-found, matching the canonical checks. + expect(res.ok()).toBeFalsy(); + expect(res.status()).toBe(404); + + const untouchedRecipient = await prisma.recipient.findUniqueOrThrow({ + where: { id: recipient.id }, + }); + + expect(untouchedRecipient.signingStatus).toBe(SigningStatus.NOT_SIGNED); + expect(untouchedRecipient.rejectionReason).toBeNull(); + }); +}); diff --git a/packages/ee/server-only/signing/csc/execute-tsp-sign.ts b/packages/ee/server-only/signing/csc/execute-tsp-sign.ts index 5045b33d8..3c95720f6 100644 --- a/packages/ee/server-only/signing/csc/execute-tsp-sign.ts +++ b/packages/ee/server-only/signing/csc/execute-tsp-sign.ts @@ -1,6 +1,5 @@ import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { jobs } from '@documenso/lib/jobs/client'; -import { sendPendingEmail } from '@documenso/lib/server-only/document/send-pending-email'; import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-recipient-by-token'; import { triggerWebhook } from '@documenso/lib/server-only/webhooks/trigger/trigger-webhook'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; @@ -474,9 +473,12 @@ export const executeTspSign = async (opts: ExecuteTspSignOptions): Promise 0) { - await sendPendingEmail({ - id: { type: 'envelopeId', id: envelope.id }, - recipientId: recipient.id, + await jobs.triggerJob({ + name: 'send.document.pending.email', + payload: { + envelopeId: envelope.id, + recipientId: recipient.id, + }, }); // TSP envelopes are forced SEQUENTIAL at send-time; this branch always diff --git a/packages/lib/constants/envelope-reminder.ts b/packages/lib/constants/envelope-reminder.ts index 0eb8cdf93..b000ed844 100644 --- a/packages/lib/constants/envelope-reminder.ts +++ b/packages/lib/constants/envelope-reminder.ts @@ -36,6 +36,12 @@ export const DEFAULT_ENVELOPE_REMINDER_SETTINGS: TEnvelopeReminderSettings = { */ export const MAX_REMINDER_WINDOW_DAYS = 30; +/** + * Maximum number of automated reminders sent to a recipient before reminders + * stop. A manual resend resets the count, re-arming reminders. + */ +export const MAX_REMINDERS_BEFORE_RESEND = 5; + const UNIT_TO_LUXON_KEY: Record = { day: 'days', week: 'weeks', @@ -53,24 +59,29 @@ export const getEnvelopeReminderDuration = (period: TEnvelopeReminderDurationPer * - `{ sendAfter: { disabled: true }, ... }` means never send the first reminder. * - `{ repeatEvery: { disabled: true }, ... }` means don't repeat after the first reminder. * - * A hard cap of `MAX_REMINDER_WINDOW_DAYS` days from `sentAt` is enforced — - * any computed reminder beyond that point returns null so reminders stop. + * Reminders stop (returns null) once either cap is hit: `MAX_REMINDER_WINDOW_DAYS` + * from `sentAt`, or `MAX_REMINDERS_BEFORE_RESEND` reminders already sent. * * `sentAt` is when the signing request was sent to this specific recipient. * - * Returns the next Date the reminder should be sent, or null if no reminder should be sent. + * Returns the next Date the reminder should be sent, or null if none. */ export const resolveNextReminderAt = (options: { config: TEnvelopeReminderSettings | null; sentAt: Date; lastReminderSentAt: Date | null; + reminderCount: number; }): Date | null => { - const { config, sentAt, lastReminderSentAt } = options; + const { config, sentAt, lastReminderSentAt, reminderCount } = options; if (!config) { return null; } + if (reminderCount >= MAX_REMINDERS_BEFORE_RESEND) { + return null; + } + const maxReminderAt = new Date(sentAt.getTime() + Duration.fromObject({ days: MAX_REMINDER_WINDOW_DAYS }).toMillis()); let candidate: Date; diff --git a/packages/lib/jobs/client.ts b/packages/lib/jobs/client.ts index ae23cb092..397108f61 100644 --- a/packages/lib/jobs/client.ts +++ b/packages/lib/jobs/client.ts @@ -4,11 +4,14 @@ import { SEND_CONFIRMATION_EMAIL_JOB_DEFINITION } from './definitions/emails/sen import { SEND_DOCUMENT_CANCELLED_EMAILS_JOB_DEFINITION } from './definitions/emails/send-document-cancelled-emails'; import { SEND_DOCUMENT_COMPLETED_EMAILS_JOB_DEFINITION } from './definitions/emails/send-document-completed-emails'; import { SEND_DOCUMENT_CREATED_FROM_DIRECT_TEMPLATE_EMAIL_JOB_DEFINITION } from './definitions/emails/send-document-created-from-direct-template-email'; +import { SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION } from './definitions/emails/send-document-deleted-emails'; +import { SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION } from './definitions/emails/send-document-pending-email'; import { SEND_ORGANISATION_LIMIT_ALERT_EMAIL_JOB_DEFINITION } from './definitions/emails/send-organisation-limit-alert-email'; import { SEND_ORGANISATION_MEMBER_JOINED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-organisation-member-joined-email'; import { SEND_ORGANISATION_MEMBER_LEFT_EMAIL_JOB_DEFINITION } from './definitions/emails/send-organisation-member-left-email'; import { SEND_OWNER_RECIPIENT_EXPIRED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-owner-recipient-expired-email'; import { SEND_PASSWORD_RESET_SUCCESS_EMAIL_JOB_DEFINITION } from './definitions/emails/send-password-reset-success-email'; +import { SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-recipient-removed-email'; import { SEND_RECIPIENT_SIGNED_EMAIL_JOB_DEFINITION } from './definitions/emails/send-recipient-signed-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'; @@ -44,9 +47,12 @@ export const jobsClient = new JobClient([ SEND_PASSWORD_RESET_SUCCESS_EMAIL_JOB_DEFINITION, SEND_SIGNING_REJECTION_EMAILS_JOB_DEFINITION, SEND_RECIPIENT_SIGNED_EMAIL_JOB_DEFINITION, + SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION, SEND_DOCUMENT_COMPLETED_EMAILS_JOB_DEFINITION, + SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION, SEND_DOCUMENT_CANCELLED_EMAILS_JOB_DEFINITION, SEND_DOCUMENT_CREATED_FROM_DIRECT_TEMPLATE_EMAIL_JOB_DEFINITION, + SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION, SEND_OWNER_RECIPIENT_EXPIRED_EMAIL_JOB_DEFINITION, BACKPORT_SUBSCRIPTION_CLAIM_JOB_DEFINITION, BULK_SEND_TEMPLATE_JOB_DEFINITION, diff --git a/packages/lib/jobs/definitions/emails/send-document-deleted-emails.handler.ts b/packages/lib/jobs/definitions/emails/send-document-deleted-emails.handler.ts new file mode 100644 index 000000000..4e1aa9fea --- /dev/null +++ b/packages/lib/jobs/definitions/emails/send-document-deleted-emails.handler.ts @@ -0,0 +1,70 @@ +import DocumentCancelTemplate from '@documenso/email/templates/document-cancel'; +import { msg } from '@lingui/core/macro'; +import { createElement } from 'react'; + +import { getI18nInstance } from '../../../client-only/providers/i18n-server'; +import { NEXT_PUBLIC_WEBAPP_URL } from '../../../constants/app'; +import { getEmailContext } from '../../../server-only/email/get-email-context'; +import { isRecipientEmailValidForSending } from '../../../utils/recipients'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; +import type { JobRunIO } from '../../client/_internal/job'; +import type { TSendDocumentDeletedEmailsJobDefinition } from './send-document-deleted-emails'; + +export const run = async ({ payload, io }: { payload: TSendDocumentDeletedEmailsJobDefinition; io: JobRunIO }) => { + const { teamId, documentName, inviterName, inviterEmail, meta, recipients } = payload; + + if (recipients.length === 0) { + return; + } + + const { branding, emailLanguage, senderEmail, replyToEmail, emailsDisabled, emailTransport } = await getEmailContext({ + emailType: 'RECIPIENT', + source: { + type: 'team', + teamId, + }, + meta, + }); + + // Don't send cancellation emails if the organisation has email sending + // disabled. Re-checked here (not just at enqueue time) because the org can be + // disabled between the delete request and this job running. + if (emailsDisabled) { + return; + } + + const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; + const i18n = await getI18nInstance(emailLanguage); + + for (const recipient of recipients) { + await io.runTask(`send-document-deleted-emails-${recipient.email}`, async () => { + if (!isRecipientEmailValidForSending(recipient)) { + return; + } + + const template = createElement(DocumentCancelTemplate, { + documentName, + inviterName: inviterName || undefined, + inviterEmail, + assetBaseUrl, + }); + + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: emailLanguage, branding }), + renderEmailWithI18N(template, { lang: emailLanguage, branding, plainText: true }), + ]); + + await emailTransport.sendMail({ + to: { + address: recipient.email, + name: recipient.name, + }, + from: senderEmail, + replyTo: replyToEmail, + subject: i18n._(msg`Document Cancelled`), + html, + text, + }); + }); + } +}; diff --git a/packages/lib/jobs/definitions/emails/send-document-deleted-emails.ts b/packages/lib/jobs/definitions/emails/send-document-deleted-emails.ts new file mode 100644 index 000000000..e63de8f6e --- /dev/null +++ b/packages/lib/jobs/definitions/emails/send-document-deleted-emails.ts @@ -0,0 +1,52 @@ +import { z } from 'zod'; + +import type { JobDefinition } from '../../client/_internal/job'; + +const SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_ID = 'send.document.deleted.emails'; + +const SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_SCHEMA = z.object({ + teamId: z.number(), + documentName: z.string(), + inviterName: z.string().optional(), + inviterEmail: z.string(), + /** + * The document's email meta (sender, reply-to, language). Captured before the + * envelope is hard-deleted so `getEmailContext` resolves the exact same + * sender/reply-to/language the inline send used. + */ + meta: z + .object({ + emailId: z.string().nullable().optional(), + emailReplyTo: z.string().nullable().optional(), + language: z.string().optional(), + }) + .nullable(), + recipients: z + .object({ + email: z.string(), + name: z.string(), + }) + .array(), +}); + +export type TSendDocumentDeletedEmailsJobDefinition = z.infer< + typeof SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_SCHEMA +>; + +export const SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION = { + id: SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_ID, + name: 'Send Document Deleted Emails', + version: '1.0.0', + trigger: { + name: SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_ID, + schema: SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_SCHEMA, + }, + handler: async ({ payload, io }) => { + const handler = await import('./send-document-deleted-emails.handler'); + + await handler.run({ payload, io }); + }, +} as const satisfies JobDefinition< + typeof SEND_DOCUMENT_DELETED_EMAILS_JOB_DEFINITION_ID, + TSendDocumentDeletedEmailsJobDefinition +>; diff --git a/packages/lib/server-only/document/send-pending-email.ts b/packages/lib/jobs/definitions/emails/send-document-pending-email.handler.ts similarity index 66% rename from packages/lib/server-only/document/send-pending-email.ts rename to packages/lib/jobs/definitions/emails/send-document-pending-email.handler.ts index 4d803f5dd..3a7bf3e96 100644 --- a/packages/lib/server-only/document/send-pending-email.ts +++ b/packages/lib/jobs/definitions/emails/send-document-pending-email.handler.ts @@ -1,27 +1,24 @@ import { DocumentPendingEmailTemplate } from '@documenso/email/templates/document-pending'; +import { unsafeBuildEnvelopeIdQuery } from '@documenso/lib/utils/envelope'; import { prisma } from '@documenso/prisma'; import { msg } from '@lingui/core/macro'; import { EnvelopeType } from '@prisma/client'; import { createElement } from 'react'; +import { getI18nInstance } from '../../../client-only/providers/i18n-server'; +import { NEXT_PUBLIC_WEBAPP_URL } from '../../../constants/app'; +import { getEmailContext } from '../../../server-only/email/get-email-context'; +import { extractDerivedDocumentEmailSettings } from '../../../types/document-email'; +import { isRecipientEmailValidForSending } from '../../../utils/recipients'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; +import type { JobRunIO } from '../../client/_internal/job'; +import type { TSendDocumentPendingEmailJobDefinition } from './send-document-pending-email'; -import { getI18nInstance } from '../../client-only/providers/i18n-server'; -import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; -import { extractDerivedDocumentEmailSettings } from '../../types/document-email'; -import type { EnvelopeIdOptions } from '../../utils/envelope'; -import { unsafeBuildEnvelopeIdQuery } from '../../utils/envelope'; -import { isRecipientEmailValidForSending } from '../../utils/recipients'; -import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; -import { getEmailContext } from '../email/get-email-context'; +export const run = async ({ payload }: { payload: TSendDocumentPendingEmailJobDefinition; io: JobRunIO }) => { + const { envelopeId, recipientId } = payload; -export interface SendPendingEmailOptions { - id: EnvelopeIdOptions; - recipientId: number; -} - -export const sendPendingEmail = async ({ id, recipientId }: SendPendingEmailOptions) => { const envelope = await prisma.envelope.findFirst({ where: { - ...unsafeBuildEnvelopeIdQuery(id, EnvelopeType.DOCUMENT), + ...unsafeBuildEnvelopeIdQuery({ type: 'envelopeId', id: envelopeId }, EnvelopeType.DOCUMENT), recipients: { some: { id: recipientId, @@ -38,12 +35,8 @@ export const sendPendingEmail = async ({ id, recipientId }: SendPendingEmailOpti }, }); - if (!envelope) { - throw new Error('Document not found'); - } - - if (envelope.recipients.length === 0) { - throw new Error('Document has no recipients'); + if (!envelope || envelope.recipients.length === 0) { + return; } const { branding, emailLanguage, senderEmail, replyToEmail, emailsDisabled, emailTransport } = await getEmailContext({ diff --git a/packages/lib/jobs/definitions/emails/send-document-pending-email.ts b/packages/lib/jobs/definitions/emails/send-document-pending-email.ts new file mode 100644 index 000000000..ff6b885c7 --- /dev/null +++ b/packages/lib/jobs/definitions/emails/send-document-pending-email.ts @@ -0,0 +1,30 @@ +import { z } from 'zod'; + +import type { JobDefinition } from '../../client/_internal/job'; + +const SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_ID = 'send.document.pending.email'; + +const SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_SCHEMA = z.object({ + envelopeId: z.string(), + recipientId: z.number(), +}); + +export type TSendDocumentPendingEmailJobDefinition = z.infer; + +export const SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION = { + id: SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_ID, + name: 'Send Document Pending Email', + version: '1.0.0', + trigger: { + name: SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_ID, + schema: SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_SCHEMA, + }, + handler: async ({ payload, io }) => { + const handler = await import('./send-document-pending-email.handler'); + + await handler.run({ payload, io }); + }, +} as const satisfies JobDefinition< + typeof SEND_DOCUMENT_PENDING_EMAIL_JOB_DEFINITION_ID, + TSendDocumentPendingEmailJobDefinition +>; diff --git a/packages/lib/jobs/definitions/emails/send-recipient-removed-email.handler.ts b/packages/lib/jobs/definitions/emails/send-recipient-removed-email.handler.ts new file mode 100644 index 000000000..8f402704e --- /dev/null +++ b/packages/lib/jobs/definitions/emails/send-recipient-removed-email.handler.ts @@ -0,0 +1,105 @@ +import RecipientRemovedFromDocumentTemplate from '@documenso/email/templates/recipient-removed-from-document'; +import { prisma } from '@documenso/prisma'; +import { msg } from '@lingui/core/macro'; +import { createElement } from 'react'; + +import { getI18nInstance } from '../../../client-only/providers/i18n-server'; +import { NEXT_PUBLIC_WEBAPP_URL } from '../../../constants/app'; +import { getEmailContext } from '../../../server-only/email/get-email-context'; +import { assertOrganisationRatesAndLimits } from '../../../server-only/rate-limit/assert-organisation-rates-and-limits'; +import { extractDerivedDocumentEmailSettings } from '../../../types/document-email'; +import { isRecipientEmailValidForSending } from '../../../utils/recipients'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; +import type { JobRunIO } from '../../client/_internal/job'; +import type { TSendRecipientRemovedEmailJobDefinition } from './send-recipient-removed-email'; + +export const run = async ({ payload, io }: { payload: TSendRecipientRemovedEmailJobDefinition; io: JobRunIO }) => { + const { envelopeId, recipientEmail, recipientName, inviterName } = payload; + + const envelope = await prisma.envelope.findFirst({ + where: { + id: envelopeId, + }, + include: { + documentMeta: true, + }, + }); + + // The envelope may have been deleted between the recipient removal and this + // job running. Treat as a no-op so the job doesn't retry forever. + if (!envelope || !recipientEmail || !isRecipientEmailValidForSending({ email: recipientEmail })) { + return; + } + + // Re-checked at send time (not just at enqueue) so the email honors the + // document's current "recipient removed" setting. + const isRecipientRemovedEmailEnabled = extractDerivedDocumentEmailSettings(envelope.documentMeta).recipientRemoved; + + if (!isRecipientRemovedEmailEnabled) { + return; + } + + const { branding, emailLanguage, senderEmail, replyToEmail, organisationId, claims, emailsDisabled, emailTransport } = + await getEmailContext({ + emailType: 'RECIPIENT', + source: { + type: 'team', + teamId: envelope.teamId, + }, + meta: envelope.documentMeta, + }); + + // Don't send the removal email if the organisation has email sending disabled. + if (emailsDisabled) { + return; + } + + // Meter the removal email against the organisation email quota/stats. + // Add/remove churn can be used to blast unsolicited removal emails outside + // the email limits. + try { + await assertOrganisationRatesAndLimits({ + organisationId, + organisationClaim: claims, + type: 'email', + count: 1, + }); + } catch (_err) { + io.logger.warn({ + msg: 'Recipient removed email dropped: org email limit exceeded', + organisationId, + envelopeId: envelope.id, + }); + + return; + } + + const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; + + const template = createElement(RecipientRemovedFromDocumentTemplate, { + documentName: envelope.title, + inviterName: inviterName || undefined, + assetBaseUrl, + }); + + const i18n = await getI18nInstance(emailLanguage); + + await io.runTask('send-recipient-removed-email', async () => { + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: emailLanguage, branding }), + renderEmailWithI18N(template, { lang: emailLanguage, branding, plainText: true }), + ]); + + await emailTransport.sendMail({ + to: { + address: recipientEmail, + name: recipientName, + }, + from: senderEmail, + replyTo: replyToEmail, + subject: i18n._(msg`You have been removed from a document`), + html, + text, + }); + }); +}; diff --git a/packages/lib/jobs/definitions/emails/send-recipient-removed-email.ts b/packages/lib/jobs/definitions/emails/send-recipient-removed-email.ts new file mode 100644 index 000000000..484c70ac0 --- /dev/null +++ b/packages/lib/jobs/definitions/emails/send-recipient-removed-email.ts @@ -0,0 +1,34 @@ +import { z } from 'zod'; + +import type { JobDefinition } from '../../client/_internal/job'; + +const SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_ID = 'send.recipient.removed.email'; + +const SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_SCHEMA = z.object({ + envelopeId: z.string(), + recipientEmail: z.string(), + recipientName: z.string(), + inviterName: z.string().optional(), +}); + +export type TSendRecipientRemovedEmailJobDefinition = z.infer< + typeof SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_SCHEMA +>; + +export const SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION = { + id: SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_ID, + name: 'Send Recipient Removed Email', + version: '1.0.0', + trigger: { + name: SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_ID, + schema: SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_SCHEMA, + }, + handler: async ({ payload, io }) => { + const handler = await import('./send-recipient-removed-email.handler'); + + await handler.run({ payload, io }); + }, +} as const satisfies JobDefinition< + typeof SEND_RECIPIENT_REMOVED_EMAIL_JOB_DEFINITION_ID, + TSendRecipientRemovedEmailJobDefinition +>; diff --git a/packages/lib/jobs/definitions/internal/process-signing-reminder.handler.ts b/packages/lib/jobs/definitions/internal/process-signing-reminder.handler.ts index 7f73e9542..2d08d7c36 100644 --- a/packages/lib/jobs/definitions/internal/process-signing-reminder.handler.ts +++ b/packages/lib/jobs/definitions/internal/process-signing-reminder.handler.ts @@ -52,6 +52,7 @@ export const run = async ({ payload, io }: { payload: TProcessSigningReminderJob data: { lastReminderSentAt: now, nextReminderAt: null, + reminderCount: { increment: 1 }, }, }); @@ -243,13 +244,15 @@ export const run = async ({ payload, io }: { payload: TProcessSigningReminderJob }); } - // Compute the next reminder time (repeat interval). + // reminderCount was incremented in the atomic claim above, so the value read + // here includes the reminder we just sent and gates the next one. if (recipient.sentAt) { await updateRecipientNextReminder({ recipientId: recipient.id, envelopeId: envelope.id, sentAt: recipient.sentAt, lastReminderSentAt: now, + reminderCount: recipient.reminderCount, }); } }; diff --git a/packages/lib/server-only/document/complete-document-with-token.ts b/packages/lib/server-only/document/complete-document-with-token.ts index 531cc59f4..10aefd189 100644 --- a/packages/lib/server-only/document/complete-document-with-token.ts +++ b/packages/lib/server-only/document/complete-document-with-token.ts @@ -29,7 +29,6 @@ import { assertRecipientNotExpired } from '../../utils/recipients'; import { getIsRecipientsTurnToSign } from '../recipient/get-is-recipient-turn'; import { triggerWebhook } from '../webhooks/trigger/trigger-webhook'; import { isRecipientAuthorized } from './is-recipient-authorized'; -import { sendPendingEmail } from './send-pending-email'; export type CompleteDocumentWithTokenOptions = { token: string; @@ -389,7 +388,13 @@ export const completeDocumentWithToken = async ({ }); if (pendingRecipients.length > 0) { - await sendPendingEmail({ id, recipientId: recipient.id }); + await jobs.triggerJob({ + name: 'send.document.pending.email', + payload: { + envelopeId: envelope.id, + recipientId: recipient.id, + }, + }); if (envelope.documentMeta?.signingOrder === DocumentSigningOrder.SEQUENTIAL) { const [nextRecipient] = pendingRecipients; diff --git a/packages/lib/server-only/document/delete-document.ts b/packages/lib/server-only/document/delete-document.ts index 3711921c6..8eed2702f 100644 --- a/packages/lib/server-only/document/delete-document.ts +++ b/packages/lib/server-only/document/delete-document.ts @@ -1,13 +1,9 @@ -import DocumentCancelTemplate from '@documenso/email/templates/document-cancel'; import { prisma } from '@documenso/prisma'; -import { msg } from '@lingui/core/macro'; import type { DocumentMeta, Envelope, Recipient, User } from '@prisma/client'; import { DocumentStatus, EnvelopeType, RecipientRole, SendStatus, WebhookTriggerEvents } from '@prisma/client'; -import { createElement } from 'react'; -import { getI18nInstance } from '../../client-only/providers/i18n-server'; -import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { AppError, AppErrorCode } from '../../errors/app-error'; +import { jobs } from '../../jobs/client'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import { extractDerivedDocumentEmailSettings } from '../../types/document-email'; import { mapEnvelopeToWebhookDocumentPayload, ZWebhookDocumentSchema } from '../../types/webhook-payload'; @@ -16,7 +12,6 @@ import { isDocumentCompleted } from '../../utils/document'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; import { type EnvelopeIdOptions, unsafeBuildEnvelopeIdQuery } from '../../utils/envelope'; import { isRecipientEmailValidForSending } from '../../utils/recipients'; -import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; import { getEmailContext } from '../email/get-email-context'; import { getMemberRoles } from '../team/get-member-roles'; import { triggerWebhook } from '../webhooks/trigger/trigger-webhook'; @@ -125,7 +120,7 @@ const handleDocumentOwnerDelete = async ({ envelope, user, requestMetadata }: Ha return; } - const { branding, emailLanguage, senderEmail, replyToEmail, emailsDisabled, emailTransport } = await getEmailContext({ + const { emailLanguage, emailsDisabled } = await getEmailContext({ emailType: 'RECIPIENT', source: { type: 'team', @@ -192,50 +187,40 @@ const handleDocumentOwnerDelete = async ({ envelope, user, requestMetadata }: Ha return deletedEnvelope; } - // Send cancellation emails to recipients. - await Promise.all( - envelope.recipients.map(async (recipient) => { - if ( - recipient.sendStatus !== SendStatus.SENT || - !isRecipientEmailValidForSending(recipient) || - recipient.role === RecipientRole.CC - ) { - return; - } + // Enqueue cancellation emails as a background job. The envelope (and its + // documentMeta) is hard-deleted above, so the job can't look it up later — + // pass a self-contained payload with the recipients to notify. + const recipientsToNotify = envelope.recipients + .filter( + (recipient) => + recipient.sendStatus === SendStatus.SENT && + recipient.role !== RecipientRole.CC && + isRecipientEmailValidForSending(recipient), + ) + .map((recipient) => ({ + email: recipient.email, + name: recipient.name, + })); - const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; - - const template = createElement(DocumentCancelTemplate, { + if (recipientsToNotify.length > 0) { + await jobs.triggerJob({ + name: 'send.document.deleted.emails', + payload: { + teamId: envelope.teamId, documentName: envelope.title, inviterName: user.name || undefined, inviterEmail: user.email, - assetBaseUrl, - }); - - const [html, text] = await Promise.all([ - renderEmailWithI18N(template, { lang: emailLanguage, branding }), - renderEmailWithI18N(template, { - lang: emailLanguage, - branding, - plainText: true, - }), - ]); - - const i18n = await getI18nInstance(emailLanguage); - - await emailTransport.sendMail({ - to: { - address: recipient.email, - name: recipient.name, - }, - from: senderEmail, - replyTo: replyToEmail, - subject: i18n._(msg`Document Cancelled`), - html, - text, - }); - }), - ); + meta: envelope.documentMeta + ? { + emailId: envelope.documentMeta.emailId, + emailReplyTo: envelope.documentMeta.emailReplyTo, + language: emailLanguage, + } + : null, + recipients: recipientsToNotify, + }, + }); + } return deletedEnvelope; }; diff --git a/packages/lib/server-only/document/reject-document-on-behalf-of.ts b/packages/lib/server-only/document/reject-document-on-behalf-of.ts new file mode 100644 index 000000000..4816b797f --- /dev/null +++ b/packages/lib/server-only/document/reject-document-on-behalf-of.ts @@ -0,0 +1,215 @@ +// This is closely related to `reject-document-with-token.ts` but is intentionally +// kept as a separate method rather than merged into one. This file focuses on +// rejection from an API/programmatic perspective (an authenticated API user acting +// on behalf of a recipient), whereas `reject-document-with-token.ts` focuses on it +// from a recipient perspective (the recipient rejecting via their token). +// +// Code changes in one should probably be mirrored to the other, particularly in +// relation to the jobs triggered after a rejection. +import { jobs } from '@documenso/lib/jobs/client'; +import { prisma } from '@documenso/prisma'; +import { DocumentStatus, EnvelopeType, SigningStatus } from '@prisma/client'; + +import { AppError, AppErrorCode } from '../../errors/app-error'; +import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; +import type { ApiRequestMetadata } from '../../universal/extract-request-metadata'; +import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; +import { mapSecondaryIdToDocumentId } from '../../utils/envelope'; +import { assertRecipientNotExpired } from '../../utils/recipients'; +import { buildTeamWhereQuery } from '../../utils/teams'; +import { getEnvelopeWhereInput } from '../envelope/get-envelope-by-id'; + +export type RejectDocumentOnBehalfOfOptions = { + /** + * The ID of the envelope the recipient belongs to. Required so the caller + * targets an explicit envelope/recipient combination rather than resolving the + * envelope implicitly from the recipient ID. + */ + envelopeId: string; + recipientId: number; + userId: number; + teamId: number; + reason: string; + /** + * The email of a team member to attribute the rejection to. Must be a member + * of the team. When omitted the rejection is attributed to the API user that + * owns the token (`userId`). + * + * This exists so external applications can elect which team member is acting + * on behalf of the recipient, rather than always defaulting to the API user. + */ + actAsEmail?: string; + requestMetadata: ApiRequestMetadata; +}; + +/** + * Reject a document on behalf of a recipient as an authenticated API user. + * + * This is used to programmatically record a rejection for cases where the + * recipient declined to sign outside of the platform (e.g. before ever + * reaching it). The rejection is flagged as `isExternal` in the audit log to + * distinguish it from a rejection performed by the recipient directly. + * + * The action can optionally be attributed to a specific team member via + * `actAsEmail`; otherwise it is attributed to the API user. + */ +export async function rejectDocumentOnBehalfOf({ + envelopeId, + recipientId, + userId, + teamId, + reason, + actAsEmail, + requestMetadata, +}: RejectDocumentOnBehalfOfOptions) { + // Build the access-controlled envelope query. This enforces team membership + // AND document visibility (and owner / team-email access), mirroring the + // canonical envelope access checks used across the app. + const { envelopeWhereInput } = await getEnvelopeWhereInput({ + id: { type: 'envelopeId', id: envelopeId }, + type: EnvelopeType.DOCUMENT, + userId, + teamId, + }); + + const recipient = await prisma.recipient.findFirst({ + where: { + id: recipientId, + envelope: envelopeWhereInput, + }, + include: { + envelope: true, + }, + }); + + const envelope = recipient?.envelope; + + if (!recipient || !envelope) { + throw new AppError(AppErrorCode.NOT_FOUND, { + message: 'Document or recipient not found', + }); + } + + if (envelope.status !== DocumentStatus.PENDING) { + throw new AppError(AppErrorCode.INVALID_REQUEST, { + message: `Document ${envelope.id} must be pending to reject`, + }); + } + + if (recipient.signingStatus !== SigningStatus.NOT_SIGNED) { + throw new AppError(AppErrorCode.INVALID_REQUEST, { + message: `Recipient ${recipient.id} has already actioned this document`, + }); + } + + assertRecipientNotExpired(recipient); + + // Resolve the user the rejection should be attributed to. When `actAsEmail` + // is supplied it must resolve to a member of the team; otherwise the rejection + // is attributed to the API user that owns the token. + const electedUser = await getValidatedElectedUser({ actAsEmail, teamId }); + const actingUser = electedUser ?? (await prisma.user.findFirstOrThrow({ where: { id: userId } })); + + // Update the recipient status to rejected and record an external rejection + // audit log within the same transaction. + 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({ + envelopeId: envelope.id, + type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED, + // Always attribute the audit log to a concrete user: the elected team + // member when supplied, otherwise the API user that owns the token. + user: { id: actingUser.id, email: actingUser.email, name: actingUser.name }, + metadata: requestMetadata, + data: { + recipientEmail: recipient.email, + recipientName: recipient.name, + recipientId: recipient.id, + recipientRole: recipient.role, + reason, + isExternal: true, + // Only set when a member was explicitly elected via `actAsEmail`. + onBehalfOfUserEmail: electedUser?.email, + onBehalfOfUserName: electedUser?.name, + }, + }), + }), + ]); + + const legacyDocumentId = mapSecondaryIdToDocumentId(envelope.secondaryId); + + // Trigger the seal document job to process the document asynchronously. + await jobs.triggerJob({ + name: 'internal.seal-document', + payload: { + documentId: legacyDocumentId, + requestMetadata: requestMetadata.requestMetadata, + }, + }); + + // Send email notifications to the rejecting recipient. + await jobs.triggerJob({ + name: 'send.signing.rejected.emails', + payload: { + recipientId: recipient.id, + documentId: legacyDocumentId, + }, + }); + + // Send cancellation emails to other recipients. + await jobs.triggerJob({ + name: 'send.document.cancelled.emails', + payload: { + documentId: legacyDocumentId, + cancellationReason: reason, + requestMetadata: requestMetadata.requestMetadata, + }, + }); + + return updatedRecipient; +} + +/** + * Resolve and validate the team member elected via `actAsEmail`. Returns `null` + * when no `actAsEmail` is supplied (the rejection is then attributed to the API + * user). Throws when the email does not resolve to a member of the team. + */ +const getValidatedElectedUser = async ({ actAsEmail, teamId }: { actAsEmail?: string; teamId: number }) => { + if (!actAsEmail) { + return null; + } + + const electedUser = await prisma.user.findFirst({ + where: { + email: actAsEmail, + }, + }); + + if (!electedUser) { + throw new AppError(AppErrorCode.UNAUTHORIZED, { + message: 'The user to act on behalf of must be a member of the team', + }); + } + + const isTeamMember = await prisma.team.findFirst({ + where: buildTeamWhereQuery({ teamId, userId: electedUser.id }), + }); + + if (!isTeamMember) { + throw new AppError(AppErrorCode.UNAUTHORIZED, { + message: 'The user to act on behalf of must be a member of the team', + }); + } + + return electedUser; +}; diff --git a/packages/lib/server-only/document/reject-document-with-token.ts b/packages/lib/server-only/document/reject-document-with-token.ts index f5cc18a2e..a8555b42b 100644 --- a/packages/lib/server-only/document/reject-document-with-token.ts +++ b/packages/lib/server-only/document/reject-document-with-token.ts @@ -1,3 +1,11 @@ +// This is closely related to `reject-document-on-behalf-of.ts` but is intentionally +// kept as a separate method rather than merged into one. This file focuses on +// rejection from a recipient perspective (the recipient rejecting via their token), +// whereas `reject-document-on-behalf-of.ts` focuses on it from an API/programmatic +// perspective (an authenticated API user acting on behalf of a recipient). +// +// Code changes in one should probably be mirrored to the other, particularly in +// relation to the jobs triggered after a rejection. import { jobs } from '@documenso/lib/jobs/client'; import { prisma } from '@documenso/prisma'; import { DocumentStatus, EnvelopeType, SigningStatus } from '@prisma/client'; diff --git a/packages/lib/server-only/document/resend-document.ts b/packages/lib/server-only/document/resend-document.ts index c270199a3..29b20ed15 100644 --- a/packages/lib/server-only/document/resend-document.ts +++ b/packages/lib/server-only/document/resend-document.ts @@ -31,6 +31,7 @@ import { buildEnvelopeEmailHeaders } from '../email/build-envelope-email-headers import { getEmailContext } from '../email/get-email-context'; import { getEnvelopeWhereInput } from '../envelope/get-envelope-by-id'; import { assertOrganisationRatesAndLimits } from '../rate-limit/assert-organisation-rates-and-limits'; +import { updateRecipientNextReminder } from '../recipient/update-recipient-next-reminder'; import { assertUserNotDisabled } from '../user/assert-user-not-disabled'; import { triggerWebhook } from '../webhooks/trigger/trigger-webhook'; @@ -118,7 +119,6 @@ export const resendDocument = async ({ id, userId, recipients, teamId, requestMe }); } - // Refresh the expiresAt on each resent recipient. const expiresAt = resolveExpiresAt(envelope.documentMeta?.envelopeExpirationPeriod ?? null); const recipientsToRemind = envelope.recipients.filter( @@ -128,7 +128,6 @@ export const resendDocument = async ({ id, userId, recipients, teamId, requestMe recipient.role !== RecipientRole.CC, ); - // Extend the expiration deadline for recipients being resent. if (expiresAt && recipientsToRemind.length > 0) { await prisma.recipient.updateMany({ where: { @@ -143,6 +142,22 @@ export const resendDocument = async ({ id, userId, recipients, teamId, requestMe }); } + // A manual resend restarts the reminder cycle from scratch, mirroring the + // initial send, so a recipient that hit the threshold can be reminded again. + const resentAt = new Date(); + + await Promise.all( + recipientsToRemind.map((recipient) => + updateRecipientNextReminder({ + recipientId: recipient.id, + envelopeId: envelope.id, + sentAt: resentAt, + lastReminderSentAt: null, + resetReminderCount: true, + }), + ), + ); + const isRecipientSigningRequestEmailEnabled = extractDerivedDocumentEmailSettings( envelope.documentMeta, ).recipientSigningRequest; diff --git a/packages/lib/server-only/recipient/delete-envelope-recipient.ts b/packages/lib/server-only/recipient/delete-envelope-recipient.ts index 06d90ca46..e2e99feed 100644 --- a/packages/lib/server-only/recipient/delete-envelope-recipient.ts +++ b/packages/lib/server-only/recipient/delete-envelope-recipient.ts @@ -1,24 +1,16 @@ -import RecipientRemovedFromDocumentTemplate from '@documenso/email/templates/recipient-removed-from-document'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata'; import { prisma } from '@documenso/prisma'; -import { msg } from '@lingui/core/macro'; import { EnvelopeType, RecipientRole, SendStatus } from '@prisma/client'; -import { createElement } from 'react'; -import { getI18nInstance } from '../../client-only/providers/i18n-server'; -import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { AppError, AppErrorCode } from '../../errors/app-error'; +import { jobs } from '../../jobs/client'; import { extractDerivedDocumentEmailSettings } from '../../types/document-email'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; -import { logger } from '../../utils/logger'; import { canRecipientBeModified, isRecipientEmailValidForSending } from '../../utils/recipients'; -import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; import { buildTeamWhereQuery } from '../../utils/teams'; -import { getEmailContext } from '../email/get-email-context'; import { assertEnvelopeMutable } from '../envelope/assert-envelope-mutable'; import { getEnvelopeWhereInput } from '../envelope/get-envelope-by-id'; -import { assertOrganisationRatesAndLimits } from '../rate-limit/assert-organisation-rates-and-limits'; export interface DeleteEnvelopeRecipientOptions { userId: number; @@ -148,75 +140,16 @@ export const deleteEnvelopeRecipient = async ({ envelope.type === EnvelopeType.DOCUMENT && isRecipientEmailValidForSending(recipientToDelete) ) { - const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; - - const template = createElement(RecipientRemovedFromDocumentTemplate, { - documentName: envelope.title, - inviterName: envelope.team?.name || user.name || undefined, - assetBaseUrl, - }); - - const { - branding, - emailLanguage, - senderEmail, - replyToEmail, - organisationId, - claims, - emailsDisabled, - emailTransport, - } = await getEmailContext({ - emailType: 'RECIPIENT', - source: { - type: 'team', - teamId: envelope.teamId, - }, - meta: envelope.documentMeta, - }); - - // Don't send the removal email if the organisation has email sending disabled. - if (emailsDisabled) { - return deletedRecipient; - } - - // Meter the removal email against the organisation email quota/stats. - // Add/remove churn can be used to blast unsolicited removal emails - // outside the email limits. - try { - await assertOrganisationRatesAndLimits({ - organisationId, - organisationClaim: claims, - type: 'email', - count: 1, - }); - } catch (_err) { - logger.warn({ - msg: 'Recipient removed email dropped: org email limit exceeded', - organisationId, - recipientId: recipientToDelete.id, + // Enqueue the "removed from document" email as a background job so a + // transient mail outage doesn't fail the request and the send is retried. + await jobs.triggerJob({ + name: 'send.recipient.removed.email', + payload: { envelopeId: envelope.id, - }); - - return deletedRecipient; - } - - const [html, text] = await Promise.all([ - renderEmailWithI18N(template, { lang: emailLanguage, branding }), - renderEmailWithI18N(template, { lang: emailLanguage, branding, plainText: true }), - ]); - - const i18n = await getI18nInstance(emailLanguage); - - await emailTransport.sendMail({ - to: { - address: recipientToDelete.email, - name: recipientToDelete.name, + recipientEmail: recipientToDelete.email, + recipientName: recipientToDelete.name, + inviterName: envelope.team?.name || user.name || undefined, }, - from: senderEmail, - replyTo: replyToEmail, - subject: i18n._(msg`You have been removed from a document`), - html, - text, }); } diff --git a/packages/lib/server-only/recipient/set-document-recipients.ts b/packages/lib/server-only/recipient/set-document-recipients.ts index 2e58936ab..ca2ca666d 100644 --- a/packages/lib/server-only/recipient/set-document-recipients.ts +++ b/packages/lib/server-only/recipient/set-document-recipients.ts @@ -1,4 +1,3 @@ -import RecipientRemovedFromDocumentTemplate from '@documenso/email/templates/recipient-removed-from-document'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; import type { TRecipientAccessAuthTypes } from '@documenso/lib/types/document-auth'; import { type TRecipientActionAuthTypes, ZRecipientAuthOptionsSchema } from '@documenso/lib/types/document-auth'; @@ -7,25 +6,18 @@ import { nanoid } from '@documenso/lib/universal/id'; import { createDocumentAuditLogData, diffRecipientChanges } from '@documenso/lib/utils/document-audit-logs'; import { createRecipientAuthOptions } from '@documenso/lib/utils/document-auth'; import { prisma } from '@documenso/prisma'; -import { msg } from '@lingui/core/macro'; import type { Recipient } from '@prisma/client'; import { EnvelopeType, RecipientRole, SendStatus, SigningStatus } from '@prisma/client'; -import { createElement } from 'react'; import { isDeepEqual } from 'remeda'; -import { getI18nInstance } from '../../client-only/providers/i18n-server'; -import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { AppError, AppErrorCode } from '../../errors/app-error'; +import { jobs } from '../../jobs/client'; import { extractDerivedDocumentEmailSettings } from '../../types/document-email'; import { type EnvelopeIdOptions, mapSecondaryIdToDocumentId } from '../../utils/envelope'; -import { logger } from '../../utils/logger'; import { canRecipientBeModified, isRecipientEmailValidForSending } from '../../utils/recipients'; -import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; -import { getEmailContext } from '../email/get-email-context'; import { assertEnvelopeMutable } from '../envelope/assert-envelope-mutable'; import { getEnvelopeWhereInput } from '../envelope/get-envelope-by-id'; import { assertCompatibleRecipientRole } from '../signature-level/assert-compatible-recipient-role'; -import { assertOrganisationRatesAndLimits } from '../rate-limit/assert-organisation-rates-and-limits'; export interface SetDocumentRecipientsOptions { userId: number; @@ -88,16 +80,6 @@ export const setDocumentRecipients = async ({ throw new Error('Document already complete'); } - const { branding, emailLanguage, senderEmail, replyToEmail, organisationId, claims, emailsDisabled, emailTransport } = - await getEmailContext({ - emailType: 'RECIPIENT', - source: { - type: 'team', - teamId, - }, - meta: envelope.documentMeta, - }); - const recipientsHaveActionAuth = recipients.some( (recipient) => recipient.actionAuth && recipient.actionAuth.length > 0, ); @@ -290,67 +272,29 @@ export const setDocumentRecipients = async ({ const isRecipientRemovedEmailEnabled = extractDerivedDocumentEmailSettings(envelope.documentMeta).recipientRemoved; - // Send emails to deleted recipients who have emails. - await Promise.all( - removedRecipients.map(async (recipient) => { - if ( - emailsDisabled || - recipient.sendStatus !== SendStatus.SENT || - recipient.role === RecipientRole.CC || - !isRecipientRemovedEmailEnabled || - !isRecipientEmailValidForSending(recipient) - ) { - return; - } + if (isRecipientRemovedEmailEnabled) { + await Promise.all( + removedRecipients.map(async (recipient) => { + if ( + recipient.sendStatus !== SendStatus.SENT || + recipient.role === RecipientRole.CC || + !isRecipientEmailValidForSending(recipient) + ) { + return; + } - // Meter against the organisation email quota/stats so add/remove churn - // can't be used to send unsolicited "removed" emails outside the limits. - try { - await assertOrganisationRatesAndLimits({ - organisationId, - organisationClaim: claims, - type: 'email', - count: 1, + await jobs.triggerJob({ + name: 'send.recipient.removed.email', + payload: { + envelopeId: envelope.id, + recipientEmail: recipient.email, + recipientName: recipient.name, + inviterName: user.name || undefined, + }, }); - } catch (_err) { - logger.warn({ - msg: 'Recipient removed email dropped: org email limit exceeded', - organisationId, - recipientId: recipient.id, - envelopeId: envelope.id, - }); - - return; - } - - const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; - - const template = createElement(RecipientRemovedFromDocumentTemplate, { - documentName: envelope.title, - inviterName: user.name || undefined, - assetBaseUrl, - }); - - const [html, text] = await Promise.all([ - renderEmailWithI18N(template, { lang: emailLanguage, branding }), - renderEmailWithI18N(template, { lang: emailLanguage, branding, plainText: true }), - ]); - - const i18n = await getI18nInstance(emailLanguage); - - await emailTransport.sendMail({ - to: { - address: recipient.email, - name: recipient.name, - }, - from: senderEmail, - replyTo: replyToEmail, - subject: i18n._(msg`You have been removed from a document`), - html, - text, - }); - }), - ); + }), + ); + } } // Filter out recipients that have been removed or have been updated. diff --git a/packages/lib/server-only/recipient/update-recipient-next-reminder.ts b/packages/lib/server-only/recipient/update-recipient-next-reminder.ts index 142cc6a3f..117c149cb 100644 --- a/packages/lib/server-only/recipient/update-recipient-next-reminder.ts +++ b/packages/lib/server-only/recipient/update-recipient-next-reminder.ts @@ -6,22 +6,20 @@ import { resolveNextReminderAt, ZEnvelopeReminderSettings } from '../../constant /** * Compute and store `nextReminderAt` for a single recipient. * - * Call this after: - * - Sending the signing email (sentAt is set) - * - Sending a reminder (lastReminderSentAt is updated) - * - * If `reminderSettings` is provided it's used directly, avoiding a query. - * Otherwise it's read from the envelope's documentMeta (already resolved - * from the org/team cascade at envelope creation time). + * Pass `resetReminderCount: true` to restart the reminder cycle (e.g. on a + * manual resend): the count is zeroed and the schedule recomputed as if the + * request was freshly sent at `sentAt`. */ export const updateRecipientNextReminder = async (options: { recipientId: number; envelopeId: string; sentAt: Date; lastReminderSentAt: Date | null; + reminderCount?: number; + resetReminderCount?: boolean; reminderSettings?: ReturnType | null; }) => { - const { recipientId, envelopeId, sentAt, lastReminderSentAt } = options; + const { recipientId, envelopeId, sentAt, lastReminderSentAt, reminderCount = 0, resetReminderCount } = options; let settings = options.reminderSettings; @@ -40,11 +38,15 @@ export const updateRecipientNextReminder = async (options: { config: settings, sentAt, lastReminderSentAt, + reminderCount: resetReminderCount ? 0 : reminderCount, }); await prisma.recipient.update({ where: { id: recipientId }, - data: { nextReminderAt }, + data: { + nextReminderAt, + ...(resetReminderCount ? { reminderCount: 0 } : {}), + }, }); }; @@ -82,7 +84,7 @@ export const recomputeNextReminderForEnvelope = async (envelopeId: string) => { // Don't reschedule reminders for recipients whose deadline has passed. OR: [{ expiresAt: null }, { expiresAt: { gt: now } }], }, - select: { id: true, sentAt: true, lastReminderSentAt: true }, + select: { id: true, sentAt: true, lastReminderSentAt: true, reminderCount: true }, }); await Promise.all( @@ -95,6 +97,7 @@ export const recomputeNextReminderForEnvelope = async (envelopeId: string) => { config: settings, sentAt: recipient.sentAt, lastReminderSentAt: recipient.lastReminderSentAt, + reminderCount: recipient.reminderCount, }); await prisma.recipient.update({ diff --git a/packages/lib/translations/de/web.po b/packages/lib/translations/de/web.po index 5ba809a72..f1f748764 100644 --- a/packages/lib/translations/de/web.po +++ b/packages/lib/translations/de/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\" im Auftrag des \"Team Name\" hat Sie eingeladen, #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" wurde erfolgreich storniert" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, one {# CSS-Regel wurde während der Bereinigung entfernt.} o #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# Dokument storniert.} other {# Dokumente storniert.}} {1, plural, one {# Dokument konnte nicht storniert werden.} other {# Dokumente konnten nicht storniert werden.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# Dokument wurde storniert.} other {# Dokumente wurden storniert.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, one {Wir haben # Empfänger in Ihrem Dokument gefunden.} oth #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {Sie sind dabei, das ausgewählte Dokument zu stornieren.} other {Sie sind dabei, # Dokumente zu stornieren.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} hat das Dokument genehmigt" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} wurde beim Signaturanbieter authentifiziert" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} hat die Remote-Signatur autorisiert" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} hat das Dokument storniert" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} hat ein 2FA-Token für das Dokument angefordert" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} hat eine Remote-Signatur angefordert" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} hat das Dokument angesehen" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "Die Remote-Signatur von {user} wurde angewendet" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "Die Authentifizierung von {user} beim Signaturanbieter ist fehlgeschlagen" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "Fügen Sie der Vorlage eine externe ID hinzu. Diese kann zur Identifizie #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Geben Sie einen optionalen Grund für die Stornierung dieser Dokumente an" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Geben Sie einen optionalen Grund für die Stornierung dieses Dokuments an" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "Beim automatischen Signieren des Dokuments ist ein Fehler aufgetreten, e #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Beim Stornieren der Dokumente ist ein Fehler aufgetreten." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Eine Organisation hat ihre Fair-Use-Grenzwerte überschritten" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Eine Organisation nähert sich ihren Fair-Use-Grenzwerten" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "API-Token" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "Die API-Nutzung nähert sich den Fair-Use-Grenzwerten" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "App-Version" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Ihre Signatur wird angewendet" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Annäherung an das Fair-Use-Limit" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "Sie nähern sich den Grenzen Ihres Tarifs" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "Abbrechen" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Dokument stornieren" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Dokumente stornieren" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Dokumente stornieren" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Storniert" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "Dokument genehmigt" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Dokument storniert" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Dokument storniert" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "Dokument umbenannt" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Dokument erneut gesendet" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "Dokument hochgeladen" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "Die Dokumentnutzung nähert sich den Fair-Use-Grenzwerten" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "Dokumente und Ressourcen im Zusammenhang mit diesem Umschlag." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Dokumente storniert" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "Dokumente gelöscht" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Dokumente teilweise storniert" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "E-Mail-Transporte" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "Die E-Mail-Nutzung nähert sich den Fair-Use-Grenzwerten" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "Wenn Sie den Bestätigungslink nicht in Ihrem Posteingang finden, könne #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Wenn Sie voraussichtlich höhere Limits benötigen, kontaktieren Sie bitte den Support unter {SUPPORT_EMAIL}, und wir werden Ihr Konto prüfen." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "Kein Unterschriftsfeld gefunden" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "Keine Signatur-Anmeldedaten verfügbar" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "Nicht unterstützt" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Nichts storniert" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "Nur PDF-Dateien sind erlaubt" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Nur ausstehende Dokumente, zu deren Verwaltung Sie berechtigt sind, werden storniert." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "Bitte kontaktieren Sie den Webseiteninhaber für weitere Unterstützung. #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Bitte schließen Sie diesen Tab nicht. Der Signaturanbieter finalisiert Ihre Signatur." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "Grund" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Grund (optional)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "Eine erneute Authentifizierung ist erforderlich, um dieses Feld zu unter #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Erneut autorisieren und erneut versuchen" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "Der Empfänger hat das Dokument genehmigt" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "Empfänger wurde beim Signaturanbieter authentifiziert" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "Empfänger hat die Remote-Signatur autorisiert" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "Empfänger-ID:" msgid "Recipient rejected the document" msgstr "Der Empfänger hat das Dokument abgelehnt" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "Der Empfänger hat das Dokument extern abgelehnt" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Empfänger entfernt" @@ -8791,7 +8795,7 @@ msgstr "Der Empfänger hat ein 2FA-Token für das Dokument angefordert" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "Empfänger hat eine Remote-Signatur angefordert" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "Der Empfänger hat das Dokument angesehen" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "Die Remote-Signatur des Empfängers wurde angewendet" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "Die Authentifizierung des Unterzeichnungsanbieters des Empfängers ist fehlgeschlagen" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "Empfänger können das Dokument nach dem Versand unterschreiben" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "Empfänger werden darüber benachrichtigt, dass das Dokument storniert wurde" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "Unterzeichnung" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "Der Signaturalgorithmus wird nicht unterstützt" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "Unterzeichnungszertifikat" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "Das Signaturzertifikat ist ungültig" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "Signaturfrist abgelaufen" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "Unterzeichnung fehlgeschlagen" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "Etwas ist schief gelaufen" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Beim Anwenden Ihrer Signatur ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "Etwas ist schiefgelaufen beim Laden Ihrer Passkeys." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Beim Vorbereiten der Fernsignatur ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "Vorlage umbenannt" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Vorlage erneut gesendet" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "Das Dokumenteigentum wurde im Namen von {1} an {0} delegiert" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "Der Signaturvorgang für das Dokument wird gestoppt" #: apps/remix/app/utils/toast-error-messages.ts 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." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "Das Dokument wurde extern von {onBehalfOf} im Auftrag von {user} abgelehnt" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "Das Dokument wurde extern von {onBehalfOf} im Auftrag des Empfängers abgelehnt" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "Das Dokument wurde extern im Auftrag von {user} abgelehnt" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "Das Dokument wurde extern im Auftrag des Empfängers abgelehnt" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "Das Dokument wird von Ihrem Konto verborgen werden" @@ -11103,7 +11124,7 @@ msgstr "Das Dokument wird sofort an die Empfänger gesendet, wenn dies angehakt #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Das Dokument bleibt in Ihrem Dashboard und wird als „Storniert“ markiert" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "Der Name des Dokuments" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Die Dokumente bleiben in Ihrem Dashboard und werden als „Storniert“ markiert" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "Der Signierlink wurde in die Zwischenablage kopiert." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "Der Unterzeichnungsanbieter hat nicht rechtzeitig geantwortet. Bitte versuchen Sie es erneut." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "Es gibt derzeit keine aktiven Entwürfe. Sie können ein Dokument hochla #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "Es gibt keine stornierten Dokumente. Dokumente, die Sie stornieren, bleiben hier als Nachweis dafür, dass sie verteilt wurden." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "Dieses Dokument kann nicht geändert werden" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Dieses Dokument konnte derzeit nicht storniert werden. Bitte versuchen Sie es erneut." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "Dieses Dokument wurde bereits an diesen Empfänger gesendet. Sie können #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Dieses Dokument wurde storniert" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "Dieser Link ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihr Te #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Dieses Mitglied wird von einer Gruppe geerbt und kann nicht direkt aus dem Team entfernt werden." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "Anmeldung nicht möglich" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "Der Signaturvorgang kann nicht gestartet werden" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "Sie haben das Dokument genehmigt" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "Sie sind dabei, <0>\"{title}\" zu stornieren" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "Sie sind nicht berechtigt, die Zwei-Faktor-Authentifizierung für diesen #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "Sie haben sich beim Unterzeichnungsanbieter authentifiziert" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "Sie haben die Fernsignatur autorisiert" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "Sie können das Dokument und seinen Status einsehen, indem Sie auf die S #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "Sie haben das Dokument storniert" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "Sie können ein Teammitglied, das eine höhere Rolle als Sie hat, nicht #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "Sie können kein Mitglied entfernen, das eine höhere Rolle als Sie selbst hat." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "Sie können keine Mitglieder aus diesem Team entfernen, solange die Funktion zum Vererben von Mitgliedern aktiviert ist." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "Sie können den Organisationsinhaber nicht aus dem Team entfernen." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "Sie haben ein 2FA-Token für das Dokument angefordert" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "Sie haben eine Fernsignatur angefordert" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "Dein Dokument wurde von einem Administrator gelöscht!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Ihr Dokument wurde erfolgreich erneut gesendet." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "Ihre Organisation hat die Fair-Use-Grenze Ihres Tarifs erreicht. Bitte k #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "Ihre Organisation nähert sich einem Fair-Use-Limit." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "Ihre Organisation nähert sich einem Fair-Use-Limit. Wenn Sie höhere Limits benötigen, kontaktieren Sie bitte den <0>Support, um die Limits Ihres Tarifs zu überprüfen." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "Deine Organisation erzeugt E-Mails schneller als gewöhnlich, daher werd #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "Ihre Organisation nähert sich den Fair-Use-Limits für das Erstellen von Dokumenten in Ihrem aktuellen Tarif. Sobald das Limit erreicht ist, wird neue Dokumentenaktivität vorübergehend pausiert." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "Ihre Organisation nähert sich den Fair-Use-Limits für API-Anfragen in Ihrem aktuellen Tarif. Sobald das Limit erreicht ist, wird neue API-Aktivität vorübergehend pausiert." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "Ihre Organisation nähert sich den Fair-Use-Limits für das Versenden von E-Mails in Ihrem aktuellen Tarif. Sobald das Limit erreicht ist, wird neue E-Mail-Aktivität vorübergehend pausiert." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "Ihre Wiederherstellungscodes sind unten aufgeführt. Bitte bewahren Sie #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "Ihre Fernsignatur wurde angewendet" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "Ihre Unterzeichnungsautorisierung ist abgelaufen, bevor die Signatur angewendet werden konnte. Bitte autorisieren Sie erneut, um es noch einmal zu versuchen." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Ihr Signaturzertifikat ist ungültig, abgelaufen oder es fehlt ein erforderlicher Schlüssel. Wenden Sie sich an Ihren Administrator oder Unterzeichnungsanbieter, um Unterstützung zu erhalten." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "Ihre Authentifizierung beim Unterzeichnungsanbieter ist fehlgeschlagen" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Ihr Unterzeichnungsanbieter gibt keinen Signaturalgorithmus an, der von diesem Dokument akzeptiert wird. Wenden Sie sich an Ihren Administrator oder Unterzeichnungsanbieter, um Unterstützung zu erhalten." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Ihr Unterzeichnungsanbieter hat für dieses Konto keine verwendbaren Anmeldedaten zurückgegeben. Wenden Sie sich an Ihren Administrator oder Unterzeichnungsanbieter, um Unterstützung zu erhalten." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "Ihre Vorlage wurde erfolgreich erstellt" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Ihre Vorlage wurde erfolgreich erneut gesendet." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "Ihr Verifizierungscode:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/translations/es/web.po b/packages/lib/translations/es/web.po index e12fdb6aa..4eef75f10 100644 --- a/packages/lib/translations/es/web.po +++ b/packages/lib/translations/es/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\" en nombre de \"Team Name\" te ha invitado a firma #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" se ha cancelado correctamente" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, one {Se descartó # regla CSS durante la sanitización.} oth #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {Se canceló # documento.} other {Se cancelaron # documentos.}} {1, plural, one {No se pudo cancelar # documento.} other {No se pudieron cancelar # documentos.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {Se ha cancelado # documento.} other {Se han cancelado # documentos.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, one {Hemos encontrado # destinatario en tu documento.} other #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {Está a punto de cancelar el documento seleccionado.} other {Está a punto de cancelar # documentos.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} aprobó el documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} se autenticó con el proveedor de firma" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} autorizó la firma remota" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} canceló el documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} solicitó un token 2FA para el documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} solicitó una firma remota" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} vio el documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "Se aplicó la firma remota de {user}" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "Falló la autenticación de {user} con el proveedor de firma" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "Agregue un ID externo a la plantilla. Esto se puede usar para identifica #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Añada un motivo opcional para cancelar estos documentos" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Añada un motivo opcional para cancelar este documento" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "Se produjo un error al firmar automáticamente el documento, es posible #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Se produjo un error al cancelar los documentos." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "Ocurrió un error. Por favor intenta de nuevo más tarde." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Una organización ha superado sus límites de uso justo" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Una organización se está acercando a sus límites de uso justo" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "Tokens de API" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "El uso de la API se está acercando a los límites de uso justo" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "Versión de la Aplicación" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Aplicando tu firma" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Límite de uso justo próximo a alcanzarse" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "Estás alcanzando los límites de tu plan" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "Cancelar" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Cancelar documento" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Cancelar documentos" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Cancelar documentos" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Cancelado" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "Documento Aprobado" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Documento cancelado" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Documento cancelado" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "Documento renombrado" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Documento reenviado" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "Documento subido" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "El uso de documentos se está acercando a los límites de uso justo" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "Documentos y recursos relacionados con este sobre." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Documentos cancelados" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "Documentos eliminados" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Documentos cancelados parcialmente" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "Transportes de correo electrónico" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "El uso de correos electrónicos se está acercando a los límites de uso justo" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "Si no encuentras el enlace de confirmación en tu bandeja de entrada, pu #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Si crees que necesitarás límites más altos, contacta con el equipo de soporte en {SUPPORT_EMAIL} y revisaremos tu cuenta." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "No se encontró campo de firma" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "No hay credenciales de firma disponibles" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "No soportado" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Nada cancelado" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "Solo se permiten archivos PDF" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Solo se cancelarán los documentos pendientes que tenga permiso para gestionar." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "Por favor, contacte al propietario del sitio para más asistencia." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Por favor, no cierres esta pestaña. El proveedor de firma está finalizando tu firma." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "Razón" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Motivo (opcional)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "Se requiere reautenticación para firmar este campo" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Volver a autorizar e intentar de nuevo" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "El destinatario aprobó el documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "El destinatario se autenticó con el proveedor de firma" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "El destinatario autorizó la firma remota" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "ID de destinatario:" msgid "Recipient rejected the document" msgstr "El destinatario rechazó el documento" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "El destinatario rechazó el documento externamente" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Destinatario eliminado" @@ -8791,7 +8795,7 @@ msgstr "El destinatario solicitó un token 2FA para el documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "El destinatario solicitó una firma remota" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "El destinatario vio el documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "Se aplicó la firma remota del destinatario" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "Falló la autenticación del proveedor de firma del destinatario" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "Los destinatarios podrán firmar el documento una vez enviado" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "Se notificará a los destinatarios que el documento fue cancelado" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "Firmando" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "El algoritmo de firma no es compatible" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "Certificado de Firma" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "El certificado de firma no es válido" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "Fecha límite de firma vencida" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "La firma ha fallado" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "Algo salió mal" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Se ha producido un error al aplicar tu firma. Vuelve a intentarlo." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "Algo salió mal al cargar tus claves de acceso." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Se ha producido un error al preparar la firma remota. Vuelve a intentarlo." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "Plantilla renombrada" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Plantilla reenviada" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "La propiedad del documento se delegó a {0} en nombre de {1}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "El proceso de firma del documento se detendrá" #: apps/remix/app/utils/toast-error-messages.ts 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." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "El documento fue rechazado externamente por {onBehalfOf} en nombre de {user}" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "El documento fue rechazado externamente por {onBehalfOf} en nombre del destinatario" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "El documento fue rechazado externamente en nombre de {user}" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "El documento fue rechazado externamente en nombre del destinatario" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "El documento será ocultado de tu cuenta" @@ -11103,7 +11124,7 @@ msgstr "El documento se enviará inmediatamente a los destinatarios si esto est #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "El documento permanecerá en su panel marcado como Cancelado" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "El nombre del documento" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Los documentos permanecerán en su panel marcados como Cancelados" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "El enlace de firma ha sido copiado a tu portapapeles." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "El proveedor de firma no respondió a tiempo. Vuelve a intentarlo." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "No hay borradores activos en este momento. Puedes subir un documento par #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "No hay documentos cancelados. Los documentos que cancele permanecerán aquí como registro de que fueron distribuidos." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "Este documento no se puede cambiar" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Este documento no se pudo cancelar en este momento. Por favor, inténtelo de nuevo." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "Este documento ya ha sido enviado a este destinatario. Ya no puede edita #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Este documento ha sido cancelado" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "Este enlace es inválido o ha expirado. Por favor, contacta a tu equipo #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Este miembro se hereda de un grupo y no se puede eliminar directamente del equipo." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "No se pudo iniciar sesión" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "No se puede iniciar el flujo de firma" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "Has aprobado el documento" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "Está a punto de cancelar <0>\"{title}\"" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "No está autorizado para restablecer la autenticación de dos factores p #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "Te has autenticado con el proveedor de firma" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "Has autorizado la firma remota" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "Puede ver el documento y su estado haciendo clic en el botón de abajo." #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "Ha cancelado el documento" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "No puedes modificar a un miembro del equipo que tenga un rol más alto q #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "No puedes eliminar a un miembro con un rol superior al tuyo." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "No puedes eliminar miembros de este equipo mientras la función de heredar miembros esté activada." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "No puedes eliminar al propietario de la organización del equipo." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "Has solicitado un token 2FA para el documento" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "Has solicitado una firma remota" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "¡Tu documento ha sido eliminado por un administrador!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Tu documento se ha reenviado correctamente." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "Tu organización ha alcanzado el límite de uso razonable de su plan. Po #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "Tu organización está acercándose a un límite de uso justo" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "Tu organización está acercándose a un límite de uso justo. Si crees que necesitarás límites más altos, ponte en contacto con el <0>soporte para revisar los límites de tu plan." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "Tu organización está generando correos electrónicos más rápido de l #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "Tu organización está acercándose a sus límites de uso justo para crear documentos en tu plan actual. Una vez que se alcance el límite, la actividad de nuevos documentos se pausará temporalmente." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "Tu organización está acercándose a sus límites de uso justo para realizar solicitudes de API en tu plan actual. Una vez que se alcance el límite, la nueva actividad de la API se pausará temporalmente." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "Tu organización está acercándose a sus límites de uso justo para enviar correos electrónicos en tu plan actual. Una vez que se alcance el límite, la nueva actividad de correo electrónico se pausará temporalmente." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "Tus códigos de recuperación se enumeran a continuación. Por favor, gu #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "Tu firma remota se ha aplicado" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "Tu autorización de firma caducó antes de que se pudiera aplicar la firma. Vuelve a autorizar para reintentar." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Tu certificado de firma no es válido, ha caducado o le falta una clave obligatoria. Ponte en contacto con tu administrador o con tu proveedor de firma para obtener ayuda." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "Falló tu autenticación con el proveedor de firma" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Tu proveedor de firma no publica un algoritmo de firma que este documento acepte. Ponte en contacto con tu administrador o con tu proveedor de firma para obtener ayuda." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Tu proveedor de firma no devolvió credenciales utilizables para esta cuenta. Ponte en contacto con tu administrador o con tu proveedor de firma para obtener ayuda." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "Tu plantilla se ha creado exitosamente" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Tu plantilla se ha reenviado correctamente." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "Su código de verificación:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "su-dominio.com otro-dominio.com" + diff --git a/packages/lib/translations/fr/web.po b/packages/lib/translations/fr/web.po index 41d0f6060..1305373bc 100644 --- a/packages/lib/translations/fr/web.po +++ b/packages/lib/translations/fr/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\" représentant \"Team Name\" vous a invité à sig #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" a été annulé avec succès." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, one {# règle CSS a été supprimée lors de la sécurisatio #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# document annulé.} other {# documents annulés.}} {1, plural, one {# document n’a pas pu être annulé.} other {# documents n’ont pas pu être annulés.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# document a été annulé.} other {# documents ont été annulés.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, one {Nous avons trouvé # destinataire dans votre document.} #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {Vous êtes sur le point d’annuler le document sélectionné.} other {Vous êtes sur le point d’annuler # documents.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} a approuvé le document" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} s’est authentifié auprès du fournisseur de signature" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} a autorisé la signature à distance" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} a annulé le document" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} a demandé un jeton 2FA pour le document" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} a demandé une signature à distance" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} a consulté le document" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "La signature à distance de {user} a été appliquée" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "L’authentification de {user} auprès du fournisseur de signature a échoué" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "Ajouter un ID externe au modèle. Cela peut être utilisé pour l'identi #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Ajoutez une raison facultative pour l’annulation de ces documents" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Ajoutez une raison facultative pour l’annulation de ce document" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "Une erreur est survenue lors de la signature automatique du document, ce #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Une erreur s’est produite lors de l’annulation des documents." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "Une erreur s'est produite. Veuillez réessayer plus tard." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Une organisation a dépassé ses limites d’utilisation équitable." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Une organisation approche de ses limites d’utilisation équitable." #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "Tokens API" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "L’utilisation de l’API approche des limites d’utilisation équitable." #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "Version de l'application" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Application de votre signature" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Limite d’utilisation équitable bientôt atteinte" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "Vous approchez des limites de votre offre" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "Annuler" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Annuler le document" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Annuler les documents" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Annuler les documents" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Annulé" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "Document Approuvé" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Document annulé" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Document annulé" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "Document renommé" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Document renvoyé" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "Document importé" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "L’utilisation des documents approche des limites d’utilisation équitable." #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "Documents et ressources liés à cette enveloppe." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Documents annulés" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "Documents supprimés" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Documents partiellement annulés" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "Transports d’email" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "L’utilisation des e-mails approche des limites d’utilisation équitable." #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "Si vous ne trouvez pas le lien de confirmation dans votre boîte de réc #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Si vous prévoyez d’avoir besoin de limites plus élevées, veuillez contacter l’assistance à {SUPPORT_EMAIL} et nous examinerons votre compte." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "Aucun champ de signature trouvé" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "Aucun identifiant de signature disponible" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "Non pris en charge" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Aucune annulation" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "Seuls les fichiers PDF sont autorisés" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Seuls les documents en attente que vous êtes autorisé à gérer seront annulés." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "Veuillez contacter le propriétaire du site pour obtenir de l'aide suppl #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Veuillez ne pas fermer cet onglet. Le fournisseur de signature est en train de finaliser votre signature." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "Raison" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Raison (facultatif)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "Une nouvelle authentification est requise pour signer ce champ" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Réautoriser et réessayer" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "Le destinataire a approuvé le document" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "Le destinataire s’est authentifié auprès du fournisseur de signature" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "Le destinataire a autorisé la signature à distance" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "ID du destinataire :" msgid "Recipient rejected the document" msgstr "Le destinataire a rejeté le document" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "Le destinataire a rejeté le document de manière externe" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Destinataire supprimé" @@ -8791,7 +8795,7 @@ msgstr "Le destinataire a demandé un jeton 2FA pour le document" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "Le destinataire a demandé une signature à distance" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "Le destinataire a consulté le document" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "La signature à distance du destinataire a été appliquée" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "L’authentification du fournisseur de signature du destinataire a échoué" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "Les destinataires pourront signer le document une fois envoyé" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "Les destinataires seront informés que le document a été annulé" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "En train de signer" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "L’algorithme de signature n’est pas pris en charge" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "Certificat de signature" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "Le certificat de signature n’est pas valide" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "Délai de signature expiré" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "La signature a échoué" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "Quelque chose a mal tourné" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Une erreur s’est produite lors de l’application de votre signature. Veuillez réessayer." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "Quelque chose a mal tourné lors du chargement de vos clés d'authentifi #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Une erreur s’est produite lors de la préparation de la signature à distance. Veuillez réessayer." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "Modèle renommé" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Modèle renvoyé" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "La propriété du document a été déléguée à {0} au nom de {1}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "Le processus de signature du document sera arrêté" #: apps/remix/app/utils/toast-error-messages.ts 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." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "Le document a été rejeté de manière externe par {onBehalfOf} au nom de {user}" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "Le document a été rejeté de manière externe par {onBehalfOf} au nom du destinataire" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "Le document a été rejeté de manière externe au nom de {user}" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "Le document a été rejeté de manière externe au nom du destinataire" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "Le document sera caché de votre compte" @@ -11103,7 +11124,7 @@ msgstr "Le document sera immédiatement envoyé aux destinataires si cela est co #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Le document restera dans votre tableau de bord avec le statut Annulé" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "Le nom du document" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Les documents resteront dans votre tableau de bord avec le statut Annulé" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "Le lien de signature a été copié dans votre presse-papiers." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "Le fournisseur de signature n’a pas répondu à temps. Veuillez réessayer." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "Il n'y a pas de brouillons actifs pour le moment. Vous pouvez importer u #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "Il n’y a aucun document annulé. Les documents que vous annulez resteront ici comme preuve de leur distribution." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "Ce document ne peut pas être modifié" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Ce document n’a pas pu être annulé pour le moment. Veuillez réessayer." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "Ce document a déjà été envoyé à ce destinataire. Vous ne pouvez pl #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Ce document a été annulé" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "Ce lien est invalide ou a expiré. Veuillez contacter votre équipe pour #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Ce membre est hérité d’un groupe et ne peut pas être retiré directement de l’équipe." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "Impossible de se connecter" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "Impossible de démarrer le flux de signature" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "Vous avez approuvé le document" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "Vous êtes sur le point d’annuler <0>\"{title}\"" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "Vous n'êtes pas autorisé à réinitialiser l'authentification à deux #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "Vous vous êtes authentifié auprès du fournisseur de signature" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "Vous avez autorisé la signature à distance" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "Vous pouvez voir le document et son statut en cliquant sur le bouton ci- #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "Vous avez annulé le document" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "Vous ne pouvez pas modifier un membre de l'équipe qui a un rôle plus #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "Vous ne pouvez pas retirer un membre ayant un rôle supérieur au vôtre." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "Vous ne pouvez pas retirer des membres de cette équipe tant que la fonctionnalité d’héritage des membres est activée." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "Vous ne pouvez pas retirer le propriétaire de l’organisation de l’équipe." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "Vous avez demandé un jeton 2FA pour le document" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "Vous avez demandé une signature à distance" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "Votre document a été supprimé par un administrateur !" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Votre document a été renvoyé avec succès." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "Votre organisation a atteint la limite d’utilisation équitable de son #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "Votre organisation approche de sa limite d’utilisation équitable." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "Votre organisation approche de sa limite d’utilisation équitable. Si vous pensez avoir besoin de limites plus élevées, veuillez contacter le <0>support pour revoir les limites de votre offre." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "Votre organisation génère des e-mails plus rapidement que la normale, #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "Votre organisation approche de ses limites d’utilisation équitable pour la création de documents avec votre offre actuelle. Une fois la limite atteinte, toute nouvelle activité de création de documents sera temporairement suspendue." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "Votre organisation approche de ses limites d’utilisation équitable pour les requêtes API avec votre offre actuelle. Une fois la limite atteinte, toute nouvelle activité API sera temporairement suspendue." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "Votre organisation approche de ses limites d’utilisation équitable pour l’envoi d’e-mails avec votre offre actuelle. Une fois la limite atteinte, toute nouvelle activité d’e-mail sera temporairement suspendue." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "Vos codes de récupération sont listés ci-dessous. Veuillez les conser #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "Votre signature à distance a été appliquée" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "Votre autorisation de signature a expiré avant que la signature ne puisse être appliquée. Veuillez renouveler votre autorisation pour réessayer." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Votre certificat de signature est invalide, expiré ou ne contient pas une clé requise. Contactez votre administrateur ou votre fournisseur de signature pour obtenir de l’aide." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "L’authentification auprès de votre fournisseur de signature a échoué" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Votre fournisseur de signature n’annonce aucun algorithme de signature accepté par ce document. Contactez votre administrateur ou votre fournisseur de signature pour obtenir de l’aide." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Votre fournisseur de signature n’a renvoyé aucun identifiant utilisable pour ce compte. Contactez votre administrateur ou votre fournisseur de signature pour obtenir de l’aide." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "Votre modèle a été créé avec succès" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Votre modèle a été renvoyé avec succès." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "Votre code de vérification :" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/translations/it/web.po b/packages/lib/translations/it/web.po index 67683d618..d59511b72 100644 --- a/packages/lib/translations/it/web.po +++ b/packages/lib/translations/it/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: it\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Italian\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\" per conto di \"Team Name\" ti ha invitato a firma #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" è stato annullato correttamente" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, one {# regola CSS è stata rimossa durante la sanitizzazione #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# documento annullato.} other {# documenti annullati.}} {1, plural, one {# documento non è potuto essere annullato.} other {# documenti non sono potuti essere annullati.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# documento è stato annullato.} other {# documenti sono stati annullati.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, one {Abbiamo trovato # destinatario nel tuo documento.} othe #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {Stai per annullare il documento selezionato.} other {Stai per annullare # documenti.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} ha approvato il documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} si è autenticato con il provider di firma" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} ha autorizzato la firma remota" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} ha annullato il documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} ha richiesto un token 2FA per il documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} ha richiesto una firma remota" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} ha visualizzato il documento" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "La firma remota di {user} è stata applicata" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "L’autenticazione del provider di firma di {user} non è andata a buon fine" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "Aggiungi un ID esterno al modello. Questo può essere usato per identifi #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Aggiungi un motivo facoltativo per l’annullamento di questi documenti" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Aggiungi un motivo facoltativo per l’annullamento di questo documento" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "Si è verificato un errore durante la firma automatica del documento, al #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Si è verificato un errore durante l’annullamento dei documenti." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "Si è verificato un errore. Per favore riprova più tardi." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Un'organizzazione ha superato i propri limiti di utilizzo equo (fair use)" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Un'organizzazione si sta avvicinando ai propri limiti di utilizzo equo (fair use)" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "Token API" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "L'utilizzo dell'API si sta avvicinando ai limiti di utilizzo equo (fair use)" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "Versione dell'app" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Applicazione della tua firma in corso" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Limite di utilizzo equo (fair use) in avvicinamento" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "Stai per raggiungere i limiti del tuo piano" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "Annulla" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Annulla documento" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Annulla documenti" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Annulla documenti" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Annullato" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "Documento Approvato" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Documento annullato" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Documento annullato" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "Documento rinominato" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Documento reinviato" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "Documento caricato" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "L'utilizzo dei documenti si sta avvicinando ai limiti di utilizzo equo (fair use)" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "Documenti e risorse relative a questa busta." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Documenti annullati" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "Documenti eliminati" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Documenti parzialmente annullati" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "Trasporti email" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "L'utilizzo delle email si sta avvicinando ai limiti di utilizzo equo (fair use)" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "Se non trovi il link di conferma nella tua casella di posta, puoi richie #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Se pensi di aver bisogno di limiti più alti, contatta l'assistenza all'indirizzo {SUPPORT_EMAIL} e verificheremo il tuo account." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "Nessun campo di firma trovato" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "Nessuna credenziale di firma disponibile" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "Non supportato" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Nessun annullamento effettuato" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "Sono consentiti solo file PDF" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Verranno annullati solo i documenti in sospeso per i quali hai l’autorizzazione alla gestione." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "Si prega di contattare il proprietario del sito per ulteriori assistenza #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Non chiudere questa scheda. Il provider di firma sta finalizzando la tua firma." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "Motivo" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Motivo (facoltativo)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "È richiesta una riautenticazione per firmare questo campo" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Autorizza nuovamente e riprova" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "Il destinatario ha approvato il documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "Il destinatario si è autenticato con il provider di firma" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "Il destinatario ha autorizzato la firma remota" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "ID destinatario:" msgid "Recipient rejected the document" msgstr "Il destinatario ha rifiutato il documento" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "Il destinatario ha rifiutato il documento esternamente" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Destinatario rimosso" @@ -8791,7 +8795,7 @@ msgstr "Il destinatario ha richiesto un token 2FA per il documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "Il destinatario ha richiesto una firma remota" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "Il destinatario ha visualizzato il documento" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "La firma remota del destinatario è stata applicata" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "L'autenticazione del provider di firma del destinatario non è riuscita" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "I destinatari potranno firmare il documento una volta inviato" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "I destinatari saranno informati che il documento è stato annullato" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "Firma in corso" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "L'algoritmo di firma non è supportato" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "Certificato di Firma" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "Il certificato di firma non è valido" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "Scadenza del termine di firma" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "La firma non è riuscita" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "Qualcosa è andato storto" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Si è verificato un problema durante l'applicazione della firma. Riprova." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "Qualcosa è andato storto durante il caricamento delle tue chiavi di acc #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Si è verificato un problema durante la preparazione della firma remota. Riprova." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "Template rinominato" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Modello reinviato" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "La proprietà del documento è stata delegata a {0} per conto di {1}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "Il processo di firma del documento verrà interrotto" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document was created but could not be sent to recipients." msgstr "Il documento è stato creato ma non è stato possibile inviarlo ai destinatari." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "Il documento è stato rifiutato esternamente da {onBehalfOf} per conto di {user}" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "Il documento è stato rifiutato esternamente da {onBehalfOf} per conto del destinatario" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "Il documento è stato rifiutato esternamente per conto di {user}" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "Il documento è stato rifiutato esternamente per conto del destinatario" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "Il documento verrà nascosto dal tuo account" @@ -11103,7 +11124,7 @@ msgstr "Il documento sarà immediatamente inviato ai destinatari se selezionato. #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Il documento rimarrà nella tua dashboard contrassegnato come Annullato" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "Il nome del documento" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "I documenti rimarranno nella tua dashboard contrassegnati come Annullati" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "Il link di firma è stato copiato negli appunti." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "Il provider di firma non ha risposto in tempo. Riprova." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "Non ci sono bozze attive al momento attuale. Puoi caricare un documento #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "Non ci sono documenti annullati. I documenti che annulli rimarranno qui come traccia del fatto che sono stati distribuiti." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "Questo documento non può essere modificato" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Questo documento non può essere annullato in questo momento. Riprova più tardi." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "Questo documento è già stato inviato a questo destinatario. Non puoi p #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Questo documento è stato annullato" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "Questo link è invalido o è scaduto. Si prega di contattare il tuo team #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Questo membro è ereditato da un gruppo e non può essere rimosso direttamente dal team." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "Impossibile accedere" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "Impossibile avviare il flusso di firma" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "Hai approvato il documento" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "Stai per annullare <0>\"{title}\"" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "Non sei autorizzato a reimpostare l'autenticazione a due fattori per que #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "Ti sei autenticato con il provider di firma" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "Hai autorizzato la firma remota" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "Puoi visualizzare il documento e il suo stato cliccando sul pulsante qui #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "Hai annullato il documento" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "Non puoi modificare un membro del team che ha un ruolo superiore al tuo. #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "Non puoi rimuovere un membro con un ruolo più alto del tuo." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "Non puoi rimuovere membri da questo team mentre la funzionalità di ereditarietà dei membri è abilitata." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "Non puoi rimuovere il proprietario dell’organizzazione dal team." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "Hai richiesto un token 2FA per il documento" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "Hai richiesto una firma remota" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "Il tuo documento è stato eliminato da un amministratore!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Il tuo documento è stato reinviato correttamente." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "La tua organizzazione ha raggiunto il limite di utilizzo corretto (fair #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "La tua organizzazione si sta avvicinando al limite di utilizzo corretto (fair use)" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "La tua organizzazione si sta avvicinando al limite di utilizzo corretto (fair use). Se prevedi di aver bisogno di limiti più elevati, contatta il <0>supporto per rivedere i limiti del tuo piano." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "La tua organizzazione sta generando email più velocemente del normale, #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "La tua organizzazione si sta avvicinando ai limiti di utilizzo corretto (fair use) per la creazione di documenti previsti dal tuo piano attuale. Una volta raggiunto il limite, la nuova attività sui documenti verrà temporaneamente sospesa." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "La tua organizzazione si sta avvicinando ai limiti di utilizzo corretto (fair use) per le richieste API previsti dal tuo piano attuale. Una volta raggiunto il limite, la nuova attività API verrà temporaneamente sospesa." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "La tua organizzazione si sta avvicinando ai limiti di utilizzo corretto (fair use) per l’invio di email previsti dal tuo piano attuale. Una volta raggiunto il limite, la nuova attività email verrà temporaneamente sospesa." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "I tuoi codici di recupero sono elencati di seguito. Si prega di conserva #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "La tua firma remota è stata applicata" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "La tua autorizzazione alla firma è scaduta prima che la firma potesse essere applicata. Autorizza di nuovo per riprovare." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Il tuo certificato di firma non è valido, è scaduto o manca di una chiave richiesta. Contatta l'amministratore o il provider di firma per assistenza." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "La tua autenticazione presso il provider di firma non è riuscita" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Il tuo provider di firma non dichiara alcun algoritmo di firma accettato da questo documento. Contatta l'amministratore o il provider di firma per assistenza." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Il tuo provider di firma non ha restituito credenziali utilizzabili per questo account. Contatta l'amministratore o il provider di firma per assistenza." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "Il tuo modello è stato creato con successo" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Il tuo modello è stato reinviato correttamente." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "Il tuo codice di verifica:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "tuo-dominio.com altro-dominio.com" + diff --git a/packages/lib/translations/ja/web.po b/packages/lib/translations/ja/web.po index 7d4532611..2c710627f 100644 --- a/packages/lib/translations/ja/web.po +++ b/packages/lib/translations/ja/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: ja\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -51,7 +51,7 @@ msgstr "「Team Name」を代表して「{placeholderEmail}」が「example docu #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "「{title}」は正常にキャンセルされました" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, other {# 個の CSS ルールがサニタイズ処理中に #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, other {# 件の文書がキャンセルされました。}} {1, plural, other {# 件の文書をキャンセルできませんでした。}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, other {# 件の文書がキャンセルされました。}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, other {ドキュメント内で # 人の受信者が見つ #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, other {選択した文書をキャンセルしようとしています。}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} が文書を承認しました。" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} は署名プロバイダーで認証しました" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} はリモート署名を承認しました" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} が文書をキャンセルしました" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} が文書用の2要素認証トークンをリクエストしま #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} はリモート署名を要求しました" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} が文書を閲覧しました" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "{user} のリモート署名が適用されました" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "{user} の署名プロバイダーでの認証に失敗しました" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "テンプレートに外部 ID を追加します。これは外部シ #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "これらの文書をキャンセルする理由を任意で入力してください" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "この文書をキャンセルする理由を任意で入力してください" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "ドキュメントの自動署名中にエラーが発生しました。 #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "文書のキャンセル中にエラーが発生しました。" #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "エラーが発生しました。後でもう一度お試しください #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "組織がフェアユースの上限を超えました" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "組織がフェアユースの上限に近づいています" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "API トークン" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "API の使用量がフェアユースの上限に近づいています" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "アプリのバージョン" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "お客様の署名を適用しています" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "フェアユースの上限に近づいています" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "ご利用プランの上限に近づいています" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "キャンセル" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "文書を取り消す" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "文書を取り消す" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "文書を取り消す" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "取り消し済み" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "文書が承認されました" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "文書は取り消されました" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "文書は取り消されました" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "ドキュメント名を変更しました" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "ドキュメントを再送信しました" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "文書をアップロードしました" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "ドキュメントの使用量がフェアユースの上限に近づいています" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "この封筒に関連する文書およびリソースです。" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "文書は取り消されました" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "ドキュメントを削除しました" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "文書は一部のみ取り消されました" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "メールトランスポート一覧" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "メールの使用量がフェアユースの上限に近づいています" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "受信トレイに確認リンクが見当たらない場合は、下か #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "より高い上限が必要になりそうな場合は、{SUPPORT_EMAIL} までサポートにご連絡ください。アカウントを確認させていただきます。" #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "署名フィールドが見つかりません" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "利用可能な署名資格情報がありません" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "サポートされていません" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "取り消された文書はありません" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "PDFファイルのみアップロードできます" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "あなたに管理権限がある保留中の文書のみが取り消されます。" #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "詳しくはサイトのオーナーにお問い合わせください。 #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "このタブを閉じないでください。署名プロバイダーが署名の最終処理を行っています。" #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "理由" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "理由(任意)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "このフィールドへの署名には再認証が必要です" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "再認証して再試行" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "受信者が文書を承認しました" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "受信者は署名プロバイダーで認証しました" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "受信者はリモート署名を承認しました" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "受信者ID:" msgid "Recipient rejected the document" msgstr "受信者が文書を却下しました" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "受信者はこの文書を外部で却下しました" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "受信者が削除されました" @@ -8791,7 +8795,7 @@ msgstr "受信者が文書用の2要素認証トークンをリクエストし #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "受信者はリモート署名を要求しました" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "受信者が文書を閲覧しました" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "受信者のリモート署名が適用されました" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "受信者の署名プロバイダーでの認証に失敗しました" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "送信後、受信者は文書に署名できるようになります" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "受信者には、その文書が取り消されたことが通知されます" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "署名中" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "署名アルゴリズムはサポートされていません" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "署名証明書" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "署名証明書が無効です" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "署名期限が切れました" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "署名に失敗しました" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "問題が発生しました" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "署名の適用中に問題が発生しました。もう一度お試しください。" #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "パスキーの読み込み中に問題が発生しました。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "リモート署名の準備中に問題が発生しました。もう一度お試しください。" #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "テンプレート名を変更しました" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "テンプレートを再送信しました" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "文書の所有権は {1} を代表して {0} に委任されました" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "文書の署名プロセスは停止されます" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document was created but could not be sent to recipients." msgstr "文書は作成されましたが、受信者に送信できませんでした。" +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "この文書は、{user} に代わって {onBehalfOf} により外部で却下されました" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "この文書は、受信者に代わって {onBehalfOf} により外部で却下されました" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "この文書は、{user} に代わって外部で却下されました" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "この文書は、受信者に代わって外部で却下されました" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "文書はアカウントから非表示になります" @@ -11103,7 +11124,7 @@ msgstr "このチェックをオンにすると、文書はすぐに受信者へ #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "その文書はダッシュボード上で「取り消し済み」と表示されたまま残ります" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "ドキュメント名" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "それらの文書はダッシュボード上で「取り消し済み」と表示されたまま残ります" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "署名用リンクをクリップボードにコピーしました。" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "署名プロバイダーが時間内に応答しませんでした。もう一度お試しください。" #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "現在、有効な下書きはありません。文書をアップロー #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "取り消された文書はありません。あなたが取り消した文書は、配布された記録としてここに残ります。" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "このドキュメントは変更できません" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "この文書は現在取り消すことができません。もう一度お試しください。" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "このドキュメントはすでにこの受信者に送信されてい #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "この文書は取り消されています" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "このリンクは無効か有効期限が切れています。チーム #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "このメンバーはグループから継承されており、チームから直接削除することはできません。" #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "サインインできませんでした" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "署名フローを開始できませんでした" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "文書を承認しました" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "<0>「{title}」 を取り消そうとしています" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "このユーザーの二要素認証をリセットする権限があり #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "署名プロバイダーで認証しました" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "リモート署名を承認しました" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "下のボタンをクリックすると、ドキュメントとそのス #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "あなたはその文書を取り消しました" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "自分より権限の高いチームメンバーは変更できません #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "自分より上位のロールを持つメンバーは削除できません。" #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "メンバー継承機能が有効になっている間は、このチームからメンバーを削除できません。" #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "組織オーナーをチームから削除することはできません。" #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "文書用の2要素認証トークンをリクエストしました" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "リモート署名をリクエストしました" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "管理者によってドキュメントが削除されました。" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "ドキュメントは正常に再送信されました。" #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "ご利用の組織はプランのフェアユース上限に達しまし #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "ご利用の組織は、公正利用上限に近づいています。" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "ご利用の組織は、公正利用上限に近づいています。より高い上限が必要になりそうな場合は、プランの上限を確認するために<0>サポートまでお問い合わせください。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "お客様の組織で通常よりも速いペースでメールが送信 #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "現在のプランで作成できるドキュメント数の公正利用上限に、組織の利用状況が近づいています。上限に達すると、新しいドキュメントに関するアクティビティは一時的に停止されます。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "現在のプランで行える API リクエスト数の公正利用上限に、組織の利用状況が近づいています。上限に達すると、新しい API アクティビティは一時的に停止されます。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "現在のプランで送信できるメール数の公正利用上限に、組織の利用状況が近づいています。上限に達すると、新しいメールに関するアクティビティは一時的に停止されます。" #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "リカバリーコードは以下のとおりです。安全な場所に #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "リモート署名が適用されました" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "署名の認可が署名適用前に失効しました。再度認可してからやり直してください。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "署名証明書が無効であるか、有効期限が切れているか、必要な鍵がありません。管理者または署名プロバイダーにお問い合わせください。" #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "署名プロバイダーでの認証に失敗しました" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "ご利用の署名プロバイダーは、この文書で許可されている署名アルゴリズムを提供していません。管理者または署名プロバイダーにお問い合わせください。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "ご利用の署名プロバイダーは、このアカウントで使用できる認証情報を返しませんでした。管理者または署名プロバイダーにお問い合わせください。" #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "テンプレートは正常に作成されました" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "テンプレートは正常に再送信されました。" #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "認証コード:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/translations/ko/web.po b/packages/lib/translations/ko/web.po index 21082fa8b..802fe31f9 100644 --- a/packages/lib/translations/ko/web.po +++ b/packages/lib/translations/ko/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: ko\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Korean\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\"이(가) \"Team Name\"을(를) 대신하여 \"exam #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" 문서가 성공적으로 취소되었습니다." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, other {#개의 CSS 규칙이 정리 과정에서 제거되 #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, other {#개의 문서가 취소되었습니다.}} {1, plural, other {#개의 문서를 취소하지 못했습니다.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, other {#개의 문서가 취소되었습니다.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, other {문서에서 수신자 #명을 발견했습니다.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, other {선택한 #개의 문서를 지금 취소하려고 합니다.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user}님이 문서를 승인했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user}님이 서명 제공자에 인증했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user}님이 원격 서명을 승인했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} 님이 문서를 취소했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user}가 문서에 대한 2FA 토큰을 요청했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user}님이 원격 서명을 요청했습니다." #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user}가 문서를 조회했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "{user}님의 원격 서명이 적용되었습니다." #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "{user}님의 서명 제공자 인증에 실패했습니다." #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "템플릿에 외부 ID를 추가합니다. 외부 시스템에서 식별 #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "이 문서들을 취소하는 선택적인 사유를 입력하세요." #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "이 문서를 취소하는 선택적인 사유를 입력하세요." #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "문서를 자동 서명하는 동안 오류가 발생하여 일부 필 #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "문서를 취소하는 동안 오류가 발생했습니다." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "오류가 발생했습니다. 잠시 후 다시 시도해 주세요." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "조직이 공정 이용 한도를 초과했습니다." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "조직이 공정 이용 한도에 가까워지고 있습니다." #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "API 토큰" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "API 사용량이 공정 이용 한도에 가까워지고 있습니다." #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "앱 버전" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "서명을 적용하는 중입니다." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "공정 이용 한도에 가까워지고 있습니다." #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "요금제 한도에 가까워지고 있습니다." #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "취소" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "문서 취소하기" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "문서 취소하기" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "문서 취소하기" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "취소됨" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "문서 승인됨" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "문서가 취소되었습니다" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "문서가 취소되었습니다" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "문서 이름이 변경되었습니다." #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "문서를 다시 보냈습니다." #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "문서가 업로드되었습니다" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "문서 사용량이 공정 이용 한도에 가까워지고 있습니다." #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "이 봉투와 관련된 문서와 자료입니다." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "문서들이 취소되었습니다" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "문서가 삭제되었습니다" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "일부 문서만 취소되었습니다" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "이메일 전송 방식들" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "이메일 사용량이 공정 이용 한도에 가까워지고 있습니다." #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "받은편지함에서 확인 링크를 찾을 수 없다면 아래에서 #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "더 높은 한도가 필요할 것으로 예상되면 {SUPPORT_EMAIL}로 지원팀에 문의해 주시면 계정을 검토하겠습니다." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "서명 필드를 찾을 수 없습니다." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "사용 가능한 서명 자격 증명이 없습니다." #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "지원되지 않습니다" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "취소된 문서가 없습니다" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "PDF 파일만 허용됩니다" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "관리 권한이 있는 보류 중인 문서만 취소됩니다." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "사이트 소유자에게 추가 지원을 요청해 주세요." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "이 탭을 닫지 마십시오. 서명 제공자가 서명을 마무리하고 있습니다." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "이유" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "사유 (선택 사항)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "이 필드에 서명하려면 재인증이 필요합니다" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "다시 승인하고 재시도" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "수신자가 문서를 승인했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "수신자가 서명 제공자에 인증했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "수신자가 원격 서명을 승인했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "수신자 ID:" msgid "Recipient rejected the document" msgstr "수신자가 문서를 거부했습니다" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "수신자가 문서를 외부에서 거부했습니다." + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "수신자 제거됨" @@ -8791,7 +8795,7 @@ msgstr "수신자가 문서에 대한 2FA 토큰을 요청했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "수신자가 원격 서명을 요청했습니다." #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "수신자가 문서를 조회했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "수신자의 원격 서명이 적용되었습니다." #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "수신자의 서명 제공자 인증에 실패했습니다." #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "수신자는 문서가 전송된 후 서명할 수 있습니다" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "수신자는 문서가 취소되었다는 알림을 받게 됩니다" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "서명 중" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "서명 알고리즘이 지원되지 않습니다." #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "서명 인증서" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "서명 인증서가 유효하지 않습니다." #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "서명 마감 기한 만료" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "서명에 실패했습니다." #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "문제가 발생했습니다" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "전자 서명을 적용하는 중 문제가 발생했습니다. 다시 시도해 주세요." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "패스키를 불러오는 중 문제가 발생했습니다." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "원격 전자 서명을 준비하는 중 문제가 발생했습니다. 다시 시도해 주세요." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "템플릿 이름이 변경되었습니다." #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "템플릿을 다시 보냈습니다." #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "문서 소유권이 {1}를 대신하여 {0}에게 위임되었습니다" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "문서 서명 프로세스가 중단됩니다" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document was created but could not be sent to recipients." msgstr "문서는 생성되었지만 수신자에게 발송되지 않았습니다." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "문서는 {user}를 대신하여 {onBehalfOf}가 외부에서 거부했습니다." + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "문서는 수신자를 대신하여 {onBehalfOf}가 외부에서 거부했습니다." + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "문서는 {user}를 대신하여 외부에서 거부되었습니다." + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "문서는 수신자를 대신하여 외부에서 거부되었습니다." + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "문서는 계정에서 숨겨집니다" @@ -11103,7 +11124,7 @@ msgstr "이 옵션을 선택하면 문서가 즉시 수신자에게 발송됩니 #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "문서는 대시보드에 \"취소됨\"으로 표시된 상태로 유지됩니다" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "문서 이름" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "문서들은 대시보드에 \"취소됨\"으로 표시된 상태로 유지됩니다" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "서명 링크가 클립보드에 복사되었습니다." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "서명 제공자가 제시간에 응답하지 않았습니다. 다시 시도해 주세요." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "현재 활성 초안이 없습니다. 문서를 업로드하여 초안 #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "취소된 문서가 없습니다. 사용자가 취소한 문서는 배포되었다는 기록으로 이곳에 남습니다." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "이 문서는 변경할 수 없습니다." #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "현재 이 문서를 취소할 수 없습니다. 다시 시도해 주세요." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "이 문서는 이미 이 수신자에게 전송되었습니다. 더 이 #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "이 문서는 취소되었습니다" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "이 링크는 유효하지 않거나 만료되었습니다. 팀에 문 #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "이 구성원은 그룹에서 상속된 멤버이므로 팀에서 직접 제거할 수 없습니다." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "로그인할 수 없습니다" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "서명 플로우를 시작할 수 없습니다." #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "문서를 승인했습니다" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "곧 <0>\"{title}\" 문서를 취소하려고 합니다" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "이 사용자의 2단계 인증을 재설정할 권한이 없습니다." #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "서명 제공자를 통해 인증했습니다." #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "원격 전자 서명을 승인했습니다." #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "아래 버튼을 클릭하면 문서와 그 상태를 확인할 수 있 #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "사용자가 문서를 취소했습니다" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "자신보다 높은 역할을 가진 팀 구성원의 설정은 변경 #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "본인보다 높은 역할을 가진 구성원은 제거할 수 없습니다." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "멤버 상속 기능이 활성화된 동안에는 이 팀에서 구성원을 제거할 수 없습니다." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "조직 소유자는 팀에서 제거할 수 없습니다." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "문서에 대한 2FA 토큰을 요청했습니다" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "원격 전자 서명을 요청했습니다." #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "관리자가 귀하의 문서를 삭제했습니다!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "문서가 성공적으로 다시 전송되었습니다." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "귀하의 조직이 현재 요금제의 공정 사용 한도에 도달 #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "귀하의 조직이 공정 사용 한도에 가까워지고 있습니다." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "귀하의 조직이 공정 사용 한도에 가까워지고 있습니다. 더 높은 한도가 필요할 것으로 예상된다면, 요금제 한도 검토를 위해 <0>지원팀에 문의해 주세요." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "귀하의 조직에서 평소보다 빠르게 이메일을 보내고 있 #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "귀하의 조직이 현재 요금제에서 문서를 생성할 수 있는 공정 사용 한도에 가까워지고 있습니다. 한도에 도달하면 새 문서 활동이 일시 중지됩니다." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "귀하의 조직이 현재 요금제에서 API 요청을 수행할 수 있는 공정 사용 한도에 가까워지고 있습니다. 한도에 도달하면 새 API 활동이 일시 중지됩니다." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "귀하의 조직이 현재 요금제에서 이메일을 보낼 수 있는 공정 사용 한도에 가까워지고 있습니다. 한도에 도달하면 새 이메일 활동이 일시 중지됩니다." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "아래에 복구 코드가 표시됩니다. 안전한 곳에 보관해 #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "원격 전자 서명이 적용되었습니다." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "전자 서명을 적용하기 전에 서명 권한이 만료되었습니다. 다시 승인한 후 재시도해 주세요." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "서명 인증서가 유효하지 않거나, 만료되었거나, 필요한 키가 없습니다. 관리자나 서명 제공자에게 문의해 도움을 받으세요." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "서명 제공자 인증에 실패했습니다." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "사용 중인 서명 제공자가 이 문서에서 허용하는 서명 알고리즘을 제공하지 않습니다. 관리자나 서명 제공자에게 문의해 도움을 받으세요." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "사용 중인 서명 제공자가 이 계정에 사용할 수 있는 자격 증명을 반환하지 않았습니다. 관리자나 서명 제공자에게 문의해 도움을 받으세요." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "템플릿이 성공적으로 생성되었습니다." #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "템플릿이 성공적으로 다시 전송되었습니다." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "인증 코드:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/translations/nl/web.po b/packages/lib/translations/nl/web.po index 1b92e6779..49953db32 100644 --- a/packages/lib/translations/nl/web.po +++ b/packages/lib/translations/nl/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: nl\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -51,7 +51,7 @@ msgstr "\"{placeholderEmail}\" heeft namens \"Team Name\" je uitgenodigd om \"ex #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "\"{title}\" is succesvol geannuleerd." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, one {# CSS-regel is verwijderd tijdens het opschonen.} other #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# document geannuleerd.} other {# documenten geannuleerd.}} {1, plural, one {# document kon niet worden geannuleerd.} other {# documenten konden niet worden geannuleerd.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {# document is geannuleerd.} other {# documenten zijn geannuleerd.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, one {We hebben # ontvanger in je document gevonden.} other { #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {U staat op het punt het geselecteerde document te annuleren.} other {U staat op het punt # documenten te annuleren.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} heeft het document goedgekeurd" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} is geverifieerd bij de ondertekenprovider" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} heeft de externe handtekening gemachtigd" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} heeft het document geannuleerd" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} heeft een 2FA-token voor het document aangevraagd" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} heeft een externe handtekening aangevraagd" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} heeft het document bekeken" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "De externe handtekening van {user} is toegepast" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "Authenticatie van de ondertekenprovider voor {user} is mislukte" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "Voeg een externe ID toe aan de sjabloon. Deze kan worden gebruikt voor i #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Voeg een optionele reden toe voor het annuleren van deze documenten" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Voeg een optionele reden toe voor het annuleren van dit document" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "Er is een fout opgetreden tijdens het automatisch ondertekenen van het d #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Er is een fout opgetreden bij het annuleren van de documenten." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "Er is een fout opgetreden. Probeer het later opnieuw." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Een organisatie heeft haar fair-use limieten overschreden" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Een organisatie nadert haar fair-use limieten" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "API‑tokens" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "API-gebruik nadert de fair-use limieten" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "App‑versie" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Uw handtekening wordt toegepast" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Nadering van fair-use limiet" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "U nadert de limieten van uw abonnement" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "Annuleren" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Document annuleren" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Documenten annuleren" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Documenten annuleren" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Geannuleerd" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "Document goedgekeurd" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Document geannuleerd" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Document geannuleerd" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "Document hernoemd" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Document opnieuw verzonden" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "Document geüpload" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "Documentgebruik nadert de fair-use limieten" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "Documenten en bronnen die bij deze envelop horen." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Documenten geannuleerd" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "Documenten verwijderd" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Documenten gedeeltelijk geannuleerd" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "E-mailtransports" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "E-mailgebruik nadert de fair-use limieten" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "Als je de bevestigingslink niet in je inbox vindt, kun je hieronder een #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Als u verwacht hogere limieten nodig te hebben, neem dan contact op met support via {SUPPORT_EMAIL}, dan beoordelen wij uw account." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "Geen handtekeningveld gevonden" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "Geen ondertekeningsgegevens beschikbaar" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "Niet ondersteund" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Niets geannuleerd" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "Alleen PDF-bestanden zijn toegestaan" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Alleen lopende documenten waarvoor u beheermachtigingen heeft, worden geannuleerd." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "Neem contact op met de site-eigenaar voor verdere hulp." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Sluit dit tabblad niet. De ondertekenprovider rondt uw handtekening af." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "Reden" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Reden (optioneel)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "Opnieuw authenticeren is vereist om dit veld te ondertekenen" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Opnieuw machtigen en opnieuw proberen" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "Ontvanger heeft het document goedgekeurd" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "Ontvanger is geverifieerd bij de ondertekenprovider" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "Ontvanger heeft de externe handtekening gemachtigd" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "Ontvanger-ID:" msgid "Recipient rejected the document" msgstr "Ontvanger heeft het document afgewezen" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "De ontvanger heeft het document extern geweigerd" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Ontvanger verwijderd" @@ -8791,7 +8795,7 @@ msgstr "Ontvanger heeft een 2FA-token voor het document aangevraagd" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "Ontvanger heeft een externe handtekening aangevraagd" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "Ontvanger heeft het document bekeken" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "De externe handtekening van de ontvanger is toegepast" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "De verificatie bij de ondertekeningsprovider van de ontvanger is mislukt" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "Ontvangers kunnen het document ondertekenen zodra het is verzonden" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "Ontvangers worden ervan op de hoogte gesteld dat het document is geannuleerd" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "Ondertekenen" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "Het ondertekeningsalgoritme wordt niet ondersteund" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "Ondertekeningscertificaat" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "Het ondertekeningscertificaat is ongeldig" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "Onderteken-deadline verstreken" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "Ondertekenen is mislukt" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "Er is iets misgegaan" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Er is iets misgegaan bij het toepassen van uw handtekening. Probeer het opnieuw." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "Er is iets misgegaan bij het laden van je passkeys." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Er is iets misgegaan bij het voorbereiden van de externe handtekening. Probeer het opnieuw." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "Template hernoemd" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Template opnieuw verzonden" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "De eigendom van het document is gedelegeerd aan {0} namens {1}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "Het ondertekeningsproces voor het document wordt gestopt" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document was created but could not be sent to recipients." msgstr "Het document is aangemaakt, maar kon niet naar ontvangers worden verzonden." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "Het document is extern geweigerd door {onBehalfOf} namens {user}" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "Het document is extern geweigerd door {onBehalfOf} namens de ontvanger" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "Het document is extern geweigerd namens {user}" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "Het document is extern geweigerd namens de ontvanger" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "Het document wordt verborgen in je account" @@ -11103,7 +11124,7 @@ msgstr "Het document wordt direct naar ontvangers verzonden als dit is aangevink #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Het document blijft in uw dashboard staan met de status Geannuleerd" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "De naam van het document" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "De documenten blijven in uw dashboard staan met de status Geannuleerd" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "De ondertekeningslink is naar je klembord gekopieerd." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "De ondertekeningsprovider heeft niet op tijd gereageerd. Probeer het opnieuw." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "Er zijn momenteel geen actieve concepten. Upload een document om een con #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "Er zijn geen geannuleerde documenten. Documenten die u annuleert, blijven hier staan als bewijs dat ze zijn verstuurd." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "Dit document kan niet worden gewijzigd" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Dit document kan op dit moment niet worden geannuleerd. Probeer het later opnieuw." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "Dit document is al naar deze ontvanger verzonden. Je kunt deze ontvanger #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Dit document is geannuleerd" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "Deze link is ongeldig of verlopen. Neem contact op met je team om de ver #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Dit lid is overgenomen uit een groep en kan niet rechtstreeks uit het team worden verwijderd." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "Kan niet inloggen" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "De ondertekeningsflow kan niet worden gestart" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "Je hebt het document goedgekeurd" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "U staat op het punt om <0>\"{title}\" te annuleren" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "U bent niet gemachtigd om de tweefactorauthenticatie voor deze gebruiker #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "U heeft zich geverifieerd bij de ondertekeningsprovider" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "U heeft de externe handtekening geautoriseerd" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "Je kunt het document en de status ervan bekijken door op de onderstaande #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "U hebt het document geannuleerd" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "Je kunt een teamlid met een hogere rol dan jij niet wijzigen." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "Je kunt geen lid verwijderen met een rol die hoger is dan jouw eigen rol." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "Je kunt geen leden uit dit team verwijderen zolang de functie voor het overnemen van leden is ingeschakeld." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "Je kunt de eigenaar van de organisatie niet uit het team verwijderen." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "Je hebt een 2FA-token voor het document aangevraagd" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "U heeft een externe handtekening aangevraagd" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "Je document is verwijderd door een beheerder!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Je document is succesvol opnieuw verzonden." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "Uw organisatie heeft de redelijk-gebruikslimiet van haar abonnement bere #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "Uw organisatie nadert een fair-use limiet." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "Uw organisatie nadert een fair-use limiet. Als u verwacht hogere limieten nodig te hebben, neem dan contact op met <0>support om de limieten van uw abonnement te laten beoordelen." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "Je organisatie genereert e-mails sneller dan normaal, daarom worden somm #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "Uw organisatie nadert de fair-use limieten voor het aanmaken van documenten in uw huidige abonnement. Zodra de limiet is bereikt, wordt nieuwe documentactiviteit tijdelijk onderbroken." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "Uw organisatie nadert de fair-use limieten voor het doen van API-verzoeken in uw huidige abonnement. Zodra de limiet is bereikt, wordt nieuwe API-activiteit tijdelijk onderbroken." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "Uw organisatie nadert de fair-use limieten voor het verzenden van e-mails in uw huidige abonnement. Zodra de limiet is bereikt, wordt nieuwe e-mailactiviteit tijdelijk onderbroken." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "Je herstelcodes staan hieronder. Bewaar ze op een veilige plek." #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "Uw externe handtekening is toegepast" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "Uw ondertekeningsautorisatie is verlopen voordat de handtekening kon worden toegepast. Autoriseer opnieuw om het nogmaals te proberen." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Uw ondertekeningscertificaat is ongeldig, verlopen of mist een vereiste sleutel. Neem contact op met uw beheerder of ondertekeningsprovider voor hulp." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "Uw verificatie bij de ondertekeningsprovider is mislukt" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Uw ondertekeningsprovider meldt geen ondertekeningsalgoritme aan dat door dit document wordt geaccepteerd. Neem contact op met uw beheerder of ondertekeningsprovider voor hulp." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Uw ondertekeningsprovider heeft geen bruikbare referenties voor dit account geretourneerd. Neem contact op met uw beheerder of ondertekeningsprovider voor hulp." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "Je sjabloon is succesvol aangemaakt" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Je template is succesvol opnieuw verzonden." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "Uw verificatiecode:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/translations/pl/web.po b/packages/lib/translations/pl/web.po index 913085073..010ea2157 100644 --- a/packages/lib/translations/pl/web.po +++ b/packages/lib/translations/pl/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: pl\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-23 13: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" @@ -31,7 +31,7 @@ msgstr "Adres „{0}” nie jest prawidłowym adresem e-mail." #. placeholder {1}: timezone || '' #: apps/remix/app/components/general/document-signing/document-signing-date-field.tsx msgid "\"{0}\" will appear on the document as it has a timezone of \"{1}\"." -msgstr "W dokumencie, z racji strefy czasowej „{1}”, pojawi się wartość „{0}”." +msgstr "Ze względu na strefę czasową „{1}”, w dokumencie pojawi się wartość „{0}”." #: packages/email/template-components/template-document-super-delete.tsx msgid "\"{documentName}\" has been deleted by an admin." @@ -51,7 +51,7 @@ msgstr "Użytkownik „{placeholderEmail}” z zespołu „Zespół X” zaprosi #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "Dokument „{title}” został anulowany" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -69,7 +69,7 @@ msgstr "„Zespół X” zaprosił Cię do podpisania dokumentu „ABC”." #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx msgid "(line {0})" -msgstr "(wiersz {0})" +msgstr "(linia {0})" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx #: apps/remix/app/components/general/document-signing/document-signing-form.tsx @@ -104,18 +104,18 @@ msgstr "{0, plural, one {Pozostał # znak} few {Pozostały # znaki} many {Pozost #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx msgid "{0, plural, one {# CSS rule was dropped during sanitisation.} other {# CSS rules were dropped during sanitisation.}}" -msgstr "{0, plural, one {# reguła CSS została odrzucona podczas oczyszczania.} few {# reguły CSS zostały odrzucone podczas oczyszczania.} many {# reguł CSS zostało odrzuconych podczas oczyszczania.} other {# reguły CSS zostały odrzucone podczas oczyszczania.}}" +msgstr "{0, plural, one {# reguła CSS została usunięta podczas oczyszczenia kodu.} few {# reguły CSS zostały usunięte podczas oczyszczenia kodu.} many {# reguł CSS zostało usuniętych podczas oczyszczenia kodu.} other {# reguły CSS zostały usunięte podczas oczyszczenia kodu.}}" #. placeholder {0}: result.cancelledCount #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, one {Anulowano # dokument.} few {Anulowano # dokumenty.} many {Anulowano # dokumentów.} other {Anulowano # dokumentów.}} {1, plural, one {Nie można było anulować # dokumentu.} few {Nie można było anulować # dokumentów.} many {Nie można było anulować # dokumentów.} other {Nie można było anulować # dokumentów.}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, one {Anulowano # dokument.} few {Anulowano # dokumenty.} many {Anulowano # dokumentów.} other {Anulowano # dokumentów.}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -184,12 +184,12 @@ msgstr "{0, plural, one {<0>Masz <1>1 oczekujące zaproszenie} few {<2>M #: apps/remix/app/components/general/document-signing/document-signing-page-view-v2.tsx #: apps/remix/app/components/general/envelope-signing/envelope-signer-header.tsx msgid "{0, plural, one {1 Field Remaining} other {# Fields Remaining}}" -msgstr "{0, plural, one {Pozostało 1 pole} few {Pozostały # pola} many {Pozostało # pól} other {Pozostało # pola}}" +msgstr "{0, plural, one {Pozostało 1 pole} few {Pozostały # pola} many {Pozostało # pól} other {Pozostało # pól}}" #. placeholder {0}: fieldsOnExcessPages.length #: apps/remix/app/components/dialogs/envelope-item-edit-dialog.tsx msgid "{0, plural, one {1 field will be deleted because the new PDF has fewer pages than the current one.} other {# fields will be deleted because the new PDF has fewer pages than the current one.}}" -msgstr "{0, plural, one {1 pole zostanie usunięte, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} few {# pola zostaną usunięte, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} many {# pól zostanie usuniętych, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} other {# pola zostanie usuniętych, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.}}" +msgstr "{0, plural, one {1 pole zostanie usunięte, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} few {# pola zostaną usunięte, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} many {# pól zostanie usuniętych, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.} other {# pól zostanie usuniętych, ponieważ nowy plik PDF ma mniejszą liczbę stron niż obecny.}}" #. placeholder {0}: fields.filter((field) => field.envelopeItemId === doc.id).length #. placeholder {0}: remainingFields.filter((field) => field.envelopeItemId === doc.id).length @@ -264,7 +264,7 @@ msgstr "{0, plural, one {Znaleźliśmy # odbiorcę w dokumencie.} few {Znaleźli #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, one {Zamierzasz anulować dokument.} few {Zamierzasz anulować # dokumenty.} many {Zamierzasz anulować # dokumentów.} other {Zamierzasz anulować # dokumentów.}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -318,7 +318,7 @@ msgstr "Pozostało {0} z {1} dokumentów w tym miesiącu." #. placeholder {2}: envelope.title #: packages/lib/server-only/document/resend-document.ts msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"." -msgstr "Sprawdź i {recipientActionVerb} dokument „{2}” utworzony przez użytkownika {0} z zespołu „{1}”." +msgstr "Sprawdź i {recipientActionVerb} dokument „{2}” utworzony przez użytkownika {0} z zespołu „{1}”." #. placeholder {0}: organisation.name #: apps/remix/app/routes/_authenticated+/o.$orgUrl._index.tsx @@ -379,7 +379,7 @@ msgstr "Użytkownik {inviterName} anulował dokument<0/>„{documentName}”" #. placeholder {0}: _(actionVerb).toLowerCase() #: packages/email/template-components/template-document-invite.tsx msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\"" -msgstr "Sprawdź i {0} dokument „{documentName}}” utworzony przez użytkownika {inviterName}" +msgstr "Sprawdź i {0} dokument „{documentName}” utworzony przez użytkownika {inviterName}" #: packages/email/templates/document-invite.tsx msgid "{inviterName} has invited you to {action} {documentName}" @@ -401,12 +401,12 @@ msgstr "Użytkownik {inviterName} usunął Cię z dokumentu<0/>„{documentName} #. placeholder {1}: envelope.title #: packages/lib/jobs/definitions/emails/send-signing-email.handler.ts msgid "{inviterName} on behalf of \"{0}\" has invited you to {recipientActionVerb} the document \"{1}\"." -msgstr "Sprawdź i {recipientActionVerb} dokument „{1}” utworzony przez użytkownika {inviterName} z zespołu „{0}”." +msgstr "Sprawdź i {recipientActionVerb} dokument „{1}” utworzony przez użytkownika {inviterName} z zespołu „{0}”." #. placeholder {0}: _(actionVerb).toLowerCase() #: packages/email/template-components/template-document-invite.tsx msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {0}<0/>\"{documentName}\"" -msgstr "Sprawdź i {0} dokument<0/>„{documentName}” utworzony przez użytkownika {inviterName} z zespołu „{teamName}”" +msgstr "Sprawdź i {0} dokument<0/>„{documentName}” utworzony przez użytkownika {inviterName} z zespołu „{teamName}”" #: packages/email/templates/document-invite.tsx msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}" @@ -425,7 +425,7 @@ msgstr "{maximumEnvelopeItemCount, plural, one {Nie możesz przesłać więcej n #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "{organisationClaimCount, plural, one {# Organisation claim} other {# Organisation claims}}" -msgstr "{organisationClaimCount, plural, one {# roszczenie organizacji} few {# roszczenia organizacji} many {# roszczeń organizacji} other {# roszczenia organizacji}}" +msgstr "{organisationClaimCount, plural, one {# subskrypcję organizacji} few {# subskrypcje organizacji} many {# subskrypcji organizacji} other {# subskrypcji organizacji}}" #: apps/remix/app/components/general/direct-template/direct-template-page.tsx msgid "{recipientActionVerb} document" @@ -480,7 +480,7 @@ msgstr "Użytkownik {signerName} odrzucił dokument „{documentName}”." #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "{subscriptionClaimCount, plural, one {# Subscription claim} other {# Subscription claims}}" -msgstr "{subscriptionClaimCount, plural, one {# roszczenie subskrypcji} few {# roszczenia subskrypcji} many {# roszczeń subskrypcji} other {# roszczenia subskrypcji}}" +msgstr "{subscriptionClaimCount, plural, one {# subskrypcję} few {# subskrypcje} many {# subskrypcji} other {# subskrypcji}}" #. placeholder {0}: _(actionVerb).toLowerCase() #: packages/email/template-components/template-document-invite.tsx @@ -505,15 +505,15 @@ msgstr "Użytkownik {user} zatwierdził dokument" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "Użytkownik {user} uwierzytelnił się u dostawcy podpisu" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "Użytkownik {user} autoryzował podpis zdalny" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "Użytkownik {user} anulował dokument" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "Użytkownik {user} poprosił o kod weryfikacyjny dla dokumentu" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "Użytkownik {user} poprosił o podpis zdalny" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "Użytkownik {user} wyświetlił dokument" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "Użytkownik {user} złożył podpis zdalny" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "Uwierzytelnienie użytkownika {user} u dostawcy podpisu nie powiodło się" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -687,7 +687,7 @@ msgstr "{visibleRows, plural, one {# wynik} few {# wyniki} many {# wyników} oth #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx msgid "<0>\"{0}\" is no longer available to sign" -msgstr "<0>„{0}” nie jest już dostępny do podpisu" +msgstr "Dokument <0>„{0}” nie jest już dostępny do podpisu" #: packages/email/templates/organisation-account-link-confirmation.tsx msgid "<0>{organisationName} has requested to create an account on your behalf." @@ -1272,7 +1272,7 @@ msgstr "Dodaj dokument" #: packages/ui/primitives/document-flow/add-settings.tsx #: packages/ui/primitives/template-flow/add-template-settings.tsx msgid "Add a URL to redirect the user to once the document is signed" -msgstr "Dodaj adres URL do przekierowania użytkownika po podpisaniu dokumentu" +msgstr "Dodaj adres URL, na który użytkownik zostanie przekierowany po podpisaniu dokumentu" #: apps/remix/app/components/general/document/document-edit-form.tsx #: apps/remix/app/components/general/template/template-edit-form.tsx @@ -1302,11 +1302,11 @@ msgstr "Dodaj identyfikator zewnętrzny szablonu. Może być używany do identyf #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "Dodaj opcjonalny powód anulowania dokumentów" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "Dodaj opcjonalny powód anulowania dokumentu" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1344,7 +1344,7 @@ msgstr "Dodaj domenę" #: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx msgid "Add Email Transport" -msgstr "Dodaj transport e-mailowy" +msgstr "Dodaj dostawcę poczty e-mail" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "Add fields" @@ -1417,7 +1417,7 @@ msgstr "Dodaj domyślny tekst" #: apps/remix/app/components/general/rate-limit-array-input.tsx msgid "Add rate limit" -msgstr "Dodaj limit liczby żądań" +msgstr "Dodaj limit przepustowości" #: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx msgid "Add recipients" @@ -1477,7 +1477,7 @@ msgstr "Dodaj ten adres URL do dozwolonych adresów przekierowania Twojego dosta #: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx msgid "Add transport" -msgstr "Dodaj transport" +msgstr "Dodaj dostawcę poczty e-mail" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Additional brand information to display at the bottom of emails" @@ -1513,7 +1513,7 @@ msgstr "Tylko dla administratorów" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Advanced — Custom CSS" -msgstr "Zaawansowane — własny CSS" +msgstr "Zaawansowane – niestandardowy CSS" #: packages/ui/primitives/document-flow/add-settings.tsx #: packages/ui/primitives/template-flow/add-template-settings.tsx @@ -1559,7 +1559,7 @@ msgstr "Wszystko" #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "All claims" -msgstr "Wszystkie zgłoszenia" +msgstr "Wszystkie subskrypcje" #: apps/remix/app/components/general/app-command-menu.tsx msgid "All documents" @@ -1638,7 +1638,7 @@ msgstr "Odpowiadanie odbiorcom dokumentu bezpośrednio na ten adres e-mail" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "Allow Personal Organisations" -msgstr "Zezwalaj na osobiste organizacje" +msgstr "Zezwól na osobiste organizacje" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx @@ -1768,7 +1768,7 @@ msgstr "Wystąpił błąd podczas automatycznego podpisywania dokumentu. Niektó #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "Wystąpił błąd podczas anulowania dokumentów." #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1800,7 +1800,7 @@ msgstr "Wystąpił błąd podczas wyłączania użytkownika." #: apps/remix/app/utils/toast-error-messages.ts msgid "An error occurred while distributing the document." -msgstr "Wystąpił błąd podczas dystrybucji dokumentu." +msgstr "Wystąpił błąd podczas wysyłania dokumentu." #: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx msgid "An error occurred while enabling direct link signing." @@ -1907,11 +1907,11 @@ msgstr "Wystąpił błąd. Spróbuj ponownie później." #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "Organizacja przekroczyła limit dozwolonego użytkowania" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "Organizacja zbliża się do limit dozwolonego użytkowania" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2019,7 +2019,7 @@ msgstr "Klucz API" #: apps/remix/app/components/general/claim-limit-fields.tsx msgid "API rate limits" -msgstr "Limity liczby żądań API" +msgstr "Limit przepustowości API" #: apps/remix/app/components/general/organisation-usage-panel.tsx msgid "API requests" @@ -2027,7 +2027,7 @@ msgstr "Żądania API" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API requests have been temporarily paused" -msgstr "Żądania API zostały tymczasowo wstrzymane." +msgstr "Żądania API zostały tymczasowo wstrzymane" #: apps/remix/app/components/general/settings-nav-desktop.tsx #: apps/remix/app/components/general/settings-nav-mobile.tsx @@ -2039,7 +2039,7 @@ msgstr "Tokeny API" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "Wykorzystanie API zbliża się do limitu dozwolonego użytkowania" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "Wersja aplikacji" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "Składanie podpisu" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "Zbliżasz się do limitu dozwolonego użytkowania" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "Zbliżasz się do limitu planu" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2118,7 +2118,7 @@ msgstr "Czy na pewno chcesz usunąć następującą subskrypcję?" #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "Are you sure you want to delete the following transport?" -msgstr "Czy na pewno chcesz usunąć następujący transport?" +msgstr "Czy na pewno chcesz usunąć następującego dostawcę poczty e-mail?" #: apps/remix/app/components/dialogs/folder-delete-dialog.tsx msgid "Are you sure you want to delete this folder?" @@ -2205,7 +2205,7 @@ msgstr "Przygotowujący" #: apps/remix/app/components/embed/multisign/multi-sign-document-list.tsx msgid "Assistants and Copy roles are currently not compatible with the multi-sign experience." -msgstr "Przygotowujący i pobierający kopię nie są kompatybilni z funkcją wielu podpisów." +msgstr "Przygotowujący i pobierający kopię nie są kompatybilni z funkcją wielu podpisów." #: apps/remix/app/components/general/document/document-page-view-recipients.tsx msgid "Assisted" @@ -2328,7 +2328,7 @@ msgstr "Zadania w tle" #: apps/remix/app/components/dialogs/claim-update-dialog.tsx msgid "Backport email transport" -msgstr "Backport transportu e-mailowego" +msgstr "Użyj dostawcy poczty e-mail" #: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx #: apps/remix/app/components/forms/signin.tsx @@ -2345,11 +2345,11 @@ msgstr "Baner został zaktualizowany" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Base background colour." -msgstr "Bazowy kolor tła." +msgstr "Kolor tła." #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Base text colour." -msgstr "Bazowy kolor tekstu." +msgstr "Kolor tekstu." #: packages/email/template-components/template-confirmation-email.tsx msgid "Before you get started, please confirm your email address by clicking the button below:" @@ -2367,7 +2367,7 @@ msgstr "Płatności" #: apps/remix/app/components/forms/public-profile-form.tsx msgid "Bio" -msgstr "Bio" +msgstr "Biografia" #: packages/ui/primitives/signature-pad/signature-pad-color-picker.tsx msgid "Black" @@ -2375,7 +2375,7 @@ msgstr "Czarny" #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "Block signups from additional email domains on top of the bundled disposable email list. Subdomains are matched automatically (e.g. blocking \"bad.com\" also blocks \"foo.bad.com\")." -msgstr "Blokuj rejestracje z dodatkowych domen e‑mail ponad dołączoną listę jednorazowych adresów. Subdomeny są dopasowywane automatycznie (np. zablokowanie \"bad.com\" powoduje również zablokowanie \"foo.bad.com\")." +msgstr "Zablokuj rejestracje z konkretnych domen. Subdomeny są blokowane automatycznie (np. domena.pl spowoduje również zablokowanie subdomena.domena.pl). Domeny tymczasowych adresów e-mail znajdują się na tej liście." #: apps/remix/app/components/general/organisation-usage-panel.tsx msgid "Blocked" @@ -2502,6 +2502,7 @@ msgstr "Akceptując prośbę, przyznasz zespołowi {0} następujące uprawnienia #: packages/email/templates/confirm-team-email.tsx msgid "By accepting this request, you will be granting <0>{teamName} access to:" msgstr "Akceptując prośbę, umożliwisz zespołowi <0>{teamName} na:" +msgstr "Akceptując prośbę, umożliwisz zespołowi <0>{teamName}:" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "By deleting this document, the following will occur:" @@ -2647,21 +2648,21 @@ msgstr "Anuluj" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "Anuluj dokument" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "Anuluj dokumenty" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "Anuluj dokumenty" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "Anulowano" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -2711,7 +2712,7 @@ msgstr "Wyśrodkuj" #: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx msgid "Change Field Type" -msgstr "Zmień typ pola" +msgstr "Zmień rodzaj pola" #: apps/remix/app/components/general/app-command-menu.tsx msgid "Change language" @@ -2800,7 +2801,7 @@ msgstr "Wybierz..." #: apps/remix/app/components/tables/admin-organisation-stats-table.tsx msgid "Claim" -msgstr "Zgłoszenie" +msgstr "Subskrypcja" #: apps/remix/app/components/general/claim-account.tsx msgid "Claim account" @@ -2830,7 +2831,7 @@ msgstr "Kliknij, aby rozpocząć" #: apps/remix/app/components/general/template/template-page-view-recent-activity.tsx #: apps/remix/app/components/tables/settings-public-profile-templates-table.tsx msgid "Click here to retry" -msgstr "Kliknij tutaj, aby spróbować ponownie" +msgstr "Kliknij, aby spróbować ponownie" #: apps/remix/app/components/dialogs/organisation-member-invite-dialog.tsx msgid "Click here to upload" @@ -2902,7 +2903,7 @@ msgstr "Zwiń panel boczny" #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "Comma-separated list of email domains to block from signing up." -msgstr "Lista domen e‑mail do zablokowania przy rejestracji, oddzielonych przecinkami." +msgstr "Lista zablokowanych domen do rejestracji oddzielona przecinkami." #: apps/remix/app/components/embed/authoring/configure-document-advanced-settings.tsx msgid "Communication" @@ -3018,7 +3019,7 @@ msgstr "Skonfiguruj ustawienia zabezpieczeń dokumentu." #: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx msgid "Configure signing reminder settings for the document." -msgstr "Skonfiguruj przypomnienia o podpisaniu dokumentu." +msgstr "Skonfiguruj ustawienia przypomnień o podpisaniu dokumentu." #: apps/remix/app/components/dialogs/public-profile-template-manage-dialog.tsx msgid "Configure template" @@ -3050,7 +3051,7 @@ msgstr "Skonfiguruj role w zespole dla każdego użytkownika" #: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx msgid "Configure when and how often reminder emails are sent to recipients who have not yet completed signing. Uses the team default when set to inherit." -msgstr "Skonfiguruj, kiedy i jak często przypomnienia o podpisaniu będą wysyłane do odbiorców, którzy nie zakończyli dokumentu. Opcja dziedziczenia korzysta z domyślnych ustawień zespołu." +msgstr "Skonfiguruj, kiedy i jak często przypomnienia e-mail są wysyłane do odbiorców, którzy jeszcze nie ukończyli podpisywania. Gdy ustawione na dziedziczenie, używane są domyślne ustawienia zespołu." #: apps/remix/app/components/dialogs/public-profile-template-manage-dialog.tsx #: apps/remix/app/components/dialogs/sign-field-checkbox-dialog.tsx @@ -3179,7 +3180,7 @@ msgstr "Wybierz język dokumentu, powiadomień i certyfikatu, który jest dołą #: apps/remix/app/components/forms/document-preferences-form.tsx msgid "Controls when and how often reminder emails are sent to recipients who have not yet completed signing." -msgstr "Skonfiguruj, kiedy i jak często przypomnienia o podpisaniu będą wysyłane do odbiorców, którzy nie zakończyli dokumentu." +msgstr "Określa, kiedy i jak często przypomnienia e-mail są wysyłane do odbiorców, którzy jeszcze nie ukończyli podpisywania." #: apps/remix/app/components/forms/document-preferences-form.tsx msgid "Controls whether the audit logs will be included in the document when it is downloaded. The audit logs can still be downloaded from the logs page separately." @@ -3272,7 +3273,7 @@ msgstr "Kopiuj wartość" #: apps/remix/app/components/general/organisation-usage-reset-button.tsx msgid "Counter reset." -msgstr "Licznik zresetowany." +msgstr "Licznik został zresetowany." #: apps/remix/app/components/dialogs/admin-organisation-create-dialog.tsx #: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx @@ -3304,7 +3305,7 @@ msgstr "Utwórz nową organizację z planem {planName}. Zachowaj obecną organiz #: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx msgid "Create a new user. A welcome email will be sent with a link to set their password." -msgstr "Utwórz nowego użytkownika. Zostanie wysłany e‑mail powitalny z łączem do ustawienia hasła." +msgstr "Utwórz nowego użytkownika. Wiadomość powitalna zostanie wysłana z linkiem do ustawienia hasła." #: apps/remix/app/routes/_authenticated+/o.$orgUrl.support.tsx msgid "Create a support ticket" @@ -3541,7 +3542,7 @@ msgstr "Tworzenie szablonu" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx msgid "CSS rules were dropped during sanitisation" -msgstr "Niektóre reguły CSS zostały odrzucone podczas oczyszczania" +msgstr "Reguły CSS zostały usunięte podczas oczyszczenia kodu" #: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx msgid "CSV Structure" @@ -3565,7 +3566,7 @@ msgstr "Obecni odbiorcy:" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Current usage against organisation limits." -msgstr "Obecne użycie względem limitów organizacji." +msgstr "Obecne wykorzystanie względem limitów organizacji." #: apps/remix/app/components/general/teams/team-inherit-member-alert.tsx msgid "Currently all organisation members can access this team" @@ -3586,7 +3587,7 @@ msgstr "Niestandardowy plik {0} MB" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Custom CSS is sanitised on save. Layout-breaking properties, remote URLs, and pseudo-elements are stripped automatically. Any rules dropped during sanitisation will be shown after you save." -msgstr "Niestandardowy kod CSS jest czyszczony podczas zapisywania. Właściwości mogące zepsuć układ, zdalne adresy URL oraz pseudo‑elementy są automatycznie usuwane. Wszystkie reguły odrzucone w trakcie czyszczenia zostaną wyświetlone po zapisaniu." +msgstr "Niestandardowy CSS jest oczyszczany podczas zapisywania. Właściwości psujące układ graficzny, zdalne adresy URL oraz pseudoelementy są automatycznie usuwane. Reguły usunięte podczas oczyszczania kodu zostaną wyświetlone po zapisaniu zmian." #: packages/ui/components/document/expiration-period-picker.tsx msgid "Custom duration" @@ -3594,7 +3595,7 @@ msgstr "Niestandardowy czas" #: packages/ui/components/document/reminder-settings-picker.tsx msgid "Custom interval" -msgstr "Niestandardowy czas" +msgstr "Własny interwał" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups._index.tsx msgid "Custom Organisation Groups" @@ -3602,11 +3603,11 @@ msgstr "Niestandardowe grupy w organizacji" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Customise the colours used on your signing pages." -msgstr "Dostosuj kolory używane na stronach podpisywania." +msgstr "Dostosuj kolory na stronach podpisywania." #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Danger Zone" -msgstr "Strefa zagrożenia" +msgstr "Niebezpieczna strefa" #: apps/remix/app/components/general/app-command-menu.tsx msgid "Dark Mode" @@ -3662,11 +3663,11 @@ msgstr "Odrzuć" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Default (system mailer)" -msgstr "Domyślny (systemowy mailer)" +msgstr "Domyślny (systemowy)" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Default border colour." -msgstr "Domyślny kolor obramowania." +msgstr "Kolor obramowania." #: apps/remix/app/components/forms/document-preferences-form.tsx msgid "Default Date Format" @@ -3686,7 +3687,7 @@ msgstr "Domyślny adres e-mail" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "Default Email Settings" -msgstr "Domyślne ustawienia powiadomień" +msgstr "Domyślne ustawienia adresu e-mail" #: apps/remix/app/components/forms/document-preferences-form.tsx msgid "Default Envelope Expiration" @@ -3850,7 +3851,7 @@ msgstr "Usuń domenę" #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "Delete Email Transport" -msgstr "Usuń transport e-mailowy" +msgstr "Usuń dostawcę poczty e-mail" #: apps/remix/app/components/general/envelope-editor/envelope-editor.tsx msgid "Delete Envelope" @@ -3926,7 +3927,7 @@ msgstr "Usuwanie konta..." #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "Deletion scheduled" -msgstr "Usunięcie zaplanowane" +msgstr "Usunięcie zostało zaplanowane" #: apps/remix/app/components/general/webhook-logs-sheet.tsx msgid "Destination" @@ -3997,7 +3998,7 @@ msgstr "Urządzenie" #: packages/email/template-components/template-footer.tsx msgid "Did not expect this email? <0>Click here to report the sender. Never sign a document you don't recognize or weren't expecting." -msgstr "Nie spodziewasz się tej wiadomości e-mail? <0>Kliknij tutaj, aby zgłosić nadawcę. Nigdy nie podpisuj dokumentu, którego nie rozpoznajesz lub którego się nie spodziewałeś(-aś)." +msgstr "Wiadomość nie była przez Ciebie oczekiwana? <0>Kliknij, aby zgłosić nadawcę. Nigdy nie podpisuj dokumentu, którego nie rozpoznajesz." #: packages/email/templates/reset-password.tsx msgid "Didn't request a password change? We are here to help you secure your account, just <0>contact us." @@ -4056,7 +4057,7 @@ msgstr "Bezpośredni link do szablonu został usunięty" #. placeholder {1}: quota.directTemplates #: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx msgid "Direct template link usage exceeded ({0}/{1})" -msgstr "Przekroczono limit użycia bezpośrednich linków do szablonu ({0} / {1})" +msgstr "Przekroczono limit wykorzystania bezpośrednich linków do szablonu ({0} / {1})" #: apps/remix/app/components/forms/editor/editor-field-checkbox-form.tsx #: apps/remix/app/components/forms/editor/editor-field-radio-form.tsx @@ -4123,7 +4124,7 @@ msgstr "Wyświetlać Twoją nazwę i adres e-mail w dokumentach" #: apps/remix/app/components/forms/signup.tsx msgid "Disposable email addresses are not allowed. Please sign up with a permanent email address." -msgstr "Adresy e‑mail jednorazowego użytku nie są dozwolone. Zarejestruj się, używając stałego adresu e‑mail." +msgstr "Tymczasowe adresy e-mail nie są dozwolone. Zarejestruj się za pomocą standardowego adresu e-mail." #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Distribute Document" @@ -4205,12 +4206,12 @@ msgstr "Dokument został zatwierdzony" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "Anulowano dokument" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "Anulowano dokument" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4242,7 +4243,7 @@ msgstr "Dokument został zakończony!" #: apps/remix/app/utils/toast-error-messages.ts msgid "Document conversion is temporarily unavailable. Please try again shortly or upload a PDF." -msgstr "Konwersja dokumentów jest tymczasowo niedostępna. Spróbuj ponownie za chwilę lub prześlij plik PDF." +msgstr "Konwertowanie dokumentu jest niedostępne. Spróbuj ponownie później lub prześlij plik PDF." #: apps/remix/app/components/dialogs/template-use-dialog.tsx msgid "Document created" @@ -4282,7 +4283,7 @@ msgstr "Tworzenie dokumentu" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document creation has been temporarily paused" -msgstr "Tworzenie dokumentów zostało tymczasowo wstrzymane." +msgstr "Tworzenie dokumentów zostało tymczasowo wstrzymane" #: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx @@ -4407,7 +4408,7 @@ msgstr "Ustawienia dokumentu zostały zaktualizowane" #: apps/remix/app/components/general/claim-limit-fields.tsx msgid "Document rate limits" -msgstr "Limity liczby dokumentów" +msgstr "Limit przepustowości dokumentów" #: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx @@ -4426,7 +4427,7 @@ msgstr "Zmieniono nazwę dokumentu" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "Wysłano ponownie dokument" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4453,7 +4454,7 @@ msgstr "Zaktualizowano metodę uwierzytelniania odbiorcy do dokumentu" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Document signing process will be cancelled" -msgstr "Proces podpisywania dokumentu zostanie anulowany" +msgstr "Podpisywanie dokumentu zostanie anulowane" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id.logs.tsx msgid "Document status" @@ -4505,7 +4506,7 @@ msgstr "Dokument został przesłany" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "Wykorzystanie dokumentów zbliża się do limitu dozwolonego użytkowania" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4570,7 @@ msgstr "Dokumenty i zasoby powiązane z kopertą." #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "Dokumenty zostały anulowane" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4591,7 @@ msgstr "Dokumenty zostały usunięte" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "Dokumenty zostały częściowo anulowane" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -4614,7 +4615,7 @@ msgstr "Dokumenty, które zostały podpisane przez wszystkich odbiorców, ale ni #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "Documents, emails and api values may not be accurate since they record the amount of times the action was attempted. Meaning these values may go over the actual quota, get rejected, and will still be recorded." -msgstr "Dokumenty, e-maile i wartości API mogą nie być dokładne, ponieważ rejestrują liczbę prób wykonania danej akcji. Oznacza to, że te wartości mogą przekraczać faktyczny limit, być odrzucane, a mimo to nadal będą zapisywane." +msgstr "Wartości dokumentów, wiadomości i API mogą nie być dokładne, ponieważ rejestrują liczbę prób wykonania danej akcji. Oznacza to, że wartości te mogą przekroczyć rzeczywisty limit, zostać odrzucone, a mimo to nadal będą rejestrowane." #: apps/remix/app/components/tables/organisation-email-domains-table.tsx #: apps/remix/app/routes/_authenticated+/admin+/email-domains._index.tsx @@ -4708,7 +4709,7 @@ msgstr "Szkice dokumentów" #: packages/ui/primitives/document-dropzone.tsx msgid "Drag & drop your document here." -msgstr "Przeciągnij i upuść tutaj swój dokument." +msgstr "Przeciągnij i upuść dokument." #: apps/remix/app/components/embed/authoring/configure-document-upload.tsx msgid "Drag and drop or click to upload" @@ -4716,7 +4717,7 @@ msgstr "Przeciągnij i upuść lub kliknij, aby przesłać" #: apps/remix/app/components/general/envelope/envelope-drop-zone-wrapper.tsx msgid "Drag and drop your document here" -msgstr "Przeciągnij i upuść tutaj swój dokument" +msgstr "Przeciągnij i upuść dokument" #: packages/lib/constants/document.ts #: packages/ui/primitives/signature-pad/signature-pad.tsx @@ -4806,7 +4807,7 @@ msgstr "Np. 100" #: apps/remix/app/components/forms/email-transport-form.tsx msgid "e.g. Resend (free plans)" -msgstr "np. Resend (plany bezpłatne)" +msgstr "np. Resend (plan darmowy)" #: apps/remix/app/components/general/document/document-page-view-button.tsx #: apps/remix/app/components/general/document/document-page-view-dropdown.tsx @@ -4824,7 +4825,7 @@ msgstr "Edytuj" #: apps/remix/app/components/dialogs/email-transport-update-dialog.tsx msgid "Edit Email Transport" -msgstr "Edytuj transport e-mailowy" +msgstr "Edytuj dostawcę poczty e-mail" #: apps/remix/app/components/dialogs/envelope-item-edit-dialog.tsx msgid "Edit Item" @@ -4926,11 +4927,11 @@ msgstr "Adres e-mail już istnieje" #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "Email Blocklist" -msgstr "Bloklista e‑mail" +msgstr "Lista zablokowanych domen" #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "Email Blocklist Updated" -msgstr "Zaktualizowano bloklistę e‑mail" +msgstr "Lista została zaktualizowana" #: apps/remix/app/routes/_unauthenticated+/verify-email.$token.tsx msgid "Email Confirmed!" @@ -4942,11 +4943,11 @@ msgstr "Adres e-mail został utworzony" #: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx msgid "Email distribution needs to be enabled in the general settings tab to configure recipient email related settings." -msgstr "Aby móc skonfigurować ustawienia dotyczące wiadomości e-mail odbiorców, należy włączyć dystrybucję e-mail w zakładce ustawień ogólnych." +msgstr "Aby skonfigurować wiadomości, musisz włączyć dystrybucję dokumentu za pomocą poczty e-mail." #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Email document settings" -msgstr "Ustawienia powiadomień" +msgstr "Ustawienia wysyłki dokumentu e‑mailem" #: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx msgid "Email Domain" @@ -4995,7 +4996,7 @@ msgstr "Ustawienia adresu e-mail zostały zaktualizowane" #: apps/remix/app/components/general/claim-limit-fields.tsx msgid "Email rate limits" -msgstr "Limity liczby wiadomości e-mail" +msgstr "Limit przepustowości wiadomości" #: packages/ui/components/document/document-email-checkboxes.tsx msgid "Email recipients when a pending document is deleted" @@ -5031,7 +5032,7 @@ msgstr "Adres e-mail nadawcy" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email sending has been temporarily paused" -msgstr "Wysyłanie wiadomości e-mail zostało tymczasowo wstrzymane." +msgstr "Wysyłanie wiadomości zostało tymczasowo wstrzymane" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -5048,7 +5049,7 @@ msgstr "Ustawienia adresu e-mail" #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "Email the organisation owner to notify them of the deletion." -msgstr "Wyślij e-mail do właściciela organizacji, aby powiadomić go o usunięciu." +msgstr "Wyślij właścicielowi organizacji powiadomienie o usunięciu." #: packages/ui/components/document/document-email-checkboxes.tsx msgid "Email the owner when a document is created from a direct template" @@ -5069,16 +5070,16 @@ msgstr "Wyślij podpisującemu wiadomość, jeśli dokument jest nadal oczekują #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Email transport" -msgstr "Transport e-mailowy" +msgstr "Dostawca poczty e-mail" #: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx #: apps/remix/app/routes/_authenticated+/admin+/email-transports._index.tsx msgid "Email Transports" -msgstr "Transporty e-mailowe" +msgstr "Dostawcy poczty e-mail" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "Wykorzystanie wiadomości zbliża się do limitu dozwolonego użytkowania" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -5109,7 +5110,7 @@ msgstr "Osadzanie dokumentów, 5 użytkowników i więcej" #: apps/remix/app/components/general/claim-limit-fields.tsx #: apps/remix/app/components/general/claim-limit-fields.tsx msgid "Empty = Unlimited, 0 = Blocked" -msgstr "Puste = Bez limitu, 0 = Zablokowane" +msgstr "Puste = bez ograniczeń, 0 = zablokowane" #: packages/ui/primitives/document-flow/add-fields.tsx msgid "Empty field" @@ -5216,7 +5217,7 @@ msgstr "Załączniki" #: apps/remix/app/components/forms/email-transport-form.tsx msgid "Endpoint (optional)" -msgstr "Endpoint (opcjonalnie)" +msgstr "Punkt końcowy (opcjonalnie)" #: packages/lib/constants/i18n.ts msgid "English" @@ -5578,7 +5579,7 @@ msgstr "Nie udało się utworzyć zgłoszenia" #: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx msgid "Failed to create transport." -msgstr "Nie udało się utworzyć transportu." +msgstr "Nie udało się utworzyć dostawcy poczty e-mail." #: apps/remix/app/components/dialogs/folder-delete-dialog.tsx msgid "Failed to delete folder" @@ -5590,7 +5591,7 @@ msgstr "Nie udało się usunąć subskrypcji." #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "Failed to delete transport." -msgstr "Nie udało się usunąć transportu." +msgstr "Nie udało się usunąć dostawcy poczty e-mail." #: apps/remix/app/routes/_authenticated+/admin+/documents.$id.tsx msgid "Failed to download audit logs. Please try again later." @@ -5634,7 +5635,7 @@ msgstr "Nie udało się zapisać ustawień." #: apps/remix/app/components/dialogs/email-transport-update-dialog.tsx msgid "Failed to save transport." -msgstr "Nie udało się zapisać transportu." +msgstr "Nie udało się zapisać dostawcy poczty e-mail." #: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx msgid "Failed to sign out all sessions" @@ -5695,7 +5696,7 @@ msgstr "Niepowodzenie: {failedCount}" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx #: apps/remix/app/utils/toast-error-messages.ts msgid "Fair use limit exceeded" -msgstr "Przekroczono limit dozwolonego użycia." +msgstr "Przekroczono limit dozwolonego użytkowania" #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/components/tables/admin-claims-table.tsx @@ -5709,7 +5710,7 @@ msgstr "Funkcje" #: apps/remix/app/components/dialogs/admin-organisation-sync-subscription-dialog.tsx msgid "Fetch the latest subscription data from Stripe and apply it to this organisation." -msgstr "Pobierz najnowsze dane subskrypcji ze Stripe i zastosuj je do tej organizacji." +msgstr "Pobierz najnowsze dane subskrypcji z Stripe i zastosuj je w organizacji." #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx msgid "Field character limit" @@ -5785,7 +5786,7 @@ msgstr "Plik nie może być większy niż {APP_DOCUMENT_UPLOAD_SIZE_LIMIT} MB" #: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx msgid "Fill in the details to create a new email transport." -msgstr "Uzupełnij szczegóły, aby utworzyć nowy transport e-mailowy." +msgstr "Uzupełnił szczegóły, aby utworzyć nowego dostawcę poczty e-mail." #: apps/remix/app/components/dialogs/claim-create-dialog.tsx msgid "Fill in the details to create a new subscription claim." @@ -5797,7 +5798,7 @@ msgstr "Filtruj według statusu" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Focus ring colour." -msgstr "Kolor obramowania aktywnego elementu (focus ring)." +msgstr "Kolor obramowania zaznaczenia." #: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx msgid "Folder" @@ -5857,7 +5858,7 @@ msgstr "Na przykład, jeśli subskrypcja ma nową flagę „FLAG_1” ustawioną #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Foreground" -msgstr "Kolor pierwszego planu" +msgstr "Tekst" #: apps/remix/app/routes/_unauthenticated+/check-email.tsx msgid "Forgot password" @@ -5891,7 +5892,7 @@ msgstr "Darmowa" #: apps/remix/app/components/tables/user-billing-organisations-table.tsx msgctxt "Subscription status" msgid "Free (Pending)" -msgstr "Darmowy (oczekujący)" +msgstr "Darmowa (oczekująca)" #: packages/lib/utils/fields.ts #: packages/ui/primitives/document-flow/types.ts @@ -6147,11 +6148,11 @@ msgstr "Cześć, jestem Timur" #: packages/email/template-components/template-document-reminder.tsx msgid "Hi {recipientName}," -msgstr "Cześć {recipientName}," +msgstr "Cześć, {recipientName}," #: packages/email/templates/bulk-send-complete.tsx msgid "Hi {userName}," -msgstr "Cześć {userName}," +msgstr "Cześć, {userName}" #: packages/email/template-components/template-access-auth-2fa.tsx msgid "Hi {userName}, you need to enter a verification code to complete the document \"{documentTitle}\"." @@ -6159,7 +6160,7 @@ msgstr "Cześć {userName}, wpisz kod weryfikacyjny, aby zakończyć dokument #: packages/email/templates/reset-password.tsx msgid "Hi, {userName} <0>({userEmail})" -msgstr "Cześć {userName} <0>({userEmail})" +msgstr "Cześć, {userName} <0>({userEmail})" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx @@ -6201,7 +6202,7 @@ msgstr "Czas, w którym odbiorcy muszą zakończyć dokument. Opcja dziedziczeni #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/general/claim-account.tsx msgid "Human verification required" -msgstr "Wymagana weryfikacja za pomocą CAPTCHA" +msgstr "Weryfikacja antyspamowa jest wymagana" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "I agree to link my account with this organization" @@ -6230,7 +6231,7 @@ msgstr "Muszę otrzymać kopię dokumentu" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts msgid "I am the owner of this document" -msgstr "Jestem właścicielem tego dokumentu" +msgstr "Jestem właścicielem dokumentu" #: apps/remix/app/routes/_unauthenticated+/o.$orgUrl.signin.tsx msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation" @@ -6270,11 +6271,11 @@ msgstr "Jeśli korzystasz ze środowiska „staging”, ustaw właściwość hos #: apps/remix/app/routes/_recipient+/report.$token.tsx msgid "If you did not expect this email or believe it is spam, you can report the sender to our team for review." -msgstr "Jeśli nie spodziewałeś(-aś) się tej wiadomości e-mail lub uważasz, że to spam, możesz zgłosić nadawcę do naszego zespołu do weryfikacji." +msgstr "Jeśli wiadomość nie była przez Ciebie oczekiwana lub uważasz, że jest to spam, zgłoś nadawcę do naszego zespołu." #: packages/email/template-components/template-admin-user-created.tsx msgid "If you didn't expect this account or have any questions, please <0>contact support." -msgstr "Jeśli nie spodziewałeś(-aś) się tego konta lub masz jakiekolwiek pytania, <0>skontaktuj się z pomocą techniczną." +msgstr "Jeśli utworzenie konta jest błędem lub masz pytania, <0>skontaktuj się z pomocą techniczną." #: packages/email/template-components/template-access-auth-2fa.tsx msgid "If you didn't request this verification code, you can safely ignore this email." @@ -6290,7 +6291,7 @@ msgstr "Jeśli nie znajdziesz wiadomości z linkiem potwierdzającym, możesz po #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "Jeśli potrzebujesz wyższych limitów, skontaktuj się z pomocą techniczną pod adresem {SUPPORT_EMAIL}." #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -6536,7 +6537,7 @@ msgstr "Adres IP" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Irreversible actions for this organisation" -msgstr "Nieodwracalne działania dla tej organizacji" +msgstr "Nieodwracalne akcje dla organizacji" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "Issuer URL" @@ -6712,7 +6713,7 @@ msgstr "Pozostaw puste, aby odziedziczyć z organizacji." #: apps/remix/app/components/forms/email-transport-form.tsx msgid "Leave blank to keep current" -msgstr "Pozostaw puste, aby zachować obecne" +msgstr "Pozostaw puste, aby nie zmieniać" #: apps/remix/app/components/dialogs/organisation-leave-dialog.tsx msgid "Leave organisation" @@ -6882,7 +6883,7 @@ msgstr "Zarządzaj niestandardowym logowaniem SSO dla swojej organizacji." #: apps/remix/app/routes/_authenticated+/admin+/email-transports._index.tsx msgid "Manage all email transports" -msgstr "Zarządzaj wszystkimi transportami e-mailowymi" +msgstr "Zarządzaj wszystkimi dostawcami poczty e-mail" #: apps/remix/app/routes/_authenticated+/settings+/organisations.tsx msgid "Manage all organisations you are currently associated with." @@ -7066,7 +7067,7 @@ msgstr "MAU (zalogowani)" #: apps/remix/app/components/forms/editor/editor-field-number-form.tsx #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx msgid "Max" -msgstr "Max" +msgstr "Maks." #: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx msgid "Maximum file size: 4MB. Maximum 100 rows per upload. Blank values will use template defaults." @@ -7075,7 +7076,7 @@ msgstr "Maksymalny rozmiar pliku to 4 MB. Możesz przesłać maksymalnie 100 wie #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Maximum number of recipients per document allowed. 0 = Unlimited" -msgstr "Maksymalna dozwolona liczba odbiorców na dokument. 0 = Bez limitu" +msgstr "Maksymalna dozwolona liczba odbiorców dokumentu. 0 = bez ograniczeń" #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx @@ -7151,7 +7152,7 @@ msgstr "Środek" #: apps/remix/app/components/forms/editor/editor-field-number-form.tsx #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx msgid "Min" -msgstr "Min" +msgstr "Min." #: apps/remix/app/components/general/admin-license-status-banner.tsx msgid "Missing License - Your Documenso instance is using features that require a license." @@ -7168,7 +7169,7 @@ msgstr "Edytuj odbiorców" #: apps/remix/app/components/dialogs/email-transport-update-dialog.tsx msgid "Modify the details of the email transport." -msgstr "Zmień szczegóły transportu e-mailowego." +msgstr "Edytuj szczegóły dostawcy poczty e-mail." #: apps/remix/app/components/dialogs/claim-update-dialog.tsx msgid "Modify the details of the subscription claim." @@ -7197,7 +7198,7 @@ msgstr "Miesięczny limit dokumentów" #: apps/remix/app/components/general/claim-limit-fields.tsx msgid "Monthly email quota" -msgstr "Miesięczny limit e‑maili" +msgstr "Miesięczny limit wiadomości" #: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx #: apps/remix/app/components/dialogs/folder-move-dialog.tsx @@ -7298,7 +7299,7 @@ msgstr "Ustawienia nazwy" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "Need to sign documents?" -msgstr "Potrzebujesz podpisać dokumenty?" +msgstr "Potrzebujesz podpisywać dokumenty?" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Needs to approve" @@ -7406,7 +7407,7 @@ msgstr "Brak włączonych funkcji" #: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page-renderer.tsx msgid "No field type matching this description was found." -msgstr "Nie znaleziono typu pola pasującego do tego opisu." +msgstr "Nie znaleziono pola pasującego do tego opisu." #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "No fields were detected in your document." @@ -7517,7 +7518,7 @@ msgstr "Nie znaleziono pola podpisu" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "Brak dostępnych certyfikatów podpisu" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7596,7 @@ msgstr "Nieobsługiwane" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "Nic nie anulowano" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7628,12 +7629,12 @@ msgstr "Liczba musi być w formacie {numberFormat}" #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Number of members allowed. 0 = Unlimited" -msgstr "Liczba dozwolonych użytkowników. 0 = Bez ograniczeń" +msgstr "Liczba dozwolonych użytkowników. 0 = bez ograniczeń" #: apps/remix/app/components/forms/subscription-claim-form.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Number of teams allowed. 0 = Unlimited" -msgstr "Liczba dozwolonych zespołów. 0 = Bez ograniczeń" +msgstr "Liczba dozwolonych zespołów. 0 = bez ograniczeń" #: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx msgid "Number Settings" @@ -7704,7 +7705,7 @@ msgstr "Dozwolone są tylko pliki PDF" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "Tylko oczekujące dokumenty, do których masz uprawnienia, zostaną anulowane." #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -7768,7 +7769,7 @@ msgstr "Organizacja" #: packages/lib/server-only/organisation/delete-organisation-email.ts msgid "Organisation \"{organisationName}\" has been deleted" -msgstr "Organizacja \"{organisationName}\" została usunięta" +msgstr "Organizacja „{organisationName}” została usunięta" #: packages/lib/constants/organisations-translations.ts msgid "Organisation Admin" @@ -7844,7 +7845,7 @@ msgstr "Organizacja nie została znaleziona" #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Organisation Review Required" -msgstr "Wymagana weryfikacja organizacji" +msgstr "Weryfikacja organizacji jest wymagana" #: apps/remix/app/components/dialogs/organisation-group-create-dialog.tsx #: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx @@ -7894,11 +7895,11 @@ msgstr "Adres URL organizacji" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Organisation usage" -msgstr "Użycie organizacji" +msgstr "Wykorzystanie organizacji" #: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx msgid "Organisation-level pending invites for this team's parent organisation." -msgstr "Oczekujące zaproszenia na poziomie organizacji zespołu." +msgstr "Oczekujące zaproszenia na poziomie organizacji dla organizacji nadrzędnej tego zespołu." #: apps/remix/app/components/general/org-menu-switcher.tsx #: apps/remix/app/components/general/settings-nav-desktop.tsx @@ -7915,7 +7916,7 @@ msgstr "Organizacje użytkownika." #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Organisations without a transport use the system default mailer." -msgstr "Organizacje bez zdefiniowanego transportu używają domyślnego systemowego mailera." +msgstr "Organizacje bez dostawcy poczty e-mail używają domyślnego systemu wysyłki." #: apps/remix/app/components/general/folder/folder-card.tsx msgid "Organise your documents" @@ -7966,15 +7967,15 @@ msgstr "Właściciel" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Owner document completed" -msgstr "Powiadomiono właściciela o zakończeniu dokumentu" +msgstr "Dokument właściciela zakończony" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Owner document created" -msgstr "Powiadomiono właściciela o utworzeniu dokumentu" +msgstr "Dokument właściciela utworzony" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Owner recipient expired" -msgstr "Powiadomiono właściciela o minięciu czasu na podpisanie dokumentu" +msgstr "Odbiorca właściciela wygasł" #: apps/remix/app/components/dialogs/admin-organisation-member-update-dialog.tsx msgid "Ownership transferred to {organisationMemberName}." @@ -7998,7 +7999,7 @@ msgstr "Opłacona" #: apps/remix/app/components/dialogs/envelope-download-dialog.tsx msgctxt "Partially signed document (adjective)" msgid "Partial" -msgstr "Częściowo podpisany" +msgstr "Częściowy" #: apps/remix/app/components/forms/signin.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-dialog.tsx @@ -8096,7 +8097,7 @@ msgstr "Zaległa płatność" #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "Payment required" -msgstr "Wymagana płatność" +msgstr "Płatność jest wymagana" #: apps/remix/app/components/dialogs/envelope-download-dialog.tsx msgid "PDF Document" @@ -8132,7 +8133,7 @@ msgstr "Oczekujące dokumenty" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Pending documents will have their signing process cancelled" -msgstr "Proces podpisywania oczekujących dokumentów zostanie anulowany" +msgstr "Podpisywanie oczekujących dokumentów zostanie anulowane" #: apps/remix/app/components/general/organisations/organisation-invitations.tsx msgid "Pending invitations" @@ -8163,7 +8164,7 @@ msgstr "Okres" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Permanently delete this organisation. Documents will be orphaned (not deleted) so they remain accessible via the deleted-account service account." -msgstr "Trwale usuń tę organizację. Dokumenty staną się osierocone (nieusunięte), aby pozostały dostępne za pośrednictwem konta serwisowego usuniętego konta." +msgstr "Usuń trwale organizację. Dokumenty zostaną osierocone (nie usunięte), więc będą przypisane do konta serwisowego usuniętego konta." #: apps/remix/app/components/tables/user-organisations-table.tsx msgctxt "Personal organisation (adjective)" @@ -8215,7 +8216,7 @@ msgstr "Domyślny tekst" #: apps/remix/app/components/forms/subscription-claim-form.tsx msgid "Plans without a transport use the system default mailer." -msgstr "Plany bez zdefiniowanego transportu używają domyślnego systemowego mailera." +msgstr "Plany bez dostawcy poczty e-mail używają domyślnego systemu wysyłki." #. placeholder {0}: _(actionVerb).toLowerCase() #: packages/email/template-components/template-document-invite.tsx @@ -8259,7 +8260,7 @@ msgstr "Wybierz nowe hasło" #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/general/claim-account.tsx msgid "Please complete the CAPTCHA challenge before signing in." -msgstr "Przed zalogowaniem się dokończ wyzwanie CAPTCHA." +msgstr "Zakończ weryfikację CAPTCHA przed logowaniem." #: apps/remix/app/components/general/document-signing/document-signing-mobile-widget.tsx #: apps/remix/app/components/general/document-signing/document-signing-mobile-widget.tsx @@ -8286,7 +8287,7 @@ msgstr "Jeśli masz pytania, skontaktuj się z <0>pomocą techniczną." #: packages/email/templates/organisation-limit-alert.tsx msgid "Please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "Skontaktuj się z pomocą techniczną pod adresem {SUPPORT_EMAIL}, a my zweryfikujemy Twoje konto." +msgstr "Skontaktuj się z pomocą techniczną {SUPPORT_EMAIL}. Sprawdzimy Twoje konto." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Please contact support if you would like to revert this action." @@ -8298,7 +8299,7 @@ msgstr "Skontaktuj się z właścicielem dokumentu, aby uzyskać pomoc." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "Nie zamykaj karty. Dostawca podpisu finalizuje podpis." #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8419,7 +8420,7 @@ msgstr "Spróbuj ponownie i upewnij się, że adres e-mail jest prawidłowy." #: apps/remix/app/components/general/pdf-viewer/pdf-viewer-states.tsx msgid "Please try again or contact our support." -msgstr "Spróbuj ponownie lub skontaktuj się z naszym wsparciem." +msgstr "Spróbuj ponownie lub skontaktuj się z pomocą techniczną" #. placeholder {0}: `'${t(deleteMessage)}'` #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx @@ -8507,15 +8508,15 @@ msgstr "Podgląd podpisanego dokumentu z domyślnymi opcjami" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Primary" -msgstr "Kolor główny" +msgstr "Główny" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Primary action colour." -msgstr "Kolor głównej akcji." +msgstr "Kolor akcji." #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Primary Foreground" -msgstr "Kolor pierwszego planu dla koloru głównego" +msgstr "Tekst przycisków" #: apps/remix/app/components/general/template/template-type.tsx #: apps/remix/app/components/tables/templates-table.tsx @@ -8672,7 +8673,7 @@ msgstr "Rola" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "Powód (opcjonalnie)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8697,7 @@ msgstr "Aby podpisać pole, wymagane jest ponowne uwierzytelnianie" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "Spróbuj ponownie" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8742,11 @@ msgstr "Odbiorca zatwierdził dokument" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "Odbiorca uwierzytelnił się u dostawcy podpisu" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "Odbiorca autoryzował podpis zdalny" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8778,10 @@ msgstr "Identyfikator odbiorcy:" msgid "Recipient rejected the document" msgstr "Odbiorca odrzucił dokument" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "Odbiorca odrzucił dokument zewnętrznie" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "Usunięto odbiorcę" @@ -8791,7 +8796,7 @@ msgstr "Odbiorca poprosił o kod weryfikacyjny dla dokumentu" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "Odbiorca poprosił o podpis zdalny" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8807,7 +8812,7 @@ msgstr "Odbiorca podpisał dokument" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signing request" -msgstr "Poproszono odbiorcę o podpisanie" +msgstr "Prośba o podpisanie wysłana do odbiorcy" #: packages/ui/components/document/document-email-checkboxes.tsx msgid "Recipient signing request email" @@ -8832,11 +8837,11 @@ msgstr "Odbiorca wyświetlił dokument" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "Odbiorca złożył podpis zdalny" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "Uwierzytelnienie odbiorcy u dostawcy podpisu nie powiodło się" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8869,7 @@ msgstr "Odbiorcy będą mogli podpisać dokument po jego wysłaniu" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "Odbiorcy zostaną powiadomieni o anulowaniu dokumentu" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -8959,7 +8964,7 @@ msgstr "Pamiętasz hasło? <0>Zaloguj się" #: packages/email/templates/document-reminder.tsx msgid "Reminder to {action} {documentName}" -msgstr "Sprawdź i {action} dokument {documentName}" +msgstr "Przypomnienie, aby {action} dokument „{documentName}”" #. placeholder {0}: envelope.documentMeta.subject #: packages/lib/jobs/definitions/internal/process-signing-reminder.handler.ts @@ -9103,7 +9108,7 @@ msgstr "Zgłoś nadawcę" #: apps/remix/app/routes/_recipient+/report.$token.tsx msgid "Report this sender?" -msgstr "Zgłosić tego nadawcę?" +msgstr "Zgłosić nadawcę?" #: apps/remix/app/components/general/organisation-usage-panel.tsx #: apps/remix/app/components/tables/admin-organisation-stats-table.tsx @@ -9325,7 +9330,7 @@ msgstr "Wyrównaj do lewej" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Ring" -msgstr "Obramowanie (ring)" +msgstr "Obramowanie zaznaczenia" #: apps/remix/app/components/dialogs/admin-organisation-member-update-dialog.tsx #: apps/remix/app/components/dialogs/organisation-member-update-dialog.tsx @@ -9416,7 +9421,7 @@ msgstr "Szukaj identyfikatora lub nazwy" #: apps/remix/app/routes/_authenticated+/admin+/documents._index.tsx msgid "Search by document title, team:123 or user:123" -msgstr "Szukaj po tytule dokumentu, team:123 lub user:123" +msgstr "Szukaj tytułu dokumentu, zespołu lub użytkownika" #: apps/remix/app/routes/_authenticated+/admin+/email-domains._index.tsx msgid "Search by domain or organisation name" @@ -9432,7 +9437,7 @@ msgstr "Szukaj nazwy lub adresu e-mail" #: apps/remix/app/routes/_authenticated+/admin+/email-transports._index.tsx msgid "Search by name or from address" -msgstr "Szukaj po nazwie lub adresie nadawcy" +msgstr "Szukaj nazwy lub adresu e-mail" #: apps/remix/app/routes/_authenticated+/admin+/organisations._index.tsx msgid "Search by organisation ID, name, customer ID or owner email" @@ -9444,7 +9449,7 @@ msgstr "Szukaj nazwy organizacji" #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "Search by organisation name, URL or ID" -msgstr "Szukaj po nazwie organizacji, adresie URL lub ID" +msgstr "Szukaj nazwy organizacji, adresu URL lub identyfikatora" #: apps/remix/app/components/general/document/document-search.tsx msgid "Search documents..." @@ -9718,7 +9723,7 @@ msgstr "Wyślij" #: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx msgid "Send a test email using this transport to verify the configuration." -msgstr "Wyślij wiadomość testową przy użyciu tego transportu, aby zweryfikować konfigurację." +msgstr "Wyślij wiadomość testową przy pomocy dostawcy poczty e-mail." #: apps/remix/app/components/dialogs/webhook-test-dialog.tsx msgid "Send a test webhook with sample data to verify your integration is working correctly." @@ -9777,11 +9782,11 @@ msgstr "Status wysyłki" #: apps/remix/app/components/tables/admin-email-transports-table.tsx msgid "Send test" -msgstr "Wyślij test" +msgstr "Wyślij wiadomość testową" #: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx msgid "Send Test Email" -msgstr "Wyślij testową wiadomość e-mail" +msgstr "Wyślij wiadomość testową" #: apps/remix/app/components/tables/documents-table.tsx #: apps/remix/app/components/tables/inbox-table.tsx @@ -9834,7 +9839,7 @@ msgstr "Skonfiguruj właściwości szablonu i informacje o odbiorcach" #: packages/email/templates/admin-user-created.tsx msgid "Set your password for Documenso" -msgstr "Ustaw swoje hasło do Documenso" +msgstr "Ustaw hasło Documenso" #: apps/remix/app/components/general/app-command-menu.tsx #: apps/remix/app/components/general/app-command-menu.tsx @@ -9887,7 +9892,7 @@ msgstr "Pokaż ustawienia zaawansowane" #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "Show daily averages for documents, emails and API usages" -msgstr "Pokaż dzienne średnie dla dokumentów, e-maili i użycia API" +msgstr "Pokaż średnie dzienne wykorzystanie dokumentów, wiadomości i API" #: apps/remix/app/components/general/admin-license-card.tsx msgid "Show license key" @@ -9903,7 +9908,7 @@ msgstr "Pokaż użycie" #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "Show usage with quotas" -msgstr "Pokaż użycie z limitami" +msgstr "Pokaż limity użycia" #: apps/remix/app/components/dialogs/sign-field-signature-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx @@ -9955,7 +9960,7 @@ msgstr "Podpisz dokument" #: apps/remix/app/routes/_recipient+/_layout.tsx msgid "Sign Document - Documenso" -msgstr "Podpisz dokument – Documenso" +msgstr "Podpisz dokument - Documenso" #: apps/remix/app/components/embed/multisign/multi-sign-document-list.tsx msgid "Sign Documents" @@ -10111,7 +10116,7 @@ msgstr "Podpisuje" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "Algorytm podpisywania nie jest obsługiwany" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10125,7 @@ msgstr "Certyfikat podpisu" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "Certyfikat podpisu jest nieprawidłowy" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10143,7 @@ msgstr "Czas na podpisanie minął" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "Podpisywanie nie powiodło się" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10274,7 @@ msgstr "Coś poszło nie tak" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "Coś poszło nie tak podczas składania podpisu. Spróbuj ponownie." #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,11 +10299,11 @@ msgstr "Coś poszło nie tak podczas ładowania kluczy dostępu." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "Coś poszło nie tak podczas przygotowywania podpisu zdalnego. Spróbuj ponownie." #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." -msgstr "Coś poszło nie tak podczas renderowania dokumentu. Spróbuj ponownie lub skontaktuj się z naszym wsparciem." +msgstr "Coś poszło nie tak podczas renderowania dokumentu. Spróbuj ponownie lub skontaktuj się z pomocą techniczną." #: packages/lib/constants/pdf-viewer-i18n.ts #: packages/lib/constants/pdf-viewer-i18n.ts @@ -10585,7 +10590,7 @@ msgstr "Synchronizuj" #: apps/remix/app/components/dialogs/admin-organisation-sync-subscription-dialog.tsx msgid "Sync claims. This will overwrite the current claim with the one resolved from the Stripe subscription." -msgstr "Zsynchronizuj roszczenia. Spowoduje to nadpisanie bieżącego roszczenia tym, które zostanie pobrane z subskrypcji Stripe." +msgstr "Synchronizuj subskrypcję. Spowoduje to nadpisanie ustawień Stripe." #: apps/remix/app/components/tables/organisation-email-domains-table.tsx msgid "Sync Email Domains" @@ -10603,7 +10608,7 @@ msgstr "Synchronizuj licencję z serwera" #: apps/remix/app/components/dialogs/admin-organisation-sync-subscription-dialog.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Sync Stripe subscription" -msgstr "Zsynchronizuj subskrypcję Stripe" +msgstr "Synchronizuj subskrypcję Stripe" #: packages/lib/utils/document-audit-logs.ts #: packages/lib/utils/document-audit-logs.ts @@ -10869,7 +10874,7 @@ msgstr "Zmieniono nazwę szablonu" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "Wysłano ponownie szablon" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -10930,7 +10935,7 @@ msgstr "Wiadomość testowa została wysłana." #: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx msgid "Test failed." -msgstr "Test nie powiódł się." +msgstr "Wiadomość testowa nie powiodła się." #: apps/remix/app/components/dialogs/webhook-test-dialog.tsx msgid "Test Webhook" @@ -10946,7 +10951,7 @@ msgstr "Testowy webhook został wysłany" #: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx msgid "test@example.com" -msgstr "test@example.com" +msgstr "test@przyklad.com" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-text-field.tsx @@ -10975,7 +10980,7 @@ msgstr "Kolor tekstu" #: apps/remix/app/components/forms/branding-preferences-form.tsx msgid "Text colour on primary buttons." -msgstr "Kolor tekstu na głównych przyciskach." +msgstr "Kolor tekstu na przyciskach." #: apps/remix/app/components/dialogs/sign-field-text-dialog.tsx msgid "Text is required" @@ -10991,7 +10996,7 @@ msgstr "Podpisywanie zostało zakończone." #: apps/remix/app/routes/_recipient+/report.$token.tsx msgid "Thank you for letting us know, we have flagged this sender for review. If you have any concerns please feel free to reach out to our <0>support team." -msgstr "Dziękujemy za zgłoszenie — oznaczyliśmy tego nadawcę do sprawdzenia. Jeśli masz jakiekolwiek wątpliwości, skontaktuj się z naszym <0>zespołem wsparcia." +msgstr "Dziękujemy za zgłoszenie nadawcy. Zweryfikujemy go. Jeśli masz pytania, skontaktuj się z naszą <0>pomocą techniczną." #: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx msgid "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." @@ -11035,7 +11040,7 @@ msgstr "Domyślny adres e-mail do wysyłania wiadomości do odbiorców" #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "The deletion will run in the background, and can take up to a few minutes to complete. Do not re-run this deletion." -msgstr "Usunięcie zostanie wykonane w tle i może zająć do kilku minut. Nie uruchamiaj ponownie tego procesu usuwania." +msgstr "Usunięcie zostanie uruchomione w tle. Może to potrwać do kilku minut. Nie uruchamiaj ponownie operacji." #: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx #: apps/remix/app/components/general/template/template-direct-link-badge.tsx @@ -11050,7 +11055,7 @@ msgstr "Nazwa wyświetlana dla adresu e-mail" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields." -msgstr "Nie udało się utworzyć dokumentu z powodu brakujących lub nieprawidłowych danych. Sprawdź listę odbiorców i pola w szablonie." +msgstr "Nie można było utworzyć dokumentu z powodu brakujących lub nieprawidłowych informacji. Sprawdź odbiorców i pola szablonu." #: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx msgid "The Document has been deleted successfully." @@ -11087,12 +11092,29 @@ msgstr "Zmieniono właściciela dokumentu na {0} z zespołu {1}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "Podpisywanie dokumentu zostanie zatrzymane" #: apps/remix/app/utils/toast-error-messages.ts 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." +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "Dokument został odrzucony zewnętrznie przez {onBehalfOf} w imieniu użytkownika {user}" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "Dokument został odrzucony zewnętrznie przez {onBehalfOf} w imieniu odbiorcy" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "Dokument został odrzucony zewnętrznie w imieniu użytkownika {user}" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "Dokument został odrzucony zewnętrznie w imieniu odbiorcy" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "Dokument zostanie ukryty w Twoim koncie" @@ -11103,7 +11125,7 @@ msgstr "Dokument zostanie natychmiast wysłany do odbiorców." #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Dokument pozostanie na pulpicie oznaczony jako anulowany" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11142,7 @@ msgstr "Nazwa dokumentu" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "Dokumenty pozostaną na pulpicie oznaczone jako anulowane" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11128,7 +11150,7 @@ msgstr "Adres e-mail, który pojawi się w polu „Odpowiedz do” w wiadomości #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "The email blocklist has been updated successfully." -msgstr "Bloklista e‑mail została pomyślnie zaktualizowana." +msgstr "Lista zablokowanych domen została zaktualizowana." #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx msgid "The email domain you are looking for may have been removed, renamed or may have never existed." @@ -11169,11 +11191,11 @@ msgstr "Wystąpiły następujące błędy:" #: packages/email/templates/organisation-delete.tsx msgid "The following organisation has been deleted by an administrator. You and your members will no longer be able to access this organisation, its teams, or its associated data." -msgstr "Poniższa organizacja została usunięta przez administratora. Ty i członkowie Twojej organizacji nie będziecie już mieli dostępu do tej organizacji, jej zespołów ani powiązanych z nią danych." +msgstr "Organizacja została usunięta przez administratora. Użytkownicy organizacji nie będą mieli już do niej dostępu, w tym do jej zespołów i powiązanych danych." #: packages/email/templates/organisation-delete.tsx msgid "The following organisation has been deleted. You and your members will no longer be able to access this organisation, its teams, or its associated data." -msgstr "Poniższa organizacja została usunięta. Ty i członkowie Twojej organizacji nie będziecie już mieli dostępu do tej organizacji, jej zespołów ani powiązanych z nią danych." +msgstr "Organizacja została usunięta. Użytkownicy organizacji nie będą mieli już do niej dostępu, w tym do jej zespołów i powiązanych danych." #: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx msgid "The following recipients require an email address:" @@ -11219,7 +11241,7 @@ msgstr "Subskrypcja organizacji została zsynchronizowana ze Stripe." #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "The organisation will be deleted in the background. Documents will be orphaned, not deleted." -msgstr "Organizacja zostanie usunięta w tle. Dokumenty staną się osierocone, nieusunięte." +msgstr "Organizacja zostanie usunięta w tle. Dokumenty zostaną osierocone, ale nie usunięte." #: apps/remix/app/routes/_authenticated+/_layout.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx @@ -11316,7 +11338,7 @@ msgstr "Link do podpisywania został skopiowany do schowka." #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "Dostawca podpisu nie odpowiedział na czas. Spróbuj ponownie." #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11343,7 +11365,7 @@ msgstr "Zespół, którego szukasz, mógł zostać usunięty, zmieniony lub móg #: apps/remix/app/utils/toast-error-messages.ts msgid "The template or one of its recipients could not be found." -msgstr "Szablon lub jeden z jego odbiorców nie został znaleziony." +msgstr "Nie można odnaleźć szablonu lub jednego z jego odbiorców." #: apps/remix/app/components/dialogs/public-profile-template-manage-dialog.tsx msgid "The template will be removed from your profile" @@ -11432,7 +11454,7 @@ msgstr "Brak aktywnych szkiców. Prześlij, aby utworzyć." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "Brak anulowanych dokumentów. Anulowane dokumenty pozostaną tutaj jako dowód ich wcześniejszej dystrybucji." #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11523,7 @@ msgstr "Nie można zmienić dokumentu" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "Nie można anulować dokumentu. Spróbuj ponownie." #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11548,7 @@ msgstr "Dokument został już wysłany do odbiorcy, więc nie możesz go już ed #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "Dokument został anulowany" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11547,7 +11569,7 @@ msgstr "Dokument został podpisany przez wszystkich odbiorców" #: apps/remix/app/utils/toast-error-messages.ts msgid "This document has too many recipients. Please remove some recipients or contact support if you need more." -msgstr "Ten dokument ma zbyt wielu adresatów. Usuń część adresatów lub skontaktuj się z pomocą techniczną, jeśli potrzebujesz większej liczby." +msgstr "Dokument ma zbyt wielu odbiorców. Usuń niektórych odbiorców lub skontaktuj się z pomocą techniczną, jeśli potrzebujesz więcej." #: apps/remix/app/components/general/document/document-certificate-qr-view.tsx msgid "This document is available in your Documenso account. You can view more details, recipients, and audit logs there." @@ -11608,11 +11630,11 @@ msgstr "Zostanie wysłana do odbiorcy, który właśnie podpisał dokument, gdy #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx msgid "This envelope cannot have more than {recipientCountLimit} recipients. Please contact support if you need more." -msgstr "Ta koperta nie może mieć więcej niż {recipientCountLimit} adresatów. Skontaktuj się z pomocą techniczną, jeśli potrzebujesz większej liczby." +msgstr "Koperta nie może więcej niż {recipientCountLimit} odbiorców. Skontaktuj się z pomocą techniczną, jeśli potrzebujesz więcej." #: apps/remix/app/components/embed/embed-paywall.tsx msgid "This feature is not available on your current plan" -msgstr "Funkcja nie jest dostępna w Twoim planie" +msgstr "Ta funkcja nie jest dostępna w Twoim obecnym planie." #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." @@ -11620,7 +11642,7 @@ msgstr "Pole nie może być modyfikowane ani usuwane. Gdy udostępnisz bezpośre #: apps/remix/app/utils/toast-error-messages.ts msgid "This file type isn't supported. Please upload a PDF or Word document." -msgstr "Ten typ pliku nie jest obsługiwany. Prześlij plik PDF lub dokument programu Word." +msgstr "Typ pliku nie jest obsługiwany. Prześlij dokument PDF lub Word." #: apps/remix/app/components/dialogs/folder-delete-dialog.tsx msgid "This folder contains multiple items. Deleting it will remove all subfolders and move all nested documents and templates to the root folder." @@ -11653,11 +11675,11 @@ msgstr "Link jest nieprawidłowy lub wygasł. Skontaktuj się ze swoim zespołem #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "Użytkownik jest odziedziczony z grupy i nie może zostać usunięty bezpośrednio z zespołu." #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." -msgstr "Ta organizacja oczekuje na płatność. Dokończ proces zakupu, aby ją odblokować." +msgstr "Organizacja oczekuje na płatność. Zakończ płatność, aby ją odblokować." #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "This organisation will have administrative control over your account. You can revoke this access later, but they will retain access to any data they've already collected." @@ -11737,9 +11759,7 @@ msgstr "Zostanie wysłana do właściciela po zakończeniu dokumentu." #: packages/ui/components/document/document-email-checkboxes.tsx msgid "This will be sent to the document owner when a recipient's signing window has expired." -msgstr "" -"Zostanie wysłana do właściciela dokumentu, gdy minie czas na podpisanie przez odbiorcę\n" -"" +msgstr "Zostanie wysłana do właściciela dokumentu, gdy minie czas na podpisanie przez odbiorcę" #: apps/remix/app/components/tables/organisation-email-domains-table.tsx msgid "This will check and sync the status of all email domains for this organisation" @@ -11883,7 +11903,7 @@ msgstr "Aby uzyskać dostęp do konta, potwierdź adres e-mail, klikając na lin #: packages/email/template-components/template-admin-user-created.tsx msgid "To get started, please set your password by clicking the button below:" -msgstr "Aby rozpocząć, ustaw swoje hasło, klikając przycisk poniżej:" +msgstr "Ustaw hasło, klikając przycisk poniżej:" #. placeholder {0}: recipient.email #: apps/remix/app/components/general/document-signing/document-signing-auth-account.tsx @@ -11992,7 +12012,7 @@ msgstr "Token nie został znaleziony" #: apps/remix/app/utils/toast-error-messages.ts msgid "Too many recipients" -msgstr "Zbyt wielu adresatów" +msgstr "Zbyt wielu odbiorców" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx #: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx @@ -12005,7 +12025,7 @@ msgstr "Góra" #: apps/remix/app/components/tables/admin-organisation-stats-table.tsx msgid "Total" -msgstr "Razem" +msgstr "Łącznie" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "Total Documents" @@ -12033,23 +12053,23 @@ msgstr "Przenieś dokumenty do innego zespołu" #: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx msgid "Transport created." -msgstr "Transport został utworzony." +msgstr "Dostawca poczty e-mail został utworzony." #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "Transport deleted." -msgstr "Transport został usunięty." +msgstr "Dostawca poczty e-mail został usunięty." #: apps/remix/app/components/forms/email-transport-form.tsx msgid "Transport type" -msgstr "Typ transportu" +msgstr "Rodzaj dostawcy poczty e-mail" #: apps/remix/app/components/forms/email-transport-form.tsx msgid "Transport type cannot be changed after creation." -msgstr "Typu transportu nie można zmienić po utworzeniu." +msgstr "Nie można zmienić rodzaju dostawcy poczty e-mail po jego utworzeniu." #: apps/remix/app/components/dialogs/email-transport-update-dialog.tsx msgid "Transport updated." -msgstr "Transport został zaktualizowany." +msgstr "Dostawca poczty e-mail został zaktualizowany." #: apps/remix/app/components/dialogs/webhook-create-dialog.tsx #: apps/remix/app/components/dialogs/webhook-edit-dialog.tsx @@ -12215,7 +12235,7 @@ msgstr "Nie można się zalogować" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "Nie można rozpocząć procesu podpisywania" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -12264,7 +12284,7 @@ msgstr "Nieznana nazwa" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "Unlimited" -msgstr "Nieograniczone" +msgstr "Bez ograniczeń" #: apps/remix/app/components/dialogs/organisation-create-dialog.tsx msgid "Unlimited documents, API and more" @@ -12328,7 +12348,7 @@ msgstr "Zaktualizuj płatności" #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "Update Blocklist" -msgstr "Zaktualizuj listę blokowanych adresów e-mail" +msgstr "Zaktualizuj listę zablokowanych domen" #: apps/remix/app/components/dialogs/claim-update-dialog.tsx msgid "Update Claim" @@ -12564,7 +12584,7 @@ msgstr "Adres URL" #. placeholder {0}: selectedStat?.period || 'N/A' #: apps/remix/app/components/general/organisation-usage-panel.tsx msgid "Usage for period: {0}" -msgstr "Wykorzystanie za okres: {0}" +msgstr "Okres: {0}" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates.$id._index.tsx msgid "Use" @@ -12595,7 +12615,7 @@ msgstr "Użyj klucza dostępu do uwierzytelniania" #: apps/remix/app/components/tables/admin-email-transports-table.tsx msgid "Used by claims" -msgstr "Używany przez roszczenia" +msgstr "Liczba powiązań" #: apps/remix/app/components/tables/admin-document-logs-table.tsx #: apps/remix/app/components/tables/document-logs-table.tsx @@ -12611,7 +12631,7 @@ msgstr "User agent" #: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx msgid "User created and welcome email sent" -msgstr "Użytkownik został utworzony i wysłano wiadomość powitalną" +msgstr "Użytkownik został utworzony. Wiadomość powitalna została wysłana." #: apps/remix/app/components/forms/password.tsx msgid "User has no password." @@ -12878,7 +12898,7 @@ msgstr "Wyświetl rekordy DNS dla tej domeny" #: apps/remix/app/routes/_authenticated+/admin+/organisation-stats._index.tsx msgid "View, sort and filter monthly usage stats across organisations" -msgstr "Przeglądaj, sortuj i filtruj statystyki miesięcznego wykorzystania w organizacjach" +msgstr "Sprawdź miesięczne statystyki wykorzystania organizacji" #: apps/remix/app/components/embed/multisign/multi-sign-document-list.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -12925,7 +12945,7 @@ msgstr "Oczekiwanie na innych" #: packages/lib/server-only/document/send-pending-email.ts msgid "Waiting for others to complete signing." -msgstr "Oczekiwanie na innych, aby zakończyć podpisywanie." +msgstr "Oczekiwanie na zakończenie podpisywania przez innych." #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "Waiting for others to sign" @@ -12947,7 +12967,7 @@ msgstr "Chcesz mieć profil publiczny?" #: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx msgid "Warning, this email transport is currently being used by:" -msgstr "Uwaga, ten transport e-mail jest obecnie używany przez:" +msgstr "Ten dostawca poczty e-mail jest używany przez:" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx @@ -12976,7 +12996,7 @@ msgstr "Nie mogliśmy zaktualizować klucza dostępu. Spróbuj ponownie późnie #: apps/remix/app/utils/toast-error-messages.ts msgid "We couldn't convert this file. Please check it's a valid Word document or upload a PDF instead." -msgstr "Nie udało się przekonwertować tego pliku. Sprawdź, czy jest to prawidłowy dokument programu Word, lub zamiast tego prześlij plik PDF." +msgstr "Nie możemy przekonwertować tego pliku. Sprawdź, czy plik Word jest prawidłowy lub prześlij plik PDF." #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "We couldn't create a Stripe customer. Please try again." @@ -13006,7 +13026,7 @@ msgstr "Nie mogliśmy zaktualizować dostawcy. Spróbuj ponownie." #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "We encountered an error while attempting to delete this organisation. Please try again later." -msgstr "Wystąpił błąd podczas próby usunięcia tej organizacji. Spróbuj ponownie później." +msgstr "Wystąpił błąd podczas próby usunięcia organizacji. Spróbuj ponownie później." #: packages/lib/client-only/providers/envelope-editor-provider.tsx #: packages/lib/client-only/providers/envelope-editor-provider.tsx @@ -13158,7 +13178,7 @@ msgstr "Wystąpił nieznany błąd podczas próby zaktualizowania baneru. Sprób #: apps/remix/app/components/general/admin-email-blocklist-section.tsx msgid "We encountered an unknown error while attempting to update the email blocklist. Please try again later." -msgstr "Wystąpił nieznany błąd podczas próby zaktualizowania listy blokowanych adresów e-mail. Spróbuj ponownie później." +msgstr "Wystąpił nieznany błąd podczas próby zaktualizowania listy zablokowanych domen. Spróbuj ponownie później." #: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx msgid "We encountered an unknown error while attempting to update the envelope. Please try again later." @@ -13239,7 +13259,7 @@ msgstr "Nie mogliśmy Cię wylogować." #: apps/remix/app/routes/_recipient+/report.$token.tsx msgid "We were unable to report this sender at this time. Please try again later." -msgstr "Nie mogliśmy zgłosić tego nadawcy w tym momencie. Spróbuj ponownie później." +msgstr "Nie mogliśmy zgłosić nadawcę. Spróbuj ponownie później." #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx msgid "We were unable to set your public profile to public. Please try again." @@ -13325,7 +13345,7 @@ msgstr "Pusto" #: packages/email/template-components/template-document-pending.tsx msgid "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." -msgstr "Wciąż czekamy na podpisy pozostałych podpisujących.<0/>Powiadomimy Cię, gdy dokument będzie gotowy." +msgstr "Wciąż czekamy na podpisy pozostałych osób.<0/>Powiadomimy Cię, gdy dokument będzie gotowy." #: packages/email/templates/reset-password.tsx msgid "We've changed your password as you asked. You can now sign in with your new password." @@ -13333,15 +13353,15 @@ msgstr "Zmieniliśmy Twoje hasło. Możesz zalogować się za pomocą nowego has #: packages/email/templates/organisation-limit-alert.tsx msgid "We've noticed API activity on your account that exceeds the fair use limits of your current plan. As a precaution, new API activity has been temporarily paused pending review." -msgstr "Zauważyliśmy aktywność API na Twoim koncie, która przekracza limity uczciwego korzystania w Twoim obecnym planie. W ramach środka ostrożności nowa aktywność API została tymczasowo wstrzymana do czasu weryfikacji." +msgstr "Zauważyliśmy na Twoim koncie aktywność API, która przekracza limity dozwolonego użytkowania w ramach obecnego planu. Nowa aktywność API została tymczasowo wstrzymana do czasu przeprowadzenia weryfikacji." #: packages/email/templates/organisation-limit-alert.tsx msgid "We've noticed document activity on your account that exceeds the fair use limits of your current plan. As a precaution, new document activity has been temporarily paused pending review." -msgstr "Zauważyliśmy aktywność związaną z dokumentami na Twoim koncie, która przekracza limity uczciwego korzystania w Twoim obecnym planie. W ramach środka ostrożności nowa aktywność związana z dokumentami została tymczasowo wstrzymana do czasu weryfikacji." +msgstr "Zauważyliśmy na Twoim koncie aktywność dokumentów, która przekracza limity dozwolonego użytkowania w ramach obecnego planu. Nowa aktywność została tymczasowo wstrzymana do czasu przeprowadzenia weryfikacji." #: packages/email/templates/organisation-limit-alert.tsx msgid "We've noticed email sending activity on your account that exceeds the fair use limits of your current plan. As a precaution, new email activity has been temporarily paused pending review." -msgstr "Zauważyliśmy wysyłkę e‑maili z Twojego konta, która przekracza limity uczciwego korzystania w Twoim obecnym planie. W ramach środka ostrożności nowa aktywność e‑mailowa została tymczasowo wstrzymana do czasu weryfikacji." +msgstr "Zauważyliśmy na Twoim koncie aktywność wiadomości, która przekracza limity dozwolonego użytkowania w ramach obecnego planu. Nowa aktywność została tymczasowo wstrzymana do czasu przeprowadzenia weryfikacji." #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "We've sent a 6-digit verification code to your email. Please enter it below to complete the document." @@ -13440,7 +13460,7 @@ msgstr "Podpisujący mogą wybrać, kto powinien podpisać jako następny w kole #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "When enabled, users signing in via SSO for the first time will also receive their own personal organisation." -msgstr "Użytkownicy logujący się po raz pierwszy za pomocą logowania SSO otrzymają również własną osobistą organizację." +msgstr "Po włączeniu tej opcji użytkownicy logujący się po raz pierwszy za pomocą SSO otrzymają również własną osobistą organizację." #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "When you click continue, you will be prompted to add the first available authenticator on your system." @@ -13512,7 +13532,7 @@ msgstr "Zatwierdziłeś dokument" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "Zamierzasz anulować dokument <0>„{title}”" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13541,7 +13561,7 @@ msgstr "Zamierzasz usunąć organizację <0>{0}. Wszystkie dane powiązane z #: apps/remix/app/components/dialogs/admin-organisation-delete-dialog.tsx msgid "You are about to delete <0>{organisationName}. This action is not reversible. All teams will be removed and all documents will be orphaned to the deleted-account service account." -msgstr "Za chwilę usuniesz <0>{organisationName}. Tej operacji nie można cofnąć. Wszystkie zespoły zostaną usunięte, a wszystkie dokumenty zostaną przypisane do konta usługi usuniętego konta." +msgstr "Zamierzasz usunąć organizację <0>{organisationName}. Ta akcja jest nieodwracalna. Wszystkie zespoły zostaną usunięcie, a dokumenty zostaną przypisane do konta serwisowego usuniętego konta." #: apps/remix/app/components/dialogs/team-email-delete-dialog.tsx msgid "You are about to delete the following team email from <0>{teamName}." @@ -13691,11 +13711,11 @@ msgstr "Nie masz uprawnień do zresetowania weryfikacji dwuetapowej tego użytko #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "Uwierzytelniłeś się u dostawcy podpisu" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "Autoryzowałeś podpis zdalny" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13711,7 +13731,7 @@ msgstr "Możesz także skopiować i wkleić link do przeglądarki: {confirmation #: packages/email/template-components/template-admin-user-created.tsx msgid "You can also copy and paste this link into your browser: {resetPasswordLink} (link expires in 24 hours)" -msgstr "Możesz także skopiować i wkleić ten link do przeglądarki: {resetPasswordLink} (link wygaśnie za 24 godziny)" +msgstr "Możesz także skopiować i wkleić link do przeglądarki: {resetPasswordLink} (link wygaśnie za 24 godziny)" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx msgid "You can choose to enable or disable the profile for public view." @@ -13760,7 +13780,7 @@ msgstr "Możesz wyświetlić dokument i jego status, klikając przycisk poniżej #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "Anulowałeś dokument" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13790,15 +13810,15 @@ msgstr "Nie możesz edytować użytkownika zespołu, który ma wyższą rolę ni #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "Nie możesz usunąć użytkownika o roli wyższej niż Twoja." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "Nie możesz usunąć użytkowników zespołu, jeśli funkcja odziedziczenia użytkownika jest włączona." #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "Nie możesz usunąć właściciela organizacji z zespołu." #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -13915,7 +13935,7 @@ msgstr "Odrzucono zaproszenie dołączenia do organizacji <0>{0}." #: packages/lib/jobs/definitions/emails/send-signing-email.handler.ts #: packages/lib/server-only/document/resend-document.ts msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it." -msgstr "Sprawdź i {recipientActionVerb} dokument utworzony przez Ciebie." +msgstr "Sprawdź i {recipientActionVerb} dokument „{0}” utworzony przez Ciebie." #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx msgid "You have no webhooks yet. Your webhooks will be shown here once you create them." @@ -13948,7 +13968,7 @@ msgstr "Osiągnięto maksymalną miesięczną liczbę dokumentów. Zaktualizuj p #: apps/remix/app/utils/toast-error-messages.ts msgid "You have reached your document limit for this plan. Please upgrade your plan." -msgstr "Osiągnięto limit liczby dokumentów w tym planie. Zaktualizuj swój plan." +msgstr "Osiągnięto maksymalną liczbę dokumentów. Zaktualizuj plan." #: apps/remix/app/components/general/document/document-upload-button-legacy.tsx #: apps/remix/app/components/general/envelope/envelope-upload-button.tsx @@ -14182,7 +14202,7 @@ msgstr "Poprosiłeś o kod weryfikacyjny dla dokumentu" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "Poprosiłeś o podpis zdalny" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14395,7 +14415,7 @@ msgstr "Dokument został usunięty przez administratora!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "Dokument został ponownie wysłany." #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14492,7 +14512,7 @@ msgstr "Organizacja została utworzona." #: packages/email/templates/organisation-delete.tsx #: packages/email/templates/organisation-delete.tsx msgid "Your organisation has been deleted" -msgstr "Twoja organizacja została usunięta" +msgstr "Organizacja została usunięta" #: apps/remix/app/components/dialogs/organisation-delete-dialog.tsx msgid "Your organisation has been successfully deleted." @@ -14504,47 +14524,47 @@ msgstr "Organizacja została zaktualizowana." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation has exceeded a fair use limit" -msgstr "Twoja organizacja przekroczyła limit uczciwego użytkowania." +msgstr "Organizacja przekroczyła limit dozwolonego użytkowania" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation has exceeded a fair use limit. Please contact <0>support to review your plan's limits." -msgstr "Twoja organizacja przekroczyła limit uczciwego użytkowania. Skontaktuj się z <0>pomocą techniczną, aby przejrzeć limity swojego planu." +msgstr "Organizacja przekroczyła limit dozwolonego użytkowania. Skontaktuj się z <0>pomocą techniczną, aby przeprowadzić weryfikację." #: apps/remix/app/utils/toast-error-messages.ts msgid "Your organisation has reached its plan's fair use limit. Please contact your organisation administrator or support to continue." -msgstr "Twoja organizacja osiągnęła limit uczciwego użytkowania w swoim planie. Skontaktuj się z administratorem organizacji lub pomocą techniczną, aby kontynuować." +msgstr "Organizacja przekroczyła limit dozwolonego użytkowania. Skontaktuj się z administratorem organizacji." #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "Organizacja zbliża się do limitu dozwolonego użytkowania" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "Organizacja zbliża się do limitu dozwolonego użytkowania. Jeśli potrzebujesz wyższych limitów, skontaktuj się z <0>pomocą techniczną." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." -msgstr "Twoja organizacja generuje żądania API szybciej niż zwykle, więc część żądań jest tymczasowo ograniczana (throttling)." +msgstr "Twoja organizacja generuje żądania API szybciej niż zwykle, więc niektóre żądania zostały tymczasowo ograniczane." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating documents faster than normal, so some requests are being temporarily throttled." -msgstr "Twoja organizacja generuje dokumenty szybciej niż zwykle, więc część żądań jest tymczasowo ograniczana (throttling)." +msgstr "Twoja organizacja generuje dokumenty szybciej niż zwykle, więc niektóre żądania zostały tymczasowo ograniczane." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating emails faster than normal, so some requests are being temporarily throttled." -msgstr "Twoja organizacja generuje e‑maile szybciej niż zwykle, więc część żądań jest tymczasowo ograniczana (throttling)." +msgstr "Twoja organizacja generuje wiadomości szybciej niż zwykle, więc niektóre żądania zostały tymczasowo ograniczane." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "Organizacja zbliża się do limitu dozwolonego użytkowania dokumentów. Po przekroczeniu limitu tworzenie nowych dokumentów zostanie wstrzymane." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "Organizacja zbliża się do limitu dozwolonego użytkowania API. Po przekroczeniu limitu nowe żądania API zostaną wstrzymane." #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "Organizacja zbliża się do limitu dozwolonego użytkowania wiadomości. Po przekroczeniu limitu tworzenie nowych wiadomości zostanie wstrzymane." #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14594,27 +14614,27 @@ msgstr "To są Twoje kody odzyskiwania. Przechowuj je w bezpiecznym miejscu." #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "Złożyłeś podpis zdalny" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "Autoryzacja podpisu wygasła przed jego złożeniem. Spróbuj ponownie." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Certyfikat podpisu jest nieważny, wygasł lub brakuje w nim wymaganego klucza. Skontaktuj się z administratorem lub dostawcą podpisu." #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "Twoje uwierzytelnienie u dostawcy podpisu nie powiodło się" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Dostawca podpisu nie obsługuje wymaganego algorytmu podpisywania. Skontaktuj się z administratorem lub dostawcą podpisu." #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "Dostawca podpisu nie zwrócił żadnych użytecznych certyfikatów. Skontaktuj się z administratorem lub dostawcą podpisu." #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14643,7 +14663,7 @@ msgstr "Twój szablon został pomyślnie utworzony" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "Szablon został ponownie wysłany." #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14696,4 +14716,5 @@ msgstr "Twój kod weryfikacyjny:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" -msgstr "your-domain.com another-domain.com" +msgstr "twoja-domena.pl inna-domena.pl" + diff --git a/packages/lib/translations/zh/web.po b/packages/lib/translations/zh/web.po index d0b9a9337..e107bc848 100644 --- a/packages/lib/translations/zh/web.po +++ b/packages/lib/translations/zh/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: zh\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-06-12 07:37\n" +"PO-Revision-Date: 2026-06-22 13:53\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -51,7 +51,7 @@ msgstr "“{placeholderEmail}”代表“Team Name”邀请您签署“example d #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "\"{title}\" has been successfully cancelled" -msgstr "" +msgstr "“{title}”已成功取消" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "\"{title}\" has been successfully deleted" @@ -110,12 +110,12 @@ msgstr "{0, plural, other {# 条 CSS 规则在清理过程中被移除。}}" #. placeholder {1}: result.failedIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document cancelled.} other {# documents cancelled.}} {1, plural, one {# document could not be cancelled.} other {# documents could not be cancelled.}}" -msgstr "" +msgstr "{0, plural, other {已取消 # 份文档。}} {1, plural, other {有 # 份文档无法取消。}}" #. placeholder {0}: result.cancelledCount #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {# document has been cancelled.} other {# documents have been cancelled.}}" -msgstr "" +msgstr "{0, plural, other {已取消 # 份文档。}}" #. placeholder {0}: folder._count.documents #: apps/remix/app/components/general/folder/folder-card.tsx @@ -264,7 +264,7 @@ msgstr "{0, plural, other {我们在您的文档中找到了 # 位收件人。}} #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "{0, plural, one {You are about to cancel the selected document.} other {You are about to cancel # documents.}}" -msgstr "" +msgstr "{0, plural, other {您即将取消 # 份文档。}}" #. placeholder {0}: envelopeIds.length #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx @@ -505,15 +505,15 @@ msgstr "{user} 已批准该文档" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authenticated with the signing provider" -msgstr "" +msgstr "{user} 已通过签名服务提供商完成身份验证" #: packages/lib/utils/document-audit-logs.ts msgid "{user} authorised the remote signature" -msgstr "" +msgstr "{user} 已授权远程签名" #: packages/lib/utils/document-audit-logs.ts msgid "{user} cancelled the document" -msgstr "" +msgstr "{user} 已取消该文档" #: packages/lib/utils/document-audit-logs.ts msgid "{user} CC'd the document" @@ -580,7 +580,7 @@ msgstr "{user} 请求了此文档的双重验证 (2FA) 令牌" #: packages/lib/utils/document-audit-logs.ts msgid "{user} requested a remote signature" -msgstr "" +msgstr "{user} 已请求远程签名" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -655,11 +655,11 @@ msgstr "{user} 查看了此文档" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s remote signature was applied" -msgstr "" +msgstr "已应用 {user} 的远程签名" #: packages/lib/utils/document-audit-logs.ts msgid "{user}'s signing provider authentication failed" -msgstr "" +msgstr "{user} 在签名服务提供商处的身份验证失败" #: apps/remix/app/components/tables/internal-audit-log-table.tsx #: packages/lib/server-only/pdf/render-audit-logs.ts @@ -1302,11 +1302,11 @@ msgstr "为模板添加一个外部 ID。可用于在外部系统中标识。" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Add an optional reason for cancelling these documents" -msgstr "" +msgstr "为取消这些文档添加一个可选原因" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Add an optional reason for cancelling this document" -msgstr "" +msgstr "为取消此文档添加一个可选原因" #: apps/remix/app/components/general/envelope-editor/envelope-editor-upload-page.tsx msgid "Add and configure multiple documents" @@ -1768,7 +1768,7 @@ msgstr "自动签署文档时发生错误,部分字段可能未签署。请检 #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "An error occurred while cancelling the documents." -msgstr "" +msgstr "取消文档时发生错误。" #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "An error occurred while completing the document. Please try again." @@ -1907,11 +1907,11 @@ msgstr "发生错误。请稍后重试。" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation has exceeded their fair use limits" -msgstr "" +msgstr "某个组织已超出其公平使用限制" #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "An organisation is nearing their fair use limits" -msgstr "" +msgstr "某个组织即将达到其公平使用限制" #: apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx msgid "An organisation wants to create an account for you. Please review the details below." @@ -2039,7 +2039,7 @@ msgstr "API 令牌" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "API usage is approaching fair use limits" -msgstr "" +msgstr "API 使用量正接近公平使用限制" #: apps/remix/app/routes/_authenticated+/admin+/stats.tsx msgid "App Version" @@ -2047,17 +2047,17 @@ msgstr "应用版本" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Applying your signature" -msgstr "" +msgstr "正在应用您的签名" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Approaching fair use limit" -msgstr "" +msgstr "即将达到公平使用限制" #: packages/email/templates/organisation-limit-alert.tsx #: packages/email/templates/organisation-limit-alert.tsx #: packages/lib/jobs/definitions/emails/send-organisation-limit-alert-email.handler.ts msgid "Approaching Your Plan Limits" -msgstr "" +msgstr "即将达到您的套餐限制" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx @@ -2647,21 +2647,21 @@ msgstr "取消" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "Cancel document" -msgstr "" +msgstr "取消文档" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel documents" -msgstr "" +msgstr "取消文档" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Cancel Documents" -msgstr "" +msgstr "取消文档" #: apps/remix/app/components/general/document/document-status.tsx #: apps/remix/app/components/general/envelope-editor/envelope-editor-header.tsx #: packages/lib/constants/document.ts msgid "Cancelled" -msgstr "" +msgstr "已取消" #: apps/remix/app/components/dialogs/passkey-create-dialog.tsx msgid "Cancelled by user" @@ -4205,12 +4205,12 @@ msgstr "文档已批准" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/general/document/document-status.tsx msgid "Document cancelled" -msgstr "" +msgstr "文档已取消" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" msgid "Document cancelled" -msgstr "" +msgstr "文档已被取消" #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx #: apps/remix/app/routes/_recipient+/sign.$token+/_index.tsx @@ -4426,7 +4426,7 @@ msgstr "文档已重命名" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Document resent" -msgstr "" +msgstr "文档已重新发送" #: apps/remix/app/components/general/document/document-edit-form.tsx msgid "Document sent" @@ -4505,7 +4505,7 @@ msgstr "文档已上传" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Document usage is approaching fair use limits" -msgstr "" +msgstr "文档使用量正接近公平使用限制" #: packages/lib/utils/document-audit-logs.ts msgctxt "Audit log format" @@ -4569,7 +4569,7 @@ msgstr "与此信封相关的文档和资源。" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents cancelled" -msgstr "" +msgstr "文档已取消" #: apps/remix/app/components/tables/organisation-insights-table.tsx #: apps/remix/app/components/tables/organisation-insights-table.tsx @@ -4590,7 +4590,7 @@ msgstr "文档已删除" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Documents partially cancelled" -msgstr "" +msgstr "部分文档已取消" #: apps/remix/app/components/dialogs/envelopes-bulk-delete-dialog.tsx msgid "Documents partially deleted" @@ -5078,7 +5078,7 @@ msgstr "电子邮件传输方式" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Email usage is approaching fair use limits" -msgstr "" +msgstr "电子邮件使用量正接近公平使用限制" #: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx msgid "Email verification" @@ -6290,7 +6290,7 @@ msgstr "如果在收件箱中未找到确认链接,你可以在下方重新请 #: packages/email/templates/organisation-limit-alert.tsx msgid "If you expect to need higher limits, please contact support at {SUPPORT_EMAIL} and we will review your account." -msgstr "" +msgstr "如果您预计需要更高的限制,请通过 {SUPPORT_EMAIL} 联系支持,我们将对您的账户进行审核。" #: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx msgid "If your authenticator app does not support QR codes, you can use the following code instead:" @@ -7517,7 +7517,7 @@ msgstr "未找到签名字段" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "No signing credentials available" -msgstr "" +msgstr "没有可用的签名凭证" #: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx msgid "No Stripe customer attached" @@ -7595,7 +7595,7 @@ msgstr "不支持" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "Nothing cancelled" -msgstr "" +msgstr "未取消任何内容" #: apps/remix/app/components/tables/documents-table-empty-state.tsx #: apps/remix/app/components/tables/documents-table-empty-state.tsx @@ -7704,7 +7704,7 @@ msgstr "只允许上传 PDF 文件" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Only pending documents you have permission to manage will be cancelled." -msgstr "" +msgstr "只有你有权限管理的待处理文档会被取消。" #: apps/remix/app/components/general/generic-error-layout.tsx #: apps/remix/app/components/general/generic-error-layout.tsx @@ -8298,7 +8298,7 @@ msgstr "请联系站点所有者以获取进一步帮助。" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Please don't close this tab. The signing provider is finalising your signature." -msgstr "" +msgstr "请不要关闭此标签页。签名服务提供商正在完成您的签名。" #: apps/remix/app/components/forms/token.tsx msgid "Please enter a meaningful name for your token. This will help you identify it later." @@ -8672,7 +8672,7 @@ msgstr "原因" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Reason (optional)" -msgstr "" +msgstr "原因(可选)" #: packages/email/template-components/template-document-cancel.tsx msgid "Reason for cancellation: {cancellationReason}" @@ -8696,7 +8696,7 @@ msgstr "签署此字段需要重新验证身份" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Reauthorise and retry" -msgstr "" +msgstr "重新授权并重试" #: packages/ui/components/recipient/recipient-role-select.tsx msgid "Receives copy" @@ -8741,11 +8741,11 @@ msgstr "收件人已批准此文档" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authenticated with the signing provider" -msgstr "" +msgstr "收件人已通过签名服务提供商完成身份验证" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient authorised the remote signature" -msgstr "" +msgstr "收件人已授权远程签名" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient CC'd the document" @@ -8777,6 +8777,10 @@ msgstr "收件人 ID:" msgid "Recipient rejected the document" msgstr "收件人已拒绝此文档" +#: packages/lib/utils/document-audit-logs.ts +msgid "Recipient rejected the document externally" +msgstr "收件人在外部拒绝了该文档" + #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient removed" msgstr "收件人已移除" @@ -8791,7 +8795,7 @@ msgstr "收件人请求了此文档的双重验证 (2FA) 令牌" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient requested a remote signature" -msgstr "" +msgstr "收件人已请求远程签名" #: apps/remix/app/components/general/admin-global-settings-section.tsx msgid "Recipient signed" @@ -8832,11 +8836,11 @@ msgstr "收件人已查看此文档" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's remote signature was applied" -msgstr "" +msgstr "已应用收件人的远程签名" #: packages/lib/utils/document-audit-logs.ts msgid "Recipient's signing provider authentication failed" -msgstr "" +msgstr "收件人的签名服务提供商身份验证失败" #: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx #: apps/remix/app/components/general/document/document-page-view-recipients.tsx @@ -8864,7 +8868,7 @@ msgstr "发送后,收件人将能够签署此文档" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "Recipients will be notified that the document was cancelled" -msgstr "" +msgstr "收件人将收到通知,告知该文档已被取消" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "Recipients will still retain their copy of the document" @@ -10111,7 +10115,7 @@ msgstr "签署中" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing algorithm is not supported" -msgstr "" +msgstr "不支持该签名算法" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10120,7 +10124,7 @@ msgstr "签署证书" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Signing certificate is invalid" -msgstr "" +msgstr "签名证书无效" #: apps/remix/app/routes/_internal+/[__htmltopdf]+/certificate.tsx #: packages/lib/server-only/pdf/render-certificate.ts @@ -10138,7 +10142,7 @@ msgstr "签署截止日期已过期" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Signing failed" -msgstr "" +msgstr "签名失败" #: apps/remix/app/components/embed/embed-document-signing-page-v1.tsx msgid "Signing for" @@ -10269,7 +10273,7 @@ msgstr "出错了" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Something went wrong while applying your signature. Please retry." -msgstr "" +msgstr "应用您的签名时出现问题。请重试。" #. placeholder {0}: data.teamName #: apps/remix/app/routes/_unauthenticated+/team.verify.email.$token.tsx @@ -10294,7 +10298,7 @@ msgstr "加载通行密钥时出错。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Something went wrong while preparing the remote signature. Please try again." -msgstr "" +msgstr "在准备远程签名时出现问题。请重试。" #: packages/lib/constants/pdf-viewer-i18n.ts msgid "Something went wrong while rendering the document, please try again or contact our support." @@ -10869,7 +10873,7 @@ msgstr "模板已重命名" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Template resent" -msgstr "" +msgstr "模板已重新发送" #: apps/remix/app/components/general/template/template-edit-form.tsx msgid "Template saved" @@ -11087,12 +11091,29 @@ msgstr "此文档的所有权已代表 {1} 委派给 {0}" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The document signing process will be stopped" -msgstr "" +msgstr "文档签署流程将被终止" #: apps/remix/app/utils/toast-error-messages.ts msgid "The document was created but could not be sent to recipients." msgstr "文档已创建,但无法发送给收件人。" +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of {user}" +msgstr "该文档已被 {onBehalfOf} 在外部拒绝,{onBehalfOf} 代表 {user} 执行了此操作" + +#: packages/lib/utils/document-audit-logs.ts +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally by {onBehalfOf} on behalf of the recipient" +msgstr "该文档已被 {onBehalfOf} 在外部拒绝,{onBehalfOf} 代表收件人执行了此操作" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of {user}" +msgstr "该文档已在外部被拒绝,代表 {user} 执行" + +#: packages/lib/utils/document-audit-logs.ts +msgid "The document was rejected externally on behalf of the recipient" +msgstr "该文档已在外部被拒绝,代表收件人执行" + #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "The document will be hidden from your account" msgstr "该文档将在你的账号中被隐藏" @@ -11103,7 +11124,7 @@ msgstr "如果勾选,将立即把文档发送给收件人。" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "The document will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "该文档将保留在你的仪表盘中,并标记为“已取消”" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._layout.tsx msgid "The document you are looking for could not be found." @@ -11120,7 +11141,7 @@ msgstr "文档名称" #: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx msgid "The documents will remain in your dashboard marked as Cancelled" -msgstr "" +msgstr "这些文档将保留在你的仪表盘中,并标记为“已取消”" #: apps/remix/app/components/forms/email-preferences-form.tsx msgid "The email address which will show up in the \"Reply To\" field in emails" @@ -11316,7 +11337,7 @@ msgstr "签署链接已复制到剪贴板。" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "The signing provider did not respond in time. Please retry." -msgstr "" +msgstr "签名服务提供商未在规定时间内响应。请重试。" #: packages/email/templates/recipient-expired.tsx msgid "The signing window for \"{recipientName}\" on document \"{documentName}\" has expired." @@ -11432,7 +11453,7 @@ msgstr "目前没有活动草稿。你可以上传文档开始创建草稿。" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no cancelled documents. Documents you cancel will remain here as a record that they were distributed." -msgstr "" +msgstr "目前没有已取消的文档。你取消的文档会保留在这里,作为其曾被分发的记录。" #: apps/remix/app/components/tables/documents-table-empty-state.tsx msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." @@ -11501,7 +11522,7 @@ msgstr "此文档无法更改" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "This document could not be cancelled at this time. Please try again." -msgstr "" +msgstr "当前无法取消此文档。请重试。" #: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx msgid "This document could not be deleted at this time. Please try again." @@ -11526,7 +11547,7 @@ msgstr "此文档已发送给该收件人,您不再能编辑该收件人。" #: apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.$id._index.tsx msgid "This document has been cancelled" -msgstr "" +msgstr "此文档已被取消" #: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx msgid "This document has been cancelled by the owner and is no longer available for others to sign." @@ -11653,7 +11674,7 @@ msgstr "此链接无效或已过期。请联系你的团队重新发送验证邮 #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "This member is inherited from a group and cannot be removed from the team directly." -msgstr "" +msgstr "此成员是从某个群组继承的,无法直接从团队中移除。" #: apps/remix/app/components/general/organisations/organisation-billing-banner.tsx msgid "This organisation is awaiting payment. Complete checkout to unlock it." @@ -12213,7 +12234,7 @@ msgstr "无法登录" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Unable to start the signing flow" -msgstr "" +msgstr "无法启动签名流程" #: apps/remix/app/components/general/document-signing/document-signing-auth-2fa.tsx #: apps/remix/app/components/general/document-signing/document-signing-auth-passkey.tsx @@ -13510,7 +13531,7 @@ msgstr "你已批准此文档" #: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx msgid "You are about to cancel <0>\"{title}\"" -msgstr "" +msgstr "你即将取消 <0>\"{title}\"" #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "You are about to complete approving the following document" @@ -13689,11 +13710,11 @@ msgstr "您无权为此用户重置双重身份验证。" #: packages/lib/utils/document-audit-logs.ts msgid "You authenticated with the signing provider" -msgstr "" +msgstr "您已通过签名服务提供商完成身份验证" #: packages/lib/utils/document-audit-logs.ts msgid "You authorised the remote signature" -msgstr "" +msgstr "您已授权远程签名" #: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx msgid "You can add fields manually in the editor." @@ -13758,7 +13779,7 @@ msgstr "您可以点击下方按钮查看文档及其状态。" #: packages/lib/utils/document-audit-logs.ts msgid "You cancelled the document" -msgstr "" +msgstr "你已取消该文档" #: apps/remix/app/components/general/envelope-editor/envelope-editor-recipient-form.tsx #: packages/ui/primitives/document-flow/add-signers.tsx @@ -13788,15 +13809,15 @@ msgstr "你不能修改角色高于你的团队成员。" #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove a member with a role higher than your own." -msgstr "" +msgstr "你无法移除角色高于你自己的成员。" #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove members from this team while the inherit member feature is enabled." -msgstr "" +msgstr "在启用继承成员功能时,你无法从该团队中移除成员。" #: apps/remix/app/components/dialogs/team-member-delete-dialog.tsx msgid "You cannot remove the organisation owner from the team." -msgstr "" +msgstr "你无法将组织所有者从团队中移除。" #: packages/ui/primitives/document-dropzone.tsx #: packages/ui/primitives/document-upload-button.tsx @@ -14180,7 +14201,7 @@ msgstr "你请求了此文档的双重验证 (2FA) 令牌" #: packages/lib/utils/document-audit-logs.ts msgid "You requested a remote signature" -msgstr "" +msgstr "您已请求远程签名" #. placeholder {0}: data.recipientEmail #: packages/lib/utils/document-audit-logs.ts @@ -14393,7 +14414,7 @@ msgstr "您的文档已被管理员删除!" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your document has been resent successfully." -msgstr "" +msgstr "您的文档已成功重新发送。" #: apps/remix/app/components/dialogs/envelope-save-as-template-dialog.tsx msgid "Your document has been saved as a template." @@ -14514,11 +14535,11 @@ msgstr "您的组织已达到当前方案的合理使用限制。要继续使用 #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit" -msgstr "" +msgstr "您的组织正接近公平使用额度上限。" #: apps/remix/app/components/general/organisations/organisation-quota-banner.tsx msgid "Your organisation is approaching a fair use limit. If you expect to need higher limits, please contact <0>support to review your plan's limits." -msgstr "" +msgstr "您的组织正接近公平使用额度上限。如果您预计需要更高的额度,请联系<0>支持以评估您当前方案的额度。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is generating API requests faster than normal, so some requests are being temporarily throttled." @@ -14534,15 +14555,15 @@ msgstr "您的组织正在以高于正常的速度发送邮件,因此部分请 #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for creating documents on your current plan. Once the limit is reached, new document activity will be temporarily paused." -msgstr "" +msgstr "您的组织在当前方案下创建文档的使用量正接近公平使用额度上限。一旦达到上限,新的文档相关活动将被暂时暂停。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for making API requests on your current plan. Once the limit is reached, new API activity will be temporarily paused." -msgstr "" +msgstr "您的组织在当前方案下发起 API 请求的使用量正接近公平使用额度上限。一旦达到上限,新的 API 活动将被暂时暂停。" #: packages/email/templates/organisation-limit-alert.tsx msgid "Your organisation is nearing its fair use limits for sending email on your current plan. Once the limit is reached, new email activity will be temporarily paused." -msgstr "" +msgstr "您的组织在当前方案下发送电子邮件的使用量正接近公平使用额度上限。一旦达到上限,新的电子邮件活动将被暂时暂停。" #: apps/remix/app/components/forms/password.tsx #: apps/remix/app/components/forms/reset-password.tsx @@ -14592,27 +14613,27 @@ msgstr "你的恢复代码列在下方。请妥善保存。" #: packages/lib/utils/document-audit-logs.ts msgid "Your remote signature was applied" -msgstr "" +msgstr "您的远程签名已应用" #: apps/remix/app/components/general/document-signing/csc-recipient-signing-in-progress-page.tsx msgid "Your signing authorisation expired before the signature could be applied. Please reauthorise to retry." -msgstr "" +msgstr "在应用签名前,您的签名授权已过期。请重新授权后重试。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing certificate is invalid, expired, or missing a required key. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "您的签名证书无效、已过期或缺少必需的密钥。请联系您的管理员或签名服务提供商以获取帮助。" #: packages/lib/utils/document-audit-logs.ts msgid "Your signing provider authentication failed" -msgstr "" +msgstr "您的签名服务提供商身份验证失败" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider does not advertise a signing algorithm this document accepts. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "您的签名服务提供商未提供此文档可接受的签名算法信息。请联系您的管理员或签名服务提供商以获取帮助。" #: apps/remix/app/components/general/document-signing/csc-recipient-blocked-page.tsx msgid "Your signing provider returned no usable credentials for this account. Contact your administrator or signing provider for assistance." -msgstr "" +msgstr "您的签名服务提供商未为此账户返回任何可用凭据。请联系您的管理员或签名服务提供商以获取帮助。" #: apps/remix/app/components/embed/embed-recipient-expired.tsx msgid "Your signing window for this document has expired. Please contact the sender for a new invitation." @@ -14641,7 +14662,7 @@ msgstr "您的模板已成功创建" #: apps/remix/app/components/dialogs/envelope-redistribute-dialog.tsx msgid "Your template has been resent successfully." -msgstr "" +msgstr "您的模板已成功重新发送。" #: apps/remix/app/components/dialogs/envelope-duplicate-dialog.tsx msgid "Your template has been successfully duplicated." @@ -14695,3 +14716,4 @@ msgstr "您的验证码:" #: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx msgid "your-domain.com another-domain.com" msgstr "your-domain.com another-domain.com" + diff --git a/packages/lib/types/document-audit-logs.ts b/packages/lib/types/document-audit-logs.ts index b1ca3f040..b81ff0530 100644 --- a/packages/lib/types/document-audit-logs.ts +++ b/packages/lib/types/document-audit-logs.ts @@ -560,12 +560,24 @@ export const ZDocumentAuditLogEventDocumentRecipientCompleteSchema = z.object({ }); /** - * Event: Document recipient completed the document (the recipient has fully actioned and completed their required steps for the document). + * Event: Document recipient rejected the document. */ export const ZDocumentAuditLogEventDocumentRecipientRejectedSchema = z.object({ type: z.literal(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED), data: ZBaseRecipientDataSchema.extend({ reason: z.string(), + /** + * Whether the rejection was recorded externally on behalf of the recipient + * via the API, rather than by the recipient directly on the platform. + */ + isExternal: z.boolean().optional(), + /** + * The team member the external rejection was recorded on behalf of, when + * the API caller elected a specific member to attribute the action to. + * Absent when the rejection is attributed to the API user/token itself. + */ + onBehalfOfUserEmail: z.string().optional(), + onBehalfOfUserName: z.string().nullable().optional(), }), }); diff --git a/packages/lib/utils/document-audit-logs.ts b/packages/lib/utils/document-audit-logs.ts index 66659f081..400b8dc53 100644 --- a/packages/lib/utils/document-audit-logs.ts +++ b/packages/lib/utils/document-audit-logs.ts @@ -509,11 +509,31 @@ export const formatDocumentAuditLogAction = (i18n: I18n, auditLog: TDocumentAudi user: msg`${user} completed their task`, })); }) - .with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED }, () => ({ - anonymous: msg`Recipient rejected the document`, - you: msg`You rejected the document`, - user: msg`${user} rejected the document`, - })) + .with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_RECIPIENT_REJECTED }, ({ data }) => { + if (data.isExternal) { + const onBehalfOf = data.onBehalfOfUserName || data.onBehalfOfUserEmail; + + if (onBehalfOf) { + return { + anonymous: msg`The document was rejected externally by ${onBehalfOf} on behalf of the recipient`, + you: msg`The document was rejected externally by ${onBehalfOf} on behalf of the recipient`, + user: msg`The document was rejected externally by ${onBehalfOf} on behalf of ${user}`, + }; + } + + return { + anonymous: msg`Recipient rejected the document externally`, + you: msg`The document was rejected externally on behalf of the recipient`, + user: msg`The document was rejected externally on behalf of ${user}`, + }; + } + + return { + anonymous: msg`Recipient rejected the document`, + you: msg`You rejected the document`, + user: msg`${user} rejected the document`, + }; + }) .with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_ACCESS_AUTH_2FA_REQUESTED }, () => ({ anonymous: msg`Recipient requested a 2FA token for the document`, you: msg`You requested a 2FA token for the document`, diff --git a/packages/lib/utils/fields-overlap.ts b/packages/lib/utils/fields-overlap.ts new file mode 100644 index 000000000..9b753594b --- /dev/null +++ b/packages/lib/utils/fields-overlap.ts @@ -0,0 +1,123 @@ +/** + * Utilities for detecting overlapping fields in the envelope editor. + * + * Fields can be unintentionally placed on top of each other during the authoring + * process. This does not render well in the editor and behaves unpredictably during + * signing (fields can sit on top of one another depending on their state), so we warn + * the user when a significant overlap is detected. + * + * All positional values are expected as percentages (0-100) of the page dimensions, + * matching how fields are stored in the editor and database. + */ + +/** + * The minimum proportion (0-1) of the smaller field's area that must be covered by + * another field for the pair to be considered an "overlap" worth warning about. + * + * A small amount of overlap (e.g. touching edges) is common and harmless, so we only + * flag pairs where one field covers at least this fraction of the other. + */ +export const FIELD_OVERLAP_THRESHOLD = 0.4; + +type OverlapFieldInput = { + /** + * A stable identifier used to reference the field in the returned pairs. + * Use the client-side `formId` in the editor, or the database `id` elsewhere. + */ + id: string | number; + envelopeItemId: string; + page: number; + positionX: number; + positionY: number; + width: number; + height: number; +}; + +export type TFieldOverlapPair = { + fieldA: T; + fieldB: T; + /** + * The proportion (0-1) of the smaller field's area covered by the intersection. + */ + overlapRatio: number; +}; + +/** + * Returns the area of the intersection between two fields, in squared percentage units. + * + * Returns 0 when the fields do not intersect. + */ +const getIntersectionArea = (fieldA: OverlapFieldInput, fieldB: OverlapFieldInput): number => { + const overlapX = Math.max( + 0, + Math.min(fieldA.positionX + fieldA.width, fieldB.positionX + fieldB.width) - + Math.max(fieldA.positionX, fieldB.positionX), + ); + + const overlapY = Math.max( + 0, + Math.min(fieldA.positionY + fieldA.height, fieldB.positionY + fieldB.height) - + Math.max(fieldA.positionY, fieldB.positionY), + ); + + return overlapX * overlapY; +}; + +/** + * Detects pairs of fields that overlap by at least the given threshold. + * + * Two fields are only compared when they share the same envelope item and page. + * The overlap ratio is measured against the smaller of the two fields, so a small + * field that is mostly covered by a large field is still flagged. + * + * @param fields The fields to check. Positional values must be percentages (0-100). + * @param threshold The minimum overlap ratio (0-1) to flag. Defaults to {@link FIELD_OVERLAP_THRESHOLD}. + */ +export const getOverlappingFieldPairs = ( + fields: T[], + threshold: number = FIELD_OVERLAP_THRESHOLD, +): TFieldOverlapPair[] => { + const pairs: TFieldOverlapPair[] = []; + + for (let i = 0; i < fields.length; i++) { + for (let j = i + 1; j < fields.length; j++) { + const fieldA = fields[i]; + const fieldB = fields[j]; + + if (fieldA.envelopeItemId !== fieldB.envelopeItemId || fieldA.page !== fieldB.page) { + continue; + } + + const fieldAArea = fieldA.width * fieldA.height; + const fieldBArea = fieldB.width * fieldB.height; + + if (fieldAArea <= 0 || fieldBArea <= 0) { + continue; + } + + const intersectionArea = getIntersectionArea(fieldA, fieldB); + + if (intersectionArea <= 0) { + continue; + } + + const overlapRatio = intersectionArea / Math.min(fieldAArea, fieldBArea); + + if (overlapRatio >= threshold) { + pairs.push({ fieldA, fieldB, overlapRatio }); + } + } + } + + return pairs; +}; + +/** + * Returns true if any pair of fields overlaps by at least the given threshold. + */ +export const hasOverlappingFields = ( + fields: T[], + threshold: number = FIELD_OVERLAP_THRESHOLD, +): boolean => { + return getOverlappingFieldPairs(fields, threshold).length > 0; +}; diff --git a/packages/prisma/migrations/20260622120000_add_recipient_reminder_count/migration.sql b/packages/prisma/migrations/20260622120000_add_recipient_reminder_count/migration.sql new file mode 100644 index 000000000..ad61885f3 --- /dev/null +++ b/packages/prisma/migrations/20260622120000_add_recipient_reminder_count/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Recipient" ADD COLUMN "reminderCount" INTEGER NOT NULL DEFAULT 0; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 3cafdb55f..06be2eed9 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -642,6 +642,7 @@ model Recipient { signedAt DateTime? lastReminderSentAt DateTime? nextReminderAt DateTime? + reminderCount Int @default(0) authOptions Json? /// [RecipientAuthOptions] @zod.custom.use(ZRecipientAuthOptionsSchema) signingOrder Int? /// @zod.number.describe("The order in which the recipient should sign the document. Only works if the document is set to sequential signing.") rejectionReason String? diff --git a/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.ts b/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.ts new file mode 100644 index 000000000..f56971bdb --- /dev/null +++ b/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.ts @@ -0,0 +1,65 @@ +import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; +import { rejectDocumentOnBehalfOf } from '@documenso/lib/server-only/document/reject-document-on-behalf-of'; +import { getEnvelopeWhereInput } from '@documenso/lib/server-only/envelope/get-envelope-by-id'; +import { prisma } from '@documenso/prisma'; +import { EnvelopeType } from '@prisma/client'; + +import { authenticatedProcedure } from '../../trpc'; +import { + rejectEnvelopeRecipientOnBehalfOfMeta, + ZRejectEnvelopeRecipientOnBehalfOfRequestSchema, + ZRejectEnvelopeRecipientOnBehalfOfResponseSchema, +} from './reject-envelope-recipient-on-behalf-of.types'; + +export const rejectEnvelopeRecipientOnBehalfOfRoute = authenticatedProcedure + .meta(rejectEnvelopeRecipientOnBehalfOfMeta) + .input(ZRejectEnvelopeRecipientOnBehalfOfRequestSchema) + .output(ZRejectEnvelopeRecipientOnBehalfOfResponseSchema) + .mutation(async ({ input, ctx }) => { + const { teamId, user } = ctx; + const { envelopeId, recipientId, reason, actAsEmail } = input; + + ctx.logger.info({ + input: { + envelopeId, + recipientId, + }, + }); + + // This is an external-only action: it must only be reachable through the + // public API, never the internal app TRPC handler. + if (ctx.metadata.source !== 'apiV2') { + throw new AppError(AppErrorCode.UNAUTHORIZED, { + message: 'This route is only accessible via the public API', + }); + } + + await rejectDocumentOnBehalfOf({ + envelopeId, + recipientId, + userId: user.id, + teamId, + reason, + actAsEmail, + requestMetadata: ctx.metadata, + }); + + const { envelopeWhereInput } = await getEnvelopeWhereInput({ + id: { type: 'envelopeId', id: envelopeId }, + type: EnvelopeType.DOCUMENT, + userId: user.id, + teamId, + }); + + const recipient = await prisma.recipient.findFirstOrThrow({ + where: { + id: recipientId, + envelope: envelopeWhereInput, + }, + include: { + fields: true, + }, + }); + + return recipient; + }); diff --git a/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.types.ts b/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.types.ts new file mode 100644 index 000000000..7f96aaefe --- /dev/null +++ b/packages/trpc/server/envelope-router/envelope-recipients/reject-envelope-recipient-on-behalf-of.types.ts @@ -0,0 +1,35 @@ +import { ZEnvelopeRecipientSchema } from '@documenso/lib/types/recipient'; +import { zEmail } from '@documenso/lib/utils/zod'; +import { z } from 'zod'; + +import type { TrpcRouteMeta } from '../../trpc'; + +export const rejectEnvelopeRecipientOnBehalfOfMeta: TrpcRouteMeta = { + openapi: { + method: 'POST', + path: '/envelope/recipient/{recipientId}/reject', + summary: 'Reject envelope recipient on behalf of', + description: + 'Records a rejection on behalf of a recipient. Use this when a recipient has declined to ' + + 'sign outside of the platform. The rejection is flagged as external in the document audit ' + + 'log. By default the action is attributed to the API user; supply `actAsEmail` to attribute ' + + 'it to a specific team member.', + tags: ['Envelope Recipients'], + }, +}; + +export const ZRejectEnvelopeRecipientOnBehalfOfRequestSchema = z.object({ + envelopeId: z.string().describe('The ID of the envelope the recipient belongs to.'), + recipientId: z.number().describe('The ID of the recipient to reject the document on behalf of.'), + reason: z.string().min(1).describe('The reason the recipient rejected the document.'), + actAsEmail: zEmail() + .optional() + .describe('The email of the team member to attribute the rejection to. Defaults to the API user when omitted.'), +}); + +export const ZRejectEnvelopeRecipientOnBehalfOfResponseSchema = ZEnvelopeRecipientSchema; + +export type TRejectEnvelopeRecipientOnBehalfOfRequest = z.infer; +export type TRejectEnvelopeRecipientOnBehalfOfResponse = z.infer< + typeof ZRejectEnvelopeRecipientOnBehalfOfResponseSchema +>; diff --git a/packages/trpc/server/envelope-router/router.ts b/packages/trpc/server/envelope-router/router.ts index 8aa725014..1dd54e436 100644 --- a/packages/trpc/server/envelope-router/router.ts +++ b/packages/trpc/server/envelope-router/router.ts @@ -22,6 +22,7 @@ import { updateEnvelopeFieldsRoute } from './envelope-fields/update-envelope-fie import { createEnvelopeRecipientsRoute } from './envelope-recipients/create-envelope-recipients'; import { deleteEnvelopeRecipientRoute } from './envelope-recipients/delete-envelope-recipient'; import { getEnvelopeRecipientRoute } from './envelope-recipients/get-envelope-recipient'; +import { rejectEnvelopeRecipientOnBehalfOfRoute } from './envelope-recipients/reject-envelope-recipient-on-behalf-of'; import { reportRecipientRoute } from './envelope-recipients/report-recipient'; import { updateEnvelopeRecipientsRoute } from './envelope-recipients/update-envelope-recipients'; import { findEnvelopeAuditLogsRoute } from './find-envelope-audit-logs'; @@ -70,6 +71,7 @@ export const envelopeRouter = router({ delete: deleteEnvelopeRecipientRoute, set: setEnvelopeRecipientsRoute, report: reportRecipientRoute, + rejectOnBehalfOf: rejectEnvelopeRecipientOnBehalfOfRoute, }, field: { get: getEnvelopeFieldRoute,