mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 00:03:33 +10:00
feat: signing volume (#1358)
adds a signing volume and leaderboard section to the admin panel
This commit is contained in:
@ -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>
|
||||
);
|
||||
};
|
||||
@ -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;
|
||||
}
|
||||
60
apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx
Normal file
60
apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@ -6,7 +6,7 @@ import Link from 'next/link';
|
||||
import { usePathname } from 'next/navigation';
|
||||
|
||||
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 { Button } from '@documenso/ui/primitives/button';
|
||||
@ -80,6 +80,20 @@ export const AdminNav = ({ className, ...props }: AdminNavProps) => {
|
||||
</Link>
|
||||
</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
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
|
||||
148
packages/lib/server-only/admin/get-signing-volume.ts
Normal file
148
packages/lib/server-only/admin/get-signing-volume.ts
Normal 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,
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
@ -60,14 +60,19 @@ msgstr "{0} von {1} Zeile(n) ausgewählt."
|
||||
|
||||
#: 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}."
|
||||
msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the 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} hat dich im Namen von {1} eingeladen, das Dokument \"{2}\" {recipientActionVerb}."
|
||||
|
||||
#: packages/email/template-components/template-document-invite.tsx:51
|
||||
#~ msgid "{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>"
|
||||
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}"
|
||||
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}\"."
|
||||
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"
|
||||
|
||||
#: 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}"
|
||||
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {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
|
||||
#~ 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}\""
|
||||
|
||||
#: packages/email/templates/document-invite.tsx:45
|
||||
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
|
||||
msgstr "{inviterName} hat dich im Namen von {teamName} eingeladen, {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}"
|
||||
|
||||
#: packages/email/templates/team-join.tsx:67
|
||||
msgid "{memberEmail} joined the following team"
|
||||
|
||||
1
packages/lib/translations/de/web.js
Normal file
1
packages/lib/translations/de/web.js
Normal file
File diff suppressed because one or more lines are too long
@ -51,16 +51,16 @@ msgstr "\"{placeholderEmail}\" im Namen von \"{0}\" hat Sie eingeladen, \"Beispi
|
||||
#~ msgstr "\"{teamUrl}\" hat Sie eingeladen, \"Beispieldokument\" zu unterschreiben."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr "({0}) hat dich eingeladen, dieses Dokument zu genehmigen"
|
||||
#~ msgid "({0}) has invited you to approve this document"
|
||||
#~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu genehmigen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr "({0}) hat dich eingeladen, dieses Dokument zu unterzeichnen"
|
||||
#~ msgid "({0}) has invited you to sign this document"
|
||||
#~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu unterzeichnen"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr "({0}) hat dich eingeladen, dieses Dokument zu betrachten"
|
||||
#~ msgid "({0}) has invited you to view this document"
|
||||
#~ msgstr "({0}) hat dich eingeladen, dieses Dokument zu betrachten"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
|
||||
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."
|
||||
|
||||
#: 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/data-table.tsx:54
|
||||
#: 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}"
|
||||
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
|
||||
msgid "Daily"
|
||||
msgstr "Täglich"
|
||||
@ -1988,6 +1994,18 @@ msgstr "Zum Eigentümer gehen"
|
||||
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."
|
||||
|
||||
#: 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
|
||||
msgid "Here you can edit your personal details."
|
||||
msgstr "Hier können Sie Ihre persönlichen Daten bearbeiten."
|
||||
@ -2204,6 +2222,10 @@ msgstr "Zuletzt aktualisiert am"
|
||||
msgid "Last used"
|
||||
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)/tables/current-user-teams-data-table.tsx:117
|
||||
msgid "Leave"
|
||||
@ -2411,6 +2433,7 @@ msgid "My templates"
|
||||
msgstr "Meine Vorlagen"
|
||||
|
||||
#: 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/data-table-users.tsx:66
|
||||
#: 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"
|
||||
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
|
||||
msgid "On this page, you can create a new webhook."
|
||||
msgstr "Auf dieser Seite können Sie einen neuen Webhook erstellen."
|
||||
@ -3105,6 +3140,7 @@ msgstr "Suchen"
|
||||
msgid "Search by document title"
|
||||
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
|
||||
msgid "Search by name or email"
|
||||
msgstr "Nach Name oder E-Mail suchen"
|
||||
@ -3369,6 +3405,11 @@ msgstr "Unterzeichnungslinks wurden für dieses Dokument erstellt."
|
||||
msgid "Signing up..."
|
||||
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
|
||||
msgid "Since {0}"
|
||||
msgstr "Seit {0}"
|
||||
@ -3377,7 +3418,7 @@ msgstr "Seit {0}"
|
||||
msgid "Site 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
|
||||
msgid "Site Settings"
|
||||
msgstr "Website Einstellungen"
|
||||
|
||||
@ -55,14 +55,19 @@ msgstr "{0} of {1} row(s) selected."
|
||||
|
||||
#: 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}\"."
|
||||
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/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
|
||||
#~ msgid "{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>"
|
||||
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}"
|
||||
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}\"."
|
||||
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}\""
|
||||
|
||||
#: 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}"
|
||||
msgid "{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
|
||||
#~ 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}\""
|
||||
|
||||
#: 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}"
|
||||
#~ 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/templates/team-join.tsx:67
|
||||
msgid "{memberEmail} joined the following team"
|
||||
|
||||
1
packages/lib/translations/en/web.js
Normal file
1
packages/lib/translations/en/web.js
Normal file
File diff suppressed because one or more lines are too long
@ -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\"."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr "({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"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr "({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"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr "({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"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
|
||||
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."
|
||||
|
||||
#: 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/data-table.tsx:54
|
||||
#: 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}"
|
||||
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
|
||||
msgid "Daily"
|
||||
msgstr "Daily"
|
||||
@ -1983,6 +1989,18 @@ msgstr "Go to owner"
|
||||
msgid "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
|
||||
msgid "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"
|
||||
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)/tables/current-user-teams-data-table.tsx:117
|
||||
msgid "Leave"
|
||||
@ -2406,6 +2428,7 @@ msgid "My templates"
|
||||
msgstr "My templates"
|
||||
|
||||
#: 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/data-table-users.tsx:66
|
||||
#: 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"
|
||||
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
|
||||
msgid "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"
|
||||
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
|
||||
msgid "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..."
|
||||
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
|
||||
msgid "Since {0}"
|
||||
msgstr "Since {0}"
|
||||
@ -3372,7 +3413,7 @@ msgstr "Since {0}"
|
||||
msgid "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
|
||||
msgid "Site Settings"
|
||||
msgstr "Site Settings"
|
||||
|
||||
@ -60,14 +60,19 @@ msgstr "{0} de {1} fila(s) seleccionada."
|
||||
|
||||
#: 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}\"."
|
||||
msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the 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} en nombre de {1} te ha invitado a {recipientActionVerb} el documento \"{2}\"."
|
||||
|
||||
#: packages/email/template-components/template-document-invite.tsx:51
|
||||
#~ msgid "{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>"
|
||||
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}"
|
||||
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}\"."
|
||||
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}\""
|
||||
|
||||
#: 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}"
|
||||
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {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
|
||||
#~ 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}\""
|
||||
|
||||
#: packages/email/templates/document-invite.tsx:45
|
||||
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
|
||||
msgstr "{inviterName} en nombre de {teamName} te ha invitado a {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}"
|
||||
|
||||
#: packages/email/templates/team-join.tsx:67
|
||||
msgid "{memberEmail} joined the following team"
|
||||
|
||||
@ -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\"."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr "({0}) te ha invitado a aprobar este documento"
|
||||
#~ msgid "({0}) has invited you to approve this document"
|
||||
#~ msgstr "({0}) te ha invitado a aprobar este documento"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr "({0}) te ha invitado a firmar este documento"
|
||||
#~ msgid "({0}) has invited you to sign this document"
|
||||
#~ msgstr "({0}) te ha invitado a firmar este documento"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr "({0}) te ha invitado a ver este documento"
|
||||
#~ msgid "({0}) has invited you to view this document"
|
||||
#~ msgstr "({0}) te ha invitado a ver este documento"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
|
||||
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."
|
||||
|
||||
#: 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/data-table.tsx:54
|
||||
#: 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."
|
||||
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
|
||||
msgid "Here you can edit your personal details."
|
||||
msgstr "Aquí puedes editar tus datos personales."
|
||||
@ -2204,6 +2217,10 @@ msgstr "Última actualización el"
|
||||
msgid "Last used"
|
||||
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)/tables/current-user-teams-data-table.tsx:117
|
||||
msgid "Leave"
|
||||
@ -2411,6 +2428,7 @@ msgid "My templates"
|
||||
msgstr "Mis plantillas"
|
||||
|
||||
#: 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/data-table-users.tsx:66
|
||||
#: 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"
|
||||
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
|
||||
msgid "On this page, you can create a new webhook."
|
||||
msgstr "En esta página, puedes crear un nuevo webhook."
|
||||
@ -3105,6 +3135,7 @@ msgstr "Buscar"
|
||||
msgid "Search by document title"
|
||||
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
|
||||
msgid "Search by name or email"
|
||||
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..."
|
||||
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
|
||||
msgid "Since {0}"
|
||||
msgstr "Desde {0}"
|
||||
@ -3377,7 +3413,7 @@ msgstr "Desde {0}"
|
||||
msgid "Site Banner"
|
||||
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
|
||||
msgid "Site Settings"
|
||||
msgstr "Configuraciones del sitio"
|
||||
|
||||
@ -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/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}\"."
|
||||
msgid "{0} on behalf of \"{1}\" has invited you to {recipientActionVerb} the 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
|
||||
#~ msgid "{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>"
|
||||
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}"
|
||||
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}\"."
|
||||
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}\""
|
||||
|
||||
#: 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}"
|
||||
msgid "{inviterName} on behalf of \"{teamName}\" has invited you to {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
|
||||
#~ 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}\""
|
||||
|
||||
#: packages/email/templates/document-invite.tsx:45
|
||||
msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}"
|
||||
msgstr "{inviterName} au nom de {teamName} vous a invité à {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}"
|
||||
|
||||
#: packages/email/templates/team-join.tsx:67
|
||||
msgid "{memberEmail} joined the following team"
|
||||
|
||||
@ -51,16 +51,16 @@ msgstr "\"{placeholderEmail}\" au nom de \"{0}\" vous a invité à signer \"exem
|
||||
#~ msgstr "\"{teamUrl}\" vous a invité à signer \"example document\"."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:83
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr "({0}) vous a invité à approuver ce document"
|
||||
#~ msgid "({0}) has invited you to approve this document"
|
||||
#~ msgstr "({0}) vous a invité à approuver ce document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:80
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr "({0}) vous a invité à signer ce document"
|
||||
#~ msgid "({0}) has invited you to sign this document"
|
||||
#~ msgstr "({0}) vous a invité à signer ce document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:77
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr "({0}) vous a invité à consulter ce document"
|
||||
#~ msgid "({0}) has invited you to view this document"
|
||||
#~ msgstr "({0}) vous a invité à consulter ce document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:313
|
||||
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."
|
||||
|
||||
#: 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/data-table.tsx:54
|
||||
#: 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."
|
||||
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
|
||||
msgid "Here you can edit your personal details."
|
||||
msgstr "Ici, vous pouvez modifier vos coordonnées personnelles."
|
||||
@ -2204,6 +2217,10 @@ msgstr "Dernière mise à jour à"
|
||||
msgid "Last used"
|
||||
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)/tables/current-user-teams-data-table.tsx:117
|
||||
msgid "Leave"
|
||||
@ -2411,6 +2428,7 @@ msgid "My templates"
|
||||
msgstr "Mes modèles"
|
||||
|
||||
#: 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/data-table-users.tsx:66
|
||||
#: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:144
|
||||
@ -2524,6 +2542,18 @@ msgstr "Rien à faire"
|
||||
msgid "Number"
|
||||
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
|
||||
msgid "On this page, you can create a new webhook."
|
||||
msgstr "Sur cette page, vous pouvez créer un nouveau webhook."
|
||||
@ -3105,6 +3135,7 @@ msgstr "Recherche"
|
||||
msgid "Search by document title"
|
||||
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
|
||||
msgid "Search by name or email"
|
||||
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..."
|
||||
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
|
||||
msgid "Since {0}"
|
||||
msgstr "Depuis {0}"
|
||||
@ -3377,7 +3413,7 @@ msgstr "Depuis {0}"
|
||||
msgid "Site Banner"
|
||||
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
|
||||
msgid "Site Settings"
|
||||
msgstr "Paramètres du site"
|
||||
|
||||
Reference in New Issue
Block a user