feat: signing volume (#1358)

adds a signing volume and leaderboard section to the admin panel
This commit is contained in:
Ephraim Duncan
2024-12-03 00:27:22 +00:00
committed by GitHub
parent 9e8d0ac906
commit bdd33bd335
15 changed files with 685 additions and 61 deletions

View File

@ -0,0 +1,169 @@
'use client';
import { useEffect, useMemo, useState, useTransition } from 'react';
import { msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { ChevronDownIcon as CaretSortIcon, Loader } from 'lucide-react';
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params';
import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table';
import { DataTable } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
import { Input } from '@documenso/ui/primitives/input';
export type SigningVolume = {
id: number;
name: string;
signingVolume: number;
createdAt: Date;
planId: string;
};
type LeaderboardTableProps = {
signingVolume: SigningVolume[];
totalPages: number;
perPage: number;
page: number;
sortBy: 'name' | 'createdAt' | 'signingVolume';
sortOrder: 'asc' | 'desc';
};
export const LeaderboardTable = ({
signingVolume,
totalPages,
perPage,
page,
sortBy,
sortOrder,
}: LeaderboardTableProps) => {
const { _, i18n } = useLingui();
const [isPending, startTransition] = useTransition();
const updateSearchParams = useUpdateSearchParams();
const [searchString, setSearchString] = useState('');
const debouncedSearchString = useDebouncedValue(searchString, 1000);
const columns = useMemo(() => {
return [
{
header: () => (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('name')}
>
{_(msg`Name`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
</div>
),
accessorKey: 'name',
cell: ({ row }) => {
return (
<div>
<a
className="text-primary underline"
href={`https://dashboard.stripe.com/subscriptions/${row.original.planId}`}
target="_blank"
>
{row.getValue('name')}
</a>
</div>
);
},
size: 250,
},
{
header: () => (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('signingVolume')}
>
{_(msg`Signing Volume`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
</div>
),
accessorKey: 'signingVolume',
cell: ({ row }) => <div>{Number(row.getValue('signingVolume'))}</div>,
},
{
header: () => {
return (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('createdAt')}
>
{_(msg`Created`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
</div>
);
},
accessorKey: 'createdAt',
cell: ({ row }) => i18n.date(row.original.createdAt),
},
] satisfies DataTableColumnDef<SigningVolume>[];
}, [sortOrder]);
useEffect(() => {
startTransition(() => {
updateSearchParams({
search: debouncedSearchString,
page: 1,
perPage,
sortBy,
sortOrder,
});
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [debouncedSearchString]);
const onPaginationChange = (page: number, perPage: number) => {
startTransition(() => {
updateSearchParams({
page,
perPage,
});
});
};
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setSearchString(e.target.value);
};
const handleColumnSort = (column: 'name' | 'createdAt' | 'signingVolume') => {
startTransition(() => {
updateSearchParams({
sortBy: column,
sortOrder: sortOrder === 'asc' ? 'desc' : 'asc',
});
});
};
return (
<div className="relative">
<Input
className="my-6 flex flex-row gap-4"
type="text"
placeholder={_(msg`Search by name or email`)}
value={searchString}
onChange={handleChange}
/>
<DataTable
columns={columns}
data={signingVolume}
perPage={perPage}
currentPage={page}
totalPages={totalPages}
onPaginationChange={onPaginationChange}
>
{(table) => <DataTablePagination additionalInformation="VisibleCount" table={table} />}
</DataTable>
{isPending && (
<div className="absolute inset-0 flex items-center justify-center bg-white/50">
<Loader className="h-8 w-8 animate-spin text-gray-500" />
</div>
)}
</div>
);
};

View File

@ -0,0 +1,25 @@
'use server';
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin';
import { getSigningVolume } from '@documenso/lib/server-only/admin/get-signing-volume';
type SearchOptions = {
search: string;
page: number;
perPage: number;
sortBy: 'name' | 'createdAt' | 'signingVolume';
sortOrder: 'asc' | 'desc';
};
export async function search({ search, page, perPage, sortBy, sortOrder }: SearchOptions) {
const { user } = await getRequiredServerComponentSession();
if (!isAdmin(user)) {
throw new Error('Unauthorized');
}
const results = await getSigningVolume({ search, page, perPage, sortBy, sortOrder });
return results;
}

View File

@ -0,0 +1,60 @@
import { Trans } from '@lingui/macro';
import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server';
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin';
import { LeaderboardTable } from './data-table-leaderboard';
import { search } from './fetch-leaderboard.actions';
type AdminLeaderboardProps = {
searchParams?: {
search?: string;
page?: number;
perPage?: number;
sortBy?: 'name' | 'createdAt' | 'signingVolume';
sortOrder?: 'asc' | 'desc';
};
};
export default async function Leaderboard({ searchParams = {} }: AdminLeaderboardProps) {
await setupI18nSSR();
const { user } = await getRequiredServerComponentSession();
if (!isAdmin(user)) {
throw new Error('Unauthorized');
}
const page = Number(searchParams.page) || 1;
const perPage = Number(searchParams.perPage) || 10;
const searchString = searchParams.search || '';
const sortBy = searchParams.sortBy || 'signingVolume';
const sortOrder = searchParams.sortOrder || 'desc';
const { leaderboard: signingVolume, totalPages } = await search({
search: searchString,
page,
perPage,
sortBy,
sortOrder,
});
return (
<div>
<h2 className="text-4xl font-semibold">
<Trans>Signing Volume</Trans>
</h2>
<div className="mt-8">
<LeaderboardTable
signingVolume={signingVolume}
totalPages={totalPages}
page={page}
perPage={perPage}
sortBy={sortBy}
sortOrder={sortOrder}
/>
</div>
</div>
);
}

View File

@ -6,7 +6,7 @@ import Link from 'next/link';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { Trans } from '@lingui/macro'; import { Trans } from '@lingui/macro';
import { BarChart3, FileStack, Settings, Users, Wallet2 } from 'lucide-react'; import { BarChart3, FileStack, Settings, Trophy, Users, Wallet2 } from 'lucide-react';
import { cn } from '@documenso/ui/lib/utils'; import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button'; import { Button } from '@documenso/ui/primitives/button';
@ -80,6 +80,20 @@ export const AdminNav = ({ className, ...props }: AdminNavProps) => {
</Link> </Link>
</Button> </Button>
<Button
variant="ghost"
className={cn(
'justify-start md:w-full',
pathname?.startsWith('/admin/leaderboard') && 'bg-secondary',
)}
asChild
>
<Link href="/admin/leaderboard">
<Trophy className="mr-2 h-5 w-5" />
<Trans>Leaderboard</Trans>
</Link>
</Button>
<Button <Button
variant="ghost" variant="ghost"
className={cn( className={cn(

View File

@ -0,0 +1,148 @@
import { prisma } from '@documenso/prisma';
import { Prisma } from '@documenso/prisma/client';
export type SigningVolume = {
id: number;
name: string;
signingVolume: number;
createdAt: Date;
planId: string;
};
export type GetSigningVolumeOptions = {
search?: string;
page?: number;
perPage?: number;
sortBy?: 'name' | 'createdAt' | 'signingVolume';
sortOrder?: 'asc' | 'desc';
};
export async function getSigningVolume({
search = '',
page = 1,
perPage = 10,
sortBy = 'signingVolume',
sortOrder = 'desc',
}: GetSigningVolumeOptions) {
const whereClause = Prisma.validator<Prisma.SubscriptionWhereInput>()({
status: 'ACTIVE',
OR: [
{
User: {
OR: [
{ name: { contains: search, mode: 'insensitive' } },
{ email: { contains: search, mode: 'insensitive' } },
],
},
},
{
team: {
name: { contains: search, mode: 'insensitive' },
},
},
],
});
const orderByClause = getOrderByClause({ sortBy, sortOrder });
const [subscriptions, totalCount] = await Promise.all([
prisma.subscription.findMany({
where: whereClause,
include: {
User: {
include: {
Document: {
where: {
status: 'COMPLETED',
deletedAt: null,
},
},
},
},
team: {
include: {
document: {
where: {
status: 'COMPLETED',
deletedAt: null,
},
},
},
},
},
orderBy: orderByClause,
skip: Math.max(page - 1, 0) * perPage,
take: perPage,
}),
prisma.subscription.count({
where: whereClause,
}),
]);
const leaderboardWithVolume: SigningVolume[] = subscriptions.map((subscription) => {
const name =
subscription.User?.name || subscription.team?.name || subscription.User?.email || 'Unknown';
const userSignedDocs = subscription.User?.Document?.length || 0;
const teamSignedDocs = subscription.team?.document?.length || 0;
return {
id: subscription.id,
name,
signingVolume: userSignedDocs + teamSignedDocs,
createdAt: subscription.createdAt,
planId: subscription.planId,
};
});
return {
leaderboard: leaderboardWithVolume,
totalPages: Math.ceil(totalCount / perPage),
};
}
function getOrderByClause(options: {
sortBy: string;
sortOrder: 'asc' | 'desc';
}): Prisma.SubscriptionOrderByWithRelationInput | Prisma.SubscriptionOrderByWithRelationInput[] {
const { sortBy, sortOrder } = options;
if (sortBy === 'name') {
return [
{
User: {
name: sortOrder,
},
},
{
team: {
name: sortOrder,
},
},
];
}
if (sortBy === 'createdAt') {
return {
createdAt: sortOrder,
};
}
// Default: sort by signing volume
return [
{
User: {
Document: {
_count: sortOrder,
},
},
},
{
team: {
document: {
_count: sortOrder,
},
},
},
];
}

View File

@ -60,14 +60,19 @@ msgstr "{0} von {1} Zeile(n) ausgewählt."
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136 #: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137 #: packages/lib/server-only/document/resend-document.tsx:137
msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"."
msgstr "{0} hat dich im Namen von {1} eingeladen, das Dokument \"{2}\" {recipientActionVerb}." msgstr ""
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137
#~ msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"."
#~ msgstr "{0} hat dich im Namen von {1} eingeladen, das Dokument \"{2}\" {recipientActionVerb}."
#: packages/email/template-components/template-document-invite.tsx:51 #: packages/email/template-components/template-document-invite.tsx:51
#~ msgid "{0}<0/>\"{documentName}\"" #~ msgid "{0}<0/>\"{documentName}\""
#~ msgstr "{0}<0/>\"{documentName}\"" #~ msgstr "{0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:94 #: packages/email/templates/document-invite.tsx:95
msgid "{inviterName} <0>({inviterEmail})</0>" msgid "{inviterName} <0>({inviterEmail})</0>"
msgstr "{inviterName} <0>({inviterEmail})</0>" msgstr "{inviterName} <0>({inviterEmail})</0>"
@ -87,7 +92,7 @@ msgstr "{inviterName} hat dich eingeladen, {0}<0/>\"{documentName}\""
msgid "{inviterName} has invited you to {action} {documentName}" msgid "{inviterName} has invited you to {action} {documentName}"
msgstr "{inviterName} hat dich eingeladen, {action} {documentName}" msgstr "{inviterName} hat dich eingeladen, {action} {documentName}"
#: packages/email/templates/document-invite.tsx:106 #: packages/email/templates/document-invite.tsx:108
msgid "{inviterName} has invited you to {action} the document \"{documentName}\"." msgid "{inviterName} has invited you to {action} the document \"{documentName}\"."
msgstr "{inviterName} hat Sie eingeladen, das Dokument \"{documentName}\" {action}." msgstr "{inviterName} hat Sie eingeladen, das Dokument \"{documentName}\" {action}."
@ -100,16 +105,24 @@ msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} hat dich aus dem Dokument<0/>\"{documentName}\" entfernt" msgstr "{inviterName} hat dich aus dem Dokument<0/>\"{documentName}\" entfernt"
#: packages/email/template-components/template-document-invite.tsx:63 #: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}" msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {0}"
msgstr "{inviterName} im Namen von {teamName} hat Sie eingeladen, {0}" msgstr ""
#: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}"
msgstr ""
#: packages/email/template-components/template-document-invite.tsx:63
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
#~ msgstr "{inviterName} im Namen von {teamName} hat Sie eingeladen, {0}"
#: packages/email/template-components/template-document-invite.tsx:49 #: packages/email/template-components/template-document-invite.tsx:49
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:45 #: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
msgstr "{inviterName} hat dich im Namen von {teamName} eingeladen, {action} {documentName}" #~ msgstr "{inviterName} hat dich im Namen von {teamName} eingeladen, {action} {documentName}"
#: packages/email/templates/team-join.tsx:67 #: packages/email/templates/team-join.tsx:67
msgid "{memberEmail} joined the following team" msgid "{memberEmail} joined the following team"

File diff suppressed because one or more lines are too long

View File

@ -51,16 +51,16 @@ msgstr "\"{placeholderEmail}\" im Namen von \"{0}\" hat Sie eingeladen, \"Beispi
#~ msgstr "\"{teamUrl}\" hat Sie eingeladen, \"Beispieldokument\" zu unterschreiben." #~ msgstr "\"{teamUrl}\" hat Sie eingeladen, \"Beispieldokument\" zu unterschreiben."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
msgid "({0}) has invited you to approve this document" #~ msgid "({0}) has invited you to approve this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu genehmigen" #~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu genehmigen"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
msgid "({0}) has invited you to sign this document" #~ msgid "({0}) has invited you to sign this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu unterzeichnen" #~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu unterzeichnen"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
msgid "({0}) has invited you to view this document" #~ msgid "({0}) has invited you to view this document"
msgstr "({0}) hat dich eingeladen, dieses Dokument zu betrachten" #~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu betrachten"
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
msgid "{0, plural, one {(1 character over)} other {(# characters over)}}" msgid "{0, plural, one {(1 character over)} other {(# characters over)}}"
@ -1206,6 +1206,7 @@ msgid "Create your account and start using state-of-the-art document signing. Op
msgstr "Erstellen Sie Ihr Konto und beginnen Sie mit dem modernen Dokumentensignieren. Offenes und schönes Signieren liegt in Ihrer Reichweite." msgstr "Erstellen Sie Ihr Konto und beginnen Sie mit dem modernen Dokumentensignieren. Offenes und schönes Signieren liegt in Ihrer Reichweite."
#: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62 #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:96
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35 #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35
#: apps/web/src/app/(dashboard)/documents/data-table.tsx:54 #: apps/web/src/app/(dashboard)/documents/data-table.tsx:54
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65
@ -1245,6 +1246,11 @@ msgstr "Aktuelles Passwort"
msgid "Current plan: {0}" msgid "Current plan: {0}"
msgstr "Aktueller Plan: {0}" msgstr "Aktueller Plan: {0}"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:94
#: apps/web/src/app/(dashboard)/admin/leaderboard/leaderboard-table.tsx:94
#~ msgid "Customer Type"
#~ msgstr ""
#: apps/web/src/app/(dashboard)/settings/billing/billing-plans.tsx:28 #: apps/web/src/app/(dashboard)/settings/billing/billing-plans.tsx:28
msgid "Daily" msgid "Daily"
msgstr "Täglich" msgstr "Täglich"
@ -1988,6 +1994,18 @@ msgstr "Zum Eigentümer gehen"
msgid "Go to your <0>public profile settings</0> to add documents." msgid "Go to your <0>public profile settings</0> to add documents."
msgstr "Gehen Sie zu Ihren <0>öffentlichen Profileinstellungen</0>, um Dokumente hinzuzufügen." msgstr "Gehen Sie zu Ihren <0>öffentlichen Profileinstellungen</0>, um Dokumente hinzuzufügen."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:107
msgid "has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:98
msgid "has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:89
msgid "has invited you to view this document"
msgstr ""
#: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29 #: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29
msgid "Here you can edit your personal details." msgid "Here you can edit your personal details."
msgstr "Hier können Sie Ihre persönlichen Daten bearbeiten." msgstr "Hier können Sie Ihre persönlichen Daten bearbeiten."
@ -2204,6 +2222,10 @@ msgstr "Zuletzt aktualisiert am"
msgid "Last used" msgid "Last used"
msgstr "Zuletzt verwendet" msgstr "Zuletzt verwendet"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93
msgid "Leaderboard"
msgstr ""
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111
#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117 #: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117
msgid "Leave" msgid "Leave"
@ -2411,6 +2433,7 @@ msgid "My templates"
msgstr "Meine Vorlagen" msgstr "Meine Vorlagen"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148 #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:56
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
@ -2524,6 +2547,18 @@ msgstr "Nichts zu tun"
msgid "Number" msgid "Number"
msgstr "Nummer" msgstr "Nummer"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:103
msgid "on behalf of \"{0}\" has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:94
msgid "on behalf of \"{0}\" has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:85
msgid "on behalf of \"{0}\" has invited you to view this document"
msgstr ""
#: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128
msgid "On this page, you can create a new webhook." msgid "On this page, you can create a new webhook."
msgstr "Auf dieser Seite können Sie einen neuen Webhook erstellen." msgstr "Auf dieser Seite können Sie einen neuen Webhook erstellen."
@ -3105,6 +3140,7 @@ msgstr "Suchen"
msgid "Search by document title" msgid "Search by document title"
msgstr "Nach Dokumenttitel suchen" msgstr "Nach Dokumenttitel suchen"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:147
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email" msgid "Search by name or email"
msgstr "Nach Name oder E-Mail suchen" msgstr "Nach Name oder E-Mail suchen"
@ -3369,6 +3405,11 @@ msgstr "Unterzeichnungslinks wurden für dieses Dokument erstellt."
msgid "Signing up..." msgid "Signing up..."
msgstr "Registrierung..." msgstr "Registrierung..."
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:82
#: apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx:46
msgid "Signing Volume"
msgstr ""
#: apps/web/src/app/(profile)/p/[url]/page.tsx:109 #: apps/web/src/app/(profile)/p/[url]/page.tsx:109
msgid "Since {0}" msgid "Since {0}"
msgstr "Seit {0}" msgstr "Seit {0}"
@ -3377,7 +3418,7 @@ msgstr "Seit {0}"
msgid "Site Banner" msgid "Site Banner"
msgstr "Website Banner" msgstr "Website Banner"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93 #: apps/web/src/app/(dashboard)/admin/nav.tsx:107
#: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26 #: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26
msgid "Site Settings" msgid "Site Settings"
msgstr "Website Einstellungen" msgstr "Website Einstellungen"

View File

@ -55,14 +55,19 @@ msgstr "{0} of {1} row(s) selected."
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136 #: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137 #: packages/lib/server-only/document/resend-document.tsx:137
msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"."
msgstr "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." msgstr "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"."
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137
#~ msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"."
#~ msgstr "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"."
#: packages/email/template-components/template-document-invite.tsx:51 #: packages/email/template-components/template-document-invite.tsx:51
#~ msgid "{0}<0/>\"{documentName}\"" #~ msgid "{0}<0/>\"{documentName}\""
#~ msgstr "{0}<0/>\"{documentName}\"" #~ msgstr "{0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:94 #: packages/email/templates/document-invite.tsx:95
msgid "{inviterName} <0>({inviterEmail})</0>" msgid "{inviterName} <0>({inviterEmail})</0>"
msgstr "{inviterName} <0>({inviterEmail})</0>" msgstr "{inviterName} <0>({inviterEmail})</0>"
@ -82,7 +87,7 @@ msgstr "{inviterName} has invited you to {0}<0/>\"{documentName}\""
msgid "{inviterName} has invited you to {action} {documentName}" msgid "{inviterName} has invited you to {action} {documentName}"
msgstr "{inviterName} has invited you to {action} {documentName}" msgstr "{inviterName} has invited you to {action} {documentName}"
#: packages/email/templates/document-invite.tsx:106 #: packages/email/templates/document-invite.tsx:108
msgid "{inviterName} has invited you to {action} the document \"{documentName}\"." msgid "{inviterName} has invited you to {action} the document \"{documentName}\"."
msgstr "{inviterName} has invited you to {action} the document \"{documentName}\"." msgstr "{inviterName} has invited you to {action} the document \"{documentName}\"."
@ -95,16 +100,24 @@ msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} has removed you from the document<0/>\"{documentName}\"" msgstr "{inviterName} has removed you from the document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:63 #: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}" msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {0}"
msgstr "{inviterName} on behalf of {teamName} has invited you to {0}" msgstr "{inviterName} on behalf of \"{teamName}\" has invited you to {0}"
#: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}"
msgstr "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}"
#: packages/email/template-components/template-document-invite.tsx:63
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
#~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}"
#: packages/email/template-components/template-document-invite.tsx:49 #: packages/email/template-components/template-document-invite.tsx:49
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:45 #: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
msgstr "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" #~ msgstr "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
#: packages/email/templates/team-join.tsx:67 #: packages/email/templates/team-join.tsx:67
msgid "{memberEmail} joined the following team" msgid "{memberEmail} joined the following team"

File diff suppressed because one or more lines are too long

View File

@ -46,16 +46,16 @@ msgstr "\"{placeholderEmail}\" on behalf of \"{0}\" has invited you to sign \"ex
#~ msgstr "\"{teamUrl}\" has invited you to sign \"example document\"." #~ msgstr "\"{teamUrl}\" has invited you to sign \"example document\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
msgid "({0}) has invited you to approve this document" #~ msgid "({0}) has invited you to approve this document"
msgstr "({0}) has invited you to approve this document" #~ msgstr "({0}) has invited you to approve this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
msgid "({0}) has invited you to sign this document" #~ msgid "({0}) has invited you to sign this document"
msgstr "({0}) has invited you to sign this document" #~ msgstr "({0}) has invited you to sign this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
msgid "({0}) has invited you to view this document" #~ msgid "({0}) has invited you to view this document"
msgstr "({0}) has invited you to view this document" #~ msgstr "({0}) has invited you to view this document"
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
msgid "{0, plural, one {(1 character over)} other {(# characters over)}}" msgid "{0, plural, one {(1 character over)} other {(# characters over)}}"
@ -1201,6 +1201,7 @@ msgid "Create your account and start using state-of-the-art document signing. Op
msgstr "Create your account and start using state-of-the-art document signing. Open and beautiful signing is within your grasp." msgstr "Create your account and start using state-of-the-art document signing. Open and beautiful signing is within your grasp."
#: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62 #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:96
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35 #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35
#: apps/web/src/app/(dashboard)/documents/data-table.tsx:54 #: apps/web/src/app/(dashboard)/documents/data-table.tsx:54
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65
@ -1240,6 +1241,11 @@ msgstr "Current Password"
msgid "Current plan: {0}" msgid "Current plan: {0}"
msgstr "Current plan: {0}" msgstr "Current plan: {0}"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:94
#: apps/web/src/app/(dashboard)/admin/leaderboard/leaderboard-table.tsx:94
#~ msgid "Customer Type"
#~ msgstr "Customer Type"
#: apps/web/src/app/(dashboard)/settings/billing/billing-plans.tsx:28 #: apps/web/src/app/(dashboard)/settings/billing/billing-plans.tsx:28
msgid "Daily" msgid "Daily"
msgstr "Daily" msgstr "Daily"
@ -1983,6 +1989,18 @@ msgstr "Go to owner"
msgid "Go to your <0>public profile settings</0> to add documents." msgid "Go to your <0>public profile settings</0> to add documents."
msgstr "Go to your <0>public profile settings</0> to add documents." msgstr "Go to your <0>public profile settings</0> to add documents."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:107
msgid "has invited you to approve this document"
msgstr "has invited you to approve this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:98
msgid "has invited you to sign this document"
msgstr "has invited you to sign this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:89
msgid "has invited you to view this document"
msgstr "has invited you to view this document"
#: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29 #: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29
msgid "Here you can edit your personal details." msgid "Here you can edit your personal details."
msgstr "Here you can edit your personal details." msgstr "Here you can edit your personal details."
@ -2199,6 +2217,10 @@ msgstr "Last updated at"
msgid "Last used" msgid "Last used"
msgstr "Last used" msgstr "Last used"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93
msgid "Leaderboard"
msgstr "Leaderboard"
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111
#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117 #: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117
msgid "Leave" msgid "Leave"
@ -2406,6 +2428,7 @@ msgid "My templates"
msgstr "My templates" msgstr "My templates"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148 #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:56
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
@ -2519,6 +2542,18 @@ msgstr "Nothing to do"
msgid "Number" msgid "Number"
msgstr "Number" msgstr "Number"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:103
msgid "on behalf of \"{0}\" has invited you to approve this document"
msgstr "on behalf of \"{0}\" has invited you to approve this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:94
msgid "on behalf of \"{0}\" has invited you to sign this document"
msgstr "on behalf of \"{0}\" has invited you to sign this document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:85
msgid "on behalf of \"{0}\" has invited you to view this document"
msgstr "on behalf of \"{0}\" has invited you to view this document"
#: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128
msgid "On this page, you can create a new webhook." msgid "On this page, you can create a new webhook."
msgstr "On this page, you can create a new webhook." msgstr "On this page, you can create a new webhook."
@ -3100,6 +3135,7 @@ msgstr "Search"
msgid "Search by document title" msgid "Search by document title"
msgstr "Search by document title" msgstr "Search by document title"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:147
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email" msgid "Search by name or email"
msgstr "Search by name or email" msgstr "Search by name or email"
@ -3364,6 +3400,11 @@ msgstr "Signing links have been generated for this document."
msgid "Signing up..." msgid "Signing up..."
msgstr "Signing up..." msgstr "Signing up..."
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:82
#: apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx:46
msgid "Signing Volume"
msgstr "Signing Volume"
#: apps/web/src/app/(profile)/p/[url]/page.tsx:109 #: apps/web/src/app/(profile)/p/[url]/page.tsx:109
msgid "Since {0}" msgid "Since {0}"
msgstr "Since {0}" msgstr "Since {0}"
@ -3372,7 +3413,7 @@ msgstr "Since {0}"
msgid "Site Banner" msgid "Site Banner"
msgstr "Site Banner" msgstr "Site Banner"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93 #: apps/web/src/app/(dashboard)/admin/nav.tsx:107
#: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26 #: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26
msgid "Site Settings" msgid "Site Settings"
msgstr "Site Settings" msgstr "Site Settings"

View File

@ -60,14 +60,19 @@ msgstr "{0} de {1} fila(s) seleccionada."
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136 #: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137 #: packages/lib/server-only/document/resend-document.tsx:137
msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"."
msgstr "{0} en nombre de {1} te ha invitado a {recipientActionVerb} el documento \"{2}\"." msgstr ""
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137
#~ msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"."
#~ msgstr "{0} en nombre de {1} te ha invitado a {recipientActionVerb} el documento \"{2}\"."
#: packages/email/template-components/template-document-invite.tsx:51 #: packages/email/template-components/template-document-invite.tsx:51
#~ msgid "{0}<0/>\"{documentName}\"" #~ msgid "{0}<0/>\"{documentName}\""
#~ msgstr "{0}<0/>\"{documentName}\"" #~ msgstr "{0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:94 #: packages/email/templates/document-invite.tsx:95
msgid "{inviterName} <0>({inviterEmail})</0>" msgid "{inviterName} <0>({inviterEmail})</0>"
msgstr "{inviterName} <0>({inviterEmail})</0>" msgstr "{inviterName} <0>({inviterEmail})</0>"
@ -87,7 +92,7 @@ msgstr "{inviterName} te ha invitado a {0}<0/>\"{documentName}\""
msgid "{inviterName} has invited you to {action} {documentName}" msgid "{inviterName} has invited you to {action} {documentName}"
msgstr "{inviterName} te ha invitado a {action} {documentName}" msgstr "{inviterName} te ha invitado a {action} {documentName}"
#: packages/email/templates/document-invite.tsx:106 #: packages/email/templates/document-invite.tsx:108
msgid "{inviterName} has invited you to {action} the document \"{documentName}\"." msgid "{inviterName} has invited you to {action} the document \"{documentName}\"."
msgstr "{inviterName} te ha invitado a {action} el documento \"{documentName}\"." msgstr "{inviterName} te ha invitado a {action} el documento \"{documentName}\"."
@ -100,16 +105,24 @@ msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} te ha eliminado del documento<0/>\"{documentName}\"" msgstr "{inviterName} te ha eliminado del documento<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:63 #: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}" msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {0}"
msgstr "{inviterName} en nombre de {teamName} te ha invitado a {0}" msgstr ""
#: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}"
msgstr ""
#: packages/email/template-components/template-document-invite.tsx:63
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
#~ msgstr "{inviterName} en nombre de {teamName} te ha invitado a {0}"
#: packages/email/template-components/template-document-invite.tsx:49 #: packages/email/template-components/template-document-invite.tsx:49
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:45 #: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
msgstr "{inviterName} en nombre de {teamName} te ha invitado a {action} {documentName}" #~ msgstr "{inviterName} en nombre de {teamName} te ha invitado a {action} {documentName}"
#: packages/email/templates/team-join.tsx:67 #: packages/email/templates/team-join.tsx:67
msgid "{memberEmail} joined the following team" msgid "{memberEmail} joined the following team"

View File

@ -51,16 +51,16 @@ msgstr "\"{placeholderEmail}\" en nombre de \"{0}\" te ha invitado a firmar \"do
#~ msgstr "\"{teamUrl}\" te ha invitado a firmar \"ejemplo de documento\"." #~ msgstr "\"{teamUrl}\" te ha invitado a firmar \"ejemplo de documento\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
msgid "({0}) has invited you to approve this document" #~ msgid "({0}) has invited you to approve this document"
msgstr "({0}) te ha invitado a aprobar este documento" #~ msgstr "({0}) te ha invitado a aprobar este documento"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
msgid "({0}) has invited you to sign this document" #~ msgid "({0}) has invited you to sign this document"
msgstr "({0}) te ha invitado a firmar este documento" #~ msgstr "({0}) te ha invitado a firmar este documento"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
msgid "({0}) has invited you to view this document" #~ msgid "({0}) has invited you to view this document"
msgstr "({0}) te ha invitado a ver este documento" #~ msgstr "({0}) te ha invitado a ver este documento"
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
msgid "{0, plural, one {(1 character over)} other {(# characters over)}}" msgid "{0, plural, one {(1 character over)} other {(# characters over)}}"
@ -1206,6 +1206,7 @@ msgid "Create your account and start using state-of-the-art document signing. Op
msgstr "Crea tu cuenta y comienza a utilizar la firma de documentos de última generación. La firma abierta y hermosa está al alcance de tu mano." msgstr "Crea tu cuenta y comienza a utilizar la firma de documentos de última generación. La firma abierta y hermosa está al alcance de tu mano."
#: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62 #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:96
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35 #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35
#: apps/web/src/app/(dashboard)/documents/data-table.tsx:54 #: apps/web/src/app/(dashboard)/documents/data-table.tsx:54
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65
@ -1988,6 +1989,18 @@ msgstr "Ir al propietario"
msgid "Go to your <0>public profile settings</0> to add documents." msgid "Go to your <0>public profile settings</0> to add documents."
msgstr "Ve a tu <0>configuración de perfil público</0> para agregar documentos." msgstr "Ve a tu <0>configuración de perfil público</0> para agregar documentos."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:107
msgid "has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:98
msgid "has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:89
msgid "has invited you to view this document"
msgstr ""
#: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29 #: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29
msgid "Here you can edit your personal details." msgid "Here you can edit your personal details."
msgstr "Aquí puedes editar tus datos personales." msgstr "Aquí puedes editar tus datos personales."
@ -2204,6 +2217,10 @@ msgstr "Última actualización el"
msgid "Last used" msgid "Last used"
msgstr "Último uso" msgstr "Último uso"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93
msgid "Leaderboard"
msgstr ""
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111
#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117 #: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117
msgid "Leave" msgid "Leave"
@ -2411,6 +2428,7 @@ msgid "My templates"
msgstr "Mis plantillas" msgstr "Mis plantillas"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148 #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:56
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
@ -2524,6 +2542,18 @@ msgstr "Nada que hacer"
msgid "Number" msgid "Number"
msgstr "Número" msgstr "Número"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:103
msgid "on behalf of \"{0}\" has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:94
msgid "on behalf of \"{0}\" has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:85
msgid "on behalf of \"{0}\" has invited you to view this document"
msgstr ""
#: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128
msgid "On this page, you can create a new webhook." msgid "On this page, you can create a new webhook."
msgstr "En esta página, puedes crear un nuevo webhook." msgstr "En esta página, puedes crear un nuevo webhook."
@ -3105,6 +3135,7 @@ msgstr "Buscar"
msgid "Search by document title" msgid "Search by document title"
msgstr "Buscar por título del documento" msgstr "Buscar por título del documento"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:147
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email" msgid "Search by name or email"
msgstr "Buscar por nombre o correo electrónico" msgstr "Buscar por nombre o correo electrónico"
@ -3369,6 +3400,11 @@ msgstr "Se han generado enlaces de firma para este documento."
msgid "Signing up..." msgid "Signing up..."
msgstr "Registrándose..." msgstr "Registrándose..."
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:82
#: apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx:46
msgid "Signing Volume"
msgstr ""
#: apps/web/src/app/(profile)/p/[url]/page.tsx:109 #: apps/web/src/app/(profile)/p/[url]/page.tsx:109
msgid "Since {0}" msgid "Since {0}"
msgstr "Desde {0}" msgstr "Desde {0}"
@ -3377,7 +3413,7 @@ msgstr "Desde {0}"
msgid "Site Banner" msgid "Site Banner"
msgstr "Banner del sitio" msgstr "Banner del sitio"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93 #: apps/web/src/app/(dashboard)/admin/nav.tsx:107
#: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26 #: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26
msgid "Site Settings" msgid "Site Settings"
msgstr "Configuraciones del sitio" msgstr "Configuraciones del sitio"

View File

@ -60,14 +60,19 @@ msgstr "{0} sur {1} ligne(s) sélectionnée(s)."
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136 #: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137 #: packages/lib/server-only/document/resend-document.tsx:137
msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the document \"{2}\"."
msgstr "{0} au nom de {1} vous a invité à {recipientActionVerb} le document \"{2}\"." msgstr ""
#: packages/lib/jobs/definitions/emails/send-signing-email.ts:136
#: packages/lib/server-only/document/resend-document.tsx:137
#~ msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"."
#~ msgstr "{0} au nom de {1} vous a invité à {recipientActionVerb} le document \"{2}\"."
#: packages/email/template-components/template-document-invite.tsx:51 #: packages/email/template-components/template-document-invite.tsx:51
#~ msgid "{0}<0/>\"{documentName}\"" #~ msgid "{0}<0/>\"{documentName}\""
#~ msgstr "{0}<0/>\"{documentName}\"" #~ msgstr "{0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:94 #: packages/email/templates/document-invite.tsx:95
msgid "{inviterName} <0>({inviterEmail})</0>" msgid "{inviterName} <0>({inviterEmail})</0>"
msgstr "{inviterName} <0>({inviterEmail})</0>" msgstr "{inviterName} <0>({inviterEmail})</0>"
@ -87,7 +92,7 @@ msgstr "{inviterName} vous a invité à {0}<0/>\"{documentName}\""
msgid "{inviterName} has invited you to {action} {documentName}" msgid "{inviterName} has invited you to {action} {documentName}"
msgstr "{inviterName} vous a invité à {action} {documentName}" msgstr "{inviterName} vous a invité à {action} {documentName}"
#: packages/email/templates/document-invite.tsx:106 #: packages/email/templates/document-invite.tsx:108
msgid "{inviterName} has invited you to {action} the document \"{documentName}\"." msgid "{inviterName} has invited you to {action} the document \"{documentName}\"."
msgstr "{inviterName} vous a invité à {action} le document \"{documentName}\"." msgstr "{inviterName} vous a invité à {action} le document \"{documentName}\"."
@ -100,16 +105,24 @@ msgid "{inviterName} has removed you from the document<0/>\"{documentName}\""
msgstr "{inviterName} vous a retiré du document<0/>\"{documentName}\"" msgstr "{inviterName} vous a retiré du document<0/>\"{documentName}\""
#: packages/email/template-components/template-document-invite.tsx:63 #: packages/email/template-components/template-document-invite.tsx:63
msgid "{inviterName} on behalf of {teamName} has invited you to {0}" msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {0}"
msgstr "{inviterName} au nom de {teamName} vous a invité à {0}" msgstr ""
#: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {action} {documentName}"
msgstr ""
#: packages/email/template-components/template-document-invite.tsx:63
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}"
#~ msgstr "{inviterName} au nom de {teamName} vous a invité à {0}"
#: packages/email/template-components/template-document-invite.tsx:49 #: packages/email/template-components/template-document-invite.tsx:49
#~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" #~ msgstr "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\""
#: packages/email/templates/document-invite.tsx:45 #: packages/email/templates/document-invite.tsx:45
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" #~ msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
msgstr "{inviterName} au nom de {teamName} vous a invité à {action} {documentName}" #~ msgstr "{inviterName} au nom de {teamName} vous a invité à {action} {documentName}"
#: packages/email/templates/team-join.tsx:67 #: packages/email/templates/team-join.tsx:67
msgid "{memberEmail} joined the following team" msgid "{memberEmail} joined the following team"

View File

@ -51,16 +51,16 @@ msgstr "\"{placeholderEmail}\" au nom de \"{0}\" vous a invité à signer \"exem
#~ msgstr "\"{teamUrl}\" vous a invité à signer \"example document\"." #~ msgstr "\"{teamUrl}\" vous a invité à signer \"example document\"."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
msgid "({0}) has invited you to approve this document" #~ msgid "({0}) has invited you to approve this document"
msgstr "({0}) vous a invité à approuver ce document" #~ msgstr "({0}) vous a invité à approuver ce document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
msgid "({0}) has invited you to sign this document" #~ msgid "({0}) has invited you to sign this document"
msgstr "({0}) vous a invité à signer ce document" #~ msgstr "({0}) vous a invité à signer ce document"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77 #: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
msgid "({0}) has invited you to view this document" #~ msgid "({0}) has invited you to view this document"
msgstr "({0}) vous a invité à consulter ce document" #~ msgstr "({0}) vous a invité à consulter ce document"
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
msgid "{0, plural, one {(1 character over)} other {(# characters over)}}" msgid "{0, plural, one {(1 character over)} other {(# characters over)}}"
@ -1206,6 +1206,7 @@ msgid "Create your account and start using state-of-the-art document signing. Op
msgstr "Créez votre compte et commencez à utiliser la signature de documents à la pointe de la technologie. Une signature ouverte et magnifique est à votre portée." msgstr "Créez votre compte et commencez à utiliser la signature de documents à la pointe de la technologie. Une signature ouverte et magnifique est à votre portée."
#: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62 #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:62
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:96
#: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35 #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-information.tsx:35
#: apps/web/src/app/(dashboard)/documents/data-table.tsx:54 #: apps/web/src/app/(dashboard)/documents/data-table.tsx:54
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table.tsx:65
@ -1988,6 +1989,18 @@ msgstr "Aller au propriétaire"
msgid "Go to your <0>public profile settings</0> to add documents." msgid "Go to your <0>public profile settings</0> to add documents."
msgstr "Allez à vos <0>paramètres de profil public</0> pour ajouter des documents." msgstr "Allez à vos <0>paramètres de profil public</0> pour ajouter des documents."
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:107
msgid "has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:98
msgid "has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:89
msgid "has invited you to view this document"
msgstr ""
#: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29 #: apps/web/src/app/(dashboard)/settings/profile/page.tsx:29
msgid "Here you can edit your personal details." msgid "Here you can edit your personal details."
msgstr "Ici, vous pouvez modifier vos coordonnées personnelles." msgstr "Ici, vous pouvez modifier vos coordonnées personnelles."
@ -2204,6 +2217,10 @@ msgstr "Dernière mise à jour à"
msgid "Last used" msgid "Last used"
msgstr "Dernière utilisation" msgstr "Dernière utilisation"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93
msgid "Leaderboard"
msgstr ""
#: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:111
#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117 #: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:117
msgid "Leave" msgid "Leave"
@ -2411,6 +2428,7 @@ msgid "My templates"
msgstr "Mes modèles" msgstr "Mes modèles"
#: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148 #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:148
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:56
#: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:99
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:66
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
@ -2524,6 +2542,18 @@ msgstr "Rien à faire"
msgid "Number" msgid "Number"
msgstr "Numéro" msgstr "Numéro"
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:103
msgid "on behalf of \"{0}\" has invited you to approve this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:94
msgid "on behalf of \"{0}\" has invited you to sign this document"
msgstr ""
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:85
msgid "on behalf of \"{0}\" has invited you to view this document"
msgstr ""
#: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:128
msgid "On this page, you can create a new webhook." msgid "On this page, you can create a new webhook."
msgstr "Sur cette page, vous pouvez créer un nouveau webhook." msgstr "Sur cette page, vous pouvez créer un nouveau webhook."
@ -3105,6 +3135,7 @@ msgstr "Recherche"
msgid "Search by document title" msgid "Search by document title"
msgstr "Recherche par titre de document" msgstr "Recherche par titre de document"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:147
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email" msgid "Search by name or email"
msgstr "Recherche par nom ou e-mail" msgstr "Recherche par nom ou e-mail"
@ -3369,6 +3400,11 @@ msgstr "Des liens de signature ont été générés pour ce document."
msgid "Signing up..." msgid "Signing up..."
msgstr "Inscription en cours..." msgstr "Inscription en cours..."
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:82
#: apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx:46
msgid "Signing Volume"
msgstr ""
#: apps/web/src/app/(profile)/p/[url]/page.tsx:109 #: apps/web/src/app/(profile)/p/[url]/page.tsx:109
msgid "Since {0}" msgid "Since {0}"
msgstr "Depuis {0}" msgstr "Depuis {0}"
@ -3377,7 +3413,7 @@ msgstr "Depuis {0}"
msgid "Site Banner" msgid "Site Banner"
msgstr "Bannière du site" msgstr "Bannière du site"
#: apps/web/src/app/(dashboard)/admin/nav.tsx:93 #: apps/web/src/app/(dashboard)/admin/nav.tsx:107
#: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26 #: apps/web/src/app/(dashboard)/admin/site-settings/page.tsx:26
msgid "Site Settings" msgid "Site Settings"
msgstr "Paramètres du site" msgstr "Paramètres du site"