diff --git a/apps/login/src/app/(login)/device/consent/page.tsx b/apps/login/src/app/(login)/device/consent/page.tsx index 75676cd7ff..9f257bca8c 100644 --- a/apps/login/src/app/(login)/device/consent/page.tsx +++ b/apps/login/src/app/(login)/device/consent/page.tsx @@ -1,5 +1,6 @@ import { ConsentScreen } from "@/components/consent"; import { DynamicTheme } from "@/components/dynamic-theme"; +import { Translated } from "@/components/translated"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { getBrandingSettings, @@ -7,22 +8,23 @@ import { getDeviceAuthorizationRequest, } from "@/lib/zitadel"; import { Organization } from "@zitadel/proto/zitadel/org/v2/org_pb"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { searchParams: Promise>; }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale }); const userCode = searchParams?.user_code; const requestId = searchParams?.requestId; const organization = searchParams?.organization; if (!userCode || !requestId) { - return
{t("error.noUserCode")}
; + return ( +
+ +
+ ); } const _headers = await headers(); @@ -34,7 +36,11 @@ export default async function Page(props: { }); if (!deviceAuthorizationRequest) { - return
{t("error.noDeviceRequest")}
; + return ( +
+ +
+ ); } let defaultOrganization; @@ -66,15 +72,19 @@ export default async function Page(props: {

- {t("device.request.title", { - appName: deviceAuthorizationRequest?.appName, - })} +

- {t("device.request.description", { - appName: deviceAuthorizationRequest?.appName, - })} +

>; }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "device" }); const userCode = searchParams?.user_code; const organization = searchParams?.organization; @@ -37,8 +35,12 @@ export default async function Page(props: { return (
-

{t("usercode.title")}

-

{t("usercode.description")}

+

+ +

+

+ +

diff --git a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx index de6ad858d9..f2b7a19b91 100644 --- a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx @@ -1,6 +1,7 @@ import { Alert, AlertType } from "@/components/alert"; import { ChooseAuthenticatorToLogin } from "@/components/choose-authenticator-to-login"; import { DynamicTheme } from "@/components/dynamic-theme"; +import { Translated } from "@/components/translated"; import { UserAvatar } from "@/components/user-avatar"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { @@ -11,7 +12,6 @@ import { } from "@/lib/zitadel"; import { HumanUser, User } from "@zitadel/proto/zitadel/user/v2/user_pb"; import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { @@ -19,8 +19,6 @@ export default async function Page(props: { params: Promise<{ provider: string }>; }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "idp" }); const { organization, userId } = searchParams; @@ -77,8 +75,12 @@ export default async function Page(props: { return (
-

{t("loginError.title")}

- {t("loginError.description")} +

+ +

+ + + {userId && authMethods.length && ( <> diff --git a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx index bfbde8b252..ae9feff6b7 100644 --- a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx @@ -5,6 +5,7 @@ import { linkingFailed } from "@/components/idps/pages/linking-failed"; import { linkingSuccess } from "@/components/idps/pages/linking-success"; import { loginFailed } from "@/components/idps/pages/login-failed"; import { loginSuccess } from "@/components/idps/pages/login-success"; +import { Translated } from "@/components/translated"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { addHuman, @@ -27,7 +28,6 @@ import { AddHumanUserRequestSchema, UpdateHumanUserRequestSchema, } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; const ORG_SUFFIX_REGEX = /(?<=@)(.+)/; @@ -73,8 +73,6 @@ export default async function Page(props: { }) { const params = await props.params; const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "idp" }); let { id, token, requestId, organization, link } = searchParams; const { provider } = params; @@ -321,8 +319,12 @@ export default async function Page(props: { return (
-

{t("registerSuccess.title")}

-

{t("registerSuccess.description")}

+

+ +

+

+ +

}) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "logout" }); const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); @@ -33,8 +31,12 @@ export default async function Page(props: { searchParams: Promise }) { return (
-

{t("success.title")}

-

{t("success.description")}

+

+ +

+

+ +

); diff --git a/apps/login/src/app/(login)/mfa/page.tsx b/apps/login/src/app/(login)/mfa/page.tsx index 3ef7b1f519..5543cdf66f 100644 --- a/apps/login/src/app/(login)/mfa/page.tsx +++ b/apps/login/src/app/(login)/mfa/page.tsx @@ -12,15 +12,12 @@ import { getSession, listAuthenticationMethodTypes, } from "@/lib/zitadel"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { searchParams: Promise>; }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "mfa" }); const { loginName, requestId, organization, sessionId } = searchParams; @@ -90,9 +87,13 @@ export default async function Page(props: { return (
-

{t("verify.title")}

+

+ +

-

{t("verify.description")}

+

+ +

{sessionFactors && ( ) : ( - {t("verify.noResults")} + + + )}
diff --git a/apps/login/src/app/(login)/mfa/set/page.tsx b/apps/login/src/app/(login)/mfa/set/page.tsx index 3ae33f2f8b..ebfa358d6d 100644 --- a/apps/login/src/app/(login)/mfa/set/page.tsx +++ b/apps/login/src/app/(login)/mfa/set/page.tsx @@ -16,7 +16,6 @@ import { } from "@/lib/zitadel"; import { Timestamp, timestampDate } from "@zitadel/client"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; function isSessionValid(session: Partial): { @@ -39,8 +38,6 @@ export default async function Page(props: { searchParams: Promise>; }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "mfa" }); const { loginName, checkAfter, force, requestId, organization, sessionId } = searchParams; @@ -119,9 +116,13 @@ export default async function Page(props: { return (
-

{t("set.title")}

+

+ +

-

{t("set.description")}

+

+ +

{sessionWithData && (

- {sessionFactors?.factors?.user?.displayName ?? t("change.title")} + {sessionFactors?.factors?.user?.displayName ?? ( + + )}

-

{t("change.description")}

+

+ +

{/* show error only if usernames should be shown to be unknown */} {(!sessionFactors || !loginName) && diff --git a/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx index ed461b748c..b717fd5d96 100644 --- a/apps/login/src/app/(login)/password/set/page.tsx +++ b/apps/login/src/app/(login)/password/set/page.tsx @@ -13,7 +13,7 @@ import { } from "@/lib/zitadel"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; import { HumanUser, User } from "@zitadel/proto/zitadel/user/v2/user_pb"; -import { getLocale, getTranslations } from "next-intl/server"; +import { getLocale } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { @@ -21,7 +21,6 @@ export default async function Page(props: { }) { const searchParams = await props.searchParams; const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "password" }); const { userId, loginName, organization, requestId, code, initial } = searchParams; @@ -73,8 +72,14 @@ export default async function Page(props: { return (
-

{session?.factors?.user?.displayName ?? t("set.title")}

-

{t("set.description")}

+

+ {session?.factors?.user?.displayName ?? ( + + )} +

+

+ +

{/* show error only if usernames should be shown to be unknown */} {loginName && !session && !loginSettings?.ignoreUnknownUsernames && ( @@ -101,7 +106,11 @@ export default async function Page(props: { > ) : null} - {!initial && {t("set.codeSent")}} + {!initial && ( + + + + )} {passwordComplexity && (loginName ?? user?.preferredLoginName) && diff --git a/apps/login/src/app/(login)/signedin/page.tsx b/apps/login/src/app/(login)/signedin/page.tsx index dd19096244..5b2ed5fbf4 100644 --- a/apps/login/src/app/(login)/signedin/page.tsx +++ b/apps/login/src/app/(login)/signedin/page.tsx @@ -1,6 +1,7 @@ import { Alert, AlertType } from "@/components/alert"; import { Button, ButtonVariants } from "@/components/button"; import { DynamicTheme } from "@/components/dynamic-theme"; +import { Translated } from "@/components/translated"; import { UserAvatar } from "@/components/user-avatar"; import { getMostRecentCookieWithLoginname, @@ -14,7 +15,6 @@ import { getLoginSettings, getSession, } from "@/lib/zitadel"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; import Link from "next/link"; @@ -37,8 +37,6 @@ async function loadSessionById( export default async function Page(props: { searchParams: Promise }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "signedin" }); const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); @@ -66,8 +64,12 @@ export default async function Page(props: { searchParams: Promise }) { return (
-

{t("error.title")}

-

{t("error.description")}

+

+ +

+

+ +

{err.message}
@@ -94,9 +96,15 @@ export default async function Page(props: { searchParams: Promise }) {

- {t("title", { user: sessionFactors?.factors?.user?.displayName })} +

-

{t("description")}

+

+ +

}) { className="self-end" variant={ButtonVariants.Primary} > - {t("continue")} +
diff --git a/apps/login/src/app/(login)/u2f/page.tsx b/apps/login/src/app/(login)/u2f/page.tsx index bac94b2ecc..7fba7be1be 100644 --- a/apps/login/src/app/(login)/u2f/page.tsx +++ b/apps/login/src/app/(login)/u2f/page.tsx @@ -7,7 +7,7 @@ import { getSessionCookieById } from "@/lib/cookies"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession } from "@/lib/zitadel"; -import { getLocale, getTranslations } from "next-intl/server"; +import { getLocale } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { @@ -15,7 +15,6 @@ export default async function Page(props: { }) { const searchParams = await props.searchParams; const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "u2f" }); const { loginName, requestId, sessionId, organization } = searchParams; @@ -59,7 +58,9 @@ export default async function Page(props: { return (
-

{t("verify.title")}

+

+ +

{sessionFactors && ( )} -

{t("verify.description")}

+

+ +

{!(loginName || sessionId) && ( diff --git a/apps/login/src/app/(login)/u2f/set/page.tsx b/apps/login/src/app/(login)/u2f/set/page.tsx index 2d951d53fc..b73e902821 100644 --- a/apps/login/src/app/(login)/u2f/set/page.tsx +++ b/apps/login/src/app/(login)/u2f/set/page.tsx @@ -6,7 +6,7 @@ import { UserAvatar } from "@/components/user-avatar"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings } from "@/lib/zitadel"; -import { getLocale, getTranslations } from "next-intl/server"; +import { getLocale } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { @@ -14,7 +14,6 @@ export default async function Page(props: { }) { const searchParams = await props.searchParams; const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "u2f" }); const { loginName, organization, requestId, checkAfter } = searchParams; @@ -37,7 +36,9 @@ export default async function Page(props: { return (
-

{t("set.title")}

+

+ +

{sessionFactors && ( )} -

{t("set.description")}

+

+ {" "} + +

{!sessionFactors && (
diff --git a/apps/login/src/app/(login)/verify/success/page.tsx b/apps/login/src/app/(login)/verify/success/page.tsx index 1668e2e3fd..a0df0327c4 100644 --- a/apps/login/src/app/(login)/verify/success/page.tsx +++ b/apps/login/src/app/(login)/verify/success/page.tsx @@ -1,4 +1,5 @@ import { DynamicTheme } from "@/components/dynamic-theme"; +import { Translated } from "@/components/translated"; import { UserAvatar } from "@/components/user-avatar"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; import { loadMostRecentSession } from "@/lib/session"; @@ -8,13 +9,10 @@ import { getUserByID, } from "@/lib/zitadel"; import { HumanUser, User } from "@zitadel/proto/zitadel/user/v2/user_pb"; -import { getLocale, getTranslations } from "next-intl/server"; import { headers } from "next/headers"; export default async function Page(props: { searchParams: Promise }) { const searchParams = await props.searchParams; - const locale = getLocale(); - const t = await getTranslations({ locale, namespace: "verify" }); const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); @@ -65,8 +63,12 @@ export default async function Page(props: { searchParams: Promise }) { return (
-

{t("successTitle")}

-

{t("successDescription")}

+

+ +

+

+ +

{sessionFactors ? (