diff --git a/.github/workflows/translations-upload.yml b/.github/workflows/translations-upload.yml index 65fd276f6..cb69d6338 100644 --- a/.github/workflows/translations-upload.yml +++ b/.github/workflows/translations-upload.yml @@ -21,7 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - ref: ${{ github.event.pull_request.head.ref }} + token: ${{ secrets.GH_PAT }} - uses: ./.github/actions/node-install diff --git a/apps/marketing/package.json b/apps/marketing/package.json index de0b41c88..a890c8374 100644 --- a/apps/marketing/package.json +++ b/apps/marketing/package.json @@ -1,11 +1,11 @@ { "name": "@documenso/marketing", - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "private": true, "license": "AGPL-3.0", "scripts": { "dev": "next dev -p 3001", - "build": "turbo run translate:extract && turbo run translate:compile && next build", + "build": "npm run translate:extract --prefix ../../ && turbo run translate:compile && next build", "start": "next start -p 3001", "lint": "next lint", "lint:fix": "next lint --fix", diff --git a/apps/marketing/src/app/(marketing)/[content]/page.tsx b/apps/marketing/src/app/(marketing)/[content]/page.tsx index 2e8327944..38200d984 100644 --- a/apps/marketing/src/app/(marketing)/[content]/page.tsx +++ b/apps/marketing/src/app/(marketing)/[content]/page.tsx @@ -30,8 +30,8 @@ const mdxComponents: MDXComponents = { * * Will render the document if it exists, otherwise will return a 404. */ -export default function ContentPage({ params }: { params: { content: string } }) { - setupI18nSSR(); +export default async function ContentPage({ params }: { params: { content: string } }) { + await setupI18nSSR(); const post = allDocuments.find((post) => post._raw.flattenedPath === params.content); diff --git a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx index 4f99126f3..324f742d1 100644 --- a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx +++ b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx @@ -48,8 +48,8 @@ const mdxComponents: MDXComponents = { ), }; -export default function BlogPostPage({ params }: { params: { post: string } }) { - setupI18nSSR(); +export default async function BlogPostPage({ params }: { params: { post: string } }) { + await setupI18nSSR(); const post = allBlogPosts.find((post) => post._raw.flattenedPath === `blog/${params.post}`); diff --git a/apps/marketing/src/app/(marketing)/blog/page.tsx b/apps/marketing/src/app/(marketing)/blog/page.tsx index 4974a2399..a762f4c2a 100644 --- a/apps/marketing/src/app/(marketing)/blog/page.tsx +++ b/apps/marketing/src/app/(marketing)/blog/page.tsx @@ -9,8 +9,8 @@ export const metadata: Metadata = { title: 'Blog', }; -export default function BlogPage() { - const { i18n } = setupI18nSSR(); +export default async function BlogPage() { + const { i18n } = await setupI18nSSR(); const blogPosts = allBlogPosts.sort((a, b) => { const dateA = new Date(a.date); diff --git a/apps/marketing/src/app/(marketing)/open/page.tsx b/apps/marketing/src/app/(marketing)/open/page.tsx index 676a352bb..035b4de38 100644 --- a/apps/marketing/src/app/(marketing)/open/page.tsx +++ b/apps/marketing/src/app/(marketing)/open/page.tsx @@ -1,7 +1,6 @@ import type { Metadata } from 'next'; import { Trans, msg } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; import { z } from 'zod'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; @@ -131,9 +130,9 @@ const fetchEarlyAdopters = async () => { }; export default async function OpenPage() { - setupI18nSSR(); + const { i18n } = await setupI18nSSR(); - const { _ } = useLingui(); + const { _ } = i18n; const [ { forks_count: forksCount, stargazers_count: stargazersCount }, diff --git a/apps/marketing/src/app/(marketing)/page.tsx b/apps/marketing/src/app/(marketing)/page.tsx index 2f5dd14c8..816b1aaa1 100644 --- a/apps/marketing/src/app/(marketing)/page.tsx +++ b/apps/marketing/src/app/(marketing)/page.tsx @@ -26,7 +26,7 @@ const fontCaveat = Caveat({ }); export default async function IndexPage() { - setupI18nSSR(); + await setupI18nSSR(); const starCount = await fetch('https://api.github.com/repos/documenso/documenso', { headers: { diff --git a/apps/marketing/src/app/(marketing)/pricing/page.tsx b/apps/marketing/src/app/(marketing)/pricing/page.tsx index 61a802cb8..4c89490c0 100644 --- a/apps/marketing/src/app/(marketing)/pricing/page.tsx +++ b/apps/marketing/src/app/(marketing)/pricing/page.tsx @@ -30,8 +30,8 @@ export type PricingPageProps = { }; }; -export default function PricingPage() { - setupI18nSSR(); +export default async function PricingPage() { + await setupI18nSSR(); return (
diff --git a/apps/marketing/src/app/(marketing)/singleplayer/page.tsx b/apps/marketing/src/app/(marketing)/singleplayer/page.tsx index 1416067e4..16da4e6b9 100644 --- a/apps/marketing/src/app/(marketing)/singleplayer/page.tsx +++ b/apps/marketing/src/app/(marketing)/singleplayer/page.tsx @@ -14,8 +14,8 @@ export const dynamic = 'force-dynamic'; // !: This entire file is a hack to get around failed prerendering of // !: the Single Player Mode page. This regression was introduced during // !: the upgrade of Next.js to v13.5.x. -export default function SingleplayerPage() { - setupI18nSSR(); +export default async function SingleplayerPage() { + await setupI18nSSR(); return ; } diff --git a/apps/marketing/src/app/layout.tsx b/apps/marketing/src/app/layout.tsx index 544b5ceb4..ea879d89d 100644 --- a/apps/marketing/src/app/layout.tsx +++ b/apps/marketing/src/app/layout.tsx @@ -56,7 +56,7 @@ export function generateMetadata() { export default async function RootLayout({ children }: { children: React.ReactNode }) { const flags = await getAllAnonymousFlags(); - const { lang, locales, i18n } = setupI18nSSR(); + const { lang, locales, i18n } = await setupI18nSSR(); return ( diff --git a/apps/web/src/app/(dashboard)/admin/layout.tsx b/apps/web/src/app/(dashboard)/admin/layout.tsx index c489c34a1..964267872 100644 --- a/apps/web/src/app/(dashboard)/admin/layout.tsx +++ b/apps/web/src/app/(dashboard)/admin/layout.tsx @@ -13,7 +13,7 @@ export type AdminSectionLayoutProps = { }; export default async function AdminSectionLayout({ children }: AdminSectionLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/admin/site-settings/page.tsx b/apps/web/src/app/(dashboard)/admin/site-settings/page.tsx index a9d37caff..c78eb87ec 100644 --- a/apps/web/src/app/(dashboard)/admin/site-settings/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/site-settings/page.tsx @@ -12,7 +12,7 @@ import { BannerForm } from './banner-form'; // import { BannerForm } from './banner-form'; export default async function AdminBannerPage() { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); diff --git a/apps/web/src/app/(dashboard)/admin/stats/page.tsx b/apps/web/src/app/(dashboard)/admin/stats/page.tsx index 33be711e1..9ffbfb5dc 100644 --- a/apps/web/src/app/(dashboard)/admin/stats/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/stats/page.tsx @@ -30,7 +30,7 @@ import { SignerConversionChart } from './signer-conversion-chart'; import { UserWithDocumentChart } from './user-with-document'; export default async function AdminStatsPage() { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); diff --git a/apps/web/src/app/(dashboard)/admin/subscriptions/page.tsx b/apps/web/src/app/(dashboard)/admin/subscriptions/page.tsx index f31e9d13e..7940b6fb5 100644 --- a/apps/web/src/app/(dashboard)/admin/subscriptions/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/subscriptions/page.tsx @@ -14,7 +14,7 @@ import { } from '@documenso/ui/primitives/table'; export default async function Subscriptions() { - setupI18nSSR(); + await setupI18nSSR(); const subscriptions = await findSubscriptions(); diff --git a/apps/web/src/app/(dashboard)/admin/users/page.tsx b/apps/web/src/app/(dashboard)/admin/users/page.tsx index 807fd45c9..55803f6f9 100644 --- a/apps/web/src/app/(dashboard)/admin/users/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/users/page.tsx @@ -16,7 +16,7 @@ type AdminManageUsersProps = { }; export default async function AdminManageUsers({ searchParams = {} }: AdminManageUsersProps) { - setupI18nSSR(); + await setupI18nSSR(); const page = Number(searchParams.page) || 1; const perPage = Number(searchParams.perPage) || 10; diff --git a/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx index 571ca535f..5c659ad46 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx @@ -7,6 +7,7 @@ import { useRouter, useSearchParams } from 'next/navigation'; import { msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; +import { isValidLanguageCode } from '@documenso/lib/constants/i18n'; import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION, SKIP_QUERY_BATCH_META, @@ -201,7 +202,7 @@ export const EditDocumentForm = ({ const onAddSettingsFormSubmit = async (data: TAddSettingsFormSchema) => { try { - const { timezone, dateFormat, redirectUrl } = data.meta; + const { timezone, dateFormat, redirectUrl, language } = data.meta; await setSettingsForDocument({ documentId: document.id, @@ -217,6 +218,7 @@ export const EditDocumentForm = ({ timezone, dateFormat, redirectUrl, + language: isValidLanguageCode(language) ? language : undefined, }, }); diff --git a/apps/web/src/app/(dashboard)/documents/[id]/edit/page.tsx b/apps/web/src/app/(dashboard)/documents/[id]/edit/page.tsx index b91bf4e9a..a20cc8469 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/edit/page.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/edit/page.tsx @@ -8,8 +8,8 @@ export type DocumentPageProps = { }; }; -export default function DocumentEditPage({ params }: DocumentPageProps) { - setupI18nSSR(); +export default async function DocumentEditPage({ params }: DocumentPageProps) { + await setupI18nSSR(); return ; } diff --git a/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx b/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx index 65d508482..b6165436b 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx @@ -6,8 +6,8 @@ import { ChevronLeft, Loader } from 'lucide-react'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { Skeleton } from '@documenso/ui/primitives/skeleton'; -export default function Loading() { - setupI18nSSR(); +export default async function Loading() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/logs/page.tsx b/apps/web/src/app/(dashboard)/documents/[id]/logs/page.tsx index 7c91ac8fc..c7c489ef1 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/logs/page.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/logs/page.tsx @@ -8,8 +8,8 @@ export type DocumentsLogsPageProps = { }; }; -export default function DocumentsLogsPage({ params }: DocumentsLogsPageProps) { - setupI18nSSR(); +export default async function DocumentsLogsPage({ params }: DocumentsLogsPageProps) { + await setupI18nSSR(); return ; } diff --git a/apps/web/src/app/(dashboard)/documents/[id]/page.tsx b/apps/web/src/app/(dashboard)/documents/[id]/page.tsx index 101b707fb..4e570effe 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/page.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/page.tsx @@ -8,8 +8,8 @@ export type DocumentPageProps = { }; }; -export default function DocumentPage({ params }: DocumentPageProps) { - setupI18nSSR(); +export default async function DocumentPage({ params }: DocumentPageProps) { + await setupI18nSSR(); return ; } diff --git a/apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx b/apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx index b6938f154..9d6e20535 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/sent/page.tsx @@ -5,8 +5,8 @@ import { ChevronLeft } from 'lucide-react'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; -export default function DocumentSentPage() { - setupI18nSSR(); +export default async function DocumentSentPage() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx b/apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx index fdf3f4fa5..912de8f11 100644 --- a/apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx +++ b/apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx @@ -87,7 +87,7 @@ export const DeleteDocumentDialog = ({ const onInputChange = (event: React.ChangeEvent) => { setInputValue(event.target.value); - setIsDeleteEnabled(event.target.value === 'delete'); + setIsDeleteEnabled(event.target.value === _(msg`delete`)); }; return ( diff --git a/apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx b/apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx index bf84d3e81..8de33f8c2 100644 --- a/apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx +++ b/apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx @@ -117,10 +117,10 @@ export const MoveDocumentDialog = ({ documentId, open, onOpenChange }: MoveDocum diff --git a/apps/web/src/app/(dashboard)/documents/page.tsx b/apps/web/src/app/(dashboard)/documents/page.tsx index 241bee6f0..41cbf3df9 100644 --- a/apps/web/src/app/(dashboard)/documents/page.tsx +++ b/apps/web/src/app/(dashboard)/documents/page.tsx @@ -16,7 +16,7 @@ export const metadata: Metadata = { }; export default async function DocumentsPage({ searchParams = {} }: DocumentsPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/layout.tsx b/apps/web/src/app/(dashboard)/layout.tsx index 92cbbfecb..90096b0e3 100644 --- a/apps/web/src/app/(dashboard)/layout.tsx +++ b/apps/web/src/app/(dashboard)/layout.tsx @@ -23,7 +23,7 @@ export type AuthenticatedDashboardLayoutProps = { export default async function AuthenticatedDashboardLayout({ children, }: AuthenticatedDashboardLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const session = await getServerSession(NEXT_AUTH_OPTIONS); diff --git a/apps/web/src/app/(dashboard)/settings/billing/page.tsx b/apps/web/src/app/(dashboard)/settings/billing/page.tsx index 4f1e69334..e60698818 100644 --- a/apps/web/src/app/(dashboard)/settings/billing/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/billing/page.tsx @@ -24,7 +24,7 @@ export const metadata: Metadata = { }; export default async function BillingSettingsPage() { - const { i18n } = setupI18nSSR(); + const { i18n } = await setupI18nSSR(); let { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/settings/layout.tsx b/apps/web/src/app/(dashboard)/settings/layout.tsx index 7d15d4874..9c472cf07 100644 --- a/apps/web/src/app/(dashboard)/settings/layout.tsx +++ b/apps/web/src/app/(dashboard)/settings/layout.tsx @@ -11,8 +11,8 @@ export type DashboardSettingsLayoutProps = { children: React.ReactNode; }; -export default function DashboardSettingsLayout({ children }: DashboardSettingsLayoutProps) { - setupI18nSSR(); +export default async function DashboardSettingsLayout({ children }: DashboardSettingsLayoutProps) { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(dashboard)/settings/profile/page.tsx b/apps/web/src/app/(dashboard)/settings/profile/page.tsx index a9c47f245..214f73ad2 100644 --- a/apps/web/src/app/(dashboard)/settings/profile/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/profile/page.tsx @@ -17,7 +17,7 @@ export const metadata: Metadata = { }; export default async function ProfileSettingsPage() { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/settings/public-profile/page.tsx b/apps/web/src/app/(dashboard)/settings/public-profile/page.tsx index 673fb9328..8fcf1bca2 100644 --- a/apps/web/src/app/(dashboard)/settings/public-profile/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/public-profile/page.tsx @@ -5,7 +5,7 @@ import { getUserPublicProfile } from '@documenso/lib/server-only/user/get-user-p import { PublicProfilePageView } from './public-profile-page-view'; export default async function Page() { - setupI18nSSR(); + await setupI18nSSR(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/settings/security/activity/page.tsx b/apps/web/src/app/(dashboard)/settings/security/activity/page.tsx index 2b46a653c..79563ffd5 100644 --- a/apps/web/src/app/(dashboard)/settings/security/activity/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/security/activity/page.tsx @@ -14,8 +14,8 @@ export const metadata: Metadata = { title: 'Security activity', }; -export default function SettingsSecurityActivityPage() { - setupI18nSSR(); +export default async function SettingsSecurityActivityPage() { + await setupI18nSSR(); const { _ } = useLingui(); diff --git a/apps/web/src/app/(dashboard)/settings/security/page.tsx b/apps/web/src/app/(dashboard)/settings/security/page.tsx index cbe35d254..1f3d4de08 100644 --- a/apps/web/src/app/(dashboard)/settings/security/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/security/page.tsx @@ -21,7 +21,7 @@ export const metadata: Metadata = { }; export default async function SecuritySettingsPage() { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx b/apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx index 106916b3c..c9ec4153a 100644 --- a/apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/security/passkeys/page.tsx @@ -17,7 +17,7 @@ export const metadata: Metadata = { }; export default async function SettingsManagePasskeysPage() { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); const isPasskeyEnabled = await getServerComponentFlag('app_passkey'); diff --git a/apps/web/src/app/(dashboard)/settings/tokens/page.tsx b/apps/web/src/app/(dashboard)/settings/tokens/page.tsx index ae01e6802..ad90b54d5 100644 --- a/apps/web/src/app/(dashboard)/settings/tokens/page.tsx +++ b/apps/web/src/app/(dashboard)/settings/tokens/page.tsx @@ -10,7 +10,7 @@ import DeleteTokenDialog from '~/components/(dashboard)/settings/token/delete-to import { ApiTokenForm } from '~/components/forms/token'; export default async function ApiTokensPage() { - const { i18n } = setupI18nSSR(); + const { i18n } = await setupI18nSSR(); const { user } = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx b/apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx index 9efd6e3b9..766d45caa 100644 --- a/apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx +++ b/apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx @@ -7,6 +7,7 @@ import { useRouter } from 'next/navigation'; import { msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; +import { isValidLanguageCode } from '@documenso/lib/constants/i18n'; import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION, SKIP_QUERY_BATCH_META, @@ -151,7 +152,10 @@ export const EditTemplateForm = ({ globalAccessAuth: data.globalAccessAuth ?? null, globalActionAuth: data.globalActionAuth ?? null, }, - meta: data.meta, + meta: { + ...data.meta, + language: isValidLanguageCode(data.meta.language) ? data.meta.language : undefined, + }, }); // Router refresh is here to clear the router cache for when navigating to /documents. diff --git a/apps/web/src/app/(dashboard)/templates/[id]/page.tsx b/apps/web/src/app/(dashboard)/templates/[id]/page.tsx index 5c5699c25..0deaf4ecb 100644 --- a/apps/web/src/app/(dashboard)/templates/[id]/page.tsx +++ b/apps/web/src/app/(dashboard)/templates/[id]/page.tsx @@ -7,8 +7,8 @@ import { TemplatePageView } from './template-page-view'; type TemplatePageProps = Pick; -export default function TemplatePage({ params }: TemplatePageProps) { - setupI18nSSR(); +export default async function TemplatePage({ params }: TemplatePageProps) { + await setupI18nSSR(); return ; } diff --git a/apps/web/src/app/(dashboard)/templates/page.tsx b/apps/web/src/app/(dashboard)/templates/page.tsx index 7f910efa5..886eba88e 100644 --- a/apps/web/src/app/(dashboard)/templates/page.tsx +++ b/apps/web/src/app/(dashboard)/templates/page.tsx @@ -15,8 +15,8 @@ export const metadata: Metadata = { title: 'Templates', }; -export default function TemplatesPage({ searchParams = {} }: TemplatesPageProps) { - setupI18nSSR(); +export default async function TemplatesPage({ searchParams = {} }: TemplatesPageProps) { + await setupI18nSSR(); return ; } diff --git a/apps/web/src/app/(profile)/layout.tsx b/apps/web/src/app/(profile)/layout.tsx index 43f263de7..d43e44172 100644 --- a/apps/web/src/app/(profile)/layout.tsx +++ b/apps/web/src/app/(profile)/layout.tsx @@ -14,7 +14,7 @@ type PublicProfileLayoutProps = { }; export default async function PublicProfileLayout({ children }: PublicProfileLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const { user, session } = await getServerComponentSession(); diff --git a/apps/web/src/app/(profile)/p/[url]/page.tsx b/apps/web/src/app/(profile)/p/[url]/page.tsx index e276417d2..67226c5cb 100644 --- a/apps/web/src/app/(profile)/p/[url]/page.tsx +++ b/apps/web/src/app/(profile)/p/[url]/page.tsx @@ -42,7 +42,7 @@ const BADGE_DATA = { }; export default async function PublicProfilePage({ params }: PublicProfilePageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { url: profileUrl } = params; diff --git a/apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx b/apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx index 40118260c..649099717 100644 --- a/apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx +++ b/apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx @@ -1,7 +1,7 @@ 'use client'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Trans } from '@lingui/macro'; +import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { useSession } from 'next-auth/react'; import { useForm } from 'react-hook-form'; @@ -77,7 +77,7 @@ export const ConfigureDirectTemplateFormPartial = ({ if (template.Recipient.map((recipient) => recipient.email).includes(items.email)) { ctx.addIssue({ code: z.ZodIssueCode.custom, - message: 'Email cannot already exist in the template', + message: _(msg`Email cannot already exist in the template`), path: ['email'], }); } diff --git a/apps/web/src/app/(recipient)/d/[token]/page.tsx b/apps/web/src/app/(recipient)/d/[token]/page.tsx index 0cc3b1a2c..a2ace350c 100644 --- a/apps/web/src/app/(recipient)/d/[token]/page.tsx +++ b/apps/web/src/app/(recipient)/d/[token]/page.tsx @@ -24,7 +24,7 @@ export type TemplatesDirectPageProps = { }; export default async function TemplatesDirectPage({ params }: TemplatesDirectPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { token } = params; diff --git a/apps/web/src/app/(recipient)/layout.tsx b/apps/web/src/app/(recipient)/layout.tsx index e24c7d088..54477b458 100644 --- a/apps/web/src/app/(recipient)/layout.tsx +++ b/apps/web/src/app/(recipient)/layout.tsx @@ -19,7 +19,7 @@ type RecipientLayoutProps = { * Such as direct template access, or signing. */ export default async function RecipientLayout({ children }: RecipientLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const { user, session } = await getServerComponentSession(); diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx index 0798e5098..23a5f1278 100644 --- a/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx @@ -8,8 +8,8 @@ export type SigningLayoutProps = { children: React.ReactNode; }; -export default function SigningLayout({ children }: SigningLayoutProps) { - setupI18nSSR(); +export default async function SigningLayout({ children }: SigningLayoutProps) { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx index 01fa9dc9e..7e183da1d 100644 --- a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx @@ -40,7 +40,7 @@ export type CompletedSigningPageProps = { export default async function CompletedSigningPage({ params: { token }, }: CompletedSigningPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); @@ -222,7 +222,7 @@ export default async function CompletedSigningPage({ )} {isLoggedIn && ( - + Go Back Home )} diff --git a/apps/web/src/app/(signing)/sign/[token]/form.tsx b/apps/web/src/app/(signing)/sign/[token]/form.tsx index b3f3a0587..8085234db 100644 --- a/apps/web/src/app/(signing)/sign/[token]/form.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/form.tsx @@ -124,9 +124,9 @@ export const SigningForm = ({ >

- {recipient.role === RecipientRole.VIEWER && 'View Document'} - {recipient.role === RecipientRole.SIGNER && 'Sign Document'} - {recipient.role === RecipientRole.APPROVER && 'Approve Document'} + {recipient.role === RecipientRole.VIEWER && View Document} + {recipient.role === RecipientRole.SIGNER && Sign Document} + {recipient.role === RecipientRole.APPROVER && Approve Document}

{recipient.role === RecipientRole.VIEWER ? ( @@ -166,7 +166,7 @@ export const SigningForm = ({ ) : ( <>

- Please review the document before signing. + Please review the document before signing.


@@ -174,7 +174,9 @@ export const SigningForm = ({
- +
- + @@ -213,7 +217,7 @@ export const SigningForm = ({ disabled={typeof window !== 'undefined' && window.history.length <= 1} onClick={() => router.back()} > - Cancel + Cancel { const router = useRouter(); const { toast } = useToast(); + const { _ } = useLingui(); const { fullName } = useRequiredSigningContext(); const initials = extractInitials(fullName); @@ -83,8 +86,8 @@ export const InitialsField = ({ console.error(err); toast({ - title: 'Error', - description: 'An error occurred while signing the document.', + title: _(msg`Error`), + description: _(msg`An error occurred while signing the document.`), variant: 'destructive', }); } @@ -109,8 +112,8 @@ export const InitialsField = ({ console.error(err); toast({ - title: 'Error', - description: 'An error occurred while removing the signature.', + title: _(msg`Error`), + description: _(msg`An error occurred while removing the field.`), variant: 'destructive', }); } @@ -126,7 +129,7 @@ export const InitialsField = ({ {!field.inserted && (

- Initials + Initials

)} diff --git a/apps/web/src/app/(signing)/sign/[token]/layout.tsx b/apps/web/src/app/(signing)/sign/[token]/layout.tsx index c9be8130b..9ecb8487b 100644 --- a/apps/web/src/app/(signing)/sign/[token]/layout.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/layout.tsx @@ -13,7 +13,7 @@ export type SigningLayoutProps = { }; export default async function SigningLayout({ children }: SigningLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const { user, session } = await getServerComponentSession(); diff --git a/apps/web/src/app/(signing)/sign/[token]/page.tsx b/apps/web/src/app/(signing)/sign/[token]/page.tsx index 214b013ce..ca7afafa2 100644 --- a/apps/web/src/app/(signing)/sign/[token]/page.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/page.tsx @@ -31,7 +31,7 @@ export type SigningPageProps = { }; export default async function SigningPage({ params: { token } }: SigningPageProps) { - setupI18nSSR(); + await setupI18nSSR(); if (!token) { return notFound(); @@ -43,12 +43,6 @@ export default async function SigningPage({ params: { token } }: SigningPageProp const requestMetadata = extractNextHeaderRequestMetadata(requestHeaders); - const isRecipientsTurn = await getIsRecipientsTurnToSign({ token }); - - if (!isRecipientsTurn) { - return redirect(`/sign/${token}/waiting`); - } - const [document, fields, recipient, completedFields] = await Promise.all([ getDocumentAndSenderByToken({ token, @@ -69,6 +63,12 @@ export default async function SigningPage({ params: { token } }: SigningPageProp return notFound(); } + const isRecipientsTurn = await getIsRecipientsTurnToSign({ token }); + + if (!isRecipientsTurn) { + return redirect(`/sign/${token}/waiting`); + } + const { derivedRecipientAccessAuth } = extractDocumentAuthMethods({ documentAuth: document.authOptions, recipientAuth: recipient.authOptions, diff --git a/apps/web/src/app/(signing)/sign/[token]/waiting/page.tsx b/apps/web/src/app/(signing)/sign/[token]/waiting/page.tsx index bf5466215..f53c10e27 100644 --- a/apps/web/src/app/(signing)/sign/[token]/waiting/page.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/waiting/page.tsx @@ -21,7 +21,7 @@ type WaitingForTurnToSignPageProps = { export default async function WaitingForTurnToSignPage({ params: { token }, }: WaitingForTurnToSignPageProps) { - setupI18nSSR(); + await setupI18nSSR(); if (!token) { return notFound(); diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/edit/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/edit/page.tsx index c04779105..ea6351ad9 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/edit/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/edit/page.tsx @@ -12,7 +12,7 @@ export type DocumentPageProps = { }; export default async function TeamsDocumentEditPage({ params }: DocumentPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/logs/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/logs/page.tsx index effd426c5..9f83273e4 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/logs/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/logs/page.tsx @@ -12,7 +12,7 @@ export type TeamDocumentsLogsPageProps = { }; export default async function TeamsDocumentsLogsPage({ params }: TeamDocumentsLogsPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/page.tsx index 2d734d944..30bd93555 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/documents/[id]/page.tsx @@ -12,7 +12,7 @@ export type DocumentPageProps = { }; export default async function DocumentPage({ params }: DocumentPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/documents/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/documents/page.tsx index dba102909..0d5b9692f 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/documents/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/documents/page.tsx @@ -16,7 +16,7 @@ export default async function TeamsDocumentPage({ params, searchParams = {}, }: TeamsDocumentPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx index cd1676591..f5d2a48d1 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx @@ -27,7 +27,7 @@ export default async function AuthenticatedTeamsLayout({ children, params, }: AuthenticatedTeamsLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const { session, user } = await getServerComponentSession(); diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx index a12e02665..dc13b630c 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/billing/page.tsx @@ -21,7 +21,7 @@ export type TeamsSettingsBillingPageProps = { }; export default async function TeamsSettingBillingPage({ params }: TeamsSettingsBillingPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/layout.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/layout.tsx index 04ebe3e3f..c2fc3c39e 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/layout.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/layout.tsx @@ -24,7 +24,7 @@ export default async function TeamsSettingsLayout({ children, params: { teamUrl }, }: TeamSettingsLayoutProps) { - setupI18nSSR(); + await setupI18nSSR(); const session = await getRequiredServerComponentSession(); diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/members/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/members/page.tsx index 0ca35c8c9..cda20f9c0 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/members/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/members/page.tsx @@ -16,7 +16,7 @@ export type TeamsSettingsMembersPageProps = { }; export default async function TeamsSettingsMembersPage({ params }: TeamsSettingsMembersPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { _ } = useLingui(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx index b9ffc4e63..3a72cb255 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx @@ -28,7 +28,7 @@ export type TeamsSettingsPageProps = { }; export default async function TeamsSettingsPage({ params }: TeamsSettingsPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/public-profile/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/public-profile/page.tsx index b8e6f2cc5..d184f2845 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/public-profile/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/public-profile/page.tsx @@ -14,7 +14,7 @@ export type TeamsSettingsPublicProfilePageProps = { export default async function TeamsSettingsPublicProfilePage({ params, }: TeamsSettingsPublicProfilePageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx index 1ff9c9afa..d3dd91b2c 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx @@ -21,7 +21,7 @@ type ApiTokensPageProps = { }; export default async function ApiTokensPage({ params }: ApiTokensPageProps) { - const { i18n } = setupI18nSSR(); + const { i18n } = await setupI18nSSR(); const { teamUrl } = params; @@ -97,17 +97,11 @@ export default async function ApiTokensPage({ params }: ApiTokensPageProps) {
{token.name}

- - Created on - {i18n.date(token.createdAt, DateTime.DATETIME_FULL)} - + Created on {i18n.date(token.createdAt, DateTime.DATETIME_FULL)}

{token.expires ? (

- - Expires on - {i18n.date(token.expires, DateTime.DATETIME_FULL)} - + Expires on {i18n.date(token.expires, DateTime.DATETIME_FULL)}

) : (

diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/page.tsx index a4773e583..2efcf7c5e 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/templates/[id]/page.tsx @@ -14,7 +14,7 @@ type TeamTemplatePageProps = { }; export default async function TeamTemplatePage({ params }: TeamTemplatePageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/templates/page.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/templates/page.tsx index 4bae127ef..784866148 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/templates/page.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/templates/page.tsx @@ -18,7 +18,7 @@ export default async function TeamTemplatesPage({ searchParams = {}, params, }: TeamTemplatesPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const { teamUrl } = params; diff --git a/apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx b/apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx index 8c79071b9..160215df8 100644 --- a/apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx +++ b/apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx @@ -5,101 +5,156 @@ import { Trans } from '@lingui/macro'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { Button } from '@documenso/ui/primitives/button'; -export default function SignatureDisclosure() { - setupI18nSSR(); +const SUPPORT_EMAIL = 'support@documenso.com'; + +export default async function SignatureDisclosure() { + await setupI18nSSR(); return (

-

Electronic Signature Disclosure

+

+ Electronic Signature Disclosure +

-

Welcome

+

+ Welcome +

- Thank you for using Documenso to perform your electronic document signing. The purpose of - this disclosure is to inform you about the process, legality, and your rights regarding - the use of electronic signatures on our platform. By opting to use an electronic - signature, you are agreeing to the terms and conditions outlined below. + + Thank you for using Documenso to perform your electronic document signing. The purpose + of this disclosure is to inform you about the process, legality, and your rights + regarding the use of electronic signatures on our platform. By opting to use an + electronic signature, you are agreeing to the terms and conditions outlined below. +

-

Acceptance and Consent

+

+ Acceptance and Consent +

- When you use our platform to affix your electronic signature to documents, you are - consenting to do so under the Electronic Signatures in Global and National Commerce Act - (E-Sign Act) and other applicable laws. This action indicates your agreement to use - electronic means to sign documents and receive notifications. + + When you use our platform to affix your electronic signature to documents, you are + consenting to do so under the Electronic Signatures in Global and National Commerce Act + (E-Sign Act) and other applicable laws. This action indicates your agreement to use + electronic means to sign documents and receive notifications. +

-

Legality of Electronic Signatures

+

+ Legality of Electronic Signatures +

- An electronic signature provided by you on our platform, achieved through clicking through - to a document and entering your name, or any other electronic signing method we provide, - is legally binding. It carries the same weight and enforceability as a manual signature - written with ink on paper. + + An electronic signature provided by you on our platform, achieved through clicking + through to a document and entering your name, or any other electronic signing method we + provide, is legally binding. It carries the same weight and enforceability as a manual + signature written with ink on paper. +

-

System Requirements

-

To use our electronic signature service, you must have access to:

+

+ System Requirements +

+

+ To use our electronic signature service, you must have access to: +

    -
  • A stable internet connection
  • -
  • An email account
  • -
  • A device capable of accessing, opening, and reading documents
  • -
  • A means to print or download documents for your records
  • +
  • + A stable internet connection +
  • +
  • + An email account +
  • +
  • + A device capable of accessing, opening, and reading documents +
  • +
  • + A means to print or download documents for your records +
-

Electronic Delivery of Documents

+

+ Electronic Delivery of Documents +

- All documents related to the electronic signing process will be provided to you - electronically through our platform or via email. It is your responsibility to ensure that - your email address is current and that you can receive and open our emails. + + All documents related to the electronic signing process will be provided to you + electronically through our platform or via email. It is your responsibility to ensure + that your email address is current and that you can receive and open our emails. +

-

Consent to Electronic Transactions

+

+ Consent to Electronic Transactions +

- By using the electronic signature feature, you are consenting to conduct transactions and - receive disclosures electronically. You acknowledge that your electronic signature on - documents is binding and that you accept the terms outlined in the documents you are - signing. + + By using the electronic signature feature, you are consenting to conduct transactions + and receive disclosures electronically. You acknowledge that your electronic signature + on documents is binding and that you accept the terms outlined in the documents you are + signing. +

-

Withdrawing Consent

+

+ Withdrawing Consent +

- You have the right to withdraw your consent to use electronic signatures at any time - before completing the signing process. To withdraw your consent, please contact the sender - of the document. In failing to contact the sender you may reach out to{' '} - support@documenso.com for assistance. Be aware - that withdrawing consent may delay or halt the completion of the related transaction or - service. + + You have the right to withdraw your consent to use electronic signatures at any time + before completing the signing process. To withdraw your consent, please contact the + sender of the document. In failing to contact the sender you may reach out to{' '} + {SUPPORT_EMAIL} for assistance. Be aware that + withdrawing consent may delay or halt the completion of the related transaction or + service. +

-

Updating Your Information

+

+ Updating Your Information +

- It is crucial to keep your contact information, especially your email address, up to date - with us. Please notify us immediately of any changes to ensure that you continue to - receive all necessary communications. + + It is crucial to keep your contact information, especially your email address, up to + date with us. Please notify us immediately of any changes to ensure that you continue to + receive all necessary communications. +

-

Retention of Documents

+

+ Retention of Documents +

- After signing a document electronically, you will be provided the opportunity to view, - download, and print the document for your records. It is highly recommended that you - retain a copy of all electronically signed documents for your personal records. We will - also retain a copy of the signed document for our records however we may not be able to - provide you with a copy of the signed document after a certain period of time. + + After signing a document electronically, you will be provided the opportunity to view, + download, and print the document for your records. It is highly recommended that you + retain a copy of all electronically signed documents for your personal records. We will + also retain a copy of the signed document for our records however we may not be able to + provide you with a copy of the signed document after a certain period of time. +

-

Acknowledgment

+

+ Acknowledgment +

- By proceeding to use the electronic signature service provided by Documenso, you affirm - that you have read and understood this disclosure. You agree to all terms and conditions - related to the use of electronic signatures and electronic transactions as outlined - herein. + + By proceeding to use the electronic signature service provided by Documenso, you affirm + that you have read and understood this disclosure. You agree to all terms and conditions + related to the use of electronic signatures and electronic transactions as outlined + herein. +

-

Contact Information

+

+ Contact Information +

- For any questions regarding this disclosure, electronic signatures, or any related - process, please contact us at:{' '} - support@documenso.com + + For any questions regarding this disclosure, electronic signatures, or any related + process, please contact us at: {SUPPORT_EMAIL} +

diff --git a/apps/web/src/app/(unauthenticated)/check-email/page.tsx b/apps/web/src/app/(unauthenticated)/check-email/page.tsx index a91a2f7a2..a0aa50fae 100644 --- a/apps/web/src/app/(unauthenticated)/check-email/page.tsx +++ b/apps/web/src/app/(unauthenticated)/check-email/page.tsx @@ -10,8 +10,8 @@ export const metadata: Metadata = { title: 'Forgot password', }; -export default function ForgotPasswordPage() { - setupI18nSSR(); +export default async function ForgotPasswordPage() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(unauthenticated)/forgot-password/page.tsx b/apps/web/src/app/(unauthenticated)/forgot-password/page.tsx index 72a757732..0bb05587a 100644 --- a/apps/web/src/app/(unauthenticated)/forgot-password/page.tsx +++ b/apps/web/src/app/(unauthenticated)/forgot-password/page.tsx @@ -11,8 +11,8 @@ export const metadata: Metadata = { title: 'Forgot Password', }; -export default function ForgotPasswordPage() { - setupI18nSSR(); +export default async function ForgotPasswordPage() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(unauthenticated)/layout.tsx b/apps/web/src/app/(unauthenticated)/layout.tsx index 994bb3ac2..2b70d2610 100644 --- a/apps/web/src/app/(unauthenticated)/layout.tsx +++ b/apps/web/src/app/(unauthenticated)/layout.tsx @@ -9,8 +9,8 @@ type UnauthenticatedLayoutProps = { children: React.ReactNode; }; -export default function UnauthenticatedLayout({ children }: UnauthenticatedLayoutProps) { - setupI18nSSR(); +export default async function UnauthenticatedLayout({ children }: UnauthenticatedLayoutProps) { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(unauthenticated)/reset-password/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/reset-password/[token]/page.tsx index 7f594c0ed..1bbca3cfe 100644 --- a/apps/web/src/app/(unauthenticated)/reset-password/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/reset-password/[token]/page.tsx @@ -15,7 +15,7 @@ type ResetPasswordPageProps = { }; export default async function ResetPasswordPage({ params: { token } }: ResetPasswordPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const isValid = await getResetTokenValidity({ token }); diff --git a/apps/web/src/app/(unauthenticated)/reset-password/page.tsx b/apps/web/src/app/(unauthenticated)/reset-password/page.tsx index ad478a7bb..fc54aceec 100644 --- a/apps/web/src/app/(unauthenticated)/reset-password/page.tsx +++ b/apps/web/src/app/(unauthenticated)/reset-password/page.tsx @@ -10,8 +10,8 @@ export const metadata: Metadata = { title: 'Reset Password', }; -export default function ResetPasswordPage() { - setupI18nSSR(); +export default async function ResetPasswordPage() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(unauthenticated)/signin/page.tsx b/apps/web/src/app/(unauthenticated)/signin/page.tsx index f7e62675b..9b041e22b 100644 --- a/apps/web/src/app/(unauthenticated)/signin/page.tsx +++ b/apps/web/src/app/(unauthenticated)/signin/page.tsx @@ -17,8 +17,8 @@ export const metadata: Metadata = { title: 'Sign In', }; -export default function SignInPage() { - setupI18nSSR(); +export default async function SignInPage() { + await setupI18nSSR(); const NEXT_PUBLIC_DISABLE_SIGNUP = env('NEXT_PUBLIC_DISABLE_SIGNUP'); diff --git a/apps/web/src/app/(unauthenticated)/signup/page.tsx b/apps/web/src/app/(unauthenticated)/signup/page.tsx index bdcf9c37f..7686d2f70 100644 --- a/apps/web/src/app/(unauthenticated)/signup/page.tsx +++ b/apps/web/src/app/(unauthenticated)/signup/page.tsx @@ -12,8 +12,8 @@ export const metadata: Metadata = { title: 'Sign Up', }; -export default function SignUpPage() { - setupI18nSSR(); +export default async function SignUpPage() { + await setupI18nSSR(); const NEXT_PUBLIC_DISABLE_SIGNUP = env('NEXT_PUBLIC_DISABLE_SIGNUP'); diff --git a/apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx index 69d0cad8b..06c7dadc9 100644 --- a/apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx @@ -21,7 +21,7 @@ type DeclineInvitationPageProps = { export default async function DeclineInvitationPage({ params: { token }, }: DeclineInvitationPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const session = await getServerComponentSession(); diff --git a/apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx index 5e76f8d65..3441dbed7 100644 --- a/apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx @@ -21,7 +21,7 @@ type AcceptInvitationPageProps = { export default async function AcceptInvitationPage({ params: { token }, }: AcceptInvitationPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const session = await getServerComponentSession(); diff --git a/apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx index 0314646cb..b53fb5f71 100644 --- a/apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx @@ -14,7 +14,7 @@ type VerifyTeamEmailPageProps = { }; export default async function VerifyTeamEmailPage({ params: { token } }: VerifyTeamEmailPageProps) { - setupI18nSSR(); + await setupI18nSSR(); const teamEmailVerification = await prisma.teamEmailVerification.findUnique({ where: { diff --git a/apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx index ae4e7e97f..8713aeecd 100644 --- a/apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx @@ -17,7 +17,7 @@ type VerifyTeamTransferPage = { export default async function VerifyTeamTransferPage({ params: { token }, }: VerifyTeamTransferPage) { - setupI18nSSR(); + await setupI18nSSR(); const teamTransferVerification = await prisma.teamTransferVerification.findUnique({ where: { diff --git a/apps/web/src/app/(unauthenticated)/unverified-account/page.tsx b/apps/web/src/app/(unauthenticated)/unverified-account/page.tsx index 70b94c2cc..3c3588c1e 100644 --- a/apps/web/src/app/(unauthenticated)/unverified-account/page.tsx +++ b/apps/web/src/app/(unauthenticated)/unverified-account/page.tsx @@ -5,8 +5,8 @@ import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { SendConfirmationEmailForm } from '~/components/forms/send-confirmation-email'; -export default function UnverifiedAccount() { - setupI18nSSR(); +export default async function UnverifiedAccount() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx index b3edcb3c9..eb88538c4 100644 --- a/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx +++ b/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx @@ -23,7 +23,7 @@ export type PageProps = { }; export default async function VerifyEmailPage({ params: { token } }: PageProps) { - setupI18nSSR(); + await setupI18nSSR(); if (!token) { return ( diff --git a/apps/web/src/app/(unauthenticated)/verify-email/page.tsx b/apps/web/src/app/(unauthenticated)/verify-email/page.tsx index 6fcfaec9b..cd518a913 100644 --- a/apps/web/src/app/(unauthenticated)/verify-email/page.tsx +++ b/apps/web/src/app/(unauthenticated)/verify-email/page.tsx @@ -11,8 +11,8 @@ export const metadata: Metadata = { title: 'Verify Email', }; -export default function EmailVerificationWithoutTokenPage() { - setupI18nSSR(); +export default async function EmailVerificationWithoutTokenPage() { + await setupI18nSSR(); return (
diff --git a/apps/web/src/app/embed/direct/[[...url]]/client.tsx b/apps/web/src/app/embed/direct/[[...url]]/client.tsx index 189e9f1ca..0f71c0e89 100644 --- a/apps/web/src/app/embed/direct/[[...url]]/client.tsx +++ b/apps/web/src/app/embed/direct/[[...url]]/client.tsx @@ -318,6 +318,7 @@ export const EmbedDirectTemplateClientPage = ({ {/* Widget */}
@@ -367,7 +368,7 @@ export const EmbedDirectTemplateClientPage = ({ className="bg-background mt-2" disabled={isNameLocked} value={fullName} - onChange={(e) => !isNameLocked && setFullName(e.target.value.trim())} + onChange={(e) => !isNameLocked && setFullName(e.target.value)} />
@@ -394,13 +395,17 @@ export const EmbedDirectTemplateClientPage = ({ { setSignature(value); }} + allowTypedSignature={Boolean( + metadata && + 'typedSignatureEnabled' in metadata && + metadata.typedSignatureEnabled, + )} /> diff --git a/apps/web/src/app/embed/sign/[[...url]]/client.tsx b/apps/web/src/app/embed/sign/[[...url]]/client.tsx index 08f479004..e10f4745c 100644 --- a/apps/web/src/app/embed/sign/[[...url]]/client.tsx +++ b/apps/web/src/app/embed/sign/[[...url]]/client.tsx @@ -198,6 +198,7 @@ export const EmbedSignDocumentClientPage = ({ {/* Widget */}
@@ -247,7 +248,7 @@ export const EmbedSignDocumentClientPage = ({ className="bg-background mt-2" disabled={isNameLocked} value={fullName} - onChange={(e) => !isNameLocked && setFullName(e.target.value.trim())} + onChange={(e) => !isNameLocked && setFullName(e.target.value)} />
@@ -273,13 +274,17 @@ export const EmbedSignDocumentClientPage = ({ { setSignature(value); }} + allowTypedSignature={Boolean( + metadata && + 'typedSignatureEnabled' in metadata && + metadata.typedSignatureEnabled, + )} /> diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index c4a6ffd3a..53d735200 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -56,7 +56,7 @@ export function generateMetadata() { export default async function RootLayout({ children }: { children: React.ReactNode }) { const flags = await getServerComponentAllFlags(); - const { i18n, lang, locales } = setupI18nSSR(); + const { i18n, lang, locales } = await setupI18nSSR(); return ( Documenso
; } diff --git a/apps/web/src/components/(dashboard)/document-search/document-search.tsx b/apps/web/src/components/(dashboard)/document-search/document-search.tsx index dbfad6775..966452152 100644 --- a/apps/web/src/components/(dashboard)/document-search/document-search.tsx +++ b/apps/web/src/components/(dashboard)/document-search/document-search.tsx @@ -4,12 +4,18 @@ import { useCallback, useEffect, useState } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value'; import { Input } from '@documenso/ui/primitives/input'; export const DocumentSearch = ({ initialValue = '' }: { initialValue?: string }) => { + const { _ } = useLingui(); + const router = useRouter(); const searchParams = useSearchParams(); + const [searchTerm, setSearchTerm] = useState(initialValue); const debouncedSearchTerm = useDebouncedValue(searchTerm, 500); @@ -33,7 +39,7 @@ export const DocumentSearch = ({ initialValue = '' }: { initialValue?: string }) return ( setSearchTerm(e.target.value)} /> diff --git a/apps/web/src/components/(dashboard)/settings/token/contants.ts b/apps/web/src/components/(dashboard)/settings/token/contants.ts index 232c37644..414425b25 100644 --- a/apps/web/src/components/(dashboard)/settings/token/contants.ts +++ b/apps/web/src/components/(dashboard)/settings/token/contants.ts @@ -1,7 +1,9 @@ +import { msg } from '@lingui/macro'; + export const EXPIRATION_DATES = { - ONE_WEEK: '7 days', - ONE_MONTH: '1 month', - THREE_MONTHS: '3 months', - SIX_MONTHS: '6 months', - ONE_YEAR: '12 months', + ONE_WEEK: msg`7 days`, + ONE_MONTH: msg`1 month`, + THREE_MONTHS: msg`3 months`, + SIX_MONTHS: msg`6 months`, + ONE_YEAR: msg`12 months`, } as const; diff --git a/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx b/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx index 428470dce..adaac05b0 100644 --- a/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx +++ b/apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx @@ -53,7 +53,7 @@ export default function DeleteTokenDialog({ const [isOpen, setIsOpen] = useState(false); - const deleteMessage = `delete ${token.name}`; + const deleteMessage = _(msg`delete ${token.name}`); const ZDeleteTokenDialogSchema = z.object({ tokenName: z.literal(deleteMessage, { diff --git a/apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx b/apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx index 3ba291132..62d9df9bc 100644 --- a/apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx +++ b/apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx @@ -51,7 +51,7 @@ export const DeleteWebhookDialog = ({ webhook, children }: DeleteWebhookDialogPr const [open, setOpen] = useState(false); - const deleteMessage = `delete ${webhook.webhookUrl}`; + const deleteMessage = _(msg`delete ${webhook.webhookUrl}`); const ZDeleteWebhookFormSchema = z.object({ webhookUrl: z.literal(deleteMessage, { diff --git a/apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx b/apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx index ee974a25b..3377bc989 100644 --- a/apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx +++ b/apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx @@ -47,7 +47,7 @@ export const DeleteTeamDialog = ({ trigger, teamId, teamName }: DeleteTeamDialog const { _ } = useLingui(); const { toast } = useToast(); - const deleteMessage = `delete ${teamName}`; + const deleteMessage = _(msg`delete ${teamName}`); const ZDeleteTeamFormSchema = z.object({ teamName: z.literal(deleteMessage, { diff --git a/apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx b/apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx index 0859945dc..2fb5f31bf 100644 --- a/apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx +++ b/apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx @@ -73,7 +73,7 @@ export const TransferTeamDialog = ({ teamId, }); - const confirmTransferMessage = `transfer ${teamName}`; + const confirmTransferMessage = _(msg`transfer ${teamName}`); const ZTransferTeamFormSchema = z.object({ teamName: z.literal(confirmTransferMessage, { diff --git a/apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx b/apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx index 5579535c6..a86281007 100644 --- a/apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx +++ b/apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx @@ -83,7 +83,7 @@ export const CurrentUserTeamsDataTable = () => { accessorKey: 'role', cell: ({ row }) => row.original.ownerUserId === row.original.currentTeamMember.userId - ? 'Owner' + ? _(msg`Owner`) : _(TEAM_MEMBER_ROLE_MAP[row.original.currentTeamMember.role]), }, { diff --git a/apps/web/src/components/(teams)/tables/team-members-data-table.tsx b/apps/web/src/components/(teams)/tables/team-members-data-table.tsx index fc8e28598..195c839dc 100644 --- a/apps/web/src/components/(teams)/tables/team-members-data-table.tsx +++ b/apps/web/src/components/(teams)/tables/team-members-data-table.tsx @@ -106,7 +106,7 @@ export const TeamMembersDataTable = ({ accessorKey: 'role', cell: ({ row }) => teamOwnerUserId === row.original.userId - ? 'Owner' + ? _(msg`Owner`) : _(TEAM_MEMBER_ROLE_MAP[row.original.role]), }, { diff --git a/apps/web/src/components/document/document-read-only-fields.tsx b/apps/web/src/components/document/document-read-only-fields.tsx index 84b77e0d5..9c534ca35 100644 --- a/apps/web/src/components/document/document-read-only-fields.tsx +++ b/apps/web/src/components/document/document-read-only-fields.tsx @@ -2,6 +2,7 @@ import { useState } from 'react'; +import { useLingui } from '@lingui/react'; import { EyeOffIcon } from 'lucide-react'; import { P, match } from 'ts-pattern'; @@ -12,6 +13,7 @@ import { import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; import { DEFAULT_DOCUMENT_TIME_ZONE } from '@documenso/lib/constants/time-zones'; import type { DocumentField } from '@documenso/lib/server-only/field/get-fields-for-document'; +import { parseMessageDescriptor } from '@documenso/lib/utils/i18n'; import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import type { DocumentMeta } from '@documenso/prisma/client'; import { FieldType, SigningStatus } from '@documenso/prisma/client'; @@ -28,6 +30,8 @@ export type DocumentReadOnlyFieldsProps = { }; export const DocumentReadOnlyFields = ({ documentMeta, fields }: DocumentReadOnlyFieldsProps) => { + const { _ } = useLingui(); + const [hiddenFieldIds, setHiddenFieldIds] = useState>({}); const handleHideField = (fieldId: string) => { @@ -59,7 +63,7 @@ export const DocumentReadOnlyFields = ({ documentMeta, fields }: DocumentReadOnl >

{field.Recipient.signingStatus === SigningStatus.SIGNED ? 'Signed' : 'Pending'}{' '} - {FRIENDLY_FIELD_TYPE[field.type].toLowerCase()} field + {parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[field.type]).toLowerCase()} field

@@ -127,7 +131,7 @@ export const DocumentReadOnlyFields = ({ documentMeta, fields }: DocumentReadOnl field.type === FieldType.FREE_SIGNATURE, })} > - {FRIENDLY_FIELD_TYPE[field.type]} + {parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[field.type])}

)}
diff --git a/apps/web/src/components/forms/token.tsx b/apps/web/src/components/forms/token.tsx index b042bd937..a28aa21e0 100644 --- a/apps/web/src/components/forms/token.tsx +++ b/apps/web/src/components/forms/token.tsx @@ -202,7 +202,7 @@ export const ApiTokenForm = ({ className, teamId, tokens }: ApiTokenFormProps) = {Object.entries(EXPIRATION_DATES).map(([key, date]) => ( - {date} + {_(date)} ))} diff --git a/apps/web/src/components/general/signing-disclosure.tsx b/apps/web/src/components/general/signing-disclosure.tsx index bd1ef9707..a6257d35f 100644 --- a/apps/web/src/components/general/signing-disclosure.tsx +++ b/apps/web/src/components/general/signing-disclosure.tsx @@ -2,6 +2,8 @@ import type { HTMLAttributes } from 'react'; import Link from 'next/link'; +import { Trans } from '@lingui/macro'; + import { cn } from '@documenso/ui/lib/utils'; export type SigningDisclosureProps = HTMLAttributes; @@ -9,20 +11,24 @@ export type SigningDisclosureProps = HTMLAttributes; export const SigningDisclosure = ({ className, ...props }: SigningDisclosureProps) => { return (

- By proceeding with your electronic signature, you acknowledge and consent that it will be used - to sign the given document and holds the same legal validity as a handwritten signature. By - completing the electronic signing process, you affirm your understanding and acceptance of - these conditions. + + By proceeding with your electronic signature, you acknowledge and consent that it will be + used to sign the given document and holds the same legal validity as a handwritten + signature. By completing the electronic signing process, you affirm your understanding and + acceptance of these conditions. + - Read the full{' '} - - signature disclosure - - . + + Read the full{' '} + + signature disclosure + + . +

); diff --git a/lingui.config.ts b/lingui.config.ts index 855aaf7f5..8026d461f 100644 --- a/lingui.config.ts +++ b/lingui.config.ts @@ -19,7 +19,7 @@ const config: LinguiConfig = { }, { path: '/packages/lib/translations/{locale}/common', - include: ['packages/ui', 'packages/lib'], + include: ['packages/ui', 'packages/lib', 'packages/email'], exclude: ['**/node_modules/**'], }, ], diff --git a/package-lock.json b/package-lock.json index 0432c882d..956db402e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@documenso/root", - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@documenso/root", - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "workspaces": [ "apps/*", "packages/*" @@ -80,7 +80,7 @@ }, "apps/marketing": { "name": "@documenso/marketing", - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "license": "AGPL-3.0", "dependencies": { "@documenso/assets": "*", @@ -441,7 +441,7 @@ }, "apps/web": { "name": "@documenso/web", - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "license": "AGPL-3.0", "dependencies": { "@documenso/api": "*", @@ -36774,6 +36774,9 @@ "@documenso/email": "*", "@documenso/prisma": "*", "@documenso/signing": "*", + "@lingui/core": "^4.11.3", + "@lingui/macro": "^4.11.3", + "@lingui/react": "^4.11.3", "@next-auth/prisma-adapter": "1.0.7", "@noble/ciphers": "0.4.0", "@noble/hashes": "1.3.2", diff --git a/package.json b/package.json index 2f0e6d146..1aedb4fba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "1.7.2-rc.1", + "version": "1.7.2-rc.3", "scripts": { "build": "turbo run build", "build:web": "turbo run build --filter=@documenso/web", diff --git a/packages/api/v1/implementation.ts b/packages/api/v1/implementation.ts index fc1aae04c..fda6ad1a4 100644 --- a/packages/api/v1/implementation.ts +++ b/packages/api/v1/implementation.ts @@ -301,6 +301,7 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, { dateFormat: dateFormat?.value, redirectUrl: body.meta.redirectUrl, signingOrder: body.meta.signingOrder, + language: body.meta.language, requestMetadata: extractNextApiRequestMetadata(args.req), }); diff --git a/packages/api/v1/schema.ts b/packages/api/v1/schema.ts index a6d4618ad..a4fab1089 100644 --- a/packages/api/v1/schema.ts +++ b/packages/api/v1/schema.ts @@ -2,6 +2,7 @@ import { extendZodWithOpenApi } from '@anatine/zod-openapi'; import { z } from 'zod'; import { DATE_FORMATS, DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; +import { SUPPORTED_LANGUAGE_CODES } from '@documenso/lib/constants/i18n'; import '@documenso/lib/constants/time-zones'; import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { ZUrlSchema } from '@documenso/lib/schemas/common'; @@ -127,6 +128,7 @@ export const ZCreateDocumentMutationSchema = z.object({ }), redirectUrl: z.string(), signingOrder: z.nativeEnum(DocumentSigningOrder).optional(), + language: z.enum(SUPPORTED_LANGUAGE_CODES).optional(), }) .partial(), authOptions: z @@ -181,6 +183,7 @@ export const ZCreateDocumentFromTemplateMutationSchema = z.object({ dateFormat: z.string(), redirectUrl: z.string(), signingOrder: z.nativeEnum(DocumentSigningOrder).optional(), + language: z.enum(SUPPORTED_LANGUAGE_CODES).optional(), }) .partial() .optional(), @@ -247,6 +250,7 @@ export const ZGenerateDocumentFromTemplateMutationSchema = z.object({ dateFormat: z.string(), redirectUrl: ZUrlSchema, signingOrder: z.nativeEnum(DocumentSigningOrder).optional(), + language: z.enum(SUPPORTED_LANGUAGE_CODES).optional(), }) .partial() .optional(), diff --git a/packages/email/render.ts b/packages/email/render.ts deleted file mode 100644 index 46f0d62a5..000000000 --- a/packages/email/render.ts +++ /dev/null @@ -1 +0,0 @@ -export { render, renderAsync } from '@react-email/render'; diff --git a/packages/email/render.tsx b/packages/email/render.tsx new file mode 100644 index 000000000..2a79c8252 --- /dev/null +++ b/packages/email/render.tsx @@ -0,0 +1,39 @@ +import * as reactEmail from '@react-email/render'; + +import config from '@documenso/tailwind-config'; + +import { Tailwind } from './components'; + +export const render: typeof reactEmail.render = (element, options) => { + return reactEmail.render( + + {element} + , + options, + ); +}; + +export const renderAsync: typeof reactEmail.renderAsync = async (element, options) => { + return reactEmail.renderAsync( + + {element} + , + options, + ); +}; diff --git a/packages/email/template-components/template-confirmation-email.tsx b/packages/email/template-components/template-confirmation-email.tsx index 1036faa3e..0c3c687ec 100644 --- a/packages/email/template-components/template-confirmation-email.tsx +++ b/packages/email/template-components/template-confirmation-email.tsx @@ -1,3 +1,6 @@ +import { Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + import { Button, Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -10,17 +13,21 @@ export const TemplateConfirmationEmail = ({ confirmationLink, assetBaseUrl, }: TemplateConfirmationEmailProps) => { + const { _ } = useLingui(); + return ( <>
- Welcome to Documenso! + Welcome to Documenso! - Before you get started, please confirm your email address by clicking the button below: + + Before you get started, please confirm your email address by clicking the button below: +
@@ -28,11 +35,13 @@ export const TemplateConfirmationEmail = ({ className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline" href={confirmationLink} > - Confirm email + Confirm email - You can also copy and paste this link into your browser: {confirmationLink} (link - expires in 1 hour) + + You can also copy and paste this link into your browser: {confirmationLink} (link + expires in 1 hour) +
diff --git a/packages/email/template-components/template-document-cancel.tsx b/packages/email/template-components/template-document-cancel.tsx index dff275de2..d6e1b4221 100644 --- a/packages/email/template-components/template-document-cancel.tsx +++ b/packages/email/template-components/template-document-cancel.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -19,16 +21,18 @@ export const TemplateDocumentCancel = ({
- {inviterName} has cancelled the document -
"{documentName}" + + {inviterName} has cancelled the document +
"{documentName}" +
- All signatures have been voided. + All signatures have been voided. - You don't need to sign it anymore. + You don't need to sign it anymore.
diff --git a/packages/email/template-components/template-document-completed.tsx b/packages/email/template-components/template-document-completed.tsx index 8829c8d06..ed1dfc25e 100644 --- a/packages/email/template-components/template-document-completed.tsx +++ b/packages/email/template-components/template-document-completed.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Button, Column, Img, Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -30,17 +32,17 @@ export const TemplateDocumentCompleted = ({ src={getAssetUrl('/static/completed.png')} className="-mt-0.5 mr-2 inline h-7 w-7 align-middle" /> - Completed + Completed - {customBody ?? `“${documentName}” was signed by all signers`} + {customBody ?? `“${documentName}” was signed by all signers`} - Continue by downloading the document. + Continue by downloading the document.
@@ -59,7 +61,7 @@ export const TemplateDocumentCompleted = ({ src={getAssetUrl('/static/download.png')} className="mb-0.5 mr-2 inline h-5 w-5 align-middle" /> - Download + Download
diff --git a/packages/email/template-components/template-document-invite.tsx b/packages/email/template-components/template-document-invite.tsx index 62d049e13..6f59bab2c 100644 --- a/packages/email/template-components/template-document-invite.tsx +++ b/packages/email/template-components/template-document-invite.tsx @@ -1,3 +1,6 @@ +import { Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + import { RECIPIENT_ROLES_DESCRIPTION_ENG } from '@documenso/lib/constants/recipient-roles'; import type { RecipientRole } from '@documenso/prisma/client'; @@ -26,6 +29,8 @@ export const TemplateDocumentInvite = ({ isTeamInvite, teamName, }: TemplateDocumentInviteProps) => { + const { _ } = useLingui(); + const { actionVerb, progressiveVerb } = RECIPIENT_ROLES_DESCRIPTION_ENG[role]; return ( @@ -35,28 +40,30 @@ export const TemplateDocumentInvite = ({
{selfSigner ? ( - <> - {`Please ${actionVerb.toLowerCase()} your document`} + + {`Please ${_(actionVerb).toLowerCase()} your document`}
{`"${documentName}"`} - +
) : isTeamInvite ? ( - <> - {`${inviterName} on behalf of ${teamName} has invited you to ${actionVerb.toLowerCase()}`} + + {`${inviterName} on behalf of ${teamName} has invited you to ${_( + actionVerb, + ).toLowerCase()}`}
{`"${documentName}"`} - +
) : ( - <> - {`${inviterName} has invited you to ${actionVerb.toLowerCase()}`} + + {`${inviterName} has invited you to ${_(actionVerb).toLowerCase()}`}
{`"${documentName}"`} - +
)}
- Continue by {progressiveVerb.toLowerCase()} the document. + Continue by {_(progressiveVerb).toLowerCase()} the document.
@@ -64,7 +71,7 @@ export const TemplateDocumentInvite = ({ className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline" href={signDocumentLink} > - {actionVerb} Document + {_(actionVerb)} Document
diff --git a/packages/email/template-components/template-document-pending.tsx b/packages/email/template-components/template-document-pending.tsx index f03d7bdbb..161f519dc 100644 --- a/packages/email/template-components/template-document-pending.tsx +++ b/packages/email/template-components/template-document-pending.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Column, Img, Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -26,19 +28,21 @@ export const TemplateDocumentPending = ({ src={getAssetUrl('/static/clock.png')} className="-mt-0.5 mr-2 inline h-7 w-7 align-middle" /> - Waiting for others + Waiting for others - “{documentName}” has been signed + “{documentName}” has been signed - We're still waiting for other signers to sign this document. -
- We'll notify you as soon as it's ready. + + We're still waiting for other signers to sign this document. +
+ We'll notify you as soon as it's ready. +
diff --git a/packages/email/template-components/template-document-self-signed.tsx b/packages/email/template-components/template-document-self-signed.tsx index db16fb000..f62b3e650 100644 --- a/packages/email/template-components/template-document-self-signed.tsx +++ b/packages/email/template-components/template-document-self-signed.tsx @@ -1,3 +1,4 @@ +import { Trans } from '@lingui/macro'; import { env } from 'next-runtime-env'; import { Button, Column, Img, Link, Section, Text } from '../components'; @@ -32,25 +33,27 @@ export const TemplateDocumentSelfSigned = ({ src={getAssetUrl('/static/completed.png')} className="-mt-0.5 mr-2 inline h-7 w-7 align-middle" /> - Completed + Completed - You have signed “{documentName}” + You have signed “{documentName}” - Create a{' '} - - free account - {' '} - to access your signed documents at any time. + + Create a{' '} + + free account + {' '} + to access your signed documents at any time. +
@@ -62,7 +65,7 @@ export const TemplateDocumentSelfSigned = ({ src={getAssetUrl('/static/user-plus.png')} className="mb-0.5 mr-2 inline h-5 w-5 align-middle" /> - Create account + Create account
diff --git a/packages/email/template-components/template-document-super-delete.tsx b/packages/email/template-components/template-document-super-delete.tsx index 9cb0a9e71..b26a6f105 100644 --- a/packages/email/template-components/template-document-super-delete.tsx +++ b/packages/email/template-components/template-document-super-delete.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -18,20 +20,22 @@ export const TemplateDocumentDelete = ({
- Your document has been deleted by an admin! + Your document has been deleted by an admin! - "{documentName}" has been deleted by an admin. + "{documentName}" has been deleted by an admin. - This document can not be recovered, if you would like to dispute the reason for future - documents please contact support. + + This document can not be recovered, if you would like to dispute the reason for future + documents please contact support. + - The reason provided for deletion is the following: + The reason provided for deletion is the following: diff --git a/packages/email/template-components/template-footer.tsx b/packages/email/template-components/template-footer.tsx index 34cd4047e..36ecbb950 100644 --- a/packages/email/template-components/template-footer.tsx +++ b/packages/email/template-components/template-footer.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Link, Section, Text } from '../components'; export type TemplateFooterProps = { @@ -9,10 +11,12 @@ export const TemplateFooter = ({ isDocument = true }: TemplateFooterProps) => {
{isDocument && ( - This document was sent using{' '} - - Documenso. - + + This document was sent using{' '} + + Documenso. + + )} diff --git a/packages/email/template-components/template-forgot-password.tsx b/packages/email/template-components/template-forgot-password.tsx index c8227b2bd..1ab319a43 100644 --- a/packages/email/template-components/template-forgot-password.tsx +++ b/packages/email/template-components/template-forgot-password.tsx @@ -1,3 +1,5 @@ +import { Trans } from '@lingui/macro'; + import { Button, Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; @@ -16,11 +18,11 @@ export const TemplateForgotPassword = ({
- Forgot your password? + Forgot your password? - That's okay, it happens! Click the button below to reset your password. + That's okay, it happens! Click the button below to reset your password.
@@ -28,7 +30,7 @@ export const TemplateForgotPassword = ({ className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline" href={resetPasswordLink} > - Reset Password + Reset Password
diff --git a/packages/email/template-components/template-reset-password.tsx b/packages/email/template-components/template-reset-password.tsx index d05393c83..d264385e4 100644 --- a/packages/email/template-components/template-reset-password.tsx +++ b/packages/email/template-components/template-reset-password.tsx @@ -1,3 +1,4 @@ +import { Trans } from '@lingui/macro'; import { env } from 'next-runtime-env'; import { Button, Section, Text } from '../components'; @@ -18,11 +19,11 @@ export const TemplateResetPassword = ({ assetBaseUrl }: TemplateResetPasswordPro
- Password updated! + Password updated! - Your password has been updated. + Your password has been updated.
@@ -30,7 +31,7 @@ export const TemplateResetPassword = ({ assetBaseUrl }: TemplateResetPasswordPro className="bg-documenso-500 inline-flex items-center justify-center rounded-lg px-6 py-3 text-center text-sm font-medium text-black no-underline" href={`${NEXT_PUBLIC_WEBAPP_URL ?? 'http://localhost:3000'}/signin`} > - Sign In + Sign In
diff --git a/packages/email/templates/confirm-email.tsx b/packages/email/templates/confirm-email.tsx index 59c7add10..4d39f12d6 100644 --- a/packages/email/templates/confirm-email.tsx +++ b/packages/email/templates/confirm-email.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Html, Img, Preview, Section } from '../components'; import type { TemplateConfirmationEmailProps } from '../template-components/template-confirmation-email'; import { TemplateConfirmationEmail } from '../template-components/template-confirmation-email'; import { TemplateFooter } from '../template-components/template-footer'; @@ -9,7 +10,9 @@ export const ConfirmEmailTemplate = ({ confirmationLink, assetBaseUrl = 'http://localhost:3002', }: TemplateConfirmationEmailProps) => { - const previewText = `Please confirm your email address`; + const { _ } = useLingui(); + + const previewText = msg`Please confirm your email address`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -18,40 +21,30 @@ export const ConfirmEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} + +
+ +
+ Documenso Logo - -
-
-
+ +
+ +
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/confirm-team-email.tsx b/packages/email/templates/confirm-team-email.tsx index 552a079f8..8fa3afd3d 100644 --- a/packages/email/templates/confirm-team-email.tsx +++ b/packages/email/templates/confirm-team-email.tsx @@ -1,5 +1,7 @@ +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; import { Body, @@ -11,7 +13,6 @@ import { Link, Preview, Section, - Tailwind, Text, } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; @@ -32,97 +33,90 @@ export const ConfirmTeamEmailTemplate = ({ teamUrl = 'demo', token = '', }: ConfirmTeamEmailProps) => { - const previewText = `Accept team email request for ${teamName} on Documenso`; + const { _ } = useLingui(); + + const previewText = msg`Accept team email request for ${teamName} on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
+
+ + Verify your team email address + -
- - Verify your team email address + + {teamName} has requested to use your email + address for their team on Documenso. + + +
+ {formatTeamUrl(teamUrl, baseUrl)} +
+ +
+ + By accepting this request, you will be granting {teamName} access + to: - - {teamName} has requested to use your email - address for their team on Documenso. +
    +
  • + View all documents sent to and from this email address +
  • +
  • + Allow document recipients to reply directly to this email address +
  • +
  • + Send documents on behalf of the team using the email address +
  • +
+ + + You can revoke access at any time in your team settings on Documenso{' '} + here. - -
- {formatTeamUrl(teamUrl, baseUrl)} -
- -
- - By accepting this request, you will be granting {teamName}{' '} - access to: - - -
    -
  • - View all documents sent to and from this email address -
  • -
  • - Allow document recipients to reply directly to this email address -
  • -
  • - Send documents on behalf of the team using the email address -
  • -
- - - You can revoke access at any time in your team settings on Documenso{' '} - here. - -
- -
- -
- Link expires in 1 hour. - +
+ +
+
-
+ Link expires in 1 hour. + - - - -
- - +
+ + + + +
+ ); }; diff --git a/packages/email/templates/document-cancel.tsx b/packages/email/templates/document-cancel.tsx index 66892bccc..edaec133b 100644 --- a/packages/email/templates/document-cancel.tsx +++ b/packages/email/templates/document-cancel.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Hr, Html, Img, Preview, Section } from '../components'; import type { TemplateDocumentCancelProps } from '../template-components/template-document-cancel'; import { TemplateDocumentCancel } from '../template-components/template-document-cancel'; import { TemplateFooter } from '../template-components/template-footer'; @@ -13,7 +14,9 @@ export const DocumentCancelTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', }: DocumentCancelEmailTemplateProps) => { - const previewText = `${inviterName} has cancelled the document ${documentName}, you don't need to sign it anymore.`; + const { _ } = useLingui(); + + const previewText = msg`${inviterName} has cancelled the document ${documentName}, you don't need to sign it anymore.`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -22,43 +25,34 @@ export const DocumentCancelTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo -
+ +
+
- - - -
- - +
+ + + + +
+ ); }; diff --git a/packages/email/templates/document-completed.tsx b/packages/email/templates/document-completed.tsx index 5e23be873..b1ad6fc3a 100644 --- a/packages/email/templates/document-completed.tsx +++ b/packages/email/templates/document-completed.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Html, Img, Preview, Section } from '../components'; import type { TemplateDocumentCompletedProps } from '../template-components/template-document-completed'; import { TemplateDocumentCompleted } from '../template-components/template-document-completed'; import { TemplateFooter } from '../template-components/template-footer'; @@ -15,7 +16,9 @@ export const DocumentCompletedEmailTemplate = ({ assetBaseUrl = 'http://localhost:3002', customBody, }: DocumentCompletedEmailTemplateProps) => { - const previewText = `Completed Document`; + const { _ } = useLingui(); + + const previewText = msg`Completed Document`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -24,41 +27,32 @@ export const DocumentCompletedEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo - - - -
- - + +
+ + + + + +
+ ); }; diff --git a/packages/email/templates/document-created-from-direct-template.tsx b/packages/email/templates/document-created-from-direct-template.tsx index 68ad3363b..63d46c9b8 100644 --- a/packages/email/templates/document-created-from-direct-template.tsx +++ b/packages/email/templates/document-created-from-direct-template.tsx @@ -1,18 +1,9 @@ -import { RECIPIENT_ROLES_DESCRIPTION_ENG } from '@documenso/lib/constants/recipient-roles'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { - Body, - Button, - Container, - Head, - Html, - Img, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { RECIPIENT_ROLES_DESCRIPTION_ENG } from '@documenso/lib/constants/recipient-roles'; + +import { Body, Button, Container, Head, Html, Img, Preview, Section, Text } from '../components'; import TemplateDocumentImage from '../template-components/template-document-image'; import { TemplateFooter } from '../template-components/template-footer'; import { RecipientRole } from '.prisma/client'; @@ -32,9 +23,11 @@ export const DocumentCreatedFromDirectTemplateEmailTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', }: DocumentCompletedEmailTemplateProps) => { - const action = RECIPIENT_ROLES_DESCRIPTION_ENG[recipientRole].actioned.toLowerCase(); + const { _ } = useLingui(); - const previewText = `Document created from direct template`; + const action = _(RECIPIENT_ROLES_DESCRIPTION_ENG[recipientRole].actioned).toLowerCase(); + + const previewText = msg`Document created from direct template`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -43,55 +36,48 @@ export const DocumentCreatedFromDirectTemplateEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - + +
+ +
+ Documenso Logo -
- + + +
+ + {recipientName} {action} a document by using one of your direct links - + + -
- {documentName} -
+
+ {documentName} +
-
- -
+
+
- +
+ - - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/document-invite.tsx b/packages/email/templates/document-invite.tsx index 30c6ae960..edfd525f1 100644 --- a/packages/email/templates/document-invite.tsx +++ b/packages/email/templates/document-invite.tsx @@ -1,20 +1,10 @@ +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + import { RECIPIENT_ROLES_DESCRIPTION_ENG } from '@documenso/lib/constants/recipient-roles'; import type { RecipientRole } from '@documenso/prisma/client'; -import config from '@documenso/tailwind-config'; -import { - Body, - Container, - Head, - Hr, - Html, - Img, - Link, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { Body, Container, Head, Hr, Html, Img, Link, Preview, Section, Text } from '../components'; import type { TemplateDocumentInviteProps } from '../template-components/template-document-invite'; import { TemplateDocumentInvite } from '../template-components/template-document-invite'; import { TemplateFooter } from '../template-components/template-footer'; @@ -40,13 +30,15 @@ export const DocumentInviteEmailTemplate = ({ isTeamInvite = false, teamName, }: DocumentInviteEmailTemplateProps) => { - const action = RECIPIENT_ROLES_DESCRIPTION_ENG[role].actionVerb.toLowerCase(); + const { _ } = useLingui(); + + const action = _(RECIPIENT_ROLES_DESCRIPTION_ENG[role].actionVerb).toLowerCase(); const previewText = selfSigner - ? `Please ${action} your document ${documentName}` + ? msg`Please ${action} your document ${documentName}` : isTeamInvite - ? `${inviterName} on behalf of ${teamName} has invited you to ${action} ${documentName}` - : `${inviterName} has invited you to ${action} ${documentName}`; + ? msg`${inviterName} on behalf of ${teamName} has invited you to ${action} ${documentName}` + : msg`${inviterName} has invited you to ${action} ${documentName}`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -55,67 +47,62 @@ export const DocumentInviteEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo - -
- + +
+
+ + +
+ + {inviterName}{' '} ({inviterEmail}) - + + - - {customBody ? ( -
{customBody}
- ) : ( + + {customBody ? ( +
{customBody}
+ ) : ( + `${inviterName} has invited you to ${action} the document "${documentName}".` - )} -
-
-
+ + )} + +
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/document-pending.tsx b/packages/email/templates/document-pending.tsx index f14671e10..2073e491b 100644 --- a/packages/email/templates/document-pending.tsx +++ b/packages/email/templates/document-pending.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Html, Img, Preview, Section } from '../components'; import type { TemplateDocumentPendingProps } from '../template-components/template-document-pending'; import { TemplateDocumentPending } from '../template-components/template-document-pending'; import { TemplateFooter } from '../template-components/template-footer'; @@ -11,7 +12,9 @@ export const DocumentPendingEmailTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', }: DocumentPendingEmailTemplateProps) => { - const previewText = `Pending Document`; + const { _ } = useLingui(); + + const previewText = msg`Pending Document`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -20,36 +23,27 @@ export const DocumentPendingEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo - - - -
- - + +
+ + + + + +
+ ); }; diff --git a/packages/email/templates/document-self-signed.tsx b/packages/email/templates/document-self-signed.tsx index aa1c89b10..db9d44495 100644 --- a/packages/email/templates/document-self-signed.tsx +++ b/packages/email/templates/document-self-signed.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Html, Img, Preview, Section } from '../components'; import type { TemplateDocumentSelfSignedProps } from '../template-components/template-document-self-signed'; import { TemplateDocumentSelfSigned } from '../template-components/template-document-self-signed'; import { TemplateFooter } from '../template-components/template-footer'; @@ -11,7 +12,9 @@ export const DocumentSelfSignedEmailTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', }: DocumentSelfSignedTemplateProps) => { - const previewText = `Completed Document`; + const { _ } = useLingui(); + + const previewText = msg`Completed Document`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -20,39 +23,27 @@ export const DocumentSelfSignedEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo - - - -
- - + +
+ + + + + +
+ ); }; diff --git a/packages/email/templates/document-super-delete.tsx b/packages/email/templates/document-super-delete.tsx index 68384e119..bddc85dc4 100644 --- a/packages/email/templates/document-super-delete.tsx +++ b/packages/email/templates/document-super-delete.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Hr, Html, Img, Preview, Section } from '../components'; import { TemplateDocumentDelete, type TemplateDocumentDeleteProps, @@ -14,7 +15,9 @@ export const DocumentSuperDeleteEmailTemplate = ({ assetBaseUrl = 'http://localhost:3002', reason = 'Unknown', }: DocumentDeleteEmailTemplateProps) => { - const previewText = `An admin has deleted your document "${documentName}".`; + const { _ } = useLingui(); + + const previewText = msg`An admin has deleted your document "${documentName}".`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -23,42 +26,33 @@ export const DocumentSuperDeleteEmailTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo -
+ +
+
- - - -
- - +
+ + + + +
+ ); }; diff --git a/packages/email/templates/forgot-password.tsx b/packages/email/templates/forgot-password.tsx index 7fe62cd20..531ec2ee6 100644 --- a/packages/email/templates/forgot-password.tsx +++ b/packages/email/templates/forgot-password.tsx @@ -1,6 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components'; +import { Body, Container, Head, Html, Img, Preview, Section } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import type { TemplateForgotPasswordProps } from '../template-components/template-forgot-password'; import { TemplateForgotPassword } from '../template-components/template-forgot-password'; @@ -11,7 +12,9 @@ export const ForgotPasswordTemplate = ({ resetPasswordLink = 'https://documenso.com', assetBaseUrl = 'http://localhost:3002', }: ForgotPasswordTemplateProps) => { - const previewText = `Password Reset Requested`; + const { _ } = useLingui(); + + const previewText = msg`Password Reset Requested`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -20,41 +23,32 @@ export const ForgotPasswordTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo -
+ +
+
- - - -
- - +
+ + + + +
+ ); }; diff --git a/packages/email/templates/recipient-removed-from-document.tsx b/packages/email/templates/recipient-removed-from-document.tsx index 4fa22a28e..2ba19dc03 100644 --- a/packages/email/templates/recipient-removed-from-document.tsx +++ b/packages/email/templates/recipient-removed-from-document.tsx @@ -1,17 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { - Body, - Container, - Head, - Hr, - Html, - Img, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { Body, Container, Head, Hr, Html, Img, Preview, Section, Text } from '../components'; import type { TemplateDocumentCancelProps } from '../template-components/template-document-cancel'; import TemplateDocumentImage from '../template-components/template-document-image'; import { TemplateFooter } from '../template-components/template-footer'; @@ -23,7 +13,9 @@ export const RecipientRemovedFromDocumentTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', }: DocumentCancelEmailTemplateProps) => { - const previewText = `${inviterName} has removed you from the document ${documentName}.`; + const { _ } = useLingui(); + + const previewText = msg`${inviterName} has removed you from the document ${documentName}.`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -32,45 +24,36 @@ export const RecipientRemovedFromDocumentTemplate = ({ return ( - {previewText} - - -
- + {_(previewText)} + + +
+ +
+ Documenso Logo + + +
- Documenso Logo - - - -
- - {inviterName} has removed you from the document -
"{documentName}" -
-
+ + {inviterName} has removed you from the document +
"{documentName}" +
- +
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/reset-password.tsx b/packages/email/templates/reset-password.tsx index c6c1201c6..2c73e50b8 100644 --- a/packages/email/templates/reset-password.tsx +++ b/packages/email/templates/reset-password.tsx @@ -1,18 +1,7 @@ -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { - Body, - Container, - Head, - Hr, - Html, - Img, - Link, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { Body, Container, Head, Hr, Html, Img, Link, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import type { TemplateResetPasswordProps } from '../template-components/template-reset-password'; import { TemplateResetPassword } from '../template-components/template-reset-password'; @@ -24,7 +13,9 @@ export const ResetPasswordTemplate = ({ userEmail = 'lucas@documenso.com', assetBaseUrl = 'http://localhost:3002', }: ResetPasswordTemplateProps) => { - const previewText = `Password Reset Successful`; + const { _ } = useLingui(); + + const previewText = msg`Password Reset Successful`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -33,65 +24,62 @@ export const ResetPasswordTemplate = ({ return ( - {previewText} - - -
- -
- Documenso Logo + {_(previewText)} - -
-
+ +
+ +
+ Documenso Logo - -
- + +
+
+ + +
+ + Hi, {userName}{' '} ({userEmail}) - + + - + + We've changed your password as you asked. You can now sign in with your new password. - - + + + + Didn't request a password change? We are here to help you secure your account, just{' '} contact us. - -
-
+ + +
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-delete.tsx b/packages/email/templates/team-delete.tsx index 240757338..9f44f6724 100644 --- a/packages/email/templates/team-delete.tsx +++ b/packages/email/templates/team-delete.tsx @@ -1,7 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Preview, Section, Tailwind, Text } from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -18,67 +20,60 @@ export const TeamDeleteEmailTemplate = ({ teamUrl = 'demo', isOwner = false, }: TeamDeleteEmailProps) => { + const { _ } = useLingui(); + const previewText = isOwner - ? 'Your team has been deleted' - : 'A team you were a part of has been deleted'; + ? msg`Your team has been deleted` + : msg`A team you were a part of has been deleted`; const title = isOwner - ? 'Your team has been deleted' - : 'A team you were a part of has been deleted'; + ? msg`Your team has been deleted` + : msg`A team you were a part of has been deleted`; const description = isOwner - ? 'The following team has been deleted by you' - : 'The following team has been deleted by its owner. You will no longer be able to access this team and its documents'; + ? msg`The following team has been deleted by you` + : msg`The following team has been deleted by its owner. You will no longer be able to access this team and its documents`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
+
+ {_(title)} -
- {title} + {_(description)} - {description} +
+ {formatTeamUrl(teamUrl, baseUrl)} +
+
+ -
- {formatTeamUrl(teamUrl, baseUrl)} -
-
-
+
-
- - - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-email-removed.tsx b/packages/email/templates/team-email-removed.tsx index 0a143d1b9..c78de5a0b 100644 --- a/packages/email/templates/team-email-removed.tsx +++ b/packages/email/templates/team-email-removed.tsx @@ -1,7 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Preview, Section, Tailwind, Text } from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -20,62 +22,57 @@ export const TeamEmailRemovedTemplate = ({ teamName = 'Team Name', teamUrl = 'demo', }: TeamEmailRemovedTemplateProps) => { - const previewText = `Team email removed for ${teamName} on Documenso`; + const { _ } = useLingui(); + + const previewText = msg`Team email removed for ${teamName} on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
+
+ + Team email removed + -
- - Team email removed - - - + + The team email {teamEmail} has been removed from the following team - + + -
- {formatTeamUrl(teamUrl, baseUrl)} -
-
- +
+ {formatTeamUrl(teamUrl, baseUrl)} +
+
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-invite.tsx b/packages/email/templates/team-invite.tsx index 3c062c4c8..33bcd058a 100644 --- a/packages/email/templates/team-invite.tsx +++ b/packages/email/templates/team-invite.tsx @@ -1,18 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { - Body, - Button, - Container, - Head, - Hr, - Html, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Button, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -33,80 +24,75 @@ export const TeamInviteEmailTemplate = ({ teamUrl = 'demo', token = '', }: TeamInviteEmailProps) => { - const previewText = `Accept invitation to join a team on Documenso`; + const { _ } = useLingui(); + + const previewText = msg`Accept invitation to join a team on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
+
+ + Join {teamName} on Documenso + -
- - Join {teamName} on Documenso - + + You have been invited to join the following team + - - You have been invited to join the following team - +
+ {formatTeamUrl(teamUrl, baseUrl)} +
-
- {formatTeamUrl(teamUrl, baseUrl)} -
- - + + by {senderName} - + + -
- - -
+
+ +
- +
+ -
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-join.tsx b/packages/email/templates/team-join.tsx index b3c1efc2f..ce463602a 100644 --- a/packages/email/templates/team-join.tsx +++ b/packages/email/templates/team-join.tsx @@ -1,7 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Preview, Section, Tailwind, Text } from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -22,61 +24,56 @@ export const TeamJoinEmailTemplate = ({ teamName = 'Team Name', teamUrl = 'demo', }: TeamJoinEmailProps) => { - const previewText = 'A team member has joined a team on Documenso'; + const { _ } = useLingui(); + + const previewText = msg`A team member has joined a team on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
- -
- +
+ + {memberName || memberEmail} joined the team {teamName} on Documenso - + + - - {memberEmail} joined the following team - + + {memberEmail} joined the following team + -
- {formatTeamUrl(teamUrl, baseUrl)} -
-
- +
+ {formatTeamUrl(teamUrl, baseUrl)} +
+
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-leave.tsx b/packages/email/templates/team-leave.tsx index 51b9aaab1..1cd18446e 100644 --- a/packages/email/templates/team-leave.tsx +++ b/packages/email/templates/team-leave.tsx @@ -1,7 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { Body, Container, Head, Hr, Html, Preview, Section, Tailwind, Text } from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -22,61 +24,56 @@ export const TeamLeaveEmailTemplate = ({ teamName = 'Team Name', teamUrl = 'demo', }: TeamLeaveEmailProps) => { - const previewText = 'A team member has left a team on Documenso'; + const { _ } = useLingui(); + + const previewText = msg`A team member has left a team on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
- -
- +
+ + {memberName || memberEmail} left the team {teamName} on Documenso - + + - - {memberEmail} left the following team - + + {memberEmail} left the following team + -
- {formatTeamUrl(teamUrl, baseUrl)} -
-
- +
+ {formatTeamUrl(teamUrl, baseUrl)} +
+
+
-
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/email/templates/team-transfer-request.tsx b/packages/email/templates/team-transfer-request.tsx index 82723226c..480274efb 100644 --- a/packages/email/templates/team-transfer-request.tsx +++ b/packages/email/templates/team-transfer-request.tsx @@ -1,18 +1,9 @@ -import { formatTeamUrl } from '@documenso/lib/utils/teams'; -import config from '@documenso/tailwind-config'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; -import { - Body, - Button, - Container, - Head, - Hr, - Html, - Preview, - Section, - Tailwind, - Text, -} from '../components'; +import { formatTeamUrl } from '@documenso/lib/utils/teams'; + +import { Body, Button, Container, Head, Hr, Html, Preview, Section, Text } from '../components'; import { TemplateFooter } from '../template-components/template-footer'; import TemplateImage from '../template-components/template-image'; @@ -33,78 +24,77 @@ export const TeamTransferRequestTemplate = ({ teamUrl = 'demo', token = '', }: TeamTransferRequestTemplateProps) => { - const previewText = 'Accept team transfer request on Documenso'; + const { _ } = useLingui(); + + const previewText = msg`Accept team transfer request on Documenso`; return ( - {previewText} - - -
- + {_(previewText)} + + +
+ + + +
+
-
- -
+
+ + {teamName} ownership transfer request + -
- - {teamName} ownership transfer request - - - + + {senderName} has requested that you take ownership of the following team - + + -
- {formatTeamUrl(teamUrl, baseUrl)} -
+
+ {formatTeamUrl(teamUrl, baseUrl)} +
- + + By accepting this request, you will take responsibility for any billing items associated with this team. - + + -
- -
+
+
+
- Link expires in 1 hour. - + + Link expires in 1 hour. + + -
+
- - - -
- - + + + +
+ ); }; diff --git a/packages/lib/client-only/providers/i18n.server.tsx b/packages/lib/client-only/providers/i18n.server.tsx index 8ee89f3de..9acca3119 100644 --- a/packages/lib/client-only/providers/i18n.server.tsx +++ b/packages/lib/client-only/providers/i18n.server.tsx @@ -7,58 +7,94 @@ import { setupI18n } from '@lingui/core'; import { setI18n } from '@lingui/react/server'; import { IS_APP_WEB } from '../../constants/app'; -import { SUPPORTED_LANGUAGE_CODES } from '../../constants/i18n'; +import { + APP_I18N_OPTIONS, + SUPPORTED_LANGUAGE_CODES, + isValidLanguageCode, +} from '../../constants/i18n'; import { extractLocaleData } from '../../utils/i18n'; +import { remember } from '../../utils/remember'; type SupportedLanguages = (typeof SUPPORTED_LANGUAGE_CODES)[number]; -async function loadCatalog(lang: SupportedLanguages): Promise<{ +export async function loadCatalog(lang: SupportedLanguages): Promise<{ [k: string]: Messages; }> { const extension = process.env.NODE_ENV === 'development' ? 'po' : 'js'; const context = IS_APP_WEB ? 'web' : 'marketing'; - const { messages } = await import(`../../translations/${lang}/${context}.${extension}`); + let { messages } = await import(`../../translations/${lang}/${context}.${extension}`); + + if (extension === 'po') { + const { messages: commonMessages } = await import( + `../../translations/${lang}/common.${extension}` + ); + + messages = { ...messages, ...commonMessages }; + } return { [lang]: messages, }; } -const catalogs = await Promise.all(SUPPORTED_LANGUAGE_CODES.map(loadCatalog)); +const catalogs = Promise.all(SUPPORTED_LANGUAGE_CODES.map(loadCatalog)); // transform array of catalogs into a single object -export const allMessages = catalogs.reduce((acc, oneCatalog) => { - return { ...acc, ...oneCatalog }; -}, {}); +const allMessages = async () => { + return await catalogs.then((catalogs) => + catalogs.reduce((acc, oneCatalog) => { + return { + ...acc, + ...oneCatalog, + }; + }, {}), + ); +}; type AllI18nInstances = { [K in SupportedLanguages]: I18n }; // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -export const allI18nInstances = SUPPORTED_LANGUAGE_CODES.reduce((acc, lang) => { - const messages = allMessages[lang] ?? {}; +export const allI18nInstances = remember('i18n.allI18nInstances', async () => { + const loadedMessages = await allMessages(); - const i18n = setupI18n({ - locale: lang, - messages: { [lang]: messages }, - }); + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + return SUPPORTED_LANGUAGE_CODES.reduce((acc, lang) => { + const messages = loadedMessages[lang] ?? {}; - return { ...acc, [lang]: i18n }; -}, {}) as AllI18nInstances; + const i18n = setupI18n({ + locale: lang, + messages: { [lang]: messages }, + }); + + return { ...acc, [lang]: i18n }; + }, {}) as AllI18nInstances; +}); + +// eslint-disable-next-line @typescript-eslint/ban-types +export const getI18nInstance = async (lang?: SupportedLanguages | (string & {})) => { + const instances = await allI18nInstances; + + if (!isValidLanguageCode(lang)) { + return instances[APP_I18N_OPTIONS.sourceLang]; + } + + return instances[lang] ?? instances[APP_I18N_OPTIONS.sourceLang]; +}; /** * This needs to be run in all layouts and page server components that require i18n. * * https://lingui.dev/tutorials/react-rsc#pages-layouts-and-lingui */ -export const setupI18nSSR = () => { +export const setupI18nSSR = async () => { const { lang, locales } = extractLocaleData({ cookies: cookies(), headers: headers(), }); // Get and set a ready-made i18n instance for the given language. - const i18n = allI18nInstances[lang]; + const i18n = await getI18nInstance(lang); // Reactivate the i18n instance with the locale for date and number formatting. i18n.activate(lang, locales); diff --git a/packages/lib/constants/i18n.ts b/packages/lib/constants/i18n.ts index a54990e09..b3c8a8954 100644 --- a/packages/lib/constants/i18n.ts +++ b/packages/lib/constants/i18n.ts @@ -47,3 +47,6 @@ export const SUPPORTED_LANGUAGES: Record = { short: 'es', }, } satisfies Record; + +export const isValidLanguageCode = (code: unknown): code is SupportedLanguageCodes => + SUPPORTED_LANGUAGE_CODES.includes(code as SupportedLanguageCodes); diff --git a/packages/lib/constants/recipient-roles.ts b/packages/lib/constants/recipient-roles.ts index ba099ceea..9a3eefe1c 100644 --- a/packages/lib/constants/recipient-roles.ts +++ b/packages/lib/constants/recipient-roles.ts @@ -41,31 +41,35 @@ export const RECIPIENT_ROLES_DESCRIPTION_ENG = { actioned: `Approved`, progressiveVerb: `Approving`, roleName: `Approver`, + roleNamePlural: msg`Approvers`, }, [RecipientRole.CC]: { actionVerb: `CC`, actioned: `CC'd`, progressiveVerb: `CC`, roleName: `Cc`, + roleNamePlural: msg`Ccers`, }, [RecipientRole.SIGNER]: { actionVerb: `Sign`, actioned: `Signed`, progressiveVerb: `Signing`, roleName: `Signer`, + roleNamePlural: msg`Signers`, }, [RecipientRole.VIEWER]: { actionVerb: `View`, actioned: `Viewed`, progressiveVerb: `Viewing`, roleName: `Viewer`, + roleNamePlural: msg`Viewers`, }, } satisfies Record; export const RECIPIENT_ROLE_TO_EMAIL_TYPE = { - [RecipientRole.SIGNER]: 'SIGNING_REQUEST', - [RecipientRole.VIEWER]: 'VIEW_REQUEST', - [RecipientRole.APPROVER]: 'APPROVE_REQUEST', + [RecipientRole.SIGNER]: `SIGNING_REQUEST`, + [RecipientRole.VIEWER]: `VIEW_REQUEST`, + [RecipientRole.APPROVER]: `APPROVE_REQUEST`, } as const; export const RECIPIENT_ROLE_SIGNING_REASONS = { diff --git a/packages/lib/jobs/client/local.ts b/packages/lib/jobs/client/local.ts index a0405dbf1..d5ba58f83 100644 --- a/packages/lib/jobs/client/local.ts +++ b/packages/lib/jobs/client/local.ts @@ -43,18 +43,10 @@ export class LocalJobProvider extends BaseJobProvider { } public async triggerJob(options: SimpleTriggerJobOptions) { - console.log({ jobDefinitions: this._jobDefinitions }); - const eligibleJobs = Object.values(this._jobDefinitions).filter( (job) => job.trigger.name === options.name, ); - console.log({ options }); - console.log( - 'Eligible jobs:', - eligibleJobs.map((job) => job.name), - ); - await Promise.all( eligibleJobs.map(async (job) => { // Ideally we will change this to a createMany with returning later once we upgrade Prisma diff --git a/packages/lib/jobs/definitions/emails/send-signing-email.ts b/packages/lib/jobs/definitions/emails/send-signing-email.ts index beab38cab..34d1a8422 100644 --- a/packages/lib/jobs/definitions/emails/send-signing-email.ts +++ b/packages/lib/jobs/definitions/emails/send-signing-email.ts @@ -1,9 +1,9 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; import { z } from 'zod'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import DocumentInviteEmailTemplate from '@documenso/email/templates/document-invite'; import { prisma } from '@documenso/prisma'; import { @@ -13,6 +13,7 @@ import { SendStatus, } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../../constants/email'; import { @@ -23,6 +24,7 @@ import { DOCUMENT_AUDIT_LOG_TYPE } from '../../../types/document-audit-logs'; import { ZRequestMetadataSchema } from '../../../universal/extract-request-metadata'; import { createDocumentAuditLogData } from '../../../utils/document-audit-logs'; import { renderCustomEmailTemplate } from '../../../utils/render-custom-email-template'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; import { type JobDefinition } from '../../client/_internal/job'; const SEND_SIGNING_EMAIL_JOB_DEFINITION_ID = 'send.signing.requested.email'; @@ -90,22 +92,32 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { const recipientActionVerb = RECIPIENT_ROLES_DESCRIPTION_ENG[recipient.role].actionVerb.toLowerCase(); + const i18n = await getI18nInstance(documentMeta?.language); + let emailMessage = customEmail?.message || ''; - let emailSubject = `Please ${recipientActionVerb} this document`; + let emailSubject = i18n._(msg`Please ${recipientActionVerb} this document`); if (selfSigner) { - emailMessage = `You have initiated the document ${`"${document.title}"`} that requires you to ${recipientActionVerb} it.`; - emailSubject = `Please ${recipientActionVerb} your document`; + emailMessage = i18n._( + msg`You have initiated the document ${`"${document.title}"`} that requires you to ${recipientActionVerb} it.`, + ); + emailSubject = i18n._(msg`Please ${recipientActionVerb} your document`); } if (isDirectTemplate) { - emailMessage = `A document was created by your direct template that requires you to ${recipientActionVerb} it.`; - emailSubject = `Please ${recipientActionVerb} this document created by your direct template`; + emailMessage = i18n._( + msg`A document was created by your direct template that requires you to ${recipientActionVerb} it.`, + ); + emailSubject = i18n._( + msg`Please ${recipientActionVerb} this document created by your direct template`, + ); } if (isTeamDocument && team) { - emailSubject = `${team.name} invited you to ${recipientActionVerb} a document`; - emailMessage = `${user.name} on behalf of ${team.name} has invited you to ${recipientActionVerb} the document "${document.title}".`; + emailSubject = i18n._(msg`${team.name} invited you to ${recipientActionVerb} a document`); + emailMessage = i18n._( + msg`${user.name} on behalf of ${team.name} has invited you to ${recipientActionVerb} the document "${document.title}".`, + ); } const customEmailTemplate = { @@ -132,6 +144,14 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { }); await io.runTask('send-signing-email', async () => { + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: documentMeta?.language }), + renderEmailWithI18N(template, { + lang: documentMeta?.language, + plainText: true, + }), + ]); + await mailer.sendMail({ to: { name: recipient.name, @@ -145,8 +165,8 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { documentMeta?.subject || emailSubject, customEmailTemplate, ), - html: render(template), - text: render(template, { plainText: true }), + html, + text, }); }); diff --git a/packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts b/packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts index c5afa1cd3..94362820e 100644 --- a/packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts +++ b/packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts @@ -1,13 +1,15 @@ +import { msg } from '@lingui/macro'; import { z } from 'zod'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import TeamJoinEmailTemplate from '@documenso/email/templates/team-join'; import { prisma } from '@documenso/prisma'; import { TeamMemberRole } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../../client-only/providers/i18n.server'; import { WEBAPP_BASE_URL } from '../../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../../constants/email'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; import type { JobDefinition } from '../../client/_internal/job'; const SEND_TEAM_MEMBER_JOINED_EMAIL_JOB_DEFINITION_ID = 'send.team-member-joined.email'; @@ -71,15 +73,23 @@ export const SEND_TEAM_MEMBER_JOINED_EMAIL_JOB_DEFINITION = { teamUrl: team.url, }); + // !: Replace with the actual language of the recipient later + const [html, text] = await Promise.all([ + renderEmailWithI18N(emailContent), + renderEmailWithI18N(emailContent, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: member.user.email, from: { name: FROM_NAME, address: FROM_ADDRESS, }, - subject: 'A new member has joined your team', - html: render(emailContent), - text: render(emailContent, { plainText: true }), + subject: i18n._(msg`A new member has joined your team`), + html, + text, }); }, ); diff --git a/packages/lib/jobs/definitions/emails/send-team-member-left-email.ts b/packages/lib/jobs/definitions/emails/send-team-member-left-email.ts index 55e5ab1e6..7e1b33d6f 100644 --- a/packages/lib/jobs/definitions/emails/send-team-member-left-email.ts +++ b/packages/lib/jobs/definitions/emails/send-team-member-left-email.ts @@ -1,13 +1,15 @@ +import { msg } from '@lingui/macro'; import { z } from 'zod'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import TeamJoinEmailTemplate from '@documenso/email/templates/team-join'; import { prisma } from '@documenso/prisma'; import { TeamMemberRole } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../../client-only/providers/i18n.server'; import { WEBAPP_BASE_URL } from '../../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../../constants/email'; +import { renderEmailWithI18N } from '../../../utils/render-email-with-i18n'; import type { JobDefinition } from '../../client/_internal/job'; const SEND_TEAM_MEMBER_LEFT_EMAIL_JOB_DEFINITION_ID = 'send.team-member-left.email'; @@ -61,15 +63,22 @@ export const SEND_TEAM_MEMBER_LEFT_EMAIL_JOB_DEFINITION = { teamUrl: team.url, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(emailContent), + renderEmailWithI18N(emailContent, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: member.user.email, from: { name: FROM_NAME, address: FROM_ADDRESS, }, - subject: `A team member has left ${team.name}`, - html: render(emailContent), - text: render(emailContent, { plainText: true }), + subject: i18n._(msg`A team member has left ${team.name}`), + html, + text, }); }); } diff --git a/packages/lib/package.json b/packages/lib/package.json index 5eabe4a26..0dc897f98 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -25,6 +25,9 @@ "@documenso/email": "*", "@documenso/prisma": "*", "@documenso/signing": "*", + "@lingui/core": "^4.11.3", + "@lingui/macro": "^4.11.3", + "@lingui/react": "^4.11.3", "@next-auth/prisma-adapter": "1.0.7", "@noble/ciphers": "0.4.0", "@noble/hashes": "1.3.2", diff --git a/packages/lib/server-only/auth/send-confirmation-email.ts b/packages/lib/server-only/auth/send-confirmation-email.ts index ddefa530a..5673d9603 100644 --- a/packages/lib/server-only/auth/send-confirmation-email.ts +++ b/packages/lib/server-only/auth/send-confirmation-email.ts @@ -1,11 +1,14 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { ConfirmEmailTemplate } from '@documenso/email/templates/confirm-email'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendConfirmationEmailProps { userId: number; @@ -45,6 +48,13 @@ export const sendConfirmationEmail = async ({ userId }: SendConfirmationEmailPro confirmationLink, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(confirmationTemplate), + renderEmailWithI18N(confirmationTemplate, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + return mailer.sendMail({ to: { address: user.email, @@ -54,8 +64,8 @@ export const sendConfirmationEmail = async ({ userId }: SendConfirmationEmailPro name: senderName, address: senderAddress, }, - subject: 'Please confirm your email', - html: render(confirmationTemplate), - text: render(confirmationTemplate, { plainText: true }), + subject: i18n._(msg`Please confirm your email`), + html, + text, }); }; diff --git a/packages/lib/server-only/auth/send-forgot-password.ts b/packages/lib/server-only/auth/send-forgot-password.ts index 6e3a582a8..fef1543c3 100644 --- a/packages/lib/server-only/auth/send-forgot-password.ts +++ b/packages/lib/server-only/auth/send-forgot-password.ts @@ -1,11 +1,14 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { ForgotPasswordTemplate } from '@documenso/email/templates/forgot-password'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendForgotPasswordOptions { userId: number; @@ -39,6 +42,13 @@ export const sendForgotPassword = async ({ userId }: SendForgotPasswordOptions) resetPasswordLink, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + return await mailer.sendMail({ to: { address: user.email, @@ -48,8 +58,8 @@ export const sendForgotPassword = async ({ userId }: SendForgotPasswordOptions) name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, - subject: 'Forgot Password?', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Forgot Password?`), + html, + text, }); }; diff --git a/packages/lib/server-only/auth/send-reset-password.ts b/packages/lib/server-only/auth/send-reset-password.ts index 6bcd5820d..03165fcfc 100644 --- a/packages/lib/server-only/auth/send-reset-password.ts +++ b/packages/lib/server-only/auth/send-reset-password.ts @@ -1,11 +1,11 @@ import { createElement } from 'react'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { ResetPasswordTemplate } from '@documenso/email/templates/reset-password'; import { prisma } from '@documenso/prisma'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendResetPasswordOptions { userId: number; @@ -26,6 +26,11 @@ export const sendResetPassword = async ({ userId }: SendResetPasswordOptions) => userName: user.name || '', }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + return await mailer.sendMail({ to: { address: user.email, @@ -36,7 +41,7 @@ export const sendResetPassword = async ({ userId }: SendResetPasswordOptions) => address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, subject: 'Password Reset Success!', - html: render(template), - text: render(template, { plainText: true }), + html, + text, }); }; diff --git a/packages/lib/server-only/document-meta/upsert-document-meta.ts b/packages/lib/server-only/document-meta/upsert-document-meta.ts index 99ca7f5da..daf8ec32c 100644 --- a/packages/lib/server-only/document-meta/upsert-document-meta.ts +++ b/packages/lib/server-only/document-meta/upsert-document-meta.ts @@ -9,6 +9,8 @@ import { import { prisma } from '@documenso/prisma'; import type { DocumentSigningOrder } from '@documenso/prisma/client'; +import type { SupportedLanguageCodes } from '../../constants/i18n'; + export type CreateDocumentMetaOptions = { documentId: number; subject?: string; @@ -19,6 +21,7 @@ export type CreateDocumentMetaOptions = { redirectUrl?: string; signingOrder?: DocumentSigningOrder; typedSignatureEnabled?: boolean; + language?: SupportedLanguageCodes; userId: number; requestMetadata: RequestMetadata; }; @@ -34,6 +37,7 @@ export const upsertDocumentMeta = async ({ redirectUrl, signingOrder, typedSignatureEnabled, + language, requestMetadata, }: CreateDocumentMetaOptions) => { const user = await prisma.user.findFirstOrThrow({ @@ -85,6 +89,7 @@ export const upsertDocumentMeta = async ({ redirectUrl, signingOrder, typedSignatureEnabled, + language, }, update: { subject, @@ -95,6 +100,7 @@ export const upsertDocumentMeta = async ({ redirectUrl, signingOrder, typedSignatureEnabled, + language, }, }); diff --git a/packages/lib/server-only/document/delete-document.ts b/packages/lib/server-only/document/delete-document.ts index 6ac8e1bd3..b43ed2cd3 100644 --- a/packages/lib/server-only/document/delete-document.ts +++ b/packages/lib/server-only/document/delete-document.ts @@ -3,7 +3,6 @@ import { createElement } from 'react'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import DocumentCancelTemplate from '@documenso/email/templates/document-cancel'; import { prisma } from '@documenso/prisma'; import type { Document, DocumentMeta, Recipient, User } from '@documenso/prisma/client'; @@ -14,6 +13,7 @@ import { FROM_ADDRESS, FROM_NAME } from '../../constants/email'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import type { RequestMetadata } from '../../universal/extract-request-metadata'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export type DeleteDocumentOptions = { id: number; @@ -191,6 +191,11 @@ const handleDocumentOwnerDelete = async ({ assetBaseUrl, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + await mailer.sendMail({ to: { address: recipient.email, @@ -201,8 +206,8 @@ const handleDocumentOwnerDelete = async ({ address: FROM_ADDRESS, }, subject: 'Document Cancelled', - html: render(template), - text: render(template, { plainText: true }), + html, + text, }); }), ); diff --git a/packages/lib/server-only/document/resend-document.tsx b/packages/lib/server-only/document/resend-document.tsx index 30f104e92..e25b4b766 100644 --- a/packages/lib/server-only/document/resend-document.tsx +++ b/packages/lib/server-only/document/resend-document.tsx @@ -1,11 +1,12 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { DocumentInviteEmailTemplate } from '@documenso/email/templates/document-invite'; import { FROM_ADDRESS, FROM_NAME } from '@documenso/lib/constants/email'; import { - RECIPIENT_ROLES_DESCRIPTION_ENG, + RECIPIENT_ROLES_DESCRIPTION, RECIPIENT_ROLE_TO_EMAIL_TYPE, } from '@documenso/lib/constants/recipient-roles'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; @@ -16,7 +17,9 @@ import { prisma } from '@documenso/prisma'; import { DocumentStatus, RecipientRole, SigningStatus } from '@documenso/prisma/client'; import type { Prisma } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; import { getDocumentWhereInput } from './get-document-by-id'; export type ResendDocumentOptions = { @@ -92,25 +95,28 @@ export const resendDocument = async ({ return; } + const i18n = await getI18nInstance(document.documentMeta?.language); + const recipientEmailType = RECIPIENT_ROLE_TO_EMAIL_TYPE[recipient.role]; const { email, name } = recipient; const selfSigner = email === user.email; - const recipientActionVerb = - RECIPIENT_ROLES_DESCRIPTION_ENG[recipient.role].actionVerb.toLowerCase(); + const recipientActionVerb = i18n + ._(RECIPIENT_ROLES_DESCRIPTION[recipient.role].actionVerb) + .toLowerCase(); - let emailMessage = customEmail?.message || ''; - let emailSubject = `Reminder: Please ${recipientActionVerb} this document`; + let emailMessage = msg`${customEmail?.message || ''}`; + let emailSubject = msg`Reminder: Please ${recipientActionVerb} this document`; if (selfSigner) { - emailMessage = `You have initiated the document ${`"${document.title}"`} that requires you to ${recipientActionVerb} it.`; - emailSubject = `Reminder: Please ${recipientActionVerb} your document`; + emailMessage = msg`You have initiated the document ${`"${document.title}"`} that requires you to ${recipientActionVerb} it.`; + emailSubject = msg`Reminder: Please ${recipientActionVerb} your document`; } if (isTeamDocument && document.team) { - emailSubject = `Reminder: ${document.team.name} invited you to ${recipientActionVerb} a document`; - emailMessage = `${user.name} on behalf of ${document.team.name} has invited you to ${recipientActionVerb} the document "${document.title}".`; + emailSubject = msg`Reminder: ${document.team.name} invited you to ${recipientActionVerb} a document`; + emailMessage = msg`${user.name} on behalf of ${document.team.name} has invited you to ${recipientActionVerb} the document "${document.title}".`; } const customEmailTemplate = { @@ -128,7 +134,7 @@ export const resendDocument = async ({ inviterEmail: isTeamDocument ? document.team?.teamEmail?.email || user.email : user.email, assetBaseUrl, signDocumentLink, - customBody: renderCustomEmailTemplate(emailMessage, customEmailTemplate), + customBody: renderCustomEmailTemplate(i18n._(emailMessage), customEmailTemplate), role: recipient.role, selfSigner, isTeamInvite: isTeamDocument, @@ -137,6 +143,14 @@ export const resendDocument = async ({ await prisma.$transaction( async (tx) => { + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { + lang: document.documentMeta?.language, + plainText: true, + }), + ]); + await mailer.sendMail({ to: { address: email, @@ -147,10 +161,13 @@ export const resendDocument = async ({ address: FROM_ADDRESS, }, subject: customEmail?.subject - ? renderCustomEmailTemplate(`Reminder: ${customEmail.subject}`, customEmailTemplate) - : emailSubject, - html: render(template), - text: render(template, { plainText: true }), + ? renderCustomEmailTemplate( + i18n._(msg`Reminder: ${customEmail.subject}`), + customEmailTemplate, + ) + : i18n._(emailSubject), + html, + text, }); await tx.documentAuditLog.create({ diff --git a/packages/lib/server-only/document/send-completed-email.ts b/packages/lib/server-only/document/send-completed-email.ts index cea9d5424..29413a3dd 100644 --- a/packages/lib/server-only/document/send-completed-email.ts +++ b/packages/lib/server-only/document/send-completed-email.ts @@ -1,17 +1,20 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { DocumentCompletedEmailTemplate } from '@documenso/email/templates/document-completed'; import { prisma } from '@documenso/prisma'; import { DocumentSource } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import type { RequestMetadata } from '../../universal/extract-request-metadata'; import { getFile } from '../../universal/upload/get-file'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; import { renderCustomEmailTemplate } from '../../utils/render-custom-email-template'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendDocumentOptions { documentId: number; @@ -61,6 +64,8 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo }`; } + const i18n = await getI18nInstance(document.documentMeta?.language); + // If the document owner is not a recipient then send the email to them separately if (!document.Recipient.find((recipient) => recipient.email === owner.email)) { const template = createElement(DocumentCompletedEmailTemplate, { @@ -69,6 +74,11 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo downloadLink: documentOwnerDownloadLink, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { lang: document.documentMeta?.language, plainText: true }), + ]); + await mailer.sendMail({ to: [ { @@ -80,9 +90,9 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, - subject: 'Signing Complete!', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Signing Complete!`), + html, + text, attachments: [ { filename: document.title.endsWith('.pdf') ? document.title : document.title + '.pdf', @@ -129,6 +139,11 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo : undefined, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { lang: document.documentMeta?.language, plainText: true }), + ]); + await mailer.sendMail({ to: [ { @@ -143,9 +158,9 @@ export const sendCompletedEmail = async ({ documentId, requestMetadata }: SendDo subject: isDirectTemplate && document.documentMeta?.subject ? renderCustomEmailTemplate(document.documentMeta.subject, customEmailTemplate) - : 'Signing Complete!', - html: render(template), - text: render(template, { plainText: true }), + : i18n._(msg`Signing Complete!`), + html, + text, attachments: [ { filename: document.title.endsWith('.pdf') ? document.title : document.title + '.pdf', diff --git a/packages/lib/server-only/document/send-delete-email.ts b/packages/lib/server-only/document/send-delete-email.ts index cc1101942..fa648de2b 100644 --- a/packages/lib/server-only/document/send-delete-email.ts +++ b/packages/lib/server-only/document/send-delete-email.ts @@ -1,11 +1,14 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { DocumentSuperDeleteEmailTemplate } from '@documenso/email/templates/document-super-delete'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendDeleteEmailOptions { documentId: number; @@ -36,6 +39,13 @@ export const sendDeleteEmail = async ({ documentId, reason }: SendDeleteEmailOpt assetBaseUrl, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: { address: email, @@ -45,8 +55,8 @@ export const sendDeleteEmail = async ({ documentId, reason }: SendDeleteEmailOpt name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, - subject: 'Document Deleted!', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Document Deleted!`), + html, + text, }); }; diff --git a/packages/lib/server-only/document/send-pending-email.ts b/packages/lib/server-only/document/send-pending-email.ts index 73e938a7d..997d8cdbd 100644 --- a/packages/lib/server-only/document/send-pending-email.ts +++ b/packages/lib/server-only/document/send-pending-email.ts @@ -1,11 +1,14 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { DocumentPendingEmailTemplate } from '@documenso/email/templates/document-pending'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SendPendingEmailOptions { documentId: number; @@ -28,6 +31,7 @@ export const sendPendingEmail = async ({ documentId, recipientId }: SendPendingE id: recipientId, }, }, + documentMeta: true, }, }); @@ -50,6 +54,13 @@ export const sendPendingEmail = async ({ documentId, recipientId }: SendPendingE assetBaseUrl, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { lang: document.documentMeta?.language, plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: { address: email, @@ -59,8 +70,8 @@ export const sendPendingEmail = async ({ documentId, recipientId }: SendPendingE name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, - subject: 'Waiting for others to complete signing.', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Waiting for others to complete signing.`), + html, + text, }); }; diff --git a/packages/lib/server-only/document/super-delete-document.ts b/packages/lib/server-only/document/super-delete-document.ts index 0dfc9c163..db72bb1fc 100644 --- a/packages/lib/server-only/document/super-delete-document.ts +++ b/packages/lib/server-only/document/super-delete-document.ts @@ -2,17 +2,20 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import DocumentCancelTemplate from '@documenso/email/templates/document-cancel'; import { prisma } from '@documenso/prisma'; import { DocumentStatus, SendStatus } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../constants/email'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import type { RequestMetadata } from '../../universal/extract-request-metadata'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export type SuperDeleteDocumentOptions = { id: number; @@ -53,6 +56,13 @@ export const superDeleteDocument = async ({ id, requestMetadata }: SuperDeleteDo assetBaseUrl, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { lang: document.documentMeta?.language, plainText: true }), + ]); + + const i18n = await getI18nInstance(document.documentMeta?.language); + await mailer.sendMail({ to: { address: recipient.email, @@ -62,9 +72,9 @@ export const superDeleteDocument = async ({ id, requestMetadata }: SuperDeleteDo name: FROM_NAME, address: FROM_ADDRESS, }, - subject: 'Document Cancelled', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Document Cancelled`), + html, + text, }); }), ); diff --git a/packages/lib/server-only/recipient/set-recipients-for-document.ts b/packages/lib/server-only/recipient/set-recipients-for-document.ts index d5ab3c3d5..b9fc0e6af 100644 --- a/packages/lib/server-only/recipient/set-recipients-for-document.ts +++ b/packages/lib/server-only/recipient/set-recipients-for-document.ts @@ -1,8 +1,9 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { isUserEnterprise } from '@documenso/ee/server-only/util/is-document-enterprise'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import RecipientRemovedFromDocumentTemplate from '@documenso/email/templates/recipient-removed-from-document'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; import { @@ -21,10 +22,12 @@ import type { Recipient } from '@documenso/prisma/client'; import { RecipientRole } from '@documenso/prisma/client'; import { SendStatus, SigningStatus } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../constants/email'; import { AppError, AppErrorCode } from '../../errors/app-error'; import { canRecipientBeModified } from '../../utils/recipients'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export interface SetRecipientsForDocumentOptions { userId: number; @@ -62,6 +65,7 @@ export const setRecipientsForDocument = async ({ }, include: { Field: true, + documentMeta: true, }, }); @@ -291,6 +295,13 @@ export const setRecipientsForDocument = async ({ assetBaseUrl, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template, { lang: document.documentMeta?.language }), + renderEmailWithI18N(template, { lang: document.documentMeta?.language, plainText: true }), + ]); + + const i18n = await getI18nInstance(document.documentMeta?.language); + await mailer.sendMail({ to: { address: recipient.email, @@ -300,9 +311,9 @@ export const setRecipientsForDocument = async ({ name: FROM_NAME, address: FROM_ADDRESS, }, - subject: 'You have been removed from a document', - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`You have been removed from a document`), + html, + text, }); }), ); diff --git a/packages/lib/server-only/team/accept-team-invitation.ts b/packages/lib/server-only/team/accept-team-invitation.ts index 0a7da6d15..1bf8611e4 100644 --- a/packages/lib/server-only/team/accept-team-invitation.ts +++ b/packages/lib/server-only/team/accept-team-invitation.ts @@ -81,7 +81,7 @@ export const acceptTeamInvitation = async ({ userId, teamId }: AcceptTeamInvitat await jobs.triggerJob({ name: 'send.team-member-joined.email', payload: { - teamId: team.id, + teamId: teamMember.teamId, memberId: teamMember.id, }, }); diff --git a/packages/lib/server-only/team/create-team-email-verification.ts b/packages/lib/server-only/team/create-team-email-verification.ts index 86cded7a9..f43eb9530 100644 --- a/packages/lib/server-only/team/create-team-email-verification.ts +++ b/packages/lib/server-only/team/create-team-email-verification.ts @@ -1,9 +1,9 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; import { z } from 'zod'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { ConfirmTeamEmailTemplate } from '@documenso/email/templates/confirm-team-email'; import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; import { FROM_ADDRESS, FROM_NAME } from '@documenso/lib/constants/email'; @@ -13,6 +13,9 @@ import { createTokenVerification } from '@documenso/lib/utils/token-verification import { prisma } from '@documenso/prisma'; import { Prisma } from '@documenso/prisma/client'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; + export type CreateTeamEmailVerificationOptions = { userId: number; teamId: number; @@ -122,14 +125,23 @@ export const sendTeamEmailVerificationEmail = async ( token, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: email, from: { name: FROM_NAME, address: FROM_ADDRESS, }, - subject: `A request to use your email has been initiated by ${teamName} on Documenso`, - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._( + msg`A request to use your email has been initiated by ${teamName} on Documenso`, + ), + html, + text, }); }; diff --git a/packages/lib/server-only/team/create-team-member-invites.ts b/packages/lib/server-only/team/create-team-member-invites.ts index f167d2112..c47401f56 100644 --- a/packages/lib/server-only/team/create-team-member-invites.ts +++ b/packages/lib/server-only/team/create-team-member-invites.ts @@ -1,9 +1,9 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; import { nanoid } from 'nanoid'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import type { TeamInviteEmailProps } from '@documenso/email/templates/team-invite'; import { TeamInviteEmailTemplate } from '@documenso/email/templates/team-invite'; import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; @@ -15,6 +15,9 @@ import { prisma } from '@documenso/prisma'; import { TeamMemberInviteStatus } from '@documenso/prisma/client'; import type { TCreateTeamMemberInvitesMutationSchema } from '@documenso/trpc/server/team-router/schema'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; + export type CreateTeamMemberInvitesOptions = { userId: number; userName: string; @@ -148,14 +151,23 @@ export const sendTeamMemberInviteEmail = async ({ ...emailTemplateOptions, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: email, from: { name: FROM_NAME, address: FROM_ADDRESS, }, - subject: `You have been invited to join ${emailTemplateOptions.teamName} on Documenso`, - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._( + msg`You have been invited to join ${emailTemplateOptions.teamName} on Documenso`, + ), + html, + text, }); }; diff --git a/packages/lib/server-only/team/delete-team-email.ts b/packages/lib/server-only/team/delete-team-email.ts index c5139a971..a3f6e906b 100644 --- a/packages/lib/server-only/team/delete-team-email.ts +++ b/packages/lib/server-only/team/delete-team-email.ts @@ -1,13 +1,17 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { TeamEmailRemovedTemplate } from '@documenso/email/templates/team-email-removed'; import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; import { FROM_ADDRESS, FROM_NAME } from '@documenso/lib/constants/email'; import { TEAM_MEMBER_ROLE_PERMISSIONS_MAP } from '@documenso/lib/constants/teams'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; + export type DeleteTeamEmailOptions = { userId: number; userEmail: string; @@ -73,6 +77,13 @@ export const deleteTeamEmail = async ({ userId, userEmail, teamId }: DeleteTeamE teamUrl: team.url, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: { address: team.owner.email, @@ -82,9 +93,9 @@ export const deleteTeamEmail = async ({ userId, userEmail, teamId }: DeleteTeamE name: FROM_NAME, address: FROM_ADDRESS, }, - subject: `Team email has been revoked for ${team.name}`, - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._(msg`Team email has been revoked for ${team.name}`), + html, + text, }); } catch (e) { // Todo: Teams - Alert us. diff --git a/packages/lib/server-only/team/delete-team.ts b/packages/lib/server-only/team/delete-team.ts index 57c761e72..260344bd0 100644 --- a/packages/lib/server-only/team/delete-team.ts +++ b/packages/lib/server-only/team/delete-team.ts @@ -1,7 +1,6 @@ import { createElement } from 'react'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import type { TeamDeleteEmailProps } from '@documenso/email/templates/team-delete'; import { TeamDeleteEmailTemplate } from '@documenso/email/templates/team-delete'; import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; @@ -11,6 +10,7 @@ import { stripe } from '@documenso/lib/server-only/stripe'; import { prisma } from '@documenso/prisma'; import { jobs } from '../../jobs/client'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; export type DeleteTeamOptions = { userId: number; @@ -95,6 +95,11 @@ export const sendTeamDeleteEmail = async ({ ...emailTemplateOptions, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + await mailer.sendMail({ to: email, from: { @@ -102,7 +107,7 @@ export const sendTeamDeleteEmail = async ({ address: FROM_ADDRESS, }, subject: `Team "${emailTemplateOptions.teamName}" has been deleted on Documenso`, - html: render(template), - text: render(template, { plainText: true }), + html, + text, }); }; diff --git a/packages/lib/server-only/team/request-team-ownership-transfer.ts b/packages/lib/server-only/team/request-team-ownership-transfer.ts index 92fd5b61e..5da2f6c5b 100644 --- a/packages/lib/server-only/team/request-team-ownership-transfer.ts +++ b/packages/lib/server-only/team/request-team-ownership-transfer.ts @@ -1,13 +1,17 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; + import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { TeamTransferRequestTemplate } from '@documenso/email/templates/team-transfer-request'; import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; import { FROM_ADDRESS, FROM_NAME } from '@documenso/lib/constants/email'; import { createTokenVerification } from '@documenso/lib/utils/token-verification'; import { prisma } from '@documenso/prisma'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; + export type RequestTeamOwnershipTransferOptions = { /** * The ID of the user initiating the transfer. @@ -93,15 +97,24 @@ export const requestTeamOwnershipTransfer = async ({ token, }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), + ]); + + const i18n = await getI18nInstance(); + await mailer.sendMail({ to: newOwnerUser.email, from: { name: FROM_NAME, address: FROM_ADDRESS, }, - subject: `You have been requested to take ownership of team ${team.name} on Documenso`, - html: render(template), - text: render(template, { plainText: true }), + subject: i18n._( + msg`You have been requested to take ownership of team ${team.name} on Documenso`, + ), + html, + text, }); }, { timeout: 30_000 }, diff --git a/packages/lib/server-only/template/create-document-from-direct-template.ts b/packages/lib/server-only/template/create-document-from-direct-template.ts index 2d90d4ff0..733ca9c86 100644 --- a/packages/lib/server-only/template/create-document-from-direct-template.ts +++ b/packages/lib/server-only/template/create-document-from-direct-template.ts @@ -1,15 +1,16 @@ import { createElement } from 'react'; +import { msg } from '@lingui/macro'; import { DateTime } from 'luxon'; import { match } from 'ts-pattern'; import { mailer } from '@documenso/email/mailer'; -import { render } from '@documenso/email/render'; import { DocumentCreatedFromDirectTemplateEmailTemplate } from '@documenso/email/templates/document-created-from-direct-template'; import { nanoid } from '@documenso/lib/universal/id'; import { prisma } from '@documenso/prisma'; import type { Field, Signature } from '@documenso/prisma/client'; import { + DocumentSigningOrder, DocumentSource, DocumentStatus, FieldType, @@ -21,6 +22,7 @@ import { } from '@documenso/prisma/client'; import type { TSignFieldWithTokenMutationSchema } from '@documenso/trpc/server/field-router/schema'; +import { getI18nInstance } from '../../client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { DEFAULT_DOCUMENT_DATE_FORMAT } from '../../constants/date-formats'; import { DEFAULT_DOCUMENT_TIME_ZONE } from '../../constants/time-zones'; @@ -37,6 +39,7 @@ import { createRecipientAuthOptions, extractDocumentAuthMethods, } from '../../utils/document-auth'; +import { renderEmailWithI18N } from '../../utils/render-email-with-i18n'; import { formatDocumentsPath } from '../../utils/teams'; import { sendDocument } from '../document/send-document'; import { validateFieldAuth } from '../document/validate-field-auth'; @@ -142,6 +145,8 @@ export const createDocumentFromDirectTemplate = async ({ const metaDateFormat = template.templateMeta?.dateFormat || DEFAULT_DOCUMENT_DATE_FORMAT; const metaEmailMessage = template.templateMeta?.message || ''; const metaEmailSubject = template.templateMeta?.subject || ''; + const metaLanguage = template.templateMeta?.language; + const metaSigningOrder = template.templateMeta?.signingOrder || DocumentSigningOrder.PARALLEL; // Associate, validate and map to a query every direct template recipient field with the provided fields. const createDirectRecipientFieldArgs = await Promise.all( @@ -256,6 +261,7 @@ export const createDocumentFromDirectTemplate = async ({ recipient.role === RecipientRole.CC ? SigningStatus.SIGNED : SigningStatus.NOT_SIGNED, + signingOrder: recipient.signingOrder, token: nanoid(), }; }), @@ -267,6 +273,8 @@ export const createDocumentFromDirectTemplate = async ({ dateFormat: metaDateFormat, message: metaEmailMessage, subject: metaEmailSubject, + language: metaLanguage, + signingOrder: metaSigningOrder, }, }, }, @@ -330,6 +338,7 @@ export const createDocumentFromDirectTemplate = async ({ signingStatus: SigningStatus.SIGNED, sendStatus: SendStatus.SENT, signedAt: initialRequestTime, + signingOrder: directTemplateRecipient.signingOrder, Field: { createMany: { data: directTemplateNonSignatureFields.map(({ templateField, customText }) => ({ @@ -524,6 +533,13 @@ export const createDocumentFromDirectTemplate = async ({ assetBaseUrl: NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000', }); + const [html, text] = await Promise.all([ + renderEmailWithI18N(emailTemplate, { lang: metaLanguage }), + renderEmailWithI18N(emailTemplate, { lang: metaLanguage, plainText: true }), + ]); + + const i18n = await getI18nInstance(metaLanguage); + await mailer.sendMail({ to: [ { @@ -535,9 +551,9 @@ export const createDocumentFromDirectTemplate = async ({ name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', }, - subject: 'Document created from direct template', - html: render(emailTemplate), - text: render(emailTemplate, { plainText: true }), + subject: i18n._(msg`Document created from direct template`), + html, + text, }); return { diff --git a/packages/lib/server-only/template/create-document-from-template-legacy.ts b/packages/lib/server-only/template/create-document-from-template-legacy.ts index ea5a45760..f468cdf0e 100644 --- a/packages/lib/server-only/template/create-document-from-template-legacy.ts +++ b/packages/lib/server-only/template/create-document-from-template-legacy.ts @@ -46,6 +46,7 @@ export const createDocumentFromTemplateLegacy = async ({ Recipient: true, Field: true, templateDocumentData: true, + templateMeta: true, }, }); @@ -78,6 +79,17 @@ export const createDocumentFromTemplateLegacy = async ({ token: nanoid(), })), }, + documentMeta: { + create: { + subject: template.templateMeta?.subject, + message: template.templateMeta?.message, + timezone: template.templateMeta?.timezone, + dateFormat: template.templateMeta?.dateFormat, + redirectUrl: template.templateMeta?.redirectUrl, + signingOrder: template.templateMeta?.signingOrder ?? undefined, + language: template.templateMeta?.language, + }, + }, }, include: { diff --git a/packages/lib/server-only/template/create-document-from-template.ts b/packages/lib/server-only/template/create-document-from-template.ts index 8cf2e59af..04bf46dde 100644 --- a/packages/lib/server-only/template/create-document-from-template.ts +++ b/packages/lib/server-only/template/create-document-from-template.ts @@ -11,6 +11,7 @@ import { WebhookTriggerEvents, } from '@documenso/prisma/client'; +import type { SupportedLanguageCodes } from '../../constants/i18n'; import { AppError, AppErrorCode } from '../../errors/app-error'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import { ZRecipientAuthOptionsSchema } from '../../types/document-auth'; @@ -24,7 +25,10 @@ import { } from '../../utils/document-auth'; import { triggerWebhook } from '../webhooks/trigger/trigger-webhook'; -type FinalRecipient = Pick & { +type FinalRecipient = Pick< + Recipient, + 'name' | 'email' | 'role' | 'authOptions' | 'signingOrder' +> & { templateRecipientId: number; fields: Field[]; }; @@ -57,6 +61,7 @@ export type CreateDocumentFromTemplateOptions = { dateFormat?: string; redirectUrl?: string; signingOrder?: DocumentSigningOrder; + language?: SupportedLanguageCodes; }; requestMetadata?: RequestMetadata; }; @@ -176,6 +181,7 @@ export const createDocumentFromTemplate = async ({ override?.signingOrder || template.templateMeta?.signingOrder || DocumentSigningOrder.PARALLEL, + language: override?.language || template.templateMeta?.language, }, }, Recipient: { @@ -197,6 +203,7 @@ export const createDocumentFromTemplate = async ({ recipient.role === RecipientRole.CC ? SigningStatus.SIGNED : SigningStatus.NOT_SIGNED, + signingOrder: recipient.signingOrder, token: nanoid(), }; }), diff --git a/packages/lib/server-only/template/duplicate-template.ts b/packages/lib/server-only/template/duplicate-template.ts index 963d78bde..9e22bf695 100644 --- a/packages/lib/server-only/template/duplicate-template.ts +++ b/packages/lib/server-only/template/duplicate-template.ts @@ -1,3 +1,5 @@ +import { omit } from 'remeda'; + import { nanoid } from '@documenso/lib/universal/id'; import { prisma } from '@documenso/prisma'; import type { Prisma } from '@documenso/prisma/client'; @@ -38,6 +40,7 @@ export const duplicateTemplate = async ({ Recipient: true, Field: true, templateDocumentData: true, + templateMeta: true, }, }); @@ -53,6 +56,14 @@ export const duplicateTemplate = async ({ }, }); + let templateMeta: Prisma.TemplateCreateArgs['data']['templateMeta'] | undefined = undefined; + + if (template.templateMeta) { + templateMeta = { + create: omit(template.templateMeta, ['id', 'templateId']), + }; + } + const duplicatedTemplate = await prisma.template.create({ data: { userId, @@ -66,8 +77,8 @@ export const duplicateTemplate = async ({ token: nanoid(), })), }, + templateMeta, }, - include: { Recipient: true, }, diff --git a/packages/lib/server-only/user/send-confirmation-token.ts b/packages/lib/server-only/user/send-confirmation-token.ts index ef7c4b104..d2bc0a3aa 100644 --- a/packages/lib/server-only/user/send-confirmation-token.ts +++ b/packages/lib/server-only/user/send-confirmation-token.ts @@ -39,7 +39,7 @@ export const sendConfirmationToken = async ({ mostRecentToken?.createdAt && DateTime.fromJSDate(mostRecentToken.createdAt).diffNow('minutes').minutes > -5 ) { - return; + // return; } const createdToken = await prisma.verificationToken.create({ @@ -64,6 +64,7 @@ export const sendConfirmationToken = async ({ return { success: true }; } catch (err) { + console.log(err); throw new Error(`Failed to send the confirmation email`); } }; diff --git a/packages/lib/translations/de/common.po b/packages/lib/translations/de/common.po index ab0c6fb6c..6960ce450 100644 --- a/packages/lib/translations/de/common.po +++ b/packages/lib/translations/de/common.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 04:00\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,14 +18,104 @@ msgstr "" "X-Crowdin-File: common.po\n" "X-Crowdin-File-ID: 4\n" +#: packages/email/template-components/template-document-super-delete.tsx:27 +msgid "\"{documentName}\" has been deleted by an admin." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:37 +msgid "“{documentName}” has been signed" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:41 +#: packages/lib/server-only/document/resend-document.tsx:109 +msgid "{0}" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:74 +msgid "{0} Document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:117 +msgid "{0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/email/templates/team-join.tsx:55 +msgid "{0} joined the team {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-leave.tsx:55 +msgid "{0} left the team {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:30 msgid "{0} of {1} row(s) selected." msgstr "{0} von {1} Zeile(n) ausgewählt." +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:119 +#: packages/lib/server-only/document/resend-document.tsx:119 +msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." +msgstr "" + +#: packages/email/templates/document-invite.tsx:79 +msgid "{inviterName} <0>({inviterEmail})" +msgstr "" + +#: packages/email/templates/document-cancel.tsx:19 +msgid "{inviterName} has cancelled the document {documentName}, you don't need to sign it anymore." +msgstr "" + +#: packages/email/template-components/template-document-cancel.tsx:24 +msgid "{inviterName} has cancelled the document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:57 +msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:41 +msgid "{inviterName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/recipient-removed-from-document.tsx:18 +msgid "{inviterName} has removed you from the document {documentName}." +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:49 +msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:40 +msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/team-join.tsx:61 +msgid "{memberEmail} joined the following team" +msgstr "" + +#: packages/email/templates/team-leave.tsx:61 +msgid "{memberEmail} left the following team" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:55 +msgid "{recipientName} {action} a document by using one of your direct links" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:55 +msgid "{teamName} ownership transfer request" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:41 msgid "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}" msgstr "{visibleRows, plural, one {Eine # Ergebnis wird angezeigt.} other {# Ergebnisse werden angezeigt.}}" +#: packages/email/templates/document-invite.tsx:91 +msgid "`${inviterName} has invited you to ${action} the document \"${documentName}\".`" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:59 +msgid "<0>{senderName} has requested that you take ownership of the following team" +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:53 msgid "<0>Inherit authentication method - Use the global action signing authentication method configured in the \"General Settings\" step" msgstr "<0>Authentifizierungsmethode erben - Verwenden Sie die in den \"Allgemeinen Einstellungen\" konfigurierte globale Aktionssignatur-Authentifizierungsmethode" @@ -56,20 +146,66 @@ msgstr "<0>Konto erforderlich - Der Empfänger muss angemeldet sein, um das msgid "<0>Require passkey - The recipient must have an account and passkey configured via their settings" msgstr "<0>Passkey erforderlich - Der Empfänger muss ein Konto haben und den Passkey über seine Einstellungen konfiguriert haben" +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:109 +msgid "A document was created by your direct template that requires you to {recipientActionVerb} it." +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts:90 +msgid "A new member has joined your team" +msgstr "" + +#: packages/lib/server-only/team/create-team-email-verification.ts:142 +msgid "A request to use your email has been initiated by {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-join.tsx:29 +msgid "A team member has joined a team on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-left-email.ts:79 +msgid "A team member has left {0}" +msgstr "" + +#: packages/email/templates/team-leave.tsx:29 +msgid "A team member has left a team on Documenso" +msgstr "" + +#: packages/email/templates/team-delete.tsx:27 +#: packages/email/templates/team-delete.tsx:31 +msgid "A team you were a part of has been deleted" +msgstr "" + +#: packages/email/templates/team-invite.tsx:77 +#: packages/email/templates/team-transfer-request.tsx:81 +msgid "Accept" +msgstr "" + +#: packages/email/templates/team-invite.tsx:29 +msgid "Accept invitation to join a team on Documenso" +msgstr "" + +#: packages/email/templates/confirm-team-email.tsx:38 +msgid "Accept team email request for {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:29 +msgid "Accept team transfer request on Documenso" +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "Add a document" msgstr "Dokument hinzufügen" -#: packages/ui/primitives/document-flow/add-settings.tsx:336 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:339 +#: packages/ui/primitives/document-flow/add-settings.tsx:378 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:378 msgid "Add a URL to redirect the user to once the document is signed" msgstr "Fügen Sie eine URL hinzu, um den Benutzer nach der Unterzeichnung des Dokuments weiterzuleiten" -#: packages/ui/primitives/document-flow/add-settings.tsx:248 +#: packages/ui/primitives/document-flow/add-settings.tsx:290 msgid "Add an external ID to the document. This can be used to identify the document in external systems." msgstr "Fügen Sie dem Dokument eine externe ID hinzu. Diese kann verwendet werden, um das Dokument in externen Systemen zu identifizieren." -#: packages/ui/primitives/template-flow/add-template-settings.tsx:256 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:295 msgid "Add an external ID to the template. This can be used to identify in external systems." msgstr "Fügen Sie der Vorlage eine externe ID hinzu. Diese kann zur Identifizierung in externen Systemen verwendet werden." @@ -110,13 +246,13 @@ msgstr "Text zum Feld hinzufügen" msgid "Admin" msgstr "Admin" -#: packages/ui/primitives/document-flow/add-settings.tsx:230 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:238 +#: packages/ui/primitives/document-flow/add-settings.tsx:272 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:277 msgid "Advanced Options" msgstr "Erweiterte Optionen" -#: packages/ui/primitives/document-flow/add-fields.tsx:570 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 +#: packages/ui/primitives/document-flow/add-fields.tsx:573 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:406 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" @@ -124,10 +260,26 @@ msgstr "Erweiterte Einstellungen" msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email." msgstr "Nach der Übermittlung wird ein Dokument automatisch generiert und zu Ihrer Dokumentenseite hinzugefügt. Sie erhalten außerdem eine Benachrichtigung per E-Mail." +#: packages/email/template-components/template-document-cancel.tsx:31 +msgid "All signatures have been voided." +msgstr "" + +#: packages/email/templates/document-super-delete.tsx:20 +msgid "An admin has deleted your document \"{documentName}\"." +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:167 +msgid "An error occurred while loading the document." +msgstr "Ein Fehler ist beim Laden des Dokuments aufgetreten." + #: packages/lib/constants/recipient-roles.ts:8 msgid "Approve" msgstr "Genehmigen" +#: packages/lib/constants/recipient-roles.ts:68 +#~ msgid "APPROVE_REQUEST" +#~ msgstr "" + #: packages/lib/constants/recipient-roles.ts:9 msgid "Approved" msgstr "Genehmigt" @@ -136,10 +288,18 @@ msgstr "Genehmigt" msgid "Approver" msgstr "Genehmiger" +#: packages/lib/constants/recipient-roles.ts:44 +msgid "Approvers" +msgstr "Genehmigende" + #: packages/lib/constants/recipient-roles.ts:10 msgid "Approving" msgstr "Genehmigung" +#: packages/email/template-components/template-confirmation-email.tsx:28 +msgid "Before you get started, please confirm your email address by clicking the button below:" +msgstr "" + #: packages/ui/primitives/signature-pad/signature-pad.tsx:377 msgid "Black" msgstr "Schwarz" @@ -148,6 +308,14 @@ msgstr "Schwarz" msgid "Blue" msgstr "Blau" +#: packages/email/templates/team-invite.tsx:67 +msgid "by <0>{senderName}" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:70 +msgid "By accepting this request, you will take responsibility for any billing items associated with this team." +msgstr "" + #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356 #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58 msgid "Cancel" @@ -157,10 +325,6 @@ msgstr "Abbrechen" msgid "Cannot remove signer" msgstr "Unterzeichner kann nicht entfernt werden" -#: packages/ui/primitives/document-flow/add-signers.tsx:221 -#~ msgid "Cannot update signer because they have already signed a field" -#~ msgstr "Cannot update signer because they have already signed a field" - #: packages/lib/constants/recipient-roles.ts:17 msgid "Cc" msgstr "Cc" @@ -174,15 +338,14 @@ msgstr "CC" msgid "CC'd" msgstr "CC'd" +#: packages/lib/constants/recipient-roles.ts:51 +msgid "Ccers" +msgstr "Ccers" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86 msgid "Character Limit" msgstr "Zeichenbeschränkung" -#: packages/ui/primitives/document-flow/add-fields.tsx:1026 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 -msgid "Checkbox" -msgstr "Checkbox" - #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197 msgid "Checkbox values" msgstr "Checkbox-Werte" @@ -203,51 +366,108 @@ msgstr "Klicken, um das Feld einzufügen" msgid "Close" msgstr "Schließen" +#: packages/email/template-components/template-document-completed.tsx:35 +#: packages/email/template-components/template-document-self-signed.tsx:36 +msgid "Completed" +msgstr "" + +#: packages/email/templates/document-completed.tsx:21 +#: packages/email/templates/document-self-signed.tsx:17 +msgid "Completed Document" +msgstr "" + #: packages/lib/constants/template.ts:12 msgid "Configure Direct Recipient" msgstr "Direkten Empfänger konfigurieren" -#: packages/ui/primitives/document-flow/add-fields.tsx:571 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 +#: packages/ui/primitives/document-flow/add-fields.tsx:574 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:407 msgid "Configure the {0} field" msgstr "Konfigurieren Sie das Feld {0}" +#: packages/email/template-components/template-confirmation-email.tsx:38 +msgid "Confirm email" +msgstr "" + #: packages/ui/primitives/document-flow/document-flow-root.tsx:141 msgid "Continue" msgstr "Fortsetzen" +#: packages/email/template-components/template-document-invite.tsx:66 +msgid "Continue by {0} the document." +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:45 +msgid "Continue by downloading the document." +msgstr "" + #: packages/ui/components/document/document-share-button.tsx:46 msgid "Copied to clipboard" msgstr "In die Zwischenablage kopiert" +#: packages/ui/components/document/document-share-button.tsx:194 +msgid "Copy Link" +msgstr "Link kopieren" + +#: packages/email/template-components/template-document-self-signed.tsx:46 +msgid "Create a <0>free account to access your signed documents at any time." +msgstr "" + +#: packages/email/template-components/template-document-self-signed.tsx:68 +msgid "Create account" +msgstr "" + #: packages/ui/primitives/document-flow/add-signature.tsx:360 msgid "Custom Text" msgstr "Benutzerdefinierter Text" -#: packages/ui/primitives/document-flow/add-fields.tsx:922 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 +#: packages/ui/primitives/document-flow/add-fields.tsx:927 +#: packages/ui/primitives/document-flow/types.ts:53 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:690 msgid "Date" msgstr "Datum" -#: packages/ui/primitives/document-flow/add-settings.tsx:271 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:279 +#: packages/ui/primitives/document-flow/add-settings.tsx:313 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:318 msgid "Date Format" msgstr "Datumsformat" +#: packages/email/templates/team-invite.tsx:83 +msgid "Decline" +msgstr "" + +#: packages/email/templates/reset-password.tsx:65 +msgid "Didn't request a password change? We are here to help you secure your account, just <0>contact us." +msgstr "" + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:570 msgid "Direct link receiver" msgstr "Empfänger des direkten Links" #: packages/ui/components/document/document-global-auth-access-select.tsx:62 -#: packages/ui/primitives/document-flow/add-settings.tsx:174 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:151 +#: packages/ui/primitives/document-flow/add-settings.tsx:216 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:190 msgid "Document access" msgstr "Dokumentenzugriff" +#: packages/lib/server-only/document/super-delete-document.ts:75 +msgid "Document Cancelled" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:30 +#: packages/lib/server-only/template/create-document-from-direct-template.ts:554 +msgid "Document created from direct template" +msgstr "" + #: packages/lib/constants/template.ts:20 msgid "Document Creation" msgstr "Dokumenterstellung" +#: packages/lib/server-only/document/send-delete-email.ts:58 +msgid "Document Deleted!" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:64 #: packages/ui/components/document/document-download-button.tsx:68 msgid "Download" msgstr "Herunterladen" @@ -256,8 +476,8 @@ msgstr "Herunterladen" msgid "Drag & drop your PDF here." msgstr "Ziehen Sie Ihr PDF hierher." -#: packages/ui/primitives/document-flow/add-fields.tsx:1052 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 +#: packages/ui/primitives/document-flow/add-fields.tsx:1058 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:820 msgid "Dropdown" msgstr "Dropdown" @@ -265,20 +485,26 @@ msgstr "Dropdown" msgid "Dropdown options" msgstr "Dropdown-Optionen" -#: packages/ui/primitives/document-flow/add-fields.tsx:870 +#: packages/ui/primitives/document-flow/add-fields.tsx:875 #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:500 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 +#: packages/ui/primitives/document-flow/add-signers.tsx:507 +#: packages/ui/primitives/document-flow/types.ts:54 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:638 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:470 msgid "Email" msgstr "E-Mail" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:184 +#: packages/ui/primitives/document-flow/add-signature.types.ts:7 +msgid "Email is required" +msgstr "E-Mail ist erforderlich" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:223 msgid "Email Options" msgstr "E-Mail-Optionen" -#: packages/ui/primitives/document-flow/add-fields.tsx:1117 +#: packages/ui/primitives/document-flow/add-fields.tsx:1123 msgid "Empty field" msgstr "Leeres Feld" @@ -291,7 +517,7 @@ msgstr "Direktlink-Signierung aktivieren" msgid "Enable signing order" msgstr "Aktiviere die Signaturreihenfolge" -#: packages/ui/primitives/document-flow/add-fields.tsx:790 +#: packages/ui/primitives/document-flow/add-fields.tsx:795 msgid "Enable Typed Signatures" msgstr "Aktivieren Sie getippte Unterschriften" @@ -300,11 +526,12 @@ msgid "Enter password" msgstr "Passwort eingeben" #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257 +#: packages/ui/primitives/pdf-viewer.tsx:166 msgid "Error" msgstr "Fehler" -#: packages/ui/primitives/document-flow/add-settings.tsx:241 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:249 +#: packages/ui/primitives/document-flow/add-settings.tsx:283 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:288 msgid "External ID" msgstr "Externe ID" @@ -346,6 +573,18 @@ msgstr "Feldplatzhalter" msgid "Font Size" msgstr "Schriftgröße" +#: packages/lib/server-only/auth/send-forgot-password.ts:61 +msgid "Forgot Password?" +msgstr "" + +#: packages/email/template-components/template-forgot-password.tsx:21 +msgid "Forgot your password?" +msgstr "" + +#: packages/ui/primitives/document-flow/types.ts:50 +msgid "Free Signature" +msgstr "Freie Unterschrift" + #: packages/ui/components/document/document-global-auth-action-select.tsx:64 msgid "Global recipient action authentication" msgstr "Globale Empfängerauthentifizierung" @@ -358,37 +597,67 @@ msgstr "Zurück" msgid "Green" msgstr "Grün" -#: packages/lib/constants/recipient-roles.ts:72 +#: packages/email/templates/reset-password.tsx:50 +msgid "Hi, {userName} <0>({userEmail})" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:76 msgid "I am a signer of this document" msgstr "Ich bin ein Unterzeichner dieses Dokuments" -#: packages/lib/constants/recipient-roles.ts:75 +#: packages/lib/constants/recipient-roles.ts:79 msgid "I am a viewer of this document" msgstr "Ich bin ein Betrachter dieses Dokuments" -#: packages/lib/constants/recipient-roles.ts:73 +#: packages/lib/constants/recipient-roles.ts:77 msgid "I am an approver of this document" msgstr "Ich bin ein Genehmiger dieses Dokuments" -#: packages/lib/constants/recipient-roles.ts:74 +#: packages/lib/constants/recipient-roles.ts:78 msgid "I am required to receive a copy of this document" msgstr "Ich bin verpflichtet, eine Kopie dieses Dokuments zu erhalten" -#: packages/lib/constants/recipient-roles.ts:74 -#~ msgid "I am required to recieve a copy of this document" -#~ msgstr "I am required to recieve a copy of this document" - #: packages/ui/components/recipient/recipient-action-auth-select.tsx:29 #: packages/ui/components/recipient/recipient-action-auth-select.tsx:87 msgid "Inherit authentication method" msgstr "Authentifizierungsmethode erben" +#: packages/ui/primitives/document-flow/types.ts:51 +msgid "Initials" +msgstr "Initialen" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:17 +msgid "Invalid email" +msgstr "Ungültige E-Mail" + +#: packages/ui/primitives/document-flow/add-signature.types.ts:8 +msgid "Invalid email address" +msgstr "Ungültige E-Mail-Adresse" + +#: packages/email/templates/team-invite.tsx:55 +msgid "Join {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67 #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72 #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48 msgid "Label" msgstr "Beschriftung" +#: packages/ui/primitives/document-flow/add-settings.tsx:176 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:150 +msgid "Language" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:87 +msgid "Link expires in 1 hour." +msgstr "" + +#: packages/ui/primitives/lazy-pdf-viewer.tsx:15 +#: packages/ui/primitives/pdf-viewer.tsx:44 +msgid "Loading document..." +msgstr "Lade Dokument..." + #: packages/lib/constants/teams.ts:11 msgid "Manager" msgstr "Manager" @@ -402,7 +671,7 @@ msgid "Member" msgstr "Mitglied" #: packages/ui/primitives/document-flow/add-subject.tsx:95 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:215 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:254 msgid "Message <0>(Optional)" msgstr "Nachricht <0>(Optional)" @@ -410,11 +679,12 @@ msgstr "Nachricht <0>(Optional)" msgid "Min" msgstr "Min" -#: packages/ui/primitives/document-flow/add-fields.tsx:896 +#: packages/ui/primitives/document-flow/add-fields.tsx:901 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:535 #: packages/ui/primitives/document-flow/add-signers.tsx:541 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 +#: packages/ui/primitives/document-flow/types.ts:55 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:664 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:504 msgid "Name" @@ -432,13 +702,13 @@ msgstr "Muss unterzeichnen" msgid "Needs to view" msgstr "Muss sehen" -#: packages/ui/primitives/document-flow/add-fields.tsx:680 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 +#: packages/ui/primitives/document-flow/add-fields.tsx:686 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:504 msgid "No recipient matching this description was found." msgstr "Kein passender Empfänger mit dieser Beschreibung gefunden." -#: packages/ui/primitives/document-flow/add-fields.tsx:696 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 +#: packages/ui/primitives/document-flow/add-fields.tsx:701 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:519 msgid "No recipients with this role" msgstr "Keine Empfänger mit dieser Rolle" @@ -462,8 +732,9 @@ msgstr "Kein Unterschriftsfeld gefunden" msgid "No value found." msgstr "Kein Wert gefunden." -#: packages/ui/primitives/document-flow/add-fields.tsx:974 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 +#: packages/ui/primitives/document-flow/add-fields.tsx:979 +#: packages/ui/primitives/document-flow/types.ts:56 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:742 msgid "Number" msgstr "Nummer" @@ -483,10 +754,30 @@ msgstr "Sobald Ihre Vorlage eingerichtet ist, teilen Sie den Link überall, wo S msgid "Page {0} of {1}" msgstr "Seite {0} von {1}" +#: packages/ui/primitives/pdf-viewer.tsx:259 +msgid "Page {0} of {numPages}" +msgstr "Seite {0} von {numPages}" + #: packages/ui/primitives/document-password-dialog.tsx:62 msgid "Password Required" msgstr "Passwort erforderlich" +#: packages/email/templates/forgot-password.tsx:17 +msgid "Password Reset Requested" +msgstr "" + +#: packages/email/templates/reset-password.tsx:18 +msgid "Password Reset Successful" +msgstr "" + +#: packages/email/template-components/template-reset-password.tsx:22 +msgid "Password updated!" +msgstr "" + +#: packages/email/templates/document-pending.tsx:17 +msgid "Pending Document" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156 msgid "Pick a number" msgstr "Wählen Sie eine Zahl" @@ -497,8 +788,40 @@ msgstr "Wählen Sie eine Zahl" msgid "Placeholder" msgstr "Platzhalter" -#: packages/ui/primitives/document-flow/add-fields.tsx:1000 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 +#: packages/email/template-components/template-document-invite.tsx:43 +msgid "Please {0} your document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:38 +msgid "Please {action} your document {documentName}" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:98 +msgid "Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:112 +msgid "Please {recipientActionVerb} this document created by your direct template" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:104 +msgid "Please {recipientActionVerb} your document" +msgstr "" + +#: packages/lib/server-only/auth/send-confirmation-email.ts:67 +msgid "Please confirm your email" +msgstr "" + +#: packages/email/templates/confirm-email.tsx:15 +msgid "Please confirm your email address" +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:223 +#: packages/ui/primitives/pdf-viewer.tsx:238 +msgid "Please try again or contact our support." +msgstr "Bitte versuchen Sie es erneut oder kontaktieren Sie unseren Support." + +#: packages/ui/primitives/template-flow/add-template-fields.tsx:768 msgid "Radio" msgstr "Radio" @@ -519,8 +842,8 @@ msgid "Receives copy" msgstr "Erhält Kopie" #: packages/ui/components/recipient/recipient-action-auth-select.tsx:39 -#: packages/ui/primitives/document-flow/add-settings.tsx:215 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:169 +#: packages/ui/primitives/document-flow/add-settings.tsx:257 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:208 msgid "Recipient action authentication" msgstr "Empfängeraktion Authentifizierung" @@ -528,12 +851,28 @@ msgstr "Empfängeraktion Authentifizierung" msgid "Red" msgstr "Rot" -#: packages/ui/primitives/document-flow/add-settings.tsx:329 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:332 +#: packages/ui/primitives/document-flow/add-settings.tsx:371 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:371 msgid "Redirect URL" msgstr "Weiterleitungs-URL" -#: packages/ui/primitives/document-flow/add-fields.tsx:1104 +#: packages/lib/server-only/document/resend-document.tsx:165 +msgid "Reminder: {0}" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:118 +msgid "Reminder: {0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:110 +msgid "Reminder: Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:114 +msgid "Reminder: Please {recipientActionVerb} your document" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:1110 msgid "Remove" msgstr "Entfernen" @@ -545,6 +884,14 @@ msgstr "Entfernen" msgid "Required field" msgstr "Pflichtfeld" +#: packages/email/template-components/template-forgot-password.tsx:33 +msgid "Reset Password" +msgstr "" + +#: packages/ui/components/document/document-share-button.tsx:147 +msgid "Rest assured, your document is strictly confidential and will never be shared. Only your signing experience will be highlighted. Share your personalized signing card to showcase your signature!" +msgstr "Seien Sie versichert, Ihr Dokument ist streng vertraulich und wird niemals geteilt. Nur Ihre Unterzeichnungserfahrung wird hervorgehoben. Teilen Sie Ihre personalisierte Unterschriftkarte, um Ihre Unterschrift zu präsentieren!" + #: packages/ui/primitives/data-table-pagination.tsx:55 msgid "Rows per page" msgstr "Zeilen pro Seite" @@ -553,7 +900,7 @@ msgstr "Zeilen pro Seite" msgid "Save" msgstr "Speichern" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:854 msgid "Save Template" msgstr "Vorlage speichern" @@ -595,6 +942,10 @@ msgstr "Unterschriftenkarte teilen" msgid "Share the Link" msgstr "Link teilen" +#: packages/ui/components/document/document-share-button.tsx:143 +msgid "Share your signing experience!" +msgstr "Teilen Sie Ihre Unterzeichnungserfahrung!" + #: packages/ui/primitives/document-flow/add-signers.tsx:680 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655 msgid "Show advanced settings" @@ -604,10 +955,15 @@ msgstr "Erweiterte Einstellungen anzeigen" msgid "Sign" msgstr "Unterschreiben" -#: packages/ui/primitives/document-flow/add-fields.tsx:818 +#: packages/email/template-components/template-reset-password.tsx:34 +msgid "Sign In" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:823 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 +#: packages/ui/primitives/document-flow/types.ts:49 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:586 msgid "Signature" msgstr "Unterschrift" @@ -619,10 +975,27 @@ msgstr "Unterzeichnet" msgid "Signer" msgstr "Unterzeichner" +#: packages/lib/constants/recipient-roles.ts:58 +msgid "Signers" +msgstr "Unterzeichner" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:36 +msgid "Signers must have unique emails" +msgstr "Unterzeichner müssen eindeutige E-Mails haben" + #: packages/lib/constants/recipient-roles.ts:22 msgid "Signing" msgstr "Unterzeichnung" +#: packages/lib/server-only/document/send-completed-email.ts:93 +#: packages/lib/server-only/document/send-completed-email.ts:161 +msgid "Signing Complete!" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:66 +#~ msgid "SIGNING_REQUEST" +#~ msgstr "" + #: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:34 msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding." msgstr "Einige Unterzeichner haben noch kein Unterschriftsfeld zugewiesen bekommen. Bitte weisen Sie jedem Unterzeichner mindestens ein Unterschriftsfeld zu, bevor Sie fortfahren." @@ -631,6 +1004,11 @@ msgstr "Einige Unterzeichner haben noch kein Unterschriftsfeld zugewiesen bekomm msgid "Something went wrong" msgstr "Etwas ist schief gelaufen" +#: packages/ui/primitives/pdf-viewer.tsx:220 +#: packages/ui/primitives/pdf-viewer.tsx:235 +msgid "Something went wrong while loading the document." +msgstr "Beim Laden des Dokuments ist ein Fehler aufgetreten." + #: packages/ui/primitives/data-table.tsx:136 msgid "Something went wrong." msgstr "Etwas ist schief gelaufen." @@ -640,7 +1018,7 @@ msgid "Step <0>{step} of {maxStep}" msgstr "Schritt <0>{step} von {maxStep}" #: packages/ui/primitives/document-flow/add-subject.tsx:78 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:195 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:234 msgid "Subject <0>(Optional)" msgstr "Betreff <0>(Optional)" @@ -648,15 +1026,32 @@ msgstr "Betreff <0>(Optional)" msgid "Submit" msgstr "Einreichen" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:134 +#: packages/lib/server-only/team/delete-team-email.ts:96 +msgid "Team email has been revoked for {0}" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:53 +msgid "Team email removed" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:27 +msgid "Team email removed for {teamName} on Documenso" +msgstr "" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:133 msgid "Template title" msgstr "Vorlagentitel" -#: packages/ui/primitives/document-flow/add-fields.tsx:948 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 +#: packages/ui/primitives/document-flow/add-fields.tsx:953 +#: packages/ui/primitives/document-flow/types.ts:52 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:716 msgid "Text" msgstr "Text" +#: packages/email/template-components/template-forgot-password.tsx:25 +msgid "That's okay, it happens! Click the button below to reset your password." +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:44 msgid "The authentication required for recipients to sign fields" msgstr "Die Authentifizierung, die erforderlich ist, damit Empfänger Felder signieren" @@ -673,10 +1068,22 @@ msgstr "Die Authentifizierung, die erforderlich ist, damit Empfänger das Dokume msgid "The document's name" msgstr "Der Name des Dokuments" +#: packages/email/templates/team-delete.tsx:35 +msgid "The following team has been deleted by its owner. You will no longer be able to access this team and its documents" +msgstr "" + +#: packages/email/templates/team-delete.tsx:34 +msgid "The following team has been deleted by you" +msgstr "" + #: packages/ui/primitives/document-password-dialog.tsx:52 msgid "The password you have entered is incorrect. Please try again." msgstr "Das eingegebene Passwort ist falsch. Bitte versuchen Sie es erneut." +#: packages/email/template-components/template-document-super-delete.tsx:38 +msgid "The reason provided for deletion is the following:" +msgstr "" + #: packages/ui/components/recipient/recipient-role-select.tsx:103 msgid "The recipient is not required to take any action and receives a copy of the document after it is completed." msgstr "Der Empfänger muss keine Aktion ausführen und erhält nach Abschluss eine Kopie des Dokuments." @@ -709,11 +1116,19 @@ msgstr "Die E-Mail des Unterzeichners" msgid "The signer's name" msgstr "Der Name des Unterzeichners" +#: packages/email/templates/team-email-removed.tsx:57 +msgid "The team email <0>{teamEmail} has been removed from the following team" +msgstr "" + #: packages/ui/components/document/document-global-auth-action-select.tsx:72 msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step." msgstr "Dies kann überschrieben werden, indem die Authentifizierungsanforderungen im nächsten Schritt direkt für jeden Empfänger festgelegt werden." -#: packages/ui/primitives/document-flow/add-fields.tsx:752 +#: packages/email/template-components/template-document-super-delete.tsx:31 +msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support." +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:757 msgid "This document has already been sent to this recipient. You can no longer edit this recipient." msgstr "Dieses Dokument wurde bereits an diesen Empfänger gesendet. Sie können diesen Empfänger nicht mehr bearbeiten." @@ -721,18 +1136,18 @@ msgstr "Dieses Dokument wurde bereits an diesen Empfänger gesendet. Sie können msgid "This document is password protected. Please enter the password to view the document." msgstr "Dieses Dokument ist durch ein Passwort geschützt. Bitte geben Sie das Passwort ein, um das Dokument anzusehen." +#: packages/email/template-components/template-footer.tsx:14 +msgid "This document was sent using <0>Documenso." +msgstr "" + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:573 msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." msgstr "Dieses Feld kann nicht geändert oder gelöscht werden. Wenn Sie den direkten Link dieser Vorlage teilen oder zu Ihrem öffentlichen Profil hinzufügen, kann jeder, der darauf zugreift, seinen Namen und seine E-Mail-Adresse eingeben und die ihm zugewiesenen Felder ausfüllen." -#: packages/ui/primitives/document-flow/add-fields.tsx:1084 +#: packages/ui/primitives/document-flow/add-fields.tsx:1090 msgid "This recipient can no longer be modified as they have signed a field, or completed the document." msgstr "Dieser Empfänger kann nicht mehr bearbeitet werden, da er ein Feld unterschrieben oder das Dokument abgeschlossen hat." -#: packages/ui/primitives/document-flow/add-signers.tsx:165 -#~ msgid "This signer has already received the document." -#~ msgstr "This signer has already received the document." - #: packages/ui/primitives/document-flow/add-signers.tsx:194 msgid "This signer has already signed the document." msgstr "Dieser Unterzeichner hat das Dokument bereits unterschrieben." @@ -741,17 +1156,17 @@ msgstr "Dieser Unterzeichner hat das Dokument bereits unterschrieben." msgid "This will override any global settings." msgstr "Dies überschreibt alle globalen Einstellungen." -#: packages/ui/primitives/document-flow/add-settings.tsx:305 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:309 +#: packages/ui/primitives/document-flow/add-settings.tsx:347 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:348 msgid "Time Zone" msgstr "Zeitzone" -#: packages/ui/primitives/document-flow/add-settings.tsx:153 +#: packages/ui/primitives/document-flow/add-settings.tsx:155 msgid "Title" msgstr "Titel" -#: packages/ui/primitives/document-flow/add-fields.tsx:1067 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 +#: packages/ui/primitives/document-flow/add-fields.tsx:1073 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:834 msgid "To proceed further, please set at least one value for the {0} field." msgstr "Um fortzufahren, legen Sie bitte mindestens einen Wert für das Feld {0} fest." @@ -783,28 +1198,64 @@ msgstr "Wert" #: packages/lib/constants/recipient-roles.ts:26 msgid "View" -msgstr "View" +msgstr "Betrachten" + +#: packages/email/templates/document-created-from-direct-template.tsx:69 +msgid "View document" +msgstr "" + +#: packages/email/template-components/template-document-self-signed.tsx:79 +msgid "View plans" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:67 +#~ msgid "VIEW_REQUEST" +#~ msgstr "" #: packages/lib/constants/recipient-roles.ts:27 msgid "Viewed" -msgstr "Viewed" +msgstr "Betrachtet" #: packages/lib/constants/recipient-roles.ts:29 msgid "Viewer" -msgstr "Viewer" +msgstr "Betrachter" + +#: packages/lib/constants/recipient-roles.ts:65 +msgid "Viewers" +msgstr "Betrachter" #: packages/lib/constants/recipient-roles.ts:28 msgid "Viewing" -msgstr "Viewing" +msgstr "Betrachten" -#: packages/ui/primitives/signature-pad/signature-pad.tsx:280 -#~ msgid "White" -#~ msgstr "White" +#: packages/email/template-components/template-document-pending.tsx:31 +msgid "Waiting for others" +msgstr "" + +#: packages/lib/server-only/document/send-pending-email.ts:73 +msgid "Waiting for others to complete signing." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:41 +msgid "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." +msgstr "" + +#: packages/email/templates/reset-password.tsx:59 +msgid "We've changed your password as you asked. You can now sign in with your new password." +msgstr "" + +#: packages/email/template-components/template-confirmation-email.tsx:24 +msgid "Welcome to Documenso!" +msgstr "" #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44 msgid "You are about to send this document to the recipients. Are you sure you want to continue?" msgstr "Sie sind dabei, dieses Dokument an die Empfänger zu senden. Sind Sie sicher, dass Sie fortfahren möchten?" +#: packages/email/template-components/template-confirmation-email.tsx:41 +msgid "You can also copy and paste this link into your browser: {confirmationLink} (link expires in 1 hour)" +msgstr "" + #: packages/ui/components/document/document-send-email-message-helper.tsx:11 msgid "You can use the following variables in your message:" msgstr "Sie können die folgenden Variablen in Ihrer Nachricht verwenden:" @@ -813,7 +1264,48 @@ msgstr "Sie können die folgenden Variablen in Ihrer Nachricht verwenden:" msgid "You cannot upload documents at this time." msgstr "Sie können derzeit keine Dokumente hochladen." +#: packages/email/template-components/template-document-cancel.tsx:35 +msgid "You don't need to sign it anymore." +msgstr "" + +#: packages/lib/server-only/team/create-team-member-invites.ts:168 +msgid "You have been invited to join {0} on Documenso" +msgstr "" + +#: packages/email/templates/team-invite.tsx:59 +msgid "You have been invited to join the following team" +msgstr "" + +#: packages/lib/server-only/recipient/set-recipients-for-document.ts:314 +msgid "You have been removed from a document" +msgstr "" + +#: packages/lib/server-only/team/request-team-ownership-transfer.ts:114 +msgid "You have been requested to take ownership of team {0} on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:102 +#: packages/lib/server-only/document/resend-document.tsx:113 +msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it." +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "You have reached your document limit." msgstr "Sie haben Ihr Dokumentenlimit erreicht." +#: packages/email/template-components/template-document-self-signed.tsx:42 +msgid "You have signed “{documentName}”" +msgstr "" + +#: packages/email/template-components/template-document-super-delete.tsx:23 +msgid "Your document has been deleted by an admin!" +msgstr "" + +#: packages/email/template-components/template-reset-password.tsx:26 +msgid "Your password has been updated." +msgstr "" + +#: packages/email/templates/team-delete.tsx:26 +#: packages/email/templates/team-delete.tsx:30 +msgid "Your team has been deleted" +msgstr "" diff --git a/packages/lib/translations/de/marketing.po b/packages/lib/translations/de/marketing.po index ed237f322..9f97b6734 100644 --- a/packages/lib/translations/de/marketing.po +++ b/packages/lib/translations/de/marketing.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 02:29\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -42,7 +42,7 @@ msgstr "Dokument hinzufügen" msgid "Add More Users for {0}" msgstr "Mehr Benutzer hinzufügen für {0}" -#: apps/marketing/src/app/(marketing)/open/page.tsx:165 +#: apps/marketing/src/app/(marketing)/open/page.tsx:164 msgid "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics" msgstr "Alle unsere Kennzahlen, Finanzen und Erkenntnisse sind öffentlich. Wir glauben an Transparenz und möchten unsere Reise mit Ihnen teilen. Mehr erfahren Sie hier: <0>Ankündigung Offene Kennzahlen" @@ -90,7 +90,7 @@ msgstr "Änderungsprotokoll" msgid "Choose a template from the community app store. Or submit your own template for others to use." msgstr "Wählen Sie eine Vorlage aus dem Community-App-Store. Oder reichen Sie Ihre eigene Vorlage ein, damit andere sie benutzen können." -#: apps/marketing/src/app/(marketing)/open/page.tsx:219 +#: apps/marketing/src/app/(marketing)/open/page.tsx:218 msgid "Community" msgstr "Gemeinschaft" @@ -160,10 +160,6 @@ msgstr "Dokumentation" msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application." msgstr "Betten Sie Documenso ganz einfach in Ihr Produkt ein. Kopieren und fügen Sie einfach unser React-Widget in Ihre Anwendung ein." -#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42 -#~ msgid "Easy Sharing (Soon)." -#~ msgstr "Easy Sharing (Soon)." - #: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46 msgid "Easy Sharing." msgstr "Einfaches Teilen." @@ -197,7 +193,7 @@ msgstr "Schnell." msgid "Faster, smarter and more beautiful." msgstr "Schneller, intelligenter und schöner." -#: apps/marketing/src/app/(marketing)/open/page.tsx:210 +#: apps/marketing/src/app/(marketing)/open/page.tsx:209 msgid "Finances" msgstr "Finanzen" @@ -250,15 +246,15 @@ msgstr "Fangen Sie heute an." msgid "Get the latest news from Documenso, including product updates, team announcements and more!" msgstr "Erhalten Sie die neuesten Nachrichten von Documenso, einschließlich Produkt-Updates, Team-Ankündigungen und mehr!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:233 +#: apps/marketing/src/app/(marketing)/open/page.tsx:232 msgid "GitHub: Total Merged PRs" msgstr "GitHub: Gesamte PRs zusammengeführt" -#: apps/marketing/src/app/(marketing)/open/page.tsx:251 +#: apps/marketing/src/app/(marketing)/open/page.tsx:250 msgid "GitHub: Total Open Issues" msgstr "GitHub: Gesamte offene Issues" -#: apps/marketing/src/app/(marketing)/open/page.tsx:225 +#: apps/marketing/src/app/(marketing)/open/page.tsx:224 msgid "GitHub: Total Stars" msgstr "GitHub: Gesamtanzahl Sterne" @@ -266,7 +262,7 @@ msgstr "GitHub: Gesamtanzahl Sterne" msgid "Global Salary Bands" msgstr "Globale Gehaltsbänder" -#: apps/marketing/src/app/(marketing)/open/page.tsx:261 +#: apps/marketing/src/app/(marketing)/open/page.tsx:260 msgid "Growth" msgstr "Wachstum" @@ -290,7 +286,7 @@ msgstr "Integrierte Zahlungen mit Stripe, sodass Sie sich keine Sorgen ums Bezah msgid "Integrates with all your favourite tools." msgstr "Integriert sich mit all Ihren Lieblingstools." -#: apps/marketing/src/app/(marketing)/open/page.tsx:289 +#: apps/marketing/src/app/(marketing)/open/page.tsx:288 msgid "Is there more?" msgstr "Gibt es mehr?" @@ -314,11 +310,11 @@ msgstr "Standort" msgid "Make it your own through advanced customization and adjustability." msgstr "Machen Sie es zu Ihrem eigenen durch erweiterte Anpassung und Einstellbarkeit." -#: apps/marketing/src/app/(marketing)/open/page.tsx:199 +#: apps/marketing/src/app/(marketing)/open/page.tsx:198 msgid "Merged PR's" msgstr "Zusammengeführte PRs" -#: apps/marketing/src/app/(marketing)/open/page.tsx:234 +#: apps/marketing/src/app/(marketing)/open/page.tsx:233 msgid "Merged PRs" msgstr "Zusammengeführte PRs" @@ -349,8 +345,8 @@ msgstr "Keine Kreditkarte erforderlich" msgid "None of these work for you? Try self-hosting!" msgstr "Keines dieser Angebote passt zu Ihnen? Versuchen Sie das Selbst-Hosting!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:194 -#: apps/marketing/src/app/(marketing)/open/page.tsx:252 +#: apps/marketing/src/app/(marketing)/open/page.tsx:193 +#: apps/marketing/src/app/(marketing)/open/page.tsx:251 msgid "Open Issues" msgstr "Offene Issues" @@ -358,7 +354,7 @@ msgstr "Offene Issues" msgid "Open Source or Hosted." msgstr "Open Source oder Hosted." -#: apps/marketing/src/app/(marketing)/open/page.tsx:161 +#: apps/marketing/src/app/(marketing)/open/page.tsx:160 #: apps/marketing/src/components/(marketing)/footer.tsx:37 #: apps/marketing/src/components/(marketing)/header.tsx:64 #: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:40 @@ -377,18 +373,10 @@ msgstr "Unsere benutzerdefinierten Vorlagen verfügen über intelligente Regeln, msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features." msgstr "Unsere Enterprise-Lizenz ist ideal für große Organisationen, die auf Documenso für all ihre Signaturanforderungen umsteigen möchten. Sie ist sowohl für unser Cloud-Angebot als auch für selbstgehostete Setups verfügbar und bietet eine breite Palette an Compliance- und Verwaltungsfunktionen." -#: apps/marketing/src/components/(marketing)/enterprise.tsx:20 -#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." -#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:65 msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership." msgstr "Unsere selbstgehostete Option ist ideal für kleine Teams und Einzelpersonen, die eine einfache Lösung benötigen. Sie können unser docker-basiertes Setup verwenden, um in wenigen Minuten loszulegen. Übernehmen Sie die Kontrolle mit vollständiger Anpassbarkeit und Datenhoheit." -#: apps/marketing/src/app/(marketing)/open/data.ts:25 -#~ msgid "Part-Time" -#~ msgstr "Part-Time" - #: apps/marketing/src/components/(marketing)/pricing-table.tsx:151 msgid "Premium Profile Name" msgstr "Premium Profilname" @@ -430,10 +418,6 @@ msgstr "Gehalt" msgid "Save $60 or $120" msgstr "Sparen Sie $60 oder $120" -#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47 -#~ msgid "Search languages..." -#~ msgstr "Search languages..." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:109 msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us." msgstr "Sicher. Unsere Rechenzentren befinden sich in Frankfurt (Deutschland) und bieten uns die besten lokalen Datenschutzgesetze. Uns ist die sensible Natur unserer Daten sehr bewusst und wir folgen bewährten Praktiken, um die Sicherheit und Integrität der uns anvertrauten Daten zu gewährleisten." @@ -482,7 +466,7 @@ msgstr "Intelligent." msgid "Star on GitHub" msgstr "Auf GitHub favorisieren" -#: apps/marketing/src/app/(marketing)/open/page.tsx:226 +#: apps/marketing/src/app/(marketing)/open/page.tsx:225 msgid "Stars" msgstr "Favoriten" @@ -517,7 +501,7 @@ msgstr "Vorlagen-Shop (Demnächst)." msgid "That's awesome. You can take a look at the current <0>Issues and join our <1>Discord Community to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️" msgstr "Das ist großartig. Sie können sich die aktuellen <0>Issues ansehen und unserer <1>Discord-Community beitreten, um auf dem neuesten Stand zu bleiben, was die aktuellen Prioritäten sind. In jedem Fall sind wir eine offene Gemeinschaft und begrüßen jegliche Beiträge, technische und nicht-technische ❤️" -#: apps/marketing/src/app/(marketing)/open/page.tsx:293 +#: apps/marketing/src/app/(marketing)/open/page.tsx:292 msgid "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share." msgstr "Diese Seite entwickelt sich weiter, während wir lernen, was ein großartiges Signing-Unternehmen ausmacht. Wir werden sie aktualisieren, wenn wir mehr zu teilen haben." @@ -530,8 +514,8 @@ msgstr "Titel" msgid "Total Completed Documents" msgstr "Insgesamt Abgeschlossene Dokumente" +#: apps/marketing/src/app/(marketing)/open/page.tsx:266 #: apps/marketing/src/app/(marketing)/open/page.tsx:267 -#: apps/marketing/src/app/(marketing)/open/page.tsx:268 msgid "Total Customers" msgstr "Insgesamt Kunden" @@ -618,4 +602,3 @@ msgstr "Sie können Documenso kostenlos selbst hosten oder unsere sofort einsatz #: apps/marketing/src/components/(marketing)/carousel.tsx:272 msgid "Your browser does not support the video tag." msgstr "Ihr Browser unterstützt das Video-Tag nicht." - diff --git a/packages/lib/translations/de/web.po b/packages/lib/translations/de/web.po index 60ac4b12c..f6a1394e6 100644 --- a/packages/lib/translations/de/web.po +++ b/packages/lib/translations/de/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: de\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 04:20\n" "Last-Translator: \n" "Language-Team: German\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -86,7 +86,7 @@ msgstr "{0} von {1} Dokumenten verbleibend in diesem Monat." #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx:165 msgid "{0} Recipient(s)" -msgstr "{0} Empfänger(in) / -n" +msgstr "{0} Empfänger(in)" #: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:67 msgid "{0} the document to complete the process." @@ -117,6 +117,18 @@ msgstr "<0>\"{0}\" steht nicht mehr zur Unterschrift zur Verfügung" msgid "<0>Sender: All" msgstr "<0>Absender: Alle" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:5 +msgid "1 month" +msgstr "1 Monat" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:8 +msgid "12 months" +msgstr "12 Monate" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:6 +msgid "3 months" +msgstr "3 Monate" + #: apps/web/src/components/partials/not-found.tsx:45 msgid "404 Page not found" msgstr "404 Seite nicht gefunden" @@ -133,14 +145,30 @@ msgstr "404 Team nicht gefunden" msgid "404 Template not found" msgstr "404 Vorlage nicht gefunden" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:7 +msgid "6 months" +msgstr "6 Monate" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:4 +msgid "7 days" +msgstr "7 Tage" + #: apps/web/src/components/forms/send-confirmation-email.tsx:55 msgid "A confirmation email has been sent, and it should arrive in your inbox shortly." msgstr "Eine Bestätigungs-E-Mail wurde gesendet, und sie sollte in Kürze in deinem Posteingang ankommen." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:70 +msgid "A device capable of accessing, opening, and reading documents" +msgstr "Ein Gerät, das in der Lage ist, Dokumente zuzugreifen, zu öffnen und zu lesen" + +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201 msgid "A draft document will be created" msgstr "Ein Entwurf wird erstellt" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:73 +msgid "A means to print or download documents for your records" +msgstr "Ein Mittel, um Dokumente für Ihre Unterlagen zu drucken oder herunterzuladen" + #: apps/web/src/components/forms/token.tsx:127 msgid "A new token was created successfully." msgstr "Ein neuer Token wurde erfolgreich erstellt." @@ -163,6 +191,10 @@ msgstr "Ein Geheimnis, das an deine URL gesendet wird, damit du überprüfen kan msgid "A secret that will be sent to your URL so you can verify that the request has been sent by Documenso." msgstr "Ein Geheimnis, das an deine URL gesendet wird, damit du überprüfen kannst, dass die Anfrage von Documenso gesendet wurde." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:64 +msgid "A stable internet connection" +msgstr "Eine stabile Internetverbindung" + #: apps/web/src/components/forms/public-profile-form.tsx:198 msgid "A unique URL to access your profile" msgstr "Eine eindeutige URL, um auf dein Profil zuzugreifen" @@ -180,6 +212,10 @@ msgstr "Eine Bestätigungs-E-Mail wird an die angegebene E-Mail-Adresse gesendet msgid "Accept" msgstr "Akzeptieren" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:33 +msgid "Acceptance and Consent" +msgstr "Zustimmung und Einverständnis" + #: apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx:26 msgid "Accepted team invitation" msgstr "Team-Einladung akzeptiert" @@ -189,6 +225,10 @@ msgstr "Team-Einladung akzeptiert" msgid "Account deleted" msgstr "Konto gelöscht" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:139 +msgid "Acknowledgment" +msgstr "Bestätigung" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:105 #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx:104 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:121 @@ -220,12 +260,12 @@ msgstr "Aktive Abonnements" msgid "Add" msgstr "Hinzufügen" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:176 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:88 msgid "Add all relevant fields for each recipient." msgstr "Fügen Sie alle relevanten Felder für jeden Empfänger hinzu." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:83 msgid "Add all relevant placeholders for each recipient." msgstr "Fügen Sie alle relevanten Platzhalter für jeden Empfänger hinzu." @@ -241,8 +281,8 @@ msgstr "Fügen Sie einen Authenticator hinzu, um als sekundäre Authentifizierun msgid "Add email" msgstr "E-Mail hinzufügen" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 msgid "Add Fields" msgstr "Felder hinzufügen" @@ -250,24 +290,20 @@ msgstr "Felder hinzufügen" msgid "Add more" msgstr "Mehr hinzufügen" -#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270 -#~ msgid "Add number" -#~ msgstr "Add number" - #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154 msgid "Add passkey" msgstr "Passkey hinzufügen" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:81 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 msgid "Add Placeholders" msgstr "Platzhalter hinzufügen" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 msgid "Add Signers" msgstr "Unterzeichner hinzufügen" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 msgid "Add Subject" msgstr "Betreff hinzufügen" @@ -275,23 +311,15 @@ msgstr "Betreff hinzufügen" msgid "Add team email" msgstr "Team-E-Mail hinzufügen" -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256 -#~ msgid "Add text" -#~ msgstr "Add text" - -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272 -#~ msgid "Add Text" -#~ msgstr "Add Text" - -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:171 msgid "Add the people who will sign the document." msgstr "Fügen Sie die Personen hinzu, die das Dokument unterschreiben werden." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203 msgid "Add the recipients to create the document with" msgstr "Fügen Sie die Empfänger hinzu, um das Dokument zu erstellen" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:181 msgid "Add the subject and message you wish to send to signers." msgstr "Fügen Sie den Betreff und die Nachricht hinzu, die Sie den Unterzeichnern senden möchten." @@ -307,6 +335,10 @@ msgstr "Admin-Aktionen" msgid "Admin panel" msgstr "Admin-Panel" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:129 +msgid "After signing a document electronically, you will be provided the opportunity to view, download, and print the document for your records. It is highly recommended that you retain a copy of all electronically signed documents for your personal records. We will also retain a copy of the signed document for our records however we may not be able to provide you with a copy of the signed document after a certain period of time." +msgstr "Nach der elektronischen Unterzeichnung eines Dokuments haben Sie die Möglichkeit, das Dokument für Ihre Unterlagen anzusehen, herunterzuladen und auszudrucken. Es wird dringend empfohlen, eine Kopie aller elektronisch unterschriebenen Dokumente für Ihre persönlichen Unterlagen aufzubewahren. Wir werden ebenfalls eine Kopie des unterzeichneten Dokuments für unsere Unterlagen behalten, jedoch können wir Ihnen nach einer bestimmten Zeit möglicherweise keine Kopie des unterzeichneten Dokuments mehr zur Verfügung stellen." + #: apps/web/src/components/formatter/document-status.tsx:46 msgid "All" msgstr "Alle" @@ -319,6 +351,10 @@ msgstr "Alle Dokumente" msgid "All documents have been processed. Any new documents that are sent or received will show here." msgstr "Alle Dokumente wurden verarbeitet. Alle neuen Dokumente, die gesendet oder empfangen werden, werden hier angezeigt." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:81 +msgid "All documents related to the electronic signing process will be provided to you electronically through our platform or via email. It is your responsibility to ensure that your email address is current and that you can receive and open our emails." +msgstr "Alle Dokumente, die mit dem elektronischen Unterzeichnungsprozess zusammenhängen, werden Ihnen elektronisch über unsere Plattform oder per E-Mail zur Verfügung gestellt. Es liegt in Ihrer Verantwortung, sicherzustellen, dass Ihre E-Mail-Adresse aktuell ist und dass Sie unsere E-Mails empfangen und öffnen können." + #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:145 msgid "All inserted signatures will be voided" msgstr "Alle eingefügten Unterschriften werden annulliert" @@ -347,6 +383,14 @@ msgstr "Hast du bereits ein Konto? <0>Stattdessen anmelden" msgid "Amount" msgstr "Betrag" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:48 +msgid "An electronic signature provided by you on our platform, achieved through clicking through to a document and entering your name, or any other electronic signing method we provide, is legally binding. It carries the same weight and enforceability as a manual signature written with ink on paper." +msgstr "Eine elektronische Unterschrift, die Sie auf unserer Plattform bereitstellen, durch Klicken auf ein Dokument und Eingabe Ihres Namens oder einer anderen von uns bereitgestellten elektronischen Unterzeichnungsart, ist rechtlich bindend. Sie hat das gleiche Gewicht und die gleiche Durchsetzbarkeit wie eine handschriftliche Unterschrift auf Papier." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:67 +msgid "An email account" +msgstr "Ein E-Mail-Konto" + #: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:262 msgid "An email containing an invitation will be sent to each member." msgstr "Eine E-Mail mit einer Einladung wird an jedes Mitglied gesendet." @@ -370,17 +414,17 @@ msgstr "Eine E-Mail, in der die Übertragung dieses Teams angefordert wird, wurd msgid "An error occurred" msgstr "Ein Fehler ist aufgetreten" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:268 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:201 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:235 msgid "An error occurred while adding signers." msgstr "Ein Fehler ist aufgetreten, während Unterzeichner hinzugefügt wurden." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:303 msgid "An error occurred while adding the fields." msgstr "Ein Fehler ist aufgetreten, während die Felder hinzugefügt wurden." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161 msgid "An error occurred while creating document from template." msgstr "Ein Fehler ist aufgetreten, während das Dokument aus der Vorlage erstellt wurde." @@ -419,6 +463,10 @@ msgstr "Ein Fehler ist aufgetreten, während das Dokument verschoben wurde." msgid "An error occurred while moving the template." msgstr "Ein Fehler ist aufgetreten, während die Vorlage verschoben wurde." +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:116 +msgid "An error occurred while removing the field." +msgstr "Ein Fehler ist beim Entfernen des Feldes aufgetreten." + #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:152 #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:126 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:137 @@ -434,7 +482,7 @@ msgstr "Ein Fehler ist aufgetreten, während die Unterschrift entfernt wurde." msgid "An error occurred while removing the text." msgstr "Ein Fehler ist aufgetreten, während der Text entfernt wurde." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:334 msgid "An error occurred while sending the document." msgstr "Ein Fehler ist aufgetreten, während das Dokument gesendet wurde." @@ -446,6 +494,7 @@ msgstr "Beim Senden Ihrer Bestätigungs-E-Mail ist ein Fehler aufgetreten" #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:100 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:106 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:84 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:90 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150 #: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102 @@ -458,8 +507,8 @@ msgstr "Ein Fehler ist aufgetreten, während das Dokument unterzeichnet wurde." msgid "An error occurred while trying to create a checkout session." msgstr "Ein Fehler ist aufgetreten, während versucht wurde, eine Checkout-Sitzung zu erstellen." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:234 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:170 msgid "An error occurred while updating the document settings." msgstr "Ein Fehler ist aufgetreten, während die Dokumenteinstellungen aktualisiert wurden." @@ -543,6 +592,10 @@ msgstr "App-Version" msgid "Approve" msgstr "Genehmigen" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:129 +msgid "Approve Document" +msgstr "Dokument genehmigen" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:78 msgid "Approved" msgstr "Genehmigt" @@ -561,7 +614,7 @@ msgstr "Bist du dir sicher, dass du dieses Team löschen möchtest?" #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98 #: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455 #: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116 @@ -600,7 +653,7 @@ msgstr "Warte auf E-Mail-Bestätigung" msgid "Back" msgstr "Zurück" -#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:109 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:164 msgid "Back to Documents" msgstr "Zurück zu Dokumenten" @@ -650,9 +703,22 @@ msgstr "Durch das Löschen dieses Dokuments wird Folgendes passieren:" msgid "By enabling 2FA, you will be required to enter a code from your authenticator app every time you sign in." msgstr "Durch die Aktivierung von 2FA müssen Sie jedes Mal, wenn Sie sich anmelden, einen Code aus Ihrer Authenticator-App eingeben." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:142 +msgid "By proceeding to use the electronic signature service provided by Documenso, you affirm that you have read and understood this disclosure. You agree to all terms and conditions related to the use of electronic signatures and electronic transactions as outlined herein." +msgstr "Indem Sie den elektronischen Unterzeichnungsdienst von Documenso verwenden, bestätigen Sie, dass Sie diese Offenlegung gelesen und verstanden haben. Sie stimmen allen Bedingungen und Konditionen zu, die mit der Verwendung elektronischer Unterschriften und elektronischer Transaktionen verbunden sind, wie hierin dargelegt." + +#: apps/web/src/components/general/signing-disclosure.tsx:14 +msgid "By proceeding with your electronic signature, you acknowledge and consent that it will be used to sign the given document and holds the same legal validity as a handwritten signature. By completing the electronic signing process, you affirm your understanding and acceptance of these conditions." +msgstr "Indem Sie fortfahren, Ihre elektronische Unterschrift zu leisten, erkennen Sie an und stimmen zu, dass sie verwendet wird, um das gegebene Dokument zu unterzeichnen, und die gleiche rechtliche Gültigkeit wie eine handschriftliche Unterschrift hat. Durch den Abschluss des elektronischen Unterzeichnungsprozesses bestätigen Sie Ihr Verständnis und Ihre Akzeptanz dieser Bedingungen." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:92 +msgid "By using the electronic signature feature, you are consenting to conduct transactions and receive disclosures electronically. You acknowledge that your electronic signature on documents is binding and that you accept the terms outlined in the documents you are signing." +msgstr "Durch die Verwendung der elektronischen Unterschriftsfunktion stimmen Sie zu, Transaktionen durchzuführen und Offenlegungen elektronisch zu erhalten. Sie erkennen an, dass Ihre elektronische Unterschrift auf Dokumenten bindend ist und dass Sie die Bedingungen akzeptieren, die in den Dokumenten dargelegt sind, die Sie unterzeichnen." + #: apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx:186 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:190 #: apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx:108 +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:120 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:248 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:157 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:198 @@ -660,12 +726,13 @@ msgstr "Durch die Aktivierung von 2FA müssen Sie jedes Mal, wenn Sie sich anmel #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:151 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327 #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113 @@ -753,13 +820,13 @@ msgstr "Klicken Sie, um den Signatur-Link zu kopieren, um ihn an den Empfänger #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:115 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:440 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:319 msgid "Click to insert field" msgstr "Klicken Sie, um das Feld einzufügen" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121 @@ -771,8 +838,8 @@ msgid "Close" msgstr "Schließen" #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:430 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:309 #: apps/web/src/components/forms/v2/signup.tsx:534 msgid "Complete" msgstr "Vollständig" @@ -802,11 +869,11 @@ msgstr "Abgeschlossene Dokumente" msgid "Completed Documents" msgstr "Abgeschlossene Dokumente" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:166 msgid "Configure general settings for the document." msgstr "Konfigurieren Sie die allgemeinen Einstellungen für das Dokument." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:78 msgid "Configure general settings for the template." msgstr "Konfigurieren Sie die allgemeinen Einstellungen für die Vorlage." @@ -814,7 +881,7 @@ msgstr "Konfigurieren Sie die allgemeinen Einstellungen für die Vorlage." msgid "Configure template" msgstr "Vorlage konfigurieren" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:460 msgid "Confirm" msgstr "Bestätigen" @@ -844,6 +911,14 @@ msgstr "E-Mail bestätigen" msgid "Confirmation email sent" msgstr "Bestätigungs-E-Mail gesendet" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:89 +msgid "Consent to Electronic Transactions" +msgstr "Zustimmung zu elektronischen Transaktionen" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:151 +msgid "Contact Information" +msgstr "Kontaktinformationen" + #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:189 msgid "Content" msgstr "Inhalt" @@ -900,11 +975,11 @@ msgstr "Ein Team erstellen, um mit Ihren Teammitgliedern zusammenzuarbeiten." msgid "Create account" msgstr "Konto erstellen" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345 msgid "Create and send" msgstr "Erstellen und senden" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347 msgid "Create as draft" msgstr "Als Entwurf erstellen" @@ -916,7 +991,7 @@ msgstr "Direkten Link erstellen" msgid "Create Direct Signing Link" msgstr "Direkten Signatur-Link erstellen" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197 msgid "Create document from template" msgstr "Dokument aus der Vorlage erstellen" @@ -985,19 +1060,11 @@ msgstr "Erstellt am" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:67 #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:88 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:93 msgid "Created on {0}" msgstr "Erstellt am {0}" -#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94 -#~ msgid "Created on <0/>" -#~ msgstr "Created on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 -msgid "Created on{0}" -msgstr ">>>>>>> 4ca18b99 (fix: refactor dates)" - #: apps/web/src/components/forms/password.tsx:107 msgid "Current Password" msgstr "Aktuelles Passwort" @@ -1036,6 +1103,10 @@ msgstr "Ablehnen" msgid "Declined team invitation" msgstr "Team-Einladung abgelehnt" +#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:90 +msgid "delete" +msgstr "löschen" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:141 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:187 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:200 @@ -1045,7 +1116,7 @@ msgstr "Team-Einladung abgelehnt" #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:100 #: apps/web/src/app/(dashboard)/templates/data-table-action-dropdown.tsx:91 #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:90 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:122 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:116 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:105 #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:121 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:109 @@ -1054,6 +1125,15 @@ msgstr "Team-Einladung abgelehnt" msgid "Delete" msgstr "Löschen" +#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:56 +#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:54 +msgid "delete {0}" +msgstr "löschen {0}" + +#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:50 +msgid "delete {teamName}" +msgstr "löschen {teamName}" + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:137 msgid "Delete account" msgstr "Konto löschen" @@ -1113,10 +1193,6 @@ msgstr "Gelöscht" msgid "Deleting account..." msgstr "Konto wird gelöscht..." -#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135 -#~ msgid "Deleting document" -#~ msgstr "Deleting document" - #: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75 msgid "Device" msgstr "Gerät" @@ -1221,7 +1297,7 @@ msgstr "Dokument abgeschlossen" msgid "Document Completed!" msgstr "Dokument abgeschlossen!" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150 msgid "Document created" msgstr "Dokument erstellt" @@ -1252,7 +1328,7 @@ msgstr "Dokument-ID" msgid "Document inbox" msgstr "Dokumenten-Posteingang" -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179 msgid "Document Limit Exceeded!" msgstr "Dokumentenlimit überschritten!" @@ -1280,7 +1356,7 @@ msgstr "Dokument erneut gesendet" msgid "Document resealed" msgstr "Dokument wieder versiegelt" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:323 msgid "Document sent" msgstr "Dokument gesendet" @@ -1375,10 +1451,6 @@ msgstr "Entwurfdokumente" msgid "Drafted Documents" msgstr "Entwurfte Dokumente" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:245 -#~ msgid "Draw" -#~ msgstr "Draw" - #: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:121 msgid "Due to an unpaid invoice, your team has been restricted. Please settle the payment to restore full access to your team." msgstr "Aufgrund einer unbezahlten Rechnung wurde Ihrem Team der Zugriff eingeschränkt. Bitte begleichen Sie die Zahlung, um den vollumfänglichen Zugang zu Ihrem Team wiederherzustellen." @@ -1409,15 +1481,23 @@ msgstr "Bearbeiten" msgid "Edit webhook" msgstr "Webhook bearbeiten" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:78 +msgid "Electronic Delivery of Documents" +msgstr "Elektronische Zustellung von Dokumenten" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:17 +msgid "Electronic Signature Disclosure" +msgstr "Offenlegung der elektronischen Unterschrift" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255 #: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:377 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:257 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169 #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153 #: apps/web/src/components/forms/forgot-password.tsx:81 @@ -1437,6 +1517,10 @@ msgstr "E-Mail-Adresse" msgid "Email Address" msgstr "E-Mail-Adresse" +#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:80 +msgid "Email cannot already exist in the template" +msgstr "E-Mail darf nicht bereits in der Vorlage vorhanden sein" + #: apps/web/src/app/(unauthenticated)/verify-email/[token]/client.tsx:36 msgid "Email Confirmed!" msgstr "E-Mail bestätigt!" @@ -1501,19 +1585,19 @@ msgstr "Geben Sie hier Ihren Text ein" #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:233 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:267 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:302 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:333 #: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:165 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:196 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:169 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:200 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:234 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212 @@ -1523,6 +1607,8 @@ msgstr "Geben Sie hier Ihren Text ein" #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:136 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:109 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:89 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:115 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:121 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:147 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:149 @@ -1554,23 +1640,10 @@ msgstr "Zeitüberschreitung überschritten" msgid "Expired" msgstr "Abgelaufen" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106 -#~ msgid "Expires on" -#~ msgstr "Expires on" - #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:104 msgid "Expires on {0}" -msgstr ">>>>>>> 4ca18b99 (fix: refactor dates)" - -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 -#~ msgid "Expires on <0/>" -#~ msgstr "Expires on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107 -msgid "Expires on{0}" -msgstr "Läuft ab am{0}" +msgstr "Läuft ab am {0}" #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:42 msgid "Failed to reseal document" @@ -1593,22 +1666,27 @@ msgstr "Felder" msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" msgstr "Die Datei darf nicht größer als {APP_DOCUMENT_UPLOAD_SIZE_LIMIT} MB sein" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:154 +msgid "For any questions regarding this disclosure, electronic signatures, or any related process, please contact us at: <0>{SUPPORT_EMAIL}" +msgstr "Für Fragen zu dieser Offenlegung, elektronischen Unterschriften oder einem verwandten Verfahren kontaktieren Sie uns bitte unter: <0>{SUPPORT_EMAIL}" + #: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21 #: apps/web/src/components/forms/signin.tsx:370 msgid "Forgot your password?" msgstr "Haben Sie Ihr Passwort vergessen?" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:362 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:242 #: apps/web/src/components/forms/profile.tsx:110 #: apps/web/src/components/forms/v2/signup.tsx:312 msgid "Full Name" msgstr "Vollständiger Name" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 #: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60 #: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43 #: apps/web/src/components/(teams)/settings/layout/mobile-nav.tsx:51 @@ -1669,10 +1747,6 @@ msgstr "Ausblenden" msgid "Hide additional information" msgstr "Zusätzliche Informationen ausblenden" -#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40 -#~ msgid "I am the owner of this document" -#~ msgstr "I am the owner of this document" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173 msgid "I'm sure! Delete it" @@ -1706,6 +1780,10 @@ msgstr "Posteingang Dokumente" msgid "Information" msgstr "Information" +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:132 +msgid "Initials" +msgstr "Inititalen" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:78 msgid "Inserted" msgstr "Eingefügt" @@ -1772,6 +1850,10 @@ msgstr "Eingeladen am" msgid "Invoice" msgstr "Rechnung" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:118 +msgid "It is crucial to keep your contact information, especially your email address, up to date with us. Please notify us immediately of any changes to ensure that you continue to receive all necessary communications." +msgstr "Es ist entscheidend, dass Sie Ihre Kontaktinformationen, insbesondere Ihre E-Mail-Adresse, aktuell halten. Bitte informieren Sie uns sofort über Änderungen, damit Sie weiterhin alle notwendigen Mitteilungen erhalten." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:134 msgid "It looks like {0} hasn't added any documents to their profile yet." msgstr "Es sieht so aus, als ob {0} noch keine Dokumente zu ihrem Profil hinzugefügt hat." @@ -1837,6 +1919,10 @@ msgstr "Verlassen" msgid "Leave team" msgstr "Team verlassen" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:45 +msgid "Legality of Electronic Signatures" +msgstr "Rechtlichkeit elektronischer Unterschriften" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:264 msgid "Light Mode" msgstr "Lichtmodus" @@ -1990,6 +2076,7 @@ msgstr "Monatlich aktive Benutzer: Benutzer, die mindestens ein Dokument erstell msgid "Monthly Active Users: Users that had at least one of their documents completed" msgstr "Monatlich aktive Benutzer: Benutzer, die mindestens eines ihrer Dokumente abgeschlossen haben" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Move" msgstr "Verschieben" @@ -2007,6 +2094,7 @@ msgstr "Vorlage in Team verschieben" msgid "Move to Team" msgstr "In Team verschieben" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Moving..." msgstr "Verschieben..." @@ -2021,8 +2109,8 @@ msgstr "Meine Vorlagen" #: 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.tsx:61 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277 #: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153 @@ -2052,8 +2140,8 @@ msgstr "Neuer Teamowner" msgid "New Template" msgstr "Neue Vorlage" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:421 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:300 #: apps/web/src/components/forms/v2/signup.tsx:521 msgid "Next" msgstr "Nächster" @@ -2173,12 +2261,14 @@ msgstr "Oder" msgid "Or continue with" msgstr "Oder fahren Sie fort mit" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324 msgid "Otherwise, the document will be created as a draft." msgstr "Andernfalls wird das Dokument als Entwurf erstellt." #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:86 #: apps/web/src/components/(dashboard)/layout/menu-switcher.tsx:81 +#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:86 +#: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:109 msgid "Owner" msgstr "Besitzer" @@ -2313,7 +2403,7 @@ msgstr "Bitte geben Sie einen aussagekräftigen Namen für Ihr Token ein. Dies w msgid "Please mark as viewed to complete" msgstr "Bitte als angesehen markieren, um abzuschließen" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459 msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder." msgstr "Bitte beachten Sie, dass das Fortfahren den direkten Linkempfänger entfernt und ihn in einen Platzhalter umwandelt." @@ -2349,6 +2439,10 @@ msgstr "Bitte geben Sie ein Token von der Authentifizierungs-App oder einen Back msgid "Please provide a token from your authenticator, or a backup code." msgstr "Bitte geben Sie ein Token von Ihrem Authentifizierer oder einen Backup-Code an." +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:169 +msgid "Please review the document before signing." +msgstr "Bitte überprüfen Sie das Dokument vor der Unterzeichnung." + #: apps/web/src/components/forms/send-confirmation-email.tsx:64 msgid "Please try again and make sure you enter the correct email address." msgstr "Bitte versuchen Sie es erneut und stellen Sie sicher, dass Sie die korrekte E-Mail-Adresse eingeben." @@ -2431,6 +2525,10 @@ msgstr "Öffentliche Vorlagen sind mit Ihrem öffentlichen Profil verbunden. Än msgid "Read only field" msgstr "Nur-Lese-Feld" +#: apps/web/src/components/general/signing-disclosure.tsx:21 +msgid "Read the full <0>signature disclosure." +msgstr "Lesen Sie die vollständige <0>Offenlegung der Unterschrift." + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:90 msgid "Ready" msgstr "Bereit" @@ -2558,6 +2656,10 @@ msgstr "Zahlung klären" msgid "Resolve payment" msgstr "Zahlung klären" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:126 +msgid "Retention of Documents" +msgstr "Aufbewahrung von Dokumenten" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:168 msgid "Retry" msgstr "Wiederholen" @@ -2604,7 +2706,7 @@ msgstr "Rolle" msgid "Roles" msgstr "Rollen" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342 msgid "Save" @@ -2626,6 +2728,10 @@ msgstr "Nach Dokumenttitel suchen" msgid "Search by name or email" msgstr "Nach Name oder E-Mail suchen" +#: apps/web/src/components/(dashboard)/document-search/document-search.tsx:42 +msgid "Search documents..." +msgstr "Dokumente suchen..." + #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:189 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:217 msgid "Secret" @@ -2674,7 +2780,7 @@ msgstr "Passkey auswählen" msgid "Send confirmation email" msgstr "Bestätigungs-E-Mail senden" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308 msgid "Send document" msgstr "Dokument senden" @@ -2756,19 +2862,19 @@ msgstr "Unterzeichnen" msgid "Sign as {0} <0>({1})" msgstr "Unterzeichnen als {0} <0>({1})" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219 -#~ msgid "Sign as <0>{0} <1>({1})" -#~ msgstr "Sign as <0>{0} <1>({1})" - #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183 msgid "Sign as<0>{0} <1>({1})" msgstr "Unterzeichnen als<0>{0} <1>({1})" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:330 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:210 msgid "Sign document" msgstr "Dokument unterschreiben" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:128 +msgid "Sign Document" +msgstr "Dokument unterzeichnen" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59 msgid "Sign field" msgstr "Unterzeichnen-Feld" @@ -2793,8 +2899,8 @@ msgstr "Melden Sie sich bei Ihrem Konto an" msgid "Sign Out" msgstr "Ausloggen" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:351 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:231 msgid "Sign the document to complete the process." msgstr "Unterschreiben Sie das Dokument, um den Vorgang abzuschließen." @@ -2818,10 +2924,11 @@ msgstr "Registrieren mit OIDC" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88 #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:192 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:392 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:271 #: apps/web/src/components/forms/profile.tsx:132 msgid "Signature" msgstr "Unterschrift" @@ -2999,6 +3106,10 @@ msgstr "Erfolg" msgid "Successfully created passkey" msgstr "Passkey erfolgreich erstellt" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:57 +msgid "System Requirements" +msgstr "Systemanforderungen" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:266 msgid "System Theme" msgstr "Systemthema" @@ -3119,40 +3230,40 @@ msgstr "Teams" #: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:83 msgid "Teams restricted" -msgstr "Teams restricted" +msgstr "Teams beschränkt" #: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:408 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:271 msgid "Template" -msgstr "Template" +msgstr "Vorlage" #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:41 msgid "Template deleted" -msgstr "Template deleted" +msgstr "Vorlage gelöscht" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:67 msgid "Template document uploaded" -msgstr "Template document uploaded" +msgstr "Vorlagendokument hochgeladen" #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:42 msgid "Template duplicated" -msgstr "Template duplicated" +msgstr "Vorlage dupliziert" #: apps/web/src/components/templates/manage-public-template-dialog.tsx:134 msgid "Template has been removed from your public profile." -msgstr "Template has been removed from your public profile." +msgstr "Vorlage ist von Deinem öffentlichen Profil entfernt worden." #: apps/web/src/components/templates/manage-public-template-dialog.tsx:171 msgid "Template has been updated." -msgstr "Template has been updated." +msgstr "Vorlage wurde aktualisiert." #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:48 msgid "Template moved" -msgstr "Template moved" +msgstr "Vorlage verschoben" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:219 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:223 msgid "Template saved" -msgstr "Template saved" +msgstr "Vorlage gespeichert" #: apps/web/src/app/(dashboard)/templates/[id]/template-page-view.tsx:60 #: apps/web/src/app/(dashboard)/templates/templates-page-view.tsx:55 @@ -3160,11 +3271,11 @@ msgstr "Template saved" #: apps/web/src/components/(dashboard)/layout/desktop-nav.tsx:22 #: apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx:39 msgid "Templates" -msgstr "Templates" +msgstr "Vorlagen" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:106 msgid "Templates allow you to quickly generate documents with pre-filled recipients and fields." -msgstr "Templates allow you to quickly generate documents with pre-filled recipients and fields." +msgstr "Vorlagen erlauben dir das schnelle Erstlelen von Dokumenten mit vorausgefüllten Empfängern und Feldern." #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272 @@ -3173,303 +3284,311 @@ msgstr "Text" #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:166 msgid "Text Color" -msgstr "Text Color" +msgstr "Textfarbe" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:24 +msgid "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." +msgstr "Vielen Dank, dass Sie Documenso zur elektronischen Unterzeichnung Ihrer Dokumente verwenden. Der Zweck dieser Offenlegung besteht darin, Sie über den Prozess, die Rechtmäßigkeit und Ihre Rechte in Bezug auf die Verwendung elektronischer Unterschriften auf unserer Plattform zu informieren. Indem Sie sich entscheiden, eine elektronische Unterschrift zu verwenden, stimmen Sie den nachfolgend dargelegten Bedingungen zu." #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:52 msgid "The account has been deleted successfully." -msgstr "The account has been deleted successfully." +msgstr "Das Konto wurde erfolgreich gelöscht." #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:197 msgid "The content to show in the banner, HTML is allowed" -msgstr "The content to show in the banner, HTML is allowed" +msgstr "Der Inhalt, der im Banne rgezeig wird, HTML ist erlaubt" #: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:78 #: apps/web/src/app/(dashboard)/templates/template-direct-link-badge.tsx:32 #: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:164 msgid "The direct link has been copied to your clipboard" -msgstr "The direct link has been copied to your clipboard" +msgstr "Der direkte Linkt wurde in die Zwischenablage kopiert" #: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:50 msgid "The document has been successfully moved to the selected team." -msgstr "The document has been successfully moved to the selected team." +msgstr "Das Dokument wurde erfolgreich in das ausgewählte Team verschoben." #: apps/web/src/app/embed/completed.tsx:29 msgid "The document is now completed, please follow any instructions provided within the parent application." msgstr "Das Dokument ist jetzt abgeschlossen. Bitte folgen Sie allen Anweisungen, die in der übergeordneten Anwendung bereitgestellt werden." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167 msgid "The document was created but could not be sent to recipients." -msgstr "The document was created but could not be sent to recipients." +msgstr "Das Dokument wurde erstellt, konnte aber nicht an die Empfänger versendet werden." #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:161 msgid "The document will be hidden from your account" -msgstr "The document will be hidden from your account" +msgstr "Das Dokument wird von Ihrem Konto verborgen werden" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316 msgid "The document will be immediately sent to recipients if this is checked." -msgstr "The document will be immediately sent to recipients if this is checked." +msgstr "Das Dokument wird sofort an die Empfänger gesendet, wenn dies angehakt ist." #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:175 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/[id]/page.tsx:179 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:203 msgid "The events that will trigger a webhook to be sent to your URL." -msgstr "The events that will trigger a webhook to be sent to your URL." +msgstr "Die Ereignisse, die einen Webhook auslösen, der an Ihre URL gesendet wird." #: apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx:114 msgid "The ownership of team <0>{0} has been successfully transferred to you." -msgstr "The ownership of team <0>{0} has been successfully transferred to you." +msgstr "Die Inhaberschaft des Teams <0>{0} wurde erfolgreich auf Sie übertragen." #: apps/web/src/components/partials/not-found.tsx:53 msgid "The page you are looking for was moved, removed, renamed or might never have existed." -msgstr "The page you are looking for was moved, removed, renamed or might never have existed." +msgstr "Die Seite, die Sie suchen, wurde verschoben, entfernt, umbenannt oder hat möglicherweise nie existiert." #: apps/web/src/components/forms/public-profile-form.tsx:118 msgid "The profile link has been copied to your clipboard" -msgstr "The profile link has been copied to your clipboard" +msgstr "Der Profil-Link wurde in die Zwischenablage kopiert" #: apps/web/src/app/(profile)/p/[url]/not-found.tsx:23 msgid "The profile you are looking for could not be found." -msgstr "The profile you are looking for could not be found." +msgstr "Das Profil, nach dem Sie suchen, konnte nicht gefunden werden." #: apps/web/src/components/templates/manage-public-template-dialog.tsx:380 msgid "The public description that will be displayed with this template" -msgstr "The public description that will be displayed with this template" +msgstr "Die öffentliche Beschreibung, die mit dieser Vorlage angezeigt wird" #: apps/web/src/components/templates/manage-public-template-dialog.tsx:358 msgid "The public name for your template" -msgstr "The public name for your template" +msgstr "Der öffentliche Name für Ihre Vorlage" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:119 msgid "The recipient has been updated successfully" -msgstr "The recipient has been updated successfully" +msgstr "Der Empfänger wurde erfolgreich aktualisiert" #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:267 msgid "The selected team member will receive an email which they must accept before the team is transferred" -msgstr "The selected team member will receive an email which they must accept before the team is transferred" +msgstr "Das ausgewählte Teammitglied erhält eine E-Mail, die es akzeptieren muss, bevor das Team übertragen wird" #: apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx:41 msgid "The signing link has been copied to your clipboard." -msgstr "The signing link has been copied to your clipboard." +msgstr "Der Signierlink wurde in die Zwischenablage kopiert." #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:105 msgid "The site banner is a message that is shown at the top of the site. It can be used to display important information to your users." -msgstr "The site banner is a message that is shown at the top of the site. It can be used to display important information to your users." +msgstr "Das Seitenbanner ist eine Nachricht, die oben auf der Seite angezeigt wird. Es kann verwendet werden, um Ihren Nutzern wichtige Informationen anzuzeigen." #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:45 msgid "The team transfer invitation has been successfully deleted." -msgstr "The team transfer invitation has been successfully deleted." +msgstr "Die Einladung zur Teamübertragung wurde erfolgreich gelöscht." #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:86 msgid "The team transfer request to <0>{0} has expired." -msgstr "The team transfer request to <0>{0} has expired." +msgstr "Die Teamübertragungsanfrage an <0>{0} ist abgelaufen." #: apps/web/src/app/(teams)/t/[teamUrl]/not-found.tsx:23 msgid "The team you are looking for may have been removed, renamed or may have never existed." -msgstr "The team you are looking for may have been removed, renamed or may have never existed." +msgstr "Das Team, das Sie suchen, wurde möglicherweise entfernt, umbenannt oder hat möglicherweise nie existiert." #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:49 msgid "The template has been successfully moved to the selected team." -msgstr "The template has been successfully moved to the selected team." +msgstr "Die Vorlage wurde erfolgreich in das ausgewählte Team verschoben." #: apps/web/src/components/templates/manage-public-template-dialog.tsx:443 msgid "The template will be removed from your profile" -msgstr "The template will be removed from your profile" +msgstr "Die Vorlage wird von Ihrem Profil entfernt" #: apps/web/src/app/(recipient)/d/[token]/not-found.tsx:23 msgid "The template you are looking for may have been disabled, deleted or may have never existed." -msgstr "The template you are looking for may have been disabled, deleted or may have never existed." +msgstr "Die Vorlage, die Sie suchen, wurde möglicherweise deaktiviert, gelöscht oder hat möglicherweise nie existiert." #: apps/web/src/components/forms/token.tsx:106 msgid "The token was copied to your clipboard." -msgstr "The token was copied to your clipboard." +msgstr "Der Token wurde in die Zwischenablage kopiert." #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:88 msgid "The token was deleted successfully." -msgstr "The token was deleted successfully." +msgstr "Das Token wurde erfolgreich gelöscht." #: apps/web/src/app/(unauthenticated)/reset-password/page.tsx:24 msgid "The token you have used to reset your password is either expired or it never existed. If you have still forgotten your password, please request a new reset link." -msgstr "The token you have used to reset your password is either expired or it never existed. If you have still forgotten your password, please request a new reset link." +msgstr "Der Token, den Sie zur Zurücksetzung Ihres Passworts verwendet haben, ist entweder abgelaufen oder hat nie existiert. Wenn Sie Ihr Passwort immer noch vergessen haben, fordern Sie bitte einen neuen Zurücksetzungslink an." #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:124 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/[id]/page.tsx:128 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:152 msgid "The URL for Documenso to send webhook events to." -msgstr "The URL for Documenso to send webhook events to." +msgstr "Die URL für Documenso, um Webhook-Ereignisse zu senden." #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:79 msgid "The webhook has been successfully deleted." -msgstr "The webhook has been successfully deleted." +msgstr "Das Webhook wurde erfolgreich gelöscht." #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:75 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/[id]/page.tsx:81 msgid "The webhook has been updated successfully." -msgstr "The webhook has been updated successfully." +msgstr "Der Webhook wurde erfolgreich aktualisiert." #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:93 msgid "The webhook was successfully created." -msgstr "The webhook was successfully created." +msgstr "Der Webhook wurde erfolgreich erstellt." #: apps/web/src/app/(dashboard)/documents/empty-state.tsx:25 msgid "There are no active drafts at the current moment. You can upload a document to start drafting." -msgstr "There are no active drafts at the current moment. You can upload a document to start drafting." +msgstr "Es gibt derzeit keine aktiven Entwürfe. Sie können ein Dokument hochladen, um mit dem Entwerfen zu beginnen." #: apps/web/src/app/(dashboard)/documents/empty-state.tsx:20 msgid "There are no completed documents yet. Documents that you have created or received will appear here once completed." -msgstr "There are no completed documents yet. Documents that you have created or received will appear here once completed." +msgstr "Es gibt noch keine abgeschlossenen Dokumente. Dokumente, die Sie erstellt oder erhalten haben, werden hier angezeigt, sobald sie abgeschlossen sind." #: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:70 msgid "They have permission on your behalf to:" -msgstr "They have permission on your behalf to:" +msgstr "Sie haben in Ihrem Namen die Erlaubnis, zu:" #: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:110 #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:110 #: apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx:109 msgid "This action is not reversible. Please be certain." -msgstr "This action is not reversible. Please be certain." +msgstr "Diese Aktion ist nicht umkehrbar. Bitte seien Sie sicher." #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:81 msgid "This document could not be deleted at this time. Please try again." -msgstr "This document could not be deleted at this time. Please try again." +msgstr "Dieses Dokument konnte derzeit nicht gelöscht werden. Bitte versuchen Sie es erneut." #: apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx:73 msgid "This document could not be duplicated at this time. Please try again." -msgstr "This document could not be duplicated at this time. Please try again." +msgstr "Dieses Dokument konnte derzeit nicht dupliziert werden. Bitte versuche es erneut." #: apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx:106 msgid "This document could not be re-sent at this time. Please try again." -msgstr "This document could not be re-sent at this time. Please try again." +msgstr "Dieses Dokument konnte zu diesem Zeitpunkt nicht erneut gesendet werden. Bitte versuchen Sie es erneut." #: apps/web/src/app/(signing)/sign/[token]/complete/page.tsx:180 msgid "This document has been cancelled by the owner and is no longer available for others to sign." -msgstr "This document has been cancelled by the owner and is no longer available for others to sign." +msgstr "Dieses Dokument wurde vom Eigentümer storniert und steht anderen nicht mehr zur Unterzeichnung zur Verfügung." #: apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx:52 msgid "This document has been cancelled by the owner." -msgstr "This document has been cancelled by the owner." +msgstr "Dieses Dokument wurde vom Eigentümer storniert." #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx:219 msgid "This document has been signed by all recipients" -msgstr "This document has been signed by all recipients" +msgstr "Dieses Dokument wurde von allen Empfängern unterschrieben" #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx:222 msgid "This document is currently a draft and has not been sent" -msgstr "This document is currently a draft and has not been sent" +msgstr "Dieses Dokument ist momentan ein Entwurf und wurde nicht gesendet" #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:93 msgid "This email is already being used by another team." -msgstr "This email is already being used by another team." +msgstr "Diese E-Mail-Adresse wird bereits von einem anderen Team verwendet." #: apps/web/src/app/(unauthenticated)/team/verify/transfer/[token]/page.tsx:40 msgid "This link is invalid or has expired. Please contact your team to resend a transfer request." -msgstr "This link is invalid or has expired. Please contact your team to resend a transfer request." +msgstr "Dieser Link ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihr Team, um eine erneute Überweisungsanfrage zu senden." #: apps/web/src/app/(unauthenticated)/team/verify/email/[token]/page.tsx:37 msgid "This link is invalid or has expired. Please contact your team to resend a verification." -msgstr "This link is invalid or has expired. Please contact your team to resend a verification." +msgstr "Dieser Link ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihr Team, um eine neue Bestätigungsanfrage zu senden." #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:208 msgid "This passkey has already been registered." -msgstr "This passkey has already been registered." +msgstr "Dieser Zugangsschlüssel wurde bereits registriert." #: apps/web/src/components/forms/signin.tsx:200 msgid "This passkey is not configured for this application. Please login and add one in the user settings." -msgstr "This passkey is not configured for this application. Please login and add one in the user settings." +msgstr "Dieser Passkey ist für diese Anwendung nicht konfiguriert. Bitte melden Sie sich an und fügen Sie einen in den Benutzereinstellungen hinzu." #: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:148 msgid "This price includes minimum 5 seats." -msgstr "This price includes minimum 5 seats." +msgstr "Dieser Preis beinhaltet mindestens 5 Plätze." #: apps/web/src/components/forms/signin.tsx:202 msgid "This session has expired. Please try again." -msgstr "This session has expired. Please try again." +msgstr "Diese Sitzung ist abgelaufen. Bitte versuchen Sie es erneut." #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:195 msgid "This team, and any associated data excluding billing invoices will be permanently deleted." -msgstr "This team, and any associated data excluding billing invoices will be permanently deleted." +msgstr "Dieses Team und alle zugehörigen Daten, ausgenommen Rechnungen, werden permanent gelöscht." #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:51 msgid "This template could not be deleted at this time. Please try again." -msgstr "This template could not be deleted at this time. Please try again." +msgstr "Diese Vorlage konnte derzeit nicht gelöscht werden. Bitte versuchen Sie es erneut." #: apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx:43 msgid "This token is invalid or has expired. No action is needed." -msgstr "This token is invalid or has expired. No action is needed." +msgstr "Dieses Token ist ungültig oder abgelaufen. Es sind keine weiteren Maßnahmen erforderlich." #: apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx:43 msgid "This token is invalid or has expired. Please contact your team for a new invitation." -msgstr "This token is invalid or has expired. Please contact your team for a new invitation." +msgstr "Dieser Token ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihr Team für eine neue Einladung." #: apps/web/src/components/(teams)/dialogs/create-team-dialog.tsx:98 #: apps/web/src/components/(teams)/forms/update-team-form.tsx:87 msgid "This URL is already in use." -msgstr "This URL is already in use." +msgstr "Diese URL wird bereits verwendet." #: apps/web/src/components/forms/v2/signup.tsx:145 msgid "This username has already been taken" -msgstr "This username has already been taken" +msgstr "Dieser Benutzername ist bereits vergeben" #: apps/web/src/components/forms/public-profile-claim-dialog.tsx:98 msgid "This username is already taken" -msgstr "This username is already taken" +msgstr "Dieser Benutzername ist bereits vergeben" #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx:77 msgid "Time" -msgstr "Time" +msgstr "Zeit" #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx:97 msgid "Time zone" -msgstr "Time zone" +msgstr "Zeitzone" #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:67 #: apps/web/src/app/(dashboard)/documents/data-table.tsx:60 #: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:61 msgid "Title" -msgstr "Title" +msgstr "Titel" #: apps/web/src/app/(unauthenticated)/team/invite/[token]/page.tsx:106 msgid "To accept this invitation you must create an account." -msgstr "To accept this invitation you must create an account." +msgstr "Um diese Einladung anzunehmen, müssen Sie ein Konto erstellen." #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:125 msgid "To change the email you must remove and add a new email address." -msgstr "To change the email you must remove and add a new email address." +msgstr "Um die E-Mail zu ändern, müssen Sie die aktuelle entfernen und eine neue hinzufügen." #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:117 msgid "To confirm, please enter the accounts email address <0/>({0})." -msgstr "To confirm, please enter the accounts email address <0/>({0})." +msgstr "Um zu bestätigen, geben Sie bitte die E-Mail-Adresse des Kontos <0/>({0}) ein." #: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:117 msgid "To confirm, please enter the reason" -msgstr "To confirm, please enter the reason" +msgstr "Um zu bestätigen, geben Sie bitte den Grund ein" #: apps/web/src/app/(unauthenticated)/team/decline/[token]/page.tsx:101 msgid "To decline this invitation you must create an account." -msgstr "To decline this invitation you must create an account." +msgstr "Um diese Einladung abzulehnen, müssen Sie ein Konto erstellen." #: apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx:197 msgid "To enable two-factor authentication, scan the following QR code using your authenticator app." -msgstr "To enable two-factor authentication, scan the following QR code using your authenticator app." +msgstr "Um die Zwei-Faktor-Authentifizierung zu aktivieren, scannen Sie den folgenden QR-Code mit Ihrer Authentifizierungs-App." #: apps/web/src/app/(unauthenticated)/unverified-account/page.tsx:23 msgid "To gain access to your account, please confirm your email address by clicking on the confirmation link from your inbox." -msgstr "To gain access to your account, please confirm your email address by clicking on the confirmation link from your inbox." +msgstr "Um Zugang zu Ihrem Konto zu erhalten, bestätigen Sie bitte Ihre E-Mail-Adresse, indem Sie auf den Bestätigungslink in Ihrem Posteingang klicken." #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:54 msgid "To mark this document as viewed, you need to be logged in as <0>{0}" -msgstr "To mark this document as viewed, you need to be logged in as <0>{0}" +msgstr "Um dieses Dokument als angesehen zu markieren, müssen Sie als <0>{0} angemeldet sein" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:60 +msgid "To use our electronic signature service, you must have access to:" +msgstr "Um unseren elektronischen Signaturdienst nutzen zu können, müssen Sie Zugriff auf Folgendes haben:" #: apps/web/src/app/embed/authenticate.tsx:21 msgid "To view this document you need to be signed into your account, please sign in to continue." -msgstr "Um dieses Dokument anzuzeigen, müssen Sie in Ihr Konto eingeloggt sein. Bitte melden Sie sich an, um fortzufahren." +msgstr "Um dieses Dokument anzusehen, müssen Sie in Ihr Konto eingeloggt sein. Bitte melden Sie sich an, um fortzufahren." #: apps/web/src/app/(dashboard)/settings/public-profile/public-profile-page-view.tsx:178 msgid "Toggle the switch to hide your profile from the public." -msgstr "Toggle the switch to hide your profile from the public." +msgstr "Schalten Sie den Schalter um, um Ihr Profil vor der Öffentlichkeit zu verbergen." #: apps/web/src/app/(dashboard)/settings/public-profile/public-profile-page-view.tsx:190 msgid "Toggle the switch to show your profile to the public." -msgstr "Toggle the switch to show your profile to the public." +msgstr "Schalten Sie den Schalter um, um Ihr Profil der Öffentlichkeit anzuzeigen." #: apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx:236 msgid "Token" @@ -3477,201 +3596,201 @@ msgstr "Token" #: apps/web/src/components/forms/token.tsx:105 msgid "Token copied to clipboard" -msgstr "Token copied to clipboard" +msgstr "Token wurde in die Zwischenablage kopiert" #: apps/web/src/components/forms/token.tsx:126 msgid "Token created" -msgstr "Token created" +msgstr "Token erstellt" #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:87 msgid "Token deleted" -msgstr "Token deleted" +msgstr "Token gelöscht" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:114 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 msgid "Token doesn't have an expiration date" -msgstr "Token doesn't have an expiration date" +msgstr "Token hat kein Ablaufdatum" #: apps/web/src/components/forms/token.tsx:193 msgid "Token expiration date" -msgstr "Token expiration date" +msgstr "Ablaufdatum des Tokens" #: apps/web/src/components/forms/token.tsx:165 msgid "Token name" -msgstr "Token name" +msgstr "Token-Name" #: apps/web/src/app/(dashboard)/admin/stats/page.tsx:65 msgid "Total Documents" -msgstr "Total Documents" +msgstr "Gesamtdokumente" #: apps/web/src/app/(dashboard)/admin/stats/page.tsx:108 msgid "Total Recipients" -msgstr "Total Recipients" +msgstr "Gesamtempfänger" #: apps/web/src/app/(dashboard)/admin/stats/page.tsx:150 msgid "Total Signers that Signed Up" -msgstr "Total Signers that Signed Up" +msgstr "Gesamtanzahl der Unterzeichner, die sich angemeldet haben" #: apps/web/src/app/(dashboard)/admin/stats/page.tsx:64 msgid "Total Users" -msgstr "Total Users" +msgstr "Gesamtanzahl der Benutzer" + +#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:76 +msgid "transfer {teamName}" +msgstr "übertragen {teamName}" #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:160 msgid "Transfer ownership of this team to a selected team member." -msgstr "Transfer ownership of this team to a selected team member." +msgstr "Übertragen Sie die Inhaberschaft dieses Teams auf ein ausgewähltes Teammitglied." #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:169 #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:147 #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:156 msgid "Transfer team" -msgstr "Transfer team" +msgstr "Team übertragen" #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:173 msgid "Transfer the ownership of the team to another team member." -msgstr "Transfer the ownership of the team to another team member." +msgstr "Übertragen Sie das Eigentum des Teams auf ein anderes Teammitglied." #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:163 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/[id]/page.tsx:167 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:191 msgid "Triggers" -msgstr "Triggers" +msgstr "Auslöser" #: apps/web/src/app/(dashboard)/settings/security/page.tsx:52 msgid "Two factor authentication" -msgstr "Two factor authentication" +msgstr "Zwei-Faktor-Authentifizierung" #: apps/web/src/app/(dashboard)/settings/security/page.tsx:88 msgid "Two factor authentication recovery codes are used to access your account in the event that you lose access to your authenticator app." -msgstr "Two factor authentication recovery codes are used to access your account in the event that you lose access to your authenticator app." +msgstr "Wiederherstellungscodes für die Zwei-Faktor-Authentifizierung werden verwendet, um auf Ihr Konto zuzugreifen, falls Sie den Zugang zu Ihrer Authentifizierungs-App verlieren." #: apps/web/src/components/forms/signin.tsx:448 msgid "Two-Factor Authentication" -msgstr "Two-Factor Authentication" +msgstr "Zwei-Faktor-Authentifizierung" #: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:90 msgid "Two-factor authentication disabled" -msgstr "Two-factor authentication disabled" +msgstr "Zwei-Faktor-Authentifizierung deaktiviert" #: apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx:94 msgid "Two-factor authentication enabled" -msgstr "Two-factor authentication enabled" +msgstr "Zwei-Faktor-Authentifizierung aktiviert" #: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:92 msgid "Two-factor authentication has been disabled for your account. You will no longer be required to enter a code from your authenticator app when signing in." -msgstr "Two-factor authentication has been disabled for your account. You will no longer be required to enter a code from your authenticator app when signing in." +msgstr "Die Zwei-Faktor-Authentifizierung wurde für Ihr Konto deaktiviert. Sie müssen beim Anmelden keinen Code aus Ihrer Authentifizierungs-App mehr eingeben." #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:73 #: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:67 msgid "Type" -msgstr "Type" +msgstr "Typ" #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:184 msgid "Type 'delete' to confirm" -msgstr "Type 'delete' to confirm" +msgstr "Geben Sie 'delete' ein, um zu bestätigen" #: apps/web/src/components/(dashboard)/common/command-menu.tsx:186 msgid "Type a command or search..." -msgstr "Type a command or search..." - -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:275 -#~ msgid "Typed Signature" -#~ msgstr "Typed Signature" +msgstr "Geben Sie einen Befehl ein oder suchen Sie..." #: apps/web/src/app/(unauthenticated)/verify-email/page.tsx:26 msgid "Uh oh! Looks like you're missing a token" -msgstr "Uh oh! Looks like you're missing a token" +msgstr "Oh oh! Es sieht so aus, als fehlt Ihnen ein Token" #: apps/web/src/components/(dashboard)/common/command-menu.tsx:303 msgid "Unable to change the language at this time. Please try again later." -msgstr "Derzeit kann die Sprache nicht geändert werden. Bitte versuchen Sie es später erneut." +msgstr "Zurzeit kann die Sprache nicht geändert werden. Bitte versuchen Sie es später noch einmal." #: apps/web/src/components/forms/2fa/recovery-code-list.tsx:31 msgid "Unable to copy recovery code" -msgstr "Unable to copy recovery code" +msgstr "Kann Code zur Wiederherstellung nicht kopieren" #: apps/web/src/components/forms/token.tsx:110 msgid "Unable to copy token" -msgstr "Unable to copy token" +msgstr "Token kann nicht kopiert werden" #: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:105 msgid "Unable to create direct template access. Please try again later." -msgstr "Unable to create direct template access. Please try again later." +msgstr "Direkter Zugriff auf die Vorlage kann nicht erstellt werden. Bitte versuche es später noch einmal." #: apps/web/src/app/(dashboard)/settings/teams/decline-team-invitation-button.tsx:33 msgid "Unable to decline this team invitation at this time." -msgstr "Unable to decline this team invitation at this time." +msgstr "Zurzeit kann diese Teameinladung nicht abgelehnt werden." #: apps/web/src/components/(teams)/tables/team-member-invites-data-table.tsx:86 msgid "Unable to delete invitation. Please try again." -msgstr "Unable to delete invitation. Please try again." +msgstr "Einladung kann nicht gelöscht werden. Bitte versuchen Sie es erneut." #: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:94 msgid "Unable to delete team" -msgstr "Unable to delete team" +msgstr "Team konnte nicht gelöscht werden" #: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:103 msgid "Unable to disable two-factor authentication" -msgstr "Unable to disable two-factor authentication" +msgstr "Zwei-Faktor-Authentifizierung kann nicht deaktiviert werden" #: apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx:33 msgid "Unable to join this team at this time." -msgstr "Unable to join this team at this time." +msgstr "Zurzeit kann diesem Team nicht beigetreten werden." #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recent-activity.tsx:72 #: apps/web/src/components/document/document-history-sheet.tsx:127 msgid "Unable to load document history" -msgstr "Unable to load document history" +msgstr "Kann den Dokumentverlauf nicht laden" #: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:111 msgid "Unable to load your public profile templates at this time" -msgstr "Unable to load your public profile templates at this time" +msgstr "Derzeit können Ihre öffentlichen Profilvorlagen nicht geladen werden" #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:84 msgid "Unable to remove email verification at this time. Please try again." -msgstr "Unable to remove email verification at this time. Please try again." +msgstr "Derzeit ist es nicht möglich, die E-Mail-Verifizierung zu entfernen. Bitte versuchen Sie es erneut." #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:65 msgid "Unable to remove team email at this time. Please try again." -msgstr "Unable to remove team email at this time. Please try again." +msgstr "Das Team-E-Mail kann zurzeit nicht entfernt werden. Bitte versuchen Sie es erneut." #: apps/web/src/components/(teams)/tables/team-member-invites-data-table.tsx:69 msgid "Unable to resend invitation. Please try again." -msgstr "Unable to resend invitation. Please try again." +msgstr "Einladung kann nicht erneut gesendet werden. Bitte versuchen Sie es erneut." #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-email-dropdown.tsx:40 msgid "Unable to resend verification at this time. Please try again." -msgstr "Unable to resend verification at this time. Please try again." +msgstr "Derzeit ist es nicht möglich, die Verifizierung erneut zu senden. Bitte versuchen Sie es erneut." #: apps/web/src/app/(unauthenticated)/reset-password/page.tsx:20 msgid "Unable to reset password" -msgstr "Unable to reset password" +msgstr "Passwort kann nicht zurückgesetzt werden" #: apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx:68 #: apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx:101 msgid "Unable to setup two-factor authentication" -msgstr "Unable to setup two-factor authentication" +msgstr "Zwei-Faktor-Authentifizierung kann nicht eingerichtet werden" #: apps/web/src/components/forms/signin.tsx:247 #: apps/web/src/components/forms/signin.tsx:255 msgid "Unable to sign in" -msgstr "Unable to sign in" +msgstr "Anmeldung nicht möglich" #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:166 #: apps/web/src/app/(teams)/t/[teamUrl]/error.tsx:27 msgid "Unauthorized" -msgstr "Unauthorized" +msgstr "Nicht autorisiert" #: apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx:116 msgid "Uncompleted" -msgstr "Uncompleted" +msgstr "Unvollendet" #: apps/web/src/app/(teams)/t/[teamUrl]/error.tsx:23 msgid "Unknown error" -msgstr "Unknown error" +msgstr "Unbekannter Fehler" #: apps/web/src/components/(teams)/tables/team-billing-invoices-data-table.tsx:79 msgid "Unpaid" -msgstr "Unpaid" +msgstr "Unbezahlt" #: apps/web/src/app/(dashboard)/settings/public-profile/public-templates-data-table.tsx:181 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:162 @@ -3680,35 +3799,35 @@ msgstr "Unpaid" #: apps/web/src/components/forms/public-profile-form.tsx:279 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:428 msgid "Update" -msgstr "Update" +msgstr "Aktualisieren" #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:211 msgid "Update Banner" -msgstr "Update Banner" +msgstr "Banner aktualisieren" #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:118 msgid "Update passkey" -msgstr "Update passkey" +msgstr "Passkey aktualisieren" #: apps/web/src/components/forms/password.tsx:152 msgid "Update password" -msgstr "Update password" +msgstr "Passwort aktualisieren" #: apps/web/src/components/forms/profile.tsx:150 msgid "Update profile" -msgstr "Update profile" +msgstr "Profil aktualisieren" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:180 msgid "Update Recipient" -msgstr "Update Recipient" +msgstr "Empfänger aktualisieren" #: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:146 msgid "Update role" -msgstr "Update role" +msgstr "Rolle aktualisieren" #: apps/web/src/components/(teams)/forms/update-team-form.tsx:176 msgid "Update team" -msgstr "Update team" +msgstr "Team aktualisieren" #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:113 #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:121 @@ -3737,6 +3856,10 @@ msgstr "Passwort wird aktualisiert..." msgid "Updating profile..." msgstr "Profil wird aktualisiert..." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:115 +msgid "Updating Your Information" +msgstr "Aktualisierung Ihrer Informationen" + #: apps/web/src/components/forms/avatar-image.tsx:182 msgid "Upload Avatar" msgstr "Avatar hochladen" @@ -3767,7 +3890,7 @@ msgstr "Authenticator verwenden" msgid "Use Backup Code" msgstr "Backup-Code verwenden" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191 msgid "Use Template" msgstr "Vorlage verwenden" @@ -3848,6 +3971,10 @@ msgstr "Sehen Sie sich alle Sicherheitsaktivitäten in Ihrem Konto an." msgid "View Codes" msgstr "Codes ansehen" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:127 +msgid "View Document" +msgstr "Dokument anzeigen" + #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:150 msgid "View documents associated with this email" msgstr "Dokumente ansehen, die mit dieser E-Mail verknüpft sind" @@ -4125,6 +4252,10 @@ msgstr "Webhooks" msgid "Weekly" msgstr "Wöchentlich" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:21 +msgid "Welcome" +msgstr "Willkommen" + #: apps/web/src/app/(unauthenticated)/signin/page.tsx:33 msgid "Welcome back, we are lucky to have you." msgstr "Willkommen zurück, wir freuen uns, Sie zu haben." @@ -4137,6 +4268,10 @@ msgstr "Hast du stattdessen versucht, dieses Dokument zu bearbeiten?" msgid "When you click continue, you will be prompted to add the first available authenticator on your system." msgstr "Wenn Sie auf Fortfahren klicken, werden Sie aufgefordert, den ersten verfügbaren Authenticator auf Ihrem System hinzuzufügen." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:36 +msgid "When you use our platform to affix your electronic signature to documents, you are consenting to do so under the Electronic Signatures in Global and National Commerce Act (E-Sign Act) and other applicable laws. This action indicates your agreement to use electronic means to sign documents and receive notifications." +msgstr "Wenn Sie unsere Plattform nutzen, um Ihre elektronische Unterschrift auf Dokumente anzubringen, stimmen Sie zu, dies unter dem Gesetz über elektronische Unterschriften im globalen und nationalen Handel (E-Sign-Gesetz) und anderen anwendbaren Gesetzen zu tun. Diese Handlung zeigt Ihre Zustimmung zur Verwendung elektronischer Mittel zum Unterzeichnen von Dokumenten und zum Empfang von Benachrichtigungen an." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:139 msgid "While waiting for them to do so you can create your own Documenso account and get started with document signing right away." msgstr "Während Sie darauf warten, können Sie Ihr eigenes Documenso-Konto erstellen und sofort mit der Dokumentenunterzeichnung beginnen." @@ -4145,6 +4280,10 @@ msgstr "Während Sie darauf warten, können Sie Ihr eigenes Documenso-Konto erst msgid "Who do you want to remind?" msgstr "Wen möchten Sie erinnern?" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:101 +msgid "Withdrawing Consent" +msgstr "Zustimmung widerrufen" + #: apps/web/src/components/forms/public-profile-form.tsx:223 msgid "Write about the team" msgstr "Schreiben Sie über das Team" @@ -4201,10 +4340,6 @@ msgstr "Sie stehen kurz davor, den Zugriff für das Team <0>{0} ({1}) zu wid msgid "You are currently on the <0>Free Plan." msgstr "Sie befinden sich derzeit im <0>kostenlosen Plan." -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92 -#~ msgid "You are currently subscribed to <0>{0}" -#~ msgstr "You are currently subscribed to <0>{0}" - #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148 msgid "You are currently updating <0>{teamMemberName}." msgstr "Sie aktualisieren derzeit <0>{teamMemberName}." @@ -4249,10 +4384,6 @@ msgstr "Sie können ein Teammitglied, das eine höhere Rolle als Sie hat, nicht msgid "You cannot upload encrypted PDFs" msgstr "Sie können keine verschlüsselten PDFs hochladen" -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97 -#~ msgid "You currently have an active plan" -#~ msgstr "You currently have an active plan" - #: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45 msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance." msgstr "Sie haben derzeit keinen Kundenrecord, das sollte nicht passieren. Bitte kontaktieren Sie den Support um Hilfe." @@ -4299,7 +4430,7 @@ msgstr "Sie haben das maximale Limit von {0} direkten Vorlagen erreicht. <0>Upgr msgid "You have reached your document limit." msgstr "Sie haben Ihr Dokumentenlimit erreicht." -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182 msgid "You have reached your document limit. <0>Upgrade your account to continue!" msgstr "Sie haben Ihr Dokumentenlimit erreicht. <0>Upgrade your account to continue!" @@ -4321,6 +4452,10 @@ msgstr "Sie haben diesen Benutzer erfolgreich aus dem Team entfernt." msgid "You have successfully revoked access." msgstr "Sie haben den Zugriff erfolgreich widerrufen." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:104 +msgid "You have the right to withdraw your consent to use electronic signatures at any time before completing the signing process. To withdraw your consent, please contact the sender of the document. In failing to contact the sender you may reach out to <0>{SUPPORT_EMAIL} for assistance. Be aware that withdrawing consent may delay or halt the completion of the related transaction or service." +msgstr "Sie haben das Recht, Ihre Zustimmung zur Verwendung elektronischer Unterschriften jederzeit vor Abschluss des Unterzeichnungsprozesses zu widerrufen. Um Ihre Zustimmung zu widerrufen, kontaktieren Sie bitte den Absender des Dokuments. Sollten Sie den Absender nicht erreichen, können Sie sich für Unterstützung an <0>{SUPPORT_EMAIL} wenden. Seien Sie sich bewusst, dass der Widerruf der Zustimmung den Abschluss der zugehörigen Transaktion oder Dienstleistung verzögern oder stoppen kann." + #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:93 msgid "You have updated {teamMemberName}." msgstr "Sie haben {teamMemberName} aktualisiert." @@ -4333,10 +4468,6 @@ msgstr "Sie haben Ihre E-Mail-Adresse für <0>{0} bestätigt." msgid "You must be an admin of this team to manage billing." msgstr "Sie müssen Administrator dieses Teams sein, um die Abrechnung zu verwalten." -#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80 -#~ msgid "You must enter '{confirmTransferMessage}' to proceed" -#~ msgstr "You must enter '{confirmTransferMessage}' to proceed" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58 #: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54 @@ -4399,7 +4530,7 @@ msgstr "Ihre direkten Unterzeichnungsvorlagen" msgid "Your document failed to upload." msgstr "Ihr Dokument konnte nicht hochgeladen werden." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151 msgid "Your document has been created from the template successfully." msgstr "Ihr Dokument wurde erfolgreich aus der Vorlage erstellt." @@ -4407,7 +4538,7 @@ msgstr "Ihr Dokument wurde erfolgreich aus der Vorlage erstellt." msgid "Your document has been re-sent successfully." msgstr "Ihr Dokument wurde erfolgreich erneut gesendet." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:324 msgid "Your document has been sent successfully." msgstr "Ihr Dokument wurde erfolgreich gesendet." @@ -4498,7 +4629,7 @@ msgstr "Ihre Vorlage wurde erfolgreich gelöscht." msgid "Your template will be duplicated." msgstr "Ihre Vorlage wird dupliziert." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:220 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:224 msgid "Your templates has been saved successfully." msgstr "Ihre Vorlagen wurden erfolgreich gespeichert." @@ -4514,4 +4645,3 @@ msgstr "Ihr Token wurde erfolgreich erstellt! Stellen Sie sicher, dass Sie es ko #: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:86 msgid "Your tokens will be shown here once you create them." msgstr "Ihre Tokens werden hier angezeigt, sobald Sie sie erstellt haben." - diff --git a/packages/lib/translations/en/common.po b/packages/lib/translations/en/common.po index 572c72b4e..596ff4e27 100644 --- a/packages/lib/translations/en/common.po +++ b/packages/lib/translations/en/common.po @@ -13,14 +13,104 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: packages/email/template-components/template-document-super-delete.tsx:27 +msgid "\"{documentName}\" has been deleted by an admin." +msgstr "\"{documentName}\" has been deleted by an admin." + +#: packages/email/template-components/template-document-pending.tsx:37 +msgid "“{documentName}” has been signed" +msgstr "“{documentName}” has been signed" + +#: packages/email/template-components/template-document-completed.tsx:41 +#: packages/lib/server-only/document/resend-document.tsx:109 +msgid "{0}" +msgstr "{0}" + +#: packages/email/template-components/template-document-invite.tsx:74 +msgid "{0} Document" +msgstr "{0} Document" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:117 +msgid "{0} invited you to {recipientActionVerb} a document" +msgstr "{0} invited you to {recipientActionVerb} a document" + +#: packages/email/templates/team-join.tsx:55 +msgid "{0} joined the team {teamName} on Documenso" +msgstr "{0} joined the team {teamName} on Documenso" + +#: packages/email/templates/team-leave.tsx:55 +msgid "{0} left the team {teamName} on Documenso" +msgstr "{0} left the team {teamName} on Documenso" + #: packages/ui/primitives/data-table-pagination.tsx:30 msgid "{0} of {1} row(s) selected." msgstr "{0} of {1} row(s) selected." +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:119 +#: packages/lib/server-only/document/resend-document.tsx:119 +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/templates/document-invite.tsx:79 +msgid "{inviterName} <0>({inviterEmail})" +msgstr "{inviterName} <0>({inviterEmail})" + +#: packages/email/templates/document-cancel.tsx:19 +msgid "{inviterName} has cancelled the document {documentName}, you don't need to sign it anymore." +msgstr "{inviterName} has cancelled the document {documentName}, you don't need to sign it anymore." + +#: packages/email/template-components/template-document-cancel.tsx:24 +msgid "{inviterName} has cancelled the document<0/>\"{documentName}\"" +msgstr "{inviterName} has cancelled the document<0/>\"{documentName}\"" + +#: packages/email/template-components/template-document-invite.tsx:57 +msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "{inviterName} has invited you to {0}<0/>\"{documentName}\"" + +#: packages/email/templates/document-invite.tsx:41 +msgid "{inviterName} has invited you to {action} {documentName}" +msgstr "{inviterName} has invited you to {action} {documentName}" + +#: packages/email/templates/recipient-removed-from-document.tsx:18 +msgid "{inviterName} has removed you from the document {documentName}." +msgstr "{inviterName} has removed you from the document {documentName}." + +#: 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:40 +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:61 +msgid "{memberEmail} joined the following team" +msgstr "{memberEmail} joined the following team" + +#: packages/email/templates/team-leave.tsx:61 +msgid "{memberEmail} left the following team" +msgstr "{memberEmail} left the following team" + +#: packages/email/templates/document-created-from-direct-template.tsx:55 +msgid "{recipientName} {action} a document by using one of your direct links" +msgstr "{recipientName} {action} a document by using one of your direct links" + +#: packages/email/templates/team-transfer-request.tsx:55 +msgid "{teamName} ownership transfer request" +msgstr "{teamName} ownership transfer request" + #: packages/ui/primitives/data-table-pagination.tsx:41 msgid "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}" msgstr "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}" +#: packages/email/templates/document-invite.tsx:91 +msgid "`${inviterName} has invited you to ${action} the document \"${documentName}\".`" +msgstr "`${inviterName} has invited you to ${action} the document \"${documentName}\".`" + +#: packages/email/templates/team-transfer-request.tsx:59 +msgid "<0>{senderName} has requested that you take ownership of the following team" +msgstr "<0>{senderName} has requested that you take ownership of the following team" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:53 msgid "<0>Inherit authentication method - Use the global action signing authentication method configured in the \"General Settings\" step" msgstr "<0>Inherit authentication method - Use the global action signing authentication method configured in the \"General Settings\" step" @@ -51,20 +141,66 @@ msgstr "<0>Require account - The recipient must be signed in to view the doc msgid "<0>Require passkey - The recipient must have an account and passkey configured via their settings" msgstr "<0>Require passkey - The recipient must have an account and passkey configured via their settings" +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:109 +msgid "A document was created by your direct template that requires you to {recipientActionVerb} it." +msgstr "A document was created by your direct template that requires you to {recipientActionVerb} it." + +#: packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts:90 +msgid "A new member has joined your team" +msgstr "A new member has joined your team" + +#: packages/lib/server-only/team/create-team-email-verification.ts:142 +msgid "A request to use your email has been initiated by {teamName} on Documenso" +msgstr "A request to use your email has been initiated by {teamName} on Documenso" + +#: packages/email/templates/team-join.tsx:29 +msgid "A team member has joined a team on Documenso" +msgstr "A team member has joined a team on Documenso" + +#: packages/lib/jobs/definitions/emails/send-team-member-left-email.ts:79 +msgid "A team member has left {0}" +msgstr "A team member has left {0}" + +#: packages/email/templates/team-leave.tsx:29 +msgid "A team member has left a team on Documenso" +msgstr "A team member has left a team on Documenso" + +#: packages/email/templates/team-delete.tsx:27 +#: packages/email/templates/team-delete.tsx:31 +msgid "A team you were a part of has been deleted" +msgstr "A team you were a part of has been deleted" + +#: packages/email/templates/team-invite.tsx:77 +#: packages/email/templates/team-transfer-request.tsx:81 +msgid "Accept" +msgstr "Accept" + +#: packages/email/templates/team-invite.tsx:29 +msgid "Accept invitation to join a team on Documenso" +msgstr "Accept invitation to join a team on Documenso" + +#: packages/email/templates/confirm-team-email.tsx:38 +msgid "Accept team email request for {teamName} on Documenso" +msgstr "Accept team email request for {teamName} on Documenso" + +#: packages/email/templates/team-transfer-request.tsx:29 +msgid "Accept team transfer request on Documenso" +msgstr "Accept team transfer request on Documenso" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "Add a document" msgstr "Add a document" -#: packages/ui/primitives/document-flow/add-settings.tsx:336 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:339 +#: packages/ui/primitives/document-flow/add-settings.tsx:378 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:378 msgid "Add a URL to redirect the user to once the document is signed" msgstr "Add a URL to redirect the user to once the document is signed" -#: packages/ui/primitives/document-flow/add-settings.tsx:248 +#: packages/ui/primitives/document-flow/add-settings.tsx:290 msgid "Add an external ID to the document. This can be used to identify the document in external systems." msgstr "Add an external ID to the document. This can be used to identify the document in external systems." -#: packages/ui/primitives/template-flow/add-template-settings.tsx:256 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:295 msgid "Add an external ID to the template. This can be used to identify in external systems." msgstr "Add an external ID to the template. This can be used to identify in external systems." @@ -105,13 +241,13 @@ msgstr "Add text to the field" msgid "Admin" msgstr "Admin" -#: packages/ui/primitives/document-flow/add-settings.tsx:230 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:238 +#: packages/ui/primitives/document-flow/add-settings.tsx:272 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:277 msgid "Advanced Options" msgstr "Advanced Options" -#: packages/ui/primitives/document-flow/add-fields.tsx:570 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 +#: packages/ui/primitives/document-flow/add-fields.tsx:573 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:406 msgid "Advanced settings" msgstr "Advanced settings" @@ -119,10 +255,26 @@ msgstr "Advanced settings" msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email." msgstr "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email." +#: packages/email/template-components/template-document-cancel.tsx:31 +msgid "All signatures have been voided." +msgstr "All signatures have been voided." + +#: packages/email/templates/document-super-delete.tsx:20 +msgid "An admin has deleted your document \"{documentName}\"." +msgstr "An admin has deleted your document \"{documentName}\"." + +#: packages/ui/primitives/pdf-viewer.tsx:167 +msgid "An error occurred while loading the document." +msgstr "An error occurred while loading the document." + #: packages/lib/constants/recipient-roles.ts:8 msgid "Approve" msgstr "Approve" +#: packages/lib/constants/recipient-roles.ts:68 +#~ msgid "APPROVE_REQUEST" +#~ msgstr "APPROVE_REQUEST" + #: packages/lib/constants/recipient-roles.ts:9 msgid "Approved" msgstr "Approved" @@ -131,10 +283,18 @@ msgstr "Approved" msgid "Approver" msgstr "Approver" +#: packages/lib/constants/recipient-roles.ts:44 +msgid "Approvers" +msgstr "Approvers" + #: packages/lib/constants/recipient-roles.ts:10 msgid "Approving" msgstr "Approving" +#: packages/email/template-components/template-confirmation-email.tsx:28 +msgid "Before you get started, please confirm your email address by clicking the button below:" +msgstr "Before you get started, please confirm your email address by clicking the button below:" + #: packages/ui/primitives/signature-pad/signature-pad.tsx:377 msgid "Black" msgstr "Black" @@ -143,6 +303,14 @@ msgstr "Black" msgid "Blue" msgstr "Blue" +#: packages/email/templates/team-invite.tsx:67 +msgid "by <0>{senderName}" +msgstr "by <0>{senderName}" + +#: packages/email/templates/team-transfer-request.tsx:70 +msgid "By accepting this request, you will take responsibility for any billing items associated with this team." +msgstr "By accepting this request, you will take responsibility for any billing items associated with this team." + #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356 #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58 msgid "Cancel" @@ -152,10 +320,6 @@ msgstr "Cancel" msgid "Cannot remove signer" msgstr "Cannot remove signer" -#: packages/ui/primitives/document-flow/add-signers.tsx:221 -#~ msgid "Cannot update signer because they have already signed a field" -#~ msgstr "Cannot update signer because they have already signed a field" - #: packages/lib/constants/recipient-roles.ts:17 msgid "Cc" msgstr "Cc" @@ -169,15 +333,14 @@ msgstr "CC" msgid "CC'd" msgstr "CC'd" +#: packages/lib/constants/recipient-roles.ts:51 +msgid "Ccers" +msgstr "Ccers" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86 msgid "Character Limit" msgstr "Character Limit" -#: packages/ui/primitives/document-flow/add-fields.tsx:1026 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 -msgid "Checkbox" -msgstr "Checkbox" - #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197 msgid "Checkbox values" msgstr "Checkbox values" @@ -198,51 +361,108 @@ msgstr "Click to insert field" msgid "Close" msgstr "Close" +#: packages/email/template-components/template-document-completed.tsx:35 +#: packages/email/template-components/template-document-self-signed.tsx:36 +msgid "Completed" +msgstr "Completed" + +#: packages/email/templates/document-completed.tsx:21 +#: packages/email/templates/document-self-signed.tsx:17 +msgid "Completed Document" +msgstr "Completed Document" + #: packages/lib/constants/template.ts:12 msgid "Configure Direct Recipient" msgstr "Configure Direct Recipient" -#: packages/ui/primitives/document-flow/add-fields.tsx:571 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 +#: packages/ui/primitives/document-flow/add-fields.tsx:574 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:407 msgid "Configure the {0} field" msgstr "Configure the {0} field" +#: packages/email/template-components/template-confirmation-email.tsx:38 +msgid "Confirm email" +msgstr "Confirm email" + #: packages/ui/primitives/document-flow/document-flow-root.tsx:141 msgid "Continue" msgstr "Continue" +#: packages/email/template-components/template-document-invite.tsx:66 +msgid "Continue by {0} the document." +msgstr "Continue by {0} the document." + +#: packages/email/template-components/template-document-completed.tsx:45 +msgid "Continue by downloading the document." +msgstr "Continue by downloading the document." + #: packages/ui/components/document/document-share-button.tsx:46 msgid "Copied to clipboard" msgstr "Copied to clipboard" +#: packages/ui/components/document/document-share-button.tsx:194 +msgid "Copy Link" +msgstr "Copy Link" + +#: packages/email/template-components/template-document-self-signed.tsx:46 +msgid "Create a <0>free account to access your signed documents at any time." +msgstr "Create a <0>free account to access your signed documents at any time." + +#: packages/email/template-components/template-document-self-signed.tsx:68 +msgid "Create account" +msgstr "Create account" + #: packages/ui/primitives/document-flow/add-signature.tsx:360 msgid "Custom Text" msgstr "Custom Text" -#: packages/ui/primitives/document-flow/add-fields.tsx:922 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 +#: packages/ui/primitives/document-flow/add-fields.tsx:927 +#: packages/ui/primitives/document-flow/types.ts:53 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:690 msgid "Date" msgstr "Date" -#: packages/ui/primitives/document-flow/add-settings.tsx:271 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:279 +#: packages/ui/primitives/document-flow/add-settings.tsx:313 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:318 msgid "Date Format" msgstr "Date Format" +#: packages/email/templates/team-invite.tsx:83 +msgid "Decline" +msgstr "Decline" + +#: packages/email/templates/reset-password.tsx:65 +msgid "Didn't request a password change? We are here to help you secure your account, just <0>contact us." +msgstr "Didn't request a password change? We are here to help you secure your account, just <0>contact us." + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:570 msgid "Direct link receiver" msgstr "Direct link receiver" #: packages/ui/components/document/document-global-auth-access-select.tsx:62 -#: packages/ui/primitives/document-flow/add-settings.tsx:174 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:151 +#: packages/ui/primitives/document-flow/add-settings.tsx:216 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:190 msgid "Document access" msgstr "Document access" +#: packages/lib/server-only/document/super-delete-document.ts:75 +msgid "Document Cancelled" +msgstr "Document Cancelled" + +#: packages/email/templates/document-created-from-direct-template.tsx:30 +#: packages/lib/server-only/template/create-document-from-direct-template.ts:554 +msgid "Document created from direct template" +msgstr "Document created from direct template" + #: packages/lib/constants/template.ts:20 msgid "Document Creation" msgstr "Document Creation" +#: packages/lib/server-only/document/send-delete-email.ts:58 +msgid "Document Deleted!" +msgstr "Document Deleted!" + +#: packages/email/template-components/template-document-completed.tsx:64 #: packages/ui/components/document/document-download-button.tsx:68 msgid "Download" msgstr "Download" @@ -251,8 +471,8 @@ msgstr "Download" msgid "Drag & drop your PDF here." msgstr "Drag & drop your PDF here." -#: packages/ui/primitives/document-flow/add-fields.tsx:1052 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 +#: packages/ui/primitives/document-flow/add-fields.tsx:1058 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:820 msgid "Dropdown" msgstr "Dropdown" @@ -260,20 +480,26 @@ msgstr "Dropdown" msgid "Dropdown options" msgstr "Dropdown options" -#: packages/ui/primitives/document-flow/add-fields.tsx:870 +#: packages/ui/primitives/document-flow/add-fields.tsx:875 #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:500 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 +#: packages/ui/primitives/document-flow/add-signers.tsx:507 +#: packages/ui/primitives/document-flow/types.ts:54 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:638 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:470 msgid "Email" msgstr "Email" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:184 +#: packages/ui/primitives/document-flow/add-signature.types.ts:7 +msgid "Email is required" +msgstr "Email is required" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:223 msgid "Email Options" msgstr "Email Options" -#: packages/ui/primitives/document-flow/add-fields.tsx:1117 +#: packages/ui/primitives/document-flow/add-fields.tsx:1123 msgid "Empty field" msgstr "Empty field" @@ -286,7 +512,7 @@ msgstr "Enable Direct Link Signing" msgid "Enable signing order" msgstr "Enable signing order" -#: packages/ui/primitives/document-flow/add-fields.tsx:790 +#: packages/ui/primitives/document-flow/add-fields.tsx:795 msgid "Enable Typed Signatures" msgstr "Enable Typed Signatures" @@ -295,11 +521,12 @@ msgid "Enter password" msgstr "Enter password" #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257 +#: packages/ui/primitives/pdf-viewer.tsx:166 msgid "Error" msgstr "Error" -#: packages/ui/primitives/document-flow/add-settings.tsx:241 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:249 +#: packages/ui/primitives/document-flow/add-settings.tsx:283 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:288 msgid "External ID" msgstr "External ID" @@ -341,6 +568,18 @@ msgstr "Field placeholder" msgid "Font Size" msgstr "Font Size" +#: packages/lib/server-only/auth/send-forgot-password.ts:61 +msgid "Forgot Password?" +msgstr "Forgot Password?" + +#: packages/email/template-components/template-forgot-password.tsx:21 +msgid "Forgot your password?" +msgstr "Forgot your password?" + +#: packages/ui/primitives/document-flow/types.ts:50 +msgid "Free Signature" +msgstr "Free Signature" + #: packages/ui/components/document/document-global-auth-action-select.tsx:64 msgid "Global recipient action authentication" msgstr "Global recipient action authentication" @@ -353,37 +592,67 @@ msgstr "Go Back" msgid "Green" msgstr "Green" -#: packages/lib/constants/recipient-roles.ts:72 +#: packages/email/templates/reset-password.tsx:50 +msgid "Hi, {userName} <0>({userEmail})" +msgstr "Hi, {userName} <0>({userEmail})" + +#: packages/lib/constants/recipient-roles.ts:76 msgid "I am a signer of this document" msgstr "I am a signer of this document" -#: packages/lib/constants/recipient-roles.ts:75 +#: packages/lib/constants/recipient-roles.ts:79 msgid "I am a viewer of this document" msgstr "I am a viewer of this document" -#: packages/lib/constants/recipient-roles.ts:73 +#: packages/lib/constants/recipient-roles.ts:77 msgid "I am an approver of this document" msgstr "I am an approver of this document" -#: packages/lib/constants/recipient-roles.ts:74 +#: packages/lib/constants/recipient-roles.ts:78 msgid "I am required to receive a copy of this document" msgstr "I am required to receive a copy of this document" -#: packages/lib/constants/recipient-roles.ts:74 -#~ msgid "I am required to recieve a copy of this document" -#~ msgstr "I am required to recieve a copy of this document" - #: packages/ui/components/recipient/recipient-action-auth-select.tsx:29 #: packages/ui/components/recipient/recipient-action-auth-select.tsx:87 msgid "Inherit authentication method" msgstr "Inherit authentication method" +#: packages/ui/primitives/document-flow/types.ts:51 +msgid "Initials" +msgstr "Initials" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:17 +msgid "Invalid email" +msgstr "Invalid email" + +#: packages/ui/primitives/document-flow/add-signature.types.ts:8 +msgid "Invalid email address" +msgstr "Invalid email address" + +#: packages/email/templates/team-invite.tsx:55 +msgid "Join {teamName} on Documenso" +msgstr "Join {teamName} on Documenso" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67 #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72 #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48 msgid "Label" msgstr "Label" +#: packages/ui/primitives/document-flow/add-settings.tsx:176 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:150 +msgid "Language" +msgstr "Language" + +#: packages/email/templates/team-transfer-request.tsx:87 +msgid "Link expires in 1 hour." +msgstr "Link expires in 1 hour." + +#: packages/ui/primitives/lazy-pdf-viewer.tsx:15 +#: packages/ui/primitives/pdf-viewer.tsx:44 +msgid "Loading document..." +msgstr "Loading document..." + #: packages/lib/constants/teams.ts:11 msgid "Manager" msgstr "Manager" @@ -397,7 +666,7 @@ msgid "Member" msgstr "Member" #: packages/ui/primitives/document-flow/add-subject.tsx:95 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:215 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:254 msgid "Message <0>(Optional)" msgstr "Message <0>(Optional)" @@ -405,11 +674,12 @@ msgstr "Message <0>(Optional)" msgid "Min" msgstr "Min" -#: packages/ui/primitives/document-flow/add-fields.tsx:896 +#: packages/ui/primitives/document-flow/add-fields.tsx:901 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:535 #: packages/ui/primitives/document-flow/add-signers.tsx:541 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 +#: packages/ui/primitives/document-flow/types.ts:55 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:664 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:504 msgid "Name" @@ -427,13 +697,13 @@ msgstr "Needs to sign" msgid "Needs to view" msgstr "Needs to view" -#: packages/ui/primitives/document-flow/add-fields.tsx:680 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 +#: packages/ui/primitives/document-flow/add-fields.tsx:686 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:504 msgid "No recipient matching this description was found." msgstr "No recipient matching this description was found." -#: packages/ui/primitives/document-flow/add-fields.tsx:696 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 +#: packages/ui/primitives/document-flow/add-fields.tsx:701 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:519 msgid "No recipients with this role" msgstr "No recipients with this role" @@ -457,8 +727,9 @@ msgstr "No signature field found" msgid "No value found." msgstr "No value found." -#: packages/ui/primitives/document-flow/add-fields.tsx:974 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 +#: packages/ui/primitives/document-flow/add-fields.tsx:979 +#: packages/ui/primitives/document-flow/types.ts:56 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:742 msgid "Number" msgstr "Number" @@ -478,10 +749,30 @@ msgstr "Once your template is set up, share the link anywhere you want. The pers msgid "Page {0} of {1}" msgstr "Page {0} of {1}" +#: packages/ui/primitives/pdf-viewer.tsx:259 +msgid "Page {0} of {numPages}" +msgstr "Page {0} of {numPages}" + #: packages/ui/primitives/document-password-dialog.tsx:62 msgid "Password Required" msgstr "Password Required" +#: packages/email/templates/forgot-password.tsx:17 +msgid "Password Reset Requested" +msgstr "Password Reset Requested" + +#: packages/email/templates/reset-password.tsx:18 +msgid "Password Reset Successful" +msgstr "Password Reset Successful" + +#: packages/email/template-components/template-reset-password.tsx:22 +msgid "Password updated!" +msgstr "Password updated!" + +#: packages/email/templates/document-pending.tsx:17 +msgid "Pending Document" +msgstr "Pending Document" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156 msgid "Pick a number" msgstr "Pick a number" @@ -492,8 +783,40 @@ msgstr "Pick a number" msgid "Placeholder" msgstr "Placeholder" -#: packages/ui/primitives/document-flow/add-fields.tsx:1000 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 +#: packages/email/template-components/template-document-invite.tsx:43 +msgid "Please {0} your document<0/>\"{documentName}\"" +msgstr "Please {0} your document<0/>\"{documentName}\"" + +#: packages/email/templates/document-invite.tsx:38 +msgid "Please {action} your document {documentName}" +msgstr "Please {action} your document {documentName}" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:98 +msgid "Please {recipientActionVerb} this document" +msgstr "Please {recipientActionVerb} this document" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:112 +msgid "Please {recipientActionVerb} this document created by your direct template" +msgstr "Please {recipientActionVerb} this document created by your direct template" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:104 +msgid "Please {recipientActionVerb} your document" +msgstr "Please {recipientActionVerb} your document" + +#: packages/lib/server-only/auth/send-confirmation-email.ts:67 +msgid "Please confirm your email" +msgstr "Please confirm your email" + +#: packages/email/templates/confirm-email.tsx:15 +msgid "Please confirm your email address" +msgstr "Please confirm your email address" + +#: packages/ui/primitives/pdf-viewer.tsx:223 +#: packages/ui/primitives/pdf-viewer.tsx:238 +msgid "Please try again or contact our support." +msgstr "Please try again or contact our support." + +#: packages/ui/primitives/template-flow/add-template-fields.tsx:768 msgid "Radio" msgstr "Radio" @@ -514,8 +837,8 @@ msgid "Receives copy" msgstr "Receives copy" #: packages/ui/components/recipient/recipient-action-auth-select.tsx:39 -#: packages/ui/primitives/document-flow/add-settings.tsx:215 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:169 +#: packages/ui/primitives/document-flow/add-settings.tsx:257 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:208 msgid "Recipient action authentication" msgstr "Recipient action authentication" @@ -523,12 +846,28 @@ msgstr "Recipient action authentication" msgid "Red" msgstr "Red" -#: packages/ui/primitives/document-flow/add-settings.tsx:329 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:332 +#: packages/ui/primitives/document-flow/add-settings.tsx:371 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:371 msgid "Redirect URL" msgstr "Redirect URL" -#: packages/ui/primitives/document-flow/add-fields.tsx:1104 +#: packages/lib/server-only/document/resend-document.tsx:165 +msgid "Reminder: {0}" +msgstr "Reminder: {0}" + +#: packages/lib/server-only/document/resend-document.tsx:118 +msgid "Reminder: {0} invited you to {recipientActionVerb} a document" +msgstr "Reminder: {0} invited you to {recipientActionVerb} a document" + +#: packages/lib/server-only/document/resend-document.tsx:110 +msgid "Reminder: Please {recipientActionVerb} this document" +msgstr "Reminder: Please {recipientActionVerb} this document" + +#: packages/lib/server-only/document/resend-document.tsx:114 +msgid "Reminder: Please {recipientActionVerb} your document" +msgstr "Reminder: Please {recipientActionVerb} your document" + +#: packages/ui/primitives/document-flow/add-fields.tsx:1110 msgid "Remove" msgstr "Remove" @@ -540,6 +879,14 @@ msgstr "Remove" msgid "Required field" msgstr "Required field" +#: packages/email/template-components/template-forgot-password.tsx:33 +msgid "Reset Password" +msgstr "Reset Password" + +#: packages/ui/components/document/document-share-button.tsx:147 +msgid "Rest assured, your document is strictly confidential and will never be shared. Only your signing experience will be highlighted. Share your personalized signing card to showcase your signature!" +msgstr "Rest assured, your document is strictly confidential and will never be shared. Only your signing experience will be highlighted. Share your personalized signing card to showcase your signature!" + #: packages/ui/primitives/data-table-pagination.tsx:55 msgid "Rows per page" msgstr "Rows per page" @@ -548,7 +895,7 @@ msgstr "Rows per page" msgid "Save" msgstr "Save" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:854 msgid "Save Template" msgstr "Save Template" @@ -590,6 +937,10 @@ msgstr "Share Signature Card" msgid "Share the Link" msgstr "Share the Link" +#: packages/ui/components/document/document-share-button.tsx:143 +msgid "Share your signing experience!" +msgstr "Share your signing experience!" + #: packages/ui/primitives/document-flow/add-signers.tsx:680 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655 msgid "Show advanced settings" @@ -599,10 +950,15 @@ msgstr "Show advanced settings" msgid "Sign" msgstr "Sign" -#: packages/ui/primitives/document-flow/add-fields.tsx:818 +#: packages/email/template-components/template-reset-password.tsx:34 +msgid "Sign In" +msgstr "Sign In" + +#: packages/ui/primitives/document-flow/add-fields.tsx:823 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 +#: packages/ui/primitives/document-flow/types.ts:49 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:586 msgid "Signature" msgstr "Signature" @@ -614,10 +970,27 @@ msgstr "Signed" msgid "Signer" msgstr "Signer" +#: packages/lib/constants/recipient-roles.ts:58 +msgid "Signers" +msgstr "Signers" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:36 +msgid "Signers must have unique emails" +msgstr "Signers must have unique emails" + #: packages/lib/constants/recipient-roles.ts:22 msgid "Signing" msgstr "Signing" +#: packages/lib/server-only/document/send-completed-email.ts:93 +#: packages/lib/server-only/document/send-completed-email.ts:161 +msgid "Signing Complete!" +msgstr "Signing Complete!" + +#: packages/lib/constants/recipient-roles.ts:66 +#~ msgid "SIGNING_REQUEST" +#~ msgstr "SIGNING_REQUEST" + #: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:34 msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding." msgstr "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding." @@ -626,6 +999,11 @@ msgstr "Some signers have not been assigned a signature field. Please assign at msgid "Something went wrong" msgstr "Something went wrong" +#: packages/ui/primitives/pdf-viewer.tsx:220 +#: packages/ui/primitives/pdf-viewer.tsx:235 +msgid "Something went wrong while loading the document." +msgstr "Something went wrong while loading the document." + #: packages/ui/primitives/data-table.tsx:136 msgid "Something went wrong." msgstr "Something went wrong." @@ -635,7 +1013,7 @@ msgid "Step <0>{step} of {maxStep}" msgstr "Step <0>{step} of {maxStep}" #: packages/ui/primitives/document-flow/add-subject.tsx:78 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:195 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:234 msgid "Subject <0>(Optional)" msgstr "Subject <0>(Optional)" @@ -643,15 +1021,32 @@ msgstr "Subject <0>(Optional)" msgid "Submit" msgstr "Submit" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:134 +#: packages/lib/server-only/team/delete-team-email.ts:96 +msgid "Team email has been revoked for {0}" +msgstr "Team email has been revoked for {0}" + +#: packages/email/templates/team-email-removed.tsx:53 +msgid "Team email removed" +msgstr "Team email removed" + +#: packages/email/templates/team-email-removed.tsx:27 +msgid "Team email removed for {teamName} on Documenso" +msgstr "Team email removed for {teamName} on Documenso" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:133 msgid "Template title" msgstr "Template title" -#: packages/ui/primitives/document-flow/add-fields.tsx:948 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 +#: packages/ui/primitives/document-flow/add-fields.tsx:953 +#: packages/ui/primitives/document-flow/types.ts:52 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:716 msgid "Text" msgstr "Text" +#: packages/email/template-components/template-forgot-password.tsx:25 +msgid "That's okay, it happens! Click the button below to reset your password." +msgstr "That's okay, it happens! Click the button below to reset your password." + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:44 msgid "The authentication required for recipients to sign fields" msgstr "The authentication required for recipients to sign fields" @@ -668,10 +1063,22 @@ msgstr "The authentication required for recipients to view the document." msgid "The document's name" msgstr "The document's name" +#: packages/email/templates/team-delete.tsx:35 +msgid "The following team has been deleted by its owner. You will no longer be able to access this team and its documents" +msgstr "The following team has been deleted by its owner. You will no longer be able to access this team and its documents" + +#: packages/email/templates/team-delete.tsx:34 +msgid "The following team has been deleted by you" +msgstr "The following team has been deleted by you" + #: packages/ui/primitives/document-password-dialog.tsx:52 msgid "The password you have entered is incorrect. Please try again." msgstr "The password you have entered is incorrect. Please try again." +#: packages/email/template-components/template-document-super-delete.tsx:38 +msgid "The reason provided for deletion is the following:" +msgstr "The reason provided for deletion is the following:" + #: packages/ui/components/recipient/recipient-role-select.tsx:103 msgid "The recipient is not required to take any action and receives a copy of the document after it is completed." msgstr "The recipient is not required to take any action and receives a copy of the document after it is completed." @@ -704,11 +1111,19 @@ msgstr "The signer's email" msgid "The signer's name" msgstr "The signer's name" +#: packages/email/templates/team-email-removed.tsx:57 +msgid "The team email <0>{teamEmail} has been removed from the following team" +msgstr "The team email <0>{teamEmail} has been removed from the following team" + #: packages/ui/components/document/document-global-auth-action-select.tsx:72 msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step." msgstr "This can be overriden by setting the authentication requirements directly on each recipient in the next step." -#: packages/ui/primitives/document-flow/add-fields.tsx:752 +#: packages/email/template-components/template-document-super-delete.tsx:31 +msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support." +msgstr "This document can not be recovered, if you would like to dispute the reason for future documents please contact support." + +#: packages/ui/primitives/document-flow/add-fields.tsx:757 msgid "This document has already been sent to this recipient. You can no longer edit this recipient." msgstr "This document has already been sent to this recipient. You can no longer edit this recipient." @@ -716,18 +1131,18 @@ msgstr "This document has already been sent to this recipient. You can no longer msgid "This document is password protected. Please enter the password to view the document." msgstr "This document is password protected. Please enter the password to view the document." +#: packages/email/template-components/template-footer.tsx:14 +msgid "This document was sent using <0>Documenso." +msgstr "This document was sent using <0>Documenso." + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:573 msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." msgstr "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." -#: packages/ui/primitives/document-flow/add-fields.tsx:1084 +#: packages/ui/primitives/document-flow/add-fields.tsx:1090 msgid "This recipient can no longer be modified as they have signed a field, or completed the document." msgstr "This recipient can no longer be modified as they have signed a field, or completed the document." -#: packages/ui/primitives/document-flow/add-signers.tsx:165 -#~ msgid "This signer has already received the document." -#~ msgstr "This signer has already received the document." - #: packages/ui/primitives/document-flow/add-signers.tsx:194 msgid "This signer has already signed the document." msgstr "This signer has already signed the document." @@ -736,17 +1151,17 @@ msgstr "This signer has already signed the document." msgid "This will override any global settings." msgstr "This will override any global settings." -#: packages/ui/primitives/document-flow/add-settings.tsx:305 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:309 +#: packages/ui/primitives/document-flow/add-settings.tsx:347 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:348 msgid "Time Zone" msgstr "Time Zone" -#: packages/ui/primitives/document-flow/add-settings.tsx:153 +#: packages/ui/primitives/document-flow/add-settings.tsx:155 msgid "Title" msgstr "Title" -#: packages/ui/primitives/document-flow/add-fields.tsx:1067 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 +#: packages/ui/primitives/document-flow/add-fields.tsx:1073 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:834 msgid "To proceed further, please set at least one value for the {0} field." msgstr "To proceed further, please set at least one value for the {0} field." @@ -780,6 +1195,18 @@ msgstr "Value" msgid "View" msgstr "View" +#: packages/email/templates/document-created-from-direct-template.tsx:69 +msgid "View document" +msgstr "View document" + +#: packages/email/template-components/template-document-self-signed.tsx:79 +msgid "View plans" +msgstr "View plans" + +#: packages/lib/constants/recipient-roles.ts:67 +#~ msgid "VIEW_REQUEST" +#~ msgstr "VIEW_REQUEST" + #: packages/lib/constants/recipient-roles.ts:27 msgid "Viewed" msgstr "Viewed" @@ -788,18 +1215,42 @@ msgstr "Viewed" msgid "Viewer" msgstr "Viewer" +#: packages/lib/constants/recipient-roles.ts:65 +msgid "Viewers" +msgstr "Viewers" + #: packages/lib/constants/recipient-roles.ts:28 msgid "Viewing" msgstr "Viewing" -#: packages/ui/primitives/signature-pad/signature-pad.tsx:280 -#~ msgid "White" -#~ msgstr "White" +#: packages/email/template-components/template-document-pending.tsx:31 +msgid "Waiting for others" +msgstr "Waiting for others" + +#: packages/lib/server-only/document/send-pending-email.ts:73 +msgid "Waiting for others to complete signing." +msgstr "Waiting for others to complete signing." + +#: packages/email/template-components/template-document-pending.tsx:41 +msgid "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." +msgstr "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." + +#: packages/email/templates/reset-password.tsx:59 +msgid "We've changed your password as you asked. You can now sign in with your new password." +msgstr "We've changed your password as you asked. You can now sign in with your new password." + +#: packages/email/template-components/template-confirmation-email.tsx:24 +msgid "Welcome to Documenso!" +msgstr "Welcome to Documenso!" #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44 msgid "You are about to send this document to the recipients. Are you sure you want to continue?" msgstr "You are about to send this document to the recipients. Are you sure you want to continue?" +#: packages/email/template-components/template-confirmation-email.tsx:41 +msgid "You can also copy and paste this link into your browser: {confirmationLink} (link expires in 1 hour)" +msgstr "You can also copy and paste this link into your browser: {confirmationLink} (link expires in 1 hour)" + #: packages/ui/components/document/document-send-email-message-helper.tsx:11 msgid "You can use the following variables in your message:" msgstr "You can use the following variables in your message:" @@ -808,6 +1259,48 @@ msgstr "You can use the following variables in your message:" msgid "You cannot upload documents at this time." msgstr "You cannot upload documents at this time." +#: packages/email/template-components/template-document-cancel.tsx:35 +msgid "You don't need to sign it anymore." +msgstr "You don't need to sign it anymore." + +#: packages/lib/server-only/team/create-team-member-invites.ts:168 +msgid "You have been invited to join {0} on Documenso" +msgstr "You have been invited to join {0} on Documenso" + +#: packages/email/templates/team-invite.tsx:59 +msgid "You have been invited to join the following team" +msgstr "You have been invited to join the following team" + +#: packages/lib/server-only/recipient/set-recipients-for-document.ts:314 +msgid "You have been removed from a document" +msgstr "You have been removed from a document" + +#: packages/lib/server-only/team/request-team-ownership-transfer.ts:114 +msgid "You have been requested to take ownership of team {0} on Documenso" +msgstr "You have been requested to take ownership of team {0} on Documenso" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:102 +#: packages/lib/server-only/document/resend-document.tsx:113 +msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it." +msgstr "You have initiated the document {0} that requires you to {recipientActionVerb} it." + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "You have reached your document limit." msgstr "You have reached your document limit." + +#: packages/email/template-components/template-document-self-signed.tsx:42 +msgid "You have signed “{documentName}”" +msgstr "You have signed “{documentName}”" + +#: packages/email/template-components/template-document-super-delete.tsx:23 +msgid "Your document has been deleted by an admin!" +msgstr "Your document has been deleted by an admin!" + +#: packages/email/template-components/template-reset-password.tsx:26 +msgid "Your password has been updated." +msgstr "Your password has been updated." + +#: packages/email/templates/team-delete.tsx:26 +#: packages/email/templates/team-delete.tsx:30 +msgid "Your team has been deleted" +msgstr "Your team has been deleted" diff --git a/packages/lib/translations/en/marketing.po b/packages/lib/translations/en/marketing.po index d5eafc50f..d85ccda92 100644 --- a/packages/lib/translations/en/marketing.po +++ b/packages/lib/translations/en/marketing.po @@ -37,7 +37,7 @@ msgstr "Add document" msgid "Add More Users for {0}" msgstr "Add More Users for {0}" -#: apps/marketing/src/app/(marketing)/open/page.tsx:165 +#: apps/marketing/src/app/(marketing)/open/page.tsx:164 msgid "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics" msgstr "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics" @@ -85,7 +85,7 @@ msgstr "Changelog" msgid "Choose a template from the community app store. Or submit your own template for others to use." msgstr "Choose a template from the community app store. Or submit your own template for others to use." -#: apps/marketing/src/app/(marketing)/open/page.tsx:219 +#: apps/marketing/src/app/(marketing)/open/page.tsx:218 msgid "Community" msgstr "Community" @@ -155,10 +155,6 @@ msgstr "Documentation" msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application." msgstr "Easily embed Documenso into your product. Simply copy and paste our react widget into your application." -#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42 -#~ msgid "Easy Sharing (Soon)." -#~ msgstr "Easy Sharing (Soon)." - #: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46 msgid "Easy Sharing." msgstr "Easy Sharing." @@ -192,7 +188,7 @@ msgstr "Fast." msgid "Faster, smarter and more beautiful." msgstr "Faster, smarter and more beautiful." -#: apps/marketing/src/app/(marketing)/open/page.tsx:210 +#: apps/marketing/src/app/(marketing)/open/page.tsx:209 msgid "Finances" msgstr "Finances" @@ -245,15 +241,15 @@ msgstr "Get started today." msgid "Get the latest news from Documenso, including product updates, team announcements and more!" msgstr "Get the latest news from Documenso, including product updates, team announcements and more!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:233 +#: apps/marketing/src/app/(marketing)/open/page.tsx:232 msgid "GitHub: Total Merged PRs" msgstr "GitHub: Total Merged PRs" -#: apps/marketing/src/app/(marketing)/open/page.tsx:251 +#: apps/marketing/src/app/(marketing)/open/page.tsx:250 msgid "GitHub: Total Open Issues" msgstr "GitHub: Total Open Issues" -#: apps/marketing/src/app/(marketing)/open/page.tsx:225 +#: apps/marketing/src/app/(marketing)/open/page.tsx:224 msgid "GitHub: Total Stars" msgstr "GitHub: Total Stars" @@ -261,7 +257,7 @@ msgstr "GitHub: Total Stars" msgid "Global Salary Bands" msgstr "Global Salary Bands" -#: apps/marketing/src/app/(marketing)/open/page.tsx:261 +#: apps/marketing/src/app/(marketing)/open/page.tsx:260 msgid "Growth" msgstr "Growth" @@ -285,7 +281,7 @@ msgstr "Integrated payments with Stripe so you don’t have to worry about getti msgid "Integrates with all your favourite tools." msgstr "Integrates with all your favourite tools." -#: apps/marketing/src/app/(marketing)/open/page.tsx:289 +#: apps/marketing/src/app/(marketing)/open/page.tsx:288 msgid "Is there more?" msgstr "Is there more?" @@ -309,11 +305,11 @@ msgstr "Location" msgid "Make it your own through advanced customization and adjustability." msgstr "Make it your own through advanced customization and adjustability." -#: apps/marketing/src/app/(marketing)/open/page.tsx:199 +#: apps/marketing/src/app/(marketing)/open/page.tsx:198 msgid "Merged PR's" msgstr "Merged PR's" -#: apps/marketing/src/app/(marketing)/open/page.tsx:234 +#: apps/marketing/src/app/(marketing)/open/page.tsx:233 msgid "Merged PRs" msgstr "Merged PRs" @@ -344,8 +340,8 @@ msgstr "No Credit Card required" msgid "None of these work for you? Try self-hosting!" msgstr "None of these work for you? Try self-hosting!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:194 -#: apps/marketing/src/app/(marketing)/open/page.tsx:252 +#: apps/marketing/src/app/(marketing)/open/page.tsx:193 +#: apps/marketing/src/app/(marketing)/open/page.tsx:251 msgid "Open Issues" msgstr "Open Issues" @@ -353,7 +349,7 @@ msgstr "Open Issues" msgid "Open Source or Hosted." msgstr "Open Source or Hosted." -#: apps/marketing/src/app/(marketing)/open/page.tsx:161 +#: apps/marketing/src/app/(marketing)/open/page.tsx:160 #: apps/marketing/src/components/(marketing)/footer.tsx:37 #: apps/marketing/src/components/(marketing)/header.tsx:64 #: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:40 @@ -372,18 +368,10 @@ msgstr "Our custom templates come with smart rules that can help you save time a msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features." msgstr "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features." -#: apps/marketing/src/components/(marketing)/enterprise.tsx:20 -#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." -#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:65 msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership." msgstr "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership." -#: apps/marketing/src/app/(marketing)/open/data.ts:25 -#~ msgid "Part-Time" -#~ msgstr "Part-Time" - #: apps/marketing/src/components/(marketing)/pricing-table.tsx:151 msgid "Premium Profile Name" msgstr "Premium Profile Name" @@ -425,10 +413,6 @@ msgstr "Salary" msgid "Save $60 or $120" msgstr "Save $60 or $120" -#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47 -#~ msgid "Search languages..." -#~ msgstr "Search languages..." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:109 msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us." msgstr "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us." @@ -477,7 +461,7 @@ msgstr "Smart." msgid "Star on GitHub" msgstr "Star on GitHub" -#: apps/marketing/src/app/(marketing)/open/page.tsx:226 +#: apps/marketing/src/app/(marketing)/open/page.tsx:225 msgid "Stars" msgstr "Stars" @@ -512,7 +496,7 @@ msgstr "Template Store (Soon)." msgid "That's awesome. You can take a look at the current <0>Issues and join our <1>Discord Community to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️" msgstr "That's awesome. You can take a look at the current <0>Issues and join our <1>Discord Community to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️" -#: apps/marketing/src/app/(marketing)/open/page.tsx:293 +#: apps/marketing/src/app/(marketing)/open/page.tsx:292 msgid "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share." msgstr "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share." @@ -525,8 +509,8 @@ msgstr "Title" msgid "Total Completed Documents" msgstr "Total Completed Documents" +#: apps/marketing/src/app/(marketing)/open/page.tsx:266 #: apps/marketing/src/app/(marketing)/open/page.tsx:267 -#: apps/marketing/src/app/(marketing)/open/page.tsx:268 msgid "Total Customers" msgstr "Total Customers" diff --git a/packages/lib/translations/en/web.po b/packages/lib/translations/en/web.po index ddc33d500..8670f6880 100644 --- a/packages/lib/translations/en/web.po +++ b/packages/lib/translations/en/web.po @@ -112,6 +112,18 @@ msgstr "<0>\"{0}\"is no longer available to sign" msgid "<0>Sender: All" msgstr "<0>Sender: All" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:5 +msgid "1 month" +msgstr "1 month" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:8 +msgid "12 months" +msgstr "12 months" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:6 +msgid "3 months" +msgstr "3 months" + #: apps/web/src/components/partials/not-found.tsx:45 msgid "404 Page not found" msgstr "404 Page not found" @@ -128,14 +140,30 @@ msgstr "404 Team not found" msgid "404 Template not found" msgstr "404 Template not found" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:7 +msgid "6 months" +msgstr "6 months" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:4 +msgid "7 days" +msgstr "7 days" + #: apps/web/src/components/forms/send-confirmation-email.tsx:55 msgid "A confirmation email has been sent, and it should arrive in your inbox shortly." msgstr "A confirmation email has been sent, and it should arrive in your inbox shortly." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:70 +msgid "A device capable of accessing, opening, and reading documents" +msgstr "A device capable of accessing, opening, and reading documents" + +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201 msgid "A draft document will be created" msgstr "A draft document will be created" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:73 +msgid "A means to print or download documents for your records" +msgstr "A means to print or download documents for your records" + #: apps/web/src/components/forms/token.tsx:127 msgid "A new token was created successfully." msgstr "A new token was created successfully." @@ -158,6 +186,10 @@ msgstr "A secret that will be sent to your URL so you can verify that the reques msgid "A secret that will be sent to your URL so you can verify that the request has been sent by Documenso." msgstr "A secret that will be sent to your URL so you can verify that the request has been sent by Documenso." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:64 +msgid "A stable internet connection" +msgstr "A stable internet connection" + #: apps/web/src/components/forms/public-profile-form.tsx:198 msgid "A unique URL to access your profile" msgstr "A unique URL to access your profile" @@ -175,6 +207,10 @@ msgstr "A verification email will be sent to the provided email." msgid "Accept" msgstr "Accept" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:33 +msgid "Acceptance and Consent" +msgstr "Acceptance and Consent" + #: apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx:26 msgid "Accepted team invitation" msgstr "Accepted team invitation" @@ -184,6 +220,10 @@ msgstr "Accepted team invitation" msgid "Account deleted" msgstr "Account deleted" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:139 +msgid "Acknowledgment" +msgstr "Acknowledgment" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:105 #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx:104 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:121 @@ -215,12 +255,12 @@ msgstr "Active Subscriptions" msgid "Add" msgstr "Add" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:176 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:88 msgid "Add all relevant fields for each recipient." msgstr "Add all relevant fields for each recipient." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:83 msgid "Add all relevant placeholders for each recipient." msgstr "Add all relevant placeholders for each recipient." @@ -236,8 +276,8 @@ msgstr "Add an authenticator to serve as a secondary authentication method when msgid "Add email" msgstr "Add email" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 msgid "Add Fields" msgstr "Add Fields" @@ -245,24 +285,20 @@ msgstr "Add Fields" msgid "Add more" msgstr "Add more" -#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270 -#~ msgid "Add number" -#~ msgstr "Add number" - #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154 msgid "Add passkey" msgstr "Add passkey" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:81 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 msgid "Add Placeholders" msgstr "Add Placeholders" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 msgid "Add Signers" msgstr "Add Signers" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 msgid "Add Subject" msgstr "Add Subject" @@ -270,23 +306,15 @@ msgstr "Add Subject" msgid "Add team email" msgstr "Add team email" -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256 -#~ msgid "Add text" -#~ msgstr "Add text" - -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272 -#~ msgid "Add Text" -#~ msgstr "Add Text" - -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:171 msgid "Add the people who will sign the document." msgstr "Add the people who will sign the document." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203 msgid "Add the recipients to create the document with" msgstr "Add the recipients to create the document with" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:181 msgid "Add the subject and message you wish to send to signers." msgstr "Add the subject and message you wish to send to signers." @@ -302,6 +330,10 @@ msgstr "Admin Actions" msgid "Admin panel" msgstr "Admin panel" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:129 +msgid "After signing a document electronically, you will be provided the opportunity to view, download, and print the document for your records. It is highly recommended that you retain a copy of all electronically signed documents for your personal records. We will also retain a copy of the signed document for our records however we may not be able to provide you with a copy of the signed document after a certain period of time." +msgstr "After signing a document electronically, you will be provided the opportunity to view, download, and print the document for your records. It is highly recommended that you retain a copy of all electronically signed documents for your personal records. We will also retain a copy of the signed document for our records however we may not be able to provide you with a copy of the signed document after a certain period of time." + #: apps/web/src/components/formatter/document-status.tsx:46 msgid "All" msgstr "All" @@ -314,6 +346,10 @@ msgstr "All documents" msgid "All documents have been processed. Any new documents that are sent or received will show here." msgstr "All documents have been processed. Any new documents that are sent or received will show here." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:81 +msgid "All documents related to the electronic signing process will be provided to you electronically through our platform or via email. It is your responsibility to ensure that your email address is current and that you can receive and open our emails." +msgstr "All documents related to the electronic signing process will be provided to you electronically through our platform or via email. It is your responsibility to ensure that your email address is current and that you can receive and open our emails." + #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:145 msgid "All inserted signatures will be voided" msgstr "All inserted signatures will be voided" @@ -342,6 +378,14 @@ msgstr "Already have an account? <0>Sign in instead" msgid "Amount" msgstr "Amount" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:48 +msgid "An electronic signature provided by you on our platform, achieved through clicking through to a document and entering your name, or any other electronic signing method we provide, is legally binding. It carries the same weight and enforceability as a manual signature written with ink on paper." +msgstr "An electronic signature provided by you on our platform, achieved through clicking through to a document and entering your name, or any other electronic signing method we provide, is legally binding. It carries the same weight and enforceability as a manual signature written with ink on paper." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:67 +msgid "An email account" +msgstr "An email account" + #: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:262 msgid "An email containing an invitation will be sent to each member." msgstr "An email containing an invitation will be sent to each member." @@ -365,17 +409,17 @@ msgstr "An email requesting the transfer of this team has been sent." msgid "An error occurred" msgstr "An error occurred" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:268 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:201 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:235 msgid "An error occurred while adding signers." msgstr "An error occurred while adding signers." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:303 msgid "An error occurred while adding the fields." msgstr "An error occurred while adding the fields." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161 msgid "An error occurred while creating document from template." msgstr "An error occurred while creating document from template." @@ -414,6 +458,10 @@ msgstr "An error occurred while moving the document." msgid "An error occurred while moving the template." msgstr "An error occurred while moving the template." +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:116 +msgid "An error occurred while removing the field." +msgstr "An error occurred while removing the field." + #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:152 #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:126 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:137 @@ -429,7 +477,7 @@ msgstr "An error occurred while removing the signature." msgid "An error occurred while removing the text." msgstr "An error occurred while removing the text." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:334 msgid "An error occurred while sending the document." msgstr "An error occurred while sending the document." @@ -441,6 +489,7 @@ msgstr "An error occurred while sending your confirmation email" #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:100 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:106 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:84 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:90 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150 #: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102 @@ -453,8 +502,8 @@ msgstr "An error occurred while signing the document." msgid "An error occurred while trying to create a checkout session." msgstr "An error occurred while trying to create a checkout session." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:234 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:170 msgid "An error occurred while updating the document settings." msgstr "An error occurred while updating the document settings." @@ -538,6 +587,10 @@ msgstr "App Version" msgid "Approve" msgstr "Approve" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:129 +msgid "Approve Document" +msgstr "Approve Document" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:78 msgid "Approved" msgstr "Approved" @@ -556,7 +609,7 @@ msgstr "Are you sure you wish to delete this team?" #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98 #: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455 #: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116 @@ -595,7 +648,7 @@ msgstr "Awaiting email confirmation" msgid "Back" msgstr "Back" -#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:109 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:164 msgid "Back to Documents" msgstr "Back to Documents" @@ -645,9 +698,22 @@ msgstr "By deleting this document, the following will occur:" msgid "By enabling 2FA, you will be required to enter a code from your authenticator app every time you sign in." msgstr "By enabling 2FA, you will be required to enter a code from your authenticator app every time you sign in." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:142 +msgid "By proceeding to use the electronic signature service provided by Documenso, you affirm that you have read and understood this disclosure. You agree to all terms and conditions related to the use of electronic signatures and electronic transactions as outlined herein." +msgstr "By proceeding to use the electronic signature service provided by Documenso, you affirm that you have read and understood this disclosure. You agree to all terms and conditions related to the use of electronic signatures and electronic transactions as outlined herein." + +#: apps/web/src/components/general/signing-disclosure.tsx:14 +msgid "By proceeding with your electronic signature, you acknowledge and consent that it will be used to sign the given document and holds the same legal validity as a handwritten signature. By completing the electronic signing process, you affirm your understanding and acceptance of these conditions." +msgstr "By proceeding with your electronic signature, you acknowledge and consent that it will be used to sign the given document and holds the same legal validity as a handwritten signature. By completing the electronic signing process, you affirm your understanding and acceptance of these conditions." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:92 +msgid "By using the electronic signature feature, you are consenting to conduct transactions and receive disclosures electronically. You acknowledge that your electronic signature on documents is binding and that you accept the terms outlined in the documents you are signing." +msgstr "By using the electronic signature feature, you are consenting to conduct transactions and receive disclosures electronically. You acknowledge that your electronic signature on documents is binding and that you accept the terms outlined in the documents you are signing." + #: apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx:186 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:190 #: apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx:108 +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:120 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:248 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:157 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:198 @@ -655,12 +721,13 @@ msgstr "By enabling 2FA, you will be required to enter a code from your authenti #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:151 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327 #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113 @@ -748,13 +815,13 @@ msgstr "Click to copy signing link for sending to recipient" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:115 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:440 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:319 msgid "Click to insert field" msgstr "Click to insert field" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121 @@ -766,8 +833,8 @@ msgid "Close" msgstr "Close" #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:430 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:309 #: apps/web/src/components/forms/v2/signup.tsx:534 msgid "Complete" msgstr "Complete" @@ -797,11 +864,11 @@ msgstr "Completed documents" msgid "Completed Documents" msgstr "Completed Documents" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:166 msgid "Configure general settings for the document." msgstr "Configure general settings for the document." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:78 msgid "Configure general settings for the template." msgstr "Configure general settings for the template." @@ -809,7 +876,7 @@ msgstr "Configure general settings for the template." msgid "Configure template" msgstr "Configure template" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:460 msgid "Confirm" msgstr "Confirm" @@ -839,6 +906,14 @@ msgstr "Confirm email" msgid "Confirmation email sent" msgstr "Confirmation email sent" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:89 +msgid "Consent to Electronic Transactions" +msgstr "Consent to Electronic Transactions" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:151 +msgid "Contact Information" +msgstr "Contact Information" + #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:189 msgid "Content" msgstr "Content" @@ -895,11 +970,11 @@ msgstr "Create a team to collaborate with your team members." msgid "Create account" msgstr "Create account" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345 msgid "Create and send" msgstr "Create and send" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347 msgid "Create as draft" msgstr "Create as draft" @@ -911,7 +986,7 @@ msgstr "Create Direct Link" msgid "Create Direct Signing Link" msgstr "Create Direct Signing Link" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197 msgid "Create document from template" msgstr "Create document from template" @@ -980,19 +1055,11 @@ msgstr "Created on" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:67 #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:88 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:93 msgid "Created on {0}" msgstr "Created on {0}" -#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94 -#~ msgid "Created on <0/>" -#~ msgstr "Created on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 -msgid "Created on{0}" -msgstr "Created on{0}" - #: apps/web/src/components/forms/password.tsx:107 msgid "Current Password" msgstr "Current Password" @@ -1031,6 +1098,10 @@ msgstr "Decline" msgid "Declined team invitation" msgstr "Declined team invitation" +#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:90 +msgid "delete" +msgstr "delete" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:141 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:187 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:200 @@ -1040,7 +1111,7 @@ msgstr "Declined team invitation" #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:100 #: apps/web/src/app/(dashboard)/templates/data-table-action-dropdown.tsx:91 #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:90 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:122 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:116 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:105 #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:121 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:109 @@ -1049,6 +1120,15 @@ msgstr "Declined team invitation" msgid "Delete" msgstr "Delete" +#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:56 +#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:54 +msgid "delete {0}" +msgstr "delete {0}" + +#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:50 +msgid "delete {teamName}" +msgstr "delete {teamName}" + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:137 msgid "Delete account" msgstr "Delete account" @@ -1108,10 +1188,6 @@ msgstr "Deleted" msgid "Deleting account..." msgstr "Deleting account..." -#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135 -#~ msgid "Deleting document" -#~ msgstr "Deleting document" - #: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75 msgid "Device" msgstr "Device" @@ -1216,7 +1292,7 @@ msgstr "Document completed" msgid "Document Completed!" msgstr "Document Completed!" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150 msgid "Document created" msgstr "Document created" @@ -1247,7 +1323,7 @@ msgstr "Document ID" msgid "Document inbox" msgstr "Document inbox" -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179 msgid "Document Limit Exceeded!" msgstr "Document Limit Exceeded!" @@ -1275,7 +1351,7 @@ msgstr "Document re-sent" msgid "Document resealed" msgstr "Document resealed" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:323 msgid "Document sent" msgstr "Document sent" @@ -1370,10 +1446,6 @@ msgstr "Draft documents" msgid "Drafted Documents" msgstr "Drafted Documents" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:245 -#~ msgid "Draw" -#~ msgstr "Draw" - #: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:121 msgid "Due to an unpaid invoice, your team has been restricted. Please settle the payment to restore full access to your team." msgstr "Due to an unpaid invoice, your team has been restricted. Please settle the payment to restore full access to your team." @@ -1404,15 +1476,23 @@ msgstr "Edit" msgid "Edit webhook" msgstr "Edit webhook" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:78 +msgid "Electronic Delivery of Documents" +msgstr "Electronic Delivery of Documents" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:17 +msgid "Electronic Signature Disclosure" +msgstr "Electronic Signature Disclosure" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255 #: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:377 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:257 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169 #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153 #: apps/web/src/components/forms/forgot-password.tsx:81 @@ -1432,6 +1512,10 @@ msgstr "Email address" msgid "Email Address" msgstr "Email Address" +#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:80 +msgid "Email cannot already exist in the template" +msgstr "Email cannot already exist in the template" + #: apps/web/src/app/(unauthenticated)/verify-email/[token]/client.tsx:36 msgid "Email Confirmed!" msgstr "Email Confirmed!" @@ -1496,19 +1580,19 @@ msgstr "Enter your text here" #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:233 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:267 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:302 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:333 #: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:165 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:196 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:169 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:200 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:234 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212 @@ -1518,6 +1602,8 @@ msgstr "Enter your text here" #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:136 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:109 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:89 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:115 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:121 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:147 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:149 @@ -1549,24 +1635,11 @@ msgstr "Exceeded timeout" msgid "Expired" msgstr "Expired" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106 -#~ msgid "Expires on" -#~ msgstr "Expires on" - #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:104 msgid "Expires on {0}" msgstr "Expires on {0}" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 -#~ msgid "Expires on <0/>" -#~ msgstr "Expires on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107 -msgid "Expires on{0}" -msgstr "Expires on{0}" - #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:42 msgid "Failed to reseal document" msgstr "Failed to reseal document" @@ -1588,22 +1661,27 @@ msgstr "Fields" msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" msgstr "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:154 +msgid "For any questions regarding this disclosure, electronic signatures, or any related process, please contact us at: <0>{SUPPORT_EMAIL}" +msgstr "For any questions regarding this disclosure, electronic signatures, or any related process, please contact us at: <0>{SUPPORT_EMAIL}" + #: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21 #: apps/web/src/components/forms/signin.tsx:370 msgid "Forgot your password?" msgstr "Forgot your password?" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:362 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:242 #: apps/web/src/components/forms/profile.tsx:110 #: apps/web/src/components/forms/v2/signup.tsx:312 msgid "Full Name" msgstr "Full Name" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 #: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60 #: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43 #: apps/web/src/components/(teams)/settings/layout/mobile-nav.tsx:51 @@ -1664,10 +1742,6 @@ msgstr "Hide" msgid "Hide additional information" msgstr "Hide additional information" -#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40 -#~ msgid "I am the owner of this document" -#~ msgstr "I am the owner of this document" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173 msgid "I'm sure! Delete it" @@ -1701,6 +1775,10 @@ msgstr "Inbox documents" msgid "Information" msgstr "Information" +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:132 +msgid "Initials" +msgstr "Initials" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:78 msgid "Inserted" msgstr "Inserted" @@ -1767,6 +1845,10 @@ msgstr "Invited At" msgid "Invoice" msgstr "Invoice" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:118 +msgid "It is crucial to keep your contact information, especially your email address, up to date with us. Please notify us immediately of any changes to ensure that you continue to receive all necessary communications." +msgstr "It is crucial to keep your contact information, especially your email address, up to date with us. Please notify us immediately of any changes to ensure that you continue to receive all necessary communications." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:134 msgid "It looks like {0} hasn't added any documents to their profile yet." msgstr "It looks like {0} hasn't added any documents to their profile yet." @@ -1832,6 +1914,10 @@ msgstr "Leave" msgid "Leave team" msgstr "Leave team" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:45 +msgid "Legality of Electronic Signatures" +msgstr "Legality of Electronic Signatures" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:264 msgid "Light Mode" msgstr "Light Mode" @@ -1985,6 +2071,7 @@ msgstr "Monthly Active Users: Users that created at least one Document" msgid "Monthly Active Users: Users that had at least one of their documents completed" msgstr "Monthly Active Users: Users that had at least one of their documents completed" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Move" msgstr "Move" @@ -2002,6 +2089,7 @@ msgstr "Move Template to Team" msgid "Move to Team" msgstr "Move to Team" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Moving..." msgstr "Moving..." @@ -2016,8 +2104,8 @@ msgstr "My templates" #: 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.tsx:61 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277 #: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153 @@ -2047,8 +2135,8 @@ msgstr "New team owner" msgid "New Template" msgstr "New Template" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:421 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:300 #: apps/web/src/components/forms/v2/signup.tsx:521 msgid "Next" msgstr "Next" @@ -2168,12 +2256,14 @@ msgstr "Or" msgid "Or continue with" msgstr "Or continue with" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324 msgid "Otherwise, the document will be created as a draft." msgstr "Otherwise, the document will be created as a draft." #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:86 #: apps/web/src/components/(dashboard)/layout/menu-switcher.tsx:81 +#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:86 +#: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:109 msgid "Owner" msgstr "Owner" @@ -2308,7 +2398,7 @@ msgstr "Please enter a meaningful name for your token. This will help you identi msgid "Please mark as viewed to complete" msgstr "Please mark as viewed to complete" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459 msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder." msgstr "Please note that proceeding will remove direct linking recipient and turn it into a placeholder." @@ -2344,6 +2434,10 @@ msgstr "Please provide a token from the authenticator, or a backup code. If you msgid "Please provide a token from your authenticator, or a backup code." msgstr "Please provide a token from your authenticator, or a backup code." +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:169 +msgid "Please review the document before signing." +msgstr "Please review the document before signing." + #: apps/web/src/components/forms/send-confirmation-email.tsx:64 msgid "Please try again and make sure you enter the correct email address." msgstr "Please try again and make sure you enter the correct email address." @@ -2426,6 +2520,10 @@ msgstr "Public templates are connected to your public profile. Any modifications msgid "Read only field" msgstr "Read only field" +#: apps/web/src/components/general/signing-disclosure.tsx:21 +msgid "Read the full <0>signature disclosure." +msgstr "Read the full <0>signature disclosure." + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:90 msgid "Ready" msgstr "Ready" @@ -2553,6 +2651,10 @@ msgstr "Resolve" msgid "Resolve payment" msgstr "Resolve payment" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:126 +msgid "Retention of Documents" +msgstr "Retention of Documents" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:168 msgid "Retry" msgstr "Retry" @@ -2599,7 +2701,7 @@ msgstr "Role" msgid "Roles" msgstr "Roles" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342 msgid "Save" @@ -2621,6 +2723,10 @@ msgstr "Search by document title" msgid "Search by name or email" msgstr "Search by name or email" +#: apps/web/src/components/(dashboard)/document-search/document-search.tsx:42 +msgid "Search documents..." +msgstr "Search documents..." + #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:189 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:217 msgid "Secret" @@ -2669,7 +2775,7 @@ msgstr "Select passkey" msgid "Send confirmation email" msgstr "Send confirmation email" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308 msgid "Send document" msgstr "Send document" @@ -2751,19 +2857,19 @@ msgstr "Sign" msgid "Sign as {0} <0>({1})" msgstr "Sign as {0} <0>({1})" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219 -#~ msgid "Sign as <0>{0} <1>({1})" -#~ msgstr "Sign as <0>{0} <1>({1})" - #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183 msgid "Sign as<0>{0} <1>({1})" msgstr "Sign as<0>{0} <1>({1})" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:330 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:210 msgid "Sign document" msgstr "Sign document" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:128 +msgid "Sign Document" +msgstr "Sign Document" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59 msgid "Sign field" msgstr "Sign field" @@ -2788,8 +2894,8 @@ msgstr "Sign in to your account" msgid "Sign Out" msgstr "Sign Out" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:351 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:231 msgid "Sign the document to complete the process." msgstr "Sign the document to complete the process." @@ -2813,10 +2919,11 @@ msgstr "Sign Up with OIDC" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88 #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:192 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:392 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:271 #: apps/web/src/components/forms/profile.tsx:132 msgid "Signature" msgstr "Signature" @@ -2994,6 +3101,10 @@ msgstr "Success" msgid "Successfully created passkey" msgstr "Successfully created passkey" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:57 +msgid "System Requirements" +msgstr "System Requirements" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:266 msgid "System Theme" msgstr "System Theme" @@ -3145,7 +3256,7 @@ msgstr "Template has been updated." msgid "Template moved" msgstr "Template moved" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:219 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:223 msgid "Template saved" msgstr "Template saved" @@ -3170,6 +3281,10 @@ msgstr "Text" msgid "Text Color" msgstr "Text Color" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:24 +msgid "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." +msgstr "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:52 msgid "The account has been deleted successfully." msgstr "The account has been deleted successfully." @@ -3192,7 +3307,7 @@ msgstr "The document has been successfully moved to the selected team." msgid "The document is now completed, please follow any instructions provided within the parent application." msgstr "The document is now completed, please follow any instructions provided within the parent application." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167 msgid "The document was created but could not be sent to recipients." msgstr "The document was created but could not be sent to recipients." @@ -3200,7 +3315,7 @@ msgstr "The document was created but could not be sent to recipients." msgid "The document will be hidden from your account" msgstr "The document will be hidden from your account" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316 msgid "The document will be immediately sent to recipients if this is checked." msgstr "The document will be immediately sent to recipients if this is checked." @@ -3454,6 +3569,10 @@ msgstr "To gain access to your account, please confirm your email address by cli msgid "To mark this document as viewed, you need to be logged in as <0>{0}" msgstr "To mark this document as viewed, you need to be logged in as <0>{0}" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:60 +msgid "To use our electronic signature service, you must have access to:" +msgstr "To use our electronic signature service, you must have access to:" + #: apps/web/src/app/embed/authenticate.tsx:21 msgid "To view this document you need to be signed into your account, please sign in to continue." msgstr "To view this document you need to be signed into your account, please sign in to continue." @@ -3483,7 +3602,7 @@ msgid "Token deleted" msgstr "Token deleted" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:114 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 msgid "Token doesn't have an expiration date" msgstr "Token doesn't have an expiration date" @@ -3511,6 +3630,10 @@ msgstr "Total Signers that Signed Up" msgid "Total Users" msgstr "Total Users" +#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:76 +msgid "transfer {teamName}" +msgstr "transfer {teamName}" + #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:160 msgid "Transfer ownership of this team to a selected team member." msgstr "Transfer ownership of this team to a selected team member." @@ -3568,10 +3691,6 @@ msgstr "Type 'delete' to confirm" msgid "Type a command or search..." msgstr "Type a command or search..." -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:275 -#~ msgid "Typed Signature" -#~ msgstr "Typed Signature" - #: apps/web/src/app/(unauthenticated)/verify-email/page.tsx:26 msgid "Uh oh! Looks like you're missing a token" msgstr "Uh oh! Looks like you're missing a token" @@ -3732,6 +3851,10 @@ msgstr "Updating password..." msgid "Updating profile..." msgstr "Updating profile..." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:115 +msgid "Updating Your Information" +msgstr "Updating Your Information" + #: apps/web/src/components/forms/avatar-image.tsx:182 msgid "Upload Avatar" msgstr "Upload Avatar" @@ -3762,7 +3885,7 @@ msgstr "Use Authenticator" msgid "Use Backup Code" msgstr "Use Backup Code" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191 msgid "Use Template" msgstr "Use Template" @@ -3843,6 +3966,10 @@ msgstr "View all security activity related to your account." msgid "View Codes" msgstr "View Codes" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:127 +msgid "View Document" +msgstr "View Document" + #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:150 msgid "View documents associated with this email" msgstr "View documents associated with this email" @@ -4120,6 +4247,10 @@ msgstr "Webhooks" msgid "Weekly" msgstr "Weekly" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:21 +msgid "Welcome" +msgstr "Welcome" + #: apps/web/src/app/(unauthenticated)/signin/page.tsx:33 msgid "Welcome back, we are lucky to have you." msgstr "Welcome back, we are lucky to have you." @@ -4132,6 +4263,10 @@ msgstr "Were you trying to edit this document instead?" msgid "When you click continue, you will be prompted to add the first available authenticator on your system." msgstr "When you click continue, you will be prompted to add the first available authenticator on your system." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:36 +msgid "When you use our platform to affix your electronic signature to documents, you are consenting to do so under the Electronic Signatures in Global and National Commerce Act (E-Sign Act) and other applicable laws. This action indicates your agreement to use electronic means to sign documents and receive notifications." +msgstr "When you use our platform to affix your electronic signature to documents, you are consenting to do so under the Electronic Signatures in Global and National Commerce Act (E-Sign Act) and other applicable laws. This action indicates your agreement to use electronic means to sign documents and receive notifications." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:139 msgid "While waiting for them to do so you can create your own Documenso account and get started with document signing right away." msgstr "While waiting for them to do so you can create your own Documenso account and get started with document signing right away." @@ -4140,6 +4275,10 @@ msgstr "While waiting for them to do so you can create your own Documenso accoun msgid "Who do you want to remind?" msgstr "Who do you want to remind?" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:101 +msgid "Withdrawing Consent" +msgstr "Withdrawing Consent" + #: apps/web/src/components/forms/public-profile-form.tsx:223 msgid "Write about the team" msgstr "Write about the team" @@ -4196,10 +4335,6 @@ msgstr "You are about to revoke access for team <0>{0} ({1}) to use your ema msgid "You are currently on the <0>Free Plan." msgstr "You are currently on the <0>Free Plan." -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92 -#~ msgid "You are currently subscribed to <0>{0}" -#~ msgstr "You are currently subscribed to <0>{0}" - #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148 msgid "You are currently updating <0>{teamMemberName}." msgstr "You are currently updating <0>{teamMemberName}." @@ -4244,10 +4379,6 @@ msgstr "You cannot modify a team member who has a higher role than you." msgid "You cannot upload encrypted PDFs" msgstr "You cannot upload encrypted PDFs" -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97 -#~ msgid "You currently have an active plan" -#~ msgstr "You currently have an active plan" - #: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45 msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance." msgstr "You do not currently have a customer record, this should not happen. Please contact support for assistance." @@ -4294,7 +4425,7 @@ msgstr "You have reached the maximum limit of {0} direct templates. <0>Upgrade y msgid "You have reached your document limit." msgstr "You have reached your document limit." -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182 msgid "You have reached your document limit. <0>Upgrade your account to continue!" msgstr "You have reached your document limit. <0>Upgrade your account to continue!" @@ -4316,6 +4447,10 @@ msgstr "You have successfully removed this user from the team." msgid "You have successfully revoked access." msgstr "You have successfully revoked access." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:104 +msgid "You have the right to withdraw your consent to use electronic signatures at any time before completing the signing process. To withdraw your consent, please contact the sender of the document. In failing to contact the sender you may reach out to <0>{SUPPORT_EMAIL} for assistance. Be aware that withdrawing consent may delay or halt the completion of the related transaction or service." +msgstr "You have the right to withdraw your consent to use electronic signatures at any time before completing the signing process. To withdraw your consent, please contact the sender of the document. In failing to contact the sender you may reach out to <0>{SUPPORT_EMAIL} for assistance. Be aware that withdrawing consent may delay or halt the completion of the related transaction or service." + #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:93 msgid "You have updated {teamMemberName}." msgstr "You have updated {teamMemberName}." @@ -4328,10 +4463,6 @@ msgstr "You have verified your email address for <0>{0}." msgid "You must be an admin of this team to manage billing." msgstr "You must be an admin of this team to manage billing." -#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80 -#~ msgid "You must enter '{confirmTransferMessage}' to proceed" -#~ msgstr "You must enter '{confirmTransferMessage}' to proceed" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58 #: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54 @@ -4394,7 +4525,7 @@ msgstr "Your direct signing templates" msgid "Your document failed to upload." msgstr "Your document failed to upload." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151 msgid "Your document has been created from the template successfully." msgstr "Your document has been created from the template successfully." @@ -4402,7 +4533,7 @@ msgstr "Your document has been created from the template successfully." msgid "Your document has been re-sent successfully." msgstr "Your document has been re-sent successfully." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:324 msgid "Your document has been sent successfully." msgstr "Your document has been sent successfully." @@ -4493,7 +4624,7 @@ msgstr "Your template has been successfully deleted." msgid "Your template will be duplicated." msgstr "Your template will be duplicated." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:220 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:224 msgid "Your templates has been saved successfully." msgstr "Your templates has been saved successfully." diff --git a/packages/lib/translations/es/common.po b/packages/lib/translations/es/common.po index b78eecbd5..2ca30cc27 100644 --- a/packages/lib/translations/es/common.po +++ b/packages/lib/translations/es/common.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-22 02:25\n" +"PO-Revision-Date: 2024-11-01 04:00\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -18,14 +18,104 @@ msgstr "" "X-Crowdin-File: common.po\n" "X-Crowdin-File-ID: 4\n" +#: packages/email/template-components/template-document-super-delete.tsx:27 +msgid "\"{documentName}\" has been deleted by an admin." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:37 +msgid "“{documentName}” has been signed" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:41 +#: packages/lib/server-only/document/resend-document.tsx:109 +msgid "{0}" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:74 +msgid "{0} Document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:117 +msgid "{0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/email/templates/team-join.tsx:55 +msgid "{0} joined the team {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-leave.tsx:55 +msgid "{0} left the team {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:30 msgid "{0} of {1} row(s) selected." msgstr "{0} de {1} fila(s) seleccionada." +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:119 +#: packages/lib/server-only/document/resend-document.tsx:119 +msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." +msgstr "" + +#: packages/email/templates/document-invite.tsx:79 +msgid "{inviterName} <0>({inviterEmail})" +msgstr "" + +#: packages/email/templates/document-cancel.tsx:19 +msgid "{inviterName} has cancelled the document {documentName}, you don't need to sign it anymore." +msgstr "" + +#: packages/email/template-components/template-document-cancel.tsx:24 +msgid "{inviterName} has cancelled the document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:57 +msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:41 +msgid "{inviterName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/recipient-removed-from-document.tsx:18 +msgid "{inviterName} has removed you from the document {documentName}." +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:49 +msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:40 +msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/team-join.tsx:61 +msgid "{memberEmail} joined the following team" +msgstr "" + +#: packages/email/templates/team-leave.tsx:61 +msgid "{memberEmail} left the following team" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:55 +msgid "{recipientName} {action} a document by using one of your direct links" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:55 +msgid "{teamName} ownership transfer request" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:41 msgid "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}" msgstr "{visibleRows, plural, one {Mostrando # resultado.} other {Mostrando # resultados.}}" +#: packages/email/templates/document-invite.tsx:91 +msgid "`${inviterName} has invited you to ${action} the document \"${documentName}\".`" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:59 +msgid "<0>{senderName} has requested that you take ownership of the following team" +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:53 msgid "<0>Inherit authentication method - Use the global action signing authentication method configured in the \"General Settings\" step" msgstr "<0>Heredar método de autenticación - Use el método de autenticación de firma de acción global configurado en el paso \"Configuración General\"" @@ -56,20 +146,66 @@ msgstr "<0>Requerir cuenta - El destinatario debe haber iniciado sesión par msgid "<0>Require passkey - The recipient must have an account and passkey configured via their settings" msgstr "<0>Requerir clave de acceso - El destinatario debe tener una cuenta y clave de acceso configurada a través de sus configuraciones" +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:109 +msgid "A document was created by your direct template that requires you to {recipientActionVerb} it." +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts:90 +msgid "A new member has joined your team" +msgstr "" + +#: packages/lib/server-only/team/create-team-email-verification.ts:142 +msgid "A request to use your email has been initiated by {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-join.tsx:29 +msgid "A team member has joined a team on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-left-email.ts:79 +msgid "A team member has left {0}" +msgstr "" + +#: packages/email/templates/team-leave.tsx:29 +msgid "A team member has left a team on Documenso" +msgstr "" + +#: packages/email/templates/team-delete.tsx:27 +#: packages/email/templates/team-delete.tsx:31 +msgid "A team you were a part of has been deleted" +msgstr "" + +#: packages/email/templates/team-invite.tsx:77 +#: packages/email/templates/team-transfer-request.tsx:81 +msgid "Accept" +msgstr "" + +#: packages/email/templates/team-invite.tsx:29 +msgid "Accept invitation to join a team on Documenso" +msgstr "" + +#: packages/email/templates/confirm-team-email.tsx:38 +msgid "Accept team email request for {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:29 +msgid "Accept team transfer request on Documenso" +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "Add a document" msgstr "Agregar un documento" -#: packages/ui/primitives/document-flow/add-settings.tsx:336 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:339 +#: packages/ui/primitives/document-flow/add-settings.tsx:378 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:378 msgid "Add a URL to redirect the user to once the document is signed" msgstr "Agregue una URL para redirigir al usuario una vez que se firme el documento" -#: packages/ui/primitives/document-flow/add-settings.tsx:248 +#: packages/ui/primitives/document-flow/add-settings.tsx:290 msgid "Add an external ID to the document. This can be used to identify the document in external systems." msgstr "Agregue un ID externo al documento. Esto se puede usar para identificar el documento en sistemas externos." -#: packages/ui/primitives/template-flow/add-template-settings.tsx:256 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:295 msgid "Add an external ID to the template. This can be used to identify in external systems." msgstr "Agregue un ID externo a la plantilla. Esto se puede usar para identificar en sistemas externos." @@ -110,13 +246,13 @@ msgstr "Agregar texto al campo" msgid "Admin" msgstr "Admin" -#: packages/ui/primitives/document-flow/add-settings.tsx:230 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:238 +#: packages/ui/primitives/document-flow/add-settings.tsx:272 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:277 msgid "Advanced Options" msgstr "Opciones avanzadas" -#: packages/ui/primitives/document-flow/add-fields.tsx:570 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 +#: packages/ui/primitives/document-flow/add-fields.tsx:573 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:406 msgid "Advanced settings" msgstr "Configuraciones avanzadas" @@ -124,10 +260,26 @@ msgstr "Configuraciones avanzadas" msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email." msgstr "Después de la presentación, se generará automáticamente un documento y se agregará a su página de documentos. También recibirá una notificación por correo electrónico." +#: packages/email/template-components/template-document-cancel.tsx:31 +msgid "All signatures have been voided." +msgstr "" + +#: packages/email/templates/document-super-delete.tsx:20 +msgid "An admin has deleted your document \"{documentName}\"." +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:167 +msgid "An error occurred while loading the document." +msgstr "Se produjo un error al cargar el documento." + #: packages/lib/constants/recipient-roles.ts:8 msgid "Approve" msgstr "Aprobar" +#: packages/lib/constants/recipient-roles.ts:68 +#~ msgid "APPROVE_REQUEST" +#~ msgstr "" + #: packages/lib/constants/recipient-roles.ts:9 msgid "Approved" msgstr "Aprobado" @@ -136,10 +288,18 @@ msgstr "Aprobado" msgid "Approver" msgstr "Aprobador" +#: packages/lib/constants/recipient-roles.ts:44 +msgid "Approvers" +msgstr "Aprobadores" + #: packages/lib/constants/recipient-roles.ts:10 msgid "Approving" msgstr "Aprobando" +#: packages/email/template-components/template-confirmation-email.tsx:28 +msgid "Before you get started, please confirm your email address by clicking the button below:" +msgstr "" + #: packages/ui/primitives/signature-pad/signature-pad.tsx:377 msgid "Black" msgstr "Negro" @@ -148,6 +308,14 @@ msgstr "Negro" msgid "Blue" msgstr "Azul" +#: packages/email/templates/team-invite.tsx:67 +msgid "by <0>{senderName}" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:70 +msgid "By accepting this request, you will take responsibility for any billing items associated with this team." +msgstr "" + #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356 #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58 msgid "Cancel" @@ -157,10 +325,6 @@ msgstr "Cancelar" msgid "Cannot remove signer" msgstr "No se puede eliminar el firmante" -#: packages/ui/primitives/document-flow/add-signers.tsx:221 -#~ msgid "Cannot update signer because they have already signed a field" -#~ msgstr "Cannot update signer because they have already signed a field" - #: packages/lib/constants/recipient-roles.ts:17 msgid "Cc" msgstr "Cc" @@ -174,15 +338,14 @@ msgstr "CC" msgid "CC'd" msgstr "CC'd" +#: packages/lib/constants/recipient-roles.ts:51 +msgid "Ccers" +msgstr "Ccers" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86 msgid "Character Limit" msgstr "Límite de caracteres" -#: packages/ui/primitives/document-flow/add-fields.tsx:1026 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 -msgid "Checkbox" -msgstr "Caja de verificación" - #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197 msgid "Checkbox values" msgstr "Valores de Checkbox" @@ -203,51 +366,108 @@ msgstr "Haga clic para insertar campo" msgid "Close" msgstr "Cerrar" +#: packages/email/template-components/template-document-completed.tsx:35 +#: packages/email/template-components/template-document-self-signed.tsx:36 +msgid "Completed" +msgstr "" + +#: packages/email/templates/document-completed.tsx:21 +#: packages/email/templates/document-self-signed.tsx:17 +msgid "Completed Document" +msgstr "" + #: packages/lib/constants/template.ts:12 msgid "Configure Direct Recipient" msgstr "Configurar destinatario directo" -#: packages/ui/primitives/document-flow/add-fields.tsx:571 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 +#: packages/ui/primitives/document-flow/add-fields.tsx:574 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:407 msgid "Configure the {0} field" msgstr "Configurar el campo {0}" +#: packages/email/template-components/template-confirmation-email.tsx:38 +msgid "Confirm email" +msgstr "" + #: packages/ui/primitives/document-flow/document-flow-root.tsx:141 msgid "Continue" msgstr "Continuar" +#: packages/email/template-components/template-document-invite.tsx:66 +msgid "Continue by {0} the document." +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:45 +msgid "Continue by downloading the document." +msgstr "" + #: packages/ui/components/document/document-share-button.tsx:46 msgid "Copied to clipboard" msgstr "Copiado al portapapeles" +#: packages/ui/components/document/document-share-button.tsx:194 +msgid "Copy Link" +msgstr "Copiar enlace" + +#: packages/email/template-components/template-document-self-signed.tsx:46 +msgid "Create a <0>free account to access your signed documents at any time." +msgstr "" + +#: packages/email/template-components/template-document-self-signed.tsx:68 +msgid "Create account" +msgstr "" + #: packages/ui/primitives/document-flow/add-signature.tsx:360 msgid "Custom Text" msgstr "Texto personalizado" -#: packages/ui/primitives/document-flow/add-fields.tsx:922 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 +#: packages/ui/primitives/document-flow/add-fields.tsx:927 +#: packages/ui/primitives/document-flow/types.ts:53 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:690 msgid "Date" msgstr "Fecha" -#: packages/ui/primitives/document-flow/add-settings.tsx:271 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:279 +#: packages/ui/primitives/document-flow/add-settings.tsx:313 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:318 msgid "Date Format" msgstr "Formato de fecha" +#: packages/email/templates/team-invite.tsx:83 +msgid "Decline" +msgstr "" + +#: packages/email/templates/reset-password.tsx:65 +msgid "Didn't request a password change? We are here to help you secure your account, just <0>contact us." +msgstr "" + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:570 msgid "Direct link receiver" msgstr "Receptor de enlace directo" #: packages/ui/components/document/document-global-auth-access-select.tsx:62 -#: packages/ui/primitives/document-flow/add-settings.tsx:174 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:151 +#: packages/ui/primitives/document-flow/add-settings.tsx:216 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:190 msgid "Document access" msgstr "Acceso al documento" +#: packages/lib/server-only/document/super-delete-document.ts:75 +msgid "Document Cancelled" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:30 +#: packages/lib/server-only/template/create-document-from-direct-template.ts:554 +msgid "Document created from direct template" +msgstr "" + #: packages/lib/constants/template.ts:20 msgid "Document Creation" msgstr "Creación de documento" +#: packages/lib/server-only/document/send-delete-email.ts:58 +msgid "Document Deleted!" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:64 #: packages/ui/components/document/document-download-button.tsx:68 msgid "Download" msgstr "Descargar" @@ -256,8 +476,8 @@ msgstr "Descargar" msgid "Drag & drop your PDF here." msgstr "Arrastre y suelte su PDF aquí." -#: packages/ui/primitives/document-flow/add-fields.tsx:1052 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 +#: packages/ui/primitives/document-flow/add-fields.tsx:1058 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:820 msgid "Dropdown" msgstr "Menú desplegable" @@ -265,20 +485,26 @@ msgstr "Menú desplegable" msgid "Dropdown options" msgstr "Opciones de menú desplegable" -#: packages/ui/primitives/document-flow/add-fields.tsx:870 +#: packages/ui/primitives/document-flow/add-fields.tsx:875 #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:500 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 +#: packages/ui/primitives/document-flow/add-signers.tsx:507 +#: packages/ui/primitives/document-flow/types.ts:54 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:638 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:470 msgid "Email" msgstr "Correo electrónico" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:184 +#: packages/ui/primitives/document-flow/add-signature.types.ts:7 +msgid "Email is required" +msgstr "Se requiere email" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:223 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: packages/ui/primitives/document-flow/add-fields.tsx:1117 +#: packages/ui/primitives/document-flow/add-fields.tsx:1123 msgid "Empty field" msgstr "Campo vacío" @@ -291,7 +517,7 @@ msgstr "Habilitar firma de enlace directo" msgid "Enable signing order" msgstr "Habilitar orden de firma" -#: packages/ui/primitives/document-flow/add-fields.tsx:790 +#: packages/ui/primitives/document-flow/add-fields.tsx:795 msgid "Enable Typed Signatures" msgstr "Habilitar firmas escritas" @@ -300,11 +526,12 @@ msgid "Enter password" msgstr "Ingrese la contraseña" #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257 +#: packages/ui/primitives/pdf-viewer.tsx:166 msgid "Error" msgstr "Error" -#: packages/ui/primitives/document-flow/add-settings.tsx:241 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:249 +#: packages/ui/primitives/document-flow/add-settings.tsx:283 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:288 msgid "External ID" msgstr "ID externo" @@ -346,6 +573,18 @@ msgstr "Marcador de posición de campo" msgid "Font Size" msgstr "Tamaño de fuente" +#: packages/lib/server-only/auth/send-forgot-password.ts:61 +msgid "Forgot Password?" +msgstr "" + +#: packages/email/template-components/template-forgot-password.tsx:21 +msgid "Forgot your password?" +msgstr "" + +#: packages/ui/primitives/document-flow/types.ts:50 +msgid "Free Signature" +msgstr "Firma gratuita" + #: packages/ui/components/document/document-global-auth-action-select.tsx:64 msgid "Global recipient action authentication" msgstr "Autenticación de acción de destinatario global" @@ -358,37 +597,67 @@ msgstr "Regresar" msgid "Green" msgstr "Verde" -#: packages/lib/constants/recipient-roles.ts:72 +#: packages/email/templates/reset-password.tsx:50 +msgid "Hi, {userName} <0>({userEmail})" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:76 msgid "I am a signer of this document" msgstr "Soy un firmante de este documento" -#: packages/lib/constants/recipient-roles.ts:75 +#: packages/lib/constants/recipient-roles.ts:79 msgid "I am a viewer of this document" msgstr "Soy un visualizador de este documento" -#: packages/lib/constants/recipient-roles.ts:73 +#: packages/lib/constants/recipient-roles.ts:77 msgid "I am an approver of this document" msgstr "Soy un aprobador de este documento" -#: packages/lib/constants/recipient-roles.ts:74 +#: packages/lib/constants/recipient-roles.ts:78 msgid "I am required to receive a copy of this document" msgstr "Se me requiere recibir una copia de este documento" -#: packages/lib/constants/recipient-roles.ts:74 -#~ msgid "I am required to recieve a copy of this document" -#~ msgstr "I am required to recieve a copy of this document" - #: packages/ui/components/recipient/recipient-action-auth-select.tsx:29 #: packages/ui/components/recipient/recipient-action-auth-select.tsx:87 msgid "Inherit authentication method" msgstr "Heredar método de autenticación" +#: packages/ui/primitives/document-flow/types.ts:51 +msgid "Initials" +msgstr "Iniciales" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:17 +msgid "Invalid email" +msgstr "Email inválido" + +#: packages/ui/primitives/document-flow/add-signature.types.ts:8 +msgid "Invalid email address" +msgstr "Dirección de email inválida" + +#: packages/email/templates/team-invite.tsx:55 +msgid "Join {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67 #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72 #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48 msgid "Label" msgstr "Etiqueta" +#: packages/ui/primitives/document-flow/add-settings.tsx:176 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:150 +msgid "Language" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:87 +msgid "Link expires in 1 hour." +msgstr "" + +#: packages/ui/primitives/lazy-pdf-viewer.tsx:15 +#: packages/ui/primitives/pdf-viewer.tsx:44 +msgid "Loading document..." +msgstr "Cargando documento..." + #: packages/lib/constants/teams.ts:11 msgid "Manager" msgstr "Gerente" @@ -402,7 +671,7 @@ msgid "Member" msgstr "Miembro" #: packages/ui/primitives/document-flow/add-subject.tsx:95 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:215 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:254 msgid "Message <0>(Optional)" msgstr "Mensaje <0>(Opcional)" @@ -410,11 +679,12 @@ msgstr "Mensaje <0>(Opcional)" msgid "Min" msgstr "Mín" -#: packages/ui/primitives/document-flow/add-fields.tsx:896 +#: packages/ui/primitives/document-flow/add-fields.tsx:901 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:535 #: packages/ui/primitives/document-flow/add-signers.tsx:541 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 +#: packages/ui/primitives/document-flow/types.ts:55 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:664 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:504 msgid "Name" @@ -432,13 +702,13 @@ msgstr "Necesita firmar" msgid "Needs to view" msgstr "Necesita ver" -#: packages/ui/primitives/document-flow/add-fields.tsx:680 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 +#: packages/ui/primitives/document-flow/add-fields.tsx:686 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:504 msgid "No recipient matching this description was found." msgstr "No se encontró ningún destinatario que coincidiera con esta descripción." -#: packages/ui/primitives/document-flow/add-fields.tsx:696 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 +#: packages/ui/primitives/document-flow/add-fields.tsx:701 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:519 msgid "No recipients with this role" msgstr "No hay destinatarios con este rol" @@ -462,8 +732,9 @@ msgstr "No se encontró campo de firma" msgid "No value found." msgstr "No se encontró valor." -#: packages/ui/primitives/document-flow/add-fields.tsx:974 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 +#: packages/ui/primitives/document-flow/add-fields.tsx:979 +#: packages/ui/primitives/document-flow/types.ts:56 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:742 msgid "Number" msgstr "Número" @@ -483,10 +754,30 @@ msgstr "Una vez que su plantilla esté configurada, comparta el enlace donde des msgid "Page {0} of {1}" msgstr "Página {0} de {1}" +#: packages/ui/primitives/pdf-viewer.tsx:259 +msgid "Page {0} of {numPages}" +msgstr "Página {0} de {numPages}" + #: packages/ui/primitives/document-password-dialog.tsx:62 msgid "Password Required" msgstr "Se requiere contraseña" +#: packages/email/templates/forgot-password.tsx:17 +msgid "Password Reset Requested" +msgstr "" + +#: packages/email/templates/reset-password.tsx:18 +msgid "Password Reset Successful" +msgstr "" + +#: packages/email/template-components/template-reset-password.tsx:22 +msgid "Password updated!" +msgstr "" + +#: packages/email/templates/document-pending.tsx:17 +msgid "Pending Document" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156 msgid "Pick a number" msgstr "Seleccione un número" @@ -497,8 +788,40 @@ msgstr "Seleccione un número" msgid "Placeholder" msgstr "Marcador de posición" -#: packages/ui/primitives/document-flow/add-fields.tsx:1000 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 +#: packages/email/template-components/template-document-invite.tsx:43 +msgid "Please {0} your document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:38 +msgid "Please {action} your document {documentName}" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:98 +msgid "Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:112 +msgid "Please {recipientActionVerb} this document created by your direct template" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:104 +msgid "Please {recipientActionVerb} your document" +msgstr "" + +#: packages/lib/server-only/auth/send-confirmation-email.ts:67 +msgid "Please confirm your email" +msgstr "" + +#: packages/email/templates/confirm-email.tsx:15 +msgid "Please confirm your email address" +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:223 +#: packages/ui/primitives/pdf-viewer.tsx:238 +msgid "Please try again or contact our support." +msgstr "Por favor, inténtalo de nuevo o contacta a nuestro soporte." + +#: packages/ui/primitives/template-flow/add-template-fields.tsx:768 msgid "Radio" msgstr "Radio" @@ -519,8 +842,8 @@ msgid "Receives copy" msgstr "Recibe copia" #: packages/ui/components/recipient/recipient-action-auth-select.tsx:39 -#: packages/ui/primitives/document-flow/add-settings.tsx:215 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:169 +#: packages/ui/primitives/document-flow/add-settings.tsx:257 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:208 msgid "Recipient action authentication" msgstr "Autenticación de acción de destinatario" @@ -528,12 +851,28 @@ msgstr "Autenticación de acción de destinatario" msgid "Red" msgstr "Rojo" -#: packages/ui/primitives/document-flow/add-settings.tsx:329 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:332 +#: packages/ui/primitives/document-flow/add-settings.tsx:371 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:371 msgid "Redirect URL" msgstr "URL de redirección" -#: packages/ui/primitives/document-flow/add-fields.tsx:1104 +#: packages/lib/server-only/document/resend-document.tsx:165 +msgid "Reminder: {0}" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:118 +msgid "Reminder: {0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:110 +msgid "Reminder: Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:114 +msgid "Reminder: Please {recipientActionVerb} your document" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:1110 msgid "Remove" msgstr "Eliminar" @@ -545,6 +884,14 @@ msgstr "Eliminar" msgid "Required field" msgstr "Campo obligatorio" +#: packages/email/template-components/template-forgot-password.tsx:33 +msgid "Reset Password" +msgstr "" + +#: packages/ui/components/document/document-share-button.tsx:147 +msgid "Rest assured, your document is strictly confidential and will never be shared. Only your signing experience will be highlighted. Share your personalized signing card to showcase your signature!" +msgstr "Ten la seguridad de que tu documento es estrictamente confidencial y nunca será compartido. Solo se destacará tu experiencia de firma. ¡Comparte tu tarjeta de firma personalizada para mostrar tu firma!" + #: packages/ui/primitives/data-table-pagination.tsx:55 msgid "Rows per page" msgstr "Filas por página" @@ -553,7 +900,7 @@ msgstr "Filas por página" msgid "Save" msgstr "Guardar" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:854 msgid "Save Template" msgstr "Guardar plantilla" @@ -595,6 +942,10 @@ msgstr "Compartir tarjeta de firma" msgid "Share the Link" msgstr "Compartir el enlace" +#: packages/ui/components/document/document-share-button.tsx:143 +msgid "Share your signing experience!" +msgstr "¡Comparte tu experiencia de firma!" + #: packages/ui/primitives/document-flow/add-signers.tsx:680 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655 msgid "Show advanced settings" @@ -604,10 +955,15 @@ msgstr "Mostrar configuraciones avanzadas" msgid "Sign" msgstr "Firmar" -#: packages/ui/primitives/document-flow/add-fields.tsx:818 +#: packages/email/template-components/template-reset-password.tsx:34 +msgid "Sign In" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:823 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 +#: packages/ui/primitives/document-flow/types.ts:49 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:586 msgid "Signature" msgstr "Firma" @@ -619,10 +975,27 @@ msgstr "Firmado" msgid "Signer" msgstr "Firmante" +#: packages/lib/constants/recipient-roles.ts:58 +msgid "Signers" +msgstr "Firmantes" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:36 +msgid "Signers must have unique emails" +msgstr "Los firmantes deben tener correos electrónicos únicos" + #: packages/lib/constants/recipient-roles.ts:22 msgid "Signing" msgstr "Firmando" +#: packages/lib/server-only/document/send-completed-email.ts:93 +#: packages/lib/server-only/document/send-completed-email.ts:161 +msgid "Signing Complete!" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:66 +#~ msgid "SIGNING_REQUEST" +#~ msgstr "" + #: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:34 msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding." msgstr "Algunos firmantes no han sido asignados a un campo de firma. Asigne al menos 1 campo de firma a cada firmante antes de continuar." @@ -631,6 +1004,11 @@ msgstr "Algunos firmantes no han sido asignados a un campo de firma. Asigne al m msgid "Something went wrong" msgstr "Algo salió mal" +#: packages/ui/primitives/pdf-viewer.tsx:220 +#: packages/ui/primitives/pdf-viewer.tsx:235 +msgid "Something went wrong while loading the document." +msgstr "Algo salió mal al cargar el documento." + #: packages/ui/primitives/data-table.tsx:136 msgid "Something went wrong." msgstr "Algo salió mal." @@ -640,7 +1018,7 @@ msgid "Step <0>{step} of {maxStep}" msgstr "Paso <0>{step} de {maxStep}" #: packages/ui/primitives/document-flow/add-subject.tsx:78 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:195 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:234 msgid "Subject <0>(Optional)" msgstr "Asunto <0>(Opcional)" @@ -648,15 +1026,32 @@ msgstr "Asunto <0>(Opcional)" msgid "Submit" msgstr "Enviar" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:134 +#: packages/lib/server-only/team/delete-team-email.ts:96 +msgid "Team email has been revoked for {0}" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:53 +msgid "Team email removed" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:27 +msgid "Team email removed for {teamName} on Documenso" +msgstr "" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:133 msgid "Template title" msgstr "Título de plantilla" -#: packages/ui/primitives/document-flow/add-fields.tsx:948 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 +#: packages/ui/primitives/document-flow/add-fields.tsx:953 +#: packages/ui/primitives/document-flow/types.ts:52 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:716 msgid "Text" msgstr "Texto" +#: packages/email/template-components/template-forgot-password.tsx:25 +msgid "That's okay, it happens! Click the button below to reset your password." +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:44 msgid "The authentication required for recipients to sign fields" msgstr "La autenticación requerida para que los destinatarios firmen campos" @@ -673,10 +1068,22 @@ msgstr "La autenticación requerida para que los destinatarios vean el documento msgid "The document's name" msgstr "El nombre del documento" +#: packages/email/templates/team-delete.tsx:35 +msgid "The following team has been deleted by its owner. You will no longer be able to access this team and its documents" +msgstr "" + +#: packages/email/templates/team-delete.tsx:34 +msgid "The following team has been deleted by you" +msgstr "" + #: packages/ui/primitives/document-password-dialog.tsx:52 msgid "The password you have entered is incorrect. Please try again." msgstr "La contraseña que ha ingresado es incorrecta. Por favor, inténtelo de nuevo." +#: packages/email/template-components/template-document-super-delete.tsx:38 +msgid "The reason provided for deletion is the following:" +msgstr "" + #: packages/ui/components/recipient/recipient-role-select.tsx:103 msgid "The recipient is not required to take any action and receives a copy of the document after it is completed." msgstr "El destinatario no está obligado a tomar ninguna acción y recibe una copia del documento una vez completado." @@ -709,11 +1116,19 @@ msgstr "El correo electrónico del firmante" msgid "The signer's name" msgstr "El nombre del firmante" +#: packages/email/templates/team-email-removed.tsx:57 +msgid "The team email <0>{teamEmail} has been removed from the following team" +msgstr "" + #: packages/ui/components/document/document-global-auth-action-select.tsx:72 msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step." msgstr "Esto se puede anular configurando los requisitos de autenticación directamente en cada destinatario en el siguiente paso." -#: packages/ui/primitives/document-flow/add-fields.tsx:752 +#: packages/email/template-components/template-document-super-delete.tsx:31 +msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support." +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:757 msgid "This document has already been sent to this recipient. You can no longer edit this recipient." msgstr "Este documento ya ha sido enviado a este destinatario. Ya no puede editar a este destinatario." @@ -721,18 +1136,18 @@ msgstr "Este documento ya ha sido enviado a este destinatario. Ya no puede edita msgid "This document is password protected. Please enter the password to view the document." msgstr "Este documento está protegido por contraseña. Por favor ingrese la contraseña para ver el documento." +#: packages/email/template-components/template-footer.tsx:14 +msgid "This document was sent using <0>Documenso." +msgstr "" + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:573 msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." msgstr "Este campo no se puede modificar ni eliminar. Cuando comparta el enlace directo de esta plantilla o lo agregue a su perfil público, cualquiera que acceda podrá ingresar su nombre y correo electrónico, y completar los campos que se le hayan asignado." -#: packages/ui/primitives/document-flow/add-fields.tsx:1084 +#: packages/ui/primitives/document-flow/add-fields.tsx:1090 msgid "This recipient can no longer be modified as they have signed a field, or completed the document." msgstr "Este destinatario ya no puede ser modificado ya que ha firmado un campo o completado el documento." -#: packages/ui/primitives/document-flow/add-signers.tsx:165 -#~ msgid "This signer has already received the document." -#~ msgstr "This signer has already received the document." - #: packages/ui/primitives/document-flow/add-signers.tsx:194 msgid "This signer has already signed the document." msgstr "Este firmante ya ha firmado el documento." @@ -741,17 +1156,17 @@ msgstr "Este firmante ya ha firmado el documento." msgid "This will override any global settings." msgstr "Esto anulará cualquier configuración global." -#: packages/ui/primitives/document-flow/add-settings.tsx:305 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:309 +#: packages/ui/primitives/document-flow/add-settings.tsx:347 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:348 msgid "Time Zone" msgstr "Zona horaria" -#: packages/ui/primitives/document-flow/add-settings.tsx:153 +#: packages/ui/primitives/document-flow/add-settings.tsx:155 msgid "Title" msgstr "Título" -#: packages/ui/primitives/document-flow/add-fields.tsx:1067 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 +#: packages/ui/primitives/document-flow/add-fields.tsx:1073 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:834 msgid "To proceed further, please set at least one value for the {0} field." msgstr "Para continuar, por favor establezca al menos un valor para el campo {0}." @@ -785,6 +1200,18 @@ msgstr "Valor" msgid "View" msgstr "Ver" +#: packages/email/templates/document-created-from-direct-template.tsx:69 +msgid "View document" +msgstr "" + +#: packages/email/template-components/template-document-self-signed.tsx:79 +msgid "View plans" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:67 +#~ msgid "VIEW_REQUEST" +#~ msgstr "" + #: packages/lib/constants/recipient-roles.ts:27 msgid "Viewed" msgstr "Visto" @@ -793,18 +1220,42 @@ msgstr "Visto" msgid "Viewer" msgstr "Visor" +#: packages/lib/constants/recipient-roles.ts:65 +msgid "Viewers" +msgstr "Espectadores" + #: packages/lib/constants/recipient-roles.ts:28 msgid "Viewing" msgstr "Viendo" -#: packages/ui/primitives/signature-pad/signature-pad.tsx:280 -#~ msgid "White" -#~ msgstr "White" +#: packages/email/template-components/template-document-pending.tsx:31 +msgid "Waiting for others" +msgstr "" + +#: packages/lib/server-only/document/send-pending-email.ts:73 +msgid "Waiting for others to complete signing." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:41 +msgid "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." +msgstr "" + +#: packages/email/templates/reset-password.tsx:59 +msgid "We've changed your password as you asked. You can now sign in with your new password." +msgstr "" + +#: packages/email/template-components/template-confirmation-email.tsx:24 +msgid "Welcome to Documenso!" +msgstr "" #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44 msgid "You are about to send this document to the recipients. Are you sure you want to continue?" msgstr "Está a punto de enviar este documento a los destinatarios. ¿Está seguro de que desea continuar?" +#: packages/email/template-components/template-confirmation-email.tsx:41 +msgid "You can also copy and paste this link into your browser: {confirmationLink} (link expires in 1 hour)" +msgstr "" + #: packages/ui/components/document/document-send-email-message-helper.tsx:11 msgid "You can use the following variables in your message:" msgstr "Puede usar las siguientes variables en su mensaje:" @@ -813,7 +1264,48 @@ msgstr "Puede usar las siguientes variables en su mensaje:" msgid "You cannot upload documents at this time." msgstr "No puede cargar documentos en este momento." +#: packages/email/template-components/template-document-cancel.tsx:35 +msgid "You don't need to sign it anymore." +msgstr "" + +#: packages/lib/server-only/team/create-team-member-invites.ts:168 +msgid "You have been invited to join {0} on Documenso" +msgstr "" + +#: packages/email/templates/team-invite.tsx:59 +msgid "You have been invited to join the following team" +msgstr "" + +#: packages/lib/server-only/recipient/set-recipients-for-document.ts:314 +msgid "You have been removed from a document" +msgstr "" + +#: packages/lib/server-only/team/request-team-ownership-transfer.ts:114 +msgid "You have been requested to take ownership of team {0} on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:102 +#: packages/lib/server-only/document/resend-document.tsx:113 +msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it." +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "You have reached your document limit." msgstr "Ha alcanzado su límite de documentos." +#: packages/email/template-components/template-document-self-signed.tsx:42 +msgid "You have signed “{documentName}”" +msgstr "" + +#: packages/email/template-components/template-document-super-delete.tsx:23 +msgid "Your document has been deleted by an admin!" +msgstr "" + +#: packages/email/template-components/template-reset-password.tsx:26 +msgid "Your password has been updated." +msgstr "" + +#: packages/email/templates/team-delete.tsx:26 +#: packages/email/templates/team-delete.tsx:30 +msgid "Your team has been deleted" +msgstr "" diff --git a/packages/lib/translations/es/marketing.po b/packages/lib/translations/es/marketing.po index ee41b740a..41bce34a4 100644 --- a/packages/lib/translations/es/marketing.po +++ b/packages/lib/translations/es/marketing.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-22 02:25\n" +"PO-Revision-Date: 2024-11-01 02:29\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -42,7 +42,7 @@ msgstr "Agregar documento" msgid "Add More Users for {0}" msgstr "Agregar más usuarios por {0}" -#: apps/marketing/src/app/(marketing)/open/page.tsx:165 +#: apps/marketing/src/app/(marketing)/open/page.tsx:164 msgid "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics" msgstr "Todos nuestros métricas, finanzas y aprendizajes son públicos. Creemos en la transparencia y queremos compartir nuestro viaje contigo. Puedes leer más sobre por qué aquí: <0>Anunciando Métricas Abiertas" @@ -90,7 +90,7 @@ msgstr "Registro de cambios" msgid "Choose a template from the community app store. Or submit your own template for others to use." msgstr "Elige una plantilla de la tienda de aplicaciones de la comunidad. O envía tu propia plantilla para que otros la usen." -#: apps/marketing/src/app/(marketing)/open/page.tsx:219 +#: apps/marketing/src/app/(marketing)/open/page.tsx:218 msgid "Community" msgstr "Comunidad" @@ -160,10 +160,6 @@ msgstr "Documentación" msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application." msgstr "Incrusta fácilmente Documenso en tu producto. Simplemente copia y pega nuestro widget de react en tu aplicación." -#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42 -#~ msgid "Easy Sharing (Soon)." -#~ msgstr "Easy Sharing (Soon)." - #: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46 msgid "Easy Sharing." msgstr "Compartición fácil." @@ -197,7 +193,7 @@ msgstr "Rápido." msgid "Faster, smarter and more beautiful." msgstr "Más rápido, más inteligente y más hermoso." -#: apps/marketing/src/app/(marketing)/open/page.tsx:210 +#: apps/marketing/src/app/(marketing)/open/page.tsx:209 msgid "Finances" msgstr "Finanzas" @@ -250,15 +246,15 @@ msgstr "Comienza hoy." msgid "Get the latest news from Documenso, including product updates, team announcements and more!" msgstr "¡Obtén las últimas noticias de Documenso, incluidas actualizaciones de productos, anuncios del equipo y más!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:233 +#: apps/marketing/src/app/(marketing)/open/page.tsx:232 msgid "GitHub: Total Merged PRs" msgstr "GitHub: Total de PRs fusionados" -#: apps/marketing/src/app/(marketing)/open/page.tsx:251 +#: apps/marketing/src/app/(marketing)/open/page.tsx:250 msgid "GitHub: Total Open Issues" msgstr "GitHub: Total de problemas abiertos" -#: apps/marketing/src/app/(marketing)/open/page.tsx:225 +#: apps/marketing/src/app/(marketing)/open/page.tsx:224 msgid "GitHub: Total Stars" msgstr "GitHub: Total de estrellas" @@ -266,7 +262,7 @@ msgstr "GitHub: Total de estrellas" msgid "Global Salary Bands" msgstr "Bandas salariales globales" -#: apps/marketing/src/app/(marketing)/open/page.tsx:261 +#: apps/marketing/src/app/(marketing)/open/page.tsx:260 msgid "Growth" msgstr "Crecimiento" @@ -290,7 +286,7 @@ msgstr "Pagos integrados con Stripe para que no tengas que preocuparte por cobra msgid "Integrates with all your favourite tools." msgstr "Se integra con todas tus herramientas favoritas." -#: apps/marketing/src/app/(marketing)/open/page.tsx:289 +#: apps/marketing/src/app/(marketing)/open/page.tsx:288 msgid "Is there more?" msgstr "¿Hay más?" @@ -314,11 +310,11 @@ msgstr "Ubicación" msgid "Make it your own through advanced customization and adjustability." msgstr "Hazlo tuyo a través de personalización y ajustabilidad avanzadas." -#: apps/marketing/src/app/(marketing)/open/page.tsx:199 +#: apps/marketing/src/app/(marketing)/open/page.tsx:198 msgid "Merged PR's" msgstr "PRs fusionados" -#: apps/marketing/src/app/(marketing)/open/page.tsx:234 +#: apps/marketing/src/app/(marketing)/open/page.tsx:233 msgid "Merged PRs" msgstr "PRs fusionados" @@ -349,8 +345,8 @@ msgstr "No se requiere tarjeta de crédito" msgid "None of these work for you? Try self-hosting!" msgstr "¿Ninguna de estas opciones funciona para ti? ¡Prueba el autoalojamiento!" -#: apps/marketing/src/app/(marketing)/open/page.tsx:194 -#: apps/marketing/src/app/(marketing)/open/page.tsx:252 +#: apps/marketing/src/app/(marketing)/open/page.tsx:193 +#: apps/marketing/src/app/(marketing)/open/page.tsx:251 msgid "Open Issues" msgstr "Problemas Abiertos" @@ -358,7 +354,7 @@ msgstr "Problemas Abiertos" msgid "Open Source or Hosted." msgstr "Código Abierto o Alojado." -#: apps/marketing/src/app/(marketing)/open/page.tsx:161 +#: apps/marketing/src/app/(marketing)/open/page.tsx:160 #: apps/marketing/src/components/(marketing)/footer.tsx:37 #: apps/marketing/src/components/(marketing)/header.tsx:64 #: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:40 @@ -377,18 +373,10 @@ msgstr "Nuestras plantillas personalizadas vienen con reglas inteligentes que pu msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features." msgstr "Nuestra Licencia Empresarial es excelente para grandes organizaciones que buscan cambiar a Documenso para todas sus necesidades de firma. Está disponible para nuestra oferta en la nube, así como para configuraciones autoalojadas y ofrece una amplia gama de funciones de cumplimiento y administración." -#: apps/marketing/src/components/(marketing)/enterprise.tsx:20 -#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." -#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:65 msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership." msgstr "Nuestra opción de autoalojamiento es excelente para pequeños equipos e individuos que necesitan una solución simple. Puedes usar nuestra configuración basada en docker para empezar en minutos. Toma el control con total personalización y propiedad de los datos." -#: apps/marketing/src/app/(marketing)/open/data.ts:25 -#~ msgid "Part-Time" -#~ msgstr "Part-Time" - #: apps/marketing/src/components/(marketing)/pricing-table.tsx:151 msgid "Premium Profile Name" msgstr "Nombre de Perfil Premium" @@ -430,10 +418,6 @@ msgstr "Salario" msgid "Save $60 or $120" msgstr "Ahorra $60 o $120" -#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47 -#~ msgid "Search languages..." -#~ msgstr "Search languages..." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:109 msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us." msgstr "De manera segura. Nuestros centros de datos están ubicados en Frankfurt (Alemania), dándonos las mejores leyes de privacidad locales. Somos muy conscientes de la naturaleza sensible de nuestros datos y seguimos las mejores prácticas para garantizar la seguridad y la integridad de los datos que se nos confían." @@ -482,7 +466,7 @@ msgstr "Inteligente." msgid "Star on GitHub" msgstr "Estrella en GitHub" -#: apps/marketing/src/app/(marketing)/open/page.tsx:226 +#: apps/marketing/src/app/(marketing)/open/page.tsx:225 msgid "Stars" msgstr "Estrellas" @@ -517,7 +501,7 @@ msgstr "Tienda de Plantillas (Pronto)." msgid "That's awesome. You can take a look at the current <0>Issues and join our <1>Discord Community to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️" msgstr "Eso es increíble. Puedes echar un vistazo a los <0>Problemas actuales y unirte a nuestra <1>Comunidad de Discord para mantenerte al día sobre cuáles son las prioridades actuales. En cualquier caso, somos una comunidad abierta y agradecemos todas las aportaciones, técnicas y no técnicas ❤️" -#: apps/marketing/src/app/(marketing)/open/page.tsx:293 +#: apps/marketing/src/app/(marketing)/open/page.tsx:292 msgid "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share." msgstr "Esta página está evolucionando a medida que aprendemos lo que hace una gran empresa de firmas. La actualizaremos cuando tengamos más para compartir." @@ -530,8 +514,8 @@ msgstr "Título" msgid "Total Completed Documents" msgstr "Total de Documentos Completados" +#: apps/marketing/src/app/(marketing)/open/page.tsx:266 #: apps/marketing/src/app/(marketing)/open/page.tsx:267 -#: apps/marketing/src/app/(marketing)/open/page.tsx:268 msgid "Total Customers" msgstr "Total de Clientes" @@ -618,4 +602,3 @@ msgstr "Puedes autoalojar Documenso de forma gratuita o usar nuestra versión al #: apps/marketing/src/components/(marketing)/carousel.tsx:272 msgid "Your browser does not support the video tag." msgstr "Tu navegador no soporta la etiqueta de video." - diff --git a/packages/lib/translations/es/web.po b/packages/lib/translations/es/web.po index 71b17a696..9049f6ed5 100644 --- a/packages/lib/translations/es/web.po +++ b/packages/lib/translations/es/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-22 02:26\n" +"PO-Revision-Date: 2024-11-01 04:00\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -117,6 +117,18 @@ msgstr "<0>\"{0}\" ya no está disponible para firmar" msgid "<0>Sender: All" msgstr "<0>Remitente: Todos" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:5 +msgid "1 month" +msgstr "1 mes" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:8 +msgid "12 months" +msgstr "12 meses" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:6 +msgid "3 months" +msgstr "3 meses" + #: apps/web/src/components/partials/not-found.tsx:45 msgid "404 Page not found" msgstr "404 Página no encontrada" @@ -133,14 +145,30 @@ msgstr "404 Equipo no encontrado" msgid "404 Template not found" msgstr "404 Plantilla no encontrada" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:7 +msgid "6 months" +msgstr "6 meses" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:4 +msgid "7 days" +msgstr "7 días" + #: apps/web/src/components/forms/send-confirmation-email.tsx:55 msgid "A confirmation email has been sent, and it should arrive in your inbox shortly." msgstr "Se ha enviado un correo electrónico de confirmación y debería llegar a tu bandeja de entrada en breve." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:70 +msgid "A device capable of accessing, opening, and reading documents" +msgstr "Un dispositivo capaz de acceder, abrir y leer documentos" + +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201 msgid "A draft document will be created" msgstr "Se creará un documento borrador" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:73 +msgid "A means to print or download documents for your records" +msgstr "Un medio para imprimir o descargar documentos para sus registros" + #: apps/web/src/components/forms/token.tsx:127 msgid "A new token was created successfully." msgstr "Un nuevo token se ha creado con éxito." @@ -163,6 +191,10 @@ msgstr "Un secreto que se enviará a tu URL para que puedas verificar que la sol msgid "A secret that will be sent to your URL so you can verify that the request has been sent by Documenso." msgstr "Un secreto que se enviará a tu URL para que puedas verificar que la solicitud ha sido enviada por Documenso." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:64 +msgid "A stable internet connection" +msgstr "Una conexión a Internet estable" + #: apps/web/src/components/forms/public-profile-form.tsx:198 msgid "A unique URL to access your profile" msgstr "Una URL única para acceder a tu perfil" @@ -180,6 +212,10 @@ msgstr "Se enviará un correo electrónico de verificación a la dirección prop msgid "Accept" msgstr "Aceptar" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:33 +msgid "Acceptance and Consent" +msgstr "Aceptación y Consentimiento" + #: apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx:26 msgid "Accepted team invitation" msgstr "Invitación de equipo aceptada" @@ -189,6 +225,10 @@ msgstr "Invitación de equipo aceptada" msgid "Account deleted" msgstr "Cuenta eliminada" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:139 +msgid "Acknowledgment" +msgstr "Reconocimiento" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:105 #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx:104 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:121 @@ -220,12 +260,12 @@ msgstr "Suscripciones Activas" msgid "Add" msgstr "Agregar" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:176 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:88 msgid "Add all relevant fields for each recipient." msgstr "Agrega todos los campos relevantes para cada destinatario." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:83 msgid "Add all relevant placeholders for each recipient." msgstr "Agrega todos los marcadores de posición relevantes para cada destinatario." @@ -241,8 +281,8 @@ msgstr "Agrega un autenticador para servir como método de autenticación secund msgid "Add email" msgstr "Agregar correo electrónico" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 msgid "Add Fields" msgstr "Agregar Campos" @@ -250,24 +290,20 @@ msgstr "Agregar Campos" msgid "Add more" msgstr "Agregar más" -#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270 -#~ msgid "Add number" -#~ msgstr "Add number" - #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154 msgid "Add passkey" msgstr "Agregar clave" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:81 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 msgid "Add Placeholders" msgstr "Agregar Marcadores de posición" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 msgid "Add Signers" msgstr "Agregar Firmantes" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 msgid "Add Subject" msgstr "Agregar Asunto" @@ -275,23 +311,15 @@ msgstr "Agregar Asunto" msgid "Add team email" msgstr "Agregar correo electrónico del equipo" -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256 -#~ msgid "Add text" -#~ msgstr "Add text" - -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272 -#~ msgid "Add Text" -#~ msgstr "Add Text" - -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:171 msgid "Add the people who will sign the document." msgstr "Agrega a las personas que firmarán el documento." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203 msgid "Add the recipients to create the document with" msgstr "Agrega los destinatarios con los que crear el documento" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:181 msgid "Add the subject and message you wish to send to signers." msgstr "Agrega el asunto y el mensaje que deseas enviar a los firmantes." @@ -307,6 +335,10 @@ msgstr "Acciones Administrativas" msgid "Admin panel" msgstr "Panel administrativo" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:129 +msgid "After signing a document electronically, you will be provided the opportunity to view, download, and print the document for your records. It is highly recommended that you retain a copy of all electronically signed documents for your personal records. We will also retain a copy of the signed document for our records however we may not be able to provide you with a copy of the signed document after a certain period of time." +msgstr "Después de firmar un documento electrónicamente, se le dará la oportunidad de ver, descargar e imprimir el documento para sus registros. Se recomienda encarecidamente que conserve una copia de todos los documentos firmados electrónicamente para sus registros personales. También mantendremos una copia del documento firmado para nuestros registros, sin embargo, es posible que no podamos proporcionarle una copia del documento firmado después de un cierto período de tiempo." + #: apps/web/src/components/formatter/document-status.tsx:46 msgid "All" msgstr "Todos" @@ -319,6 +351,10 @@ msgstr "Todos los documentos" msgid "All documents have been processed. Any new documents that are sent or received will show here." msgstr "Todos los documentos han sido procesados. Cualquier nuevo documento que se envíe o reciba aparecerá aquí." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:81 +msgid "All documents related to the electronic signing process will be provided to you electronically through our platform or via email. It is your responsibility to ensure that your email address is current and that you can receive and open our emails." +msgstr "Todos los documentos relacionados con el proceso de firma electrónica se le proporcionarán electrónicamente a través de nuestra plataforma o por correo electrónico. Es su responsabilidad asegurarse de que su dirección de correo electrónico esté actualizada y que pueda recibir y abrir nuestros correos electrónicos." + #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:145 msgid "All inserted signatures will be voided" msgstr "Todas las firmas insertadas serán anuladas" @@ -347,6 +383,14 @@ msgstr "¿Ya tienes una cuenta? <0>Iniciar sesión en su lugar" msgid "Amount" msgstr "Cantidad" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:48 +msgid "An electronic signature provided by you on our platform, achieved through clicking through to a document and entering your name, or any other electronic signing method we provide, is legally binding. It carries the same weight and enforceability as a manual signature written with ink on paper." +msgstr "Una firma electrónica proporcionada por usted en nuestra plataforma, lograda mediante el clic en un documento e ingresando su nombre, o cualquier otro método de firma electrónica que proporcionemos, es legalmente vinculante. Tiene el mismo peso y exigibilidad que una firma manual escrita con tinta en papel." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:67 +msgid "An email account" +msgstr "Una cuenta de correo electrónico" + #: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:262 msgid "An email containing an invitation will be sent to each member." msgstr "Un correo electrónico que contiene una invitación se enviará a cada miembro." @@ -370,17 +414,17 @@ msgstr "Se ha enviado un correo electrónico solicitando la transferencia de est msgid "An error occurred" msgstr "Ocurrió un error" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:268 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:201 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:235 msgid "An error occurred while adding signers." msgstr "Ocurrió un error al agregar firmantes." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:303 msgid "An error occurred while adding the fields." msgstr "Ocurrió un error al agregar los campos." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161 msgid "An error occurred while creating document from template." msgstr "Ocurrió un error al crear el documento a partir de la plantilla." @@ -419,6 +463,10 @@ msgstr "Ocurrió un error al mover el documento." msgid "An error occurred while moving the template." msgstr "Ocurrió un error al mover la plantilla." +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:116 +msgid "An error occurred while removing the field." +msgstr "Ocurrió un error mientras se eliminaba el campo." + #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:152 #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:126 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:137 @@ -434,7 +482,7 @@ msgstr "Ocurrió un error al eliminar la firma." msgid "An error occurred while removing the text." msgstr "Ocurrió un error al eliminar el texto." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:334 msgid "An error occurred while sending the document." msgstr "Ocurrió un error al enviar el documento." @@ -446,6 +494,7 @@ msgstr "Ocurrió un error al enviar tu correo electrónico de confirmación" #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:100 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:106 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:84 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:90 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150 #: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102 @@ -458,8 +507,8 @@ msgstr "Ocurrió un error al firmar el documento." msgid "An error occurred while trying to create a checkout session." msgstr "Ocurrió un error al intentar crear una sesión de pago." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:234 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:170 msgid "An error occurred while updating the document settings." msgstr "Ocurrió un error al actualizar la configuración del documento." @@ -543,6 +592,10 @@ msgstr "Versión de la Aplicación" msgid "Approve" msgstr "Aprobar" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:129 +msgid "Approve Document" +msgstr "Aprobar Documento" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:78 msgid "Approved" msgstr "Aprobado" @@ -561,7 +614,7 @@ msgstr "¿Estás seguro de que deseas eliminar este equipo?" #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98 #: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455 #: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116 @@ -600,7 +653,7 @@ msgstr "Esperando confirmación de correo electrónico" msgid "Back" msgstr "Atrás" -#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:109 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:164 msgid "Back to Documents" msgstr "Volver a Documentos" @@ -650,9 +703,22 @@ msgstr "Al eliminar este documento, ocurrirá lo siguiente:" msgid "By enabling 2FA, you will be required to enter a code from your authenticator app every time you sign in." msgstr "Al habilitar la 2FA, se requerirá ingresar un código de su aplicación de autenticación cada vez que inicie sesión." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:142 +msgid "By proceeding to use the electronic signature service provided by Documenso, you affirm that you have read and understood this disclosure. You agree to all terms and conditions related to the use of electronic signatures and electronic transactions as outlined herein." +msgstr "Al continuar utilizando el servicio de firma electrónica proporcionado por Documenso, usted afirma que ha leído y entendido esta divulgación. Acepta todos los términos y condiciones relacionados con el uso de firmas electrónicas y transacciones electrónicas según lo detallado aquí." + +#: apps/web/src/components/general/signing-disclosure.tsx:14 +msgid "By proceeding with your electronic signature, you acknowledge and consent that it will be used to sign the given document and holds the same legal validity as a handwritten signature. By completing the electronic signing process, you affirm your understanding and acceptance of these conditions." +msgstr "Al continuar con su firma electrónica, usted reconoce y consiente que se utilizará para firmar el documento dado y tiene la misma validez legal que una firma manuscrita. Al completar el proceso de firma electrónica, usted afirma su comprensión y aceptación de estas condiciones." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:92 +msgid "By using the electronic signature feature, you are consenting to conduct transactions and receive disclosures electronically. You acknowledge that your electronic signature on documents is binding and that you accept the terms outlined in the documents you are signing." +msgstr "Al utilizar la función de firma electrónica, usted está consintiendo realizar transacciones y recibir divulgaciones electrónicamente. Reconoce que su firma electrónica en los documentos es vinculante y que acepta los términos esbozados en los documentos que está firmando." + #: apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx:186 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:190 #: apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx:108 +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:120 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:248 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:157 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:198 @@ -660,12 +726,13 @@ msgstr "Al habilitar la 2FA, se requerirá ingresar un código de su aplicación #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:151 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327 #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113 @@ -753,13 +820,13 @@ msgstr "Haga clic para copiar el enlace de firma para enviar al destinatario" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:115 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:440 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:319 msgid "Click to insert field" msgstr "Haga clic para insertar campo" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121 @@ -771,8 +838,8 @@ msgid "Close" msgstr "Cerrar" #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:430 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:309 #: apps/web/src/components/forms/v2/signup.tsx:534 msgid "Complete" msgstr "Completo" @@ -802,11 +869,11 @@ msgstr "Documentos completados" msgid "Completed Documents" msgstr "Documentos Completados" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:166 msgid "Configure general settings for the document." msgstr "Configurar ajustes generales para el documento." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:78 msgid "Configure general settings for the template." msgstr "Configurar ajustes generales para la plantilla." @@ -814,7 +881,7 @@ msgstr "Configurar ajustes generales para la plantilla." msgid "Configure template" msgstr "Configurar plantilla" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:460 msgid "Confirm" msgstr "Confirmar" @@ -844,6 +911,14 @@ msgstr "Confirmar correo electrónico" msgid "Confirmation email sent" msgstr "Correo electrónico de confirmación enviado" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:89 +msgid "Consent to Electronic Transactions" +msgstr "Consentimiento para Transacciones Electrónicas" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:151 +msgid "Contact Information" +msgstr "Información de Contacto" + #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:189 msgid "Content" msgstr "Contenido" @@ -900,11 +975,11 @@ msgstr "Crea un equipo para colaborar con los miembros de tu equipo." msgid "Create account" msgstr "Crear cuenta" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345 msgid "Create and send" msgstr "Crear y enviar" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347 msgid "Create as draft" msgstr "Crear como borrador" @@ -916,7 +991,7 @@ msgstr "Crear enlace directo" msgid "Create Direct Signing Link" msgstr "Crear enlace de firma directo" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197 msgid "Create document from template" msgstr "Crear documento a partir de la plantilla" @@ -984,19 +1059,11 @@ msgstr "Creado el" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:67 #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:88 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:93 msgid "Created on {0}" msgstr "Creado el {0}" -#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94 -#~ msgid "Created on <0/>" -#~ msgstr "Created on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 -msgid "Created on{0}" -msgstr "Creado el{0}" - #: apps/web/src/components/forms/password.tsx:107 msgid "Current Password" msgstr "Contraseña actual" @@ -1030,6 +1097,10 @@ msgstr "Rechazar" msgid "Declined team invitation" msgstr "Invitación de equipo rechazada" +#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:90 +msgid "delete" +msgstr "eliminar" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:141 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:187 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:200 @@ -1039,7 +1110,7 @@ msgstr "Invitación de equipo rechazada" #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:100 #: apps/web/src/app/(dashboard)/templates/data-table-action-dropdown.tsx:91 #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:90 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:122 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:116 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:105 #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:121 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:109 @@ -1048,6 +1119,15 @@ msgstr "Invitación de equipo rechazada" msgid "Delete" msgstr "Eliminar" +#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:56 +#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:54 +msgid "delete {0}" +msgstr "eliminar {0}" + +#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:50 +msgid "delete {teamName}" +msgstr "eliminar {teamName}" + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:137 msgid "Delete account" msgstr "Eliminar cuenta" @@ -1107,10 +1187,6 @@ msgstr "Eliminado" msgid "Deleting account..." msgstr "Eliminando cuenta..." -#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135 -#~ msgid "Deleting document" -#~ msgstr "Deleting document" - #: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75 msgid "Device" msgstr "Dispositivo" @@ -1215,7 +1291,7 @@ msgstr "Documento completado" msgid "Document Completed!" msgstr "¡Documento completado!" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150 msgid "Document created" msgstr "Documento creado" @@ -1246,7 +1322,7 @@ msgstr "ID del documento" msgid "Document inbox" msgstr "Bandeja de documentos" -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179 msgid "Document Limit Exceeded!" msgstr "¡Límite de documentos excedido!" @@ -1274,7 +1350,7 @@ msgstr "Documento reenviado" msgid "Document resealed" msgstr "Documento sellado nuevamente" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:323 msgid "Document sent" msgstr "Documento enviado" @@ -1369,10 +1445,6 @@ msgstr "Documentos en borrador" msgid "Drafted Documents" msgstr "Documentos redactados" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:245 -#~ msgid "Draw" -#~ msgstr "Draw" - #: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:121 msgid "Due to an unpaid invoice, your team has been restricted. Please settle the payment to restore full access to your team." msgstr "Debido a una factura impaga, tu equipo ha sido restringido. Realiza el pago para restaurar el acceso completo a tu equipo." @@ -1403,15 +1475,23 @@ msgstr "Editar" msgid "Edit webhook" msgstr "Editar webhook" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:78 +msgid "Electronic Delivery of Documents" +msgstr "Entrega Electrónica de Documentos" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:17 +msgid "Electronic Signature Disclosure" +msgstr "Divulgación de Firma Electrónica" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255 #: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:377 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:257 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169 #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153 #: apps/web/src/components/forms/forgot-password.tsx:81 @@ -1431,6 +1511,10 @@ msgstr "Dirección de correo electrónico" msgid "Email Address" msgstr "Dirección de correo electrónico" +#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:80 +msgid "Email cannot already exist in the template" +msgstr "El correo electrónico no puede existir ya en la plantilla" + #: apps/web/src/app/(unauthenticated)/verify-email/[token]/client.tsx:36 msgid "Email Confirmed!" msgstr "¡Correo electrónico confirmado!" @@ -1495,19 +1579,19 @@ msgstr "Ingresa tu texto aquí" #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:233 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:267 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:302 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:333 #: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:165 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:196 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:169 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:200 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:234 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212 @@ -1517,6 +1601,8 @@ msgstr "Ingresa tu texto aquí" #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:136 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:109 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:89 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:115 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:121 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:147 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:149 @@ -1548,24 +1634,11 @@ msgstr "Tiempo de espera excedido" msgid "Expired" msgstr "Expirado" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106 -#~ msgid "Expires on" -#~ msgstr "Expires on" - #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:104 msgid "Expires on {0}" msgstr "Expira el {0}" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 -#~ msgid "Expires on <0/>" -#~ msgstr "Expires on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107 -msgid "Expires on{0}" -msgstr "Expira el{0}" - #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:42 msgid "Failed to reseal document" msgstr "Falló al volver a sellar el documento" @@ -1587,22 +1660,27 @@ msgstr "Campos" msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" msgstr "El archivo no puede ser mayor a {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:154 +msgid "For any questions regarding this disclosure, electronic signatures, or any related process, please contact us at: <0>{SUPPORT_EMAIL}" +msgstr "Si tiene alguna pregunta sobre esta divulgación, firmas electrónicas o cualquier proceso relacionado, comuníquese con nosotros en: <0>{SUPPORT_EMAIL}" + #: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21 #: apps/web/src/components/forms/signin.tsx:370 msgid "Forgot your password?" msgstr "¿Olvidaste tu contraseña?" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:362 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:242 #: apps/web/src/components/forms/profile.tsx:110 #: apps/web/src/components/forms/v2/signup.tsx:312 msgid "Full Name" msgstr "Nombre completo" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 #: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60 #: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43 #: apps/web/src/components/(teams)/settings/layout/mobile-nav.tsx:51 @@ -1663,10 +1741,6 @@ msgstr "Ocultar" msgid "Hide additional information" msgstr "Ocultar información adicional" -#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40 -#~ msgid "I am the owner of this document" -#~ msgstr "I am the owner of this document" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173 msgid "I'm sure! Delete it" @@ -1700,6 +1774,10 @@ msgstr "Documentos en bandeja de entrada" msgid "Information" msgstr "Información" +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:132 +msgid "Initials" +msgstr "Iniciales" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:78 msgid "Inserted" msgstr "Insertado" @@ -1766,6 +1844,10 @@ msgstr "Invitado el" msgid "Invoice" msgstr "Factura" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:118 +msgid "It is crucial to keep your contact information, especially your email address, up to date with us. Please notify us immediately of any changes to ensure that you continue to receive all necessary communications." +msgstr "Es crucial mantener su información de contacto, especialmente su dirección de correo electrónico, actual con nosotros. Por favor, notifíquenos inmediatamente sobre cualquier cambio para asegurarse de seguir recibiendo todas las comunicaciones necesarias." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:134 msgid "It looks like {0} hasn't added any documents to their profile yet." msgstr "Parece que {0} aún no ha agregado documentos a su perfil." @@ -1827,6 +1909,10 @@ msgstr "Salir" msgid "Leave team" msgstr "Salir del equipo" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:45 +msgid "Legality of Electronic Signatures" +msgstr "Legalidad de las Firmas Electrónicas" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:264 msgid "Light Mode" msgstr "Modo claro" @@ -1980,6 +2066,7 @@ msgstr "Usuarios activos mensuales: Usuarios que crearon al menos un documento" msgid "Monthly Active Users: Users that had at least one of their documents completed" msgstr "Usuarios activos mensuales: Usuarios que completaron al menos uno de sus documentos" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Move" msgstr "Mover" @@ -1997,6 +2084,7 @@ msgstr "Mover plantilla al equipo" msgid "Move to Team" msgstr "Mover al equipo" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Moving..." msgstr "Moviendo..." @@ -2010,8 +2098,8 @@ msgstr "Mis plantillas" #: 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.tsx:61 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277 #: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153 @@ -2041,8 +2129,8 @@ msgstr "Nuevo propietario del equipo" msgid "New Template" msgstr "Nueva plantilla" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:421 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:300 #: apps/web/src/components/forms/v2/signup.tsx:521 msgid "Next" msgstr "Siguiente" @@ -2162,12 +2250,14 @@ msgstr "O" msgid "Or continue with" msgstr "O continúa con" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324 msgid "Otherwise, the document will be created as a draft." msgstr "De lo contrario, el documento se creará como un borrador." #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:86 #: apps/web/src/components/(dashboard)/layout/menu-switcher.tsx:81 +#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:86 +#: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:109 msgid "Owner" msgstr "Propietario" @@ -2302,7 +2392,7 @@ msgstr "Por favor, ingresa un nombre significativo para tu token. Esto te ayudar msgid "Please mark as viewed to complete" msgstr "Por favor, marca como visto para completar" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459 msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder." msgstr "Por favor, ten en cuenta que proceder eliminará el destinatario de enlace directo y lo convertirá en un marcador de posición." @@ -2338,6 +2428,10 @@ msgstr "Por favor, proporciona un token del autenticador o un código de respald msgid "Please provide a token from your authenticator, or a backup code." msgstr "Por favor, proporciona un token de tu autenticador, o un código de respaldo." +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:169 +msgid "Please review the document before signing." +msgstr "Por favor, revise el documento antes de firmar." + #: apps/web/src/components/forms/send-confirmation-email.tsx:64 msgid "Please try again and make sure you enter the correct email address." msgstr "Por favor, intenta de nuevo y asegúrate de ingresar la dirección de correo electrónico correcta." @@ -2420,6 +2514,10 @@ msgstr "Las plantillas públicas están conectadas a tu perfil público. Cualqui msgid "Read only field" msgstr "Campo de solo lectura" +#: apps/web/src/components/general/signing-disclosure.tsx:21 +msgid "Read the full <0>signature disclosure." +msgstr "Lea la <0>divulgación de firma completa." + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:90 msgid "Ready" msgstr "Listo" @@ -2547,6 +2645,10 @@ msgstr "Resolver" msgid "Resolve payment" msgstr "Resolver pago" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:126 +msgid "Retention of Documents" +msgstr "Retención de Documentos" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:168 msgid "Retry" msgstr "Reintentar" @@ -2593,7 +2695,7 @@ msgstr "Rol" msgid "Roles" msgstr "Roles" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342 msgid "Save" @@ -2614,6 +2716,10 @@ msgstr "Buscar por título del documento" msgid "Search by name or email" msgstr "Buscar por nombre o correo electrónico" +#: apps/web/src/components/(dashboard)/document-search/document-search.tsx:42 +msgid "Search documents..." +msgstr "Buscar documentos..." + #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:189 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:217 msgid "Secret" @@ -2662,7 +2768,7 @@ msgstr "Seleccionar clave de acceso" msgid "Send confirmation email" msgstr "Enviar correo de confirmación" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308 msgid "Send document" msgstr "Enviar documento" @@ -2744,19 +2850,19 @@ msgstr "Firmar" msgid "Sign as {0} <0>({1})" msgstr "Firmar como {0} <0>({1})" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219 -#~ msgid "Sign as <0>{0} <1>({1})" -#~ msgstr "Sign as <0>{0} <1>({1})" - #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183 msgid "Sign as<0>{0} <1>({1})" msgstr "Firmar como<0>{0} <1>({1})" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:330 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:210 msgid "Sign document" msgstr "Firmar documento" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:128 +msgid "Sign Document" +msgstr "Firmar Documento" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59 msgid "Sign field" msgstr "Campo de firma" @@ -2781,8 +2887,8 @@ msgstr "Inicia sesión en tu cuenta" msgid "Sign Out" msgstr "Cerrar sesión" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:351 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:231 msgid "Sign the document to complete the process." msgstr "Firma el documento para completar el proceso." @@ -2806,10 +2912,11 @@ msgstr "Regístrate con OIDC" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88 #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:192 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:392 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:271 #: apps/web/src/components/forms/profile.tsx:132 msgid "Signature" msgstr "Firma" @@ -2982,6 +3089,10 @@ msgstr "Éxito" msgid "Successfully created passkey" msgstr "Clave de acceso creada con éxito" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:57 +msgid "System Requirements" +msgstr "Requisitos del Sistema" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:266 msgid "System Theme" msgstr "Tema del sistema" @@ -3133,7 +3244,7 @@ msgstr "La plantilla ha sido actualizada." msgid "Template moved" msgstr "Plantilla movida" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:219 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:223 msgid "Template saved" msgstr "Plantilla guardada" @@ -3158,6 +3269,10 @@ msgstr "Texto" msgid "Text Color" msgstr "Color de texto" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:24 +msgid "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." +msgstr "Gracias por usar Documenso para realizar su firma electrónica de documentos. El propósito de esta divulgación es informarle sobre el proceso, la legalidad y sus derechos con respecto al uso de firmas electrónicas en nuestra plataforma. Al optar por usar una firma electrónica, usted está aceptando los términos y condiciones descritos a continuación." + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:52 msgid "The account has been deleted successfully." msgstr "La cuenta ha sido eliminada con éxito." @@ -3180,7 +3295,7 @@ msgstr "El documento ha sido movido con éxito al equipo seleccionado." msgid "The document is now completed, please follow any instructions provided within the parent application." msgstr "El documento ahora está completado, por favor sigue cualquier instrucción proporcionada dentro de la aplicación principal." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167 msgid "The document was created but could not be sent to recipients." msgstr "El documento fue creado pero no se pudo enviar a los destinatarios." @@ -3188,7 +3303,7 @@ msgstr "El documento fue creado pero no se pudo enviar a los destinatarios." msgid "The document will be hidden from your account" msgstr "El documento será ocultado de tu cuenta" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316 msgid "The document will be immediately sent to recipients if this is checked." msgstr "El documento se enviará inmediatamente a los destinatarios si esto está marcado." @@ -3442,6 +3557,10 @@ msgstr "Para acceder a tu cuenta, por favor confirma tu dirección de correo ele msgid "To mark this document as viewed, you need to be logged in as <0>{0}" msgstr "Para marcar este documento como visto, debes iniciar sesión como <0>{0}" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:60 +msgid "To use our electronic signature service, you must have access to:" +msgstr "Para usar nuestro servicio de firma electrónica, debe tener acceso a:" + #: apps/web/src/app/embed/authenticate.tsx:21 msgid "To view this document you need to be signed into your account, please sign in to continue." msgstr "Para ver este documento debes iniciar sesión en tu cuenta, por favor inicia sesión para continuar." @@ -3471,7 +3590,7 @@ msgid "Token deleted" msgstr "Token eliminado" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:114 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 msgid "Token doesn't have an expiration date" msgstr "El token no tiene una fecha de expiración" @@ -3499,6 +3618,10 @@ msgstr "Total de firmantes que se registraron" msgid "Total Users" msgstr "Total de usuarios" +#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:76 +msgid "transfer {teamName}" +msgstr "transferir {teamName}" + #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:160 msgid "Transfer ownership of this team to a selected team member." msgstr "Transferir la propiedad de este equipo a un miembro del equipo seleccionado." @@ -3556,10 +3679,6 @@ msgstr "Escribe 'eliminar' para confirmar" msgid "Type a command or search..." msgstr "Escribe un comando o busca..." -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:275 -#~ msgid "Typed Signature" -#~ msgstr "Typed Signature" - #: apps/web/src/app/(unauthenticated)/verify-email/page.tsx:26 msgid "Uh oh! Looks like you're missing a token" msgstr "¡Oh no! Parece que te falta un token" @@ -3720,6 +3839,10 @@ msgstr "Actualizando contraseña..." msgid "Updating profile..." msgstr "Actualizando perfil..." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:115 +msgid "Updating Your Information" +msgstr "Actualizando Su Información" + #: apps/web/src/components/forms/avatar-image.tsx:182 msgid "Upload Avatar" msgstr "Subir avatar" @@ -3750,7 +3873,7 @@ msgstr "Usar Autenticador" msgid "Use Backup Code" msgstr "Usar Código de Respaldo" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191 msgid "Use Template" msgstr "Usar Plantilla" @@ -3831,6 +3954,10 @@ msgstr "Ver toda la actividad de seguridad relacionada con tu cuenta." msgid "View Codes" msgstr "Ver Códigos" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:127 +msgid "View Document" +msgstr "Ver Documento" + #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:150 msgid "View documents associated with this email" msgstr "Ver documentos asociados con este correo electrónico" @@ -4108,6 +4235,10 @@ msgstr "Webhooks" msgid "Weekly" msgstr "Semanal" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:21 +msgid "Welcome" +msgstr "Bienvenido" + #: apps/web/src/app/(unauthenticated)/signin/page.tsx:33 msgid "Welcome back, we are lucky to have you." msgstr "Bienvenido de nuevo, somos afortunados de tenerte." @@ -4120,6 +4251,10 @@ msgstr "¿Estabas intentando editar este documento en su lugar?" msgid "When you click continue, you will be prompted to add the first available authenticator on your system." msgstr "Cuando haces clic en continuar, se te pedirá que añadas el primer autenticador disponible en tu sistema." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:36 +msgid "When you use our platform to affix your electronic signature to documents, you are consenting to do so under the Electronic Signatures in Global and National Commerce Act (E-Sign Act) and other applicable laws. This action indicates your agreement to use electronic means to sign documents and receive notifications." +msgstr "Cuando utilice nuestra plataforma para colocar su firma electrónica en documentos, está consintiendo hacerlo bajo la Ley de Firmas Electrónicas en el Comercio Global y Nacional (Ley E-Sign) y otras leyes aplicables. Esta acción indica su aceptación de usar medios electrónicos para firmar documentos y recibir notificaciones." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:139 msgid "While waiting for them to do so you can create your own Documenso account and get started with document signing right away." msgstr "Mientras esperas a que ellos lo hagan, puedes crear tu propia cuenta de Documenso y comenzar a firmar documentos de inmediato." @@ -4128,6 +4263,10 @@ msgstr "Mientras esperas a que ellos lo hagan, puedes crear tu propia cuenta de msgid "Who do you want to remind?" msgstr "¿A quién deseas recordar?" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:101 +msgid "Withdrawing Consent" +msgstr "Retirar Consentimiento" + #: apps/web/src/components/forms/public-profile-form.tsx:223 msgid "Write about the team" msgstr "Escribe sobre el equipo" @@ -4184,10 +4323,6 @@ msgstr "Estás a punto de revocar el acceso para el equipo <0>{0} ({1}) para msgid "You are currently on the <0>Free Plan." msgstr "Actualmente estás en el <0>Plan Gratuito." -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92 -#~ msgid "You are currently subscribed to <0>{0}" -#~ msgstr "You are currently subscribed to <0>{0}" - #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148 msgid "You are currently updating <0>{teamMemberName}." msgstr "Actualmente estás actualizando <0>{teamMemberName}." @@ -4232,10 +4367,6 @@ msgstr "No puedes modificar a un miembro del equipo que tenga un rol más alto q msgid "You cannot upload encrypted PDFs" msgstr "No puedes subir PDFs encriptados" -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97 -#~ msgid "You currently have an active plan" -#~ msgstr "You currently have an active plan" - #: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45 msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance." msgstr "Actualmente no tienes un registro de cliente, esto no debería suceder. Por favor contacta a soporte para obtener asistencia." @@ -4282,7 +4413,7 @@ msgstr "Has alcanzado el límite máximo de {0} plantillas directas. <0>¡Actual msgid "You have reached your document limit." msgstr "Has alcanzado tu límite de documentos." -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182 msgid "You have reached your document limit. <0>Upgrade your account to continue!" msgstr "Has alcanzado tu límite de documentos. <0>¡Actualiza tu cuenta para continuar!" @@ -4304,6 +4435,10 @@ msgstr "Has eliminado a este usuario del equipo con éxito." msgid "You have successfully revoked access." msgstr "Has revocado el acceso con éxito." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:104 +msgid "You have the right to withdraw your consent to use electronic signatures at any time before completing the signing process. To withdraw your consent, please contact the sender of the document. In failing to contact the sender you may reach out to <0>{SUPPORT_EMAIL} for assistance. Be aware that withdrawing consent may delay or halt the completion of the related transaction or service." +msgstr "Usted tiene el derecho de retirar su consentimiento para usar firmas electrónicas en cualquier momento antes de completar el proceso de firma. Para retirar su consentimiento, comuníquese con el remitente del documento. Si no se comunica con el remitente, puede comunicarse con <0>{SUPPORT_EMAIL} para obtener asistencia. Tenga en cuenta que retirar el consentimiento puede retrasar o detener la finalización de la transacción o servicio relacionado." + #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:93 msgid "You have updated {teamMemberName}." msgstr "Has actualizado a {teamMemberName}." @@ -4316,10 +4451,6 @@ msgstr "Has verificado tu dirección de correo electrónico para <0>{0}." msgid "You must be an admin of this team to manage billing." msgstr "Debes ser un administrador de este equipo para gestionar la facturación." -#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80 -#~ msgid "You must enter '{confirmTransferMessage}' to proceed" -#~ msgstr "You must enter '{confirmTransferMessage}' to proceed" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58 #: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54 @@ -4382,7 +4513,7 @@ msgstr "Tus {0} plantillas de firma directa" msgid "Your document failed to upload." msgstr "Tu documento no se pudo cargar." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151 msgid "Your document has been created from the template successfully." msgstr "Tu documento se ha creado exitosamente a partir de la plantilla." @@ -4390,7 +4521,7 @@ msgstr "Tu documento se ha creado exitosamente a partir de la plantilla." msgid "Your document has been re-sent successfully." msgstr "Tu documento ha sido reenviado con éxito." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:324 msgid "Your document has been sent successfully." msgstr "Tu documento ha sido enviado con éxito." @@ -4481,7 +4612,7 @@ msgstr "Tu plantilla ha sido eliminada con éxito." msgid "Your template will be duplicated." msgstr "Tu plantilla será duplicada." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:220 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:224 msgid "Your templates has been saved successfully." msgstr "Tus plantillas han sido guardadas con éxito." @@ -4497,4 +4628,3 @@ msgstr "¡Tu token se creó con éxito! ¡Asegúrate de copiarlo porque no podr #: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:86 msgid "Your tokens will be shown here once you create them." msgstr "Tus tokens se mostrarán aquí una vez que los crees." - diff --git a/packages/lib/translations/fr/common.po b/packages/lib/translations/fr/common.po index 97de3075d..6b5a1d366 100644 --- a/packages/lib/translations/fr/common.po +++ b/packages/lib/translations/fr/common.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 04:00\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -18,14 +18,104 @@ msgstr "" "X-Crowdin-File: common.po\n" "X-Crowdin-File-ID: 4\n" +#: packages/email/template-components/template-document-super-delete.tsx:27 +msgid "\"{documentName}\" has been deleted by an admin." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:37 +msgid "“{documentName}” has been signed" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:41 +#: packages/lib/server-only/document/resend-document.tsx:109 +msgid "{0}" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:74 +msgid "{0} Document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:117 +msgid "{0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/email/templates/team-join.tsx:55 +msgid "{0} joined the team {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-leave.tsx:55 +msgid "{0} left the team {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:30 msgid "{0} of {1} row(s) selected." msgstr "{0} sur {1} ligne(s) sélectionnée(s)." +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:119 +#: packages/lib/server-only/document/resend-document.tsx:119 +msgid "{0} on behalf of {1} has invited you to {recipientActionVerb} the document \"{2}\"." +msgstr "" + +#: packages/email/templates/document-invite.tsx:79 +msgid "{inviterName} <0>({inviterEmail})" +msgstr "" + +#: packages/email/templates/document-cancel.tsx:19 +msgid "{inviterName} has cancelled the document {documentName}, you don't need to sign it anymore." +msgstr "" + +#: packages/email/template-components/template-document-cancel.tsx:24 +msgid "{inviterName} has cancelled the document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:57 +msgid "{inviterName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:41 +msgid "{inviterName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/recipient-removed-from-document.tsx:18 +msgid "{inviterName} has removed you from the document {documentName}." +msgstr "" + +#: packages/email/template-components/template-document-invite.tsx:49 +msgid "{inviterName} on behalf of {teamName} has invited you to {0}<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:40 +msgid "{inviterName} on behalf of {teamName} has invited you to {action} {documentName}" +msgstr "" + +#: packages/email/templates/team-join.tsx:61 +msgid "{memberEmail} joined the following team" +msgstr "" + +#: packages/email/templates/team-leave.tsx:61 +msgid "{memberEmail} left the following team" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:55 +msgid "{recipientName} {action} a document by using one of your direct links" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:55 +msgid "{teamName} ownership transfer request" +msgstr "" + #: packages/ui/primitives/data-table-pagination.tsx:41 msgid "{visibleRows, plural, one {Showing # result.} other {Showing # results.}}" msgstr "{visibleRows, plural, one {Affichage de # résultat.} other {Affichage de # résultats.}}" +#: packages/email/templates/document-invite.tsx:91 +msgid "`${inviterName} has invited you to ${action} the document \"${documentName}\".`" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:59 +msgid "<0>{senderName} has requested that you take ownership of the following team" +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:53 msgid "<0>Inherit authentication method - Use the global action signing authentication method configured in the \"General Settings\" step" msgstr "<0>Hériter du méthode d'authentification - Utiliser la méthode d'authentification de signature d'action globale configurée dans l'étape \"Paramètres Générales\"" @@ -56,20 +146,66 @@ msgstr "<0>Exiger un compte - Le destinataire doit être connecté pour voir msgid "<0>Require passkey - The recipient must have an account and passkey configured via their settings" msgstr "<0>Exiger une clé d'accès - Le destinataire doit avoir un compte et une clé d'accès configurée via ses paramètres" +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:109 +msgid "A document was created by your direct template that requires you to {recipientActionVerb} it." +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-joined-email.ts:90 +msgid "A new member has joined your team" +msgstr "" + +#: packages/lib/server-only/team/create-team-email-verification.ts:142 +msgid "A request to use your email has been initiated by {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-join.tsx:29 +msgid "A team member has joined a team on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-team-member-left-email.ts:79 +msgid "A team member has left {0}" +msgstr "" + +#: packages/email/templates/team-leave.tsx:29 +msgid "A team member has left a team on Documenso" +msgstr "" + +#: packages/email/templates/team-delete.tsx:27 +#: packages/email/templates/team-delete.tsx:31 +msgid "A team you were a part of has been deleted" +msgstr "" + +#: packages/email/templates/team-invite.tsx:77 +#: packages/email/templates/team-transfer-request.tsx:81 +msgid "Accept" +msgstr "" + +#: packages/email/templates/team-invite.tsx:29 +msgid "Accept invitation to join a team on Documenso" +msgstr "" + +#: packages/email/templates/confirm-team-email.tsx:38 +msgid "Accept team email request for {teamName} on Documenso" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:29 +msgid "Accept team transfer request on Documenso" +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "Add a document" msgstr "Ajouter un document" -#: packages/ui/primitives/document-flow/add-settings.tsx:336 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:339 +#: packages/ui/primitives/document-flow/add-settings.tsx:378 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:378 msgid "Add a URL to redirect the user to once the document is signed" msgstr "Ajouter une URL pour rediriger l'utilisateur une fois le document signé" -#: packages/ui/primitives/document-flow/add-settings.tsx:248 +#: packages/ui/primitives/document-flow/add-settings.tsx:290 msgid "Add an external ID to the document. This can be used to identify the document in external systems." msgstr "Ajouter un ID externe au document. Cela peut être utilisé pour identifier le document dans des systèmes externes." -#: packages/ui/primitives/template-flow/add-template-settings.tsx:256 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:295 msgid "Add an external ID to the template. This can be used to identify in external systems." msgstr "Ajouter un ID externe au modèle. Cela peut être utilisé pour identifier dans des systèmes externes." @@ -110,13 +246,13 @@ msgstr "Ajouter du texte au champ" msgid "Admin" msgstr "Administrateur" -#: packages/ui/primitives/document-flow/add-settings.tsx:230 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:238 +#: packages/ui/primitives/document-flow/add-settings.tsx:272 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:277 msgid "Advanced Options" msgstr "Options avancées" -#: packages/ui/primitives/document-flow/add-fields.tsx:570 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 +#: packages/ui/primitives/document-flow/add-fields.tsx:573 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:406 msgid "Advanced settings" msgstr "Paramètres avancés" @@ -124,10 +260,26 @@ msgstr "Paramètres avancés" msgid "After submission, a document will be automatically generated and added to your documents page. You will also receive a notification via email." msgstr "Après soumission, un document sera automatiquement généré et ajouté à votre page de documents. Vous recevrez également une notification par email." +#: packages/email/template-components/template-document-cancel.tsx:31 +msgid "All signatures have been voided." +msgstr "" + +#: packages/email/templates/document-super-delete.tsx:20 +msgid "An admin has deleted your document \"{documentName}\"." +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:167 +msgid "An error occurred while loading the document." +msgstr "Une erreur s'est produite lors du chargement du document." + #: packages/lib/constants/recipient-roles.ts:8 msgid "Approve" msgstr "Approuver" +#: packages/lib/constants/recipient-roles.ts:68 +#~ msgid "APPROVE_REQUEST" +#~ msgstr "" + #: packages/lib/constants/recipient-roles.ts:9 msgid "Approved" msgstr "Approuvé" @@ -136,10 +288,18 @@ msgstr "Approuvé" msgid "Approver" msgstr "Approuveur" +#: packages/lib/constants/recipient-roles.ts:44 +msgid "Approvers" +msgstr "Approbateurs" + #: packages/lib/constants/recipient-roles.ts:10 msgid "Approving" msgstr "En attente d'approbation" +#: packages/email/template-components/template-confirmation-email.tsx:28 +msgid "Before you get started, please confirm your email address by clicking the button below:" +msgstr "" + #: packages/ui/primitives/signature-pad/signature-pad.tsx:377 msgid "Black" msgstr "Noir" @@ -148,6 +308,14 @@ msgstr "Noir" msgid "Blue" msgstr "Bleu" +#: packages/email/templates/team-invite.tsx:67 +msgid "by <0>{senderName}" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:70 +msgid "By accepting this request, you will take responsibility for any billing items associated with this team." +msgstr "" + #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356 #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58 msgid "Cancel" @@ -157,10 +325,6 @@ msgstr "Annuler" msgid "Cannot remove signer" msgstr "Impossible de retirer le signataire" -#: packages/ui/primitives/document-flow/add-signers.tsx:221 -#~ msgid "Cannot update signer because they have already signed a field" -#~ msgstr "Cannot update signer because they have already signed a field" - #: packages/lib/constants/recipient-roles.ts:17 msgid "Cc" msgstr "Cc" @@ -174,15 +338,14 @@ msgstr "CC" msgid "CC'd" msgstr "CC'd" +#: packages/lib/constants/recipient-roles.ts:51 +msgid "Ccers" +msgstr "Ccers" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86 msgid "Character Limit" msgstr "Limite de caractères" -#: packages/ui/primitives/document-flow/add-fields.tsx:1026 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 -msgid "Checkbox" -msgstr "Case à cocher" - #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197 msgid "Checkbox values" msgstr "Valeurs de case à cocher" @@ -203,51 +366,108 @@ msgstr "Cliquez pour insérer un champ" msgid "Close" msgstr "Fermer" +#: packages/email/template-components/template-document-completed.tsx:35 +#: packages/email/template-components/template-document-self-signed.tsx:36 +msgid "Completed" +msgstr "" + +#: packages/email/templates/document-completed.tsx:21 +#: packages/email/templates/document-self-signed.tsx:17 +msgid "Completed Document" +msgstr "" + #: packages/lib/constants/template.ts:12 msgid "Configure Direct Recipient" msgstr "Configurer le destinataire direct" -#: packages/ui/primitives/document-flow/add-fields.tsx:571 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 +#: packages/ui/primitives/document-flow/add-fields.tsx:574 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:407 msgid "Configure the {0} field" msgstr "Configurer le champ {0}" +#: packages/email/template-components/template-confirmation-email.tsx:38 +msgid "Confirm email" +msgstr "" + #: packages/ui/primitives/document-flow/document-flow-root.tsx:141 msgid "Continue" msgstr "Continuer" +#: packages/email/template-components/template-document-invite.tsx:66 +msgid "Continue by {0} the document." +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:45 +msgid "Continue by downloading the document." +msgstr "" + #: packages/ui/components/document/document-share-button.tsx:46 msgid "Copied to clipboard" msgstr "Copié dans le presse-papiers" +#: packages/ui/components/document/document-share-button.tsx:194 +msgid "Copy Link" +msgstr "Copier le lien" + +#: packages/email/template-components/template-document-self-signed.tsx:46 +msgid "Create a <0>free account to access your signed documents at any time." +msgstr "" + +#: packages/email/template-components/template-document-self-signed.tsx:68 +msgid "Create account" +msgstr "" + #: packages/ui/primitives/document-flow/add-signature.tsx:360 msgid "Custom Text" msgstr "Texte personnalisé" -#: packages/ui/primitives/document-flow/add-fields.tsx:922 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 +#: packages/ui/primitives/document-flow/add-fields.tsx:927 +#: packages/ui/primitives/document-flow/types.ts:53 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:690 msgid "Date" msgstr "Date" -#: packages/ui/primitives/document-flow/add-settings.tsx:271 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:279 +#: packages/ui/primitives/document-flow/add-settings.tsx:313 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:318 msgid "Date Format" msgstr "Format de date" +#: packages/email/templates/team-invite.tsx:83 +msgid "Decline" +msgstr "" + +#: packages/email/templates/reset-password.tsx:65 +msgid "Didn't request a password change? We are here to help you secure your account, just <0>contact us." +msgstr "" + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:570 msgid "Direct link receiver" msgstr "Receveur de lien direct" #: packages/ui/components/document/document-global-auth-access-select.tsx:62 -#: packages/ui/primitives/document-flow/add-settings.tsx:174 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:151 +#: packages/ui/primitives/document-flow/add-settings.tsx:216 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:190 msgid "Document access" msgstr "Accès au document" +#: packages/lib/server-only/document/super-delete-document.ts:75 +msgid "Document Cancelled" +msgstr "" + +#: packages/email/templates/document-created-from-direct-template.tsx:30 +#: packages/lib/server-only/template/create-document-from-direct-template.ts:554 +msgid "Document created from direct template" +msgstr "" + #: packages/lib/constants/template.ts:20 msgid "Document Creation" msgstr "Création de document" +#: packages/lib/server-only/document/send-delete-email.ts:58 +msgid "Document Deleted!" +msgstr "" + +#: packages/email/template-components/template-document-completed.tsx:64 #: packages/ui/components/document/document-download-button.tsx:68 msgid "Download" msgstr "Télécharger" @@ -256,8 +476,8 @@ msgstr "Télécharger" msgid "Drag & drop your PDF here." msgstr "Faites glisser et déposez votre PDF ici." -#: packages/ui/primitives/document-flow/add-fields.tsx:1052 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 +#: packages/ui/primitives/document-flow/add-fields.tsx:1058 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:820 msgid "Dropdown" msgstr "Liste déroulante" @@ -265,20 +485,26 @@ msgstr "Liste déroulante" msgid "Dropdown options" msgstr "Options de liste déroulante" -#: packages/ui/primitives/document-flow/add-fields.tsx:870 +#: packages/ui/primitives/document-flow/add-fields.tsx:875 #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:500 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 +#: packages/ui/primitives/document-flow/add-signers.tsx:507 +#: packages/ui/primitives/document-flow/types.ts:54 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:638 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:463 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:470 msgid "Email" msgstr "Email" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:184 +#: packages/ui/primitives/document-flow/add-signature.types.ts:7 +msgid "Email is required" +msgstr "L'email est requis" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:223 msgid "Email Options" msgstr "Options d'email" -#: packages/ui/primitives/document-flow/add-fields.tsx:1117 +#: packages/ui/primitives/document-flow/add-fields.tsx:1123 msgid "Empty field" msgstr "Champ vide" @@ -291,7 +517,7 @@ msgstr "Activer la signature de lien direct" msgid "Enable signing order" msgstr "Activer l'ordre de signature" -#: packages/ui/primitives/document-flow/add-fields.tsx:790 +#: packages/ui/primitives/document-flow/add-fields.tsx:795 msgid "Enable Typed Signatures" msgstr "Activer les signatures tapées" @@ -300,11 +526,12 @@ msgid "Enter password" msgstr "Entrez le mot de passe" #: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257 +#: packages/ui/primitives/pdf-viewer.tsx:166 msgid "Error" msgstr "Erreur" -#: packages/ui/primitives/document-flow/add-settings.tsx:241 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:249 +#: packages/ui/primitives/document-flow/add-settings.tsx:283 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:288 msgid "External ID" msgstr "ID externe" @@ -346,6 +573,18 @@ msgstr "Espace réservé du champ" msgid "Font Size" msgstr "Taille de Police" +#: packages/lib/server-only/auth/send-forgot-password.ts:61 +msgid "Forgot Password?" +msgstr "" + +#: packages/email/template-components/template-forgot-password.tsx:21 +msgid "Forgot your password?" +msgstr "" + +#: packages/ui/primitives/document-flow/types.ts:50 +msgid "Free Signature" +msgstr "Signature gratuite" + #: packages/ui/components/document/document-global-auth-action-select.tsx:64 msgid "Global recipient action authentication" msgstr "Authentification d'action de destinataire globale" @@ -358,37 +597,67 @@ msgstr "Retourner" msgid "Green" msgstr "Vert" -#: packages/lib/constants/recipient-roles.ts:72 +#: packages/email/templates/reset-password.tsx:50 +msgid "Hi, {userName} <0>({userEmail})" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:76 msgid "I am a signer of this document" msgstr "Je suis un signataire de ce document" -#: packages/lib/constants/recipient-roles.ts:75 +#: packages/lib/constants/recipient-roles.ts:79 msgid "I am a viewer of this document" msgstr "Je suis un visualiseur de ce document" -#: packages/lib/constants/recipient-roles.ts:73 +#: packages/lib/constants/recipient-roles.ts:77 msgid "I am an approver of this document" msgstr "Je suis un approuveur de ce document" -#: packages/lib/constants/recipient-roles.ts:74 +#: packages/lib/constants/recipient-roles.ts:78 msgid "I am required to receive a copy of this document" msgstr "Je dois recevoir une copie de ce document" -#: packages/lib/constants/recipient-roles.ts:74 -#~ msgid "I am required to recieve a copy of this document" -#~ msgstr "I am required to recieve a copy of this document" - #: packages/ui/components/recipient/recipient-action-auth-select.tsx:29 #: packages/ui/components/recipient/recipient-action-auth-select.tsx:87 msgid "Inherit authentication method" msgstr "Hériter de la méthode d'authentification" +#: packages/ui/primitives/document-flow/types.ts:51 +msgid "Initials" +msgstr "Initiales" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:17 +msgid "Invalid email" +msgstr "Email invalide" + +#: packages/ui/primitives/document-flow/add-signature.types.ts:8 +msgid "Invalid email address" +msgstr "Adresse email invalide" + +#: packages/email/templates/team-invite.tsx:55 +msgid "Join {teamName} on Documenso" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67 #: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72 #: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48 msgid "Label" msgstr "Étiquette" +#: packages/ui/primitives/document-flow/add-settings.tsx:176 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:150 +msgid "Language" +msgstr "" + +#: packages/email/templates/team-transfer-request.tsx:87 +msgid "Link expires in 1 hour." +msgstr "" + +#: packages/ui/primitives/lazy-pdf-viewer.tsx:15 +#: packages/ui/primitives/pdf-viewer.tsx:44 +msgid "Loading document..." +msgstr "Chargement du document..." + #: packages/lib/constants/teams.ts:11 msgid "Manager" msgstr "Gestionnaire" @@ -402,7 +671,7 @@ msgid "Member" msgstr "Membre" #: packages/ui/primitives/document-flow/add-subject.tsx:95 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:215 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:254 msgid "Message <0>(Optional)" msgstr "Message <0>(Optionnel)" @@ -410,11 +679,12 @@ msgstr "Message <0>(Optionnel)" msgid "Min" msgstr "Min" -#: packages/ui/primitives/document-flow/add-fields.tsx:896 +#: packages/ui/primitives/document-flow/add-fields.tsx:901 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:535 #: packages/ui/primitives/document-flow/add-signers.tsx:541 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 +#: packages/ui/primitives/document-flow/types.ts:55 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:664 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:498 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:504 msgid "Name" @@ -432,13 +702,13 @@ msgstr "Nécessite une signature" msgid "Needs to view" msgstr "Nécessite une visualisation" -#: packages/ui/primitives/document-flow/add-fields.tsx:680 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 +#: packages/ui/primitives/document-flow/add-fields.tsx:686 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:504 msgid "No recipient matching this description was found." msgstr "Aucun destinataire correspondant à cette description n'a été trouvé." -#: packages/ui/primitives/document-flow/add-fields.tsx:696 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 +#: packages/ui/primitives/document-flow/add-fields.tsx:701 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:519 msgid "No recipients with this role" msgstr "Aucun destinataire avec ce rôle" @@ -462,8 +732,9 @@ msgstr "Aucun champ de signature trouvé" msgid "No value found." msgstr "Aucune valeur trouvée." -#: packages/ui/primitives/document-flow/add-fields.tsx:974 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 +#: packages/ui/primitives/document-flow/add-fields.tsx:979 +#: packages/ui/primitives/document-flow/types.ts:56 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:742 msgid "Number" msgstr "Numéro" @@ -483,10 +754,30 @@ msgstr "Une fois votre modèle configuré, partagez le lien où vous le souhaite msgid "Page {0} of {1}" msgstr "Page {0} sur {1}" +#: packages/ui/primitives/pdf-viewer.tsx:259 +msgid "Page {0} of {numPages}" +msgstr "Page {0} sur {numPages}" + #: packages/ui/primitives/document-password-dialog.tsx:62 msgid "Password Required" msgstr "Mot de passe requis" +#: packages/email/templates/forgot-password.tsx:17 +msgid "Password Reset Requested" +msgstr "" + +#: packages/email/templates/reset-password.tsx:18 +msgid "Password Reset Successful" +msgstr "" + +#: packages/email/template-components/template-reset-password.tsx:22 +msgid "Password updated!" +msgstr "" + +#: packages/email/templates/document-pending.tsx:17 +msgid "Pending Document" +msgstr "" + #: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156 msgid "Pick a number" msgstr "Choisissez un numéro" @@ -497,8 +788,40 @@ msgstr "Choisissez un numéro" msgid "Placeholder" msgstr "Espace réservé" -#: packages/ui/primitives/document-flow/add-fields.tsx:1000 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 +#: packages/email/template-components/template-document-invite.tsx:43 +msgid "Please {0} your document<0/>\"{documentName}\"" +msgstr "" + +#: packages/email/templates/document-invite.tsx:38 +msgid "Please {action} your document {documentName}" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:98 +msgid "Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:112 +msgid "Please {recipientActionVerb} this document created by your direct template" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:104 +msgid "Please {recipientActionVerb} your document" +msgstr "" + +#: packages/lib/server-only/auth/send-confirmation-email.ts:67 +msgid "Please confirm your email" +msgstr "" + +#: packages/email/templates/confirm-email.tsx:15 +msgid "Please confirm your email address" +msgstr "" + +#: packages/ui/primitives/pdf-viewer.tsx:223 +#: packages/ui/primitives/pdf-viewer.tsx:238 +msgid "Please try again or contact our support." +msgstr "Veuillez réessayer ou contacter notre support." + +#: packages/ui/primitives/template-flow/add-template-fields.tsx:768 msgid "Radio" msgstr "Radio" @@ -519,8 +842,8 @@ msgid "Receives copy" msgstr "Recevoir une copie" #: packages/ui/components/recipient/recipient-action-auth-select.tsx:39 -#: packages/ui/primitives/document-flow/add-settings.tsx:215 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:169 +#: packages/ui/primitives/document-flow/add-settings.tsx:257 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:208 msgid "Recipient action authentication" msgstr "Authentification d'action de destinataire" @@ -528,12 +851,28 @@ msgstr "Authentification d'action de destinataire" msgid "Red" msgstr "Rouge" -#: packages/ui/primitives/document-flow/add-settings.tsx:329 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:332 +#: packages/ui/primitives/document-flow/add-settings.tsx:371 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:371 msgid "Redirect URL" msgstr "URL de redirection" -#: packages/ui/primitives/document-flow/add-fields.tsx:1104 +#: packages/lib/server-only/document/resend-document.tsx:165 +msgid "Reminder: {0}" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:118 +msgid "Reminder: {0} invited you to {recipientActionVerb} a document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:110 +msgid "Reminder: Please {recipientActionVerb} this document" +msgstr "" + +#: packages/lib/server-only/document/resend-document.tsx:114 +msgid "Reminder: Please {recipientActionVerb} your document" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:1110 msgid "Remove" msgstr "Retirer" @@ -545,6 +884,14 @@ msgstr "Retirer" msgid "Required field" msgstr "Champ requis" +#: packages/email/template-components/template-forgot-password.tsx:33 +msgid "Reset Password" +msgstr "" + +#: packages/ui/components/document/document-share-button.tsx:147 +msgid "Rest assured, your document is strictly confidential and will never be shared. Only your signing experience will be highlighted. Share your personalized signing card to showcase your signature!" +msgstr "Soyez assuré, votre document eststrictement confidentiel et ne sera jamais partagé. Seule votre expérience de signature sera mise en avant. Partagez votre carte de signature personnalisée pour mettre en valeur votre signature !" + #: packages/ui/primitives/data-table-pagination.tsx:55 msgid "Rows per page" msgstr "Lignes par page" @@ -553,7 +900,7 @@ msgstr "Lignes par page" msgid "Save" msgstr "Sauvegarder" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:854 msgid "Save Template" msgstr "Sauvegarder le modèle" @@ -595,6 +942,10 @@ msgstr "Partager la carte de signature" msgid "Share the Link" msgstr "Partager le lien" +#: packages/ui/components/document/document-share-button.tsx:143 +msgid "Share your signing experience!" +msgstr "Partagez votre expérience de signature !" + #: packages/ui/primitives/document-flow/add-signers.tsx:680 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:655 msgid "Show advanced settings" @@ -604,10 +955,15 @@ msgstr "Afficher les paramètres avancés" msgid "Sign" msgstr "Signer" -#: packages/ui/primitives/document-flow/add-fields.tsx:818 +#: packages/email/template-components/template-reset-password.tsx:34 +msgid "Sign In" +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:823 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 +#: packages/ui/primitives/document-flow/types.ts:49 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:586 msgid "Signature" msgstr "Signature" @@ -619,10 +975,27 @@ msgstr "Signé" msgid "Signer" msgstr "Signataire" +#: packages/lib/constants/recipient-roles.ts:58 +msgid "Signers" +msgstr "Signataires" + +#: packages/ui/primitives/document-flow/add-signers.types.ts:36 +msgid "Signers must have unique emails" +msgstr "Les signataires doivent avoir des e-mails uniques" + #: packages/lib/constants/recipient-roles.ts:22 msgid "Signing" msgstr "Signature en cours" +#: packages/lib/server-only/document/send-completed-email.ts:93 +#: packages/lib/server-only/document/send-completed-email.ts:161 +msgid "Signing Complete!" +msgstr "" + +#: packages/lib/constants/recipient-roles.ts:66 +#~ msgid "SIGNING_REQUEST" +#~ msgstr "" + #: packages/ui/primitives/document-flow/missing-signature-field-dialog.tsx:34 msgid "Some signers have not been assigned a signature field. Please assign at least 1 signature field to each signer before proceeding." msgstr "Certains signataires n'ont pas été assignés à un champ de signature. Veuillez assigner au moins 1 champ de signature à chaque signataire avant de continuer." @@ -631,6 +1004,11 @@ msgstr "Certains signataires n'ont pas été assignés à un champ de signature. msgid "Something went wrong" msgstr "Quelque chose a mal tourné" +#: packages/ui/primitives/pdf-viewer.tsx:220 +#: packages/ui/primitives/pdf-viewer.tsx:235 +msgid "Something went wrong while loading the document." +msgstr "Une erreur s'est produite lors du chargement du document." + #: packages/ui/primitives/data-table.tsx:136 msgid "Something went wrong." msgstr "Quelque chose a mal tourné." @@ -640,7 +1018,7 @@ msgid "Step <0>{step} of {maxStep}" msgstr "Étape <0>{step} sur {maxStep}" #: packages/ui/primitives/document-flow/add-subject.tsx:78 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:195 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:234 msgid "Subject <0>(Optional)" msgstr "Objet <0>(Optionnel)" @@ -648,15 +1026,32 @@ msgstr "Objet <0>(Optionnel)" msgid "Submit" msgstr "Soumettre" -#: packages/ui/primitives/template-flow/add-template-settings.tsx:134 +#: packages/lib/server-only/team/delete-team-email.ts:96 +msgid "Team email has been revoked for {0}" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:53 +msgid "Team email removed" +msgstr "" + +#: packages/email/templates/team-email-removed.tsx:27 +msgid "Team email removed for {teamName} on Documenso" +msgstr "" + +#: packages/ui/primitives/template-flow/add-template-settings.tsx:133 msgid "Template title" msgstr "Titre du modèle" -#: packages/ui/primitives/document-flow/add-fields.tsx:948 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 +#: packages/ui/primitives/document-flow/add-fields.tsx:953 +#: packages/ui/primitives/document-flow/types.ts:52 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:716 msgid "Text" msgstr "Texte" +#: packages/email/template-components/template-forgot-password.tsx:25 +msgid "That's okay, it happens! Click the button below to reset your password." +msgstr "" + #: packages/ui/components/recipient/recipient-action-auth-select.tsx:44 msgid "The authentication required for recipients to sign fields" msgstr "L'authentification requise pour que les destinataires signent des champs" @@ -673,10 +1068,22 @@ msgstr "L'authentification requise pour que les destinataires visualisent le doc msgid "The document's name" msgstr "Le nom du document" +#: packages/email/templates/team-delete.tsx:35 +msgid "The following team has been deleted by its owner. You will no longer be able to access this team and its documents" +msgstr "" + +#: packages/email/templates/team-delete.tsx:34 +msgid "The following team has been deleted by you" +msgstr "" + #: packages/ui/primitives/document-password-dialog.tsx:52 msgid "The password you have entered is incorrect. Please try again." msgstr "Le mot de passe que vous avez entré est incorrect. Veuillez réessayer." +#: packages/email/template-components/template-document-super-delete.tsx:38 +msgid "The reason provided for deletion is the following:" +msgstr "" + #: packages/ui/components/recipient/recipient-role-select.tsx:103 msgid "The recipient is not required to take any action and receives a copy of the document after it is completed." msgstr "Le destinataire n'est pas tenu de prendre des mesures et reçoit une copie du document après son achèvement." @@ -709,11 +1116,19 @@ msgstr "L'email du signataire" msgid "The signer's name" msgstr "Le nom du signataire" +#: packages/email/templates/team-email-removed.tsx:57 +msgid "The team email <0>{teamEmail} has been removed from the following team" +msgstr "" + #: packages/ui/components/document/document-global-auth-action-select.tsx:72 msgid "This can be overriden by setting the authentication requirements directly on each recipient in the next step." msgstr "Cela peut être remplacé par le paramétrage direct des exigences d'authentification pour chaque destinataire à l'étape suivante." -#: packages/ui/primitives/document-flow/add-fields.tsx:752 +#: packages/email/template-components/template-document-super-delete.tsx:31 +msgid "This document can not be recovered, if you would like to dispute the reason for future documents please contact support." +msgstr "" + +#: packages/ui/primitives/document-flow/add-fields.tsx:757 msgid "This document has already been sent to this recipient. You can no longer edit this recipient." msgstr "Ce document a déjà été envoyé à ce destinataire. Vous ne pouvez plus modifier ce destinataire." @@ -721,18 +1136,18 @@ msgstr "Ce document a déjà été envoyé à ce destinataire. Vous ne pouvez pl msgid "This document is password protected. Please enter the password to view the document." msgstr "Ce document est protégé par mot de passe. Veuillez entrer le mot de passe pour visualiser le document." +#: packages/email/template-components/template-footer.tsx:14 +msgid "This document was sent using <0>Documenso." +msgstr "Ce document a été envoyé via <0>Documenso." + #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:573 msgid "This field cannot be modified or deleted. When you share this template's direct link or add it to your public profile, anyone who accesses it can input their name and email, and fill in the fields assigned to them." msgstr "Ce champ ne peut pas être modifié ou supprimé. Lorsque vous partagez le lien direct de ce modèle ou l'ajoutez à votre profil public, toute personne qui y accède peut saisir son nom et son email, et remplir les champs qui lui sont attribués." -#: packages/ui/primitives/document-flow/add-fields.tsx:1084 +#: packages/ui/primitives/document-flow/add-fields.tsx:1090 msgid "This recipient can no longer be modified as they have signed a field, or completed the document." msgstr "Ce destinataire ne peut plus être modifié car il a signé un champ ou complété le document." -#: packages/ui/primitives/document-flow/add-signers.tsx:165 -#~ msgid "This signer has already received the document." -#~ msgstr "This signer has already received the document." - #: packages/ui/primitives/document-flow/add-signers.tsx:194 msgid "This signer has already signed the document." msgstr "Ce signataire a déjà signé le document." @@ -741,17 +1156,17 @@ msgstr "Ce signataire a déjà signé le document." msgid "This will override any global settings." msgstr "Cela remplacera tous les paramètres globaux." -#: packages/ui/primitives/document-flow/add-settings.tsx:305 -#: packages/ui/primitives/template-flow/add-template-settings.tsx:309 +#: packages/ui/primitives/document-flow/add-settings.tsx:347 +#: packages/ui/primitives/template-flow/add-template-settings.tsx:348 msgid "Time Zone" msgstr "Fuseau horaire" -#: packages/ui/primitives/document-flow/add-settings.tsx:153 +#: packages/ui/primitives/document-flow/add-settings.tsx:155 msgid "Title" msgstr "Titre" -#: packages/ui/primitives/document-flow/add-fields.tsx:1067 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 +#: packages/ui/primitives/document-flow/add-fields.tsx:1073 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:834 msgid "To proceed further, please set at least one value for the {0} field." msgstr "Pour continuer, veuillez définir au moins une valeur pour le champ {0}." @@ -783,7 +1198,19 @@ msgstr "Valeur" #: packages/lib/constants/recipient-roles.ts:26 msgid "View" -msgstr "Vue" +msgstr "Voir" + +#: packages/email/templates/document-created-from-direct-template.tsx:69 +msgid "View document" +msgstr "Voir le document" + +#: packages/email/template-components/template-document-self-signed.tsx:79 +msgid "View plans" +msgstr "Voir les forfaits" + +#: packages/lib/constants/recipient-roles.ts:67 +#~ msgid "VIEW_REQUEST" +#~ msgstr "DEMANDE_DE_CONSULTATION" #: packages/lib/constants/recipient-roles.ts:27 msgid "Viewed" @@ -793,18 +1220,42 @@ msgstr "Vu" msgid "Viewer" msgstr "Visiteur" +#: packages/lib/constants/recipient-roles.ts:65 +msgid "Viewers" +msgstr "Spectateurs" + #: packages/lib/constants/recipient-roles.ts:28 msgid "Viewing" -msgstr "Visionnage" +msgstr "Consultation" -#: packages/ui/primitives/signature-pad/signature-pad.tsx:280 -#~ msgid "White" -#~ msgstr "White" +#: packages/email/template-components/template-document-pending.tsx:31 +msgid "Waiting for others" +msgstr "En attente des autres" + +#: packages/lib/server-only/document/send-pending-email.ts:73 +msgid "Waiting for others to complete signing." +msgstr "" + +#: packages/email/template-components/template-document-pending.tsx:41 +msgid "We're still waiting for other signers to sign this document.<0/>We'll notify you as soon as it's ready." +msgstr "Nous attendons encore que d'autres signataires signent ce document.<0/>Nous vous préviendrons dès qu'il sera prêt." + +#: packages/email/templates/reset-password.tsx:59 +msgid "We've changed your password as you asked. You can now sign in with your new password." +msgstr "Nous avons changé votre mot de passe comme demandé. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe." + +#: packages/email/template-components/template-confirmation-email.tsx:24 +msgid "Welcome to Documenso!" +msgstr "" #: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:44 msgid "You are about to send this document to the recipients. Are you sure you want to continue?" msgstr "Vous êtes sur le point d'envoyer ce document aux destinataires. Êtes-vous sûr de vouloir continuer ?" +#: packages/email/template-components/template-confirmation-email.tsx:41 +msgid "You can also copy and paste this link into your browser: {confirmationLink} (link expires in 1 hour)" +msgstr "" + #: packages/ui/components/document/document-send-email-message-helper.tsx:11 msgid "You can use the following variables in your message:" msgstr "Vous pouvez utiliser les variables suivantes dans votre message :" @@ -813,7 +1264,52 @@ msgstr "Vous pouvez utiliser les variables suivantes dans votre message :" msgid "You cannot upload documents at this time." msgstr "Vous ne pouvez pas télécharger de documents pour le moment." +#: packages/email/template-components/template-document-cancel.tsx:35 +msgid "You don't need to sign it anymore." +msgstr "Vous n'avez plus besoin de le signer." + +#: packages/lib/server-only/team/create-team-member-invites.ts:168 +msgid "You have been invited to join {0} on Documenso" +msgstr "" + +#: packages/email/templates/team-invite.tsx:59 +msgid "You have been invited to join the following team" +msgstr "Vous avez été invité à rejoindre l'équipe suivante" + +#: packages/lib/server-only/recipient/set-recipients-for-document.ts:314 +msgid "You have been removed from a document" +msgstr "" + +#: packages/lib/server-only/team/request-team-ownership-transfer.ts:114 +msgid "You have been requested to take ownership of team {0} on Documenso" +msgstr "" + +#: packages/lib/jobs/definitions/emails/send-signing-email.ts:102 +#: packages/lib/server-only/document/resend-document.tsx:113 +msgid "You have initiated the document {0} that requires you to {recipientActionVerb} it." +msgstr "" + #: packages/ui/primitives/document-dropzone.tsx:69 msgid "You have reached your document limit." msgstr "Vous avez atteint votre limite de documents." +#: packages/email/template-components/template-document-self-signed.tsx:42 +#~ msgid "You have signed \"{documentName}\"" +#~ msgstr "Vous avez signé \"{documentName}\"" + +#: packages/email/template-components/template-document-self-signed.tsx:42 +msgid "You have signed “{documentName}”" +msgstr "" + +#: packages/email/template-components/template-document-super-delete.tsx:23 +msgid "Your document has been deleted by an admin!" +msgstr "Votre document a été supprimé par un administrateur !" + +#: packages/email/template-components/template-reset-password.tsx:26 +msgid "Your password has been updated." +msgstr "Votre mot de passe a été mis à jour." + +#: packages/email/templates/team-delete.tsx:26 +#: packages/email/templates/team-delete.tsx:30 +msgid "Your team has been deleted" +msgstr "Votre équipe a été supprimée" diff --git a/packages/lib/translations/fr/marketing.po b/packages/lib/translations/fr/marketing.po index 80e21c206..617549e8f 100644 --- a/packages/lib/translations/fr/marketing.po +++ b/packages/lib/translations/fr/marketing.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 02:29\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -42,7 +42,7 @@ msgstr "Ajouter un document" msgid "Add More Users for {0}" msgstr "Ajouter plus d'utilisateurs pour {0}" -#: apps/marketing/src/app/(marketing)/open/page.tsx:165 +#: apps/marketing/src/app/(marketing)/open/page.tsx:164 msgid "All our metrics, finances, and learnings are public. We believe in transparency and want to share our journey with you. You can read more about why here: <0>Announcing Open Metrics" msgstr "Tous nos indicateurs, finances et apprentissages sont publics. Nous croyons en la transparence et souhaitons partager notre parcours avec vous. Vous pouvez en lire plus sur pourquoi ici : <0>Annonce de Open Metrics" @@ -90,7 +90,7 @@ msgstr "Changelog" msgid "Choose a template from the community app store. Or submit your own template for others to use." msgstr "Choisissez un modèle dans la boutique d'applications communautaires. Ou soumettez votre propre modèle pour que d'autres puissent l'utiliser." -#: apps/marketing/src/app/(marketing)/open/page.tsx:219 +#: apps/marketing/src/app/(marketing)/open/page.tsx:218 msgid "Community" msgstr "Communauté" @@ -160,10 +160,6 @@ msgstr "Documentation" msgid "Easily embed Documenso into your product. Simply copy and paste our react widget into your application." msgstr "Intégrez facilement Documenso dans votre produit. Il vous suffit de copier et coller notre widget React dans votre application." -#: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:42 -#~ msgid "Easy Sharing (Soon)." -#~ msgstr "Easy Sharing (Soon)." - #: apps/marketing/src/components/(marketing)/share-connect-paid-widget-bento.tsx:46 msgid "Easy Sharing." msgstr "Partage facile." @@ -197,7 +193,7 @@ msgstr "Rapide." msgid "Faster, smarter and more beautiful." msgstr "Plus rapide, plus intelligent et plus beau." -#: apps/marketing/src/app/(marketing)/open/page.tsx:210 +#: apps/marketing/src/app/(marketing)/open/page.tsx:209 msgid "Finances" msgstr "Finances" @@ -250,15 +246,15 @@ msgstr "Commencez aujourd'hui." msgid "Get the latest news from Documenso, including product updates, team announcements and more!" msgstr "Obtenez les dernières nouvelles de Documenso, y compris les mises à jour de produits, les annonces d'équipe et plus encore !" -#: apps/marketing/src/app/(marketing)/open/page.tsx:233 +#: apps/marketing/src/app/(marketing)/open/page.tsx:232 msgid "GitHub: Total Merged PRs" msgstr "GitHub : Total des PRs fusionnées" -#: apps/marketing/src/app/(marketing)/open/page.tsx:251 +#: apps/marketing/src/app/(marketing)/open/page.tsx:250 msgid "GitHub: Total Open Issues" msgstr "GitHub : Total des problèmes ouverts" -#: apps/marketing/src/app/(marketing)/open/page.tsx:225 +#: apps/marketing/src/app/(marketing)/open/page.tsx:224 msgid "GitHub: Total Stars" msgstr "GitHub : Nombre total d'étoiles" @@ -266,7 +262,7 @@ msgstr "GitHub : Nombre total d'étoiles" msgid "Global Salary Bands" msgstr "Bandes de salaire globales" -#: apps/marketing/src/app/(marketing)/open/page.tsx:261 +#: apps/marketing/src/app/(marketing)/open/page.tsx:260 msgid "Growth" msgstr "Croissance" @@ -290,7 +286,7 @@ msgstr "Paiements intégrés avec Stripe afin que vous n'ayez pas à vous soucie msgid "Integrates with all your favourite tools." msgstr "S'intègre à tous vos outils préférés." -#: apps/marketing/src/app/(marketing)/open/page.tsx:289 +#: apps/marketing/src/app/(marketing)/open/page.tsx:288 msgid "Is there more?" msgstr "Y a-t-il plus ?" @@ -314,11 +310,11 @@ msgstr "Emplacement" msgid "Make it your own through advanced customization and adjustability." msgstr "Faites-en votre propre grâce à une personnalisation avancée et un ajustement." -#: apps/marketing/src/app/(marketing)/open/page.tsx:199 +#: apps/marketing/src/app/(marketing)/open/page.tsx:198 msgid "Merged PR's" msgstr "PRs fusionnées" -#: apps/marketing/src/app/(marketing)/open/page.tsx:234 +#: apps/marketing/src/app/(marketing)/open/page.tsx:233 msgid "Merged PRs" msgstr "PRs fusionnées" @@ -349,8 +345,8 @@ msgstr "Aucune carte de crédit requise" msgid "None of these work for you? Try self-hosting!" msgstr "Aucune de ces options ne fonctionne pour vous ? Essayez l'hébergement autonome !" -#: apps/marketing/src/app/(marketing)/open/page.tsx:194 -#: apps/marketing/src/app/(marketing)/open/page.tsx:252 +#: apps/marketing/src/app/(marketing)/open/page.tsx:193 +#: apps/marketing/src/app/(marketing)/open/page.tsx:251 msgid "Open Issues" msgstr "Problèmes ouverts" @@ -358,7 +354,7 @@ msgstr "Problèmes ouverts" msgid "Open Source or Hosted." msgstr "Open Source ou hébergé." -#: apps/marketing/src/app/(marketing)/open/page.tsx:161 +#: apps/marketing/src/app/(marketing)/open/page.tsx:160 #: apps/marketing/src/components/(marketing)/footer.tsx:37 #: apps/marketing/src/components/(marketing)/header.tsx:64 #: apps/marketing/src/components/(marketing)/mobile-navigation.tsx:40 @@ -377,18 +373,10 @@ msgstr "Nos modèles personnalisés sont dotés de règles intelligentes qui peu msgid "Our Enterprise License is great for large organizations looking to switch to Documenso for all their signing needs. It's available for our cloud offering as well as self-hosted setups and offers a wide range of compliance and Adminstration Features." msgstr "Notre licence entreprise est idéale pour les grandes organisations cherchant à passer à Documenso pour tous leurs besoins de signature. Elle est disponible pour notre offre cloud ainsi que pour des configurations auto-hébergées et propose un large éventail de fonctionnalités de conformité et d'administration." -#: apps/marketing/src/components/(marketing)/enterprise.tsx:20 -#~ msgid "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." -#~ msgstr "Our Enterprise License is great large organizations looking to switch to Documenso for all their signing needs. It's availible for our cloud offering as well as self-hosted setups and offer a wide range of compliance and Adminstration Features." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:65 msgid "Our self-hosted option is great for small teams and individuals who need a simple solution. You can use our docker based setup to get started in minutes. Take control with full customizability and data ownership." msgstr "Notre option auto-hébergée est idéale pour les petites équipes et les individus qui ont besoin d'une solution simple. Vous pouvez utiliser notre configuration basée sur Docker pour commencer en quelques minutes. Prenez le contrôle avec une personnalisation complète et une propriété des données." -#: apps/marketing/src/app/(marketing)/open/data.ts:25 -#~ msgid "Part-Time" -#~ msgstr "Part-Time" - #: apps/marketing/src/components/(marketing)/pricing-table.tsx:151 msgid "Premium Profile Name" msgstr "Nom de profil premium" @@ -430,10 +418,6 @@ msgstr "Salaire" msgid "Save $60 or $120" msgstr "Économisez 60 $ ou 120 $" -#: apps/marketing/src/components/(marketing)/i18n-switcher.tsx:47 -#~ msgid "Search languages..." -#~ msgstr "Search languages..." - #: apps/marketing/src/app/(marketing)/pricing/page.tsx:109 msgid "Securely. Our data centers are located in Frankfurt (Germany), giving us the best local privacy laws. We are very aware of the sensitive nature of our data and follow best practices to ensure the security and integrity of the data entrusted to us." msgstr "De manière sécurisée. Nos centres de données sont situés à Francfort (Allemagne), ce qui nous permet de bénéficier des meilleures lois locales sur la confidentialité. Nous sommes très conscients de la nature sensible de nos données et suivons les meilleures pratiques pour garantir la sécurité et l'intégrité des données qui nous sont confiées." @@ -482,7 +466,7 @@ msgstr "Intelligent." msgid "Star on GitHub" msgstr "Étoile sur GitHub" -#: apps/marketing/src/app/(marketing)/open/page.tsx:226 +#: apps/marketing/src/app/(marketing)/open/page.tsx:225 msgid "Stars" msgstr "Étoiles" @@ -517,7 +501,7 @@ msgstr "Boutique de modèles (Bientôt)." msgid "That's awesome. You can take a look at the current <0>Issues and join our <1>Discord Community to keep up to date, on what the current priorities are. In any case, we are an open community and welcome all input, technical and non-technical ❤️" msgstr "C'est génial. Vous pouvez consulter les <0>Problèmes actuels et rejoindre notre <1>Communauté Discord pour rester à jour sur ce qui est actuellement prioritaire. Dans tous les cas, nous sommes une communauté ouverte et accueillons toutes les contributions, techniques et non techniques ❤️" -#: apps/marketing/src/app/(marketing)/open/page.tsx:293 +#: apps/marketing/src/app/(marketing)/open/page.tsx:292 msgid "This page is evolving as we learn what makes a great signing company. We'll update it when we have more to share." msgstr "Cette page évolue à mesure que nous apprenons ce qui fait une grande entreprise de signature. Nous la mettrons à jour lorsque nous aurons plus à partager." @@ -530,8 +514,8 @@ msgstr "Titre" msgid "Total Completed Documents" msgstr "Documents totalisés complétés" +#: apps/marketing/src/app/(marketing)/open/page.tsx:266 #: apps/marketing/src/app/(marketing)/open/page.tsx:267 -#: apps/marketing/src/app/(marketing)/open/page.tsx:268 msgid "Total Customers" msgstr "Total des clients" @@ -618,4 +602,3 @@ msgstr "Vous pouvez auto-héberger Documenso gratuitement ou utiliser notre vers #: apps/marketing/src/components/(marketing)/carousel.tsx:272 msgid "Your browser does not support the video tag." msgstr "Votre navigateur ne prend pas en charge la balise vidéo." - diff --git a/packages/lib/translations/fr/web.po b/packages/lib/translations/fr/web.po index 59780dd28..5ab0eaad8 100644 --- a/packages/lib/translations/fr/web.po +++ b/packages/lib/translations/fr/web.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: documenso-app\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-18 04:04\n" +"PO-Revision-Date: 2024-11-01 04:00\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -117,6 +117,18 @@ msgstr "<0>\"{0}\" n'est plus disponible pour signer" msgid "<0>Sender: All" msgstr "<0>Expéditeur : Tous" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:5 +msgid "1 month" +msgstr "1 mois" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:8 +msgid "12 months" +msgstr "12 mois" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:6 +msgid "3 months" +msgstr "3 mois" + #: apps/web/src/components/partials/not-found.tsx:45 msgid "404 Page not found" msgstr "404 Page non trouvée" @@ -133,14 +145,30 @@ msgstr "404 Équipe non trouvée" msgid "404 Template not found" msgstr "404 Modèle non trouvé" +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:7 +msgid "6 months" +msgstr "6 mois" + +#: apps/web/src/components/(dashboard)/settings/token/contants.ts:4 +msgid "7 days" +msgstr "7 jours" + #: apps/web/src/components/forms/send-confirmation-email.tsx:55 msgid "A confirmation email has been sent, and it should arrive in your inbox shortly." msgstr "Un e-mail de confirmation a été envoyé et devrait arriver dans votre boîte de réception sous peu." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:193 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:70 +msgid "A device capable of accessing, opening, and reading documents" +msgstr "Un appareil capable d'accéder, d'ouvrir et de lire des documents" + +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:201 msgid "A draft document will be created" msgstr "Un document brouillon sera créé" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:73 +msgid "A means to print or download documents for your records" +msgstr "Un moyen d'imprimer ou de télécharger des documents pour vos dossiers" + #: apps/web/src/components/forms/token.tsx:127 msgid "A new token was created successfully." msgstr "Un nouveau jeton a été créé avec succès." @@ -163,6 +191,10 @@ msgstr "Un secret qui sera envoyé à votre URL afin que vous puissiez vérifier msgid "A secret that will be sent to your URL so you can verify that the request has been sent by Documenso." msgstr "Un secret qui sera envoyé à votre URL afin que vous puissiez vérifier que la demande a été envoyée par Documenso." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:64 +msgid "A stable internet connection" +msgstr "Une connexion Internet stable" + #: apps/web/src/components/forms/public-profile-form.tsx:198 msgid "A unique URL to access your profile" msgstr "Une URL unique pour accéder à votre profil" @@ -180,6 +212,10 @@ msgstr "Un e-mail de vérification sera envoyé à l'adresse e-mail fournie." msgid "Accept" msgstr "Accepter" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:33 +msgid "Acceptance and Consent" +msgstr "Acceptation et consentement" + #: apps/web/src/app/(dashboard)/settings/teams/accept-team-invitation-button.tsx:26 msgid "Accepted team invitation" msgstr "Invitation d'équipe acceptée" @@ -189,6 +225,10 @@ msgstr "Invitation d'équipe acceptée" msgid "Account deleted" msgstr "Compte supprimé" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:139 +msgid "Acknowledgment" +msgstr "Reconnaissance" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:105 #: apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-data-table.tsx:104 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:121 @@ -220,12 +260,12 @@ msgstr "Abonnements actifs" msgid "Add" msgstr "Ajouter" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:176 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:88 msgid "Add all relevant fields for each recipient." msgstr "Ajouter tous les champs pertinents pour chaque destinataire." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:83 msgid "Add all relevant placeholders for each recipient." msgstr "Ajouter tous les espaces réservés pertinents pour chaque destinataire." @@ -241,8 +281,8 @@ msgstr "Ajouter un authentificateur pour servir de méthode d'authentification s msgid "Add email" msgstr "Ajouter un e-mail" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:174 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:86 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:175 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:87 msgid "Add Fields" msgstr "Ajouter des champs" @@ -250,24 +290,20 @@ msgstr "Ajouter des champs" msgid "Add more" msgstr "Ajouter davantage" -#: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:270 -#~ msgid "Add number" -#~ msgstr "Add number" - #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:146 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:154 msgid "Add passkey" msgstr "Ajouter une clé de passe" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:81 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:82 msgid "Add Placeholders" msgstr "Ajouter des espaces réservés" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:169 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 msgid "Add Signers" msgstr "Ajouter des signataires" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:179 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 msgid "Add Subject" msgstr "Ajouter un sujet" @@ -275,23 +311,15 @@ msgstr "Ajouter un sujet" msgid "Add team email" msgstr "Ajouter un e-mail d'équipe" -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:256 -#~ msgid "Add text" -#~ msgstr "Add text" - -#: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:272 -#~ msgid "Add Text" -#~ msgstr "Add Text" - -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:170 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:171 msgid "Add the people who will sign the document." msgstr "Ajouter les personnes qui signeront le document." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:195 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:203 msgid "Add the recipients to create the document with" msgstr "Ajouter les destinataires pour créer le document avec" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:180 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:181 msgid "Add the subject and message you wish to send to signers." msgstr "Ajouter le sujet et le message que vous souhaitez envoyer aux signataires." @@ -307,6 +335,10 @@ msgstr "Actions administratives" msgid "Admin panel" msgstr "Panneau d'administration" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:129 +msgid "After signing a document electronically, you will be provided the opportunity to view, download, and print the document for your records. It is highly recommended that you retain a copy of all electronically signed documents for your personal records. We will also retain a copy of the signed document for our records however we may not be able to provide you with a copy of the signed document after a certain period of time." +msgstr "Après avoir signé un document électroniquement, vous aurez l'occasion de visualiser, télécharger et imprimer le document pour vos dossiers. Il est fortement recommandé de conserver une copie de tous les documents signés électroniquement pour vos dossiers personnels. Nous conserverons également une copie du document signé pour nos dossiers, mais nous pourrions ne pas être en mesure de vous fournir une copie du document signé après une certaine période." + #: apps/web/src/components/formatter/document-status.tsx:46 msgid "All" msgstr "Tout" @@ -319,6 +351,10 @@ msgstr "Tous les documents" msgid "All documents have been processed. Any new documents that are sent or received will show here." msgstr "Tous les documents ont été traités. Tous nouveaux documents envoyés ou reçus s'afficheront ici." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:81 +msgid "All documents related to the electronic signing process will be provided to you electronically through our platform or via email. It is your responsibility to ensure that your email address is current and that you can receive and open our emails." +msgstr "Tous les documents relatifs au processus de signature électronique vous seront fournis électroniquement via notre plateforme ou par e-mail. Il est de votre responsabilité de vous assurer que votre adresse e-mail est à jour et que vous pouvez recevoir et ouvrir nos e-mails." + #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:145 msgid "All inserted signatures will be voided" msgstr "Toutes les signatures insérées seront annulées" @@ -347,6 +383,14 @@ msgstr "Vous avez déjà un compte ? <0>Connectez-vous plutôt" msgid "Amount" msgstr "Montant" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:48 +msgid "An electronic signature provided by you on our platform, achieved through clicking through to a document and entering your name, or any other electronic signing method we provide, is legally binding. It carries the same weight and enforceability as a manual signature written with ink on paper." +msgstr "Une signature électronique fournie par vous sur notre plateforme, obtenue en cliquant sur un document et en saisissant votre nom, ou toute autre méthode de signature électronique que nous fournis, est juridiquement contraignante. Elle a le même poids et la même force exécutoire qu'une signature manuelle écrite à l'encre sur papier." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:67 +msgid "An email account" +msgstr "Un compte e-mail" + #: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:262 msgid "An email containing an invitation will be sent to each member." msgstr "Un e-mail contenant une invitation sera envoyé à chaque membre." @@ -370,17 +414,17 @@ msgstr "Un e-mail demandant le transfert de cette équipe a été envoyé." msgid "An error occurred" msgstr "Une erreur est survenue" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:266 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:197 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:231 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:268 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:201 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:235 msgid "An error occurred while adding signers." msgstr "Une erreur est survenue lors de l'ajout de signataires." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:301 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:303 msgid "An error occurred while adding the fields." msgstr "Une erreur est survenue lors de l'ajout des champs." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:153 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:161 msgid "An error occurred while creating document from template." msgstr "Une erreur est survenue lors de la création du document à partir d'un modèle." @@ -419,6 +463,10 @@ msgstr "Une erreur est survenue lors du déplacement du document." msgid "An error occurred while moving the template." msgstr "Une erreur est survenue lors du déplacement du modèle." +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:116 +msgid "An error occurred while removing the field." +msgstr "Une erreur est survenue lors de la suppression du champ." + #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:152 #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:126 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:137 @@ -434,7 +482,7 @@ msgstr "Une erreur est survenue lors de la suppression de la signature." msgid "An error occurred while removing the text." msgstr "Une erreur est survenue lors de la suppression du texte." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:332 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:334 msgid "An error occurred while sending the document." msgstr "Une erreur est survenue lors de l'envoi du document." @@ -446,6 +494,7 @@ msgstr "Une erreur est survenue lors de l'envoi de votre e-mail de confirmation" #: apps/web/src/app/(signing)/sign/[token]/date-field.tsx:100 #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:106 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:84 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:90 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:150 #: apps/web/src/app/(signing)/sign/[token]/radio-field.tsx:102 @@ -458,8 +507,8 @@ msgstr "Une erreur est survenue lors de la signature du document." msgid "An error occurred while trying to create a checkout session." msgstr "Une erreur est survenue lors de la création d'une session de paiement." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:232 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:166 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:234 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:170 msgid "An error occurred while updating the document settings." msgstr "Une erreur est survenue lors de la mise à jour des paramètres du document." @@ -543,6 +592,10 @@ msgstr "Version de l'application" msgid "Approve" msgstr "Approuver" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:129 +msgid "Approve Document" +msgstr "Approuver le document" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:78 msgid "Approved" msgstr "Approuvé" @@ -561,7 +614,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer cette équipe ?" #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:98 #: apps/web/src/app/(dashboard)/settings/teams/team-email-usage.tsx:94 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:453 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:455 #: apps/web/src/components/(teams)/dialogs/delete-team-member-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/leave-team-dialog.tsx:81 #: apps/web/src/components/(teams)/dialogs/remove-team-email-dialog.tsx:116 @@ -600,7 +653,7 @@ msgstr "En attente de confirmation par e-mail" msgid "Back" msgstr "Retour" -#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:109 +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:164 msgid "Back to Documents" msgstr "Retour aux documents" @@ -650,9 +703,22 @@ msgstr "En supprimant ce document, les éléments suivants se produiront :" msgid "By enabling 2FA, you will be required to enter a code from your authenticator app every time you sign in." msgstr "En activant l'authentification à deux facteurs (2FA), vous devrez entrer un code provenant de votre application d'authentification chaque fois que vous vous connectez." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:142 +msgid "By proceeding to use the electronic signature service provided by Documenso, you affirm that you have read and understood this disclosure. You agree to all terms and conditions related to the use of electronic signatures and electronic transactions as outlined herein." +msgstr "En procédant à l'utilisation du service de signature électronique fourni par Documenso, vous affirmez avoir lu et compris cette divulgation. Vous acceptez tous les termes et conditions liés à l'utilisation des signatures électroniques et des transactions électroniques comme décrit ici." + +#: apps/web/src/components/general/signing-disclosure.tsx:14 +msgid "By proceeding with your electronic signature, you acknowledge and consent that it will be used to sign the given document and holds the same legal validity as a handwritten signature. By completing the electronic signing process, you affirm your understanding and acceptance of these conditions." +msgstr "En procédant avec votre signature électronique, vous reconnaissez et consentez à ce qu'elle soit utilisée pour signer le document donné et a la même validité légale qu'une signature manuscrite. En complétant le processus de signature électronique, vous affirmez votre compréhension et votre acceptation de ces conditions." + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:92 +msgid "By using the electronic signature feature, you are consenting to conduct transactions and receive disclosures electronically. You acknowledge that your electronic signature on documents is binding and that you accept the terms outlined in the documents you are signing." +msgstr "En utilisant la fonctionnalité de signature électronique, vous consentez à effectuer des transactions et à recevoir des divulgations électroniquement. Vous reconnaissez que votre signature électronique sur les documents est contraignante et que vous acceptez les termes énoncés dans les documents que vous signez." + #: apps/web/src/app/(dashboard)/documents/_action-items/resend-document.tsx:186 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:190 #: apps/web/src/app/(dashboard)/documents/duplicate-document-dialog.tsx:108 +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:120 #: apps/web/src/app/(dashboard)/settings/security/passkeys/create-passkey-dialog.tsx:248 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:157 #: apps/web/src/app/(dashboard)/settings/security/passkeys/user-passkeys-data-table-actions.tsx:198 @@ -660,12 +726,13 @@ msgstr "En activant l'authentification à deux facteurs (2FA), vous devrez entre #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:81 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:78 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:119 -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:470 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:472 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-account.tsx:71 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:164 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:189 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:151 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:220 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:215 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:327 #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:113 @@ -753,13 +820,13 @@ msgstr "Cliquez pour copier le lien de signature à envoyer au destinataire" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175 #: apps/web/src/app/(signing)/sign/[token]/form.tsx:115 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:440 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:319 msgid "Click to insert field" msgstr "Cliquez pour insérer le champ" #: apps/web/src/app/(dashboard)/templates/new-template-dialog.tsx:126 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:304 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:339 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-2fa.tsx:125 #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:138 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-transfer-status.tsx:121 @@ -771,8 +838,8 @@ msgid "Close" msgstr "Fermer" #: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:61 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:430 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:309 #: apps/web/src/components/forms/v2/signup.tsx:534 msgid "Complete" msgstr "Compléter" @@ -802,11 +869,11 @@ msgstr "Documents complétés" msgid "Completed Documents" msgstr "Documents Complétés" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:166 msgid "Configure general settings for the document." msgstr "Configurer les paramètres généraux pour le document." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:78 msgid "Configure general settings for the template." msgstr "Configurer les paramètres généraux pour le modèle." @@ -814,7 +881,7 @@ msgstr "Configurer les paramètres généraux pour le modèle." msgid "Configure template" msgstr "Configurer le modèle" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:479 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:481 #: apps/web/src/components/templates/manage-public-template-dialog.tsx:460 msgid "Confirm" msgstr "Confirmer" @@ -844,6 +911,14 @@ msgstr "Confirmer l'email" msgid "Confirmation email sent" msgstr "Email de confirmation envoyé" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:89 +msgid "Consent to Electronic Transactions" +msgstr "Consentement aux transactions électroniques" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:151 +msgid "Contact Information" +msgstr "Coordonnées" + #: apps/web/src/app/(dashboard)/admin/site-settings/banner-form.tsx:189 msgid "Content" msgstr "Contenu" @@ -900,11 +975,11 @@ msgstr "Créer une équipe pour collaborer avec vos membres." msgid "Create account" msgstr "Créer un compte" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:310 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:345 msgid "Create and send" msgstr "Créer et envoyer" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:312 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:347 msgid "Create as draft" msgstr "Créer en tant que brouillon" @@ -916,7 +991,7 @@ msgstr "Créer un lien direct" msgid "Create Direct Signing Link" msgstr "Créer un lien de signature directe" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:189 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:197 msgid "Create document from template" msgstr "Créer un document à partir du modèle" @@ -984,19 +1059,11 @@ msgstr "Créé le" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:67 #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:88 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:93 msgid "Created on {0}" msgstr "Créé le {0}" -#: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:89 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:94 -#~ msgid "Created on <0/>" -#~ msgstr "Created on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:100 -msgid "Created on{0}" -msgstr "Créé le{0}" - #: apps/web/src/components/forms/password.tsx:107 msgid "Current Password" msgstr "Mot de passe actuel" @@ -1030,6 +1097,10 @@ msgstr "Décliner" msgid "Declined team invitation" msgstr "Invitation d'équipe refusée" +#: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:90 +msgid "delete" +msgstr "supprimer" + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx:141 #: apps/web/src/app/(dashboard)/documents/data-table-action-dropdown.tsx:187 #: apps/web/src/app/(dashboard)/documents/delete-document-dialog.tsx:200 @@ -1039,7 +1110,7 @@ msgstr "Invitation d'équipe refusée" #: apps/web/src/app/(dashboard)/settings/webhooks/page.tsx:100 #: apps/web/src/app/(dashboard)/templates/data-table-action-dropdown.tsx:91 #: apps/web/src/app/(dashboard)/templates/delete-template-dialog.tsx:90 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:122 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:116 #: apps/web/src/app/(teams)/t/[teamUrl]/settings/webhooks/page.tsx:105 #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:121 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:109 @@ -1048,6 +1119,15 @@ msgstr "Invitation d'équipe refusée" msgid "Delete" msgstr "Supprimer" +#: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:56 +#: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:54 +msgid "delete {0}" +msgstr "supprimer {0}" + +#: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:50 +msgid "delete {teamName}" +msgstr "supprimer {teamName}" + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:137 msgid "Delete account" msgstr "Supprimer le compte" @@ -1107,10 +1187,6 @@ msgstr "Supprimé" msgid "Deleting account..." msgstr "Suppression du compte..." -#: apps/web/src/app/(dashboard)/admin/documents/[id]/super-delete-document-dialog.tsx:135 -#~ msgid "Deleting document" -#~ msgstr "Deleting document" - #: apps/web/src/app/(dashboard)/settings/security/activity/user-security-activity-data-table.tsx:75 msgid "Device" msgstr "Appareil" @@ -1215,7 +1291,7 @@ msgstr "Document complété" msgid "Document Completed!" msgstr "Document Complété !" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:150 msgid "Document created" msgstr "Document créé" @@ -1246,7 +1322,7 @@ msgstr "ID du document" msgid "Document inbox" msgstr "Boîte de réception des documents" -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:178 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:179 msgid "Document Limit Exceeded!" msgstr "Limite de documents dépassée !" @@ -1274,7 +1350,7 @@ msgstr "Document renvoyé" msgid "Document resealed" msgstr "Document resealé" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:321 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:323 msgid "Document sent" msgstr "Document envoyé" @@ -1369,10 +1445,6 @@ msgstr "Documents en brouillon" msgid "Drafted Documents" msgstr "Documents brouillon" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:245 -#~ msgid "Draw" -#~ msgstr "Draw" - #: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:121 msgid "Due to an unpaid invoice, your team has been restricted. Please settle the payment to restore full access to your team." msgstr "En raison d'une facture impayée, votre équipe a été restreinte. Veuillez régler le paiement pour rétablir l'accès complet à votre équipe." @@ -1403,15 +1475,23 @@ msgstr "Modifier" msgid "Edit webhook" msgstr "Modifier le webhook" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:78 +msgid "Electronic Delivery of Documents" +msgstr "Remise électronique de documents" + +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:17 +msgid "Electronic Signature Disclosure" +msgstr "Divulgation de signature électronique" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:166 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:114 #: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:71 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:213 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:248 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:255 #: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:377 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:257 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169 #: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153 #: apps/web/src/components/forms/forgot-password.tsx:81 @@ -1431,6 +1511,10 @@ msgstr "Adresse email" msgid "Email Address" msgstr "Adresse e-mail" +#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:80 +msgid "Email cannot already exist in the template" +msgstr "L'e-mail ne peut déjà exister dans le modèle" + #: apps/web/src/app/(unauthenticated)/verify-email/[token]/client.tsx:36 msgid "Email Confirmed!" msgstr "Email confirmé !" @@ -1495,19 +1579,19 @@ msgstr "Entrez votre texte ici" #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:41 #: apps/web/src/app/(dashboard)/admin/users/[id]/page.tsx:78 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:231 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:265 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:300 -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:331 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:233 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:267 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:302 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:333 #: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:57 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:106 #: apps/web/src/app/(dashboard)/documents/upload-document.tsx:112 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:165 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:196 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:230 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:169 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:200 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:234 #: apps/web/src/app/(dashboard)/templates/duplicate-template-dialog.tsx:51 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:56 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:152 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:160 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:122 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:151 #: apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx:212 @@ -1517,6 +1601,8 @@ msgstr "Entrez votre texte ici" #: apps/web/src/app/(signing)/sign/[token]/dropdown-field.tsx:136 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:83 #: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:109 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:89 +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:115 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:121 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:147 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:149 @@ -1548,24 +1634,11 @@ msgstr "Délai dépassé" msgid "Expired" msgstr "Expiré" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:73 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:106 -#~ msgid "Expires on" -#~ msgstr "Expires on" - #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:71 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:104 msgid "Expires on {0}" msgstr "Expire le {0}" -#: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 -#~ msgid "Expires on <0/>" -#~ msgstr "Expires on <0/>" - -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:107 -msgid "Expires on{0}" -msgstr "Expire le{0}" - #: apps/web/src/app/(dashboard)/admin/documents/[id]/admin-actions.tsx:42 msgid "Failed to reseal document" msgstr "Échec du reseal du document" @@ -1587,22 +1660,27 @@ msgstr "Champs" msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB" msgstr "Le fichier ne peut pas dépasser {APP_DOCUMENT_UPLOAD_SIZE_LIMIT} Mo" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:154 +msgid "For any questions regarding this disclosure, electronic signatures, or any related process, please contact us at: <0>{SUPPORT_EMAIL}" +msgstr "Pour toute question concernant cette divulgation, les signatures électroniques ou tout processus y afférent, veuillez nous contacter à : <0>{SUPPORT_EMAIL}" + #: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21 #: apps/web/src/components/forms/signin.tsx:370 msgid "Forgot your password?" msgstr "Mot de passe oublié ?" #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:178 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:362 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:242 #: apps/web/src/components/forms/profile.tsx:110 #: apps/web/src/components/forms/v2/signup.tsx:312 msgid "Full Name" msgstr "Nom complet" -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:164 -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:76 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:165 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:77 #: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:60 #: apps/web/src/components/(teams)/settings/layout/desktop-nav.tsx:43 #: apps/web/src/components/(teams)/settings/layout/mobile-nav.tsx:51 @@ -1663,10 +1741,6 @@ msgstr "Cacher" msgid "Hide additional information" msgstr "Cacher des informations supplémentaires" -#: apps/web/src/app/(internal)/%5F%5Fhtmltopdf/certificate/page.tsx:40 -#~ msgid "I am the owner of this document" -#~ msgstr "I am the owner of this document" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:186 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:173 msgid "I'm sure! Delete it" @@ -1700,6 +1774,10 @@ msgstr "Documents de la boîte de réception" msgid "Information" msgstr "Information" +#: apps/web/src/app/(signing)/sign/[token]/initials-field.tsx:132 +msgid "Initials" +msgstr "Initiales" + #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:78 msgid "Inserted" msgstr "Inséré" @@ -1766,6 +1844,10 @@ msgstr "Invité à" msgid "Invoice" msgstr "Facture" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:118 +msgid "It is crucial to keep your contact information, especially your email address, up to date with us. Please notify us immediately of any changes to ensure that you continue to receive all necessary communications." +msgstr "Il est crucial de maintenir vos coordonnées, en particulier votre adresse e-mail, à jour avec nous. Veuillez nous informer immédiatement de tout changement pour vous assurer que vous continuez à recevoir toutes les communications nécessaires." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:134 msgid "It looks like {0} hasn't added any documents to their profile yet." msgstr "Il semble que {0} n'ait pas encore ajouté de documents à son profil." @@ -1827,6 +1909,10 @@ msgstr "Quitter" msgid "Leave team" msgstr "Quitter l'équipe" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:45 +msgid "Legality of Electronic Signatures" +msgstr "Légalité des signatures électroniques" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:264 msgid "Light Mode" msgstr "Mode clair" @@ -1980,6 +2066,7 @@ msgstr "Utilisateurs actifs mensuels : utilisateurs ayant créé au moins un doc msgid "Monthly Active Users: Users that had at least one of their documents completed" msgstr "Utilisateurs actifs mensuels : utilisateurs ayant terminé au moins un de leurs documents" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Move" msgstr "Déplacer" @@ -1997,6 +2084,7 @@ msgstr "Déplacer le modèle vers l'équipe" msgid "Move to Team" msgstr "Déplacer vers l'équipe" +#: apps/web/src/app/(dashboard)/documents/move-document-dialog.tsx:123 #: apps/web/src/app/(dashboard)/templates/move-template-dialog.tsx:122 msgid "Moving..." msgstr "Déplacement..." @@ -2010,8 +2098,8 @@ msgstr "Mes modèles" #: 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.tsx:61 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:235 -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:242 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:270 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:277 #: apps/web/src/app/(signing)/sign/[token]/complete/claim-account.tsx:119 #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:170 #: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:153 @@ -2041,8 +2129,8 @@ msgstr "Nouveau propriétaire d'équipe" msgid "New Template" msgstr "Nouveau modèle" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:421 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:300 #: apps/web/src/components/forms/v2/signup.tsx:521 msgid "Next" msgstr "Suivant" @@ -2162,12 +2250,14 @@ msgstr "Ou" msgid "Or continue with" msgstr "Ou continuez avec" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:289 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:324 msgid "Otherwise, the document will be created as a draft." msgstr "Sinon, le document sera créé sous forme de brouillon." #: apps/web/src/app/(dashboard)/admin/documents/document-results.tsx:86 #: apps/web/src/components/(dashboard)/layout/menu-switcher.tsx:81 +#: apps/web/src/components/(teams)/tables/current-user-teams-data-table.tsx:86 +#: apps/web/src/components/(teams)/tables/team-members-data-table.tsx:109 msgid "Owner" msgstr "Propriétaire" @@ -2302,7 +2392,7 @@ msgstr "Veuillez entrer un nom significatif pour votre jeton. Cela vous aidera msgid "Please mark as viewed to complete" msgstr "Veuillez marquer comme vu pour terminer" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:457 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:459 msgid "Please note that proceeding will remove direct linking recipient and turn it into a placeholder." msgstr "Veuillez noter que la poursuite supprimera le destinataire de lien direct et le transformera en espace réservé." @@ -2338,6 +2428,10 @@ msgstr "Veuillez fournir un jeton de l'authentificateur, ou un code de secours. msgid "Please provide a token from your authenticator, or a backup code." msgstr "Veuillez fournir un jeton de votre authentificateur, ou un code de secours." +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:169 +msgid "Please review the document before signing." +msgstr "Veuillez examiner le document avant de signer." + #: apps/web/src/components/forms/send-confirmation-email.tsx:64 msgid "Please try again and make sure you enter the correct email address." msgstr "Veuillez réessayer et assurez-vous d'entrer la bonne adresse email." @@ -2420,6 +2514,10 @@ msgstr "Les modèles publics sont connectés à votre profil public. Toute modif msgid "Read only field" msgstr "Champ en lecture seule" +#: apps/web/src/components/general/signing-disclosure.tsx:21 +msgid "Read the full <0>signature disclosure." +msgstr "Lisez l'intégralité de la <0>divulgation de signature." + #: apps/web/src/app/(dashboard)/documents/[id]/document-page-view-recipients.tsx:90 msgid "Ready" msgstr "Prêt" @@ -2547,6 +2645,10 @@ msgstr "Résoudre" msgid "Resolve payment" msgstr "Résoudre le paiement" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:126 +msgid "Retention of Documents" +msgstr "Conservation des documents" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-passkey.tsx:168 msgid "Retry" msgstr "Réessayer" @@ -2593,7 +2695,7 @@ msgstr "Rôle" msgid "Roles" msgstr "Rôles" -#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:444 +#: apps/web/src/app/(dashboard)/templates/template-direct-link-dialog.tsx:446 #: apps/web/src/app/(signing)/sign/[token]/number-field.tsx:336 #: apps/web/src/app/(signing)/sign/[token]/text-field.tsx:342 msgid "Save" @@ -2614,6 +2716,10 @@ msgstr "Recherche par titre de document" msgid "Search by name or email" msgstr "Recherche par nom ou e-mail" +#: apps/web/src/components/(dashboard)/document-search/document-search.tsx:42 +msgid "Search documents..." +msgstr "Rechercher des documents..." + #: apps/web/src/app/(dashboard)/settings/webhooks/[id]/page.tsx:189 #: apps/web/src/components/(dashboard)/settings/webhooks/create-webhook-dialog.tsx:217 msgid "Secret" @@ -2662,7 +2768,7 @@ msgstr "Sélectionner la clé d'authentification" msgid "Send confirmation email" msgstr "Envoyer l'e-mail de confirmation" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:273 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:308 msgid "Send document" msgstr "Envoyer le document" @@ -2744,19 +2850,19 @@ msgstr "Signer" msgid "Sign as {0} <0>({1})" msgstr "Signer comme {0} <0>({1})" -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:219 -#~ msgid "Sign as <0>{0} <1>({1})" -#~ msgstr "Sign as <0>{0} <1>({1})" - #: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:183 msgid "Sign as<0>{0} <1>({1})" msgstr "Signer comme<0>{0} <1>({1})" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:330 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:210 msgid "Sign document" msgstr "Signer le document" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:128 +msgid "Sign Document" +msgstr "Signer le document" + #: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59 msgid "Sign field" msgstr "Champ de signature" @@ -2781,8 +2887,8 @@ msgstr "Connectez-vous à votre compte" msgid "Sign Out" msgstr "Déconnexion" -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:351 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:231 msgid "Sign the document to complete the process." msgstr "Signez le document pour terminer le processus." @@ -2806,10 +2912,11 @@ msgstr "S'inscrire avec OIDC" #: apps/web/src/app/(dashboard)/admin/documents/[id]/recipient-item.tsx:88 #: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338 +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:192 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:195 #: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:225 -#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391 -#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270 +#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:392 +#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:271 #: apps/web/src/components/forms/profile.tsx:132 msgid "Signature" msgstr "Signature" @@ -2982,6 +3089,10 @@ msgstr "Succès" msgid "Successfully created passkey" msgstr "Clé d'authentification créée avec succès" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:57 +msgid "System Requirements" +msgstr "Exigences du système" + #: apps/web/src/components/(dashboard)/common/command-menu.tsx:266 msgid "System Theme" msgstr "Thème système" @@ -3133,7 +3244,7 @@ msgstr "Le modèle a été mis à jour." msgid "Template moved" msgstr "Modèle déplacé" -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:219 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:223 msgid "Template saved" msgstr "Modèle enregistré" @@ -3158,6 +3269,10 @@ msgstr "Texte" msgid "Text Color" msgstr "Couleur du texte" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:24 +msgid "Thank you for using Documenso to perform your electronic document signing. The purpose of this disclosure is to inform you about the process, legality, and your rights regarding the use of electronic signatures on our platform. By opting to use an electronic signature, you are agreeing to the terms and conditions outlined below." +msgstr "Merci d'utiliser Documenso pour signer vos documents électroniquement. L'objectif de cette divulgation est de vous informer sur le processus, la légalité et vos droits concernant l'utilisation des signatures électroniques sur notre plateforme. En choisissant d'utiliser une signature électronique, vous acceptez les termes et conditions énoncés ci-dessous." + #: apps/web/src/app/(dashboard)/admin/users/[id]/delete-user-dialog.tsx:52 msgid "The account has been deleted successfully." msgstr "Le compte a été supprimé avec succès." @@ -3180,7 +3295,7 @@ msgstr "Le document a été déplacé avec succès vers l'équipe sélectionnée msgid "The document is now completed, please follow any instructions provided within the parent application." msgstr "Le document est maintenant complet, veuillez suivre toutes les instructions fournies dans l'application parente." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:167 msgid "The document was created but could not be sent to recipients." msgstr "Le document a été créé mais n'a pas pu être envoyé aux destinataires." @@ -3188,7 +3303,7 @@ msgstr "Le document a été créé mais n'a pas pu être envoyé aux destinatair msgid "The document will be hidden from your account" msgstr "Le document sera caché de votre compte" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:281 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:316 msgid "The document will be immediately sent to recipients if this is checked." msgstr "Le document sera immédiatement envoyé aux destinataires si cela est coché." @@ -3442,6 +3557,10 @@ msgstr "Pour accéder à votre compte, veuillez confirmer votre adresse e-mail e msgid "To mark this document as viewed, you need to be logged in as <0>{0}" msgstr "Pour marquer ce document comme consulté, vous devez être connecté en tant que <0>{0}" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:60 +msgid "To use our electronic signature service, you must have access to:" +msgstr "Pour utiliser notre service de signature électronique, vous devez avoir accès à :" + #: apps/web/src/app/embed/authenticate.tsx:21 msgid "To view this document you need to be signed into your account, please sign in to continue." msgstr "Pour afficher ce document, vous devez être connecté à votre compte, veuillez vous connecter pour continuer." @@ -3471,7 +3590,7 @@ msgid "Token deleted" msgstr "Jeton supprimé" #: apps/web/src/app/(dashboard)/settings/tokens/page.tsx:75 -#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:114 +#: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:108 msgid "Token doesn't have an expiration date" msgstr "Le jeton n'a pas de date d'expiration" @@ -3499,6 +3618,10 @@ msgstr "Total des signataires qui se sont inscrits" msgid "Total Users" msgstr "Total des utilisateurs" +#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:76 +msgid "transfer {teamName}" +msgstr "transférer {teamName}" + #: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:160 msgid "Transfer ownership of this team to a selected team member." msgstr "Transférer la propriété de cette équipe à un membre d'équipe sélectionné." @@ -3556,10 +3679,6 @@ msgstr "Tapez 'supprimer' pour confirmer" msgid "Type a command or search..." msgstr "Tapez une commande ou recherchez..." -#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:275 -#~ msgid "Typed Signature" -#~ msgstr "Typed Signature" - #: apps/web/src/app/(unauthenticated)/verify-email/page.tsx:26 msgid "Uh oh! Looks like you're missing a token" msgstr "Oh oh ! On dirait que vous manquez un jeton" @@ -3720,6 +3839,10 @@ msgstr "Mise à jour du mot de passe..." msgid "Updating profile..." msgstr "Mise à jour du profil..." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:115 +msgid "Updating Your Information" +msgstr "Mise à jour de vos informations" + #: apps/web/src/components/forms/avatar-image.tsx:182 msgid "Upload Avatar" msgstr "Télécharger un avatar" @@ -3750,7 +3873,7 @@ msgstr "Utiliser l'authentificateur" msgid "Use Backup Code" msgstr "Utiliser le code de secours" -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:183 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:191 msgid "Use Template" msgstr "Utiliser le modèle" @@ -3831,6 +3954,10 @@ msgstr "Voir toute l'activité de sécurité liée à votre compte." msgid "View Codes" msgstr "Voir les codes" +#: apps/web/src/app/(signing)/sign/[token]/form.tsx:127 +msgid "View Document" +msgstr "Voir le document" + #: apps/web/src/app/(teams)/t/[teamUrl]/settings/page.tsx:150 msgid "View documents associated with this email" msgstr "Voir les documents associés à cet e-mail" @@ -4108,6 +4235,10 @@ msgstr "Webhooks" msgid "Weekly" msgstr "Hebdomadaire" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:21 +msgid "Welcome" +msgstr "Bienvenue" + #: apps/web/src/app/(unauthenticated)/signin/page.tsx:33 msgid "Welcome back, we are lucky to have you." msgstr "Contentieux, nous avons de la chance de vous avoir." @@ -4120,6 +4251,10 @@ msgstr "Essayiez-vous d'éditer ce document à la place ?" msgid "When you click continue, you will be prompted to add the first available authenticator on your system." msgstr "Lorsque vous cliquez sur continuer, vous serez invité à ajouter le premier authentificateur disponible sur votre système." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:36 +msgid "When you use our platform to affix your electronic signature to documents, you are consenting to do so under the Electronic Signatures in Global and National Commerce Act (E-Sign Act) and other applicable laws. This action indicates your agreement to use electronic means to sign documents and receive notifications." +msgstr "Lorsque vous utilisez notre plateforme pour apposer votre signature électronique sur des documents, vous consentez à le faire conformément à la loi sur les signatures électroniques dans le commerce mondial et national (E-Sign Act) et aux autres lois applicables. Cette action indique votre accord à utiliser des moyens électroniques pour signer des documents et recevoir des notifications." + #: apps/web/src/app/(profile)/p/[url]/page.tsx:139 msgid "While waiting for them to do so you can create your own Documenso account and get started with document signing right away." msgstr "En attendant qu'ils le fassent, vous pouvez créer votre propre compte Documenso et commencer à signer des documents dès maintenant." @@ -4128,6 +4263,10 @@ msgstr "En attendant qu'ils le fassent, vous pouvez créer votre propre compte D msgid "Who do you want to remind?" msgstr "Qui voulez-vous rappeler ?" +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:101 +msgid "Withdrawing Consent" +msgstr "Retrait du consentement" + #: apps/web/src/components/forms/public-profile-form.tsx:223 msgid "Write about the team" msgstr "Écrivez sur l'équipe" @@ -4184,10 +4323,6 @@ msgstr "Vous êtes sur le point de révoquer l'accès de l'équipe <0>{0} ({ msgid "You are currently on the <0>Free Plan." msgstr "Vous êtes actuellement sur le <0>Plan Gratuit." -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:92 -#~ msgid "You are currently subscribed to <0>{0}" -#~ msgstr "You are currently subscribed to <0>{0}" - #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:148 msgid "You are currently updating <0>{teamMemberName}." msgstr "Vous mettez à jour actuellement <0>{teamMemberName}." @@ -4232,10 +4367,6 @@ msgstr "Vous ne pouvez pas modifier un membre de l'équipe qui a un rôle plus msgid "You cannot upload encrypted PDFs" msgstr "Vous ne pouvez pas télécharger de PDF cryptés" -#: apps/web/src/app/(dashboard)/settings/billing/page.tsx:97 -#~ msgid "You currently have an active plan" -#~ msgstr "You currently have an active plan" - #: apps/web/src/app/(dashboard)/settings/billing/billing-portal-button.tsx:45 msgid "You do not currently have a customer record, this should not happen. Please contact support for assistance." msgstr "Vous n'avez actuellement pas de dossier client, cela ne devrait pas se produire. Veuillez contacter le support pour obtenir de l'aide." @@ -4282,7 +4413,7 @@ msgstr "Vous avez atteint la limite maximale de {0} modèles directs. <0>Mettez msgid "You have reached your document limit." msgstr "Vous avez atteint votre limite de documents." -#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:181 +#: apps/web/src/app/(dashboard)/templates/data-table-templates.tsx:182 msgid "You have reached your document limit. <0>Upgrade your account to continue!" msgstr "Vous avez atteint votre limite de documents. <0>Mettez à niveau votre compte pour continuer !" @@ -4304,6 +4435,10 @@ msgstr "Vous avez retiré cet utilisateur de l'équipe avec succès." msgid "You have successfully revoked access." msgstr "Vous avez révoqué l'accès avec succès." +#: apps/web/src/app/(unauthenticated)/articles/signature-disclosure/page.tsx:104 +msgid "You have the right to withdraw your consent to use electronic signatures at any time before completing the signing process. To withdraw your consent, please contact the sender of the document. In failing to contact the sender you may reach out to <0>{SUPPORT_EMAIL} for assistance. Be aware that withdrawing consent may delay or halt the completion of the related transaction or service." +msgstr "Vous avez le droit de retirer votre consentement à l'utilisation des signatures électroniques à tout moment avant de terminer le processus de signature. Pour retirer votre consentement, veuillez contacter l'expéditeur du document. Si vous ne contactez pas l'expéditeur, vous pouvez contacter <0>{SUPPORT_EMAIL} pour obtenir de l'aide. Sachez que le retrait de consentement peut retarder ou arrêter l'achèvement de la transaction ou du service associé." + #: apps/web/src/components/(teams)/dialogs/update-team-member-dialog.tsx:93 msgid "You have updated {teamMemberName}." msgstr "Vous avez mis à jour {teamMemberName}." @@ -4316,10 +4451,6 @@ msgstr "Vous avez vérifié votre adresse e-mail pour <0>{0}." msgid "You must be an admin of this team to manage billing." msgstr "Vous devez être un administrateur de cette équipe pour gérer la facturation." -#: apps/web/src/components/(teams)/dialogs/transfer-team-dialog.tsx:80 -#~ msgid "You must enter '{confirmTransferMessage}' to proceed" -#~ msgstr "You must enter '{confirmTransferMessage}' to proceed" - #: apps/web/src/components/(dashboard)/settings/token/delete-token-dialog.tsx:60 #: apps/web/src/components/(dashboard)/settings/webhooks/delete-webhook-dialog.tsx:58 #: apps/web/src/components/(teams)/dialogs/delete-team-dialog.tsx:54 @@ -4382,7 +4513,7 @@ msgstr "Vos modèles de signature directe" msgid "Your document failed to upload." msgstr "Votre document a échoué à se télécharger." -#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:143 +#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:151 msgid "Your document has been created from the template successfully." msgstr "Votre document a été créé à partir du modèle avec succès." @@ -4390,7 +4521,7 @@ msgstr "Votre document a été créé à partir du modèle avec succès." msgid "Your document has been re-sent successfully." msgstr "Votre document a été renvoyé avec succès." -#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:322 +#: apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx:324 msgid "Your document has been sent successfully." msgstr "Votre document a été envoyé avec succès." @@ -4481,7 +4612,7 @@ msgstr "Votre modèle a été supprimé avec succès." msgid "Your template will be duplicated." msgstr "Votre modèle sera dupliqué." -#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:220 +#: apps/web/src/app/(dashboard)/templates/[id]/edit-template.tsx:224 msgid "Your templates has been saved successfully." msgstr "Vos modèles ont été enregistrés avec succès." @@ -4497,4 +4628,3 @@ msgstr "Votre jeton a été créé avec succès ! Assurez-vous de le copier car #: apps/web/src/app/(teams)/t/[teamUrl]/settings/tokens/page.tsx:86 msgid "Your tokens will be shown here once you create them." msgstr "Vos jetons seront affichés ici une fois que vous les aurez créés." - diff --git a/packages/lib/utils/i18n.ts b/packages/lib/utils/i18n.ts index 7c4f494a4..d568f1df0 100644 --- a/packages/lib/utils/i18n.ts +++ b/packages/lib/utils/i18n.ts @@ -1,6 +1,6 @@ import type { ReadonlyRequestCookies } from 'next/dist/server/web/spec-extension/adapters/request-cookies'; -import type { I18n } from '@lingui/core'; +import type { I18n, MessageDescriptor } from '@lingui/core'; import { IS_APP_WEB, IS_APP_WEB_I18N_ENABLED } from '../constants/app'; import type { I18nLocaleData, SupportedLanguageCodes } from '../constants/i18n'; @@ -10,7 +10,17 @@ export async function dynamicActivate(i18nInstance: I18n, locale: string) { const extension = process.env.NODE_ENV === 'development' ? 'po' : 'js'; const context = IS_APP_WEB ? 'web' : 'marketing'; - const { messages } = await import(`../translations/${locale}/${context}.${extension}`); + let { messages } = await import(`../translations/${locale}/${context}.${extension}`); + + // Dirty way to load common messages for development since it's not compiled. + if (process.env.NODE_ENV === 'development') { + const commonMessages = await import(`../translations/${locale}/common.${extension}`); + + messages = { + ...messages, + ...commonMessages.messages, + }; + } i18nInstance.loadAndActivate({ locale, messages }); } @@ -106,3 +116,7 @@ export const extractLocaleData = ({ locales, }; }; + +export const parseMessageDescriptor = (_: I18n['_'], value: string | MessageDescriptor) => { + return typeof value === 'string' ? value : _(value); +}; diff --git a/packages/lib/utils/is-valid-redirect-url.ts b/packages/lib/utils/is-valid-redirect-url.ts index e89818ac2..de827f69c 100644 --- a/packages/lib/utils/is-valid-redirect-url.ts +++ b/packages/lib/utils/is-valid-redirect-url.ts @@ -4,7 +4,6 @@ export const isValidRedirectUrl = (value: string) => { try { const url = new URL(value); - console.log({ protocol: url.protocol }); if (!ALLOWED_PROTOCOLS.includes(url.protocol.slice(0, -1).toLowerCase())) { return false; } diff --git a/packages/lib/utils/remember.ts b/packages/lib/utils/remember.ts new file mode 100644 index 000000000..1ee146dd1 --- /dev/null +++ b/packages/lib/utils/remember.ts @@ -0,0 +1,18 @@ +declare global { + // eslint-disable-next-line no-var, @typescript-eslint/no-explicit-any + var __documenso_util_remember: Map; +} + +export function remember(name: string, getValue: () => T): T { + const thusly = globalThis; + + if (!thusly.__documenso_util_remember) { + thusly.__documenso_util_remember = new Map(); + } + + if (!thusly.__documenso_util_remember.has(name)) { + thusly.__documenso_util_remember.set(name, getValue()); + } + + return thusly.__documenso_util_remember.get(name); +} diff --git a/packages/lib/utils/render-email-with-i18n.tsx b/packages/lib/utils/render-email-with-i18n.tsx new file mode 100644 index 000000000..172e8d563 --- /dev/null +++ b/packages/lib/utils/render-email-with-i18n.tsx @@ -0,0 +1,36 @@ +import { I18nProvider } from '@lingui/react'; + +import { render } from '@documenso/email/render'; + +import { getI18nInstance } from '../client-only/providers/i18n.server'; +import { + APP_I18N_OPTIONS, + type SupportedLanguageCodes, + isValidLanguageCode, +} from '../constants/i18n'; + +export const renderEmailWithI18N = async ( + component: React.ReactElement, + options?: { + plainText?: boolean; + // eslint-disable-next-line @typescript-eslint/ban-types + lang?: SupportedLanguageCodes | (string & {}); + }, +) => { + try { + const providedLang = options?.lang; + + const lang = isValidLanguageCode(providedLang) ? providedLang : APP_I18N_OPTIONS.sourceLang; + + const i18n = await getI18nInstance(lang); + + i18n.activate(lang); + + return render({component}, { + plainText: options?.plainText, + }); + } catch (err) { + console.error(err); + throw new Error('Failed to render email'); + } +}; diff --git a/packages/prisma/migrations/20241101103425_add_language_column_for_documents_and_templates/migration.sql b/packages/prisma/migrations/20241101103425_add_language_column_for_documents_and_templates/migration.sql new file mode 100644 index 000000000..5a4dde1d8 --- /dev/null +++ b/packages/prisma/migrations/20241101103425_add_language_column_for_documents_and_templates/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "DocumentMeta" ADD COLUMN "language" TEXT NOT NULL DEFAULT 'en'; + +-- AlterTable +ALTER TABLE "TemplateMeta" ADD COLUMN "language" TEXT NOT NULL DEFAULT 'en'; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 7c858c897..343ee2988 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -370,6 +370,7 @@ model DocumentMeta { redirectUrl String? signingOrder DocumentSigningOrder @default(PARALLEL) typedSignatureEnabled Boolean @default(false) + language String @default("en") } enum ReadStatus { @@ -612,6 +613,7 @@ model TemplateMeta { templateId Int @unique template Template @relation(fields: [templateId], references: [id], onDelete: Cascade) redirectUrl String? + language String @default("en") } model Template { diff --git a/packages/trpc/server/document-router/router.ts b/packages/trpc/server/document-router/router.ts index e869eb9a4..d49dd07ef 100644 --- a/packages/trpc/server/document-router/router.ts +++ b/packages/trpc/server/document-router/router.ts @@ -232,6 +232,7 @@ export const documentRouter = router({ dateFormat: meta.dateFormat, timezone: meta.timezone, redirectUrl: meta.redirectUrl, + language: meta.language, userId: ctx.user.id, requestMetadata, }); diff --git a/packages/trpc/server/document-router/schema.ts b/packages/trpc/server/document-router/schema.ts index 8d3063315..64540b077 100644 --- a/packages/trpc/server/document-router/schema.ts +++ b/packages/trpc/server/document-router/schema.ts @@ -1,5 +1,6 @@ import { z } from 'zod'; +import { SUPPORTED_LANGUAGE_CODES } from '@documenso/lib/constants/i18n'; import { ZDocumentAccessAuthTypesSchema, ZDocumentActionAuthTypesSchema, @@ -70,6 +71,7 @@ export const ZSetSettingsForDocumentMutationSchema = z.object({ message: 'Please enter a valid URL, make sure you include http:// or https:// part of the url.', }), + language: z.enum(SUPPORTED_LANGUAGE_CODES).optional(), }), }); diff --git a/packages/trpc/server/singleplayer-router/router.ts b/packages/trpc/server/singleplayer-router/router.ts index 6e8533c32..5cf62cb53 100644 --- a/packages/trpc/server/singleplayer-router/router.ts +++ b/packages/trpc/server/singleplayer-router/router.ts @@ -3,7 +3,6 @@ import { createElement } from 'react'; import { PDFDocument } from 'pdf-lib'; import { mailer } from '@documenso/email/mailer'; -import { renderAsync } from '@documenso/email/render'; import { DocumentSelfSignedEmailTemplate } from '@documenso/email/templates/document-self-signed'; import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { FROM_ADDRESS, FROM_NAME, SERVICE_USER_EMAIL } from '@documenso/lib/constants/email'; @@ -11,6 +10,7 @@ import { insertFieldInPDF } from '@documenso/lib/server-only/pdf/insert-field-in import { alphaid } from '@documenso/lib/universal/id'; import { getFile } from '@documenso/lib/universal/upload/get-file'; import { putPdfFile } from '@documenso/lib/universal/upload/put-file'; +import { renderEmailWithI18N } from '@documenso/lib/utils/render-email-with-i18n'; import { prisma } from '@documenso/prisma'; import { DocumentSource, @@ -158,8 +158,8 @@ export const singleplayerRouter = router({ }); const [html, text] = await Promise.all([ - renderAsync(template), - renderAsync(template, { plainText: true }), + renderEmailWithI18N(template), + renderEmailWithI18N(template, { plainText: true }), ]); // Send email to signer. diff --git a/packages/trpc/server/template-router/router.ts b/packages/trpc/server/template-router/router.ts index a1a17d688..ddd4a73ad 100644 --- a/packages/trpc/server/template-router/router.ts +++ b/packages/trpc/server/template-router/router.ts @@ -1,6 +1,7 @@ import { TRPCError } from '@trpc/server'; import { getServerLimits } from '@documenso/ee/server-only/limits/server'; +import { isValidLanguageCode } from '@documenso/lib/constants/i18n'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { sendDocument } from '@documenso/lib/server-only/document/send-document'; import { createDocumentFromDirectTemplate } from '@documenso/lib/server-only/template/create-document-from-direct-template'; @@ -214,7 +215,10 @@ export const templateRouter = router({ teamId, templateId, data, - meta, + meta: { + ...meta, + language: isValidLanguageCode(meta?.language) ? meta?.language : undefined, + }, requestMetadata, }); } catch (err) { diff --git a/packages/trpc/server/template-router/schema.ts b/packages/trpc/server/template-router/schema.ts index d7807ad3d..41847a333 100644 --- a/packages/trpc/server/template-router/schema.ts +++ b/packages/trpc/server/template-router/schema.ts @@ -1,5 +1,6 @@ import { z } from 'zod'; +import { SUPPORTED_LANGUAGE_CODES } from '@documenso/lib/constants/i18n'; import { ZDocumentAccessAuthTypesSchema, ZDocumentActionAuthTypesSchema, @@ -87,6 +88,10 @@ export const ZUpdateTemplateSettingsMutationSchema = z.object({ .max(MAX_TEMPLATE_PUBLIC_DESCRIPTION_LENGTH) .optional(), type: z.nativeEnum(TemplateType).optional(), + language: z + .union([z.string(), z.enum(SUPPORTED_LANGUAGE_CODES)]) + .optional() + .default('en'), }), meta: z .object({ @@ -101,6 +106,7 @@ export const ZUpdateTemplateSettingsMutationSchema = z.object({ message: 'Please enter a valid URL, make sure you include http:// or https:// part of the url.', }), + language: z.enum(SUPPORTED_LANGUAGE_CODES).optional(), }) .optional(), }); diff --git a/packages/ui/components/document/document-share-button.tsx b/packages/ui/components/document/document-share-button.tsx index bcf888838..bfaeb6afd 100644 --- a/packages/ui/components/document/document-share-button.tsx +++ b/packages/ui/components/document/document-share-button.tsx @@ -139,12 +139,16 @@ export const DocumentShareButton = ({ - Share your signing experience! + + Share your signing experience! + - Rest assured, your document is strictly confidential and will never be shared. Only your - signing experience will be highlighted. Share your personalized signing card to showcase - your signature! + + Rest assured, your document is strictly confidential and will never be shared. Only + your signing experience will be highlighted. Share your personalized signing card to + showcase your signature! + @@ -187,7 +191,7 @@ export const DocumentShareButton = ({
diff --git a/packages/ui/primitives/document-flow/add-fields.tsx b/packages/ui/primitives/document-flow/add-fields.tsx index a7903f2e8..3adb96b5e 100644 --- a/packages/ui/primitives/document-flow/add-fields.tsx +++ b/packages/ui/primitives/document-flow/add-fields.tsx @@ -5,6 +5,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Caveat } from 'next/font/google'; import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; import { Prisma } from '@prisma/client'; import { CalendarDays, @@ -34,6 +35,7 @@ import { } from '@documenso/lib/types/field-meta'; import { nanoid } from '@documenso/lib/universal/id'; import { validateFieldsUninserted } from '@documenso/lib/utils/fields'; +import { parseMessageDescriptor } from '@documenso/lib/utils/i18n'; import { canRecipientBeModified, canRecipientFieldsBeModified, @@ -114,6 +116,7 @@ export const AddFieldsFormPartial = ({ teamId, }: AddFieldsFormProps) => { const { toast } = useToast(); + const { _ } = useLingui(); const [isMissingSignatureDialogVisible, setIsMissingSignatureDialogVisible] = useState(false); @@ -568,7 +571,10 @@ export const AddFieldsFormPartial = ({ {showAdvancedSettings && currentField ? ( - {FRIENDLY_FIELD_TYPE[selectedField]} + {parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[selectedField])}
)} @@ -684,8 +690,7 @@ export const AddFieldsFormPartial = ({ {recipientsByRoleToDisplay.map(([role, roleRecipients], roleIndex) => (
- {/* Todo: Translations - Add plural translations. */} - {`${RECIPIENT_ROLES_DESCRIPTION_ENG[role].roleName}s`} + {_(RECIPIENT_ROLES_DESCRIPTION_ENG[role].roleNamePlural)}
{roleRecipients.length === 0 && ( @@ -997,7 +1002,7 @@ export const AddFieldsFormPartial = ({ )} > - Radio + Radio

@@ -1023,7 +1028,8 @@ export const AddFieldsFormPartial = ({ )} > - Checkbox + {/* Not translated on purpose. */} + Checkbox

diff --git a/packages/ui/primitives/document-flow/add-settings.tsx b/packages/ui/primitives/document-flow/add-settings.tsx index 06cf5e9ea..9b73336f5 100644 --- a/packages/ui/primitives/document-flow/add-settings.tsx +++ b/packages/ui/primitives/document-flow/add-settings.tsx @@ -8,6 +8,7 @@ import { InfoIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { DATE_FORMATS, DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; +import { SUPPORTED_LANGUAGES } from '@documenso/lib/constants/i18n'; import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; import type { TeamMemberRole } from '@documenso/prisma/client'; @@ -98,6 +99,7 @@ export const AddSettingsFormPartial = ({ DATE_FORMATS.find((format) => format.value === document.documentMeta?.dateFormat) ?.value ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: document.documentMeta?.redirectUrl ?? '', + language: document.documentMeta?.language ?? 'en', }, }, }); @@ -165,6 +167,46 @@ export const AddSettingsFormPartial = ({ )} /> + ( + + + Language + + + + + + + Controls the language for the document, including the language to be used + for email notifications, and the final certificate that is generated and + attached to the document. + + + + + + + + + + )} + /> + ; diff --git a/packages/ui/primitives/document-flow/show-field-item.tsx b/packages/ui/primitives/document-flow/show-field-item.tsx index 5cc2885d6..ced978e7c 100644 --- a/packages/ui/primitives/document-flow/show-field-item.tsx +++ b/packages/ui/primitives/document-flow/show-field-item.tsx @@ -2,10 +2,12 @@ import { Caveat } from 'next/font/google'; +import { useLingui } from '@lingui/react'; import type { Prisma } from '@prisma/client'; import { createPortal } from 'react-dom'; import { useFieldPageCoords } from '@documenso/lib/client-only/hooks/use-field-page-coords'; +import { parseMessageDescriptor } from '@documenso/lib/utils/i18n'; import { FieldType } from '@documenso/prisma/client'; import { cn } from '../../lib/utils'; @@ -25,6 +27,8 @@ export type ShowFieldItemProps = { }; export const ShowFieldItem = ({ field, recipients }: ShowFieldItemProps) => { + const { _ } = useLingui(); + const coords = useFieldPageCoords(field); const signerEmail = @@ -47,7 +51,7 @@ export const ShowFieldItem = ({ field, recipients }: ShowFieldItemProps) => { field.type === FieldType.SIGNATURE && fontCaveat.className, )} > - {FRIENDLY_FIELD_TYPE[field.type]} + {parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[field.type])}

{signerEmail} diff --git a/packages/ui/primitives/document-flow/types.ts b/packages/ui/primitives/document-flow/types.ts index c98d71434..ca43ae2fc 100644 --- a/packages/ui/primitives/document-flow/types.ts +++ b/packages/ui/primitives/document-flow/types.ts @@ -1,4 +1,5 @@ import type { MessageDescriptor } from '@lingui/core'; +import { msg } from '@lingui/macro'; import { z } from 'zod'; import { ZFieldMetaSchema } from '@documenso/lib/types/field-meta'; @@ -44,18 +45,18 @@ export const ZDocumentFlowFormSchema = z.object({ export type TDocumentFlowFormSchema = z.infer; -export const FRIENDLY_FIELD_TYPE: Record = { - [FieldType.SIGNATURE]: 'Signature', - [FieldType.FREE_SIGNATURE]: 'Free Signature', - [FieldType.INITIALS]: 'Initials', - [FieldType.TEXT]: 'Text', - [FieldType.DATE]: 'Date', - [FieldType.EMAIL]: 'Email', - [FieldType.NAME]: 'Name', - [FieldType.NUMBER]: 'Number', - [FieldType.RADIO]: 'Radio', - [FieldType.CHECKBOX]: 'Checkbox', - [FieldType.DROPDOWN]: 'Select', +export const FRIENDLY_FIELD_TYPE: Record = { + [FieldType.SIGNATURE]: msg`Signature`, + [FieldType.FREE_SIGNATURE]: msg`Free Signature`, + [FieldType.INITIALS]: msg`Initials`, + [FieldType.TEXT]: msg`Text`, + [FieldType.DATE]: msg`Date`, + [FieldType.EMAIL]: msg`Email`, + [FieldType.NAME]: msg`Name`, + [FieldType.NUMBER]: msg`Number`, + [FieldType.RADIO]: `Radio`, + [FieldType.CHECKBOX]: `Checkbox`, + [FieldType.DROPDOWN]: `Select`, }; export interface DocumentFlowStep { diff --git a/packages/ui/primitives/form/form-error-message.tsx b/packages/ui/primitives/form/form-error-message.tsx index e429799da..7de28b585 100644 --- a/packages/ui/primitives/form/form-error-message.tsx +++ b/packages/ui/primitives/form/form-error-message.tsx @@ -1,3 +1,4 @@ +import { useLingui } from '@lingui/react'; import { AnimatePresence, motion } from 'framer-motion'; import { cn } from '../../lib/utils'; @@ -12,6 +13,15 @@ const isErrorWithMessage = (error: unknown): error is { message?: string } => { }; export const FormErrorMessage = ({ error, className }: FormErrorMessageProps) => { + const { i18n } = useLingui(); + + let errorMessage = isErrorWithMessage(error) ? error.message : ''; + + // Checks to see if there's a translation for the string, since we're passing IDs for Zod errors. + if (typeof errorMessage === 'string' && i18n.t(errorMessage)) { + errorMessage = i18n.t(errorMessage); + } + return ( {isErrorWithMessage(error) && ( @@ -30,7 +40,7 @@ export const FormErrorMessage = ({ error, className }: FormErrorMessageProps) => }} className={cn('text-xs text-red-500', className)} > - {error.message} + {errorMessage} )} diff --git a/packages/ui/primitives/form/form.tsx b/packages/ui/primitives/form/form.tsx index f500accae..6614fccbe 100644 --- a/packages/ui/primitives/form/form.tsx +++ b/packages/ui/primitives/form/form.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; +import { useLingui } from '@lingui/react'; import type * as LabelPrimitive from '@radix-ui/react-label'; import { Slot } from '@radix-ui/react-slot'; import { AnimatePresence, motion } from 'framer-motion'; @@ -136,13 +137,21 @@ const FormMessage = React.forwardRef< HTMLParagraphElement, React.HTMLAttributes >(({ className, children, ...props }, ref) => { + const { i18n } = useLingui(); + const { error, formMessageId } = useFormField(); - const body = error ? String(error?.message) : children; + + let body = error ? String(error?.message) : children; if (!body) { return null; } + // Checks to see if there's a translation for the string, since we're passing IDs for Zod errors. + if (typeof body === 'string' && i18n.t(body)) { + body = i18n.t(body); + } + return ( import('./pdf-viewer'), { @@ -10,7 +11,9 @@ export const LazyPDFViewer = dynamic(async () => import('./pdf-viewer'), {

-

Loading document...

+

+ Loading document... +

), }); diff --git a/packages/ui/primitives/pdf-viewer.tsx b/packages/ui/primitives/pdf-viewer.tsx index a1bce432d..95a380eb5 100644 --- a/packages/ui/primitives/pdf-viewer.tsx +++ b/packages/ui/primitives/pdf-viewer.tsx @@ -2,6 +2,8 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; import { Loader } from 'lucide-react'; import { type PDFDocumentProxy, PasswordResponses } from 'pdfjs-dist'; import { Document as PDFDocument, Page as PDFPage, pdfjs } from 'react-pdf'; @@ -38,7 +40,9 @@ const PDFLoader = () => ( <> -

Loading document...

+

+ Loading document... +

); @@ -61,6 +65,7 @@ export const PDFViewer = ({ onPageClick, ...props }: PDFViewerProps) => { + const { _ } = useLingui(); const { toast } = useToast(); const $el = useRef(null); @@ -158,8 +163,8 @@ export const PDFViewer = ({ console.error(err); toast({ - title: 'Error', - description: 'An error occurred while loading the document.', + title: _(msg`Error`), + description: _(msg`An error occurred while loading the document.`), variant: 'destructive', }); } @@ -211,8 +216,12 @@ export const PDFViewer = ({
{pdfError ? (
-

Something went wrong while loading the document.

-

Please try again or contact our support.

+

+ Something went wrong while loading the document. +

+

+ Please try again or contact our support. +

) : ( @@ -222,8 +231,12 @@ export const PDFViewer = ({ error={
-

Something went wrong while loading the document.

-

Please try again or contact our support.

+

+ Something went wrong while loading the document. +

+

+ Please try again or contact our support. +

} @@ -243,7 +256,9 @@ export const PDFViewer = ({ />

- Page {i + 1} of {numPages} + + Page {i + 1} of {numPages} +

))} diff --git a/packages/ui/primitives/template-flow/add-template-fields.tsx b/packages/ui/primitives/template-flow/add-template-fields.tsx index 4070c0932..ec5bcef07 100644 --- a/packages/ui/primitives/template-flow/add-template-fields.tsx +++ b/packages/ui/primitives/template-flow/add-template-fields.tsx @@ -5,6 +5,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Caveat } from 'next/font/google'; import { Trans, msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; import { CalendarDays, CheckSquare, @@ -28,6 +29,7 @@ import { ZFieldMetaSchema, } from '@documenso/lib/types/field-meta'; import { nanoid } from '@documenso/lib/universal/id'; +import { parseMessageDescriptor } from '@documenso/lib/utils/i18n'; import type { Field, Recipient } from '@documenso/prisma/client'; import { FieldType, RecipientRole } from '@documenso/prisma/client'; import { cn } from '@documenso/ui/lib/utils'; @@ -85,6 +87,8 @@ export const AddTemplateFieldsFormPartial = ({ onSubmit, teamId, }: AddTemplateFieldsFormProps) => { + const { _ } = useLingui(); + const { isWithinPageBounds, getFieldPosition, getPage } = useDocumentElement(); const { currentStep, totalSteps, previousStep } = useStep(); const [showAdvancedSettings, setShowAdvancedSettings] = useState(false); @@ -400,7 +404,10 @@ export const AddTemplateFieldsFormPartial = ({ {showAdvancedSettings && currentField ? ( - {FRIENDLY_FIELD_TYPE[selectedField]} + {parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[selectedField])}
)} @@ -501,8 +508,7 @@ export const AddTemplateFieldsFormPartial = ({ {recipientsByRoleToDisplay.map(([role, roleRecipients], roleIndex) => (
- {/* Todo: Translations - Add plural translations. */} - {`${RECIPIENT_ROLES_DESCRIPTION_ENG[role].roleName}s`} + {_(RECIPIENT_ROLES_DESCRIPTION_ENG[role].roleNamePlural)}
{roleRecipients.length === 0 && ( @@ -785,7 +791,7 @@ export const AddTemplateFieldsFormPartial = ({ )} > - Checkbox + Checkbox

diff --git a/packages/ui/primitives/template-flow/add-template-settings.tsx b/packages/ui/primitives/template-flow/add-template-settings.tsx index 73302ae55..32ca37abe 100644 --- a/packages/ui/primitives/template-flow/add-template-settings.tsx +++ b/packages/ui/primitives/template-flow/add-template-settings.tsx @@ -4,11 +4,11 @@ import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; import { InfoIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { DATE_FORMATS, DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; +import { SUPPORTED_LANGUAGES } from '@documenso/lib/constants/i18n'; import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; import { type Field, type Recipient } from '@documenso/prisma/client'; @@ -74,8 +74,6 @@ export const AddTemplateSettingsFormPartial = ({ template, onSubmit, }: AddTemplateSettingsFormProps) => { - const { _ } = useLingui(); - const { documentAuthOption } = extractDocumentAuthMethods({ documentAuth: template.authOptions, }); @@ -93,6 +91,7 @@ export const AddTemplateSettingsFormPartial = ({ timezone: template.templateMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, dateFormat: template.templateMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: template.templateMeta?.redirectUrl ?? '', + language: template.templateMeta?.language ?? 'en', }, }, }); @@ -102,7 +101,7 @@ export const AddTemplateSettingsFormPartial = ({ // We almost always want to set the timezone to the user's local timezone to avoid confusion // when the document is signed. useEffect(() => { - if (!form.formState.touchedFields.meta?.timezone) { + if (!form.formState.touchedFields.meta?.timezone && !template.templateMeta?.timezone) { form.setValue('meta.timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); } }, [form, form.setValue, form.formState.touchedFields.meta?.timezone]); @@ -142,6 +141,46 @@ export const AddTemplateSettingsFormPartial = ({ )} /> + ( + + + Language + + + + + + + Controls the language for the document, including the language to be used + for email notifications, and the final certificate that is generated and + attached to the document. + + + + + + + + + + )} + /> +