Skip to content

feat(admin): German API keys and webhooks cards on the Developers page - #437

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

github-actions[bot] merged 1 commit into
mainfrom
auto/admin-i18n-developer-keys-webhooks

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 6 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; slice 5 #436: Developers page jobs API, embed widget, preview). Draft card, so no Closes.

Research

  • Code: after feat(admin): German Developers page (jobs API, embed widget, preview) #436 the Developers page header, jobs API and widget cards are German, but the two cards below them (ApiKeysCard, WebhooksCard) are still fully English, so the page is mixed. Both cards also hard-code en-US for dates ("last used Oct 5", delivery time).
  • Competitors (carried from slices 1-5): Personio, Teamtailor and Greenhouse treat the recruiter UI language as a per-user setting and translate whole screens; on integration settings they translate the UI around the code, while token scopes, event names, header names and URLs stay as they are.
  • User pain points (carried): mixed-language screens are the recurring complaint in Personio community threads. Finishing the Developers page in one slice removes the last mixed screen in Settings > Developers, and the card's acceptance asks for localised dates, which this slice starts.

Plan and scope

Approach:

  • apiKeys.* and webhooks.* keys (en + de) for titles, descriptions, form labels, buttons, confirm/keep, empty states, the one-time secret notice, the queued-test notices, fallback errors, and the delivery status words (queued/delivered/failed).
  • Descriptions keep their monospace code words (read, write, X-Ganek-Signature) through a small richText(template, nodes) helper in lib/i18n/locale.tsx that fills {name} placeholders with React nodes.
  • INTL_LOCALES (en-US, de-DE) in messages.ts; both cards format dates with the admin locale (e.g. "5. Okt.").
  • language.partial (en + de) now lists API keys and webhooks.

In scope: the above. Out of scope (next slices): 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 other than these two cards, candidate surfaces (card D3). Scope values, event names, header names, URLs and server error messages stay untranslated.

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

Acceptance (this slice):

  • With Deutsch picked, the API keys and webhooks cards render in German, including confirm buttons, notices, empty states, delivery status and German dates.
  • 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 (3 pre-existing warnings), pnpm test 128 files / 1244 tests passed (+4).
  • New tests: ApiKeysCard in German (form, list, German dates "widerrufen am 5. Okt.", "zuletzt verwendet: nie", confirm buttons, empty state, one-time secret) and WebhooksCard in German (form, events group, delivery line "application.created fehlgeschlagen (HTTP 500) · 23. Okt.", test/remove buttons, queued notice, empty state).
  • Same deterministic edit script run in the push clone; script md5 and git diff | md5sum identical on both sides (80c94395...).

🤖 Generated with Claude Code

https://claude.ai/code/session_01RPybyvsSiw29SvDYH4GVbg

Status (run 2026-11-09 15:00 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 other settings pages (Branding, Hiring, Privacy, Emails, Team, Billing), the other admin screens, server-side storage of the language and locale-aware dates/numbers on the remaining screens.

Slice 6 of the board card "Admin UI multi-language"
(PVTI_lADOElDmdM4Bn50jzhCKGsA): the Developers page's API keys and
webhooks cards read their copy from the catalog (forms, lists, confirm
buttons, notices, errors, delivery status) and format dates in the
admin language. Scope values, event names and headers stay as code.
English is unchanged outside a LocaleProvider.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RPybyvsSiw29SvDYH4GVbg
@github-actions
github-actions Bot enabled auto-merge (squash) November 9, 2026 14:44
@github-actions
github-actions Bot merged commit 9aa9a99 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