mirror of
https://github.com/documenso/documenso.git
synced 2026-07-21 07:23:37 +10:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66ba94d2ae | |||
| cc5ef3df16 | |||
| 4b72e7d546 | |||
| ba0dead96f | |||
| 40472bc26c |
@@ -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 && (
|
||||
|
||||
+55
@@ -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,
|
||||
};
|
||||
};
|
||||
@@ -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
@@ -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);
|
||||
});
|
||||
@@ -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
@@ -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 "Standardeinstellungen, die auf diese Organisation angewendet werden."
|
||||
msgid "Default settings applied to this team. Inherited values come from the organisation."
|
||||
msgstr "Standardeinstellungen, 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 "Dokumenteneigentum 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
@@ -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
@@ -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 d’IA"
|
||||
@@ -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 d’arrière-plan, d’avant-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 l’entreprise pour l’image 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 l’image de marque"
|
||||
@@ -2544,9 +2555,11 @@ msgstr "Vous ne trouvez pas quelqu’un ?"
|
||||
#: 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 quelqu’un ?"
|
||||
#: 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 l’ID 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 d’API. Consultez notre <0>documentation</0> pour plus d’informations."
|
||||
|
||||
#: 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 d’API"
|
||||
|
||||
#: 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 d’activation de l’image 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 l’enregistrement. 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 l’enregistrement."
|
||||
@@ -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 l’enveloppe par défaut"
|
||||
|
||||
#: apps/remix/app/components/forms/document-preferences-form.tsx
|
||||
msgid "Default Envelope Expiration"
|
||||
msgstr "Expiration par défaut de l’enveloppe"
|
||||
@@ -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 l’organisation."
|
||||
|
||||
#: 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 l’expé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 d’audit 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 "N’expire 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 "L’authentification 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 n’ont 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 l’organisation"
|
||||
|
||||
#: 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 l’image 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 l’enveloppe"
|
||||
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 n’a pas pu être envoyé, car certains signataires n’ont 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 n’ont 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 n’ont pas de champ de signature attribué. Veuillez contacter l’expé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 l’image 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 d’API pour vous authentifier auprès de l’API 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 n’avez pas l’autorisation 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 n’avez pas encore de tokens d’API. 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 d’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 "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
@@ -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 dall’organizzazione."
|
||||
|
||||
#: 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 l’altro. 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 un’unità, 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 l’API 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
@@ -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
@@ -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
@@ -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 "Merkkleuren, 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 "Brandingvoorkeuren 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 brandingvoorkeuren 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"
|
||||
|
||||
|
||||
+461
-365
File diff suppressed because it is too large
Load Diff
+213
-117
@@ -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"
|
||||
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user