feat(i18n): migrate hardcoded German strings to t() across 104 components/pages — AST-based batch with re-parse gate, 423 new de.json keys; tsc clean; vitest failures byte-identical to clean-tree baseline (pre-existing)

This commit is contained in:
Agent Zero
2026-08-27 01:43:06 +02:00
parent 5680179260
commit 4cb5298768
105 changed files with 1204 additions and 459 deletions
+9 -9
View File
@@ -167,10 +167,10 @@ function AdressenTab() {
{
key: 'actions', header: '', render: (row) => (
<div className="flex gap-2">
<button onClick={() => handleEdit(row)} className="p-1 rounded hover:bg-secondary-100" aria-label="Bearbeiten">
<button onClick={() => handleEdit(row)} className="p-1 rounded hover:bg-secondary-100" aria-label={t('settingsStammdaten.bearbeiten')}>
<Pencil className="w-4 h-4" />
</button>
<button onClick={() => handleDelete(row.id)} className="p-1 rounded hover:bg-danger-50 text-danger-600" aria-label="Löschen">
<button onClick={() => handleDelete(row.id)} className="p-1 rounded hover:bg-danger-50 text-danger-600" aria-label={t('settingsStammdaten.löschen')}>
<Trash2 className="w-4 h-4" />
</button>
</div>
@@ -180,14 +180,14 @@ function AdressenTab() {
return (
<div className="space-y-4">
<Card title="Adressverwaltung" actions={
<Card title={t('settingsStammdaten.adressverwaltung')} actions={
<Button size="sm" onClick={handleAdd}>
<Plus className="w-4 h-4 mr-1" />
{t('common.add', 'Hinzufügen')}
</Button>
}>
{loading ? (
<div className="text-center py-4 text-secondary-500">Lade Adressen...</div>
<div className="text-center py-4 text-secondary-500">{t('settingsStammdaten.ladeadressen')}</div>
) : (
<Table columns={columns} data={addresses} rowKey={(row) => row.id} emptyMessage="Noch keine Adressen angelegt" />
)}
@@ -352,10 +352,10 @@ function KontenTab() {
{
key: 'actions', header: '', render: (row) => (
<div className="flex gap-2">
<button onClick={() => handleEdit(row)} className="p-1 rounded hover:bg-secondary-100" aria-label="Bearbeiten">
<button onClick={() => handleEdit(row)} className="p-1 rounded hover:bg-secondary-100" aria-label={t('settingsStammdaten.bearbeiten')}>
<Pencil className="w-4 h-4" />
</button>
<button onClick={() => handleDelete(row.id)} className="p-1 rounded hover:bg-danger-50 text-danger-600" aria-label="Löschen">
<button onClick={() => handleDelete(row.id)} className="p-1 rounded hover:bg-danger-50 text-danger-600" aria-label={t('settingsStammdaten.löschen')}>
<Trash2 className="w-4 h-4" />
</button>
</div>
@@ -365,14 +365,14 @@ function KontenTab() {
return (
<div className="space-y-4">
<Card title="Bankkontenverwaltung" actions={
<Card title={t('settingsStammdaten.bankkontenverwaltung')} actions={
<Button size="sm" onClick={handleAdd}>
<Plus className="w-4 h-4 mr-1" />
{t('common.add', 'Hinzufügen')}
</Button>
}>
{loading ? (
<div className="text-center py-4 text-secondary-500">Lade Konten...</div>
<div className="text-center py-4 text-secondary-500">{t('settingsStammdaten.ladekonten')}</div>
) : (
<Table columns={columns} data={accounts} rowKey={(row) => row.id} emptyMessage="Noch keine Konten angelegt" />
)}
@@ -447,7 +447,7 @@ export function SettingsStammdatenPage() {
<h1 className="text-2xl font-bold text-secondary-900">Stammdaten</h1>
<div className="border-b border-secondary-200">
<nav className="flex gap-4" role="tablist" aria-label="Stammdaten Tabs">
<nav className="flex gap-4" role="tablist" aria-label={t('settingsStammdaten.stammdatentabs')}>
{tabs.map((tab) => (
<button
key={tab.key}