Skip to content

Translate the admin pages: users, settings, roles (DE, IT) - #1340

Merged
helpcodeai merged 4 commits into
HelpCode-ai:mainfrom
sapatmohit:feat/i18n-admin
Oct 31, 2026
Merged

helpcodeai merged 4 commits into
HelpCode-ai:mainfrom
sapatmohit:feat/i18n-admin

Conversation

@sapatmohit

Copy link
Copy Markdown
Contributor

Summary

Sixth area of #1271, last of three PRs: the older admin pages (/admin/users, /admin/settings, /admin/roles) in German and Italian. It follows #1332 and #1333. No behaviour changes, and Accept-Language: en-US renders exactly what it rendered before.

Changes

Most of the text on these pages is the same as on their /settings counterparts, so the pages use the namespaces from #1332 and #1333 instead of copying them:

  • app/admin/users/page.tsx uses settingsUsers:
    • the invite form;
    • the table, its badges and actions;
    • the confirmations, messages and footer count.
  • app/admin/roles/page.tsx uses settingsRoles:
    • custom roles, the create and edit forms, the counts;
    • the tool access picker and the user role table.
  • app/admin/settings/page.tsx uses settingsAdmin: the SMTP and footer link cards with their messages.
  • messages/{en,de,it}.json: one new namespace, adminPages (14 keys), for the text only these pages have:
    • the page titles and "Back to Dashboard";
    • the "Joined" column and "Unrestricted";
    • "SMTP not configured…" and "Select all" (without a count);
    • the whole SSRF allowlist card.
  • Message colours: the SMTP, footer link and SSRF messages picked red or green with msg.startsWith('Error'). They now use a separate error flag each, as in Translate the connector tools and tool editor (DE, IT) #1326, Translate the settings pages: profile, connections, organization, users (DE, IT) #1332 and Translate the settings pages: roles, administration, license, single sign-on (DE, IT) #1333.
  • Smaller fixes:
    • The loop variable t on the roles page became list/x, so it doesn't shadow the translator.
    • The "Joined" date follows the UI language.

#1338 (the trial-ended wall) added no text to the settings pages. Its new "Delete your account" line is in license-wall.tsx, with the other billing components.

Left in English on purpose:

  • Text from the server: error messages, the invitation result message, the SMTP test result.
  • Role names: ADMIN, EDITOR, VIEWER.
  • Technical names: SMTP, SSL/TLS, SSRF, SSRF_ALLOWED_HOSTS, *.suffix, Docker Compose, and the example values in placeholders.

Self-hosted vs Cloud: frontend only, with no backend, database or ee/ change.

Translations

German and Italian aren't my native languages, so please review those strings. Most of the text reuses strings you've already reviewed in #1332 and #1333. The new ones I'm least sure about:

  • "Allowlist" is kept in both languages ("SSRF-Allowlist" / "Allowlist SSRF"), as it's the usual term in security settings.
  • "SSRF guard": "SSRF-Schutz" / "protezione SSRF".
  • "Joined": "Beigetreten" / "Data di iscrizione". The Italian one is a noun so it doesn't need a gender.
  • "Deployment": "Installation" / "installazione", in "every organization on this deployment".
  • Page titles: "Admin-Einstellungen" / "Impostazioni di amministrazione", and "MCP-Rollenverwaltung" / "Gestione dei ruoli MCP".
German Italian
/admin/users
/admin/roles
/admin/settings

Type

  • New feature

Testing

3 new tests in tests/e2e/i18n.spec.ts, with a mocked role, two tools and the SSRF allowlist:

  • de-DE: /admin/users (the table, the date, the footer count, the invite form) and /admin/roles (the counts, the tool picker with "Alle auswählen" and the save button count) render in German.
  • it-IT: /admin/settings renders in Italian, including the SSRF card and its saved message.
  • en-US: all three pages stay exactly as before, including the SSRF text, the "Save (1 tools)" button and the footer count.

The key-parity test from #1248 covers the new keys. I also checked that every German and Italian message parses and uses the same placeholders and tags as the English one.

Directory Command Result
packages/frontend npm run lint 0 errors, 46 warnings (same as main, none new)
packages/frontend npx tsc --noEmit -p tsconfig.json pass
packages/frontend npm run build pass
packages/frontend npm run test:e2e 308 passed, incl. the 3 new ones

The backend isn't touched, so I didn't rerun its suite.

  • Added/updated tests
  • Tested manually. I checked the three pages in German and Italian in the browser with mocked API data (the screenshots above), not against a live backend.

Checklist

  • My code follows the existing code style
  • I have tested my changes locally
  • I have updated documentation (if applicable). Not needed: CONTRIBUTING's "Translating the UI" section already covers new namespaces.
  • All existing tests pass (frontend; backend unchanged)
  • This PR has a descriptive title

packages/frontend/AGENTS.md and next-env.d.ts were rewritten by next dev locally and are left out, as AGENTS.md asks.

Related Issues

Part of #1271 (Settings and admin, last of three PRs). After this, only knowledge graph and memory are left.

@helpcodeai helpcodeai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this looks good to me.

I checked every key the three pages now use against settingsUsers, settingsRoles and settingsAdmin on this branch. All of them exist, and the English values match the strings they replace word for word. So Accept-Language: en-US renders what it rendered before, and the en-US test confirms it. Passing invites: 0 to settingsUsers.footer is fine: its =0 {} branch drops the invitation part.

The translations read naturally in Italian and German. To answer your questions:

  • "Allowlist SSRF" / "SSRF-Allowlist" and "protezione SSRF" / "SSRF-Schutz": fine, keep them.
  • "Data di iscrizione" works well as a column header, and "Beigetreten" is fine.
  • "installazione" / "Installation" for deployment: fine for a self-hosted admin page. The SSRF card is hidden on Cloud anyway.

Replacing startsWith('Error') with a separate error flag, and renaming the t loop variable, are good fixes.

One small point you can leave for later: settingsRoles.access.save stays "Save (1 tools)" in English, while German already uses the plural form. It's existing text and outside the scope of this PR.

Approving. It will go to main with the rest of the i18n work.

@helpcodeai
helpcodeai enabled auto-merge (squash) October 31, 2026 08:05
@helpcodeai
helpcodeai merged commit edd6a68 into HelpCode-ai:main Oct 31, 2026
14 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 31, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants