Repository navigation
Translate the auth and onboarding pages (DE, IT) - #1272
Merged
helpcodeai merged 2 commits intoOct 26, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
First area of #1271 (the follow-up to #1008, split as agreed in #1008 (comment)): the auth and onboarding pages in German and Italian. It builds on #1248 and #1257. No behaviour changes, and
Accept-Language: en-USrenders exactly what it rendered before.Changes
app/login/page.tsx: everything that Translate the sign-in form and add a language switcher #1257 left in English. That covers registration (self-hosted and the Cloud sign-up), the password checklist and the client-side checks, the social consent line, the "Verify your email" code step, "Check your inbox", "Trial activated", the licence choice, "Check your email" and "Activate license" steps, and the plan hand-off toasts. Strings that registration shared with sign-in now read fromsignIn.*for both modes, since their English was the same.components/auth-trust.tsx: the Cloud sign-up's trust panel and the line under the sign-in card. Both are only used on/login.app/forgot-password,app/reset-password,app/verify-email,app/accept-invite,app/welcome,app/start-trial: all page text.lib/card-trial.ts:formatTrialEndtakes an optional locale,en-GBby default, so the existing callers don't change./start-trialpasses the UI language, so German reads "7. Oktober 2026". English still reads "7 October 2026".messages/{en,de,it}.json: new namespacessignUp,planHandoff,verifyCode,checkInbox,trialActivated,licenseSetup,trust,forgotPassword,resetPassword,verifyEmail,acceptInvite,welcomeandstartTrial. That's 222 keys each. Sentences that wrap links or bold text uset.richwith tags (<terms>,<privacy>,<strong>,<brand>,<link>), so each language can order the sentence its own way.A few things are worded as whole sentences now instead of pieced together from JSX fragments. This matters most on
/start-trial: each variant (with or without a date, trial or billed today) is one key, so German and Italian don't have to follow English word order. The English output is the same text.Two fallbacks moved from state into render: "No verification token provided" and "No invitation token provided". This keeps
tout of the effects that spend single-use tokens, so a language change can never re-run them. The text and when it shows are unchanged.Left in English on purpose:
PlanPickeron/start-trial. It's shared with the licence wall, so it fits better with the settings and licence area./welcome, the starter pack and the "what you need" line under each connector (setupNeeds). They're built from connector catalog data, so they fit with the connectors area.Self-hosted vs Cloud: frontend only, with no backend, database or
ee/change. The Cloud-only screens (Cloud sign-up, trust panel, trial activated,/start-trial) are translated the same way as the self-hosted ones.Translations
German and Italian aren't my native languages, so please review those strings. I kept the tone of #1248, #1257 and the guides: German with Sie, Italian with tu. I used the terms already in the guides and message files: "Workspace", "Connectors" / "connettori", "Audit-Log" / "registro di audit", "Marktplatz" / "marketplace", "Testphase" / "prova gratuita". Strings I'm least sure about:
/welcomeand "Sei stato invitato" on/accept-inviteuse the masculine form, which is the common default. Happy to switch to a neutral wording if you prefer./welcomeheading without a name: English says "Connect your first tool, friend." In German and Italian I dropped "friend" ("Verbinden Sie Ihr erstes Tool." / "Collega il tuo primo strumento."), because it reads oddly there./start-trial/welcome/forgot-password/accept-invite(no token)Type
Testing
9 new tests in
tests/e2e/i18n.spec.ts:de-DE:/forgot-passwordrenders in German./verify-emailwithout a token renders in German./welcomerenders in German./start-trialrenders in German, with the trial end date as "Kostenlos bis 31. Oktober 2026".it-IT:/reset-passwordrenders in Italian, including the "passwords don't match" check./accept-invitewithout a token renders in Italian.en-US: registration and/reset-passwordstay exactly as before.In
card-trial.spec.ts,formatTrialEndis checked withdeandit, next to the existing English assertions.The key-parity test from #1248 covers the new keys.
packages/frontendnpm run lintmain; none new)packages/frontendnpx tsc --noEmit -p tsconfig.jsonpackages/frontendnpm run buildpackages/frontendnpm run test:e2eWith
main's lockfile, the dev server logs "Incompatible React versions" (rootreact-dom19.2.7, frontendreact19.3.1) on the 404 fallback. It's the same onmainand doesn't affect the tests.The backend isn't touched, so I didn't rerun its suite.
Checklist
packages/frontend/AGENTS.mdandnext-env.d.tswere rewritten bynext devlocally and are left out, as AGENTS.md asks.Related Issues
Part of #1271 (auth and onboarding)