Compare commits

..

5 Commits

Author SHA1 Message Date
Crowdin Bot 66ba94d2ae chore: add translations 2026-07-20 20:30:31 +00:00
Catalin Pit cc5ef3df16 feat: add branding preferences reset dialog (#3032) 2026-07-20 16:40:25 +09:00
Catalin Pit 4b72e7d546 feat: add document preferences reset dialog (#3039) 2026-07-20 16:02:39 +09:00
David Nguyen ba0dead96f fix: render error messages for invalid templates (#3088)
Currently direct templates can be created without the required
signatures fields for signers.

This means that the document can be fully signed by everyone but will
ultimately fail the sealing step which leaves the document in an
unrecoverable state.
2026-07-20 16:57:38 +10:00
Lucas Smith 40472bc26c fix: react hydration errors (#3099)
Move PostHog init out of the React tree so the client tree matches
the server render (mismatched useIds could abort hydration, leaving
dead event handlers). Also expose the CSP nonce so Radix scroll-lock
styles aren't blocked.
2026-07-16 12:21:43 +10:00
46 changed files with 3319 additions and 3451 deletions
@@ -0,0 +1,119 @@
import { Alert, AlertDescription } from '@documenso/ui/primitives/alert';
import { Button } from '@documenso/ui/primitives/button';
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@documenso/ui/primitives/dialog';
import { Trans } from '@lingui/react/macro';
import { useState } from 'react';
export type BrandingPreferencesResetDialogProps = {
hasAdvancedBranding: boolean;
isSubmitting: boolean;
onReset: () => Promise<void>;
trigger?: React.ReactNode;
};
export const BrandingPreferencesResetDialog = ({
hasAdvancedBranding,
isSubmitting,
onReset,
trigger,
}: BrandingPreferencesResetDialogProps) => {
const [open, setOpen] = useState(false);
const [isResetting, setIsResetting] = useState(false);
const isLoading = isSubmitting || isResetting;
const handleResetToDefaults = async () => {
setIsResetting(true);
try {
await onReset();
setOpen(false);
} catch {
// The submit handler surfaces its own error toast. Keep the dialog open
// so the user can retry.
} finally {
setIsResetting(false);
}
};
return (
<Dialog open={open} onOpenChange={(value) => !isLoading && setOpen(value)}>
<DialogTrigger asChild>
{trigger ?? (
<Button variant="destructive" type="button" size="sm" disabled={isLoading}>
<Trans>Reset to defaults</Trans>
</Button>
)}
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>
<Trans>Reset branding preferences</Trans>
</DialogTitle>
<DialogDescription>
<Trans>
This will reset all branding preferences to their default values and save the changes immediately.
</Trans>
</DialogDescription>
</DialogHeader>
<Alert variant="warning">
<AlertDescription>
<p>
<Trans>Once confirmed, the following will be reset:</Trans>
</p>
<ul className="mt-0.5 list-inside list-disc">
<li>
<Trans>Custom branding enabled setting</Trans>
</li>
<li>
<Trans>Branding logo</Trans>
</li>
<li>
<Trans>Brand website and brand details</Trans>
</li>
<li>
<Trans>Brand colours, including background, foreground, primary, and border colours</Trans>
</li>
{hasAdvancedBranding && (
<>
<li>
<Trans>Border radius</Trans>
</li>
<li>
<Trans>Custom CSS</Trans>
</li>
</>
)}
</ul>
</AlertDescription>
</Alert>
<DialogFooter>
<DialogClose asChild>
<Button type="button" variant="secondary" disabled={isLoading}>
<Trans>Cancel</Trans>
</Button>
</DialogClose>
<Button type="button" variant="destructive" loading={isLoading} onClick={() => void handleResetToDefaults()}>
<Trans>Reset to defaults</Trans>
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
};
@@ -0,0 +1,141 @@
import { Alert, AlertDescription } from '@documenso/ui/primitives/alert';
import { Button } from '@documenso/ui/primitives/button';
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@documenso/ui/primitives/dialog';
import { Trans } from '@lingui/react/macro';
import { useState } from 'react';
export type DocumentPreferencesResetDialogProps = {
isSubmitting: boolean;
onReset: () => Promise<void>;
showAiFeatures?: boolean;
showDocumentVisibility?: boolean;
showIncludeSenderDetails?: boolean;
};
export const DocumentPreferencesResetDialog = ({
isSubmitting,
onReset,
showAiFeatures = false,
showDocumentVisibility = false,
showIncludeSenderDetails = false,
}: DocumentPreferencesResetDialogProps) => {
const [open, setOpen] = useState(false);
const [isResetting, setIsResetting] = useState(false);
const isLoading = isSubmitting || isResetting;
const handleResetToDefaults = async () => {
setIsResetting(true);
try {
await onReset();
setOpen(false);
} catch {
// The submit handler surfaces its own error toast. Keep the dialog open
// so the user can retry.
} finally {
setIsResetting(false);
}
};
return (
<Dialog open={open} onOpenChange={(value) => !isLoading && setOpen(value)}>
<DialogTrigger asChild>
<Button variant="destructive" type="button" size="sm" disabled={isLoading}>
<Trans>Reset to defaults</Trans>
</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>
<Trans>Reset document preferences</Trans>
</DialogTitle>
<DialogDescription>
<Trans>
This will reset all document preferences to their default values and save the changes immediately.
</Trans>
</DialogDescription>
</DialogHeader>
<Alert variant="warning">
<AlertDescription>
<p>
<Trans>Once confirmed, the following will be reset:</Trans>
</p>
<ul className="mt-0.5 list-inside list-disc">
{showDocumentVisibility && (
<li>
<Trans>Default document visibility</Trans>
</li>
)}
<li>
<Trans>Default document language</Trans>
</li>
<li>
<Trans>Default date format</Trans>
</li>
<li>
<Trans>Default time zone</Trans>
</li>
<li>
<Trans>Default signature settings</Trans>
</li>
{showIncludeSenderDetails && (
<li>
<Trans>Send on behalf of team</Trans>
</li>
)}
<li>
<Trans>Include the signing certificate in the document</Trans>
</li>
<li>
<Trans>Include the audit logs in the document</Trans>
</li>
<li>
<Trans>Default recipients</Trans>
</li>
<li>
<Trans>Delegate document ownership</Trans>
</li>
<li>
<Trans>Default envelope expiration</Trans>
</li>
<li>
<Trans>Default signing reminders</Trans>
</li>
{showAiFeatures && (
<li>
<Trans>AI features</Trans>
</li>
)}
</ul>
</AlertDescription>
</Alert>
<DialogFooter>
<DialogClose asChild>
<Button type="button" variant="secondary" disabled={isLoading}>
<Trans>Cancel</Trans>
</Button>
</DialogClose>
<Button type="button" variant="destructive" loading={isLoading} onClick={() => void handleResetToDefaults()}>
<Trans>Reset to defaults</Trans>
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
};
@@ -7,6 +7,7 @@ import {
} from '@documenso/lib/constants/branding';
import { DEFAULT_BRAND_COLORS, DEFAULT_BRAND_RADIUS } from '@documenso/lib/constants/theme';
import { ZCssVarsSchema } from '@documenso/lib/types/css-vars';
import { normalizeBrandingColors } from '@documenso/lib/utils/normalize-branding-colors';
import { cn } from '@documenso/ui/lib/utils';
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@documenso/ui/primitives/accordion';
import { Button } from '@documenso/ui/primitives/button';
@@ -23,6 +24,7 @@ import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { BrandingPreferencesResetDialog } from '~/components/dialogs/branding-preferences-reset-dialog';
import { useOptionalCurrentTeam } from '~/providers/team';
import { useCspNonce } from '~/utils/nonce';
@@ -74,6 +76,7 @@ export function BrandingPreferencesForm({
const [previewUrl, setPreviewUrl] = useState<string>('');
const [hasLoadedPreview, setHasLoadedPreview] = useState(false);
const [colorPickerKey, setColorPickerKey] = useState(0);
const parsedColors = ZCssVarsSchema.safeParse(settings.brandingColors);
const initialColors = parsedColors.success ? parsedColors.data : {};
@@ -96,6 +99,42 @@ export function BrandingPreferencesForm({
const isBrandingEnabled = form.watch('brandingEnabled');
const hasResetBrandingColors =
settings.brandingColors === null ||
settings.brandingColors === undefined ||
(parsedColors.success && normalizeBrandingColors(parsedColors.data) === null);
// Only show the reset action when the saved settings actually differ from the
// defaults, so it never renders as a pointless disabled button.
const isResetToDefaultsVisible =
settings.brandingEnabled !== (canInherit ? null : false) ||
!!settings.brandingLogo ||
!!settings.brandingUrl ||
!!settings.brandingCompanyDetails ||
!!settings.brandingCss ||
!hasResetBrandingColors;
const handleResetToDefaults = async () => {
const data: TBrandingPreferencesFormSchema = {
brandingEnabled: canInherit ? null : false,
brandingLogo: null,
brandingUrl: '',
brandingCompanyDetails: '',
brandingColors: {},
brandingCss: '',
};
await onFormSubmit(data);
if (previewUrl.startsWith('blob:')) {
URL.revokeObjectURL(previewUrl);
}
setPreviewUrl('');
setColorPickerKey((key) => key + 1);
form.reset(data);
};
const getSavedLogoPreviewUrl = () => {
if (!settings.brandingLogo) {
return '';
@@ -397,6 +436,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`background-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.background}
@@ -420,6 +460,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`foreground-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.foreground}
@@ -443,6 +484,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`primary-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.primary}
@@ -466,6 +508,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`primary-foreground-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.primaryForeground}
@@ -489,6 +532,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`border-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.border}
@@ -512,6 +556,7 @@ export function BrandingPreferencesForm({
</FormDescription>
<FormControl>
<ColorPicker
key={`ring-${colorPickerKey}`}
nonce={nonce}
value={field.value ?? ''}
defaultValue={DEFAULT_BRAND_COLORS.ring}
@@ -593,6 +638,15 @@ export function BrandingPreferencesForm({
isDirty={hasUnsavedChanges}
isSubmitting={form.formState.isSubmitting}
onReset={handleReset}
resetToDefaults={
isResetToDefaultsVisible ? (
<BrandingPreferencesResetDialog
hasAdvancedBranding={hasAdvancedBranding}
isSubmitting={form.formState.isSubmitting}
onReset={handleResetToDefaults}
/>
) : undefined
}
/>
</fieldset>
</form>
@@ -11,10 +11,10 @@ import { isValidLanguageCode, SUPPORTED_LANGUAGE_CODES, SUPPORTED_LANGUAGES } fr
import { TIME_ZONES } from '@documenso/lib/constants/time-zones';
import type { TDefaultRecipients } from '@documenso/lib/types/default-recipients';
import { ZDefaultRecipientsSchema } from '@documenso/lib/types/default-recipients';
import { type TDocumentMetaDateFormat, ZDocumentMetaTimezoneSchema } from '@documenso/lib/types/document-meta';
import { isPersonalLayout } from '@documenso/lib/utils/organisations';
import { type TDocumentMetaDateFormat, ZDocumentMetaDateFormatSchema } from '@documenso/lib/types/document-meta';
import { generateDefaultOrganisationSettings, isPersonalLayout } from '@documenso/lib/utils/organisations';
import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
import { extractTeamSignatureSettings } from '@documenso/lib/utils/teams';
import { extractTeamSignatureSettings, generateDefaultTeamSettings } from '@documenso/lib/utils/teams';
import { DocumentSignatureSettingsTooltip } from '@documenso/ui/components/document/document-signature-settings-tooltip';
import { ExpirationPeriodPicker } from '@documenso/ui/components/document/expiration-period-picker';
import { ReminderSettingsPicker } from '@documenso/ui/components/document/reminder-settings-picker';
@@ -37,11 +37,11 @@ import { zodResolver } from '@hookform/resolvers/zod';
import { msg, t } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { TeamGlobalSettings } from '@prisma/client';
import { DocumentVisibility, OrganisationType, type RecipientRole } from '@prisma/client';
import { DocumentVisibility, OrganisationType, type RecipientRole, type TeamGlobalSettings } from '@prisma/client';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { DocumentPreferencesResetDialog } from '~/components/dialogs/document-preferences-reset-dialog';
import { useOptionalCurrentTeam } from '~/providers/team';
import { DefaultRecipientsMultiSelectCombobox } from '../general/default-recipients-multiselect-combobox';
@@ -93,6 +93,26 @@ export type DocumentPreferencesFormProps = {
onFormSubmit: (data: TDocumentPreferencesFormSchema) => Promise<void>;
};
const getDocumentPreferencesFormValues = (settings: SettingsSubset): TDocumentPreferencesFormSchema => {
const parsedDocumentDateFormat = ZDocumentMetaDateFormatSchema.safeParse(settings.documentDateFormat);
return {
documentVisibility: settings.documentVisibility,
documentLanguage: isValidLanguageCode(settings.documentLanguage) ? settings.documentLanguage : null,
documentTimezone: settings.documentTimezone,
documentDateFormat: parsedDocumentDateFormat.success ? parsedDocumentDateFormat.data : null,
includeSenderDetails: settings.includeSenderDetails,
includeSigningCertificate: settings.includeSigningCertificate,
includeAuditLog: settings.includeAuditLog,
signatureTypes: extractTeamSignatureSettings({ ...settings }),
defaultRecipients: settings.defaultRecipients ? ZDefaultRecipientsSchema.parse(settings.defaultRecipients) : null,
delegateDocumentOwnership: settings.delegateDocumentOwnership,
aiFeaturesEnabled: settings.aiFeaturesEnabled,
envelopeExpirationPeriod: settings.envelopeExpirationPeriod ?? null,
reminderSettings: settings.reminderSettings ?? null,
};
};
export const DocumentPreferencesForm = ({
settings,
onFormSubmit,
@@ -113,7 +133,7 @@ export const DocumentPreferencesForm = ({
documentVisibility: z.nativeEnum(DocumentVisibility).nullable(),
documentLanguage: z.enum(SUPPORTED_LANGUAGE_CODES).nullable(),
documentTimezone: z.string().nullable(),
documentDateFormat: ZDocumentMetaTimezoneSchema.nullable(),
documentDateFormat: ZDocumentMetaDateFormatSchema.nullable(),
includeSenderDetails: z.boolean().nullable(),
includeSigningCertificate: z.boolean().nullable(),
includeAuditLog: z.boolean().nullable(),
@@ -127,26 +147,33 @@ export const DocumentPreferencesForm = ({
reminderSettings: ZEnvelopeReminderSettings.nullable(),
});
const defaultValues = getDocumentPreferencesFormValues(settings);
const defaultSettings = canInherit ? generateDefaultTeamSettings() : generateDefaultOrganisationSettings();
const baseResetValues = getDocumentPreferencesFormValues(defaultSettings);
const resetValues = {
...baseResetValues,
aiFeaturesEnabled: isAiFeaturesConfigured ? baseResetValues.aiFeaturesEnabled : defaultValues.aiFeaturesEnabled,
};
const form = useForm<TDocumentPreferencesFormSchema>({
defaultValues: {
documentVisibility: settings.documentVisibility,
documentLanguage: isValidLanguageCode(settings.documentLanguage) ? settings.documentLanguage : null,
documentTimezone: settings.documentTimezone,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
documentDateFormat: settings.documentDateFormat as TDocumentMetaDateFormat | null,
includeSenderDetails: settings.includeSenderDetails,
includeSigningCertificate: settings.includeSigningCertificate,
includeAuditLog: settings.includeAuditLog,
signatureTypes: extractTeamSignatureSettings({ ...settings }),
defaultRecipients: settings.defaultRecipients ? ZDefaultRecipientsSchema.parse(settings.defaultRecipients) : null,
delegateDocumentOwnership: settings.delegateDocumentOwnership,
aiFeaturesEnabled: settings.aiFeaturesEnabled,
envelopeExpirationPeriod: settings.envelopeExpirationPeriod ?? null,
reminderSettings: settings.reminderSettings ?? null,
},
defaultValues,
resolver: zodResolver(ZDocumentPreferencesFormSchema),
});
// Parse both sides through the schema so we compare canonical representations
const parsedCurrentValues = ZDocumentPreferencesFormSchema.safeParse(defaultValues);
const parsedResetValues = ZDocumentPreferencesFormSchema.safeParse(resetValues);
const isResetToDefaultsVisible =
!parsedCurrentValues.success ||
!parsedResetValues.success ||
JSON.stringify(parsedCurrentValues.data) !== JSON.stringify(parsedResetValues.data);
const handleResetToDefaults = async () => {
await onFormSubmit(resetValues);
form.reset(resetValues);
};
const handleFormSubmit = form.handleSubmit(async (data) => {
try {
await onFormSubmit(data);
@@ -772,6 +799,17 @@ export const DocumentPreferencesForm = ({
isDirty={form.formState.isDirty}
isSubmitting={form.formState.isSubmitting}
onReset={() => form.reset()}
resetToDefaults={
isResetToDefaultsVisible ? (
<DocumentPreferencesResetDialog
isSubmitting={form.formState.isSubmitting}
onReset={handleResetToDefaults}
showAiFeatures={isAiFeaturesConfigured}
showDocumentVisibility={!isPersonalLayoutMode}
showIncludeSenderDetails={!isPersonalLayoutMode && !isPersonalOrganisation}
/>
) : undefined
}
/>
</fieldset>
</form>
@@ -3,12 +3,17 @@ import { Button } from '@documenso/ui/primitives/button';
import { Trans, useLingui } from '@lingui/react/macro';
import { AnimatePresence, motion } from 'framer-motion';
import { AlertTriangleIcon } from 'lucide-react';
import { useEffect, useRef, useState } from 'react';
import { type ReactNode, useEffect, useRef, useState } from 'react';
export type FormStickySaveBarProps = {
isDirty: boolean;
isSubmitting: boolean;
onReset: () => void;
/**
* Slot for a "reset to defaults" action, rendered before the Undo button. Hidden while
* the bar is floating so it never appears in the unsaved-changes island.
*/
resetToDefaults?: ReactNode;
};
/**
@@ -24,7 +29,7 @@ export type FormStickySaveBarProps = {
* shared-layout morph). A 1px sentinel below it detects the stuck state so we can toggle
* the pill chrome.
*/
export const FormStickySaveBar = ({ isDirty, isSubmitting, onReset }: FormStickySaveBarProps) => {
export const FormStickySaveBar = ({ isDirty, isSubmitting, onReset, resetToDefaults }: FormStickySaveBarProps) => {
const { t } = useLingui();
const sentinelRef = useRef<HTMLDivElement>(null);
@@ -100,6 +105,8 @@ export const FormStickySaveBar = ({ isDirty, isSubmitting, onReset }: FormSticky
</AnimatePresence>
<div className="ml-auto flex flex-shrink-0 items-center gap-x-2">
{!isFloating && resetToDefaults}
{isDirty && (
<Button type="button" variant="secondary" size="sm" onClick={onReset} disabled={isSubmitting}>
<Trans>Undo</Trans>
File diff suppressed because it is too large Load Diff
@@ -1,36 +0,0 @@
import type { MessageDescriptor } from '@lingui/core';
import type { LucideIcon } from 'lucide-react';
export type PromptItem = {
id: string;
label: string | MessageDescriptor;
sublabel?: string;
path?: string;
onAction?: () => void;
icon?: LucideIcon;
initials?: string;
shortcut?: string;
isChecked?: boolean;
};
export type PromptCategory = {
id: string;
label: MessageDescriptor;
items: PromptItem[];
/**
* The number of actual results, excluding utility rows such as the
* "View all results" link.
*/
count: number;
/**
* The count shown on the category chip, or null to not show a chip at all.
* Categories which only contain hardcoded page links have no chip.
*/
chipCount: number | null;
isCapped: boolean;
/**
* Global admin categories are marked with a globe icon to distinguish them
* from the equally named personal categories.
*/
isGlobal: boolean;
};
@@ -0,0 +1,23 @@
import { Trans } from '@lingui/react/macro';
import { AlertTriangleIcon } from 'lucide-react';
export const DirectTemplateInvalidPageView = () => {
return (
<div className="mx-auto flex h-[70vh] w-full max-w-md flex-col items-center justify-center">
<div>
<AlertTriangleIcon className="h-10 w-10 text-destructive" />
<h1 className="mt-4 font-semibold text-3xl">
<Trans>Invalid direct link template</Trans>
</h1>
<p className="mt-2 text-muted-foreground text-sm">
<Trans>
This direct link template cannot be used because one or more signers do not have a signature field assigned.
Please contact the sender to update the template.
</Trans>
</p>
</div>
</div>
);
};
@@ -54,6 +54,7 @@ import { useCurrentTeam } from '~/providers/team';
import { EnvelopeEditorFieldDragDrop } from './envelope-editor-fields-drag-drop';
import { EnvelopeEditorFieldsPageRenderer } from './envelope-editor-fields-page-renderer';
import { EnvelopeEditorInvalidDirectTemplateAlert } from './envelope-editor-invalid-direct-template-alert';
import { EnvelopeRendererFileSelector } from './envelope-file-selector';
import { EnvelopeRecipientSelector } from './envelope-recipient-selector';
@@ -238,6 +239,8 @@ export const EnvelopeEditorFieldsPage = () => {
}
/>
<EnvelopeEditorInvalidDirectTemplateAlert />
{/* Document View */}
<div className="mt-4 flex h-full flex-col items-center justify-center">
{envelope.recipients.length === 0 && (
@@ -0,0 +1,55 @@
import { useCurrentEnvelopeEditor } from '@documenso/lib/client-only/providers/envelope-editor-provider';
import { getRecipientsWithMissingFields } from '@documenso/lib/utils/recipients';
import { cn } from '@documenso/ui/lib/utils';
import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert';
import { Trans } from '@lingui/react/macro';
import { useMemo } from 'react';
export type EnvelopeEditorInvalidDirectTemplateAlertProps = {
className?: string;
};
/**
* Warns that a direct link template cannot be used because one or more signers
* are missing a signature field.
*/
export const EnvelopeEditorInvalidDirectTemplateAlert = ({
className,
}: EnvelopeEditorInvalidDirectTemplateAlertProps) => {
const { envelope, isTemplate } = useCurrentEnvelopeEditor();
const signersMissingSignatureFields = useMemo(() => {
if (!isTemplate || !envelope.directLink?.enabled) {
return [];
}
return getRecipientsWithMissingFields(envelope.recipients, envelope.fields);
}, [isTemplate, envelope.directLink, envelope.recipients, envelope.fields]);
if (signersMissingSignatureFields.length === 0) {
return null;
}
return (
<Alert
variant="destructive"
className={cn('mx-auto w-full max-w-[800px] flex-row items-start gap-3 rounded-sm', className)}
>
<AlertTitle>
<Trans>Invalid direct link template</Trans>
</AlertTitle>
<AlertDescription>
<Trans>
Recipients cannot use this direct link template because the following signers are missing a signature field
</Trans>
<ul className="list-disc pl-5">
{signersMissingSignatureFields.map((recipient, i) => (
<li key={recipient.id}>{recipient.email || recipient.name || `Recipient ${i + 1}`}</li>
))}
</ul>
</AlertDescription>
</Alert>
);
};
@@ -22,6 +22,7 @@ import { match } from 'ts-pattern';
import { EnvelopeGenericPageRenderer } from '~/components/general/envelope-editor/envelope-generic-page-renderer';
import { EnvelopePdfViewer } from '~/components/general/pdf-viewer/envelope-pdf-viewer';
import { EnvelopeEditorInvalidDirectTemplateAlert } from './envelope-editor-invalid-direct-template-alert';
import { EnvelopeRendererFileSelector } from './envelope-file-selector';
export const EnvelopeEditorPreviewPage = () => {
@@ -228,6 +229,8 @@ export const EnvelopeEditorPreviewPage = () => {
{/* Horizontal envelope item selector */}
<EnvelopeRendererFileSelector className="px-0" fields={editorFields.localFields} />
<EnvelopeEditorInvalidDirectTemplateAlert className="mb-4" />
<Alert variant="warning" className="mx-auto max-w-[800px]">
<AlertTitle>
<Trans>Preview Mode</Trans>
@@ -26,6 +26,7 @@ import { ErrorCode as DropzoneErrorCode, type FileRejection, useDropzone } from
import { EnvelopeItemDeleteDialog } from '~/components/dialogs/envelope-item-delete-dialog';
import { EnvelopeEditorInvalidDirectTemplateAlert } from './envelope-editor-invalid-direct-template-alert';
import { EnvelopeEditorRecipientForm } from './envelope-editor-recipient-form';
import { EnvelopeItemTitleInput } from './envelope-editor-title-input';
@@ -449,6 +450,9 @@ export const EnvelopeEditorUploadPage = () => {
return (
<div className="mx-auto max-w-4xl space-y-6 p-8">
<input {...getReplaceInputProps()} />
<EnvelopeEditorInvalidDirectTemplateAlert className="max-w-none" />
<Card backdropBlur={false} className="border">
<CardHeader className="pb-3">
<CardTitle>
@@ -1,144 +0,0 @@
import { useSession } from '@documenso/lib/client-only/providers/session';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION, SKIP_QUERY_BATCH_META } from '@documenso/lib/constants/trpc';
import { isAdmin } from '@documenso/lib/utils/is-admin';
import { extractInitials } from '@documenso/lib/utils/recipient-formatter';
import { trpc as trpcReact } from '@documenso/trpc/react';
import type { TAdminSearchResultType } from '@documenso/trpc/server/admin-router/admin-search.types';
import { ADMIN_SEARCH_MAX_QUERY_LENGTH } from '@documenso/trpc/server/admin-router/admin-search.types';
import type { MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { keepPreviousData } from '@tanstack/react-query';
import type { LucideIcon } from 'lucide-react';
import { ArrowRightIcon, Building2Icon, CreditCardIcon, FileTextIcon, UserIcon, UsersIcon } from 'lucide-react';
import { useMemo } from 'react';
import type { PromptCategory, PromptItem } from './app-command-menu.types';
/**
* The maximum number of results the admin search returns per resource type.
*/
const ADMIN_SEARCH_RESULTS_CAP = 5;
const ADMIN_GROUP_LABELS: Record<TAdminSearchResultType, MessageDescriptor> = {
document: msg`Documents`,
user: msg`Users`,
organisation: msg`Organisations`,
team: msg`Teams`,
recipient: msg`Recipients`,
subscription: msg`Subscriptions`,
};
const ADMIN_GROUP_ICONS: Record<TAdminSearchResultType, LucideIcon> = {
document: FileTextIcon,
user: UserIcon,
organisation: Building2Icon,
team: UsersIcon,
recipient: UserIcon,
subscription: CreditCardIcon,
};
/**
* Admin list pages which support prefilling their search from the URL, used
* for the "View all results" links on capped groups. Teams, recipients and
* subscriptions have no admin list pages.
*/
const ADMIN_GROUP_LIST_PATHS: Partial<Record<TAdminSearchResultType, (_query: string) => string>> = {
document: (query) => `/admin/documents?term=${encodeURIComponent(query)}`,
user: (query) => `/admin/users?search=${encodeURIComponent(query)}`,
organisation: (query) => `/admin/organisations?query=${encodeURIComponent(query)}`,
};
export type UseAdminSearchCategoriesOptions = {
/**
* The trimmed, debounced search query.
*/
query: string;
open: boolean;
};
/**
* The isolated admin portion of the command prompt: searches every admin
* resource and maps the results to prompt categories marked as global.
*
* Returns no categories and never queries for non admin users. The admin
* search endpoint is additionally guarded server side by the admin procedure.
*/
export const useAdminSearchCategories = ({ query, open }: UseAdminSearchCategoriesOptions) => {
const { user } = useSession();
const isUserAdmin = isAdmin(user);
// Admin searches hit every resource table, so require a longer query unless
// it is a number, which could be a resource ID of any length. Queries over
// the endpoint's length limit are skipped entirely instead of being sent
// and rejected.
const hasValidAdminSearch =
isUserAdmin && query.length <= ADMIN_SEARCH_MAX_QUERY_LENGTH && (query.length > 3 || /^\d+$/.test(query));
const {
data: adminSearchData,
isFetching,
isError,
} = trpcReact.admin.search.useQuery(
{
query,
},
{
enabled: open && hasValidAdminSearch,
placeholderData: keepPreviousData,
// Retyping is the retry in a search-as-you-type flow: fail fast so the
// prompt can surface an honest error state instead of retrying.
retry: false,
...SKIP_QUERY_BATCH_META,
...DO_NOT_INVALIDATE_QUERY_ON_MUTATION,
},
);
const categories = useMemo((): PromptCategory[] => {
if (!hasValidAdminSearch || !adminSearchData) {
return [];
}
return adminSearchData.groups.map((group) => {
const isCapped = group.results.length >= ADMIN_SEARCH_RESULTS_CAP;
const buildListPath = ADMIN_GROUP_LIST_PATHS[group.type];
const items: PromptItem[] = group.results.map((result) => ({
id: `admin-${group.type}-${result.value}`,
label: result.label,
sublabel: result.sublabel,
path: result.path,
icon: ADMIN_GROUP_ICONS[group.type],
initials: group.type === 'user' || group.type === 'recipient' ? extractInitials(result.label) : undefined,
}));
// Capped groups link to the full admin list page with the search
// prefilled so the cap is never a dead end.
if (isCapped && buildListPath) {
items.push({
id: `admin-${group.type}-view-all`,
label: msg`View all results`,
path: buildListPath(query),
icon: ArrowRightIcon,
});
}
return {
id: `admin-${group.type}`,
label: ADMIN_GROUP_LABELS[group.type],
items,
count: group.results.length,
chipCount: group.results.length,
isCapped,
isGlobal: true,
};
});
}, [hasValidAdminSearch, adminSearchData, query]);
return {
isUserAdmin,
categories,
isFetching,
isError,
};
};
+20 -15
View File
@@ -3,27 +3,32 @@ import { dynamicActivate } from '@documenso/lib/utils/i18n';
import { i18n } from '@lingui/core';
import { detect, fromHtmlTag } from '@lingui/detect-locale';
import { I18nProvider } from '@lingui/react';
import { StrictMode, startTransition, useEffect } from 'react';
import { StrictMode, startTransition } from 'react';
import { hydrateRoot } from 'react-dom/client';
import { HydratedRouter } from 'react-router/dom';
import './utils/polyfills/promise-with-resolvers';
function PosthogInit() {
/**
* Initialised imperatively (not as a component inside `hydrateRoot`) because
* rendering extra client-only siblings changes the React tree structure
* relative to the server render in `entry.server.tsx`. That shifts every
* `useId` value (used by Radix for `id`/`htmlFor`/`aria-*`), causing hydration
* mismatches which can abort hydration entirely when the user interacts with
* the page early, leaving dead event handlers (broken dropdowns, native form
* submits).
*/
function initPosthog() {
const postHogConfig = extractPostHogConfig();
useEffect(() => {
if (postHogConfig) {
void import('posthog-js').then(({ default: posthog }) => {
posthog.init(postHogConfig.key, {
api_host: postHogConfig.host,
capture_exceptions: true,
});
if (postHogConfig) {
void import('posthog-js').then(({ default: posthog }) => {
posthog.init(postHogConfig.key, {
api_host: postHogConfig.host,
capture_exceptions: true,
});
}
}, []);
return null;
});
}
}
async function main() {
@@ -38,11 +43,11 @@ async function main() {
<I18nProvider i18n={i18n}>
<HydratedRouter />
</I18nProvider>
<PosthogInit />
</StrictMode>,
);
});
void initPosthog();
}
// eslint-disable-next-line @typescript-eslint/no-floating-promises
+10 -2
View File
@@ -119,7 +119,11 @@ export function LayoutContent({ children }: { children: React.ReactNode }) {
const isRecipientRoute = matches.some((m) => m.id?.startsWith('routes/_recipient+'));
return (
<html translate="no" lang={lang} data-theme={theme} className={theme ?? ''}>
// `suppressHydrationWarning` because `remix-themes` intentionally mutates
// `data-theme`/`class` on <html> before hydration (PreventFlashOnWrongTheme),
// so the server-rendered attributes never match the client render when the
// theme is resolved from the system preference. Attribute-only, one level deep.
<html translate="no" lang={lang} data-theme={theme} className={theme ?? ''} suppressHydrationWarning>
<head>
<meta charSet="utf-8" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
@@ -173,7 +177,11 @@ export function LayoutContent({ children }: { children: React.ReactNode }) {
<script
nonce={nonce(cspNonce)}
dangerouslySetInnerHTML={{
__html: `window.__ENV__ = ${JSON.stringify(publicEnv)}`,
// `__webpack_nonce__` is read by `get-nonce` (used by
// react-remove-scroll / react-style-singleton inside Radix menus and
// dialogs) to stamp runtime-injected <style> elements. Without it the
// strict `style-src-elem` CSP blocks the scroll-lock styles.
__html: `window.__ENV__ = ${JSON.stringify(publicEnv)}; window.__webpack_nonce__ = ${JSON.stringify(cspNonce ?? '')}`,
}}
/>
@@ -88,7 +88,7 @@ export default function OrganisationSettingsDocumentPage() {
typedSignatureEnabled: signatureTypes.includes(DocumentSignatureType.TYPE),
uploadSignatureEnabled: signatureTypes.includes(DocumentSignatureType.UPLOAD),
drawSignatureEnabled: signatureTypes.includes(DocumentSignatureType.DRAW),
delegateDocumentOwnership: delegateDocumentOwnership,
delegateDocumentOwnership,
aiFeaturesEnabled,
envelopeExpirationPeriod: envelopeExpirationPeriod ?? undefined,
reminderSettings: reminderSettings ?? undefined,
@@ -82,7 +82,7 @@ export default function TeamsSettingsPage() {
uploadSignatureEnabled: signatureTypes.includes(DocumentSignatureType.UPLOAD),
drawSignatureEnabled: signatureTypes.includes(DocumentSignatureType.DRAW),
}),
delegateDocumentOwnership: delegateDocumentOwnership,
delegateDocumentOwnership,
},
});
@@ -7,6 +7,7 @@ import { getEnvelopeForDirectTemplateSigning } from '@documenso/lib/server-only/
import { getTemplateByDirectLinkToken } from '@documenso/lib/server-only/template/get-template-by-direct-link-token';
import { DocumentAccessAuth } from '@documenso/lib/types/document-auth';
import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth';
import { getRecipientsWithMissingFields } from '@documenso/lib/utils/recipients';
import { prisma } from '@documenso/prisma';
import { Plural } from '@lingui/react/macro';
import { UsersIcon } from 'lucide-react';
@@ -14,6 +15,7 @@ import { redirect } from 'react-router';
import { match } from 'ts-pattern';
import { Header as AuthenticatedHeader } from '~/components/general/app-header';
import { DirectTemplateInvalidPageView } from '~/components/general/direct-template/direct-template-invalid-page';
import { DirectTemplatePageView } from '~/components/general/direct-template/direct-template-page';
import { DirectTemplateAuthPageView } from '~/components/general/direct-template/direct-template-signing-auth-page';
import { DocumentSigningAuthPageView } from '~/components/general/document-signing/document-signing-auth-page';
@@ -70,8 +72,18 @@ const handleV1Loader = async ({ params, request }: Route.LoaderArgs) => {
};
}
const recipientsWithMissingFields = getRecipientsWithMissingFields(template.recipients, template.fields);
if (recipientsWithMissingFields.length > 0) {
return {
isAccessAuthValid: true,
isTemplateMissingSignatures: true,
} as const;
}
return {
isAccessAuthValid: true,
isTemplateMissingSignatures: false,
template: {
...template,
folder: null,
@@ -96,6 +108,7 @@ const handleV2Loader = async ({ params, request }: Route.LoaderArgs) => {
.then((envelopeForSigning) => {
return {
isDocumentAccessValid: true,
isTemplateMissingSignatures: false,
envelopeForSigning,
} as const;
})
@@ -108,6 +121,13 @@ const handleV2Loader = async ({ params, request }: Route.LoaderArgs) => {
} as const;
}
if (error.code === AppErrorCode.MISSING_SIGNATURE_FIELD) {
return {
isDocumentAccessValid: true,
isTemplateMissingSignatures: true,
} as const;
}
throw new Response('Not Found', { status: 404 });
});
};
@@ -181,6 +201,10 @@ const DirectSigningPageV1 = ({ data }: { data: Awaited<ReturnType<typeof handleV
return <DirectTemplateAuthPageView />;
}
if (data.isTemplateMissingSignatures) {
return <DirectTemplateInvalidPageView />;
}
const { template, directTemplateRecipient } = data;
return (
@@ -235,6 +259,10 @@ const DirectSigningPageV2 = ({ data }: { data: Awaited<ReturnType<typeof handleV
return <DocumentSigningAuthPageView email={''} emailHasAccount={true} />;
}
if (data.isTemplateMissingSignatures) {
return <DirectTemplateInvalidPageView />;
}
const { envelope, recipient } = data.envelopeForSigning;
const { derivedRecipientAccessAuth } = extractDocumentAuthMethods({
@@ -32,6 +32,10 @@ export const getDirectTemplateErrorMessage = (code: string): ToastMessageDescrip
return match(code)
.with('RECIPIENT_LIMIT_EXCEEDED', () => RECIPIENT_LIMIT_EXCEEDED_ERROR_MESSAGE)
.with(AppErrorCode.TOO_MANY_REQUESTS, () => FAIR_USE_LIMIT_EXCEEDED_ERROR_MESSAGE)
.with(AppErrorCode.MISSING_SIGNATURE_FIELD, () => ({
title: msg`Missing signature fields`,
description: msg`This direct link template cannot be used because one or more signers do not have a signature field assigned.`,
}))
.otherwise(() => ({
title: msg`Something went wrong`,
description: msg`We were unable to submit this document at this time. Please try again later.`,
@@ -77,6 +81,10 @@ export const getTemplateUseErrorMessage = (code: string): ToastMessageDescriptor
title: msg`Error`,
description: msg`The document was created but could not be sent to recipients.`,
}))
.with(AppErrorCode.MISSING_SIGNATURE_FIELD, () => ({
title: msg`Missing signature fields`,
description: msg`The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer.`,
}))
.with(AppErrorCode.INVALID_BODY, AppErrorCode.INVALID_REQUEST, () => ({
title: msg`Error`,
description: msg`The document could not be created because of missing or invalid information. Please review the template's recipients and fields.`,
@@ -1,439 +0,0 @@
import { seedPendingDocument } from '@documenso/prisma/seed/documents';
import { seedUser } from '@documenso/prisma/seed/users';
import { expect, test } from '@playwright/test';
import { customAlphabet } from 'nanoid';
import { apiSignin } from '../fixtures/authentication';
import { openCommandMenu } from '../fixtures/command-menu';
test.describe.configure({ mode: 'parallel' });
const nanoid = customAlphabet('1234567890abcdef', 10);
const ADMIN_PROMPT_PLACEHOLDER = 'Search documents, users, organisations…';
test('[ADMIN][GLOBAL_SEARCH]: numeric query shows verified user result and navigates', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: targetUser } = await seedUser();
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(String(targetUser.id));
await expect(page.getByText('Global Users', { exact: true })).toBeVisible();
// The category chips include the admin groups with their result counts.
await expect(page.getByRole('button', { name: /Global Users/ })).toBeVisible();
const userOption = page.getByRole('option').filter({ hasText: targetUser.email }).first();
// Admin results are real links so they support native link behaviour such
// as opening in a new tab.
await expect(userOption.getByRole('link')).toHaveAttribute('href', `/admin/users/${targetUser.id}`);
await userOption.click();
await page.waitForURL(`/admin/users/${targetUser.id}`);
});
test('[ADMIN][GLOBAL_SEARCH]: numeric query shows verified team result and navigates', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { team: targetTeam } = await seedUser();
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(String(targetTeam.id));
await expect(page.getByText('Global Teams', { exact: true })).toBeVisible();
await page.getByRole('option').filter({ hasText: targetTeam.url }).first().click();
await page.waitForURL(`/admin/teams/${targetTeam.id}`);
});
test('[ADMIN][GLOBAL_SEARCH]: text query shows document result and navigates', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, team } = await seedUser();
const document = await seedPendingDocument(sender, team.id, [], {
createDocumentOptions: { title: `admin-ui-search-${nanoid()}` },
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(document.title);
await expect(page.getByText('Global Documents', { exact: true })).toBeVisible();
await page.getByRole('option').filter({ hasText: document.secondaryId }).first().click();
await page.waitForURL(`/admin/documents/${document.id}`);
});
test('[ADMIN][GLOBAL_SEARCH]: envelope_ prefixed query resolves exact document', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, team } = await seedUser();
const document = await seedPendingDocument(sender, team.id, [], {
createDocumentOptions: { title: `admin-ui-search-${nanoid()}` },
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(document.id);
await expect(page.getByText('Global Documents', { exact: true })).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: document.title }).first()).toBeVisible();
});
test('[ADMIN][GLOBAL_SEARCH]: admin search requires more than 3 characters unless numeric', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const adminSearchRequests: string[] = [];
page.on('request', (request) => {
if (request.url().includes('admin.search')) {
adminSearchRequests.push(request.url());
}
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
const input = page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first();
// A 3 character non-numeric query must not trigger the admin search. The
// personal document search fires for any non-empty query, so its response
// is the synchronization anchor proving the debounced queries have fired.
const documentSearchResponse = page.waitForResponse((response) => response.url().includes('document.search'));
await input.fill('abc');
await documentSearchResponse;
await expect(page.getByText(/^Global /)).toHaveCount(0);
expect(adminSearchRequests).toHaveLength(0);
// A numeric query fires regardless of length.
const adminSearchRequest = page.waitForRequest((request) => request.url().includes('admin.search'));
await input.fill('7');
await adminSearchRequest;
});
test('[ADMIN][GLOBAL_SEARCH]: search bar position stays fixed while searching', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: targetUser } = await seedUser();
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
const input = page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first();
const initialY = (await input.boundingBox())?.y;
expect(initialY).toBeGreaterThan(0);
// The height of the prompt may change as results come and go, but the
// search bar must never move.
await input.fill(String(targetUser.id));
await expect(page.getByText('Global Users', { exact: true })).toBeVisible();
const resultsY = (await input.boundingBox())?.y;
expect(resultsY).toBe(initialY);
// The search bar must not move when there are no results at all.
await input.fill('zzzz-no-such-thing-9x7q');
await expect(page.getByText('No results for')).toBeVisible();
const emptyY = (await input.boundingBox())?.y;
expect(emptyY).toBe(initialY);
});
test('[ADMIN][GLOBAL_SEARCH]: default view shows the document page links outside a team context', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
// Admin pages have no current team, the page links must still show.
await page.goto('/admin/stats');
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await expect(page.getByRole('option').filter({ hasText: 'All documents' })).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: 'Draft documents' })).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: 'All templates' })).toBeVisible();
// Chips only show for categories with actual results, not for the
// hardcoded page links.
await expect(page.getByRole('button', { name: /^Documents/ })).toHaveCount(0);
await expect(page.getByRole('button', { name: /^Templates/ })).toHaveCount(0);
await expect(page.getByRole('button', { name: /^Settings/ })).toBeVisible();
});
test('[ADMIN][GLOBAL_SEARCH]: theme can be changed from the prompt', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByRole('option').filter({ hasText: 'Change theme' }).first().click();
// The sub page has a contextual placeholder and a back option.
await expect(page.getByPlaceholder('Search themes…')).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: 'Back' }).first()).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: 'Dark Mode' })).toBeVisible();
await page.getByRole('option').filter({ hasText: 'Dark Mode' }).first().click();
await expect(page.locator('html')).toHaveClass(/dark/);
// The back option returns to the root view.
await page.getByRole('option').filter({ hasText: 'Back' }).first().click();
await expect(page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first()).toBeVisible();
});
test('[ADMIN][GLOBAL_SEARCH]: capped admin groups offer a view all link', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const namePrefix = `viewall-${nanoid()}`;
// Seed enough users sharing a name prefix to hit the 5 result cap.
for (let i = 0; i < 5; i++) {
await seedUser({ name: `${namePrefix}-${i}` });
}
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(namePrefix);
await expect(page.getByText('Global Users', { exact: true })).toBeVisible();
const viewAllOption = page.getByRole('option').filter({ hasText: 'View all results' }).first();
await expect(viewAllOption.getByRole('link')).toHaveAttribute(
'href',
`/admin/users?search=${encodeURIComponent(namePrefix)}`,
);
});
test('[ADMIN][GLOBAL_SEARCH]: first result is highlighted after every search', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: firstUser } = await seedUser();
const { user: secondUser } = await seedUser();
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
const input = page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first();
// First search selects the first result.
await input.fill(String(firstUser.id));
await expect(page.getByRole('option').filter({ hasText: firstUser.email }).first()).toBeVisible();
await expect(page.locator('[cmdk-item]').first()).toHaveAttribute('aria-selected', 'true');
// A subsequent search with entirely new results must select the first
// result again.
await input.fill(String(secondUser.id));
await expect(page.getByRole('option').filter({ hasText: secondUser.email }).first()).toBeVisible();
await expect(page.locator('[cmdk-item]').first()).toHaveAttribute('aria-selected', 'true');
});
test('[ADMIN][GLOBAL_SEARCH]: static items match fuzzy queries', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
// "setg" is a non-contiguous abbreviation of "Settings".
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill('setg');
// Wait for the debounced filter to apply first, "Draft documents" can
// never match "setg" under either matching strategy.
await expect(page.getByRole('option').filter({ hasText: 'Draft documents' })).toHaveCount(0);
await expect(page.getByRole('option').filter({ hasText: 'Settings' }).first()).toBeVisible();
});
test('[ADMIN][GLOBAL_SEARCH]: page scrollbar is hidden while the prompt is open', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await expect
.poll(async () => await page.evaluate(() => getComputedStyle(document.documentElement).overflow))
.toBe('hidden');
await page.keyboard.press('Escape');
await expect
.poll(async () => await page.evaluate(() => getComputedStyle(document.documentElement).overflow))
.toBe('visible');
});
test('[ADMIN][GLOBAL_SEARCH]: non-admin gets the prompt without the admin search', async ({ page }) => {
const { user, team } = await seedUser({ isAdmin: false });
const document = await seedPendingDocument(user, team.id, []);
const adminSearchRequests: string[] = [];
page.on('request', (request) => {
if (request.url().includes('admin.search')) {
adminSearchRequests.push(request.url());
}
});
await apiSignin({ page, email: user.email });
// Non-admins get the same prompt with a non-admin placeholder.
await openCommandMenu(page, 'Type a command or search...');
await expect(page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER)).toHaveCount(0);
await page.getByPlaceholder('Type a command or search...').first().fill(document.title);
// Wait for the regular (non-admin) search to resolve so we know the
// debounced queries have fired.
await expect(page.getByRole('option', { name: document.title })).toBeVisible();
await expect(page.getByText(/^Global /)).toHaveCount(0);
expect(adminSearchRequests).toHaveLength(0);
});
test('[ADMIN][GLOBAL_SEARCH]: typing on a sub page fires no search requests', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const searchRequests: string[] = [];
page.on('request', (request) => {
if (/api\/trpc\/(document|template|admin)\.search/.test(request.url())) {
searchRequests.push(request.url());
}
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByRole('option').filter({ hasText: 'Change theme' }).first().click();
const input = page.getByPlaceholder('Search themes…');
await expect(input).toBeVisible();
// Long enough to pass the admin search threshold if it were enabled.
await input.fill('dark');
// The client-side filter applying proves the typing registered.
await expect(page.getByRole('option').filter({ hasText: 'Dark Mode' })).toBeVisible();
await expect(page.getByRole('option').filter({ hasText: 'Light Mode' })).toHaveCount(0);
// Wait out the 200ms search debounce with a wide margin before asserting
// that no requests fired: there is no response to anchor on when the
// desired behaviour is "no requests at all".
await page.waitForTimeout(750);
expect(searchRequests).toHaveLength(0);
});
test('[ADMIN][GLOBAL_SEARCH]: failed searches show an error state instead of no results', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await page.route(/api\/trpc\/(document|template|admin)\.search/, async (route) => {
await route.fulfill({ status: 500, contentType: 'application/json', body: '{}' });
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill('zzzz-no-such-thing-9x7q');
// A failed search must be honest about it, not claim there are no results.
await expect(page.getByText('Something went wrong')).toBeVisible();
await expect(page.getByText('No results for')).toHaveCount(0);
});
test('[ADMIN][GLOBAL_SEARCH]: partial search failure still shows results with a notice', async ({ page }) => {
const { user: adminUser, team } = await seedUser({ isAdmin: true });
const document = await seedPendingDocument(adminUser, team.id, [], {
createDocumentOptions: { title: `partial-fail-${nanoid()}` },
});
// Only the admin search fails: the personal searches succeed.
await page.route(/api\/trpc\/admin\.search/, async (route) => {
await route.fulfill({ status: 500, contentType: 'application/json', body: '{}' });
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill(document.title);
// The successful personal document search must still render its results.
await expect(page.getByRole('option', { name: document.title })).toBeVisible();
// The failed admin search must be flagged rather than silently dropped.
await expect(page.getByText('Some searches failed')).toBeVisible();
});
test('[ADMIN][GLOBAL_SEARCH]: over-length query skips the admin search without erroring', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const adminSearchRequests: string[] = [];
page.on('request', (request) => {
if (request.url().includes('admin.search')) {
adminSearchRequests.push(request.url());
}
});
await apiSignin({ page, email: adminUser.email });
await openCommandMenu(page, ADMIN_PROMPT_PLACEHOLDER);
// The admin search endpoint rejects queries longer than 100 characters, so
// the client must not send them. The personal searches accept up to 1024
// characters and still run, anchoring the debounced query flush.
const documentSearchResponse = page.waitForResponse((response) => response.url().includes('document.search'));
await page.getByPlaceholder(ADMIN_PROMPT_PLACEHOLDER).first().fill('a'.repeat(150));
await documentSearchResponse;
// The personal searches ran and found nothing: the honest empty state, with
// no error in sight.
await expect(page.getByText('No results for')).toBeVisible();
await expect(page.getByText('Something went wrong')).toHaveCount(0);
expect(adminSearchRequests).toHaveLength(0);
});
@@ -1,249 +0,0 @@
import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app';
import { seedPendingDocument } from '@documenso/prisma/seed/documents';
import { seedUser } from '@documenso/prisma/seed/users';
import type { Page } from '@playwright/test';
import { expect, test } from '@playwright/test';
import { customAlphabet } from 'nanoid';
import { apiSignin } from '../../../fixtures/authentication';
const nanoid = customAlphabet('1234567890abcdef', 10);
const WEBAPP_BASE_URL = NEXT_PUBLIC_WEBAPP_URL();
test.describe.configure({ mode: 'parallel' });
type AdminSearchGroup = {
type: string;
results: Array<{ label: string; sublabel?: string; path: string; value: string }>;
};
const callAdminSearch = async (page: Page, query: string) => {
const inputParam = encodeURIComponent(JSON.stringify({ json: { query } }));
const url = `${WEBAPP_BASE_URL}/api/trpc/admin.search?input=${inputParam}`;
const res = await page.context().request.get(url);
return {
res,
groups: res.ok()
? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
((await res.json()).result.data.json.groups as AdminSearchGroup[])
: null,
};
};
const findGroup = (groups: AdminSearchGroup[] | null, type: string) =>
(groups ?? []).find((group) => group.type === type);
// ─── Access control ──────────────────────────────────────────────────────────
test('[ADMIN][TRPC][SEARCH]: unauthenticated request is rejected with 401', async ({ page }) => {
const { res } = await callAdminSearch(page, 'anything');
expect(res.ok()).toBeFalsy();
expect(res.status()).toBe(401);
});
test('[ADMIN][TRPC][SEARCH]: non-admin authenticated user is rejected with 401', async ({ page }) => {
const { user: nonAdminUser } = await seedUser({ isAdmin: false });
await apiSignin({ page, email: nonAdminUser.email });
const { res } = await callAdminSearch(page, 'anything');
expect(res.ok()).toBeFalsy();
expect(res.status()).toBe(401);
});
// ─── Numeric queries: verified ID lookups ────────────────────────────────────
test('[ADMIN][TRPC][SEARCH]: numeric query returns verified user and team rows', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: targetUser, team: targetTeam } = await seedUser();
await apiSignin({ page, email: adminUser.email });
// Search by user ID.
const userSearch = await callAdminSearch(page, String(targetUser.id));
expect(userSearch.res.ok()).toBeTruthy();
const userGroup = findGroup(userSearch.groups, 'user');
expect(userGroup).toBeDefined();
expect(userGroup?.results).toHaveLength(1);
expect(userGroup?.results[0].path).toBe(`/admin/users/${targetUser.id}`);
expect(userGroup?.results[0].sublabel).toContain(targetUser.email);
// The cmdk `value` contract: value must contain the raw query.
expect(userGroup?.results[0].value).toContain(String(targetUser.id));
// Search by team ID.
const teamSearch = await callAdminSearch(page, String(targetTeam.id));
expect(teamSearch.res.ok()).toBeTruthy();
const teamGroup = findGroup(teamSearch.groups, 'team');
expect(teamGroup).toBeDefined();
expect(teamGroup?.results).toHaveLength(1);
expect(teamGroup?.results[0].path).toBe(`/admin/teams/${targetTeam.id}`);
expect(teamGroup?.results[0].label).toBe(targetTeam.name);
});
test('[ADMIN][TRPC][SEARCH]: numeric query returns verified document and recipient rows', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, team } = await seedUser();
const { user: recipientUser } = await seedUser();
const document = await seedPendingDocument(sender, team.id, [recipientUser]);
const legacyDocumentId = document.secondaryId.replace('document_', '');
const recipient = document.recipients[0];
await apiSignin({ page, email: adminUser.email });
// Search by legacy document ID (bare number).
const documentSearch = await callAdminSearch(page, legacyDocumentId);
expect(documentSearch.res.ok()).toBeTruthy();
const documentGroup = findGroup(documentSearch.groups, 'document');
expect(documentGroup).toBeDefined();
expect(documentGroup?.results).toHaveLength(1);
expect(documentGroup?.results[0].path).toBe(`/admin/documents/${document.id}`);
expect(documentGroup?.results[0].label).toBe(document.title);
// Search by recipient ID: links to the parent document.
const recipientSearch = await callAdminSearch(page, String(recipient.id));
expect(recipientSearch.res.ok()).toBeTruthy();
const recipientGroup = findGroup(recipientSearch.groups, 'recipient');
expect(recipientGroup).toBeDefined();
expect(recipientGroup?.results).toHaveLength(1);
expect(recipientGroup?.results[0].path).toBe(`/admin/documents/${document.id}`);
expect(recipientGroup?.results[0].label).toBe(recipient.email);
expect(recipientGroup?.results[0].sublabel).toBe(`#${recipient.id} · ${recipient.name} · ${document.title}`);
// Search by the full document_<id> secondary ID: exercises the prefix branch.
const secondaryIdSearch = await callAdminSearch(page, document.secondaryId);
expect(secondaryIdSearch.res.ok()).toBeTruthy();
const secondaryIdGroup = findGroup(secondaryIdSearch.groups, 'document');
expect(secondaryIdGroup).toBeDefined();
expect(secondaryIdGroup?.results[0].path).toBe(`/admin/documents/${document.id}`);
});
test('[ADMIN][TRPC][SEARCH]: numeric query with no matches returns no groups', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
const { res, groups } = await callAdminSearch(page, '999999999');
expect(res.ok()).toBeTruthy();
expect(groups).toEqual([]);
});
test('[ADMIN][TRPC][SEARCH]: oversized number does not error and falls back to text search', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, team } = await seedUser();
// 99999999999999 exceeds Int4, so it cannot be an ID lookup: it must be
// treated as text (and must not 500).
const oversizedNumber = '99999999999999';
const document = await seedPendingDocument(sender, team.id, [], {
createDocumentOptions: { title: `${oversizedNumber}-${nanoid()}` },
});
await apiSignin({ page, email: adminUser.email });
const { res, groups } = await callAdminSearch(page, oversizedNumber);
expect(res.ok()).toBeTruthy();
const documentGroup = findGroup(groups, 'document');
expect(documentGroup).toBeDefined();
expect(documentGroup?.results.map((result) => result.path)).toContain(`/admin/documents/${document.id}`);
});
// ─── Prefixed ID queries: exact lookups ──────────────────────────────────────
test('[ADMIN][TRPC][SEARCH]: envelope_ and org_ prefixes resolve exact matches', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, organisation, team } = await seedUser();
const document = await seedPendingDocument(sender, team.id, []);
await apiSignin({ page, email: adminUser.email });
// envelope_<id> resolves the document.
const envelopeSearch = await callAdminSearch(page, document.id);
expect(envelopeSearch.res.ok()).toBeTruthy();
const documentGroup = findGroup(envelopeSearch.groups, 'document');
expect(documentGroup).toBeDefined();
expect(documentGroup?.results[0].path).toBe(`/admin/documents/${document.id}`);
// Only the document group is returned for a recognized prefix.
expect(envelopeSearch.groups).toHaveLength(1);
// org_<id> resolves the organisation.
const orgSearch = await callAdminSearch(page, organisation.id);
expect(orgSearch.res.ok()).toBeTruthy();
const orgGroup = findGroup(orgSearch.groups, 'organisation');
expect(orgGroup).toBeDefined();
expect(orgGroup?.results[0].path).toBe(`/admin/organisations/${organisation.id}`);
expect(orgGroup?.results[0].label).toBe(organisation.name);
// Only the organisation group is returned for a recognized prefix.
expect(orgSearch.groups).toHaveLength(1);
});
// ─── Free text queries ───────────────────────────────────────────────────────
test('[ADMIN][TRPC][SEARCH]: text query matches documents by title and users by email', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
const { user: sender, team } = await seedUser();
// A unique title: the default seeded title is shared across the whole suite,
// and global search only returns the newest few matches.
const document = await seedPendingDocument(sender, team.id, [], {
createDocumentOptions: { title: `admin-search-${nanoid()}` },
});
await apiSignin({ page, email: adminUser.email });
// Search by document title.
const titleSearch = await callAdminSearch(page, document.title);
expect(titleSearch.res.ok()).toBeTruthy();
const documentGroup = findGroup(titleSearch.groups, 'document');
expect(documentGroup).toBeDefined();
expect(documentGroup?.results.map((result) => result.path)).toContain(`/admin/documents/${document.id}`);
// Search by user email (emails are unique nanoid-based, so this is specific).
const emailSearch = await callAdminSearch(page, sender.email);
expect(emailSearch.res.ok()).toBeTruthy();
const userGroup = findGroup(emailSearch.groups, 'user');
expect(userGroup).toBeDefined();
expect(userGroup?.results[0].path).toBe(`/admin/users/${sender.id}`);
});
test('[ADMIN][TRPC][SEARCH]: gibberish query returns no groups', async ({ page }) => {
const { user: adminUser } = await seedUser({ isAdmin: true });
await apiSignin({ page, email: adminUser.email });
const { res, groups } = await callAdminSearch(page, 'zzzz-no-such-thing-9x7q');
expect(res.ok()).toBeTruthy();
expect(groups).toEqual([]);
});
@@ -3,9 +3,6 @@ import { seedUser } from '@documenso/prisma/seed/users';
import { expect, test } from '@playwright/test';
import { apiSignin } from '../fixtures/authentication';
import { openCommandMenu } from '../fixtures/command-menu';
const COMMAND_MENU_PLACEHOLDER = 'Type a command or search...';
test('[COMMAND_MENU]: should see sent documents', async ({ page }) => {
const { user, team } = await seedUser();
@@ -17,9 +14,9 @@ test('[COMMAND_MENU]: should see sent documents', async ({ page }) => {
email: user.email,
});
await openCommandMenu(page, COMMAND_MENU_PLACEHOLDER);
await page.keyboard.press('Meta+K');
await page.getByPlaceholder(COMMAND_MENU_PLACEHOLDER).first().fill(document.title);
await page.getByPlaceholder('Type a command or search...').first().fill(document.title);
await expect(page.getByRole('option', { name: document.title })).toBeVisible();
});
@@ -33,9 +30,9 @@ test('[COMMAND_MENU]: should see received documents', async ({ page }) => {
email: recipient.email,
});
await openCommandMenu(page, COMMAND_MENU_PLACEHOLDER);
await page.keyboard.press('Meta+K');
await page.getByPlaceholder(COMMAND_MENU_PLACEHOLDER).first().fill(document.title);
await page.getByPlaceholder('Type a command or search...').first().fill(document.title);
await expect(page.getByRole('option', { name: document.title })).toBeVisible();
});
@@ -49,8 +46,8 @@ test('[COMMAND_MENU]: should be able to search by recipient', async ({ page }) =
email: user.email,
});
await openCommandMenu(page, COMMAND_MENU_PLACEHOLDER);
await page.keyboard.press('Meta+K');
await page.getByPlaceholder(COMMAND_MENU_PLACEHOLDER).first().fill(recipient.email);
await page.getByPlaceholder('Type a command or search...').first().fill(recipient.email);
await expect(page.getByRole('option', { name: document.title })).toBeVisible();
});
@@ -0,0 +1,76 @@
import { seedDirectTemplate } from '@documenso/prisma/seed/templates';
import { seedUser } from '@documenso/prisma/seed/users';
import { expect, type Page, test } from '@playwright/test';
import { apiSignin } from '../fixtures/authentication';
import { clickEnvelopeEditorStep } from '../fixtures/envelope-editor';
const INVALID_DIRECT_TEMPLATE_ALERT_TITLE = 'Invalid direct link template';
/**
* Place a field on the PDF canvas in the envelope editor.
*/
const placeFieldOnPdf = async (root: Page, fieldName: 'Signature' | 'Text', position: { x: number; y: number }) => {
await root.getByRole('button', { name: fieldName, exact: true }).click();
const canvas = root.locator('.konva-container canvas').first();
await expect(canvas).toBeVisible();
await canvas.click({ position });
};
/**
* Seed a V2 direct template and open it in the native template editor.
*
* Only the native template editor is covered here: direct links only exist
* for templates and are not part of the embedded editor surfaces.
*/
const openDirectTemplateEditor = async (page: Page, options: { createDirectRecipientSignatureField: boolean }) => {
const { user, team } = await seedUser();
const template = await seedDirectTemplate({
title: `E2E Direct Template Validation ${Date.now()}`,
userId: user.id,
teamId: team.id,
internalVersion: 2,
createDirectRecipientSignatureField: options.createDirectRecipientSignatureField,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/templates/${template.id}/edit`,
});
return { user, team, template };
};
test.describe('template editor', () => {
test('shows invalid direct template warning when a signer has no signature field', async ({ page }) => {
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: false });
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).toBeVisible();
await expect(page.getByText('are missing a signature field')).toBeVisible();
});
test('does not show the warning when all signers have signature fields', async ({ page }) => {
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: true });
// Wait for the editor to render before asserting the banner is absent.
await expect(page.getByTestId('envelope-editor-step-upload')).toBeVisible();
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).not.toBeVisible();
});
test('warning disappears after placing a signature field', async ({ page }) => {
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: false });
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).toBeVisible();
// Place a signature field for the direct recipient (auto-selected single recipient).
await clickEnvelopeEditorStep(page, 'addFields');
await expect(page.locator('.konva-container canvas').first()).toBeVisible();
await placeFieldOnPdf(page, 'Signature', { x: 120, y: 140 });
// The banner clears once the field is autosaved and the envelope state updates.
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).not.toBeVisible({ timeout: 15_000 });
});
});
@@ -1,18 +0,0 @@
import type { Page } from '@playwright/test';
import { expect } from '@playwright/test';
/**
* Opens the app command menu via the keyboard shortcut.
*
* Retries the shortcut until the menu appears since the keypress is a no-op
* when it happens before the page has hydrated.
*
* @param placeholder The search input placeholder to wait for, which differs
* between admin and non-admin users.
*/
export const openCommandMenu = async (page: Page, placeholder: string) => {
await expect(async () => {
await page.keyboard.press('Meta+K');
await expect(page.getByPlaceholder(placeholder).first()).toBeVisible({ timeout: 1_000 });
}).toPass({ timeout: 15_000 });
};
@@ -6,6 +6,7 @@ import { expect, test } from '@playwright/test';
import { apiSignin } from '../fixtures/authentication';
import { expectToastTextToBeVisible } from '../fixtures/generic';
import { signSignaturePad } from '../fixtures/signature';
test('[PUBLIC_PROFILE]: create team profile', async ({ page }) => {
const { user, team } = await seedUser();
@@ -73,8 +74,19 @@ test('[PUBLIC_PROFILE]: create team profile', async ({ page }) => {
await expect(page.locator('body')).toContainText('public-direct-template-title');
await expect(page.locator('body')).toContainText('public-direct-template-description');
const directSignatureField = directTemplate.fields[0];
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
await page.getByRole('link', { name: 'Sign' }).click();
await page.getByRole('button', { name: 'Continue' }).click();
await signSignaturePad(page);
await page.locator(`#field-${directSignatureField.id}`).getByRole('button').click();
await expect(page.locator(`#field-${directSignatureField.id}`)).toHaveAttribute('data-inserted', 'true');
await page.getByRole('button', { name: 'Complete' }).click();
await page.getByRole('button', { name: 'Sign' }).click();
@@ -197,7 +197,18 @@ test('[DIRECT_TEMPLATES]: V1 direct template link auth access', async ({ page })
await expect(page.getByRole('heading', { name: 'General' })).toBeVisible();
await expect(page.getByLabel('Email')).toBeDisabled();
const directSignatureField = directTemplateWithAuth.fields[0];
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
await page.getByRole('button', { name: 'Continue' }).click();
await signSignaturePad(page);
await page.locator(`#field-${directSignatureField.id}`).getByRole('button').click();
await expect(page.locator(`#field-${directSignatureField.id}`)).toHaveAttribute('data-inserted', 'true');
await page.getByRole('button', { name: 'Complete' }).click();
await page.getByRole('button', { name: 'Sign' }).click();
@@ -235,6 +246,37 @@ test('[DIRECT_TEMPLATES]: V2 direct template link auth access', async ({ page })
await page.goto(directTemplatePath);
await expect(page.getByRole('heading', { name: 'Personal direct template link' })).toBeVisible();
const directSignatureField = directTemplateWithAuth.fields[0];
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
// Wait for the PDF and the Konva canvas overlay to be ready.
await expect(page.locator('img[data-page-number]').first()).toBeVisible({ timeout: 30_000 });
const canvas = page.locator('.konva-container canvas').first();
await expect(canvas).toBeVisible({ timeout: 30_000 });
// Sign the direct template recipient's signature field via the canvas-based V2 UI.
await signSignaturePad(page);
const canvasBox = await canvas.boundingBox();
if (!canvasBox) {
throw new Error('Canvas bounding box not found');
}
const x =
(Number(directSignatureField.positionX) / 100) * canvasBox.width +
((Number(directSignatureField.width) / 100) * canvasBox.width) / 2;
const y =
(Number(directSignatureField.positionY) / 100) * canvasBox.height +
((Number(directSignatureField.height) / 100) * canvasBox.height) / 2;
await canvas.click({ position: { x, y } });
await expect(page.getByText('0 Fields Remaining').first()).toBeVisible({ timeout: 10_000 });
await page.getByRole('button', { name: 'Complete' }).click();
await expect(page.getByLabel('Your Email')).not.toBeVisible();
@@ -266,6 +308,16 @@ test('[DIRECT_TEMPLATES]: use direct template link with 1 recipient', async ({ p
await expect(page.getByText('Next Recipient Name')).not.toBeVisible();
const directSignatureField = template.fields[0];
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
await signSignaturePad(page);
await page.locator(`#field-${directSignatureField.id}`).getByRole('button').click();
await expect(page.locator(`#field-${directSignatureField.id}`)).toHaveAttribute('data-inserted', 'true');
await page.getByRole('button', { name: 'Complete' }).click();
await page.getByRole('button', { name: 'Sign' }).click();
await page.waitForURL(/\/sign/);
@@ -299,19 +351,13 @@ test('[DIRECT_TEMPLATES]: V1 use direct template link with 2 recipients with nex
},
});
const directTemplateRecipient = template.recipients[0];
// The seeded direct template already includes a signature field for the direct recipient.
const directSignatureField = template.fields[0];
if (!directTemplateRecipient) {
throw new Error('Expected direct template recipient to exist');
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
// All SIGNER recipients need a signature field for sendDocument to dispatch emails.
const directSignatureField = await seedSignatureFieldForRecipient({
envelopeId: template.id,
recipientId: directTemplateRecipient.id,
positionY: 10,
});
const originalName = 'Signer 2';
const originalSecondSignerEmail = seedTestEmail();
@@ -413,19 +459,13 @@ test('[DIRECT_TEMPLATES]: V2 use direct template link with 2 recipients with nex
},
});
const directTemplateRecipient = template.recipients[0];
// The seeded direct template already includes a signature field for the direct recipient.
const directSignatureField = template.fields[0];
if (!directTemplateRecipient) {
throw new Error('Expected direct template recipient to exist');
if (!directSignatureField) {
throw new Error('Expected seeded direct template signature field to exist');
}
// All SIGNER recipients need a signature field for sendDocument to dispatch emails.
const directSignatureField = await seedSignatureFieldForRecipient({
envelopeId: template.id,
recipientId: directTemplateRecipient.id,
positionY: 10,
});
const originalName = 'Signer 2';
const originalSecondSignerEmail = seedTestEmail();
@@ -521,3 +561,48 @@ test('[DIRECT_TEMPLATES]: V2 use direct template link with 2 recipients with nex
expect(updatedSecondRecipient.email).toBe(newSecondSignerEmail);
await expectSigningRequestJobForRecipient(updatedSecondRecipient.id);
});
test('[DIRECT_TEMPLATES]: V1 direct template without signature fields shows invalid template page', async ({
page,
}) => {
const { user, team } = await seedUser();
const template = await seedDirectTemplate({
title: 'V1 invalid direct template',
userId: user.id,
teamId: team.id,
createDirectRecipientSignatureField: false,
});
await page.goto(formatDirectTemplatePath(template.directLink?.token || ''));
await expect(page.getByRole('heading', { name: 'Invalid direct link template' })).toBeVisible();
await expect(page.getByText('This direct link template cannot be used because one or more signers')).toBeVisible();
// The signing flow must not render.
await expect(page.getByRole('heading', { name: 'General' })).not.toBeVisible();
await expect(page.getByRole('button', { name: 'Continue' })).not.toBeVisible();
});
test('[DIRECT_TEMPLATES]: V2 direct template without signature fields shows invalid template page', async ({
page,
}) => {
const { user, team } = await seedUser();
const template = await seedDirectTemplate({
title: 'V2 invalid direct template',
userId: user.id,
teamId: team.id,
internalVersion: 2,
createDirectRecipientSignatureField: false,
});
await page.goto(formatDirectTemplatePath(template.directLink?.token || ''));
await expect(page.getByRole('heading', { name: 'Invalid direct link template' })).toBeVisible();
await expect(page.getByText('This direct link template cannot be used because one or more signers')).toBeVisible();
// The signing flow (PDF canvas) must not render.
await expect(page.locator('.konva-container canvas')).toHaveCount(0);
await expect(page.getByRole('button', { name: 'Complete' })).not.toBeVisible();
});
@@ -0,0 +1,101 @@
import { FIELD_SIGNATURE_META_DEFAULT_VALUES } from '@documenso/lib/types/field-meta';
import { prisma } from '@documenso/prisma';
import { seedTemplate } from '@documenso/prisma/seed/templates';
import { seedUser } from '@documenso/prisma/seed/users';
import { expect, test } from '@playwright/test';
import { DocumentStatus, FieldType } from '@prisma/client';
import { apiSignin } from '../fixtures/authentication';
import { expectToastTextToBeVisible } from '../fixtures/generic';
const seedSignatureFieldForRecipient = async (options: { envelopeId: string; recipientId: number }) => {
const envelopeItem = await prisma.envelopeItem.findFirstOrThrow({
where: { envelopeId: options.envelopeId },
});
return await prisma.field.create({
data: {
envelopeId: options.envelopeId,
envelopeItemId: envelopeItem.id,
recipientId: options.recipientId,
type: FieldType.SIGNATURE,
page: 1,
positionX: 5,
positionY: 10,
width: 20,
height: 5,
customText: '',
inserted: false,
fieldMeta: FIELD_SIGNATURE_META_DEFAULT_VALUES,
},
});
};
test('[TEMPLATE_USE]: shows missing signature fields error when sending a template without signature fields', async ({
page,
}) => {
const { user, team } = await seedUser();
// seedTemplate creates one SIGNER recipient and no fields.
await seedTemplate({
title: 'Template missing signature fields',
userId: user.id,
teamId: team.id,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/templates`,
});
await page.getByRole('button', { name: 'Use Template' }).click();
await expect(page.getByRole('heading', { name: 'Create document from template' })).toBeVisible();
// Enable distribution so the document is sent on creation.
await page.locator('#distributeDocument').click();
await page.getByRole('button', { name: 'Create and send' }).click();
await expectToastTextToBeVisible(page, 'Missing signature fields');
await expectToastTextToBeVisible(
page,
'The document could not be sent because some signers do not have a signature field',
);
});
test('[TEMPLATE_USE]: creates and sends a document when signers have signature fields', async ({ page }) => {
const { user, team } = await seedUser();
const template = await seedTemplate({
title: 'Template with signature fields',
userId: user.id,
teamId: team.id,
});
await seedSignatureFieldForRecipient({
envelopeId: template.id,
recipientId: template.recipients[0].id,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/templates`,
});
await page.getByRole('button', { name: 'Use Template' }).click();
await expect(page.getByRole('heading', { name: 'Create document from template' })).toBeVisible();
await page.locator('#distributeDocument').click();
await page.getByRole('button', { name: 'Create and send' }).click();
await page.waitForURL(new RegExp(`/t/${team.url}/documents/envelope_.*`));
const envelopeId = page.url().split('/').pop()?.split('?')[0];
const envelope = await prisma.envelope.findFirstOrThrow({
where: { id: envelopeId },
});
expect(envelope.status).toBe(DocumentStatus.PENDING);
});
+9
View File
@@ -36,6 +36,13 @@ export enum AppErrorCode {
*/
ENVELOPE_TSP_LOCKED = 'ENVELOPE_TSP_LOCKED',
/**
* A signer recipient does not have a signature field assigned. Thrown when
* distributing an envelope or using a direct template where at least one
* signer has no signature field.
*/
MISSING_SIGNATURE_FIELD = 'MISSING_SIGNATURE_FIELD',
/**
* CSC (Cloud Signature Consortium) error codes. See the CSC QES V1 spec
* for the recovery taxonomy.
@@ -84,6 +91,7 @@ export const genericErrorCodeToTrpcErrorCodeMap: Record<string, { code: string;
[AppErrorCode.ENVELOPE_CANCELLED]: { code: 'BAD_REQUEST', status: 400 },
[AppErrorCode.ENVELOPE_LEGACY]: { code: 'BAD_REQUEST', status: 400 },
[AppErrorCode.ENVELOPE_TSP_LOCKED]: { code: 'BAD_REQUEST', status: 400 },
[AppErrorCode.MISSING_SIGNATURE_FIELD]: { code: 'BAD_REQUEST', status: 400 },
[AppErrorCode.CSC_INSTANCE_MODE_MISMATCH]: { code: 'BAD_REQUEST', status: 400 },
[AppErrorCode.CSC_UNLICENSED]: { code: 'FORBIDDEN', status: 403 },
[AppErrorCode.CSC_PROVIDER_INFO_FAILED]: { code: 'INTERNAL_SERVER_ERROR', status: 500 },
@@ -291,6 +299,7 @@ export class AppError extends Error {
AppErrorCode.ENVELOPE_CANCELLED,
AppErrorCode.ENVELOPE_LEGACY,
AppErrorCode.ENVELOPE_TSP_LOCKED,
AppErrorCode.MISSING_SIGNATURE_FIELD,
AppErrorCode.CSC_INSTANCE_MODE_MISMATCH,
AppErrorCode.CSC_CREDENTIAL_LIST_EMPTY,
AppErrorCode.CSC_CERT_INVALID,
@@ -1,372 +0,0 @@
import { prisma } from '@documenso/prisma';
import { EnvelopeType } from '@prisma/client';
export const ADMIN_SEARCH_RESULTS_PER_TYPE = 5;
const MAX_POSTGRES_INT = 2147483647;
const GROUP_ORDER = ['document', 'user', 'organisation', 'team', 'recipient', 'subscription'] as const;
export type AdminGlobalSearchResultType = (typeof GROUP_ORDER)[number];
export type AdminGlobalSearchResult = {
label: string;
sublabel?: string;
path: string;
value: string;
};
export type AdminGlobalSearchGroup = {
type: AdminGlobalSearchResultType;
results: AdminGlobalSearchResult[];
};
export type AdminGlobalSearchOptions = {
query: string;
};
type PartialResults = Partial<Record<AdminGlobalSearchResultType, AdminGlobalSearchResult[]>>;
export const adminGlobalSearch = async ({ query }: AdminGlobalSearchOptions): Promise<AdminGlobalSearchGroup[]> => {
const trimmedQuery = query.trim();
if (trimmedQuery.length === 0) {
return [];
}
const resultsByType = await resolveSearch(trimmedQuery);
return GROUP_ORDER.map((type) => ({
type,
results: (resultsByType[type] ?? []).map((result) => ({
...result,
// Append the raw query so cmdk's client-side filter never hides
// server-verified results.
value: `${result.value} ${trimmedQuery}`,
})),
})).filter((group) => group.results.length > 0);
};
const resolveSearch = async (query: string): Promise<PartialResults> => {
// Recognized ID prefixes resolve to a single exact lookup.
if (query.startsWith('envelope_')) {
return { document: await findDocumentsByExactId({ id: query }) };
}
if (query.startsWith('document_')) {
return { document: await findDocumentsByExactId({ secondaryId: query }) };
}
if (query.startsWith('org_')) {
return { organisation: await findOrganisationsByIdOrUrl(query) };
}
// Bare numbers are treated as verified ID lookups only. Oversized numbers
// fall through to text search.
const numericId = Number(query);
if (/^\d+$/.test(query) && numericId <= MAX_POSTGRES_INT) {
const [document, user, team, recipient, subscription] = await Promise.all([
findDocumentsByExactId({ secondaryId: `document_${numericId}` }),
findUsersById(numericId),
findTeamsById(numericId),
findRecipientsById(numericId),
findSubscriptionsById(numericId),
]);
return { document, user, team, recipient, subscription };
}
// Free text searches all resource types in parallel.
const [document, user, organisation, team, recipient, subscription] = await Promise.all([
findDocumentsByText(query),
findUsersByText(query),
findOrganisationsByText(query),
findTeamsByText(query),
findRecipientsByText(query),
findSubscriptionsByText(query),
]);
return {
document,
user,
organisation,
team,
recipient,
subscription,
};
};
const joinSublabel = (parts: Array<string | null | undefined>) =>
parts.filter((part) => part && part.length > 0).join(' · ') || undefined;
// ─── Documents ────────────────────────────────────────────────────────────────
const documentSelect = {
id: true,
title: true,
secondaryId: true,
user: { select: { email: true } },
} as const;
type DocumentRow = {
id: string;
title: string;
secondaryId: string;
user: { email: string };
};
const mapDocument = (envelope: DocumentRow): AdminGlobalSearchResult => ({
label: envelope.title,
sublabel: joinSublabel([envelope.secondaryId, envelope.user.email]),
path: `/admin/documents/${envelope.id}`,
value: `document ${envelope.id} ${envelope.secondaryId} ${envelope.title} ${envelope.user.email}`,
});
const findDocumentsByExactId = async (where: { id: string } | { secondaryId: string }) => {
const envelope = await prisma.envelope.findFirst({
where: { ...where, type: EnvelopeType.DOCUMENT },
select: documentSelect,
});
return envelope ? [mapDocument(envelope)] : [];
};
const findDocumentsByText = async (query: string) => {
const envelopes = await prisma.envelope.findMany({
where: {
type: EnvelopeType.DOCUMENT,
title: { contains: query, mode: 'insensitive' },
},
orderBy: { createdAt: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: documentSelect,
});
return envelopes.map(mapDocument);
};
// ─── Users ────────────────────────────────────────────────────────────────────
const userSelect = {
id: true,
name: true,
email: true,
} as const;
type UserRow = { id: number; name: string | null; email: string };
const mapUser = (user: UserRow): AdminGlobalSearchResult => ({
label: user.name || user.email,
sublabel: joinSublabel([`#${user.id}`, user.email]),
path: `/admin/users/${user.id}`,
value: `user ${user.id} ${user.name ?? ''} ${user.email}`,
});
const findUsersById = async (id: number) => {
const user = await prisma.user.findFirst({
where: { id },
select: userSelect,
});
return user ? [mapUser(user)] : [];
};
const findUsersByText = async (query: string) => {
const users = await prisma.user.findMany({
where: {
OR: [{ name: { contains: query, mode: 'insensitive' } }, { email: { contains: query, mode: 'insensitive' } }],
},
orderBy: { id: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: userSelect,
});
return users.map(mapUser);
};
// ─── Organisations ────────────────────────────────────────────────────────────
const organisationSelect = {
id: true,
name: true,
owner: { select: { email: true } },
} as const;
type OrganisationRow = { id: string; name: string; owner: { email: string } };
const mapOrganisation = (organisation: OrganisationRow): AdminGlobalSearchResult => ({
label: organisation.name,
sublabel: joinSublabel([organisation.id, organisation.owner.email]),
path: `/admin/organisations/${organisation.id}`,
value: `organisation ${organisation.id} ${organisation.name} ${organisation.owner.email}`,
});
const findOrganisationsByIdOrUrl = async (query: string) => {
const organisations = await prisma.organisation.findMany({
where: {
OR: [{ id: query }, { url: query }],
},
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: organisationSelect,
});
return organisations.map(mapOrganisation);
};
const findOrganisationsByText = async (query: string) => {
const organisations = await prisma.organisation.findMany({
where: {
OR: [
{ name: { contains: query, mode: 'insensitive' } },
{ url: { contains: query, mode: 'insensitive' } },
{ customerId: { contains: query, mode: 'insensitive' } },
{ owner: { email: { contains: query, mode: 'insensitive' } } },
],
},
orderBy: { createdAt: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: organisationSelect,
});
return organisations.map(mapOrganisation);
};
// ─── Teams ────────────────────────────────────────────────────────────────────
const teamSelect = {
id: true,
name: true,
url: true,
organisation: { select: { name: true } },
} as const;
type TeamRow = { id: number; name: string; url: string; organisation: { name: string } };
const mapTeam = (team: TeamRow): AdminGlobalSearchResult => ({
label: team.name,
sublabel: joinSublabel([`#${team.id}`, `/${team.url}`, team.organisation.name]),
path: `/admin/teams/${team.id}`,
value: `team ${team.id} ${team.name} ${team.url} ${team.organisation.name}`,
});
const findTeamsById = async (id: number) => {
const team = await prisma.team.findFirst({
where: { id },
select: teamSelect,
});
return team ? [mapTeam(team)] : [];
};
const findTeamsByText = async (query: string) => {
const teams = await prisma.team.findMany({
where: {
OR: [{ name: { contains: query, mode: 'insensitive' } }, { url: { contains: query, mode: 'insensitive' } }],
},
orderBy: { createdAt: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: teamSelect,
});
return teams.map(mapTeam);
};
// ─── Recipients ───────────────────────────────────────────────────────────────
const recipientSelect = {
id: true,
name: true,
email: true,
envelope: { select: { id: true, title: true } },
} as const;
type RecipientRow = {
id: number;
name: string;
email: string;
envelope: { id: string; title: string };
};
const mapRecipient = (recipient: RecipientRow): AdminGlobalSearchResult => ({
label: recipient.email,
sublabel: joinSublabel([`#${recipient.id}`, recipient.name, recipient.envelope.title]),
path: `/admin/documents/${recipient.envelope.id}`,
value: `recipient ${recipient.id} ${recipient.name} ${recipient.email} ${recipient.envelope.title}`,
});
const findRecipientsById = async (id: number) => {
const recipient = await prisma.recipient.findFirst({
where: {
id,
envelope: { type: EnvelopeType.DOCUMENT },
},
select: recipientSelect,
});
return recipient ? [mapRecipient(recipient)] : [];
};
const findRecipientsByText = async (query: string) => {
const recipients = await prisma.recipient.findMany({
where: {
envelope: { type: EnvelopeType.DOCUMENT },
OR: [{ email: { contains: query, mode: 'insensitive' } }, { name: { contains: query, mode: 'insensitive' } }],
},
orderBy: { id: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: recipientSelect,
});
return recipients.map(mapRecipient);
};
// ─── Subscriptions ────────────────────────────────────────────────────────────
const subscriptionSelect = {
id: true,
status: true,
planId: true,
customerId: true,
organisationId: true,
} as const;
type SubscriptionRow = {
id: number;
status: string;
planId: string;
customerId: string;
organisationId: string;
};
const mapSubscription = (subscription: SubscriptionRow): AdminGlobalSearchResult => ({
label: `Subscription #${subscription.id}`,
sublabel: joinSublabel([subscription.status, subscription.planId]),
path: `/admin/organisations/${subscription.organisationId}`,
value: `subscription ${subscription.id} ${subscription.planId} ${subscription.customerId}`,
});
const findSubscriptionsById = async (id: number) => {
const subscription = await prisma.subscription.findFirst({
where: { id },
select: subscriptionSelect,
});
return subscription ? [mapSubscription(subscription)] : [];
};
const findSubscriptionsByText = async (query: string) => {
const subscriptions = await prisma.subscription.findMany({
where: {
OR: [
{ planId: { contains: query, mode: 'insensitive' } },
{ customerId: { contains: query, mode: 'insensitive' } },
],
},
orderBy: { createdAt: 'desc' },
take: ADMIN_SEARCH_RESULTS_PER_TYPE,
select: subscriptionSelect,
});
return subscriptions.map(mapSubscription);
};
@@ -194,7 +194,7 @@ export const sendDocument = async ({ id, userId, teamId, sendEmail, requestMetad
.map((r) => (r.name ? `${r.name} (${r.email}, id: ${r.id})` : `${r.email} (id: ${r.id})`))
.join(', ');
throw new AppError(AppErrorCode.INVALID_REQUEST, {
throw new AppError(AppErrorCode.MISSING_SIGNATURE_FIELD, {
message: `The following recipients are missing required fields: ${missingRecipientDescriptions}. Signers must have at least one signature field.`,
});
}
@@ -5,6 +5,7 @@ import { match } from 'ts-pattern';
import { AppError, AppErrorCode } from '../../errors/app-error';
import { DocumentAccessAuth, type TDocumentAuthMethods } from '../../types/document-auth';
import { extractDocumentAuthMethods } from '../../utils/document-auth';
import { getRecipientsWithMissingFields } from '../../utils/recipients';
import { extractFieldAutoInsertValues } from '../document/send-document';
import { getTeamSettings } from '../team/get-team-settings';
import type { EnvelopeForSigningResponse } from './get-envelope-for-recipient-signing';
@@ -125,6 +126,17 @@ export const getEnvelopeForDirectTemplateSigning = async ({
});
}
const recipientsWithMissingFields = getRecipientsWithMissingFields(
envelope.recipients,
envelope.recipients.flatMap((envelopeRecipient) => envelopeRecipient.fields),
);
if (recipientsWithMissingFields.length > 0) {
throw new AppError(AppErrorCode.MISSING_SIGNATURE_FIELD, {
message: 'One or more signers on this direct template are missing a signature field',
});
}
const settings = await getTeamSettings({ teamId: envelope.teamId });
const sender = settings.includeSenderDetails
@@ -40,6 +40,7 @@ import {
extractDocumentAuthMethods,
} from '../../utils/document-auth';
import { mapSecondaryIdToTemplateId } from '../../utils/envelope';
import { getRecipientsWithMissingFields } from '../../utils/recipients';
import { sendDocument } from '../document/send-document';
import { validateFieldAuth } from '../document/validate-field-auth';
import { incrementDocumentId } from '../envelope/increment-id';
@@ -172,6 +173,17 @@ export const createDocumentFromDirectTemplate = async ({
});
}
const recipientsWithMissingFields = getRecipientsWithMissingFields(
recipients,
recipients.flatMap((recipient) => recipient.fields),
);
if (recipientsWithMissingFields.length > 0) {
throw new AppError(AppErrorCode.MISSING_SIGNATURE_FIELD, {
message: 'One or more signers on this direct template are missing a signature field',
});
}
if (directTemplateEnvelope.updatedAt.getTime() !== templateUpdatedAt.getTime()) {
throw new AppError(AppErrorCode.INVALID_REQUEST, { message: 'Template no longer matches' });
}
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -850,11 +850,11 @@ msgstr "0 freie Organisationen übrig"
msgid "1 Free organisations left"
msgstr "1 Freie Organisationen übrig"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 Monat"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 Monate"
@@ -870,7 +870,7 @@ msgstr "2FA Zurücksetzen"
msgid "2FA token"
msgstr "2FA-Token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 Monate"
@@ -949,11 +949,11 @@ msgstr "5 Dokumente im Monat"
msgid "500 Internal Server Error"
msgstr "500 Interner Serverfehler"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 Monate"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 Tage"
@@ -1008,6 +1008,10 @@ msgstr "Ein Mitglied hat Ihre Organisation {organisationName} verlassen"
msgid "A member has left your organisation on Documenso"
msgstr "Ein Mitglied hat Ihre Organisation auf Documenso verlassen"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "Ein Name, der Ihnen hilft, dieses Token später zu identifizieren."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "Ein neues Mitglied ist Ihrer Organisation beigetreten"
@@ -1016,10 +1020,6 @@ msgstr "Ein neues Mitglied ist Ihrer Organisation beigetreten"
msgid "A new member has joined your organisation {organisationName}"
msgstr "Ein neues Mitglied ist Ihrer Organisation {organisationName} beigetreten"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "Ein neuer Token wurde erfolgreich erstellt."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "Aktion"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "Aktionen"
@@ -1417,7 +1418,7 @@ msgstr "Platzhalter hinzufügen"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "Rate-Limit-Zeitfenster hinzufügen"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "Nach der elektronischen Unterzeichnung eines Dokuments haben Sie die Mö
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "Nach der Übermittlung wird ein Dokument automatisch generiert und zu Ihrer Dokumentenseite hinzugefügt. Sie erhalten außerdem eine Benachrichtigung per E-Mail."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "KI-Funktionen"
@@ -1708,11 +1710,11 @@ msgstr "Eine E-Mail mit dieser Adresse existiert bereits."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "Sind Sie sicher, dass Sie den folgenden Transport löschen möchten?"
msgid "Are you sure you want to delete this folder?"
msgstr "Möchten Sie diesen Ordner wirklich löschen?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "Bist du sicher, dass du dieses Token löschen möchtest?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Sind Sie sicher, dass Sie dieses Dokument ablehnen möchten? Diese Aktion kann nicht rückgängig gemacht werden."
@@ -2390,6 +2388,10 @@ msgstr "Blau"
msgid "Border"
msgstr "Rahmen"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "Rahmenradius"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "Eckenradius"
@@ -2406,6 +2408,10 @@ msgstr "Unten"
msgid "Brand Colours"
msgstr "Markenfarben"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "Markenfarben, einschließlich Hintergrund-, Vordergrund-, Primär- und Rahmenfarben"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "Markendetails"
@@ -2414,6 +2420,10 @@ msgstr "Markendetails"
msgid "Brand Website"
msgstr "Marken-Website"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "Marken-Website und Markendetails"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "Marken"
msgid "Branding company details"
msgstr "Branding-Unternehmensdetails"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "Branding-Logo"
@@ -2544,9 +2555,11 @@ msgstr "Person nicht gefunden?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "Person nicht gefunden?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "Artikel können nicht hochgeladen werden, nachdem das Dokument versendet
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "Für diese Organisation aktivierte Funktionen."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "Verifizierungsmethode wählen"
msgid "Choose your preferred authentication method:"
msgstr "Wählen Sie Ihre bevorzugte Authentifizierungsmethode aus:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "Wählen..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "Anspruch"
@@ -3264,14 +3274,14 @@ msgstr "Signierlinks kopieren"
msgid "Copy team ID"
msgstr "Team-ID kopieren"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "Token kopieren"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "Wert kopieren"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "Kopieren Sie Ihr Token jetzt. Aus Sicherheitsgründen können Sie es später nicht mehr einsehen."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "Zähler zurückgesetzt."
@@ -3338,10 +3348,18 @@ msgstr "Erstellen Sie eine Organisation, um mit Teams zusammenzuarbeiten"
msgid "Create an organisation to get started."
msgstr "Erstellen Sie eine Organisation, um zu beginnen."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "Erstellen und verwalten Sie API-Tokens. Weitere Informationen finden Sie in unserer <0>Dokumentation</0>."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "Erstellen und senden"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "API-Token erstellen"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "Als Entwurf erstellen"
@@ -3460,8 +3478,8 @@ msgstr "Vorlage erstellen"
msgid "Create the document as pending and ready to sign."
msgstr "Erstellen Sie das Dokument als ausstehend und bereit zur Unterschrift."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "Token erstellen"
@@ -3507,6 +3525,7 @@ msgstr "Erstellen Sie Ihr Konto und beginnen Sie mit dem modernen Dokumentensign
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "Erstellt"
@@ -3527,11 +3546,6 @@ msgstr "Erstellt von"
msgid "Created on"
msgstr "Erstellt am"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "Erstellt am {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "Dokument wird erstellt"
@@ -3587,6 +3601,14 @@ msgstr "Derzeit können E-Mail-Domains nur für Plattform- und höhere Pläne ko
msgid "Custom {0} MB file"
msgstr "Benutzerdefinierte {0} MB-Datei"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "Einstellung für aktiviertes benutzerdefiniertes Branding"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "Benutzerdefiniertes CSS"
#: 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 "Benutzerdefiniertes CSS wird beim Speichern bereinigt. Layout-zerschießende Eigenschaften, entfernte URLs und Pseudo-Elemente werden automatisch entfernt. Alle Regeln, die während der Bereinigung verworfen werden, werden nach dem Speichern angezeigt."
@@ -3671,14 +3693,26 @@ msgstr "Standard (System-Mailer)"
msgid "Default border colour."
msgstr "Standardrahmenfarbe."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "Standard-Datumsformat"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "Standard-Datumsformat"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "Standard-Dokumentsprache"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "Standardsprache des Dokuments"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "Standard-Dokumentsichtbarkeit"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "Standard Sichtbarkeit des Dokuments"
@@ -3691,6 +3725,10 @@ msgstr "Standard-E-Mail"
msgid "Default Email Settings"
msgstr "Standard-E-Mail-Einstellungen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "Standardablauf der Umschläge"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "Standardablauf für Umschläge"
@@ -3703,6 +3741,10 @@ msgstr "Standarddatei"
msgid "Default Organisation Role for New Users"
msgstr "Standardorganisation Rolle für neue Benutzer"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "Standardempfänger"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "Standardempfänger"
@@ -3715,14 +3757,26 @@ msgstr "Standard­einstellungen, die auf diese Organisation angewendet werden."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "Standard­einstellungen, die auf dieses Team angewendet werden. Vererbte Werte stammen von der Organisation."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "Standard-Signatureinstellungen"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "Standard-Signatureinstellungen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "Standard-Erinnerungen für die Unterzeichnung"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "Standard-Signaturerinnerungen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "Standardzeitzone"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "Standard-Zeitzone"
@@ -3738,6 +3792,7 @@ msgstr "Standardwert"
msgid "Default Value"
msgstr "Standardwert"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "Dokumenten­eigentum delegieren"
@@ -3768,6 +3823,7 @@ msgstr "löschen"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "Löschen Sie das Dokument. Diese Aktion ist irreversibel, daher seien Si
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "Löschen Sie das Benutzerkonto und seinen gesamten Inhalt. Diese Aktion ist irreversibel und wird das Abonnement kündigen, seien Sie also vorsichtig."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "Token löschen"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Webhook löschen"
@@ -4651,6 +4711,10 @@ msgstr "Nicht wiederholen"
msgid "Don't transfer (Delete all documents)"
msgstr "Nicht übertragen (alle Dokumente löschen)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "Fertig"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "Leeres Feld"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "Leeres Kontingent bedeutet unbegrenzt, 0 blockiert die Ressource. Rate-Limit-Zeitfenster akzeptieren Werte wie 5m, 1h oder 24h."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "Eingeben"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "Geben Sie eine maximale Anfragenanzahl größer als 0 ein"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "Neuen Titel eingeben"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "Geben Sie ein Zeitfenster ein, z. B. 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "Alle haben unterschrieben! Sie erhalten eine Kopie des unterschriebenen
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "Überschritten"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "Ablauf"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "Abgelaufen"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "Abgelaufen"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "Läuft ab"
@@ -5538,16 +5604,15 @@ msgstr "Läuft ab"
msgid "Expires {0}"
msgstr "Läuft ab am {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "Läuft ab in"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Läuft ab in {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "Läuft ab am {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "Ich bin der Besitzer dieses Dokuments"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "Ich verstehe, dass ich meine Anmeldedaten einem Drittanbieter-Service zur Verfügung stelle, der von dieser Organisation konfiguriert wurde."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "Ich bin mir sicher! Löschen"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "Absenderdetails einbeziehen"
msgid "Include signing certificate"
msgstr "Signaturzertifikat einbeziehen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "Audit-Logs im Dokument einschließen"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "Audit-Logs im Dokument einbeziehen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "Signaturzertifikat im Dokument einschließen"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "Signaturzertifikat in das Dokument einfügen"
@@ -6429,6 +6498,11 @@ msgstr "Instanzstatistiken"
msgid "Invalid code. Please try again."
msgstr "Ungültiger Code. Bitte versuchen Sie es erneut."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "Ungültige Direktlink-Vorlage"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "Ungültige Domains"
@@ -6772,7 +6846,7 @@ msgstr "Möchten Sie Ihr eigenes öffentliches Profil mit Vereinbarungen haben?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "Limit erreicht"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "Max"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "Maximale Anfragen"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "Fehlende Lizenz Ihre Documenso-Instanz verwendet Funktionen, für di
msgid "Missing Recipients"
msgstr "Fehlende Empfänger"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "Fehlende Signaturfelder"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "Monatlich aktive Benutzer: Benutzer, die mindestens eines ihrer Dokument
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "Monatliches Kontingent"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "Monatliche Nutzung"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "Einstellungen für Namen"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "Nahe am Limit"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "Muss unterzeichnen"
msgid "Needs to view"
msgstr "Muss sehen"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "Niemals"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "Nie ablaufen"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "Läuft nie ab"
@@ -7451,7 +7530,7 @@ msgstr "Keine Gruppen gefunden"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "Kein geerbter Anspruch"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "Ein"
msgid "On this page, you can create a new webhook."
msgstr "Auf dieser Seite können Sie einen neuen Webhook erstellen."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "Auf dieser Seite können Sie API-Token erstellen und verwalten. Weitere Informationen finden Sie in unserer <0>Dokumentation</0>."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "Auf dieser Seite können Sie neue Webhooks erstellen und die vorhandenen verwalten."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "Nach der Bestätigung wird Folgendes zurückgesetzt:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "Andernfalls wird das Dokument als Entwurf erstellt."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "Überlappende Felder erkannt"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "Ausstehend seit"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "Personen mit Zugriff auf diese Organisation."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "Bitte kontaktieren Sie den Webseiteninhaber für weitere Unterstützung.
msgid "Please don't close this tab. The signing provider is finalising your signature."
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."
msgstr "Bitte geben Sie einen aussagekräftigen Namen für Ihr Token ein. Dies wird Ihnen helfen, es später zu identifizieren."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "Bitte gib eine Zahl ein"
@@ -8876,6 +8952,10 @@ msgstr "Die Authentifizierung des Unterzeichnungsanbieters des Empfängers ist f
msgid "Recipients"
msgstr "Empfänger"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "Empfänger können diese Direktlink-Vorlage nicht verwenden, weil den folgenden Unterzeichnern ein Signaturfeld fehlt"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "Empfängermetriken"
@@ -8943,7 +9023,7 @@ msgstr "Weiterleitung"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "Weiterleitung zu {0}..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "Organisationsmitglied entfernen"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "Rate-Limit entfernen"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "Zurücksetzen"
msgid "Reset 2FA"
msgstr "2FA zurücksetzen"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "Branding-Einstellungen zurücksetzen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "Dokumenteinstellungen zurücksetzen"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "Zurücksetzungs-E-Mail gesendet"
@@ -9251,6 +9339,13 @@ msgstr "Passwort zurücksetzen"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "Die Zwei-Faktor-Authentifizierung des Benutzers zurücksetzen. Diese Aktion ist unwiderruflich und deaktiviert die Zwei-Faktor-Authentifizierung für den Benutzer."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "Auf Standardwerte zurücksetzen"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "Zwei-Faktor-Authentifizierung zurücksetzen"
@@ -9269,7 +9364,7 @@ msgstr "Zahlung klären"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "Ressource blockiert"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "Umschlag senden"
msgid "Send first reminder after"
msgstr "Erste Erinnerung senden nach"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "Im Namen des Teams senden"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "Im Namen des Teams senden"
@@ -9849,7 +9948,7 @@ msgstr "Gesendet"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "In diesem Zeitraum gesendet"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "Überspringen"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "Einige Felder sind übereinander platziert. Dies kann den Signaturvorgang erschweren oder dazu führen, dass Felder nicht wie erwartet funktionieren."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "Etwas ist schiefgelaufen!"
msgid "Something went wrong."
msgstr "Etwas ist schief gelaufen."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "Etwas ist schiefgelaufen. Bitte versuchen Sie es später noch einmal."
@@ -10849,7 +10948,7 @@ msgstr "Teams helfen Ihnen, Ihre Arbeit zu organisieren und mit anderen zusammen
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "Teams, die zu dieser Organisation gehören."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "Der Anzeigename für diese E-Mail-Adresse"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "Das Dokument konnte aufgrund fehlender oder ungültiger Informationen nicht erstellt werden. Bitte überprüfen Sie die Empfänger und Felder der Vorlage."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "Das Dokument konnte nicht gesendet werden, weil einige Unterzeichner kein Signaturfeld haben. Bitte bearbeiten Sie die Vorlage und fügen Sie für jeden Unterzeichner ein Signaturfeld hinzu."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "Das Dokument wurde erfolgreich gelöscht."
@@ -11434,10 +11537,6 @@ msgstr "Das Test-Webhook wurde erfolgreich an Ihren Endpunkt gesendet."
msgid "The token is invalid or has expired."
msgstr "Das Token ist ungültig oder abgelaufen."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "Der Token wurde in die Zwischenablage kopiert."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "Das Token wurde erfolgreich gelöscht."
@@ -11560,6 +11659,14 @@ msgstr "Je nach Größe Ihres Dokuments kann dies ein bis zwei Minuten dauern."
msgid "This claim is locked and cannot be deleted."
msgstr "Dieser Anspruch ist gesperrt und kann nicht gelöscht werden."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "Diese Direktlink-Vorlage kann nicht verwendet werden, weil einem oder mehreren Unterzeichnern kein Signaturfeld zugewiesen ist."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "Diese Direktlink-Vorlage kann nicht verwendet werden, weil einem oder mehreren Unterzeichnern kein Signaturfeld zugewiesen ist. Bitte wenden Sie sich an den Absender, um die Vorlage zu aktualisieren."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "Dieses Dokument kann nicht wiederhergestellt werden. Wenn du den Grund für zukünftige Dokumente anfechten möchtest, kontaktiere bitte den Support."
@@ -11830,6 +11937,14 @@ msgstr "Diese werden NUR Funktionsflags zurückspielen, die auf wahr gesetzt sin
msgid "This will remove all emails associated with this email domain"
msgstr "Dies entfernt alle E-Mails, die mit dieser E-Mail-Domain verbunden sind"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "Dadurch werden alle Branding-Einstellungen auf ihre Standardwerte zurückgesetzt und die Änderungen sofort gespeichert."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "Dadurch werden alle Dokumenteinstellungen auf ihre Standardwerte zurückgesetzt und die Änderungen sofort gespeichert."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "Dies meldet Sie auf allen anderen Geräten ab. Sie müssen sich erneut auf diesen Geräten anmelden, um Ihr Konto weiter zu nutzen."
@@ -12025,11 +12140,11 @@ msgstr "Schalten Sie den Schalter um, um Ihr Profil der Öffentlichkeit anzuzeig
msgid "Token"
msgstr "Token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "Token wurde in die Zwischenablage kopiert"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "Token erstellt"
@@ -12037,22 +12152,10 @@ msgstr "Token erstellt"
msgid "Token deleted"
msgstr "Token gelöscht"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "Token hat kein Ablaufdatum"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "Ablaufdatum des Tokens"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "Das Token ist abgelaufen. Bitte versuchen Sie es erneut."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "Token-Name"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "Token nicht gefunden"
@@ -12210,10 +12313,6 @@ msgstr "Zurzeit kann die Sprache nicht geändert werden. Bitte versuchen Sie es
msgid "Unable to copy recovery code"
msgstr "Kann Code zur Wiederherstellung nicht kopieren"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "Token kann nicht kopiert werden"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "Direkter Zugriff auf die Vorlage kann nicht erstellt werden. Bitte versuche es später noch einmal."
@@ -12347,7 +12446,7 @@ msgstr "Lösen"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "Nicht gespeicherte Änderungen"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "Verwenden"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "Verwenden Sie eine Dauer mit Einheit, z. B. 5m, 1h oder 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "Verwenden Sie ein eigenes Zeitfenster für jedes Rate-Limit"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Verwenden Sie API-Tokens, um sich bei der Documenso-API zu authentifizieren."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "Wir haben eine Bestätigungs-E-Mail zur Überprüfung gesendet."
msgid "We need your signature to sign documents"
msgstr "Wir benötigen Ihre Unterschrift, um Dokumente zu unterschreiben"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "Wir konnten das Token nicht in Ihre Zwischenablage kopieren. Bitte versuchen Sie es erneut."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "Wir konnten Ihren Wiederherstellungscode nicht in Ihre Zwischenablage kopieren. Bitte versuchen Sie es erneut."
@@ -13536,7 +13635,7 @@ msgstr "Breite:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "Zeitfenster"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "Zustimmung widerrufen"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "Innerhalb des Limits"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "Sie haben ein Umschlag-Element mit dem Titel {0} gelöscht"
msgid "You deleted the document"
msgstr "Sie haben das Dokument gelöscht"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "Sie haben keine Berechtigung, ein Token für dieses Team zu erstellen."
@@ -13987,6 +14086,10 @@ msgstr "Sie haben die Einladung von <0>{0}</0> abgelehnt, deren Organisation bei
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "Du hast das Dokument {0} initiiert, das erfordert, dass du {recipientActionVerb}."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "Sie haben noch keine API-Tokens. Ihre Tokens werden hier angezeigt, sobald Sie welche erstellt haben."
#: 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."
msgstr "Sie haben noch keine Webhooks. Ihre Webhooks werden hier angezeigt, sobald Sie sie erstellt haben."
@@ -14090,7 +14193,7 @@ msgstr "Sie haben das Recht, Ihre Zustimmung zur Verwendung elektronischer Unter
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "Sie haben nicht gespeicherte Änderungen"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "Ihr Kuvert wurde erfolgreich verteilt."
msgid "Your envelope has been resent successfully."
msgstr "Ihr Kuvert wurde erfolgreich erneut gesendet."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "Ihre vorhandenen Tokens"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "Ihr Name"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "Ihr neues API-Token"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "Ihre Vorlagen wurden erfolgreich gespeichert."
msgid "Your token has expired!"
msgstr "Ihr Token ist abgelaufen!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "Ihr Token wurde erfolgreich erstellt! Stellen Sie sicher, dass Sie es kopieren, da Sie es später nicht mehr sehen können!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "Ihre Tokens werden hier angezeigt, sobald Sie sie erstellt haben."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "Ihr Zwei-Faktor-Authentifizierungscode"
@@ -14771,3 +14866,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"
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: es\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -850,11 +850,11 @@ msgstr "0 Organizaciones gratuitas restantes"
msgid "1 Free organisations left"
msgstr "1 organizaciones gratuitas restantes"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 mes"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 meses"
@@ -870,7 +870,7 @@ msgstr "Restablecimiento de 2FA"
msgid "2FA token"
msgstr "Token de 2FA"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 meses"
@@ -949,11 +949,11 @@ msgstr "5 Documentos al mes"
msgid "500 Internal Server Error"
msgstr "500 Error Interno del Servidor"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 meses"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 días"
@@ -1008,6 +1008,10 @@ msgstr "Un miembro ha dejado tu organización {organisationName}"
msgid "A member has left your organisation on Documenso"
msgstr "Un miembro ha dejado tu organización en Documenso"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "Un nombre para ayudarte a identificar este token más tarde."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "Un nuevo miembro se ha unido a tu organización"
@@ -1016,10 +1020,6 @@ msgstr "Un nuevo miembro se ha unido a tu organización"
msgid "A new member has joined your organisation {organisationName}"
msgstr "Un nuevo miembro se ha unido a tu organización {organisationName}"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "Un nuevo token se ha creado con éxito."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "Acción"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "Acciones"
@@ -1417,7 +1418,7 @@ msgstr "Agregar Marcadores de posición"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "Agregar ventana de límite de frecuencia"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "Después de firmar un documento electrónicamente, se le dará la oportu
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "Después de la presentación, se generará automáticamente un documento y se agregará a su página de documentos. También recibirá una notificación por correo electrónico."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "Funciones de IA"
@@ -1708,11 +1710,11 @@ msgstr "Ya existe un correo electrónico con esta dirección."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "¿Seguro que quieres eliminar el siguiente transporte?"
msgid "Are you sure you want to delete this folder?"
msgstr "¿Está seguro de que quiere eliminar esta carpeta?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "¿Estás seguro de que deseas eliminar este token?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Are you sure you want to reject this document? This action cannot be undone."
@@ -2390,6 +2388,10 @@ msgstr "Azul"
msgid "Border"
msgstr "Borde"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "Radio de borde"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "Radio del borde"
@@ -2406,6 +2408,10 @@ msgstr "Fondo"
msgid "Brand Colours"
msgstr "Colores de la marca"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "Colores de la marca, incluidos los colores de fondo, primer plano, primario y borde"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "Detalles de la Marca"
@@ -2414,6 +2420,10 @@ msgstr "Detalles de la Marca"
msgid "Brand Website"
msgstr "Sitio Web de la Marca"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "Sitio web y detalles de la marca"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "Branding"
msgid "Branding company details"
msgstr "Detalles de la empresa para la marca"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "Logotipo de la marca"
@@ -2544,9 +2555,11 @@ msgstr "¿No puedes encontrar a alguien?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "¿No puedes encontrar a alguien?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "No se pueden cargar elementos después de que el documento ha sido envia
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "Capacidades habilitadas para esta organización."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "Elige el método de verificación"
msgid "Choose your preferred authentication method:"
msgstr "Elige tu método de autenticación preferido:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "Elija..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "Reclamación"
@@ -3264,14 +3274,14 @@ msgstr "Copiar enlaces de firma"
msgid "Copy team ID"
msgstr "Copiar ID del equipo"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "Copiar token"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "Copiar valor"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "Copia tu token ahora. Por razones de seguridad, no podrás verlo de nuevo."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "Contador restablecido."
@@ -3338,10 +3348,18 @@ msgstr "Crear una organización para colaborar con equipos"
msgid "Create an organisation to get started."
msgstr "Crear una organización para comenzar."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "Crea y gestiona tokens de API. Consulta nuestra <0>documentación</0> para obtener más información."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "Crear y enviar"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "Crear token de API"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "Crear como borrador"
@@ -3460,8 +3478,8 @@ msgstr "Crear plantilla"
msgid "Create the document as pending and ready to sign."
msgstr "Crear el documento como pendiente y listo para firmar."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "Crear token"
@@ -3507,6 +3525,7 @@ msgstr "Crea tu cuenta y comienza a utilizar la firma de documentos de última g
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "Creado"
@@ -3527,11 +3546,6 @@ msgstr "Creado por"
msgid "Created on"
msgstr "Creado el"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "Creado el {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "Creando documento"
@@ -3587,6 +3601,14 @@ msgstr "Actualmente los dominios de correo electrónico solo se pueden configura
msgid "Custom {0} MB file"
msgstr "Archivo personalizado de {0} MB"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "Ajuste de habilitación de marca personalizada"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "CSS personalizado"
#: 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 "El CSS personalizado se desinfecta al guardar. Las propiedades que rompen el diseño, las URL remotas y los pseudo-elementos se eliminan automáticamente. Cualquier regla descartada durante la desinfección se mostrará después de guardar."
@@ -3671,14 +3693,26 @@ msgstr "Predeterminado (mailer del sistema)"
msgid "Default border colour."
msgstr "Color de borde predeterminado."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "Formato de fecha predeterminado"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "Formato de fecha predeterminado"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "Idioma de documento predeterminado"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "Idioma predeterminado del documento"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "Visibilidad de documento predeterminada"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "Visibilidad predeterminada del documento"
@@ -3691,6 +3725,10 @@ msgstr "Correo predeterminado"
msgid "Default Email Settings"
msgstr "Configuración de correo predeterminada"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "Vencimiento de sobre predeterminado"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "Vencimiento predeterminado del sobre"
@@ -3703,6 +3741,10 @@ msgstr "Archivo por defecto"
msgid "Default Organisation Role for New Users"
msgstr "Rol de organización predeterminado para nuevos usuarios"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "Destinatarios predeterminados"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "Destinatarios predeterminados"
@@ -3715,14 +3757,26 @@ msgstr "Configuración predeterminada aplicada a esta organización."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "Configuración predeterminada aplicada a este equipo. Los valores heredados provienen de la organización."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "Configuración de firma predeterminada"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "Configuraciones de Firma por Defecto"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "Recordatorios de firma predeterminados"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "Recordatorios de firma predeterminados"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "Zona horaria predeterminada"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "Zona horaria predeterminada"
@@ -3738,6 +3792,7 @@ msgstr "Valor predeterminado"
msgid "Default Value"
msgstr "Valor Predeterminado"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "Delegar la propiedad del documento"
@@ -3768,6 +3823,7 @@ msgstr "eliminar"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "Eliminar el documento. Esta acción es irreversible, así que proceda co
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "Eliminar la cuenta de usuario y todo su contenido. Esta acción es irreversible y cancelará su suscripción, así que proceda con cautela."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "Eliminar token"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Eliminar Webhook"
@@ -4651,6 +4711,10 @@ msgstr "No repetir"
msgid "Don't transfer (Delete all documents)"
msgstr "No transferir (Eliminar todos los documentos)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "Hecho"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "Campo vacío"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "Una cuota vacía significa sin límite, 0 bloquea el recurso. Las ventanas de límite de frecuencia aceptan valores como 5m, 1h o 24h."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "Ingresar"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "Introduce un número máximo de solicitudes mayor que 0"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "Introduce un nuevo título"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "Introduce una ventana, p. ej., 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "¡Todos han firmado! Recibirás una copia del documento firmado por corr
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "Excedido"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "Vencimiento"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "Expirado"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "Vencida"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "Vence"
@@ -5538,16 +5604,15 @@ msgstr "Vence"
msgid "Expires {0}"
msgstr "Expira el {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "Expira en"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expira en {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "Expira el {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "Soy el propietario de este documento"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "Entiendo que estoy proporcionando mis credenciales a un servicio de terceros configurado por esta organización"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "¡Estoy seguro! Elimínalo"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "Incluir datos del remitente"
msgid "Include signing certificate"
msgstr "Incluir certificado de firma"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "Incluir los registros de auditoría en el documento"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "Incluir los registros de auditoría en el documento"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "Incluir el certificado de firma en el documento"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "Incluir el certificado de firma en el documento"
@@ -6429,6 +6498,11 @@ msgstr "Estadísticas de instancia"
msgid "Invalid code. Please try again."
msgstr "Código inválido. Por favor, intenta nuevamente."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "Plantilla de enlace directo no válida"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "Dominios no válidos"
@@ -6772,7 +6846,7 @@ msgstr "¿Te gustaría tener tu propio perfil público con acuerdos?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "Límite alcanzado"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "Máx"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "Solicitudes máximas"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "Licencia faltante: tu instancia de Documenso está usando funciones que
msgid "Missing Recipients"
msgstr "Faltan destinatarios"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "Faltan campos de firma"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "Usuarios activos mensuales: Usuarios que completaron al menos uno de sus
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "Cuota mensual"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "Uso mensual"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "Configuración de Nombre"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "Cerca del límite"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "Necesita firmar"
msgid "Needs to view"
msgstr "Necesita ver"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "Nunca"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "Nunca expira"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "Nunca vence"
@@ -7451,7 +7530,7 @@ msgstr "No se encontraron grupos"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "Sin reclamación heredada"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "Activado"
msgid "On this page, you can create a new webhook."
msgstr "En esta página, puedes crear un nuevo webhook."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "En esta página, puedes crear y gestionar tokens de API. Consulta nuestra <0>Documentación</0> para más información."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "En esta página, puedes editar el webhook y sus configuraciones."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "Una vez confirmado, se restablecerá lo siguiente:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "De lo contrario, el documento se creará como un borrador."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "Se detectaron campos superpuestos"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "Pendiente desde"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "Personas con acceso a esta organización."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "Por favor, contacte al propietario del sitio para más asistencia."
msgid "Please don't close this tab. The signing provider is finalising your signature."
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."
msgstr "Por favor, ingresa un nombre significativo para tu token. Esto te ayudará a identificarlo más tarde."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "Por favor ingresa un número"
@@ -8876,6 +8952,10 @@ msgstr "Falló la autenticación del proveedor de firma del destinatario"
msgid "Recipients"
msgstr "Destinatarios"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "Los destinatarios no pueden usar esta plantilla de enlace directo porque a los siguientes firmantes les falta un campo de firma"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "Métricas de destinatarios"
@@ -8943,7 +9023,7 @@ msgstr "Redireccionando"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "Redirigiendo a {0}..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "Eliminar miembro de la organización"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "Eliminar límite de velocidad"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "Restablecer"
msgid "Reset 2FA"
msgstr "Restablecer 2FA"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "Restablecer preferencias de marca"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "Restablecer preferencias del documento"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "Correo de restablecimiento enviado"
@@ -9251,6 +9339,13 @@ msgstr "Restablecer contraseña"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "Restablecer la autenticación de dos factores de los usuarios. Esta acción es irreversible y desactivará la autenticación de dos factores para el usuario."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "Restablecer valores predeterminados"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "Restablecer autenticación de dos factores"
@@ -9269,7 +9364,7 @@ msgstr "Resolver pago"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "Recurso bloqueado"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "Enviar sobre (envelope)"
msgid "Send first reminder after"
msgstr "Enviar el primer recordatorio después de"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "Enviar en nombre del equipo"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "Enviar en nombre del equipo"
@@ -9849,7 +9948,7 @@ msgstr "Enviado"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "Enviado en este período"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "Omitir"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "Algunos campos están colocados uno encima de otro. Esto puede complicar el proceso de firma o hacer que los campos no funcionen como se espera."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "¡Algo salió mal!"
msgid "Something went wrong."
msgstr "Algo salió mal."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "Algo salió mal. Por favor, inténtelo de nuevo más tarde."
@@ -10849,7 +10948,7 @@ msgstr "Los equipos te ayudan a organizar tu trabajo y colaborar con otros. Crea
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "Equipos que pertenecen a esta organización."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "El nombre para mostrar para esta dirección de correo electrónico"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "No se pudo crear el documento debido a información faltante o no válida. Revise los destinatarios y los campos de la plantilla."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "No se pudo enviar el documento porque algunos firmantes no tienen un campo de firma. Edita la plantilla y añade un campo de firma para cada firmante."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "El documento se ha eliminado correctamente."
@@ -11434,10 +11537,6 @@ msgstr "El webhook de prueba se ha enviado exitosamente a tu terminal."
msgid "The token is invalid or has expired."
msgstr "El token es inválido o ha expirado."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "El token fue copiado a tu portapapeles."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "El token fue eliminado con éxito."
@@ -11560,6 +11659,14 @@ msgstr "Esto puede tardar uno o dos minutos, según el tamaño de tu documento."
msgid "This claim is locked and cannot be deleted."
msgstr "Esta reclamo está bloqueado y no puede ser eliminado."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "Esta plantilla de enlace directo no se puede usar porque uno o más firmantes no tienen asignado un campo de firma."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "Esta plantilla de enlace directo no se puede usar porque uno o más firmantes no tienen asignado un campo de firma. Ponte en contacto con el remitente para actualizar la plantilla."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "Este documento no se puede recuperar, si deseas impugnar la razón para documentos futuros, por favor contacta con el soporte."
@@ -11830,6 +11937,14 @@ msgstr "Esto solo retroalimentará las banderas de características que estén c
msgid "This will remove all emails associated with this email domain"
msgstr "Esto eliminará todos los correos electrónicos asociados con este dominio de correo electrónico"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "Esto restablecerá todas las preferencias de marca a sus valores predeterminados y guardará los cambios de inmediato."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "Esto restablecerá todas las preferencias del documento a sus valores predeterminados y guardará los cambios de inmediato."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "Esto cerrará la sesión en todos los demás dispositivos. Necesitarás iniciar sesión nuevamente en esos dispositivos para continuar usando tu cuenta."
@@ -12025,11 +12140,11 @@ msgstr "Activa el interruptor para mostrar tu perfil al público."
msgid "Token"
msgstr "Token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "Token copiado al portapapeles"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "Token creado"
@@ -12037,22 +12152,10 @@ msgstr "Token creado"
msgid "Token deleted"
msgstr "Token eliminado"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "El token no tiene una fecha de expiración"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "Fecha de expiración del token"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "El token ha expirado. Por favor, inténtelo de nuevo."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "Nombre del token"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "Token no encontrado"
@@ -12210,10 +12313,6 @@ msgstr "No se puede cambiar el idioma en este momento. Por favor intenta nuevame
msgid "Unable to copy recovery code"
msgstr "No se pudo copiar el código de recuperación"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "No se pudo copiar el token"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "No se pudo crear acceso directo a la plantilla. Por favor, inténtalo de nuevo más tarde."
@@ -12347,7 +12446,7 @@ msgstr "Desanclar"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "Cambios sin guardar"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "Usar"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "Usa una duración con una unidad, p. ej., 5m, 1h o 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "Usar una ventana única para cada límite de velocidad"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Usa tokens de API para autenticarte con la API de Documenso."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "Hemos enviado un correo electrónico de confirmación para la verificaci
msgid "We need your signature to sign documents"
msgstr "Necesitamos su firma para firmar documentos"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "No pudimos copiar el token en tu portapapeles. Por favor, inténtalo de nuevo."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "No pudimos copiar tu código de recuperación en tu portapapeles. Por favor, inténtalo de nuevo."
@@ -13536,7 +13635,7 @@ msgstr "Ancho:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "Ventana"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "Retirar Consentimiento"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "Dentro del límite"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "Has eliminado un elemento de sobre con el título {0}"
msgid "You deleted the document"
msgstr "Has eliminado el documento"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "No tienes permiso para crear un token para este equipo."
@@ -13987,6 +14086,10 @@ msgstr "Has rechazado la invitación de <0>{0}</0> para unirte a su organizació
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "Has iniciado el documento {0} que requiere que {recipientActionVerb}."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "Aún no tienes tokens de API. Tus tokens se mostrarán aquí una vez que los crees."
#: 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."
msgstr "Aún no tienes webhooks. Tus webhooks se mostrarán aquí una vez que los crees."
@@ -14090,7 +14193,7 @@ msgstr "Usted tiene el derecho de retirar su consentimiento para usar firmas ele
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "Tienes cambios sin guardar"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "Su sobre ha sido distribuido exitosamente."
msgid "Your envelope has been resent successfully."
msgstr "Su sobre ha sido reenviado exitosamente."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "Tus tokens existentes"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "Tu nombre"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "Tu nuevo token de API"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "Tus plantillas han sido guardadas con éxito."
msgid "Your token has expired!"
msgstr "¡Tu token ha expirado!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "¡Tu token se creó con éxito! ¡Asegúrate de copiarlo porque no podrás verlo de nuevo!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "Tus tokens se mostrarán aquí una vez que los crees."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "Su código de autenticación de dos factores"
@@ -14771,3 +14866,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"
+214 -118
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@@ -850,11 +850,11 @@ msgstr "0 organisations gratuites restantes"
msgid "1 Free organisations left"
msgstr "1 organisme gratuit restant"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 mois"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 mois"
@@ -870,7 +870,7 @@ msgstr "Réinitialisation 2FA"
msgid "2FA token"
msgstr "Jeton 2FA"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 mois"
@@ -949,11 +949,11 @@ msgstr "5 Documents par mois"
msgid "500 Internal Server Error"
msgstr "500 Erreur Interne du Serveur"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 mois"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 jours"
@@ -1008,6 +1008,10 @@ msgstr "Un membre a quitté votre organisation {organisationName}"
msgid "A member has left your organisation on Documenso"
msgstr "Un membre a quitté votre organisation sur Documenso"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "Un nom pour vous aider à identifier ce jeton plus tard."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "Un nouveau membre a rejoint votre organisation"
@@ -1016,10 +1020,6 @@ msgstr "Un nouveau membre a rejoint votre organisation"
msgid "A new member has joined your organisation {organisationName}"
msgstr "Un nouveau membre a rejoint votre organisation {organisationName}"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "Un nouveau token a été créé avec succès."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "Action"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "Actions"
@@ -1417,7 +1418,7 @@ msgstr "Ajouter des espaces réservés"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "Ajouter une fenêtre de limitation de débit"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "Après avoir signé un document électroniquement, vous aurez l'occasion
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "Après soumission, un document sera automatiquement généré et ajouté à votre page de documents. Vous recevrez également une notification par e-mail."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "Fonctionnalités dIA"
@@ -1708,11 +1710,11 @@ msgstr "Un email avec cette adresse existe déjà."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "Êtes-vous sûr de vouloir supprimer le transport suivant ?"
msgid "Are you sure you want to delete this folder?"
msgstr "Êtes-vous sûr de vouloir supprimer ce dossier ?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "Êtes-vous sûr de vouloir supprimer ce token ?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Êtes-vous sûr de vouloir rejeter ce document ? Cette action ne peut pas être annulée."
@@ -2390,6 +2388,10 @@ msgstr "Bleu"
msgid "Border"
msgstr "Bordure"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "Rayon de bordure"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "Rayon de la bordure"
@@ -2406,6 +2408,10 @@ msgstr "Bas"
msgid "Brand Colours"
msgstr "Couleurs de la marque"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "Couleurs de la marque, y compris les couleurs darrière-plan, davant-plan, principales et de bordure"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "Détails de la marque"
@@ -2414,6 +2420,10 @@ msgstr "Détails de la marque"
msgid "Brand Website"
msgstr "Site web de la marque"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "Site web et détails de la marque"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "Image de marque"
msgid "Branding company details"
msgstr "Informations sur lentreprise pour limage de marque"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "Logo de limage de marque"
@@ -2544,9 +2555,11 @@ msgstr "Vous ne trouvez pas quelquun ?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "Vous ne trouvez pas quelquun ?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "Impossible de télécharger des éléments après l'envoi du document"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "Fonctionnalités activées pour cette organisation."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "Choisissez la méthode de vérification"
msgid "Choose your preferred authentication method:"
msgstr "Choisissez votre méthode d'authentification préférée:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "Choisissez..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "Demande"
@@ -3264,14 +3274,14 @@ msgstr "Copier les liens de signature"
msgid "Copy team ID"
msgstr "Copier lID de l’équipe"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "Copier le token"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "Copier la valeur"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "Copiez votre jeton maintenant. Pour des raisons de sécurité, vous ne pourrez plus le voir par la suite."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "Compteur réinitialisé."
@@ -3338,10 +3348,18 @@ msgstr "Créer une organisation pour collaborer avec des équipes"
msgid "Create an organisation to get started."
msgstr "Créer une organisation pour démarrer"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "Créez et gérez des jetons dAPI. Consultez notre <0>documentation</0> pour plus dinformations."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "Créer et envoyer"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "Créer un jeton dAPI"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "Créer en tant que brouillon"
@@ -3460,8 +3478,8 @@ msgstr "Créer un modèle"
msgid "Create the document as pending and ready to sign."
msgstr "Créer le document comme en attente et prêt à signer."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "Créer un token"
@@ -3507,6 +3525,7 @@ msgstr "Créez votre compte et commencez à utiliser la signature de documents
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "Créé"
@@ -3527,11 +3546,6 @@ msgstr "Créé par"
msgid "Created on"
msgstr "Créé le"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "Créé le {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "Création du document"
@@ -3587,6 +3601,14 @@ msgstr "Actuellement, les domaines de messagerie ne peuvent être configurés qu
msgid "Custom {0} MB file"
msgstr "Fichier personnalisé de {0} Mo"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "Paramètre dactivation de limage de marque personnalisée"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "CSS personnalisé"
#: 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 "Le CSS personnalisé est nettoyé lors de lenregistrement. Les propriétés pouvant casser la mise en page, les URL distantes et les pseudo-éléments sont supprimés automatiquement. Toutes les règles supprimées pendant la sanitisation seront affichées après lenregistrement."
@@ -3671,14 +3693,26 @@ msgstr "Par défaut (service de messagerie du système)"
msgid "Default border colour."
msgstr "Couleur de bordure par défaut."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "Format de date par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "Format de date par défaut"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "Langue du document par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "Langue par défaut du document"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "Visibilité du document par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "Visibilité par défaut du document"
@@ -3691,6 +3725,10 @@ msgstr "E-mail par défaut"
msgid "Default Email Settings"
msgstr "Paramètres d'e-mail par défaut"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "Expiration de lenveloppe par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "Expiration par défaut de lenveloppe"
@@ -3703,6 +3741,10 @@ msgstr "Fichier par défaut"
msgid "Default Organisation Role for New Users"
msgstr "Rôle par défaut de l'organisation pour les nouveaux utilisateurs"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "Destinataires par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "Destinataires par défaut"
@@ -3715,14 +3757,26 @@ msgstr "Paramètres par défaut appliqués à cette organisation."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "Paramètres par défaut appliqués à cette équipe. Les valeurs héritées proviennent de lorganisation."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "Paramètres de signature par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "Paramètres de Signature par Défaut"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "Rappels de signature par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "Rappels de signature par défaut"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "Fuseau horaire par défaut"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "Fuseau horaire par défaut"
@@ -3738,6 +3792,7 @@ msgstr "Valeur par défaut"
msgid "Default Value"
msgstr "Valeur par défaut"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "Déléguer la propriété du document"
@@ -3768,6 +3823,7 @@ msgstr "supprimer"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "Supprimez le document. Cette action est irréversible, soyez prudent."
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "Supprimez le compte de l'utilisateur et tout son contenu. Cette action est irréversible et annulera son abonnement, soyez prudent."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "Supprimer le token"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Supprimer le Webhook"
@@ -4651,6 +4711,10 @@ msgstr "Ne pas répéter"
msgid "Don't transfer (Delete all documents)"
msgstr "Ne pas transférer (supprimer tous les documents)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "Terminé"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "Champ vide"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "Un quota vide signifie illimité, 0 bloque la ressource. Les fenêtres de limitation de débit acceptent des valeurs comme 5m, 1h ou 24h."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "Entrer"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "Saisissez un nombre maximal de requêtes supérieur à 0"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "Saisissez un nouveau titre"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "Saisissez une fenêtre, par ex. 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "Tout le monde a signé ! Vous recevrez une copie du document signé par
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "Dépassé"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "Expiration"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "Expiré"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "Expiré"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "Expire le"
@@ -5538,16 +5604,15 @@ msgstr "Expire le"
msgid "Expires {0}"
msgstr "Expire le {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "Expire dans"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expire dans {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "Expire le {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "Je suis le propriétaire de ce document"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "Je comprends que je fournis mes identifiants à un service tiers configuré par cette organisation"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "Je suis sûr ! Supprimez-le"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "Inclure les informations sur lexpéditeur"
msgid "Include signing certificate"
msgstr "Inclure le certificat de signature"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "Inclure les journaux daudit dans le document"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "Inclure les journaux d'audit dans le document"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "Inclure le certificat de signature dans le document"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "Includez le certificat de signature dans le document"
@@ -6429,6 +6498,11 @@ msgstr "Statistiques de l'instance"
msgid "Invalid code. Please try again."
msgstr "Code invalide. Veuillez réessayer."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "Modèle de lien direct invalide"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "Domaines invalides"
@@ -6772,7 +6846,7 @@ msgstr "Vous voulez avoir votre propre profil public avec des accords ?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "Limite atteinte"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "Maximum"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "Nombre maximal de requêtes"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "Licence manquante - Votre instance Documenso utilise des fonctionnalité
msgid "Missing Recipients"
msgstr "Manque de destinataires"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "Champs de signature manquants"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "Utilisateurs actifs mensuels : utilisateurs ayant terminé au moins un d
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "Quota mensuelle"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "Utilisation mensuelle"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "Paramètres du nom"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "Proche de la limite"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "Nécessite une signature"
msgid "Needs to view"
msgstr "Nécessite une visualisation"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "Jamais"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "Ne jamais expirer"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "Nexpire jamais"
@@ -7451,7 +7530,7 @@ msgstr "Aucun groupe trouvé"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "Aucun droit hérité"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "Activé"
msgid "On this page, you can create a new webhook."
msgstr "Sur cette page, vous pouvez créer un nouveau webhook."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "Sur cette page, vous pouvez créer et gérer des tokens API. Consultez notre <0>Documentation</0> pour plus d'informations."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "Sur cette page, vous pouvez créer de nouveaux webhooks et gérer ceux existants."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "Une fois confirmé, les éléments suivants seront réinitialisés :"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "Sinon, le document sera créé sous forme de brouillon."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "Chevauchement de champs détecté"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "En attente depuis"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "Personnes ayant accès à cette organisation."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "Veuillez contacter le propriétaire du site pour obtenir de l'aide suppl
msgid "Please don't close this tab. The signing provider is finalising your signature."
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."
msgstr "Veuillez entrer un nom significatif pour votre token. Cela vous aidera à l'identifier plus tard."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "Veuillez entrer un nombre"
@@ -8447,7 +8523,7 @@ msgstr "Veuillez réessayer ou contacter notre support."
#. placeholder {0}: `'${t(deleteMessage)}'`
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
msgid "Please type {0} to confirm"
msgstr "Veuillez taper {0} pour confirmer"
msgstr "Veuiillez taper {0} pour confirmer"
#. placeholder {0}: user.email
#: apps/remix/app/components/dialogs/account-delete-dialog.tsx
@@ -8876,6 +8952,10 @@ msgstr "Lauthentification du fournisseur de signature du destinataire a écho
msgid "Recipients"
msgstr "Destinataires"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "Les destinataires ne peuvent pas utiliser ce modèle de lien direct, car les signataires suivants nont pas de champ de signature."
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "Métriques des destinataires"
@@ -8943,7 +9023,7 @@ msgstr "Redirection"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "Redirection vers {0}..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "Supprimer un membre de lorganisation"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "Supprimer la limite de débit"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "Réinitialiser"
msgid "Reset 2FA"
msgstr "Réinitialiser 2FA"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "Réinitialiser les préférences de limage de marque"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "Réinitialiser les préférences du document"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "E-mail de réinitialisation envoyé"
@@ -9251,6 +9339,13 @@ msgstr "Réinitialiser le mot de passe"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "Réinitialiser l'authentification à deux facteurs des utilisateurs. Cette action est irréversible et désactivera l'authentification à deux facteurs pour l'utilisateur."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "Rétablir les valeurs par défaut"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "Réinitialiser l'authentification à deux facteurs"
@@ -9269,7 +9364,7 @@ msgstr "Résoudre le paiement"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "Ressource bloquée"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "Envoyer lenveloppe"
msgid "Send first reminder after"
msgstr "Envoyer le premier rappel après"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "Envoyer au nom de l’équipe"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "Envoyer au nom de l'équipe"
@@ -9849,7 +9948,7 @@ msgstr "Envoyé"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "Envoyé pendant cette période"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "Ignorer"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "Certains champs sont placés les uns sur les autres. Cela peut compliquer le processus de signature ou empêcher certains champs de fonctionner comme prévu."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "Quelque chose a mal tourné !"
msgid "Something went wrong."
msgstr "Quelque chose a mal tourné."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "Quelque chose a mal tourné. Veuillez réessayer plus tard."
@@ -10849,7 +10948,7 @@ msgstr "Les équipes vous aident à organiser votre travail et à collaborer ave
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "Équipes appartenant à cette organisation."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "Le nom d'affichage pour cette adresse e-mail"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "Le document n'a pas pu être créé en raison d'informations manquantes ou invalides. Veuillez vérifier les destinataires et les champs du modèle."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "Le document na pas pu être envoyé, car certains signataires nont pas de champ de signature. Veuillez modifier le modèle et ajouter un champ de signature pour chaque signataire."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "Le document a été supprimé avec succès."
@@ -11434,10 +11537,6 @@ msgstr "Le webhook de test a été envoyé avec succès vers votre point de term
msgid "The token is invalid or has expired."
msgstr "Le token est invalide ou a expiré."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "Le token a été copié dans votre presse-papiers."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "Le token a été supprimé avec succès."
@@ -11560,6 +11659,14 @@ msgstr "Cela peut prendre une à deux minutes selon la taille de votre document.
msgid "This claim is locked and cannot be deleted."
msgstr "Cette réclamation est verrouillée et ne peut pas être supprimée."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "Ce modèle de lien direct ne peut pas être utilisé, car un ou plusieurs signataires nont pas de champ de signature attribué."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "Ce modèle de lien direct ne peut pas être utilisé, car un ou plusieurs signataires nont pas de champ de signature attribué. Veuillez contacter lexpéditeur pour mettre à jour le modèle."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "Ce document ne peut pas être récupéré, si vous souhaitez contester la raison des documents futurs, veuillez contacter le support."
@@ -11830,6 +11937,14 @@ msgstr "Cela ne fera que rétroporter les drapeaux de fonctionnalité qui sont a
msgid "This will remove all emails associated with this email domain"
msgstr "Cela supprimera tous les e-mails associés à ce domaine de messagerie"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "Cela réinitialisera toutes les préférences de limage de marque à leurs valeurs par défaut et enregistrera immédiatement les modifications."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "Cela réinitialisera toutes les préférences du document à leurs valeurs par défaut et enregistrera immédiatement les modifications."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "Cela entraînera votre déconnexion de tous les autres appareils. Vous devrez vous reconnecter sur ces appareils pour continuer à utiliser votre compte."
@@ -12025,11 +12140,11 @@ msgstr "Basculer l'interrupteur pour afficher votre profil au public."
msgid "Token"
msgstr "Jeton"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "Token copié dans le presse-papiers"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "Token créé"
@@ -12037,22 +12152,10 @@ msgstr "Token créé"
msgid "Token deleted"
msgstr "Token supprimé"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "Le token n'a pas de date d'expiration"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "Date d'expiration du token"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "Le token a expiré. Veuillez réessayer."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "Nom du token"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "Jeton introuvable"
@@ -12210,10 +12313,6 @@ msgstr "Impossible de changer la langue pour le moment. Veuillez réessayer plus
msgid "Unable to copy recovery code"
msgstr "Impossible de copier le code de récupération"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "Impossible de copier le token"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "Impossible de créer un accès direct au modèle. Veuillez réessayer plus tard."
@@ -12347,7 +12446,7 @@ msgstr "Détacher"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "Modifications non enregistrées"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "Utiliser"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "Utilisez une durée avec une unité, par ex. 5m, 1h ou 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "Utiliser une fenêtre unique pour chaque limite de débit"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Utilisez des tokens dAPI pour vous authentifier auprès de lAPI Documenso."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "Nous avons envoyé un e-mail de confirmation pour vérification."
msgid "We need your signature to sign documents"
msgstr "Nous avons besoin de votre signature pour signer des documents"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "Nous n'avons pas pu copier le token dans votre presse-papiers. Veuillez réessayer."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "Nous n'avons pas pu copier votre code de récupération dans votre presse-papiers. Veuillez réessayer."
@@ -13536,7 +13635,7 @@ msgstr "Largeur :"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "Fenêtre"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "Retrait du consentement"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "Dans la limite"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "Vous avez supprimé un élément d'enveloppe avec le titre {0}"
msgid "You deleted the document"
msgstr "Vous avez supprimé le document"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "Vous navez pas lautorisation de créer un jeton pour cette équipe."
@@ -13987,6 +14086,10 @@ msgstr "Vous avez refusé l'invitation de <0>{0}</0> à rejoindre leur organisat
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "Vous avez initié le document {0} et devez le {recipientActionVerb}."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "Vous navez pas encore de tokens dAPI. Vos tokens seront affichés ici une fois que vous les aurez créés."
#: 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."
msgstr "Vous n'avez pas encore de webhooks. Vos webhooks seront affichés ici une fois que vous les aurez créés."
@@ -14090,7 +14193,7 @@ msgstr "Vous avez le droit de retirer votre consentement à l'utilisation des si
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "Vous avez des modifications non enregistrées"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "Votre enveloppe a été distribuée avec succès."
msgid "Your envelope has been resent successfully."
msgstr "Votre enveloppe a été renvoyée avec succès."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "Vos tokens existants"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "Votre nom"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "Votre nouveau token dAPI"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "Vos modèles ont été enregistrés avec succès."
msgid "Your token has expired!"
msgstr "Votre token a expiré !"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "Votre token a été créé avec succès ! Assurez-vous de le copier car vous ne pourrez plus le voir !"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "Vos tokens seront affichés ici une fois que vous les aurez créés."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "Votre code d'authentification à deux facteurs"
@@ -14771,3 +14866,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"
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: it\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -850,11 +850,11 @@ msgstr "0 Organizzazioni gratuite rimaste"
msgid "1 Free organisations left"
msgstr "1 Organizzazione gratuita rimasta"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "{VAR_PLURAL, select, one {1 mese} other {# mesi}}"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "{VAR_PLURAL, select, one {1 mese} other {12 mesi}}"
@@ -870,7 +870,7 @@ msgstr "Reimposta 2FA"
msgid "2FA token"
msgstr "Token 2FA (autenticazione a due fattori)"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "{VAR_PLURAL, select, one {1 mese} other {3 mesi}}"
@@ -949,11 +949,11 @@ msgstr "5 Documenti al mese"
msgid "500 Internal Server Error"
msgstr "500 Errore Interno del Server"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "{VAR_PLURAL, select, one {1 mese} other {6 mesi}}"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "{VAR_PLURAL, select, one {1 giorno} other {7 giorni}}"
@@ -1008,6 +1008,10 @@ msgstr "Un membro ha lasciato la tua organizzazione {organisationName}"
msgid "A member has left your organisation on Documenso"
msgstr "Un membro ha lasciato la tua organizzazione su Documenso"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "Un nome che ti aiuti a identificare questo token in seguito."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "Un nuovo membro si è unito alla tua organizzazione"
@@ -1016,10 +1020,6 @@ msgstr "Un nuovo membro si è unito alla tua organizzazione"
msgid "A new member has joined your organisation {organisationName}"
msgstr "Nuovo membro si è unito alla tua organizzazione {organisationName}"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "Un nuovo token è stato creato con successo."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "Azione"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "Azioni"
@@ -1417,7 +1418,7 @@ msgstr "Aggiungi segnaposto"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "Aggiungi finestra di limitazione della frequenza (rate limit)"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "Dopo aver firmato un documento elettronicamente, avrai la possibilità d
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "Dopo l'invio, un documento verrà generato automaticamente e aggiunto alla tua pagina dei documenti. Riceverai anche una notifica via email."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "Funzionalità di IA"
@@ -1708,11 +1710,11 @@ msgstr "Una email con questo indirizzo esiste già."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "Sei sicuro di voler eliminare il seguente trasporto?"
msgid "Are you sure you want to delete this folder?"
msgstr "Sei sicuro di voler eliminare questa cartella?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "Sei sicuro di voler eliminare questo token?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Sei sicuro di voler rifiutare questo documento? Questa azione non può essere annullata."
@@ -2390,6 +2388,10 @@ msgstr "Blu"
msgid "Border"
msgstr "Bordo"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "Raggio del bordo"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "Raggio del bordo"
@@ -2406,6 +2408,10 @@ msgstr "Inferiore"
msgid "Brand Colours"
msgstr "Colori del brand"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "Colori del brand, inclusi i colori di sfondo, primo piano, primario e del bordo"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "Dettagli del Marchio"
@@ -2414,6 +2420,10 @@ msgstr "Dettagli del Marchio"
msgid "Brand Website"
msgstr "Sito Web del Marchio"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "Sito web e dettagli del brand"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "Branding"
msgid "Branding company details"
msgstr "Dettagli aziendali del branding"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "Logo del branding"
@@ -2544,9 +2555,11 @@ msgstr "Non riesci a trovare qualcuno?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "Non riesci a trovare qualcuno?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "Non è possibile caricare gli elementi dopo che il documento è stato in
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "Funzionalità abilitate per questa organizzazione."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "Scegli il metodo di verifica"
msgid "Choose your preferred authentication method:"
msgstr "Scegli il tuo metodo di autenticazione preferito:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "Scegli..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "Richiesta di risarcimento"
@@ -3264,14 +3274,14 @@ msgstr "Copia link di firma"
msgid "Copy team ID"
msgstr "Copia ID team"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "Copia il token"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "Copia valore"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "Copia ora il tuo token. Per motivi di sicurezza non potrai più visualizzarlo in seguito."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "Contatore reimpostato."
@@ -3338,10 +3348,18 @@ msgstr "Crea un'organizzazione per collaborare con i team"
msgid "Create an organisation to get started."
msgstr "Crea un'organizzazione per iniziare."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "Crea e gestisci i token API. Consulta la nostra <0>documentazione</0> per maggiori informazioni."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "Crea e invia"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "Crea token API"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "Crea come bozza"
@@ -3460,8 +3478,8 @@ msgstr "Crea modello"
msgid "Create the document as pending and ready to sign."
msgstr "Crea il documento come in attesa e pronto per la firma."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "Crea token"
@@ -3507,6 +3525,7 @@ msgstr "Crea il tuo account e inizia a utilizzare firme digitali all'avanguardia
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "Creato"
@@ -3527,11 +3546,6 @@ msgstr "Creato da"
msgid "Created on"
msgstr "Creato il"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "Creato il {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "Creazione del documento"
@@ -3587,6 +3601,14 @@ msgstr "Attualmente i domini email possono essere configurati solo per i piani P
msgid "Custom {0} MB file"
msgstr "File personalizzato da {0} MB"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "Impostazione di abilitazione del branding personalizzato"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "CSS personalizzato"
#: 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 "Il CSS personalizzato viene sanitizzato al salvataggio. Le proprietà che possono compromettere il layout, gli URL remoti e i pseudo-elementi vengono rimossi automaticamente. Qualsiasi regola eliminata durante la sanitizzazione verrà mostrata dopo il salvataggio."
@@ -3671,14 +3693,26 @@ msgstr "Predefinito (mailer di sistema)"
msgid "Default border colour."
msgstr "Colore del bordo predefinito."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "Formato data predefinito"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "Formato Data Predefinito"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "Lingua documento predefinita"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "Lingua predefinita del documento"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "Visibilità documento predefinita"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "Visibilità predefinita del documento"
@@ -3691,6 +3725,10 @@ msgstr "Email Predefinita"
msgid "Default Email Settings"
msgstr "Impostazioni Email Predefinite"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "Scadenza busta predefinita"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "Scadenza predefinita della busta"
@@ -3703,6 +3741,10 @@ msgstr "File predefinito"
msgid "Default Organisation Role for New Users"
msgstr "Ruolo dell'organizzazione predefinito per nuovi utenti"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "Destinatari predefiniti"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "Destinatari predefiniti"
@@ -3715,14 +3757,26 @@ msgstr "Impostazioni predefinite applicate a questa organizzazione."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "Impostazioni predefinite applicate a questo team. I valori ereditati provengono dallorganizzazione."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "Impostazioni firma predefinite"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "Impostazioni predefinite della firma"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "Promemoria di firma predefiniti"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "Promemorie di firma predefiniti"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "Fuso orario predefinito"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "Fuso Orario Predefinito"
@@ -3738,6 +3792,7 @@ msgstr "Valore predefinito"
msgid "Default Value"
msgstr "Valore predefinito"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "Delega proprietà del documento"
@@ -3768,6 +3823,7 @@ msgstr "elimina"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "Elimina il documento. Questa azione è irreversibile quindi procedi con
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "Elimina l'account utente e tutti i suoi contenuti. Questa azione è irreversibile e annullerà l'abbonamento, quindi procedi con cautela."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "Elimina token"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Elimina Webhook"
@@ -4651,6 +4711,10 @@ msgstr "Non ripetere"
msgid "Don't transfer (Delete all documents)"
msgstr "Non trasferire (elimina tutti i documenti)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "Fatto"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "Campo vuoto"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "Quota vuota significa illimitata, 0 blocca la risorsa. Le finestre di limitazione della frequenza accettano valori come 5m, 1h o 24h."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "Inserisci"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "Inserisci un numero massimo di richieste maggiore di 0"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "Inserisci un nuovo titolo"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "Inserisci una finestra, ad es. 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "Tutti hanno firmato! Riceverai una copia del documento firmato via email
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "Superato"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "Scadenza"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "Scaduto"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "Scaduto"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "Scade"
@@ -5538,16 +5604,15 @@ msgstr "Scade"
msgid "Expires {0}"
msgstr "Scade il {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "Scade tra"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Scade in {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "Scade il {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "Sono il proprietario di questo documento"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "Capisco che sto fornendo le mie credenziali a un servizio di terze parti configurato da questa organizzazione"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "Sono sicuro! Eliminalo"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "Includi dettagli del mittente"
msgid "Include signing certificate"
msgstr "Includi certificato di firma"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "Includi i log di audit nel documento"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "Includi i Registri di Audit nel Documento"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "Includi il certificato di firma nel documento"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "Includi il certificato di firma nel documento"
@@ -6429,6 +6498,11 @@ msgstr "Statistiche istanze"
msgid "Invalid code. Please try again."
msgstr "Codice non valido. Riprova."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "Modello di link diretto non valido"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "Domini non validi"
@@ -6772,7 +6846,7 @@ msgstr "Ti piacerebbe avere il tuo profilo pubblico con accordi?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "Limite raggiunto"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr ""
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "Numero massimo di richieste"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "Licenza mancante - La tua istanza Documenso sta utilizzando funzionalit
msgid "Missing Recipients"
msgstr "Destinatari Mancanti"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "Campi firma mancanti"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "Utenti attivi mensili: Utenti con almeno uno dei loro documenti completa
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "Quota mensile"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "Utilizzo mensile"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "Impostazioni Nome"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "Vicino al limite"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "Necessita di firma"
msgid "Needs to view"
msgstr "Necessita di visualizzazione"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "Mai"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "Mai scadere"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "Non scade mai"
@@ -7451,7 +7530,7 @@ msgstr "Nessun gruppo trovato"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "Nessun diritto ereditato"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "Attivato"
msgid "On this page, you can create a new webhook."
msgstr "In questa pagina, puoi creare un nuovo webhook."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "Su questa pagina, puoi creare e gestire token API. Consulta la nostra <0>Documentazione</0> per maggiori informazioni."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "In questa pagina, puoi creare nuovi Webhook e gestire quelli esistenti."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "Una volta confermato, verranno reimpostati i seguenti elementi:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "Altrimenti, il documento sarà creato come bozza."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "Campi sovrapposti rilevati"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "In sospeso dal"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "Persone con accesso a questa organizzazione."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "Si prega di contattare il proprietario del sito per ulteriori assistenza
msgid "Please don't close this tab. The signing provider is finalising your signature."
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."
msgstr "Si prega di inserire un nome significativo per il proprio token. Questo ti aiuterà a identificarlo più tardi."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "Inserisci un numero"
@@ -8876,6 +8952,10 @@ msgstr "L'autenticazione del provider di firma del destinatario non è riuscita"
msgid "Recipients"
msgstr "Destinatari"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "I destinatari non possono usare questo modello di link diretto perché ai seguenti firmatari manca un campo firma"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "Metriche dei destinatari"
@@ -8943,7 +9023,7 @@ msgstr "Reindirizzamento"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "Reindirizzamento a {0}..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "Rimuovi membro dell'organizzazione"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "Rimuovi limite di velocità"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "Ripristina"
msgid "Reset 2FA"
msgstr "Reimposta 2FA"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "Reimposta le preferenze di branding"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "Reimposta preferenze documento"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "Email di reset inviato"
@@ -9251,6 +9339,13 @@ msgstr "Reimposta password"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "Reimposta l'autenticazione a due fattori dell'utente. Questa azione è irreversibile e disabiliterà l'autenticazione a due fattori per l'utente."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "Reimposta ai valori predefiniti"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "Reimposta autenticazione a due fattori"
@@ -9269,7 +9364,7 @@ msgstr "Risolvere il pagamento"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "Risorsa bloccata"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "Invia busta"
msgid "Send first reminder after"
msgstr "Invia il primo promemoria dopo"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "Invia per conto del team"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "Invia per conto del team"
@@ -9849,7 +9948,7 @@ msgstr "Inviato"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "Inviato in questo periodo"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "Salta"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "Alcuni campi sono posizionati uno sopra laltro. Questo può complicare il processo di firma o causare il malfunzionamento dei campi."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "Qualcosa è andato storto!"
msgid "Something went wrong."
msgstr "Qualcosa è andato storto."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "Qualcosa è andato storto. Si prega di riprovare più tardi."
@@ -10849,7 +10948,7 @@ msgstr "I team ti aiutano a organizzare il tuo lavoro e collaborare con altri. C
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "Team che appartengono a questa organizzazione."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "Il nome visualizzato per questo indirizzo email"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "Non è stato possibile creare il documento a causa di informazioni mancanti o non valide. Per favore, verifica i destinatari e i campi del modello."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "Il documento non può essere inviato perché alcuni firmatari non hanno un campo firma. Modifica il modello e aggiungi un campo firma per ogni firmatario."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "Il documento è stato eliminato correttamente."
@@ -11434,10 +11537,6 @@ msgstr "Il test del webhook è stato inviato con successo al tuo endpoint."
msgid "The token is invalid or has expired."
msgstr "Il token non è valido o è scaduto."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "Il token è stato copiato negli appunti."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "Il token è stato eliminato con successo."
@@ -11560,6 +11659,14 @@ msgstr "Questo può richiedere uno o due minuti a seconda delle dimensioni del d
msgid "This claim is locked and cannot be deleted."
msgstr "Questo reclamo è bloccato e non può essere eliminato."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "Questo modello di link diretto non può essere utilizzato perché a uno o più firmatari non è stato assegnato un campo firma."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "Questo modello di link diretto non può essere utilizzato perché a uno o più firmatari non è stato assegnato un campo firma. Contatta il mittente per aggiornare il modello."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "Questo documento non può essere recuperato, se vuoi contestare la ragione per i documenti futuri, contatta il supporto."
@@ -11830,6 +11937,14 @@ msgstr "Questo farà SOLO il retroporting degli indicatori delle funzionalità i
msgid "This will remove all emails associated with this email domain"
msgstr "Questo rimuoverà tutte le email associate a questo dominio email"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "Questo reimposterà tutte le preferenze di branding ai loro valori predefiniti e salverà immediatamente le modifiche."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "Questo reimposterà tutte le preferenze del documento ai loro valori predefiniti e salverà immediatamente le modifiche."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "Questa azione ti disconnetterà da tutti gli altri dispositivi. Dovrai accedere nuovamente su quei dispositivi per continuare a usare il tuo account."
@@ -12025,11 +12140,11 @@ msgstr "Attiva l'interruttore per mostrare il tuo profilo al pubblico."
msgid "Token"
msgstr "Token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "Token copiato negli appunti"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "Token creato"
@@ -12037,22 +12152,10 @@ msgstr "Token creato"
msgid "Token deleted"
msgstr "Token eliminato"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "Il token non ha una data di scadenza"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "Data di scadenza del token"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "Il token è scaduto. Per favore riprova."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "Nome del token"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "Token non trovato"
@@ -12210,10 +12313,6 @@ msgstr "Impossibile cambiare la lingua in questo momento. Per favore riprova pi
msgid "Unable to copy recovery code"
msgstr "Impossibile copiare il codice di recupero"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "Impossibile copiare il token"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "Impossibile creare l'accesso diretto al modello. Si prega di riprovare più tardi."
@@ -12347,7 +12446,7 @@ msgstr "Rimuovi"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "Modifiche non salvate"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "Utilizza"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "Usa una durata con ununità, ad es. 5m, 1h o 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "Usa una finestra unica per ogni limite di velocità"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Usa i token API per autenticarti con lAPI di Documenso."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "Abbiamo inviato un'email di conferma per la verifica."
msgid "We need your signature to sign documents"
msgstr "Abbiamo bisogno della tua firma per firmare i documenti"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "Non siamo riusciti a copiare il token negli appunti. Si prega di riprovare."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "Non siamo riusciti a copiare il tuo codice di recupero negli appunti. Si prega di riprovare."
@@ -13536,7 +13635,7 @@ msgstr "Larghezza:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "Finestra"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "Ritiro del consenso"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "Entro il limite"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "Hai eliminato un elemento della busta con titolo {0}"
msgid "You deleted the document"
msgstr "Hai eliminato il documento"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "Non hai l'autorizzazione per creare un token per questo team."
@@ -13987,6 +14086,10 @@ msgstr "Hai rifiutato l'invito da <0>{0}</0> a unirti alla loro organizzazione."
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "Hai avviato il documento {0} che richiede che tu lo {recipientActionVerb}."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "Non hai ancora alcun token API. I tuoi token verranno mostrati qui dopo che li avrai creati."
#: 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."
msgstr "Non hai ancora webhook. I tuoi webhook verranno visualizzati qui una volta creati."
@@ -14090,7 +14193,7 @@ msgstr "Hai il diritto di ritirare il tuo consenso all'uso delle firme elettroni
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "Hai modifiche non salvate"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "La tua busta è stata distribuita con successo."
msgid "Your envelope has been resent successfully."
msgstr "La tua busta è stata reinviata con successo."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "I tuoi token esistenti"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "Il tuo nome"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "Il tuo nuovo token API"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "I tuoi modelli sono stati salvati con successo."
msgid "Your token has expired!"
msgstr "Il tuo token è scaduto!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "Il tuo token è stato creato con successo! Assicurati di copiarlo perché non potrai più vederlo!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "I tuoi token verranno mostrati qui una volta creati."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "Il tuo codice di autenticazione a due fattori"
@@ -14771,3 +14866,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"
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: ja\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -850,11 +850,11 @@ msgstr "無料の組織枠は残り 0 件です"
msgid "1 Free organisations left"
msgstr "無料の組織枠は残り 1 件です"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 か月"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 か月"
@@ -870,7 +870,7 @@ msgstr "2FA リセット"
msgid "2FA token"
msgstr "2要素認証トークン"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 か月"
@@ -949,11 +949,11 @@ msgstr "月 5 通のドキュメント"
msgid "500 Internal Server Error"
msgstr "500 Internal Server Error"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 か月"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 日間"
@@ -1008,6 +1008,10 @@ msgstr "メンバーが組織 {organisationName} を離れました"
msgid "A member has left your organisation on Documenso"
msgstr "メンバーが Documenso の組織を離れました"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "後でこのトークンを識別できるようにするための名前です。"
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "新しいメンバーが組織に参加しました"
@@ -1016,10 +1020,6 @@ msgstr "新しいメンバーが組織に参加しました"
msgid "A new member has joined your organisation {organisationName}"
msgstr "新しいメンバーが組織 {organisationName} に参加しました"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "新しいトークンが正常に作成されました。"
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "操作"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "操作"
@@ -1417,7 +1418,7 @@ msgstr "プレースホルダーを追加"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "レート制限ウィンドウを追加"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "文書に電子的に署名すると、記録用にその文書を表示
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "送信後、自動的にドキュメントが生成され、「ドキュメント」ページに追加されます。メールでも通知が届きます。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "AI 機能"
@@ -1708,11 +1710,11 @@ msgstr "このメールアドレスはすでに存在します。"
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "次のトランスポートを削除してもよろしいですか?"
msgid "Are you sure you want to delete this folder?"
msgstr "このフォルダを削除してもよろしいですか?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "このトークンを削除してもよろしいですか?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "このドキュメントを却下してもよろしいですか?この操作は元に戻せません。"
@@ -2390,6 +2388,10 @@ msgstr "青"
msgid "Border"
msgstr "ボーダー"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "ボーダーの角丸半径"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "ボーダーの角丸"
@@ -2406,6 +2408,10 @@ msgstr "下"
msgid "Brand Colours"
msgstr "ブランドカラー"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "背景色、前景色、プライマリ色、ボーダー色を含むブランドカラー"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "ブランド詳細"
@@ -2414,6 +2420,10 @@ msgstr "ブランド詳細"
msgid "Brand Website"
msgstr "ブランドの Web サイト"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "ブランドサイトおよびブランド詳細"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "ブランディング"
msgid "Branding company details"
msgstr "ブランディング用の会社情報"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "ブランディング用ロゴ"
@@ -2544,9 +2555,11 @@ msgstr "メンバーが見つかりませんか?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "メンバーが見つかりませんか?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "ドキュメント送信後はアイテムをアップロードできま
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "この組織で有効になっている機能。"
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "認証方法を選択"
msgid "Choose your preferred authentication method:"
msgstr "希望する認証方法を選択してください。"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "選択..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "請求"
@@ -3264,14 +3274,14 @@ msgstr "署名リンクをコピー"
msgid "Copy team ID"
msgstr "チーム ID をコピー"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "トークンをコピー"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "値をコピー"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "今すぐトークンをコピーしてください。セキュリティ上の理由から、あとで再度表示することはできません。"
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "カウンターをリセットしました。"
@@ -3338,10 +3348,18 @@ msgstr "チームでコラボレーションするための組織を作成"
msgid "Create an organisation to get started."
msgstr "まずは組織を作成してください。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "API トークンを作成および管理します。詳細については <0>ドキュメント</0> をご覧ください。"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "作成して送信"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "API トークンを作成"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "下書きとして作成"
@@ -3460,8 +3478,8 @@ msgstr "テンプレートを作成"
msgid "Create the document as pending and ready to sign."
msgstr "文書を保留状態で作成し、署名可能にします。"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "トークンを作成"
@@ -3507,6 +3525,7 @@ msgstr "アカウントを作成して、最先端の文書署名を今すぐ始
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "作成日時"
@@ -3527,11 +3546,6 @@ msgstr "作成者"
msgid "Created on"
msgstr "作成日"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "作成日 {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "ドキュメントを作成中"
@@ -3587,6 +3601,14 @@ msgstr "現在、メールドメインは Platform プラン以上のみ設定
msgid "Custom {0} MB file"
msgstr "カスタム {0} MB ファイル"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "カスタムブランディング有効化設定"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "カスタム CSS"
#: 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 "カスタムCSSは保存時にサニタイズされます。レイアウトを崩すプロパティ、リモートURL、および疑似要素は自動的に削除されます。サニタイズ中に削除されたルールは、保存後に表示されます。"
@@ -3671,14 +3693,26 @@ msgstr "デフォルト(システムメーラー)"
msgid "Default border colour."
msgstr "デフォルトのボーダー色。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "既定の日付形式"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "既定の日付形式"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "既定の文書言語"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "既定の文書言語"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "既定の文書の公開範囲"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "既定の文書の公開範囲"
@@ -3691,6 +3725,10 @@ msgstr "既定のメール"
msgid "Default Email Settings"
msgstr "既定のメール設定"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "既定の封筒の有効期限"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "デフォルトの封筒有効期限"
@@ -3703,6 +3741,10 @@ msgstr "デフォルトのファイル"
msgid "Default Organisation Role for New Users"
msgstr "新規ユーザーの既定の組織ロール"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "既定の受信者"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "デフォルトの受信者"
@@ -3715,14 +3757,26 @@ msgstr "この組織に適用されているデフォルト設定です。"
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "このチームに適用されているデフォルト設定です。継承された値は組織から引き継がれます。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "既定の署名設定"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "既定の署名設定"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "既定の署名依頼リマインダー"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "デフォルトの署名リマインダー"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "既定のタイムゾーン"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "既定のタイムゾーン"
@@ -3738,6 +3792,7 @@ msgstr "デフォルト値"
msgid "Default Value"
msgstr "既定値"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "ドキュメント所有権の委任"
@@ -3768,6 +3823,7 @@ msgstr "delete"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "この文書を削除します。この操作は取り消せないため
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "このユーザーのアカウントと、そのすべての内容を削除します。この操作は取り消せず、サブスクリプションもキャンセルされるため、十分ご注意ください。"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "トークンを削除する"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Webhook を削除"
@@ -4651,6 +4711,10 @@ msgstr "繰り返さない"
msgid "Don't transfer (Delete all documents)"
msgstr "転送しない(すべてのドキュメントを削除)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "完了"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "空のフィールド"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "空のクオータは無制限を意味し、0 はリソースをブロックします。レート制限ウィンドウには 5m、1h、24h などの値を指定できます。"
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "入力してください"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "0 より大きい最大リクエスト数を入力してください"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "新しいタイトルを入力してください"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "ウィンドウを入力してください(例: 5m)"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "全員が署名しました。署名済みドキュメントのコピー
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "超過"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "有効期限"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "有効期限切れ"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "有効期限切れ"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "有効期限"
@@ -5538,16 +5604,15 @@ msgstr "有効期限"
msgid "Expires {0}"
msgstr "有効期限: {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "有効期限"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "有効期限: 残り {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "有効期限 {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "私はこの文書の所有者です"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "この組織が設定したサードパーティサービスに資格情報を提供することを理解しました"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "本当に削除します"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "送信者情報を含める"
msgid "Include signing certificate"
msgstr "署名証明書を含める"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "監査ログを文書に含める"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "監査ログをドキュメントに含める"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "署名証明書を文書に含める"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "署名証明書をドキュメントに含める"
@@ -6429,6 +6498,11 @@ msgstr "インスタンス統計"
msgid "Invalid code. Please try again."
msgstr "コードが無効です。もう一度お試しください。"
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "無効なダイレクトリンクテンプレートです"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "無効なドメイン"
@@ -6772,7 +6846,7 @@ msgstr "自分の合意書付き公開プロフィールが欲しいですか?
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "上限に達しました"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "最大"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "最大リクエスト数"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "ライセンスがありません。ご利用中の Documenso インス
msgid "Missing Recipients"
msgstr "不足している受信者"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "署名フィールドが不足しています"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "月間アクティブユーザー:1 つ以上の文書が完了した
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "月間クオータ"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "月間使用量"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "名前の設定"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "上限に近づいています"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "署名が必要"
msgid "Needs to view"
msgstr "閲覧が必要"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "なし"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "有効期限なし"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "有効期限なし"
@@ -7451,7 +7530,7 @@ msgstr "グループが見つかりません"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "継承されたクレームはありません"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "オン"
msgid "On this page, you can create a new webhook."
msgstr "このページでは新しい Webhook を作成できます。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "このページでは、API トークンの作成と管理ができます。詳しくは<0>ドキュメント</0>をご覧ください。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "このページでは Webhook の新規作成と既存 Webhook の管理が行えます。"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "確認すると、次の項目がリセットされます:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "チェックを入れない場合、文書は下書きとして作成さ
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "フィールドの重なりが検出されました"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "保留開始日時"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "この組織にアクセスできるユーザー。"
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "詳しくはサイトのオーナーにお問い合わせください。
msgid "Please don't close this tab. The signing provider is finalising your signature."
msgstr "このタブを閉じないでください。署名プロバイダーが署名の最終処理を行っています。"
#: apps/remix/app/components/forms/token.tsx
msgid "Please enter a meaningful name for your token. This will help you identify it later."
msgstr "トークンの用途が分かる名前を入力してください。後から識別しやすくなります。"
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "数値を入力してください"
@@ -8876,6 +8952,10 @@ msgstr "受信者の署名プロバイダーでの認証に失敗しました"
msgid "Recipients"
msgstr "受信者"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "次の署名者に署名フィールドがないため、このダイレクトリンクテンプレートは受信者が使用できません"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "受信者は文書のコピーを保持したままです"
@@ -8943,7 +9023,7 @@ msgstr "リダイレクト中"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "{0} にリダイレクトしています…"
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "組織メンバーを削除"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "レート制限を削除"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "リセット"
msgid "Reset 2FA"
msgstr "2要素認証をリセット"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "ブランディング設定をリセット"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "文書の設定をリセット"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "リセット用メールを送信しました"
@@ -9251,6 +9339,13 @@ msgstr "パスワードをリセット"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "ユーザーの二要素認証をリセットします。この操作は元に戻せず、このユーザーの二要素認証は無効化されます。"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "既定値にリセット"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "二要素認証をリセット"
@@ -9269,7 +9364,7 @@ msgstr "支払いを解決"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "リソースがブロックされています"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "封筒を送信"
msgid "Send first reminder after"
msgstr "最初のリマインダーを送信するまでの期間"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "チームを代表して送信"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "チームを代表して送信"
@@ -9849,7 +9948,7 @@ msgstr "送信日時"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "この期間に送信済み"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "スキップ"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "一部のフィールドが互いに重なるように配置されています。これにより、署名プロセスが複雑になったり、フィールドが期待どおりに動作しない可能性があります。"
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "問題が発生しました。"
msgid "Something went wrong."
msgstr "問題が発生しました。"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "問題が発生しました。後でもう一度お試しください。"
@@ -10849,7 +10948,7 @@ msgstr "チームは作業を整理し、他のメンバーとコラボレーシ
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "この組織に属しているチーム。"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "このメールアドレスの表示名です"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "不足または無効な情報があるため、文書を作成できませんでした。テンプレートの受信者とフィールドを確認してください。"
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "一部の署名者に署名フィールドがないため、文書を送信できませんでした。テンプレートを編集して、各署名者に署名フィールドを追加してください。"
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "ドキュメントは正常に削除されました。"
@@ -11434,10 +11537,6 @@ msgstr "テスト Webhook はエンドポイントに正常に送信されまし
msgid "The token is invalid or has expired."
msgstr "トークンが無効であるか、有効期限が切れています。"
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "トークンをクリップボードにコピーしました。"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "トークンは正常に削除されました。"
@@ -11560,6 +11659,14 @@ msgstr "ドキュメントのサイズによっては、1~2 分かかる場合
msgid "This claim is locked and cannot be deleted."
msgstr "このクレームはロックされているため削除できません。"
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "1人以上の署名者に割り当てられた署名フィールドがないため、このダイレクトリンクテンプレートは使用できません。"
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "1人以上の署名者に割り当てられた署名フィールドがないため、このダイレクトリンクテンプレートは使用できません。テンプレートの更新について送信者に連絡してください。"
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "このドキュメントは復元できません。今後のドキュメントについて理由に異議がある場合は、サポートまでお問い合わせください。"
@@ -11830,6 +11937,14 @@ msgstr "ここでバックポートされるのは true に設定されている
msgid "This will remove all emails associated with this email domain"
msgstr "この操作により、このメールドメインに関連付けられたすべてのメールが削除されます。"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "これにより、すべてのブランディング設定がデフォルト値にリセットされ、変更がただちに保存されます。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "これにより、すべての文書設定が既定値にリセットされ、変更は直ちに保存されます。"
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "これにより、他のすべてのデバイスからサインアウトされます。アカウントを引き続き使用するには、それらのデバイスで再度サインインする必要があります。"
@@ -12025,11 +12140,11 @@ msgstr "スイッチをオンにして、プロフィールを一般公開しま
msgid "Token"
msgstr "トークン"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "トークンをコピーしました"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "トークンを作成しました"
@@ -12037,22 +12152,10 @@ msgstr "トークンを作成しました"
msgid "Token deleted"
msgstr "トークンを削除しました"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "このトークンには有効期限がありません"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "トークンの有効期限"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "トークンの有効期限が切れています。もう一度お試しください。"
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "トークン名"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "トークンが見つかりません"
@@ -12210,10 +12313,6 @@ msgstr "現在、言語を変更できません。後でもう一度お試しく
msgid "Unable to copy recovery code"
msgstr "リカバリーコードをコピーできませんでした"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "トークンをコピーできませんでした"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "ダイレクトテンプレートアクセスを作成できませんでした。しばらくしてからもう一度お試しください。"
@@ -12347,7 +12446,7 @@ msgstr "ピン留めを解除"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "未保存の変更があります"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "使用"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "5m、1h、24h のように、単位付きの時間を使用してください"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "各レート制限に一意のウィンドウを使用する"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Documenso API で認証するには、API トークンを使用してください。"
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "確認用のメールを送信しました。"
msgid "We need your signature to sign documents"
msgstr "ドキュメントに署名するには、お客様の署名が必要です。"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "トークンをクリップボードにコピーできませんでした。もう一度お試しください。"
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "リカバリーコードをクリップボードにコピーできませんでした。もう一度お試しください。"
@@ -13536,7 +13635,7 @@ msgstr "幅:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "ウィンドウ"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "同意の撤回"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "上限内"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "タイトル {0} のエンベロープアイテムを削除しました"
msgid "You deleted the document"
msgstr "文書を削除しました"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "このチームのトークンを作成する権限がありません。"
@@ -13987,6 +14086,10 @@ msgstr "<0>{0}</0> からの組織参加招待を辞退しました。"
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "あなたが開始したドキュメント {0} は、{recipientActionVerb} が必要です。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "まだ API トークンがありません。トークンを作成すると、ここに表示されます。"
#: 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."
msgstr "Webhook はまだありません。作成するとここに表示されます。"
@@ -14090,7 +14193,7 @@ msgstr "署名プロセスを完了する前であれば、電子署名の利用
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "変更内容が保存されていません"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "封筒を正常に送信しました。"
msgid "Your envelope has been resent successfully."
msgstr "封筒を正常に再送信しました。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "既存のトークン"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "あなたの名前"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "新しい API トークン"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "テンプレートは正常に保存されました。"
msgid "Your token has expired!"
msgstr "トークンの有効期限が切れています。"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "トークンは正常に作成されました。今後この画面で表示できないため、必ずコピーして保管してください。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "トークンは作成されるとここに表示されます。"
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "二要素認証コード"
@@ -14771,3 +14866,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"
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: ko\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -850,11 +850,11 @@ msgstr "무료 조직 0개 남음"
msgid "1 Free organisations left"
msgstr "무료 조직 1개 남음"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1개월"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12개월"
@@ -870,7 +870,7 @@ msgstr "2단계 인증 재설정"
msgid "2FA token"
msgstr "2단계 인증 토큰"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3개월"
@@ -949,11 +949,11 @@ msgstr "월 5개 문서"
msgid "500 Internal Server Error"
msgstr "500 내부 서버 오류"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6개월"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7일"
@@ -1008,6 +1008,10 @@ msgstr "구성원이 조직 {organisationName}을 떠났습니다."
msgid "A member has left your organisation on Documenso"
msgstr "구성원이 Documenso의 조직을 떠났습니다."
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "나중에 이 토큰을 식별하는 데 도움이 될 이름입니다."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "새 구성원이 조직에 가입했습니다."
@@ -1016,10 +1020,6 @@ msgstr "새 구성원이 조직에 가입했습니다."
msgid "A new member has joined your organisation {organisationName}"
msgstr "새 구성원이 조직 {organisationName}에 가입했습니다."
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "새 토큰이 성공적으로 생성되었습니다."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "동작"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "동작"
@@ -1417,7 +1418,7 @@ msgstr "플레이스홀더 추가"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "요청 제한(레이트 리밋) 기간 추가하기"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "전자 서명을 완료한 후에는, 기록용으로 문서를 열람
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "제출이 완료되면 문서가 자동으로 생성되어 문서 페이지에 추가됩니다. 또한 이메일로 알림을 받게 됩니다."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "AI 기능들"
@@ -1708,11 +1710,11 @@ msgstr "이 이메일 주소를 사용하는 이메일이 이미 있습니다."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "다음 전송 방식을 삭제하시겠습니까?"
msgid "Are you sure you want to delete this folder?"
msgstr "이 폴더를 삭제하시겠습니까?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "이 토큰을 삭제하시겠습니까?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "이 문서를 거부하시겠습니까? 이 작업은 되돌릴 수 없습니다."
@@ -2390,6 +2388,10 @@ msgstr "파랑"
msgid "Border"
msgstr "테두리"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "테두리 반경"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "테두리 반경"
@@ -2406,6 +2408,10 @@ msgstr "아래"
msgid "Brand Colours"
msgstr "브랜드 색상"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "배경, 전경, 기본 및 테두리 색상을 포함한 브랜드 색상"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "브랜드 세부 정보"
@@ -2414,6 +2420,10 @@ msgstr "브랜드 세부 정보"
msgid "Brand Website"
msgstr "브랜드 웹사이트"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "브랜드 웹사이트 및 브랜드 세부 정보"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "브랜딩"
msgid "Branding company details"
msgstr "브랜딩 회사 정보"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "브랜딩 로고"
@@ -2544,9 +2555,11 @@ msgstr "누군가를 찾을 수 없나요?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "누군가를 찾을 수 없나요?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "문서를 전송한 이후에는 항목을 업로드할 수 없습니다
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "이 조직에 대해 활성화된 기능입니다."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "인증 방법 선택"
msgid "Choose your preferred authentication method:"
msgstr "선호하는 인증 방법을 선택하세요."
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "선택..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "청구 건"
@@ -3264,14 +3274,14 @@ msgstr "서명 링크 복사"
msgid "Copy team ID"
msgstr "팀 ID 복사"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "토큰 복사"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "값 복사"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "지금 토큰을 복사해 두세요. 보안상의 이유로 이후에는 다시 확인할 수 없습니다."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "카운터가 초기화되었습니다."
@@ -3338,10 +3348,18 @@ msgstr "팀과 협업할 조직을 생성하세요."
msgid "Create an organisation to get started."
msgstr "시작하려면 조직을 생성하세요."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "API 토큰을 생성하고 관리하세요. 자세한 내용은 <0>문서</0>를 참고하세요."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "생성 및 발송"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "API 토큰 생성"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "임시로 생성"
@@ -3460,8 +3478,8 @@ msgstr "템플릿 생성"
msgid "Create the document as pending and ready to sign."
msgstr "문서를 보류 상태이자 서명 준비 상태로 생성합니다."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "토큰 생성"
@@ -3507,6 +3525,7 @@ msgstr "계정을 만들고 최첨단 전자 서명 서비스를 시작하세요
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "생성일"
@@ -3527,11 +3546,6 @@ msgstr "작성자"
msgid "Created on"
msgstr "생성일"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "{0}에 생성됨"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "문서 생성 중"
@@ -3587,6 +3601,14 @@ msgstr "현재 이메일 도메인은 Platform 요금제 이상에서만 구성
msgid "Custom {0} MB file"
msgstr "사용자 정의 {0} MB 파일"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "사용자 지정 브랜딩 활성화 설정"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "사용자 지정 CSS"
#: 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 "사용자 지정 CSS는 저장 시 보안 정제가 수행됩니다. 레이아웃을 깨뜨리는 속성, 원격 URL 및 의사 요소는 자동으로 제거됩니다. 정제 과정에서 제거된 규칙은 저장 후에 표시됩니다."
@@ -3671,14 +3693,26 @@ msgstr "기본값(시스템 메일러)"
msgid "Default border colour."
msgstr "기본 테두리 색상입니다."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "기본 날짜 형식"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "기본 날짜 형식"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "기본 문서 언어"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "기본 문서 언어"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "기본 문서 공개 범위"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "기본 문서 공개 범위"
@@ -3691,6 +3725,10 @@ msgstr "기본 이메일"
msgid "Default Email Settings"
msgstr "기본 이메일 설정"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "기본 봉투 만료 기간"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "기본 봉투 만료 기간"
@@ -3703,6 +3741,10 @@ msgstr "기본 파일"
msgid "Default Organisation Role for New Users"
msgstr "새 사용자 기본 조직 역할"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "기본 수신자"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "기본 수신인들"
@@ -3715,14 +3757,26 @@ msgstr "이 조직에 기본 설정이 적용되었습니다."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "이 팀에 기본 설정이 적용되었습니다. 상속된 값은 조직에서 가져옵니다."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "기본 서명 설정"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "기본 서명 설정"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "기본 서명 알림"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "기본 서명 알림"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "기본 시간대"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "기본 시간대"
@@ -3738,6 +3792,7 @@ msgstr "기본 값"
msgid "Default Value"
msgstr "기본값"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "문서 소유권 위임"
@@ -3768,6 +3823,7 @@ msgstr "delete"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "문서를 삭제합니다. 이 작업은 되돌릴 수 없으므로 신
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "사용자의 계정과 그 안의 모든 내용을 삭제합니다. 이 작업은 되돌릴 수 없으며, 구독도 취소되므로 신중히 진행하세요."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "토큰 삭제하기"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "웹훅 삭제"
@@ -4651,6 +4711,10 @@ msgstr "반복 안 함"
msgid "Don't transfer (Delete all documents)"
msgstr "전송하지 않음(모든 문서 삭제)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "완료"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "빈 필드"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "쿼터를 비워 두면 무제한이며, 0으로 설정하면 리소스가 차단됩니다. 요청 제한(레이트 리밋) 기간은 5m, 1h, 24h와 같은 값을 허용합니다."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "입력하세요"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "0보다 큰 최대 요청 수를 입력하세요."
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "새 제목을 입력하세요."
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "예: 5m 과 같은 기간을 입력하세요."
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "모두 서명했습니다! 서명된 문서의 사본이 이메일로
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "초과됨"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "만료"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "만료됨"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "만료됨"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "만료일"
@@ -5538,16 +5604,15 @@ msgstr "만료일"
msgid "Expires {0}"
msgstr "만료일 {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "만료까지"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "{0} 후 만료"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "{0}에 만료됨"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "이 문서의 소유자입니다"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "이 조직에서 구성한 제3자 서비스에 내 자격 증명을 제공하는 것임을 이해합니다"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "확실합니다! 삭제하세요"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "발신자 정보 포함"
msgid "Include signing certificate"
msgstr "서명 인증서 포함"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "감사 로그를 문서에 포함"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "문서에 감사 로그 포함"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "서명 인증서를 문서에 포함"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "문서에 서명 인증서 포함"
@@ -6429,6 +6498,11 @@ msgstr "인스턴스 통계"
msgid "Invalid code. Please try again."
msgstr "코드가 올바르지 않습니다. 다시 시도해 주세요."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "잘못된 다이렉트 링크 템플릿입니다."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "잘못된 도메인"
@@ -6772,7 +6846,7 @@ msgstr "계약이 포함된 나만의 공개 프로필을 원하시나요?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "제한에 도달함"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "최대"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "최대 요청 수"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "라이선스 누락 - 현재 Documenso 인스턴스에서 사용하는
msgid "Missing Recipients"
msgstr "수신자 누락"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "서명 필드가 누락되었습니다."
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "월간 활성 사용자: 문서가 하나 이상 완료된 사용자"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "월별 할당량"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "월별 사용량"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "해당 없음"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "해당 없음"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "이름 설정"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "한도 근접"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "서명 필요"
msgid "Needs to view"
msgstr "열람 필요"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "없음"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "만료되지 않음"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "만료되지 않음"
@@ -7451,7 +7530,7 @@ msgstr "그룹을 찾을 수 없습니다."
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "상속된 클레임 없음"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "켜짐"
msgid "On this page, you can create a new webhook."
msgstr "이 페이지에서 새 웹훅을 생성할 수 있습니다."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "이 페이지에서 API 토큰을 생성하고 관리할 수 있습니다. 자세한 내용은 <0>문서</0>를 참고하세요."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "이 페이지에서 새 웹훅을 생성하고 기존 웹훅을 관리할 수 있습니다."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "확인되면 다음 항목이 초기화됩니다:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "그렇지 않으면 문서는 초안으로 생성됩니다."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "필드가 서로 겹쳐 있습니다"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "다음 시점부터 보류 중"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "이 조직에 액세스할 수 있는 사람들입니다."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "사이트 소유자에게 추가 지원을 요청해 주세요."
msgid "Please don't close this tab. The signing provider is finalising your signature."
msgstr "이 탭을 닫지 마십시오. 서명 제공자가 서명을 마무리하고 있습니다."
#: apps/remix/app/components/forms/token.tsx
msgid "Please enter a meaningful name for your token. This will help you identify it later."
msgstr "토큰을 나중에 식별할 수 있도록 의미 있는 이름을 입력해 주세요."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "숫자를 입력하세요"
@@ -8876,6 +8952,10 @@ msgstr "수신자의 서명 제공자 인증에 실패했습니다."
msgid "Recipients"
msgstr "수신자"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "다음 서명자들에게 서명 필드가 없어서, 수신자는 이 다이렉트 링크 템플릿을 사용할 수 없습니다."
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "수신자 지표"
@@ -8943,7 +9023,7 @@ msgstr "리디렉션 중"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "{0}(으)로 리디렉션하는 중입니다..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "조직 구성원 제거"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "요율 제한 제거"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "초기화"
msgid "Reset 2FA"
msgstr "2단계 인증 재설정"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "브랜딩 기본 설정 재설정"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "문서 기본 설정 초기화"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "재설정 이메일이 전송되었습니다"
@@ -9251,6 +9339,13 @@ msgstr "비밀번호 재설정"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "사용자의 2단계 인증을 재설정합니다. 이 작업은 되돌릴 수 없으며 사용자의 2단계 인증이 비활성화됩니다."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "기본값으로 초기화"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "2단계 인증 재설정"
@@ -9269,7 +9364,7 @@ msgstr "결제 해결"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "리소스가 차단됨"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "봉투 보내기"
msgid "Send first reminder after"
msgstr "첫 알림 전송 시점"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "팀을 대신하여 보내기"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "팀을 대신해 발송"
@@ -9849,7 +9948,7 @@ msgstr "발송됨"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "이번 기간에 보낸 수"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "건너뛰기"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "일부 필드가 서로 겹쳐 배치되어 있습니다. 이는 서명 과정을 복잡하게 만들거나 필드가 예상대로 작동하지 않게 할 수 있습니다."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "문제가 발생했습니다!"
msgid "Something went wrong."
msgstr "문제가 발생했습니다."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "문제가 발생했습니다. 잠시 후 다시 시도해 주세요."
@@ -10849,7 +10948,7 @@ msgstr "팀은 작업을 조직하고 다른 사람과 협업하는 데 도움
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "이 조직에 속한 팀입니다."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "이 이메일 주소의 표시 이름입니다."
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "정보가 없거나 유효하지 않아 문서를 생성할 수 없습니다. 템플릿의 수신인과 필드를 다시 확인해 주세요."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "일부 서명자에게 서명 필드가 없어 문서를 전송할 수 없습니다. 템플릿을 편집하여 각 서명자에게 서명 필드를 추가해 주세요."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "문서가 성공적으로 삭제되었습니다."
@@ -11434,10 +11537,6 @@ msgstr "테스트 웹후크가 정상적으로 엔드포인트로 전송되었
msgid "The token is invalid or has expired."
msgstr "토큰이 잘못되었거나 만료되었습니다."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "토큰이 클립보드에 복사되었습니다."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "토큰이 성공적으로 삭제되었습니다."
@@ -11560,6 +11659,14 @@ msgstr "문서 크기에 따라 1~2분 정도 소요될 수 있습니다."
msgid "This claim is locked and cannot be deleted."
msgstr "이 클레임은 잠겨 있어 삭제할 수 없습니다."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "한 명 이상의 서명자에게 서명 필드가 지정되지 않아 이 다이렉트 링크 템플릿은 사용할 수 없습니다."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "한 명 이상의 서명자에게 서명 필드가 지정되지 않아 이 다이렉트 링크 템플릿은 사용할 수 없습니다. 템플릿을 업데이트하도록 발신자에게 문의해 주세요."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "이 문서는 복구할 수 없습니다. 향후 문서에 대한 삭제 사유에 이의를 제기하시려면 고객 지원팀에 문의해 주세요."
@@ -11830,6 +11937,14 @@ msgstr "이 작업은 true로 설정된 기능 플래그만 다시 반영합니
msgid "This will remove all emails associated with this email domain"
msgstr "이 작업은 이 이메일 도메인과 연결된 모든 이메일을 제거합니다."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "이 작업을 수행하면 모든 브랜딩 기본 설정이 기본값으로 재설정되고 변경 사항이 즉시 저장됩니다."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "이 작업을 수행하면 모든 문서 기본 설정이 기본값으로 초기화되고 변경 사항이 즉시 저장됩니다."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "모든 다른 기기에서 로그아웃됩니다. 해당 기기에서 계정을 계속 사용하려면 다시 로그인해야 합니다."
@@ -12025,11 +12140,11 @@ msgstr "스위치를 전환하여 프로필을 공개로 표시합니다."
msgid "Token"
msgstr "토큰"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "토큰이 클립보드에 복사되었습니다"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "토큰이 생성되었습니다"
@@ -12037,22 +12152,10 @@ msgstr "토큰이 생성되었습니다"
msgid "Token deleted"
msgstr "토큰이 삭제되었습니다"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "토큰에는 만료 날짜가 없습니다"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "토큰 만료 날짜"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "토큰이 만료되었습니다. 다시 시도해 주세요."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "토큰 이름"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "토큰을 찾을 수 없습니다"
@@ -12210,10 +12313,6 @@ msgstr "현재 언어를 변경할 수 없습니다. 나중에 다시 시도해
msgid "Unable to copy recovery code"
msgstr "복구 코드를 복사할 수 없습니다"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "토큰을 복사할 수 없습니다"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "직접 템플릿 접근을 생성할 수 없습니다. 나중에 다시 시도해 주세요."
@@ -12347,7 +12446,7 @@ msgstr "고정 해제"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "저장되지 않은 변경 사항"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "사용"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "단위가 포함된 기간을 사용하세요. 예: 5m, 1h, 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "각 요율 제한마다 고유한 윈도우를 사용하세요"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Documenso API에 인증하려면 API 토큰을 사용하세요."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "인증을 위해 확인 이메일을 발송했습니다."
msgid "We need your signature to sign documents"
msgstr "문서에 서명하려면 서명이 필요합니다."
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "토큰을 클립보드에 복사하지 못했습니다. 다시 시도해 주세요."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "복구 코드를 클립보드에 복사하지 못했습니다. 다시 시도해 주세요."
@@ -13536,7 +13635,7 @@ msgstr "너비:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "윈도우"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "동의 철회"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "한도 내"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "제목이 {0}인 봉투 항목을 삭제했습니다"
msgid "You deleted the document"
msgstr "문서를 삭제했습니다"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "이 팀에 대한 토큰을 생성할 권한이 없습니다."
@@ -13987,6 +14086,10 @@ msgstr "<0>{0}</0> 조직의 초대를 거절했습니다."
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "귀하가 시작한 문서 {0}에 {recipientActionVerb}해야 합니다."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "아직 API 토큰이 없습니다. 토큰을 생성하면 여기에 표시됩니다."
#: 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."
msgstr "아직 웹훅을 생성하지 않았습니다. 웹훅을 생성하면 이곳에 표시됩니다."
@@ -14090,7 +14193,7 @@ msgstr "전자 서명을 완료하기 전 언제든지 전자 서명 사용에
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "저장되지 않은 변경 사항이 있습니다"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "봉투가 성공적으로 배포되었습니다."
msgid "Your envelope has been resent successfully."
msgstr "봉투가 성공적으로 다시 전송되었습니다."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "기존 토큰"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "이름"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "새 API 토큰"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "템플릿이 성공적으로 저장되었습니다."
msgid "Your token has expired!"
msgstr "토큰이 만료되었습니다!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "토큰이 성공적으로 생성되었습니다! 나중에 다시 볼 수 없으니 반드시 복사해 두세요!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "토큰을 생성하면 이곳에 표시됩니다."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "2단계 인증 코드"
@@ -14771,3 +14866,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"
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: nl\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -850,11 +850,11 @@ msgstr "0 gratis organisaties over"
msgid "1 Free organisations left"
msgstr "1 gratis organisatie over"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 maand"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 maanden"
@@ -870,7 +870,7 @@ msgstr "2FA-reset"
msgid "2FA token"
msgstr "2FA-token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 maanden"
@@ -949,11 +949,11 @@ msgstr "5 documenten per maand"
msgid "500 Internal Server Error"
msgstr "500 Interne serverfout"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 maanden"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 dagen"
@@ -1008,6 +1008,10 @@ msgstr "Een lid heeft je organisatie {organisationName} verlaten"
msgid "A member has left your organisation on Documenso"
msgstr "Een lid heeft je organisatie op Documenso verlaten"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "Een naam die u helpt deze token later te identificeren."
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "Een nieuw lid is toegetreden tot je organisatie"
@@ -1016,10 +1020,6 @@ msgstr "Een nieuw lid is toegetreden tot je organisatie"
msgid "A new member has joined your organisation {organisationName}"
msgstr "Een nieuw lid is toegetreden tot je organisatie {organisationName}"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "Er is succesvol een nieuw token aangemaakt."
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "Actie"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "Acties"
@@ -1417,7 +1418,7 @@ msgstr "Placeholders toevoegen"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "Venster voor snelheidslimiet toevoegen"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "Na het elektronisch ondertekenen van een document krijg je de mogelijkhe
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "Na indiening wordt er automatisch een document gegenereerd en toegevoegd aan je documentenpagina. Je ontvangt ook een melding per e-mail."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "AI-functies"
@@ -1708,11 +1710,11 @@ msgstr "Er bestaat al een e-mailadres met dit adres."
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "Weet u zeker dat u het volgende transport wilt verwijderen?"
msgid "Are you sure you want to delete this folder?"
msgstr "Weet je zeker dat je deze map wilt verwijderen?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "Weet je zeker dat je dit token wilt verwijderen?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "Weet je zeker dat je dit document wilt weigeren? Deze actie kan niet ongedaan worden gemaakt."
@@ -2390,6 +2388,10 @@ msgstr "Blauw"
msgid "Border"
msgstr "Rand"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "Afgeronde hoeken"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "Afgeronde hoeken"
@@ -2406,6 +2408,10 @@ msgstr "Onder"
msgid "Brand Colours"
msgstr "Merkkleuren"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "Merk­kleuren, inclusief achtergrond-, voorgrond-, primaire en randkleuren"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "Merkdetails"
@@ -2414,6 +2420,10 @@ msgstr "Merkdetails"
msgid "Brand Website"
msgstr "Website van merk"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "Merkwebsite en merkinformatie"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "Branding"
msgid "Branding company details"
msgstr "Bedrijfsgegevens voor branding"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "Branding-logo"
@@ -2544,9 +2555,11 @@ msgstr "Kunt u niemand vinden?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "Kunt u niemand vinden?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "Items kunnen niet worden geüpload nadat het document is verzonden"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "Functies ingeschakeld voor deze organisatie."
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "Verificatiemethode kiezen"
msgid "Choose your preferred authentication method:"
msgstr "Kies je voorkeursauthenticatiemethode:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "Kiezen..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "Claim"
@@ -3264,14 +3274,14 @@ msgstr "Ondertekeningslinks kopiëren"
msgid "Copy team ID"
msgstr "Team-ID kopiëren"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "Token kopiëren"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "Waarde kopiëren"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "Kopieer uw token nu. Om veiligheidsredenen kunt u deze later niet meer bekijken."
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "Teller opnieuw ingesteld."
@@ -3338,10 +3348,18 @@ msgstr "Maak een organisatie aan om met teams samen te werken"
msgid "Create an organisation to get started."
msgstr "Maak een organisatie aan om te beginnen."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "Maak en beheer API-tokens. Raadpleeg onze <0>documentatie</0> voor meer informatie."
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "Aanmaken en verzenden"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "API-token aanmaken"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "Als concept aanmaken"
@@ -3460,8 +3478,8 @@ msgstr "Sjabloon maken"
msgid "Create the document as pending and ready to sign."
msgstr "Maak het document aan als in behandeling en klaar om te ondertekenen."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "Token aanmaken"
@@ -3507,6 +3525,7 @@ msgstr "Maak je account aan en begin met het gebruik van moderne documentenonder
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "Aangemaakt"
@@ -3527,11 +3546,6 @@ msgstr "Aangemaakt door"
msgid "Created on"
msgstr "Aangemaakt op"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "Aangemaakt op {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "Document wordt gemaakt"
@@ -3587,6 +3601,14 @@ msgstr "E-maildomeinen kunnen momenteel alleen worden geconfigureerd voor Platfo
msgid "Custom {0} MB file"
msgstr "Aangepast {0} MB-bestand"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "Instelling voor aangepaste branding ingeschakeld"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "Aangepaste CSS"
#: 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 "Aangepaste CSS wordt opgeschoond bij het opslaan. Layout-verstorende eigenschappen, externe URL's en pseudo-elementen worden automatisch verwijderd. Alle regels die tijdens het opschonen zijn verwijderd, worden weergegeven nadat je hebt opgeslagen."
@@ -3671,14 +3693,26 @@ msgstr "Standaard (systeemmailer)"
msgid "Default border colour."
msgstr "Standaardrandkleur."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "Standaard datumnotatie"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "Standaarddatumnotatie"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "Standaarddocumenttaal"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "Standaarddocumenttaal"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "Standaarddocumentzichtbaarheid"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "Standaarddocumentzichtbaarheid"
@@ -3691,6 +3725,10 @@ msgstr "Standaard e-mailadres"
msgid "Default Email Settings"
msgstr "Standaarde-mailinstellingen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "Standaardverloopdatum van enveloppen"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "Standaardvervaldatum voor enveloppen"
@@ -3703,6 +3741,10 @@ msgstr "Standaardbestand"
msgid "Default Organisation Role for New Users"
msgstr "Standaard organisatierol voor nieuwe gebruikers"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "Standaardontvangers"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "Standaardontvangers"
@@ -3715,14 +3757,26 @@ msgstr "Standaardinstellingen toegepast op deze organisatie."
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "Standaardinstellingen toegepast op dit team. Overgenomen waarden komen van de organisatie."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "Standaardhandtekeninginstellingen"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "Standaardinstellingen voor handtekeningen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "Standaardherinneringen voor ondertekening"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "Standaardherinneringen voor ondertekening"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "Standaardtijdzone"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "Standaardtijdzone"
@@ -3738,6 +3792,7 @@ msgstr "Standaardwaarde"
msgid "Default Value"
msgstr "Standaardwaarde"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "Documenteigendom delegeren"
@@ -3768,6 +3823,7 @@ msgstr "verwijderen"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "Verwijder het document. Deze actie kan niet ongedaan worden gemaakt, ga
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "Verwijder de gebruikersaccount en alle bijbehorende inhoud. Deze actie kan niet ongedaan worden gemaakt en zal hun abonnement opzeggen, dus ga voorzichtig te werk."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "Token verwijderen"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "Webhook verwijderen"
@@ -4651,6 +4711,10 @@ msgstr "Niet herhalen"
msgid "Don't transfer (Delete all documents)"
msgstr "Niet overdragen (alle documenten verwijderen)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "Gereed"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "Leeg veld"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "Een lege quota betekent onbeperkt, 0 blokkeert de resource. Vensters voor snelheidslimieten accepteren waarden zoals 5m, 1u of 24u."
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "Invoeren"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "Voer een maximaal aantal aanvragen groter dan 0 in"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "Voer een nieuwe titel in"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "Voer een venster in, bijv. 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "Iedereen heeft ondertekend! U ontvangt een kopie van het ondertekende do
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "Overschreden"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "Vervaldatum"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "Verlopen"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "Verlopen"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "Verloopt"
@@ -5538,16 +5604,15 @@ msgstr "Verloopt"
msgid "Expires {0}"
msgstr "Verloopt op {0}"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "Verloopt over"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Verloopt over {0}"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "Verloopt op {0}"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "Ik ben de eigenaar van dit document"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "Ik begrijp dat ik mijn inloggegevens verstrek aan een externe dienst die door deze organisatie is ingesteld"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "Ik weet het zeker! Verwijder het"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "Afzendergegevens bijvoegen"
msgid "Include signing certificate"
msgstr "Ondertekeningscertificaat bijvoegen"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "Neem de controlegegevens (audit logs) in het document op"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "Auditlogs opnemen in het document"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "Neem het ondertekeningscertificaat in het document op"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "Het ondertekeningscertificaat opnemen in het document"
@@ -6429,6 +6498,11 @@ msgstr "Instantiestatistieken"
msgid "Invalid code. Please try again."
msgstr "Ongeldige code. Probeer het opnieuw."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "Ongeldige directelinksjabloon"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "Ongeldige domeinen"
@@ -6772,7 +6846,7 @@ msgstr "Wil je een eigen openbaar profiel met overeenkomsten?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "Limiet bereikt"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "Max"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "Maximaal aantal aanvragen"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "Licentie ontbreekt - Je Documenso-instantie gebruikt functies waarvoor e
msgid "Missing Recipients"
msgstr "Ontbrekende ontvangers"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "Ontbrekende handtekeningvelden"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "Maandelijks actieve gebruikers: gebruikers van wie ten minste één docu
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "Maandelijkse limiet"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "Maandelijks gebruik"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "n.v.t."
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "n.v.t."
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "Naam-instellingen"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "Dicht bij limiet"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "Moet ondertekenen"
msgid "Needs to view"
msgstr "Moet bekijken"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "Nooit"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "Nooit verlopen"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "Verloopt nooit"
@@ -7451,7 +7530,7 @@ msgstr "Geen groepen gevonden"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "Geen overgeërfde claim"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "Aan"
msgid "On this page, you can create a new webhook."
msgstr "Op deze pagina kun je een nieuwe webhook aanmaken."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "Op deze pagina kun je API-tokens aanmaken en beheren. Zie onze <0>documentatie</0> voor meer informatie."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "Op deze pagina kun je nieuwe webhooks aanmaken en bestaande beheren."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "Na bevestiging worden de volgende instellingen teruggezet:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "Anders wordt het document als concept aangemaakt."
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "Overlappende velden gedetecteerd"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "In behandeling sinds"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "Mensen met toegang tot deze organisatie."
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "Neem contact op met de site-eigenaar voor verdere hulp."
msgid "Please don't close this tab. The signing provider is finalising your signature."
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."
msgstr "Voer een betekenisvolle naam in voor je token. Hiermee kun je het later herkennen."
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "Voer een nummer in"
@@ -8876,6 +8952,10 @@ msgstr "De verificatie bij de ondertekeningsprovider van de ontvanger is mislukt
msgid "Recipients"
msgstr "Ontvangers"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "Ontvangers kunnen deze directelinksjabloon niet gebruiken, omdat de volgende ondertekenaars geen handtekeningveld hebben"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "Ontvangerstatistieken"
@@ -8943,7 +9023,7 @@ msgstr "Doorsturen"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "Doorsturen naar {0}..."
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "Organisatielid verwijderen"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "Snelheidslimiet verwijderen"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "Resetten"
msgid "Reset 2FA"
msgstr "2FA resetten"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "Branding­voorkeuren resetten"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "Documentvoorkeuren resetten"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "Resetmail verzonden"
@@ -9251,6 +9339,13 @@ msgstr "Wachtwoord resetten"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "Reset de tweefactorauthenticatie van de gebruiker. Deze actie is onomkeerbaar en schakelt tweefactorauthenticatie voor de gebruiker uit."
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "Terugzetten naar standaardwaarden"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "Tweefactorauthenticatie resetten"
@@ -9269,7 +9364,7 @@ msgstr "Betaling oplossen"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "Bron geblokkeerd"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "Envelope verzenden"
msgid "Send first reminder after"
msgstr "Eerste herinnering verzenden na"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "Verzenden namens team"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "Verzenden namens team"
@@ -9849,7 +9948,7 @@ msgstr "Verzonden"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "In deze periode verzonden"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "Overslaan"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "Sommige velden zijn boven op elkaar geplaatst. Dit kan het ondertekenproces bemoeilijken of ervoor zorgen dat velden niet naar verwachting werken."
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "Er is iets misgegaan!"
msgid "Something went wrong."
msgstr "Er is iets misgegaan."
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "Er is iets misgegaan. Probeer het later opnieuw."
@@ -10849,7 +10948,7 @@ msgstr "Teams helpen je je werk te organiseren en samen te werken met anderen. M
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "Teams die bij deze organisatie horen."
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "De weergavenaam voor dit e-mailadres"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "Het document kon niet worden gemaakt vanwege ontbrekende of ongeldige informatie. Controleer de ontvangers en velden van de sjabloon."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "Het document kon niet worden verzonden omdat sommige ondertekenaars geen handtekeningveld hebben. Bewerk de sjabloon en voeg voor elke ondertekenaar een handtekeningveld toe."
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "Het document is succesvol verwijderd."
@@ -11434,10 +11537,6 @@ msgstr "De testwebhook is succesvol naar je endpoint verzonden."
msgid "The token is invalid or has expired."
msgstr "De token is ongeldig of is verlopen."
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "Het token is naar je klembord gekopieerd."
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "Het token is succesvol verwijderd."
@@ -11560,6 +11659,14 @@ msgstr "Dit kan een of twee minuten duren, afhankelijk van de grootte van uw doc
msgid "This claim is locked and cannot be deleted."
msgstr "Deze claim is vergrendeld en kan niet worden verwijderd."
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "Deze directelinksjabloon kan niet worden gebruikt omdat een of meer ondertekenaars geen handtekeningveld toegewezen hebben."
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "Deze directelinksjabloon kan niet worden gebruikt omdat een of meer ondertekenaars geen handtekeningveld toegewezen hebben. Neem contact op met de verzender om de sjabloon bij te werken."
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "Dit document kan niet worden teruggezet. Als je de reden voor toekomstige documenten wilt betwisten, neem dan contact op met de ondersteuning."
@@ -11830,6 +11937,14 @@ msgstr "Hiermee worden ALLE feature-flags die op true staan teruggezet; alles wa
msgid "This will remove all emails associated with this email domain"
msgstr "Hiermee worden alle e-mails die aan dit e-maildomein zijn gekoppeld verwijderd"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "Hiermee worden alle branding­voorkeuren teruggezet naar de standaardwaarden en de wijzigingen direct opgeslagen."
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "Hiermee worden alle documentvoorkeuren teruggezet naar hun standaardwaarden en worden de wijzigingen direct opgeslagen."
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "Hiermee wordt je op alle andere apparaten uitgelogd. Je moet op die apparaten opnieuw inloggen om je account verder te gebruiken."
@@ -12025,11 +12140,11 @@ msgstr "Schakel de schakelaar om je profiel voor het publiek zichtbaar te maken.
msgid "Token"
msgstr "Token"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "Token gekopieerd naar klembord"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "Token aangemaakt"
@@ -12037,22 +12152,10 @@ msgstr "Token aangemaakt"
msgid "Token deleted"
msgstr "Token verwijderd"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "Token heeft geen vervaldatum"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "Vervaldatum token"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "Het token is verlopen. Probeer het opnieuw."
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "Tokennaam"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "Token niet gevonden"
@@ -12210,10 +12313,6 @@ msgstr "De taal kan nu niet worden gewijzigd. Probeer het later opnieuw."
msgid "Unable to copy recovery code"
msgstr "Kan herstelcode niet kopiëren"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "Kan token niet kopiëren"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "Kan geen toegang via directe sjabloon maken. Probeer het later opnieuw."
@@ -12347,7 +12446,7 @@ msgstr "Losmaken"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "Niet-opgeslagen wijzigingen"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "Gebruiken"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "Gebruik een duur met een eenheid, bijv. 5m, 1u of 24u"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "Gebruik een uniek venster voor elke snelheidslimiet"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "Gebruik API-tokens om je te verifiëren bij de Documenso API."
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "We hebben een bevestigingsmail voor verificatie verzonden."
msgid "We need your signature to sign documents"
msgstr "We hebben je handtekening nodig om documenten te ondertekenen."
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "We konden het token niet naar je klembord kopiëren. Probeer het opnieuw."
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "We konden je herstelcode niet naar je klembord kopiëren. Probeer het opnieuw."
@@ -13536,7 +13635,7 @@ msgstr "Breedte:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "Venster"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "Toestemming intrekken"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "Binnen de limiet"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "Je hebt een envelopitem verwijderd met de titel {0}"
msgid "You deleted the document"
msgstr "Je hebt het document verwijderd"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "Je hebt geen toestemming om een token voor dit team te maken."
@@ -13987,6 +14086,10 @@ msgstr "Je hebt de uitnodiging van <0>{0}</0> om lid te worden van hun organisat
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "Je hebt het document {0} gestart dat je moet {recipientActionVerb}."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "Je hebt nog geen API-tokens. Je tokens worden hier weergegeven zodra je ze hebt aangemaakt."
#: 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."
msgstr "Je hebt nog geen webhooks. Je webhooks worden hier weergegeven zodra je ze aanmaakt."
@@ -14090,7 +14193,7 @@ msgstr "Je hebt het recht je toestemming voor het gebruik van elektronische hand
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "U hebt niet-opgeslagen wijzigingen"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "Uw envelop is succesvol verzonden."
msgid "Your envelope has been resent successfully."
msgstr "Uw envelop is succesvol opnieuw verzonden."
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "Je bestaande tokens"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "Uw naam"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "Je nieuwe API-token"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "Je sjablonen zijn succesvol opgeslagen."
msgid "Your token has expired!"
msgstr "Je token is verlopen!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "Je token is succesvol aangemaakt! Zorg dat je het kopieert, want je kunt het later niet meer bekijken!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "Je tokens worden hier weergegeven zodra je ze aanmaakt."
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "Uw tweefactorauthenticatiecode"
@@ -14771,3 +14866,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"
File diff suppressed because it is too large Load Diff
+213 -117
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: zh\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-22 13:53\n"
"PO-Revision-Date: 2026-07-20 09:03\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -850,11 +850,11 @@ msgstr "剩余 0 个免费组织"
msgid "1 Free organisations left"
msgstr "剩余 1 个免费组织"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "1 month"
msgstr "1 个月"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "12 months"
msgstr "12 个月"
@@ -870,7 +870,7 @@ msgstr "2FA 重置"
msgid "2FA token"
msgstr "双重验证令牌 (2FA token)"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "3 months"
msgstr "3 个月"
@@ -949,11 +949,11 @@ msgstr "每月 5 个文档"
msgid "500 Internal Server Error"
msgstr "500 内部服务器错误"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "6 months"
msgstr "6 个月"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "7 days"
msgstr "7 天"
@@ -1008,6 +1008,10 @@ msgstr "有成员已离开您的组织 {organisationName}"
msgid "A member has left your organisation on Documenso"
msgstr "有成员已在 Documenso 上离开您的组织"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "A name to help you identify this token later."
msgstr "用于帮助你之后识别此令牌的名称。"
#: packages/lib/jobs/definitions/emails/send-organisation-member-joined-email.handler.ts
msgid "A new member has joined your organisation"
msgstr "有新成员已加入您的组织"
@@ -1016,10 +1020,6 @@ msgstr "有新成员已加入您的组织"
msgid "A new member has joined your organisation {organisationName}"
msgstr "有新成员已加入您的组织 {organisationName}"
#: apps/remix/app/components/forms/token.tsx
msgid "A new token was created successfully."
msgstr "新令牌创建成功。"
#: apps/remix/app/components/forms/forgot-password.tsx
#: apps/remix/app/routes/_unauthenticated+/check-email.tsx
msgid "A password reset email has been sent, if you have an account you should see it in your inbox shortly."
@@ -1215,6 +1215,7 @@ msgstr "操作"
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Actions"
msgstr "操作"
@@ -1417,7 +1418,7 @@ msgstr "添加占位符"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Add rate limit window"
msgstr ""
msgstr "添加速率限制窗口"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Add recipients"
@@ -1539,6 +1540,7 @@ msgstr "在你以电子方式签署文档后,你将可以查看、下载和打
msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email."
msgstr "提交后,将自动生成一个文档并添加到您的“文档”页面。您还会收到一封电子邮件通知。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "AI features"
msgstr "AI 功能"
@@ -1708,11 +1710,11 @@ msgstr "已存在使用该地址的邮箱。"
#: apps/remix/app/components/dialogs/admin-team-member-delete-dialog.tsx
#: apps/remix/app/components/dialogs/admin-user-create-dialog.tsx
#: apps/remix/app/components/dialogs/organisation-email-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/forms/avatar-image.tsx
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/general/claim-account.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
@@ -2121,10 +2123,6 @@ msgstr "确定要删除以下传输方式吗?"
msgid "Are you sure you want to delete this folder?"
msgstr "确定要删除此文件夹吗?"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Are you sure you want to delete this token?"
msgstr "确定要删除此令牌吗?"
#: apps/remix/app/components/general/document-signing/document-signing-reject-dialog.tsx
msgid "Are you sure you want to reject this document? This action cannot be undone."
msgstr "您确定要拒签此文档吗?此操作无法撤销。"
@@ -2390,6 +2388,10 @@ msgstr "蓝色"
msgid "Border"
msgstr "边框"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Border radius"
msgstr "边框圆角"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Border Radius"
msgstr "边框圆角"
@@ -2406,6 +2408,10 @@ msgstr "底部对齐"
msgid "Brand Colours"
msgstr "品牌颜色"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand colours, including background, foreground, primary, and border colours"
msgstr "品牌颜色,包括背景色、前景色、主色和边框颜色"
#: apps/remix/app/components/forms/branding-preferences-form.tsx
msgid "Brand Details"
msgstr "品牌详情"
@@ -2414,6 +2420,10 @@ msgstr "品牌详情"
msgid "Brand Website"
msgstr "品牌网站"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Brand website and brand details"
msgstr "品牌网站和品牌详细信息"
#: apps/remix/app/components/general/admin-global-settings-section.tsx
#: apps/remix/app/components/general/settings-nav-desktop.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx
@@ -2425,6 +2435,7 @@ msgstr "品牌"
msgid "Branding company details"
msgstr "品牌公司详情"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Branding logo"
msgstr "品牌徽标"
@@ -2544,9 +2555,11 @@ msgstr "找不到某个人?"
#: apps/remix/app/components/dialogs/ai-field-detection-dialog.tsx
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
#: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/claim-create-dialog.tsx
#: apps/remix/app/components/dialogs/claim-delete-dialog.tsx
#: apps/remix/app/components/dialogs/claim-update-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-create-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-delete-dialog.tsx
#: apps/remix/app/components/dialogs/email-transport-send-test-dialog.tsx
@@ -2607,6 +2620,7 @@ msgstr "找不到某个人?"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-bulk-send-dialog.tsx
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
@@ -2680,7 +2694,7 @@ msgstr "文档发送后无法再上传项目"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Capabilities enabled for this organisation."
msgstr ""
msgstr "为此组织启用的功能。"
#: packages/lib/constants/recipient-roles.ts
msgctxt "Recipient role name"
@@ -2796,10 +2810,6 @@ msgstr "选择验证方式"
msgid "Choose your preferred authentication method:"
msgstr "请选择首选认证方式:"
#: apps/remix/app/components/forms/token.tsx
msgid "Choose..."
msgstr "请选择..."
#: apps/remix/app/components/tables/admin-organisation-stats-table.tsx
msgid "Claim"
msgstr "索赔"
@@ -3264,14 +3274,14 @@ msgstr "复制签署链接"
msgid "Copy team ID"
msgstr "复制团队 ID"
#: apps/remix/app/components/forms/token.tsx
msgid "Copy token"
msgstr "复制令牌"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Copy Value"
msgstr "复制值"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Copy your token now. For security reasons you will not be able to see it again."
msgstr "请立即复制你的令牌。出于安全原因,你之后将无法再次查看它。"
#: apps/remix/app/components/general/organisation-usage-reset-button.tsx
msgid "Counter reset."
msgstr "计数器已重置。"
@@ -3338,10 +3348,18 @@ msgstr "创建一个组织以便与团队协作"
msgid "Create an organisation to get started."
msgstr "创建一个组织以开始使用。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Create and manage API tokens. See our <0>documentation</0> for more information."
msgstr "创建和管理 API 令牌。更多信息请参阅我们的<0>文档</0>。"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create and send"
msgstr "创建并发送"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create API token"
msgstr "创建 API 令牌"
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
msgid "Create as draft"
msgstr "创建为草稿"
@@ -3460,8 +3478,8 @@ msgstr "创建模板"
msgid "Create the document as pending and ready to sign."
msgstr "将文档创建为待处理状态,并准备好供签署。"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Create token"
msgstr "创建令牌"
@@ -3507,6 +3525,7 @@ msgstr "创建你的账号,开始使用最先进的文档签署功能。开放
#: apps/remix/app/routes/_authenticated+/admin+/teams.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "Created"
msgstr "已创建"
@@ -3527,11 +3546,6 @@ msgstr "创建者"
msgid "Created on"
msgstr "创建于"
#. placeholder {0}: i18n.date(token.createdAt, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Created on {0}"
msgstr "创建于 {0}"
#: apps/remix/app/routes/embed+/v2+/authoring+/envelope.create._index.tsx
msgid "Creating Document"
msgstr "正在创建文档"
@@ -3587,6 +3601,14 @@ msgstr "目前仅 Platform 及以上套餐可以配置邮箱域名。"
msgid "Custom {0} MB file"
msgstr "自定义 {0} MB 文件"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom branding enabled setting"
msgstr "自定义品牌启用设置"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Custom CSS"
msgstr "自定义 CSS"
#: 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 "自定义 CSS 在保存时会进行清理。破坏布局的属性、远程 URL 和伪元素会被自动移除。任何在清理过程中被删除的规则都会在你保存后显示出来。"
@@ -3671,14 +3693,26 @@ msgstr "默认(系统邮件程序)"
msgid "Default border colour."
msgstr "默认边框颜色。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default date format"
msgstr "默认日期格式"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Date Format"
msgstr "默认日期格式"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document language"
msgstr "默认文档语言"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Language"
msgstr "默认文档语言"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default document visibility"
msgstr "默认文档可见性"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Document Visibility"
msgstr "默认文档可见性"
@@ -3691,6 +3725,10 @@ msgstr "默认邮箱"
msgid "Default Email Settings"
msgstr "默认邮件设置"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default envelope expiration"
msgstr "默认信封过期时间"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Envelope Expiration"
msgstr "默认信封过期时间"
@@ -3703,6 +3741,10 @@ msgstr "默认文件"
msgid "Default Organisation Role for New Users"
msgstr "新用户的默认组织角色"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default recipients"
msgstr "默认收件人"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Recipients"
msgstr "默认收件人"
@@ -3715,14 +3757,26 @@ msgstr "已将默认设置应用于此组织。"
msgid "Default settings applied to this team. Inherited values come from the organisation."
msgstr "已将默认设置应用于此团队。继承的值来自组织。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signature settings"
msgstr "默认签名设置"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signature Settings"
msgstr "默认签名设置"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default signing reminders"
msgstr "默认签署提醒"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Signing Reminders"
msgstr "默认签署提醒"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Default time zone"
msgstr "默认时区"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Default Time Zone"
msgstr "默认时区"
@@ -3738,6 +3792,7 @@ msgstr "默认值"
msgid "Default Value"
msgstr "默认值"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/general/admin-global-settings-section.tsx
msgid "Delegate document ownership"
msgstr "委派文档所有权"
@@ -3768,6 +3823,7 @@ msgstr "delete"
#: apps/remix/app/components/dialogs/team-delete-dialog.tsx
#: apps/remix/app/components/dialogs/team-group-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
#: apps/remix/app/components/general/document/document-page-view-dropdown.tsx
@@ -3909,6 +3965,10 @@ msgstr "删除该文档。此操作不可恢复,请谨慎进行。"
msgid "Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution."
msgstr "删除该用户的账号及其所有内容。此操作不可恢复,并会取消其订阅,请谨慎进行。"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "Delete token"
msgstr "删除令牌"
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx
msgid "Delete Webhook"
msgstr "删除 Webhook"
@@ -4651,6 +4711,10 @@ msgstr "不重复"
msgid "Don't transfer (Delete all documents)"
msgstr "不要转移(删除所有文档)"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Done"
msgstr "完成"
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx
#: apps/remix/app/components/general/document/document-certificate-qr-view.tsx
@@ -5108,7 +5172,7 @@ msgstr "空字段"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Empty quota means unlimited, 0 blocks the resource. Rate limit windows accept values like 5m, 1h or 24h."
msgstr ""
msgstr "配额留空表示无限制,填入 0 则会阻止访问该资源。速率限制时间窗口可使用例如 5m、1h 或 24h 这样的值。"
#: apps/remix/app/components/dialogs/team-inherit-member-enable-dialog.tsx
msgid "Enable"
@@ -5231,7 +5295,7 @@ msgstr "输入"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a max request count greater than 0"
msgstr ""
msgstr "请输入大于 0 的最大请求次数"
#: apps/remix/app/components/dialogs/folder-create-dialog.tsx
msgid "Enter a name for your new folder. Folders help you organise your items."
@@ -5243,7 +5307,7 @@ msgstr "输入新标题"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Enter a window, e.g. 5m"
msgstr ""
msgstr "请输入一个时间窗口,例如 5m"
#: apps/remix/app/components/forms/subscription-claim-form.tsx
msgid "Enter claim name"
@@ -5505,7 +5569,7 @@ msgstr "所有人都已签署!您将收到一份已签署文档的电子邮件
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Exceeded"
msgstr ""
msgstr "已超出"
#: apps/remix/app/components/dialogs/passkey-create-dialog.tsx
msgid "Exceeded timeout"
@@ -5521,6 +5585,7 @@ msgstr "过期设置"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._index.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expired"
msgstr "已过期"
@@ -5530,6 +5595,7 @@ msgid "Expired"
msgstr "已过期"
#: apps/remix/app/components/general/admin-license-card.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires"
msgstr "到期时间"
@@ -5538,16 +5604,15 @@ msgstr "到期时间"
msgid "Expires {0}"
msgstr "于 {0} 到期"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Expires in"
msgstr "过期时间"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "将在 {0} 后过期"
#. placeholder {0}: i18n.date(token.expires, DateTime.DATETIME_FULL)
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Expires on {0}"
msgstr "将于 {0} 到期"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx
#: packages/ui/primitives/document-flow/add-settings.tsx
#: packages/ui/primitives/template-flow/add-template-settings.tsx
@@ -6243,10 +6308,6 @@ msgstr "我是此文档的所有者"
msgid "I understand that I am providing my credentials to a 3rd party service configured by this organisation"
msgstr "我理解我正在向此组织配置的第三方服务提供我的凭证"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "I'm sure! Delete it"
msgstr "我确定!删除"
#: apps/remix/app/components/tables/admin-claims-table.tsx
#: apps/remix/app/components/tables/admin-dashboard-users-table.tsx
#: apps/remix/app/components/tables/admin-document-recipient-item-table.tsx
@@ -6345,10 +6406,18 @@ msgstr "包含发送方详情"
msgid "Include signing certificate"
msgstr "包含签名证书"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the audit logs in the document"
msgstr "在文档中包含审计日志"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Audit Logs in the Document"
msgstr "在文档中包含审计日志"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Include the signing certificate in the document"
msgstr "在文档中包含签名证书"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Include the Signing Certificate in the Document"
msgstr "在文档中包含签署证书"
@@ -6429,6 +6498,11 @@ msgstr "实例统计"
msgid "Invalid code. Please try again."
msgstr "验证码无效。请重试。"
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Invalid direct link template"
msgstr "无效的直接链接模板"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "Invalid domains"
msgstr "无效的域名"
@@ -6772,7 +6846,7 @@ msgstr "想拥有属于自己的公开协议页面吗?"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Limit reached"
msgstr ""
msgstr "已达到限制"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Limits"
@@ -7081,7 +7155,7 @@ msgstr "最大值"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Max requests"
msgstr ""
msgstr "最大请求数"
#: 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."
@@ -7176,6 +7250,11 @@ msgstr "缺少许可证 - 您的 Documenso 实例正在使用需要许可证的
msgid "Missing Recipients"
msgstr "缺少收件人"
#: apps/remix/app/utils/toast-error-messages.ts
#: apps/remix/app/utils/toast-error-messages.ts
msgid "Missing signature fields"
msgstr "缺少签名字段"
#: apps/remix/app/components/general/document/document-page-view-recipients.tsx
#: apps/remix/app/components/general/template/template-page-view-recipients.tsx
msgid "Modify recipients"
@@ -7204,11 +7283,11 @@ msgstr "月活跃用户:至少有一份文档被完成的用户"
#: apps/remix/app/components/general/claim-limit-fields.tsx
msgid "Monthly quota"
msgstr ""
msgstr "每月配额"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Monthly usage"
msgstr ""
msgstr "每月使用量"
#: apps/remix/app/components/dialogs/envelopes-bulk-move-dialog.tsx
#: apps/remix/app/components/dialogs/folder-move-dialog.tsx
@@ -7267,6 +7346,7 @@ msgstr "N/A"
#: apps/remix/app/components/dialogs/team-email-add-dialog.tsx
#: apps/remix/app/components/dialogs/team-email-update-dialog.tsx
#: apps/remix/app/components/dialogs/template-use-dialog.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/embed/authoring/configure-document-recipients.tsx
#: apps/remix/app/components/forms/email-transport-form.tsx
@@ -7287,6 +7367,7 @@ msgstr "N/A"
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/admin+/users.$id.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains.$id.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
#: packages/lib/utils/fields.ts
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/document-flow/add-signers.tsx
@@ -7308,7 +7389,7 @@ msgstr "姓名设置"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Near limit"
msgstr ""
msgstr "接近上限"
#: apps/remix/app/routes/_recipient+/sign.$token+/complete.tsx
msgid "Need to sign documents?"
@@ -7326,14 +7407,12 @@ msgstr "需要签署"
msgid "Needs to view"
msgstr "需要查看"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
#: apps/remix/app/components/tables/settings-security-passkey-table.tsx
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Never"
msgstr "从不"
#: apps/remix/app/components/forms/token.tsx
msgid "Never expire"
msgstr "永不过期"
#: packages/ui/components/document/expiration-period-picker.tsx
msgid "Never expires"
msgstr "永不过期"
@@ -7451,7 +7530,7 @@ msgstr "未找到群组"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "No inherited claim"
msgstr ""
msgstr "无继承的声明"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
@@ -7669,14 +7748,15 @@ msgstr "开启"
msgid "On this page, you can create a new webhook."
msgstr "在此页面,你可以创建新的 Webhook。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "On this page, you can create and manage API tokens. See our <0>Documentation</0> for more information."
msgstr "在此页面,您可以创建和管理 API 令牌。更多信息请参阅我们的<0>文档</0>。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx
msgid "On this page, you can create new Webhooks and manage the existing ones."
msgstr "在此页面,你可以创建新的 Webhook 并管理现有的 Webhook。"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Once confirmed, the following will be reset:"
msgstr "确认后,将重置以下内容:"
#: apps/remix/app/components/dialogs/envelope-cancel-dialog.tsx
#: apps/remix/app/components/dialogs/envelope-delete-dialog.tsx
#: apps/remix/app/components/dialogs/envelopes-bulk-cancel-dialog.tsx
@@ -7963,7 +8043,7 @@ msgstr "否则将把文档创建为草稿。"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Overlapping fields detected"
msgstr ""
msgstr "检测到字段重叠"
#: apps/remix/app/components/forms/document-preferences-form.tsx
#: apps/remix/app/components/forms/email-preferences-form.tsx
@@ -8171,7 +8251,7 @@ msgstr "待处理起始时间"
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "People with access to this organisation."
msgstr ""
msgstr "有权访问此组织的人员。"
#: apps/remix/app/components/dialogs/organisation-create-dialog.tsx
#: apps/remix/app/components/general/billing-plans.tsx
@@ -8327,10 +8407,6 @@ msgstr "请联系站点所有者以获取进一步帮助。"
msgid "Please don't close this tab. The signing provider is finalising your signature."
msgstr "请不要关闭此标签页。签名服务提供商正在完成您的签名。"
#: apps/remix/app/components/forms/token.tsx
msgid "Please enter a meaningful name for your token. This will help you identify it later."
msgstr "请输入一个有意义的令牌名称,以便日后识别。"
#: apps/remix/app/components/dialogs/sign-field-number-dialog.tsx
msgid "Please enter a number"
msgstr "请输入一个数字"
@@ -8876,6 +8952,10 @@ msgstr "收件人的签名服务提供商身份验证失败"
msgid "Recipients"
msgstr "收件人"
#: apps/remix/app/components/general/envelope-editor/envelope-editor-invalid-direct-template-alert.tsx
msgid "Recipients cannot use this direct link template because the following signers are missing a signature field"
msgstr "收件人无法使用此直接链接模板,因为以下签署人缺少签名字段"
#: apps/remix/app/routes/_authenticated+/admin+/stats.tsx
msgid "Recipients metrics"
msgstr "收件人仍将保留其文档副本"
@@ -8943,7 +9023,7 @@ msgstr "正在重定向"
#. placeholder {0}: oidcProviderLabel || 'OIDC'
#: apps/remix/app/routes/_unauthenticated+/signin.tsx
msgid "Redirecting to {0}..."
msgstr ""
msgstr "正在重定向到 {0}…"
#: apps/remix/app/components/forms/signup.tsx
#: apps/remix/app/components/general/claim-account.tsx
@@ -9075,7 +9155,7 @@ msgstr "移除组织成员"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Remove rate limit"
msgstr ""
msgstr "移除速率限制"
#: apps/remix/app/components/dialogs/ai-recipient-detection-dialog.tsx
msgid "Remove recipient"
@@ -9234,6 +9314,14 @@ msgstr "重置"
msgid "Reset 2FA"
msgstr "重置双重认证"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "Reset branding preferences"
msgstr "重置品牌偏好设置"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset document preferences"
msgstr "重置文档首选项"
#: apps/remix/app/components/forms/forgot-password.tsx
msgid "Reset email sent"
msgstr "重置邮件已发送"
@@ -9251,6 +9339,13 @@ msgstr "重置密码"
msgid "Reset the users two factor authentication. This action is irreversible and will disable two factor authentication for the user."
msgstr "重置该用户的双重身份验证。此操作不可撤销,并将为该用户禁用双重身份验证。"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Reset to defaults"
msgstr "重置为默认值"
#: apps/remix/app/components/dialogs/admin-user-reset-two-factor-dialog.tsx
msgid "Reset Two Factor Authentication"
msgstr "重置双重身份验证"
@@ -9269,7 +9364,7 @@ msgstr "解决付款问题"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Resource blocked"
msgstr ""
msgstr "资源已被阻止"
#: apps/remix/app/components/general/webhook-logs-sheet.tsx
msgid "Response"
@@ -9794,6 +9889,10 @@ msgstr "发送信封"
msgid "Send first reminder after"
msgstr "在以下时间后发送首个提醒"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "Send on behalf of team"
msgstr "以团队名义发送"
#: apps/remix/app/components/forms/document-preferences-form.tsx
msgid "Send on Behalf of Team"
msgstr "以团队名义发送"
@@ -9849,7 +9948,7 @@ msgstr "已发送"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Sent this period"
msgstr ""
msgstr "本周期已发送"
#: apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx
msgid "Session revoked"
@@ -10261,7 +10360,7 @@ msgstr "跳过"
#: apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
#: apps/remix/app/components/general/envelope-editor/envelope-editor-fields-page.tsx
msgid "Some fields are placed on top of each other. This may complicate the signing process or cause fields to not work as expected."
msgstr ""
msgstr "有些字段彼此重叠放置。这可能会使签署流程变得复杂,或导致字段无法按预期工作。"
#: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx
msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding."
@@ -10384,7 +10483,7 @@ msgstr "出错了!"
msgid "Something went wrong."
msgstr "发生了一些错误。"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Something went wrong. Please try again later."
msgstr "出现了一些问题。请稍后重试。"
@@ -10849,7 +10948,7 @@ msgstr "团队帮助您组织工作并与他人协作。创建您的第一个团
#: apps/remix/app/routes/_authenticated+/admin+/organisations.$id.tsx
msgid "Teams that belong to this organisation."
msgstr ""
msgstr "属于此组织的团队。"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Teams that this organisation group is currently assigned to"
@@ -11104,6 +11203,10 @@ msgstr "此邮箱地址的显示名称"
msgid "The document could not be created because of missing or invalid information. Please review the template's recipients and fields."
msgstr "由于信息缺失或无效,无法创建该文档。请检查模板的收件人和字段。"
#: apps/remix/app/utils/toast-error-messages.ts
msgid "The document could not be sent because some signers do not have a signature field. Please edit the template and add a signature field for each signer."
msgstr "无法发送该文档,因为部分签署人没有签名字段。请编辑模板,并为每位签署人添加签名字段。"
#: apps/remix/app/components/dialogs/admin-document-delete-dialog.tsx
msgid "The Document has been deleted successfully."
msgstr "文档已成功删除。"
@@ -11434,10 +11537,6 @@ msgstr "测试 Webhook 已成功发送到您的端点。"
msgid "The token is invalid or has expired."
msgstr "令牌无效或已过期。"
#: apps/remix/app/components/forms/token.tsx
msgid "The token was copied to your clipboard."
msgstr "令牌已复制到剪贴板。"
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx
msgid "The token was deleted successfully."
msgstr "令牌已成功删除。"
@@ -11560,6 +11659,14 @@ msgstr "根据文档大小,这可能需要一到两分钟。"
msgid "This claim is locked and cannot be deleted."
msgstr "此声明已锁定,无法删除。"
#: apps/remix/app/utils/toast-error-messages.ts
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned."
msgstr "此直接链接模板无法使用,因为一个或多个签署人未分配签名字段。"
#: apps/remix/app/components/general/direct-template/direct-template-invalid-page.tsx
msgid "This direct link template cannot be used because one or more signers do not have a signature field assigned. Please contact the sender to update the template."
msgstr "此直接链接模板无法使用,因为一个或多个签署人未分配签名字段。请联系发送方更新模板。"
#: packages/email/template-components/template-document-super-delete.tsx
msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support."
msgstr "此文档无法恢复。若您希望对未来文档的删除原因提出异议,请联系支持。"
@@ -11830,6 +11937,14 @@ msgstr "这将只回溯设置为 true 的功能标记,初始声明中被禁用
msgid "This will remove all emails associated with this email domain"
msgstr "这将移除此邮箱域名下的所有邮箱"
#: apps/remix/app/components/dialogs/branding-preferences-reset-dialog.tsx
msgid "This will reset all branding preferences to their default values and save the changes immediately."
msgstr "此操作将把所有品牌偏好设置重置为默认值,并立即保存更改。"
#: apps/remix/app/components/dialogs/document-preferences-reset-dialog.tsx
msgid "This will reset all document preferences to their default values and save the changes immediately."
msgstr "这将把所有文档首选项重置为其默认值,并立即保存更改。"
#: apps/remix/app/components/dialogs/session-logout-all-dialog.tsx
msgid "This will sign you out of all other devices. You will need to sign in again on those devices to continue using your account."
msgstr "这将使您在所有其他设备上退出登录。您需要在那些设备上重新登录才能继续使用账户。"
@@ -12025,11 +12140,11 @@ msgstr "切换开关以将你的资料对公众可见。"
msgid "Token"
msgstr "令牌"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token copied to clipboard"
msgstr "令牌已复制到剪贴板"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Token created"
msgstr "令牌已创建"
@@ -12037,22 +12152,10 @@ msgstr "令牌已创建"
msgid "Token deleted"
msgstr "令牌已删除"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Token doesn't have an expiration date"
msgstr "令牌没有过期日期"
#: apps/remix/app/components/forms/token.tsx
msgid "Token expiration date"
msgstr "令牌过期日期"
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Token has expired. Please try again."
msgstr "令牌已过期。请重试。"
#: apps/remix/app/components/forms/token.tsx
msgid "Token name"
msgstr "令牌名称"
#: apps/remix/app/routes/embed+/v2+/authoring+/_layout.tsx
msgid "Token Not Found"
msgstr "未找到令牌"
@@ -12210,10 +12313,6 @@ msgstr "当前无法更改语言。请稍后再试。"
msgid "Unable to copy recovery code"
msgstr "无法复制恢复代码"
#: apps/remix/app/components/forms/token.tsx
msgid "Unable to copy token"
msgstr "无法复制令牌"
#: apps/remix/app/components/dialogs/template-direct-link-dialog.tsx
msgid "Unable to create direct template access. Please try again later."
msgstr "无法创建直接模板访问。请稍后再试。"
@@ -12347,7 +12446,7 @@ msgstr "取消固定"
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "Unsaved changes"
msgstr ""
msgstr "未保存的更改"
#: apps/remix/app/routes/_authenticated+/admin+/_layout.tsx
#: apps/remix/app/routes/_authenticated+/admin+/unsealed-documents._index.tsx
@@ -12627,11 +12726,15 @@ msgstr "使用"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a duration with a unit, e.g. 5m, 1h, or 24h"
msgstr ""
msgstr "使用带有单位的时长,例如 5m、1h 或 24h"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Use a unique window for each rate limit"
msgstr ""
msgstr "为每个速率限制使用唯一的时间窗口"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Use API tokens to authenticate with the Documenso API."
msgstr "使用 API 令牌对 Documenso API 进行身份验证。"
#: apps/remix/app/components/forms/2fa/disable-authenticator-app-dialog.tsx
#: apps/remix/app/components/forms/signin.tsx
@@ -13274,10 +13377,6 @@ msgstr "我们已发送确认邮件用于验证。"
msgid "We need your signature to sign documents"
msgstr "我们需要您的签名来签署文档"
#: apps/remix/app/components/forms/token.tsx
msgid "We were unable to copy the token to your clipboard. Please try again."
msgstr "无法将令牌复制到剪贴板。请重试。"
#: apps/remix/app/components/forms/2fa/recovery-code-list.tsx
msgid "We were unable to copy your recovery code to your clipboard. Please try again."
msgstr "无法将恢复代码复制到剪贴板。请重试。"
@@ -13536,7 +13635,7 @@ msgstr "宽度:"
#: apps/remix/app/components/general/rate-limit-array-input.tsx
msgid "Window"
msgstr ""
msgstr "时间窗口"
#: apps/remix/app/routes/_unauthenticated+/articles.signature-disclosure.tsx
msgid "Withdrawing Consent"
@@ -13544,7 +13643,7 @@ msgstr "撤回同意"
#: apps/remix/app/components/general/organisation-usage-panel.tsx
msgid "Within limit"
msgstr ""
msgstr "在限制范围内"
#: apps/remix/app/components/forms/public-profile-form.tsx
msgid "Write a description to display on your public profile"
@@ -13928,7 +14027,7 @@ msgstr "你删除了一个标题为 {0} 的信封条目"
msgid "You deleted the document"
msgstr "你删除了此文档"
#: apps/remix/app/components/forms/token.tsx
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "You do not have permission to create a token for this team."
msgstr "您没有权限为此团队创建令牌。"
@@ -13987,6 +14086,10 @@ msgstr "您已拒绝来自 <0>{0}</0> 的加入其组织的邀请。"
msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it."
msgstr "您已发起文档 {0},需要您对其进行 {recipientActionVerb}。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "You have no API tokens yet. Your tokens will be shown here once you create them."
msgstr "你还没有任何 API 令牌。创建后,你的令牌会显示在这里。"
#: 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."
msgstr "你还没有创建任何 Webhook。创建后,它们会显示在这里。"
@@ -14090,7 +14193,7 @@ msgstr "在完成签署流程之前,你有权随时撤回对使用电子签名
#: apps/remix/app/components/forms/form-sticky-save-bar.tsx
msgid "You have unsaved changes"
msgstr ""
msgstr "你有未保存的更改"
#: apps/remix/app/components/dialogs/team-member-update-dialog.tsx
msgid "You have updated {memberName}."
@@ -14546,14 +14649,14 @@ msgstr "您的信封已成功分发。"
msgid "Your envelope has been resent successfully."
msgstr "您的信封已成功重新发送。"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your existing tokens"
msgstr "你现有的令牌"
#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx
msgid "Your Name"
msgstr "您的姓名"
#: apps/remix/app/components/dialogs/token-create-dialog.tsx
msgid "Your new API token"
msgstr "你的新 API 令牌"
#: apps/remix/app/components/forms/password.tsx
#: apps/remix/app/components/forms/reset-password.tsx
msgid "Your new password cannot be the same as your old password."
@@ -14748,14 +14851,6 @@ msgstr "你的模板已成功保存。"
msgid "Your token has expired!"
msgstr "你的令牌已过期!"
#: apps/remix/app/components/forms/token.tsx
msgid "Your token was created successfully! Make sure to copy it because you won't be able to see it again!"
msgstr "你的令牌已创建成功!请务必立即复制,因为之后将无法再次查看!"
#: apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx
msgid "Your tokens will be shown here once you create them."
msgstr "创建令牌后将会显示在这里。"
#: packages/lib/server-only/2fa/email/send-2fa-token-email.ts
msgid "Your two-factor authentication code"
msgstr "您的双重身份验证码"
@@ -14771,3 +14866,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"
+3 -3
View File
@@ -361,9 +361,9 @@ export const seedAlignmentTestDocument = async ({
const { id, recipients, envelopeItems } = createdEnvelope;
if (isDirectTemplate) {
const directTemplateRecpient = recipients.find((recipient) => recipient.email === DIRECT_TEMPLATE_RECIPIENT_EMAIL);
const directTemplateRecipient = recipients.find((recipient) => recipient.email === DIRECT_TEMPLATE_RECIPIENT_EMAIL);
if (!directTemplateRecpient) {
if (!directTemplateRecipient) {
throw new Error('Need to create a direct template recipient');
}
@@ -372,7 +372,7 @@ export const seedAlignmentTestDocument = async ({
envelopeId: id,
enabled: true,
token: directTemplateToken ?? Math.random().toString(),
directTemplateRecipientId: directTemplateRecpient.id,
directTemplateRecipientId: directTemplateRecipient.id,
},
});
}
+35 -3
View File
@@ -6,6 +6,7 @@ import {
DIRECT_TEMPLATE_RECIPIENT_NAME,
} from '@documenso/lib/constants/direct-templates';
import { incrementTemplateId } from '@documenso/lib/server-only/envelope/increment-id';
import { FIELD_SIGNATURE_META_DEFAULT_VALUES } from '@documenso/lib/types/field-meta';
import { SignatureLevel } from '@documenso/lib/types/signature-level';
import { prefixedId } from '@documenso/lib/universal/id';
@@ -15,6 +16,7 @@ import {
DocumentDataType,
DocumentSource,
EnvelopeType,
FieldType,
ReadStatus,
RecipientRole,
SendStatus,
@@ -29,6 +31,11 @@ type SeedTemplateOptions = {
teamId: number;
internalVersion?: 1 | 2;
createTemplateOptions?: Partial<Prisma.EnvelopeUncheckedCreateInput>;
/**
* Only used by seedDirectTemplate. Creates a signature field for the direct
* recipient so the seeded direct template is valid. Defaults to true.
*/
createDirectRecipientSignatureField?: boolean;
};
type CreateTemplateOptions = {
@@ -198,11 +205,11 @@ export const seedDirectTemplate = async (options: SeedTemplateOptions) => {
},
});
const directTemplateRecpient = template.recipients.find(
const directTemplateRecipient = template.recipients.find(
(recipient) => recipient.email === DIRECT_TEMPLATE_RECIPIENT_EMAIL,
);
if (!directTemplateRecpient) {
if (!directTemplateRecipient) {
throw new Error('Need to create a direct template recipient');
}
@@ -211,10 +218,35 @@ export const seedDirectTemplate = async (options: SeedTemplateOptions) => {
envelopeId: template.id,
enabled: true,
token: Math.random().toString(),
directTemplateRecipientId: directTemplateRecpient.id,
directTemplateRecipientId: directTemplateRecipient.id,
},
});
const { createDirectRecipientSignatureField = true } = options;
if (createDirectRecipientSignatureField) {
const envelopeItem = await prisma.envelopeItem.findFirstOrThrow({
where: { envelopeId: template.id },
});
await prisma.field.create({
data: {
envelopeId: template.id,
envelopeItemId: envelopeItem.id,
recipientId: directTemplateRecipient.id,
type: FieldType.SIGNATURE,
page: 1,
positionX: 5,
positionY: 10,
width: 20,
height: 5,
customText: '',
inserted: false,
fieldMeta: FIELD_SIGNATURE_META_DEFAULT_VALUES,
},
});
}
return await prisma.envelope.findFirstOrThrow({
where: {
id: template.id,
@@ -1,15 +0,0 @@
import { adminGlobalSearch } from '@documenso/lib/server-only/admin/admin-global-search';
import { adminProcedure } from '../trpc';
import { ZAdminSearchRequestSchema, ZAdminSearchResponseSchema } from './admin-search.types';
export const adminSearchRoute = adminProcedure
.input(ZAdminSearchRequestSchema)
.output(ZAdminSearchResponseSchema)
.query(async ({ input }) => {
const { query } = input;
const groups = await adminGlobalSearch({ query });
return { groups };
});
@@ -1,37 +0,0 @@
import { z } from 'zod';
export const ZAdminSearchResultTypeSchema = z.enum([
'document',
'user',
'organisation',
'team',
'recipient',
'subscription',
]);
export const ZAdminSearchResultSchema = z.object({
label: z.string(),
sublabel: z.string().optional(),
path: z.string(),
value: z.string(),
});
export const ADMIN_SEARCH_MAX_QUERY_LENGTH = 100;
export const ZAdminSearchRequestSchema = z.object({
query: z.string().trim().min(1).max(ADMIN_SEARCH_MAX_QUERY_LENGTH),
});
export const ZAdminSearchResponseSchema = z.object({
groups: z.array(
z.object({
type: ZAdminSearchResultTypeSchema,
results: ZAdminSearchResultSchema.array(),
}),
),
});
export type TAdminSearchResultType = z.infer<typeof ZAdminSearchResultTypeSchema>;
export type TAdminSearchResult = z.infer<typeof ZAdminSearchResultSchema>;
export type TAdminSearchRequest = z.infer<typeof ZAdminSearchRequestSchema>;
export type TAdminSearchResponse = z.infer<typeof ZAdminSearchResponseSchema>;
@@ -1,5 +1,4 @@
import { router } from '../trpc';
import { adminSearchRoute } from './admin-search';
import { createAdminOrganisationRoute } from './create-admin-organisation';
import { createStripeCustomerRoute } from './create-stripe-customer';
import { createSubscriptionClaimRoute } from './create-subscription-claim';
@@ -119,6 +118,5 @@ export const adminRouter = router({
teamMember: {
delete: deleteAdminTeamMemberRoute,
},
search: adminSearchRoute,
updateSiteSetting: updateSiteSettingRoute,
});