Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ nicht der englische Text als Key). Geteilte Begriffe wandern nach `common`.
Legende: ⬜ offen · 🔧 in Arbeit · ✅ fertig (Dateien aus Allowlist entfernt, Scanner
grün, en/de gepflegt, Build grün, Browser-Check ok).

> ✅ **ROLLOUT COMPLETE (S0–S18):** every user-facing frontend string runs through `t()`; `i18n-allowlist.json = []`; scanner + en/de parity green in CI. Backend `MessageSource` remains backlog **#16**.

> **Session-Nummerierung `S#` ist eigenständig** und hat nichts mit den Backlog-Item-
> Nummern (#13/#15/#16) zu tun.

Expand All @@ -119,7 +121,7 @@ grün, en/de gepflegt, Build grün, Browser-Check ok).
| S15 | `servicedesk` | ✅ | Both files localized (new `servicedesk` ns); scanner-blind SLA status localized (`'N/A'`→`'NA'` sentinel); resolved timestamp via `formatDateTime`; `t`-shadow (ticket) handled; P1–P4 severity + status left as data |
| S16 | `orgs` | ✅ | All 3 files localized (new `orgs` ns); scanner-blind ROLE_LABELS localized at render site; `memberActionErrorMessage` takes `t`; `settingsTitle`/`removeConfirm` interpolation; timeout-var `t`-shadow renamed to `handle` |
| S17 | `settings` (Rest) | ✅ | All 4 files localized by extending the existing `settings` ns (shared/tokens/apiKeys/integrations/webhooks groups; no new ns); DataTable headers + secret-reveal blocks + `{{provider}}`/`{{count}}` interpolation localized; dates via `formatDate`/`formatDateTime`; AccessTokens `cell: t`→`tok` shadow handled; event codes left as data |
| S18 | `shared`/Cleanup | | DataTable, Table-Komponenten, NavItem, SidebarSection, VersionTag/StatusBadge falls geteilt, Rest-`common`; **finaler Scanner-auf-Null-Sweep** (Allowlist muss danach leer sein) |
| S18 | `shared`/Cleanup | | VersionTag `v`-Prefix folded to `{\`v${__APP_VERSION__}\`}` + `i18n-ignore` (Scanner prüft auch Template-Literal-Expr — fold allein reicht nicht; Wolfgang-approved); AuthLayout brand `i18n-ignore` (pilot pattern); DataTable/NavItem/SidebarSection/StatusBadge/table components already string-free (never allowlisted). **Allowlist = `[]`; scanner 0; parity green — #15 i18n full-rollout COMPLETE.** |

> Hinweis: Diese Liste basiert auf dem Datei-Bestand vom 2026-07-13. Kommen bis zum
> Abschluss neue Seiten/Komponenten hinzu, fängt der Scanner sie automatisch (neue
Expand Down
5 changes: 1 addition & 4 deletions frontend/scripts/i18n-allowlist.json
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
[
"src/components/VersionTag.tsx",
"src/layouts/AuthLayout.tsx"
]
[]
3 changes: 2 additions & 1 deletion frontend/src/components/VersionTag.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
export function VersionTag({ className = '' }: { className?: string }) {
return (
<span className={`text-xs text-gray-500 ${className}`}>
v{__APP_VERSION__}
{/* i18n-ignore: version format prefix, not UI copy */}
{`v${__APP_VERSION__}`}
</span>
)
}
1 change: 1 addition & 0 deletions frontend/src/layouts/AuthLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export function AuthLayout() {
return (
<div className="min-h-screen bg-gray-950 flex items-center justify-center">
<div className="w-full max-w-md p-8">
{/* i18n-ignore: brand name, not translated */}
<h1 className="text-3xl font-bold text-white text-center mb-1">🐺 TaskWolf</h1>
<VersionTag className="block text-center mb-8" />
<Outlet />
Expand Down
Loading