Skip to content

feat(admin): German Developers page (jobs API, embed widget, preview) - #436

Merged
github-actions[bot] merged 1 commit into
mainfrom
auto/admin-i18n-developers
Nov 9, 2026
Merged

github-actions[bot] merged 1 commit into
mainfrom
auto/admin-i18n-developers

Conversation

@grumpy-miner

@grumpy-miner grumpy-miner commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Board card: Admin UI multi-language (PVTI_lADOElDmdM4Bn50jzhCKGsA)

Slice 5 of the card (slice 1 #432: catalog, German shell, language picker; slice 2 #433: settings tabs, Account profile and password; slice 3 #434: sign-in methods, two-factor, sessions; slice 4 #435: availability and companies). Draft card, so no Closes.

Research

  • Code: after feat(admin): German interview availability and companies cards #435 the whole Account page is German, but every other settings tab still renders fully English under a German tab bar. The Developers page (app/admin/developers/page.tsx) is the smallest one with its own copy: jobs API card, embed widget card (theme radios, Show tags), widget preview and a load error. The shared CopyButton (used here and on many admin screens) has hard-coded "Copy"/"Copied".
  • Competitors (carried from slices 1-4): Personio, Teamtailor and Greenhouse treat the recruiter UI language as a per-user setting and translate whole screens; developer/integration settings are usually translated around the code, while code, URLs and JSON stay as they are.
  • User pain points (carried): mixed-language screens are the recurring complaint in Personio community threads. Translating a whole page per slice and naming the covered areas in the language note keeps that honest.

Plan and scope

Approach:

  • Developers page: nav.settings for the H1, developers.* keys for the API card title, Open feed, description, copy labels, widget title/description, theme radio group label and options (Auto/Hell/Dunkel), Show tags, the SSR note, preview aria label, caption, heading, role count (previewRole/previewRoles, singular and plural) and the empty state. The load error shows the server message when there is one, else the translated fallback (stored as an empty sentinel so a language switch re-renders it).
  • CopyButton: copy.copy / copy.copied through useLocale(); outside a LocaleProvider it stays English, so every other screen is unchanged.
  • language.partial (en + de) now lists the Developers page.

In scope: the above. Out of scope (next slices): ApiKeysCard and WebhooksCard on the same page, the other settings pages (Branding, Hiring, Privacy, Emails, Team, Billing), the other admin screens, server-side storage of the language, locale-aware dates/numbers on data screens, candidate surfaces (card D3). The snippet, URLs and sample JSON are code and stay untranslated; the widget theme values sent in data-theme stay light/dark.

Copy notes: formal "Sie"; no en or em dashes.

Acceptance (this slice):

  • With Deutsch picked, the Developers page's API card, widget card, preview, empty state and load error render in German; the German radios still drive the snippet (data-theme, data-tags).
  • English is unchanged: every existing English test passes unmodified.
  • New keys exist in both locales (typecheck + messages.test.ts parity and placeholders).

Testing

  • Cloud container: pnpm typecheck OK, pnpm lint 0 errors, pnpm test 128 files / 1240 tests passed (+3).
  • New tests in app/admin/developers/page.test.tsx: DevelopersPage in German (API card, widget, preview, copy button text; German theme radio and tags checkbox drive the snippet; empty state and load error).
  • Same deterministic edit script run in the push clone; script md5 and git diff | md5sum identical on both sides (2e6b6a59...).

🤖 Generated with Claude Code

https://claude.ai/code/session_01RPybyuuagSaEjDtgon8wLo

Status (run 2026-11-09 14:05 UTC)

All checks green, merged by auto-merge. The card's acceptance (admin fully in German) is still not met, so the card goes back to Ready for the next slice: the ApiKeysCard and WebhooksCard on this page, then the other settings pages (Branding, Hiring, Privacy, Emails, Team, Billing), the other admin screens, server-side storage of the language and locale-aware dates/numbers.

Slice 5 of the board card "Admin UI multi-language"
(PVTI_lADOElDmdM4Bn50jzhCKGsA): the Developers settings page reads its
copy from the catalog (jobs API card, embed widget card, theme options,
widget preview, load error), and the shared CopyButton's Copy/Copied
labels are translated. English is unchanged outside a LocaleProvider.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RPybyuuagSaEjDtgon8wLo
@github-actions
github-actions Bot enabled auto-merge (squash) November 9, 2026 14:14
@github-actions
github-actions Bot merged commit 2f32106 into main Nov 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant