Skip to content

Add complete German translation and extract hardcoded strings to i18n#206

Open
0skater0 wants to merge 3 commits intojavedh-dev:devfrom
0skater0:feat/german-i18n
Open

Add complete German translation and extract hardcoded strings to i18n#206
0skater0 wants to merge 3 commits intojavedh-dev:devfrom
0skater0:feat/german-i18n

Conversation

@0skater0
Copy link
Copy Markdown

@0skater0 0skater0 commented Apr 8, 2026

Summary

Complete the German (de) translation and extract hardcoded English strings into Paraglide i18n message keys across the entire UI.

Changes

German translation (de.json)

  • Add 142 missing translation keys to reach 100% coverage (695 keys)
  • Normalize all German text to informal "du" (was inconsistent Sie/du)
  • Remove 19 duplicate keys and improve wording of existing translations
  • Add browser tab title via <svelte:head><title>

i18n key extraction (en.json + 21 components)

Add ~140 new English message keys and wire them up in 21 Svelte components. Previously these strings were hardcoded in templates, which meant only English was possible regardless of the selected locale.

Affected areas:

  • Settings page (all four tabs: Personalization, Units, Features, Notifications)
  • Notification provider system (dialogs, delivery panel, cron presets, forms)
  • Email, Webhook, and Gotify provider configuration forms
  • Reminder type dropdown (now uses getReminderTypeLabel())
  • Header aria-labels and button tooltips
  • Notification panel buttons, status indicators and date formatting
  • SearchableSelect search placeholders (new optional label prop)
  • SettingsSection accordion expanded values (now $derived for locale reactivity)

Other languages (ar, es, fi, fr, hi, hu, it) were already at 64-80% coverage before this change. The new keys fall back to English, same as the existing untranslated keys in those languages.

Test plan

  • pnpm run lint passes
  • pnpm run test passes
  • pnpm run format produces no changes
  • All Settings tabs verified in German
  • Dropdown search placeholders display localized labels
  • Reminder type dropdown shows translated values
  • All dashboard tabs render correctly

Lukas Ott added 2 commits April 8, 2026 02:22
Add 142 missing German translation keys to reach 100% coverage (695 keys).
Normalize all German text to informal "du" instead of mixed Sie/du.
Remove 19 duplicate keys and improve existing translations.

Add ~140 new English i18n keys for UI strings that were previously
hardcoded in Svelte components (settings, notifications, reminders,
provider forms, header). These keys enable proper localization and
will be extracted in the next commit.

Also add <svelte:head><title> to the root layout so the browser tab
shows the app name instead of the URL.
Replace hardcoded English strings in 21 Svelte components with
Paraglide message function calls (m.key_name()).

Affected areas:
- Settings page: all four tabs (Personalization, Units, Features,
  Notifications) including section titles, descriptions, labels
- Notification system: provider dialogs, delivery panel, cron presets,
  email/webhook/gotify forms, test dialog, channel labels
- Reminder form: type dropdown now uses getReminderTypeLabel()
- Header: aria-labels and button tooltips
- SearchableSelect: new optional "label" prop for localized
  search placeholders instead of raw field names
- SettingsSection: accordion expanded values are now $derived
  so they update correctly on locale change
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR completes German localization coverage and finishes migrating remaining hardcoded UI strings into Paraglide message keys so the UI can render in the selected locale (not just English).

Changes:

  • Added ~140 new English message keys and wired them into Settings, Notifications, and provider configuration UI.
  • Completed/normalized German (de.json) translations and added coverage for newly extracted keys.
  • Added a global document <title> in the root layout and improved locale-reactive UI behavior in some derived values.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/routes/settings/+page.svelte Replaced hardcoded Settings strings with Paraglide message keys (sidebar + section headings/descriptions).
src/routes/+layout.svelte Added <svelte:head><title> using localized app_name().
src/lib/components/layout/Notifications.svelte Localized toast messages, button tooltips/aria labels, status titles, and due-date prefix.
src/lib/components/layout/Header.svelte Localized header aria-labels and titles.
src/lib/components/feature/vehicle/VehicleDetailsModal.svelte Localized close/color aria-labels.
src/lib/components/feature/settings/WebhookProviderForm.svelte Localized labels/options/descriptions for webhook provider configuration and auth UI.
src/lib/components/feature/settings/TestProviderDialog.svelte Localized dialog title/description, placeholders, and action buttons/toasts.
src/lib/components/feature/settings/SettingsUnitsTab.svelte Localized “Fuel types” section and fuel-type labels.
src/lib/components/feature/settings/SettingsSection.svelte Made accordion expanded values locale-reactive via $derived.
src/lib/components/feature/settings/SettingsPersonalizationTab.svelte Added localized label prop usage for SearchableSelect and localized custom CSS placeholder.
src/lib/components/feature/settings/ProviderCard.svelte Localized provider card UI strings and made channel label map locale-reactive.
src/lib/components/feature/settings/NotificationProvidersSettings.svelte Localized scheduled delivery/provider sections and provider-management toasts/prompts.
src/lib/components/feature/settings/NotificationProvidersEmptyState.svelte Localized empty state title/description.
src/lib/components/feature/settings/NotificationProviderDialog.svelte Localized provider add/edit dialog strings and provider type labels.
src/lib/components/feature/settings/NotificationProviderChannels.svelte Localized channel subscription heading/description.
src/lib/components/feature/settings/NotificationDeliveryPanel.svelte Localized schedule labels and “Send Now” action.
src/lib/components/feature/settings/GotifyProviderForm.svelte Localized Gotify provider configuration labels/descriptions.
src/lib/components/feature/settings/EmailProviderForm.svelte Localized email provider configuration labels/descriptions/placeholders.
src/lib/components/feature/settings/CronInput.svelte Localized cron presets and validation/summary strings (now $derived).
src/lib/components/feature/reminder/ReminderForm.svelte Localized reminder type labels via getReminderTypeLabel(...).
src/lib/components/app/SearchableSelect.svelte Added optional label prop so search/select placeholders can be localized with user-facing field names.
src/lib/components/app/AttachmentLink.svelte Localized attachment “View” tooltip/title.
messages/en.json Added new English message keys for extracted UI strings.
messages/de.json Completed German translations and added translations for new extracted keys.

Comment thread src/lib/components/layout/Notifications.svelte Outdated
Comment thread src/lib/components/feature/settings/NotificationProvidersSettings.svelte Outdated
Comment thread src/routes/settings/+page.svelte
Comment thread src/lib/components/feature/settings/WebhookProviderForm.svelte
Comment thread messages/en.json Outdated
…ation

- Replace date-fns format() with Intl.DateTimeFormat respecting app locale
- Extract shared dateFormatter as $derived for readability and performance
- Make channelOptions and sidebarItems reactive via $derived for locale changes
- Show localized auth type labels instead of raw enum values in webhook form
- Handle singular/plural correctly for notification cleared toast
- Replace hardcoded English toast with i18n message key
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.

2 participants