Add complete German translation and extract hardcoded strings to i18n#206
Open
0skater0 wants to merge 3 commits intojavedh-dev:devfrom
Open
Add complete German translation and extract hardcoded strings to i18n#2060skater0 wants to merge 3 commits intojavedh-dev:devfrom
0skater0 wants to merge 3 commits intojavedh-dev:devfrom
Conversation
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
Contributor
There was a problem hiding this comment.
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. |
…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
63637b6 to
9550202
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
<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:
labelprop)$derivedfor 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 lintpassespnpm run testpassespnpm run formatproduces no changes