From e87aa2982316efd17c15ebecdeabdcd336455601 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Thu, 19 Mar 2026 15:44:53 +1100 Subject: [PATCH] feat: add page title translations (#2629) --- .../routes/_authenticated+/admin+/_layout.tsx | 6 ++ .../app/routes/_authenticated+/dashboard.tsx | 27 ++++----- .../app/routes/_authenticated+/inbox.tsx | 7 ++- .../o.$orgUrl.settings._layout.tsx | 2 +- .../o.$orgUrl.settings.billing.tsx | 3 +- .../o.$orgUrl.settings.branding.tsx | 3 +- .../o.$orgUrl.settings.document.tsx | 3 +- ....$orgUrl.settings.email-domains._index.tsx | 3 +- .../o.$orgUrl.settings.email.tsx | 3 +- .../o.$orgUrl.settings.general.tsx | 2 +- .../o.$orgUrl.settings.sso.tsx | 14 ++--- .../_authenticated+/o.$orgUrl.support.tsx | 19 ++++--- .../_authenticated+/settings+/_layout.tsx | 3 +- .../_authenticated+/settings+/billing.tsx | 3 +- .../_authenticated+/settings+/profile.tsx | 2 +- .../settings+/security._index.tsx | 4 +- .../settings+/security.activity.tsx | 2 +- .../settings+/security.linked-accounts.tsx | 3 +- .../settings+/security.passkeys.tsx | 2 +- .../settings+/security.sessions.tsx | 3 +- .../t.$teamUrl+/documents._index.tsx | 3 +- .../t.$teamUrl+/documents.folders._index.tsx | 3 +- .../t.$teamUrl+/settings._layout.tsx | 2 +- .../t.$teamUrl+/settings.branding.tsx | 5 +- .../t.$teamUrl+/settings.document.tsx | 3 +- .../t.$teamUrl+/settings.email.tsx | 3 +- .../t.$teamUrl+/settings.public-profile.tsx | 3 +- .../t.$teamUrl+/settings.tokens.tsx | 13 +++-- .../settings.webhooks.$id._index.tsx | 14 ++--- .../t.$teamUrl+/settings.webhooks._index.tsx | 24 ++------ .../t.$teamUrl+/templates._index.tsx | 3 +- .../t.$teamUrl+/templates.folders._index.tsx | 3 +- apps/remix/app/routes/_profile+/_layout.tsx | 8 +-- .../routes/_unauthenticated+/check-email.tsx | 5 +- .../_unauthenticated+/forgot-password.tsx | 7 ++- .../_unauthenticated+/o.$orgUrl.signin.tsx | 22 ++++---- .../reset-password.$token.tsx | 7 ++- .../reset-password._index.tsx | 5 +- .../app/routes/_unauthenticated+/signin.tsx | 3 +- .../app/routes/_unauthenticated+/signup.tsx | 3 +- .../_unauthenticated+/verify-email._index.tsx | 7 ++- apps/remix/app/utils/meta.ts | 6 +- packages/lib/translations/de/web.po | 56 +++++++++++++++++++ packages/lib/translations/en/web.po | 56 +++++++++++++++++++ packages/lib/translations/es/web.po | 56 +++++++++++++++++++ packages/lib/translations/fr/web.po | 56 +++++++++++++++++++ packages/lib/translations/it/web.po | 56 +++++++++++++++++++ packages/lib/translations/ja/web.po | 56 +++++++++++++++++++ packages/lib/translations/ko/web.po | 56 +++++++++++++++++++ packages/lib/translations/nl/web.po | 56 +++++++++++++++++++ packages/lib/translations/pl/web.po | 56 +++++++++++++++++++ packages/lib/translations/pt-BR/web.po | 56 +++++++++++++++++++ packages/lib/translations/zh/web.po | 56 +++++++++++++++++++ 53 files changed, 761 insertions(+), 121 deletions(-) diff --git a/apps/remix/app/routes/_authenticated+/admin+/_layout.tsx b/apps/remix/app/routes/_authenticated+/admin+/_layout.tsx index a3e6ac2f2..c874b4c92 100644 --- a/apps/remix/app/routes/_authenticated+/admin+/_layout.tsx +++ b/apps/remix/app/routes/_authenticated+/admin+/_layout.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { AlertTriangleIcon, @@ -19,9 +20,14 @@ import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { AdminLicenseStatusBanner } from '~/components/general/admin-license-status-banner'; +import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/_layout'; +export function meta() { + return appMetaTags(msg`Admin`); +} + export async function loader({ request }: Route.LoaderArgs) { const { user } = await getSession(request); diff --git a/apps/remix/app/routes/_authenticated+/dashboard.tsx b/apps/remix/app/routes/_authenticated+/dashboard.tsx index d4ead7fb1..904ce2e4a 100644 --- a/apps/remix/app/routes/_authenticated+/dashboard.tsx +++ b/apps/remix/app/routes/_authenticated+/dashboard.tsx @@ -1,5 +1,6 @@ import { useMemo } from 'react'; +import { msg } from '@lingui/core/macro'; import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { Building2Icon, InboxIcon, SettingsIcon, UsersIcon } from 'lucide-react'; import { DateTime } from 'luxon'; @@ -25,7 +26,7 @@ export function loader() { } export function meta() { - return appMetaTags('Dashboard'); + return appMetaTags(msg`Dashboard`); } export default function DashboardPage() { @@ -54,7 +55,7 @@ export default function DashboardPage() {

Dashboard

-

+

Welcome back! Here's an overview of your account.

@@ -69,7 +70,7 @@ export default function DashboardPage() {

No organisations found

-

+

Create an organisation to get started.

@@ -87,7 +88,7 @@ export default function DashboardPage() {
- +

Organisations

@@ -104,7 +105,7 @@ export default function DashboardPage() { {organisations.map((org) => (
- +
@@ -118,7 +119,7 @@ export default function DashboardPage() {

{org.name}

-
+
@@ -148,7 +149,7 @@ export default function DashboardPage() { 'MANAGE_ORGANISATION', org.currentOrganisationRole, ) && ( -
+
@@ -165,7 +166,7 @@ export default function DashboardPage() {
- +

Teams

@@ -183,7 +184,7 @@ export default function DashboardPage() { {teams.map((team) => (
- +
@@ -197,7 +198,7 @@ export default function DashboardPage() {

{team.name}

-
+
{team.organisation.ownerUserId === user.id @@ -211,7 +212,7 @@ export default function DashboardPage() {
-
+
Joined{' '} {DateTime.fromJSDate(team.createdAt).toRelative({ style: 'short' })} @@ -222,7 +223,7 @@ export default function DashboardPage() { {canExecuteTeamAction('MANAGE_TEAM', team.currentTeamRole) && ( -
+
@@ -240,7 +241,7 @@ export default function DashboardPage() {
- +

Personal Inbox

diff --git a/apps/remix/app/routes/_authenticated+/inbox.tsx b/apps/remix/app/routes/_authenticated+/inbox.tsx index fdf4732d7..b9fd7d5c3 100644 --- a/apps/remix/app/routes/_authenticated+/inbox.tsx +++ b/apps/remix/app/routes/_authenticated+/inbox.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { InboxIcon } from 'lucide-react'; @@ -6,7 +7,7 @@ import { InboxTable } from '~/components/tables/inbox-table'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Personal Inbox'); + return appMetaTags(msg`Personal Inbox`); } export default function InboxPage() { @@ -14,11 +15,11 @@ export default function InboxPage() {

- + Personal Inbox

-

+

Any documents that you have been invited to will appear here

diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx index 1ef247147..db96e1cad 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings._layout.tsx @@ -22,7 +22,7 @@ import { GenericErrorLayout } from '~/components/general/generic-error-layout'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Organisation Settings'); + return appMetaTags(msg`Organisation Settings`); } export default function SettingsLayout() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx index b548ef777..b7fbcf8a1 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.billing.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { SubscriptionStatus } from '@prisma/client'; @@ -15,7 +16,7 @@ import { OrganisationBillingInvoicesTable } from '~/components/tables/organisati import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Billing'); + return appMetaTags(msg`Billing`); } export default function TeamsSettingBillingPage() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx index 5d71baaf9..64f8511ed 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.branding.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans, useLingui } from '@lingui/react/macro'; import { Loader } from 'lucide-react'; import { Link } from 'react-router'; @@ -21,7 +22,7 @@ import { useOptionalCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Branding Preferences'); + return appMetaTags(msg`Branding Preferences`); } export default function OrganisationSettingsBrandingPage() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx index fc6b0b644..6adaaa96a 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.document.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Loader } from 'lucide-react'; import { useLoaderData } from 'react-router'; @@ -18,7 +19,7 @@ import { SettingsHeader } from '~/components/general/settings-header'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Document Preferences'); + return appMetaTags(msg`Document Preferences`); } export const loader = () => { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx index e2b988a79..c7124073f 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email-domains._index.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans, useLingui } from '@lingui/react/macro'; import { Link } from 'react-router'; @@ -14,7 +15,7 @@ import { OrganisationEmailDomainsDataTable } from '~/components/tables/organisat import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Email Domains'); + return appMetaTags(msg`Email Domains`); } export default function OrganisationSettingsEmailDomains() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx index ebb448c76..08704e3f6 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.email.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { useCurrentOrganisation } from '@documenso/lib/client-only/providers/organisation'; @@ -13,7 +14,7 @@ import { SettingsHeader } from '~/components/general/settings-header'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Email Preferences'); + return appMetaTags(msg`Email Preferences`); } export default function OrganisationSettingsGeneral() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.general.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.general.tsx index c41ee7ad1..f58187f1d 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.general.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.general.tsx @@ -13,7 +13,7 @@ import { SettingsHeader } from '~/components/general/settings-header'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Settings'); + return appMetaTags(msg`Settings`); } export default function OrganisationSettingsGeneral() { diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx index db6b7c38d..660728b97 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx @@ -69,7 +69,7 @@ const ZProviderFormSchema = ZUpdateOrganisationAuthenticationPortalRequestSchema type TProviderFormSchema = z.infer; export function meta() { - return appMetaTags('Organisation SSO Portal'); + return appMetaTags(msg`Organisation SSO Portal`); } export default function OrganisationSettingSSOLoginPage() { @@ -205,7 +205,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => {
-

+

This is the URL which users will use to sign in to your organisation.

@@ -229,7 +229,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => {
-

+

Add this URL to your provider's allowed redirect URIs

@@ -241,7 +241,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => { -

+

This is the required scopes you must set in your provider's settings

@@ -262,7 +262,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => { {!form.formState.errors.wellKnownUrl && ( -

+

The OpenID discovery endpoint URL for your provider

)} @@ -356,7 +356,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => { {!form.formState.errors.allowedDomains && ( -

+

Space-separated list of domains. Leave empty to allow all domains. @@ -399,7 +399,7 @@ const SSOProviderForm = ({ authenticationPortal }: SSOProviderFormProps) => { Enable SSO portal -

+

Whether to enable the SSO portal for your organisation

diff --git a/apps/remix/app/routes/_authenticated+/o.$orgUrl.support.tsx b/apps/remix/app/routes/_authenticated+/o.$orgUrl.support.tsx index dc27400d3..d48192708 100644 --- a/apps/remix/app/routes/_authenticated+/o.$orgUrl.support.tsx +++ b/apps/remix/app/routes/_authenticated+/o.$orgUrl.support.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { BookIcon, HelpCircleIcon, Link2Icon } from 'lucide-react'; import { Link, useSearchParams } from 'react-router'; @@ -13,7 +14,7 @@ import { SupportTicketForm } from '~/components/forms/support-ticket-form'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Support'); + return appMetaTags(msg`Support`); } export default function SupportPage() { @@ -39,18 +40,18 @@ export default function SupportPage() {

- + Support

-

+

Your current plan includes the following support channels:

- + Documentation

-

+

Read our documentation to get started with Documenso.

- + Discord

-

+

Join our community on{' '}

- + Contact us

-

+

We'll get back to you as soon as possible via email.

diff --git a/apps/remix/app/routes/_authenticated+/settings+/_layout.tsx b/apps/remix/app/routes/_authenticated+/settings+/_layout.tsx index c1df197e9..77538de32 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/_layout.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/_layout.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Outlet } from 'react-router'; @@ -6,7 +7,7 @@ import { SettingsMobileNav } from '~/components/general/settings-nav-mobile'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Settings'); + return appMetaTags(msg`Settings`); } export default function SettingsLayout() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/billing.tsx b/apps/remix/app/routes/_authenticated+/settings+/billing.tsx index 92f666f97..fe2018031 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/billing.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/billing.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { SettingsHeader } from '~/components/general/settings-header'; @@ -5,7 +6,7 @@ import { UserBillingOrganisationsTable } from '~/components/tables/user-billing- import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Billing'); + return appMetaTags(msg`Billing`); } export default function SettingsBilling() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/profile.tsx b/apps/remix/app/routes/_authenticated+/settings+/profile.tsx index 48bceb31e..9e08ea685 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/profile.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/profile.tsx @@ -15,7 +15,7 @@ import { TeamEmailUsage } from '~/components/general/teams/team-email-usage'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Profile'); + return appMetaTags(msg`Profile`); } export default function SettingsProfile() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx b/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx index 5d878d971..105a45a12 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security._index.tsx @@ -19,7 +19,7 @@ import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/security._index'; export function meta() { - return appMetaTags('Security'); + return appMetaTags(msg`Security`); } export async function loader({ request }: Route.LoaderArgs) { @@ -71,7 +71,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) { <> -
+
)} diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx index 7156ee09e..0ea7a7b1d 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.activity.tsx @@ -6,7 +6,7 @@ import { SettingsSecurityActivityTable } from '~/components/tables/settings-secu import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Security activity'); + return appMetaTags(msg`Security activity`); } export default function SettingsSecurityActivity() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.linked-accounts.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.linked-accounts.tsx index 1c9c57914..9a23abeba 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.linked-accounts.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.linked-accounts.tsx @@ -1,5 +1,6 @@ import { useMemo, useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import { useQuery } from '@tanstack/react-query'; @@ -26,7 +27,7 @@ import { SettingsHeader } from '~/components/general/settings-header'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Linked Accounts'); + return appMetaTags(msg`Linked Accounts`); } export default function SettingsSecurityLinkedAccounts() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.passkeys.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.passkeys.tsx index 53bb2165f..0dd23da23 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.passkeys.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.passkeys.tsx @@ -7,7 +7,7 @@ import { SettingsSecurityPasskeyTable } from '~/components/tables/settings-secur import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Manage passkeys'); + return appMetaTags(msg`Manage passkeys`); } export default function SettingsPasskeys() { diff --git a/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx b/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx index 36762c6c4..2540f4271 100644 --- a/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx +++ b/apps/remix/app/routes/_authenticated+/settings+/security.sessions.tsx @@ -1,5 +1,6 @@ import { useMemo, useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import { useQuery } from '@tanstack/react-query'; @@ -21,7 +22,7 @@ import { SettingsHeader } from '~/components/general/settings-header'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Active Sessions'); + return appMetaTags(msg`Active Sessions`); } const parser = new UAParser(); diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents._index.tsx index 286b18ed5..24d1ce550 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents._index.tsx @@ -1,5 +1,6 @@ import { useEffect, useMemo, useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { EnvelopeType } from '@prisma/client'; import { FolderType, OrganisationType } from '@prisma/client'; @@ -38,7 +39,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Documents'); + return appMetaTags(msg`Documents`); } const ZSearchParamsSchema = ZFindDocumentsInternalRequestSchema.pick({ diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.folders._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.folders._index.tsx index 4f356f4d2..aeab0a25b 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.folders._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/documents.folders._index.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { Trans, useLingui } from '@lingui/react/macro'; import { FolderIcon, HomeIcon, Loader2, SearchIcon } from 'lucide-react'; import { Link, useSearchParams } from 'react-router'; @@ -19,7 +20,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Documents'); + return appMetaTags(msg`Documents`); } export default function DocumentsFoldersPage() { diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx index ab98512f9..7cb5ba4e9 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings._layout.tsx @@ -24,7 +24,7 @@ import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/settings._layout'; export function meta() { - return appMetaTags('Team Settings'); + return appMetaTags(msg`Team Settings`); } export async function loader({ request, params }: Route.LoaderArgs) { diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx index e13bcd030..a7317505f 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.branding.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Loader } from 'lucide-react'; @@ -14,7 +15,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Branding Preferences'); + return appMetaTags(msg`Branding Preferences`); } export default function TeamsSettingsPage() { @@ -69,7 +70,7 @@ export default function TeamsSettingsPage() { if (isLoadingTeam || !teamWithSettings) { return (
- +
); } diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx index a6089fddb..a99b83909 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.document.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Loader } from 'lucide-react'; import { useLoaderData } from 'react-router'; @@ -16,7 +17,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Document Preferences'); + return appMetaTags(msg`Document Preferences`); } export const loader = () => { diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.email.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.email.tsx index 244dbd2e4..7b54a3c89 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.email.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.email.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { trpc } from '@documenso/trpc/react'; @@ -13,7 +14,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Settings'); + return appMetaTags(msg`Settings`); } export default function TeamEmailSettingsGeneral() { diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx index ca23e60b2..38134de5b 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.public-profile.tsx @@ -1,5 +1,6 @@ import { useEffect, useMemo, useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import { type TemplateDirectLink, TemplateType } from '@prisma/client'; @@ -31,7 +32,7 @@ type DirectTemplate = FindTemplateRow & { }; export function meta() { - return appMetaTags('Public Profile'); + return appMetaTags(msg`Public Profile`); } // Todo: This can be optimized. diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx index 584a71197..2d1128c85 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.tokens.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { TeamMemberRole } from '@prisma/client'; @@ -15,7 +16,7 @@ import { useOptionalCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('API Tokens'); + return appMetaTags(msg`API Tokens`); } export default function ApiTokensPage() { @@ -70,7 +71,7 @@ export default function ApiTokensPage() { {tokens && tokens.length === 0 && (
-

+

Your tokens will be shown here once you create them.

@@ -79,24 +80,24 @@ export default function ApiTokensPage() { {tokens && tokens.length > 0 && (
{tokens.map((token) => ( -
+
{token.name}
-

+

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

{token.expires ? ( -

+

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

) : ( -

+

Token doesn't have an expiration date

)} diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks.$id._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks.$id._index.tsx index 999d7f550..cd76c00d1 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks.$id._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks.$id._index.tsx @@ -55,7 +55,7 @@ const WebhookSearchParamsSchema = ZUrlSearchParamsSchema.extend({ }); export function meta() { - return appMetaTags('Webhooks'); + return appMetaTags(msg`Webhooks`); } export default function WebhookPage({ params }: Route.ComponentProps) { @@ -151,10 +151,10 @@ export default function WebhookPage({ params }: Route.ComponentProps) { accessorKey: 'event', cell: ({ row }) => (
-

+

{toFriendlyWebhookEventName(row.original.event)}

-

{row.original.id}

+

{row.original.id}

), }, @@ -276,17 +276,17 @@ export default function WebhookPage({ params }: Route.ComponentProps) { - + All - + Success - + Failed @@ -375,7 +375,7 @@ const WebhookEventCombobox = () => { return ( +

Events: All diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx index 0e020e17f..2a3df8b43 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/settings.webhooks._index.tsx @@ -4,25 +4,13 @@ import { msg } from '@lingui/core/macro'; import { Plural, useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import type { Webhook } from '@prisma/client'; -import { - CheckCircle2Icon, - EditIcon, - Loader, - MoreHorizontalIcon, - ScrollTextIcon, - Trash2Icon, - XCircleIcon, -} from 'lucide-react'; -import { DateTime } from 'luxon'; +import { EditIcon, Loader, MoreHorizontalIcon, ScrollTextIcon, Trash2Icon } from 'lucide-react'; import { Link } from 'react-router'; import { toFriendlyWebhookEventName } from '@documenso/lib/universal/webhook/to-friendly-webhook-event-name'; import { trpc } from '@documenso/trpc/react'; -import { cn } from '@documenso/ui/lib/utils'; import { Badge } from '@documenso/ui/primitives/badge'; -import { Button } from '@documenso/ui/primitives/button'; import { DataTable, type DataTableColumnDef } from '@documenso/ui/primitives/data-table'; -import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination'; import { DropdownMenu, DropdownMenuContent, @@ -41,7 +29,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Webhooks'); + return appMetaTags(msg`Webhooks`); } export default function WebhookPage() { @@ -64,9 +52,9 @@ export default function WebhookPage() { header: t`Webhook`, cell: ({ row }) => ( -

{row.original.id}

+

{row.original.id}

{row.original.webhookUrl} @@ -130,7 +118,7 @@ export default function WebhookPage() { enable: isError, }} emptyState={ -

+

You have no webhooks yet. Your webhooks will be shown here once you create them. @@ -172,7 +160,7 @@ const WebhookTableActionDropdown = ({ webhook }: { webhook: Webhook }) => { return ( - + diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates._index.tsx index e53d138c0..24eda4582 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates._index.tsx @@ -1,5 +1,6 @@ import { useMemo, useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { EnvelopeType, OrganisationType } from '@prisma/client'; import { Bird } from 'lucide-react'; @@ -30,7 +31,7 @@ const TEMPLATE_VIEWS = ['team', 'organisation'] as const; type TemplateView = (typeof TEMPLATE_VIEWS)[number]; export function meta() { - return appMetaTags('Templates'); + return appMetaTags(msg`Templates`); } export default function TemplatesPage() { diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates.folders._index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates.folders._index.tsx index 250cb7f41..655d5708b 100644 --- a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates.folders._index.tsx +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/templates.folders._index.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; +import { msg } from '@lingui/core/macro'; import { Trans, useLingui } from '@lingui/react/macro'; import { FolderIcon, HomeIcon, Loader2, SearchIcon } from 'lucide-react'; import { Link, useSearchParams } from 'react-router'; @@ -19,7 +20,7 @@ import { useCurrentTeam } from '~/providers/team'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Templates'); + return appMetaTags(msg`Templates`); } export default function TemplatesFoldersPage() { diff --git a/apps/remix/app/routes/_profile+/_layout.tsx b/apps/remix/app/routes/_profile+/_layout.tsx index ef026df5a..22027dcf4 100644 --- a/apps/remix/app/routes/_profile+/_layout.tsx +++ b/apps/remix/app/routes/_profile+/_layout.tsx @@ -19,7 +19,7 @@ import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/_layout'; export function meta() { - return appMetaTags('Profile'); + return appMetaTags(msg`Profile`); } export default function PublicProfileLayout() { @@ -44,14 +44,14 @@ export default function PublicProfileLayout() { ) : (

5 && 'border-b-border', )} >
@@ -65,7 +65,7 @@ export default function PublicProfileLayout() {
-

+

Want your own public profile? diff --git a/apps/remix/app/routes/_unauthenticated+/check-email.tsx b/apps/remix/app/routes/_unauthenticated+/check-email.tsx index 7eeb06eb0..3024144d5 100644 --- a/apps/remix/app/routes/_unauthenticated+/check-email.tsx +++ b/apps/remix/app/routes/_unauthenticated+/check-email.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Link } from 'react-router'; @@ -6,7 +7,7 @@ import { Button } from '@documenso/ui/primitives/button'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Forgot password'); + return appMetaTags(msg`Forgot password`); } export default function ForgotPasswordPage() { @@ -17,7 +18,7 @@ export default function ForgotPasswordPage() { Email sent! -

+

A password reset email has been sent, if you have an account you should see it in your inbox shortly. diff --git a/apps/remix/app/routes/_unauthenticated+/forgot-password.tsx b/apps/remix/app/routes/_unauthenticated+/forgot-password.tsx index bd661be72..3dec8f7ec 100644 --- a/apps/remix/app/routes/_unauthenticated+/forgot-password.tsx +++ b/apps/remix/app/routes/_unauthenticated+/forgot-password.tsx @@ -1,3 +1,4 @@ +import { msg } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Link } from 'react-router'; @@ -5,7 +6,7 @@ import { ForgotPasswordForm } from '~/components/forms/forgot-password'; import { appMetaTags } from '~/utils/meta'; export function meta() { - return appMetaTags('Forgot Password'); + return appMetaTags(msg`Forgot Password`); } export default function ForgotPasswordPage() { @@ -16,7 +17,7 @@ export default function ForgotPasswordPage() { Forgot your password? -

+

No worries, it happens! Enter your email and we'll email you a special link to reset your password. @@ -25,7 +26,7 @@ export default function ForgotPasswordPage() { -

+

Remembered your password?{' '} diff --git a/apps/remix/app/routes/_unauthenticated+/o.$orgUrl.signin.tsx b/apps/remix/app/routes/_unauthenticated+/o.$orgUrl.signin.tsx index 1a1e26350..e55a70339 100644 --- a/apps/remix/app/routes/_unauthenticated+/o.$orgUrl.signin.tsx +++ b/apps/remix/app/routes/_unauthenticated+/o.$orgUrl.signin.tsx @@ -19,7 +19,7 @@ import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/o.$orgUrl.signin'; export function meta() { - return appMetaTags('Sign In'); + return appMetaTags(msg`Sign In`); } export function ErrorBoundary() { @@ -127,14 +127,14 @@ export default function OrganisationSignIn({ loaderData }: Route.ComponentProps)

- +

Confirmation email sent

-

+

To gain access to your account, please confirm your email address by clicking on the confirmation link from your inbox. @@ -156,12 +156,12 @@ export default function OrganisationSignIn({ loaderData }: Route.ComponentProps) return (

-
+

Welcome to {organisationName}

-

+

Sign in to your account

@@ -177,7 +177,7 @@ export default function OrganisationSignIn({ loaderData }: Route.ComponentProps) />