feat(invoices): full i18n coverage across 12 files — DE/EN/ES/FR/IT

Invoices module had 81 hardcoded German strings across ListView,
DetailView, InvoiceForm, SenderProfileForm, ClientPicker, LinesEditor,
SendModal, StatusBadge, the open-invoices widget, and 4 routes. New
`invoices` namespace (~215 keys × 5 locales = ~1075 translations) covers
list/detail/form/picker/sender-form/send-modal + Swiss + German VAT-rate
labels.

- constants.ts: STATUS_LABELS still kept as a literal map for non-Svelte
  callers (mail-template, PDF renderer); Svelte components now use
  `$_('invoices.status.<status>')`. VAT_RATES_CH/DE switched from
  literal `label` to `i18nKey`, resolved per-component via $_.
- Locale-aware Date.toLocaleString in DetailView meta + SenderProfileForm
  saved-at timestamp (was hardcoded 'de-DE'/default).
- Baseline ratchet: 1817 → 1753 (64 invoices strings + a handful of
  SettingsSidebar follow-ons cleared).

- validate:i18n-parity: 40 namespaces × 5 locales — 3596 keys aligned
- svelte-check: 7647 files, 0 errors

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-26 21:56:48 +02:00
parent f10439e369
commit 679fb160c2
20 changed files with 1541 additions and 243 deletions

View file

@ -153,16 +153,9 @@
"apps/mana/apps/web/src/lib/modules/habits/ListView.svelte": 5,
"apps/mana/apps/web/src/lib/modules/inventory/ListView.svelte": 1,
"apps/mana/apps/web/src/lib/modules/inventory/views/DetailView.svelte": 5,
"apps/mana/apps/web/src/lib/modules/invoices/components/ClientPicker.svelte": 3,
"apps/mana/apps/web/src/lib/modules/invoices/components/InvoiceForm.svelte": 10,
"apps/mana/apps/web/src/lib/modules/invoices/components/LinesEditor.svelte": 6,
"apps/mana/apps/web/src/lib/modules/invoices/components/SenderProfileForm.svelte": 14,
"apps/mana/apps/web/src/lib/modules/invoices/components/SendModal.svelte": 7,
"apps/mana/apps/web/src/lib/modules/invoices/ListView.svelte": 6,
"apps/mana/apps/web/src/lib/modules/invoices/views/DetailView.svelte": 18,
"apps/mana/apps/web/src/lib/modules/invoices/widgets/InvoicesOpenWidget.svelte": 3,
"apps/mana/apps/web/src/lib/modules/journal/ListView.svelte": 6,
"apps/mana/apps/web/src/lib/modules/kontext/KontextView.svelte": 1,
"apps/mana/apps/web/src/lib/modules/lasts/SharedLastView.svelte": 4,
"apps/mana/apps/web/src/lib/modules/library/components/EntryForm.svelte": 5,
"apps/mana/apps/web/src/lib/modules/library/components/ProgressControls.svelte": 3,
"apps/mana/apps/web/src/lib/modules/library/ListView.svelte": 1,
@ -342,10 +335,6 @@
"apps/mana/apps/web/src/routes/(app)/inventory/items/[id]/+page.svelte": 7,
"apps/mana/apps/web/src/routes/(app)/inventory/locations/+page.svelte": 2,
"apps/mana/apps/web/src/routes/(app)/inventory/search/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/invoices/[id]/+page.svelte": 2,
"apps/mana/apps/web/src/routes/(app)/invoices/[id]/edit/+page.svelte": 4,
"apps/mana/apps/web/src/routes/(app)/invoices/new/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/invoices/settings/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/library/entry/[id]/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/llm-test/+page.svelte": 29,
"apps/mana/apps/web/src/routes/(app)/meditate/+page.svelte": 4,
@ -376,6 +365,7 @@
"apps/mana/apps/web/src/routes/(app)/onboarding/look/+page.svelte": 6,
"apps/mana/apps/web/src/routes/(app)/onboarding/name/+page.svelte": 2,
"apps/mana/apps/web/src/routes/(app)/onboarding/templates/+page.svelte": 2,
"apps/mana/apps/web/src/routes/(app)/onboarding/wish/+page.svelte": 7,
"apps/mana/apps/web/src/routes/(app)/organizations/[id]/+page.svelte": 6,
"apps/mana/apps/web/src/routes/(app)/organizations/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/photos/+page.svelte": 3,