feat: add de.json and en.json locale files

Extracts all German UI strings from public/pages/, public/components/,
and public/router.js into 482 i18n keys organized by module prefix.
English translations added for all keys.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ulas
2026-03-31 21:51:18 +02:00
parent 9bf8f2abbb
commit ad921e1637
2 changed files with 1050 additions and 0 deletions
+525
View File
@@ -0,0 +1,525 @@
{
"common": {
"save": "Speichern",
"cancel": "Abbrechen",
"delete": "Löschen",
"edit": "Bearbeiten",
"close": "Schließen",
"create": "Erstellen",
"add": "Hinzufügen",
"back": "Zurück",
"next": "Weiter",
"loading": "Lade…",
"saving": "Wird gespeichert…",
"required": "Dieses Feld ist erforderlich.",
"error": "Fehler",
"allFieldsRequired": "Bitte alle Felder ausfüllen.",
"today": "Heute",
"tomorrow": "Morgen",
"skipToContent": "Zum Inhalt springen",
"reload": "Neu laden",
"errorOccurred": "Etwas ist schiefgelaufen.",
"unexpectedError": "Ein unerwarteter Fehler ist aufgetreten.",
"errorGeneric": "Ein Fehler ist aufgetreten.",
"updateAvailable": "Update verfügbar — Seite neu laden für die neueste Version.",
"titleRequired": "Titel ist erforderlich",
"nameRequired": "Name ist erforderlich",
"contentRequired": "Inhalt ist erforderlich",
"all": "Alle"
},
"nav": {
"dashboard": "Übersicht",
"tasks": "Aufgaben",
"calendar": "Kalender",
"meals": "Essen",
"shopping": "Einkauf",
"notes": "Pinnwand",
"contacts": "Kontakte",
"budget": "Budget",
"settings": "Einstellungen",
"main": "Hauptnavigation",
"navigation": "Navigation",
"quickActions": "Schnellaktionen"
},
"dashboard": {
"title": "Übersicht",
"greetingMorning": "Guten Morgen, {{name}}",
"greetingDay": "Guten Tag, {{name}}",
"greetingEvening": "Guten Abend, {{name}}",
"allDone": "Alles erledigt",
"noEvents": "Keine Termine",
"noPinnedNotes": "Keine angepinnten Notizen",
"todayMeals": "Heute essen",
"allLink": "Alle",
"weekLink": "Woche",
"urgentTasksChip": "{{count}} dring. Aufgabe",
"urgentTasksChipPlural": "{{count}} dring. Aufgaben",
"eventsChip": "{{count}} Termin heute",
"eventsChipPlural": "{{count}} Termine heute",
"todayMealChip": "Heute: {{title}}",
"loadError": "Dashboard konnte nicht vollständig geladen werden.",
"weatherRefresh": "Wetter aktualisieren",
"weatherRefreshTitle": "Aktualisieren",
"weatherFeelsLike": "Gefühlt {{temp}}° · {{humidity}}% · Wind {{wind}} km/h",
"fabTaskLabel": "Aufgabe hinzufügen",
"fabCalendarLabel": "Termin hinzufügen",
"fabShoppingLabel": "Einkauf hinzufügen",
"fabNoteLabel": "Notiz hinzufügen",
"fabTask": "Aufgabe",
"fabCalendar": "Termin",
"fabShopping": "Einkauf",
"fabNote": "Notiz",
"overdue": "Überfällig",
"dueSoon": "Heute fällig",
"dueTomorrow": "Morgen fällig",
"allDay": "Ganztägig"
},
"tasks": {
"title": "Aufgaben",
"newTask": "Neue Aufgabe",
"editTask": "Aufgabe bearbeiten",
"emptyTitle": "Keine Aufgaben — alles erledigt?",
"emptyDescription": "Neue Aufgaben über den + Button erstellen.",
"titleLabel": "Titel *",
"titlePlaceholder": "Was muss erledigt werden?",
"descriptionLabel": "Notiz",
"descriptionPlaceholder": "Optionale Details…",
"priorityLabel": "Priorität",
"categoryLabel": "Kategorie",
"dueDateLabel": "Fälligkeit",
"dueTimeLabel": "Uhrzeit",
"assignedLabel": "Zugewiesen an",
"assignedNobody": "— Niemand —",
"statusLabel": "Status",
"priorityUrgent": "Dringend",
"priorityHigh": "Hoch",
"priorityMedium": "Mittel",
"priorityLow": "Niedrig",
"statusOpen": "Offen",
"statusInProgress": "In Bearbeitung",
"statusDone": "Erledigt",
"categoryHousehold": "Haushalt",
"categorySchool": "Schule",
"categoryShopping": "Einkauf",
"categoryRepair": "Reparatur",
"categoryHealth": "Gesundheit",
"categoryFinance": "Finanzen",
"categoryLeisure": "Freizeit",
"categoryMisc": "Sonstiges",
"overdue": "Überfällig",
"overdueDay": "{{count}}d überfällig",
"dueToday": "Heute fällig",
"dueTomorrow": "Morgen fällig",
"groupOverdue": "Überfällig",
"groupToday": "Heute",
"groupThisWeek": "Diese Woche",
"groupNextWeek": "Nächste Woche",
"groupLater": "Später",
"groupNoDate": "Kein Datum",
"markDone": "{{title}} als erledigt markieren",
"editButton": "Aufgabe bearbeiten",
"swipeOpen": "Öffnen",
"swipeDone": "Erledigt",
"swipeEdit": "Bearbeiten",
"subtaskAdd": "+ Teilaufgabe hinzufügen",
"subtaskToggle": "Teilaufgaben anzeigen",
"subtaskMarkDone": "{{title}} als erledigt markieren",
"deleteConfirm": "Aufgabe und alle Teilaufgaben löschen?",
"savedToast": "Aufgabe gespeichert.",
"createdToast": "Aufgabe erstellt.",
"deletedToast": "Aufgabe gelöscht.",
"loadError": "Aufgabe konnte nicht geladen werden.",
"subtaskPrompt": "Teilaufgabe:",
"kanbanOpen": "Offen",
"kanbanInProgress": "In Bearbeitung",
"kanbanDone": "Erledigt"
},
"shopping": {
"title": "Einkauf",
"noLists": "Keine Listen",
"noListsDescription": "Erstelle eine Liste mit dem + Button.",
"emptyList": "Die Liste ist leer",
"emptyListDescription": "Artikel über das Eingabefeld oben hinzufügen.",
"newListPrompt": "Name der neuen Liste:",
"newListButton": "Neue Liste erstellen",
"renameListPrompt": "Neuer Listen-Name:",
"deleteListConfirm": "Liste \"{{name}}\" und alle Artikel löschen?",
"deletedListToast": "Liste gelöscht.",
"itemsRemovedToast": "{{count}} Artikel entfernt.",
"clearChecked": "Abgehakt löschen ({{count}})",
"itemNamePlaceholder": "Artikel hinzufügen…",
"itemQtyPlaceholder": "Menge",
"itemNameLabel": "Artikelname",
"itemQtyLabel": "Menge",
"categoryLabel": "Kategorie",
"addItemLabel": "Artikel hinzufügen",
"renameListLabel": "Liste umbenennen",
"deleteListLabel": "Liste löschen",
"swipeBack": "Zurück",
"swipeCheck": "Abhaken",
"swipeDelete": "Löschen",
"markDoneLabel": "{{name}} abhaken",
"markUndoneLabel": "{{name}} als nicht erledigt markieren",
"deleteItemLabel": "{{name}} löschen",
"listsLoadError": "Listen konnten nicht geladen werden.",
"itemsLoadError": "Artikel konnten nicht geladen werden.",
"catFruitVeg": "Obst & Gemüse",
"catBakery": "Backwaren",
"catDairy": "Milchprodukte",
"catMeatFish": "Fleisch & Fisch",
"catFrozen": "Tiefkühl",
"catDrinks": "Getränke",
"catHousehold": "Haushalt",
"catDrugstore": "Drogerie",
"catMisc": "Sonstiges"
},
"meals": {
"title": "Essensplan",
"noMealPlanned": "Kein Essen geplant",
"addMeal": "{{type}} hinzufügen",
"editMeal": "Mahlzeit bearbeiten",
"addMealTitle": "Mahlzeit hinzufügen",
"deleteMeal": "Mahlzeit löschen",
"transferToShoppingList": "Zutaten auf Einkaufsliste",
"today": "Heute",
"prevWeek": "Vorherige Woche",
"nextWeek": "Nächste Woche",
"loadError": "Essensplan konnte nicht geladen werden.",
"typeBreakfast": "Frühstück",
"typeLunch": "Mittagessen",
"typeDinner": "Abendessen",
"typeSnack": "Snack",
"dayMo": "Mo",
"dayDi": "Di",
"dayMi": "Mi",
"dayDo": "Do",
"dayFr": "Fr",
"daySa": "Sa",
"daySo": "So",
"dateLabel": "Datum",
"mealTypeLabel": "Mahlzeit",
"titleLabel": "Titel *",
"titlePlaceholder": "z.B. Spaghetti Bolognese",
"notesLabel": "Notizen",
"notesPlaceholder": "Optional…",
"ingredientsLabel": "Zutaten",
"addIngredient": "Zutat hinzufügen",
"ingredientNamePlaceholder": "Zutat",
"ingredientQtyPlaceholder": "Menge",
"removeIngredient": "Zutat entfernen",
"transferLabel": "Zutaten auf Einkaufsliste übertragen",
"transferNow": "Jetzt übertragen",
"noShoppingLists": "Keine Einkaufslisten vorhanden",
"transferSuccess": "{{count}} Zutat übertragen",
"transferSuccessPlural": "{{count}} Zutaten übertragen",
"transferAlreadyDone": "Alle Zutaten bereits übertragen",
"ingredientCount": "{{count}} Zutat",
"ingredientCountPlural": "{{count}} Zutaten",
"titleRequired": "Titel ist erforderlich",
"loadingIndicator": "Lade…"
},
"calendar": {
"title": "Kalender",
"newEvent": "Neuer Termin",
"editEvent": "Termin bearbeiten",
"addEvent": "Termin hinzufügen",
"deleteEvent": "Termin löschen",
"noEvents": "Keine Termine im gewählten Zeitraum.",
"today": "Heute",
"back": "Zurück",
"forward": "Weiter",
"viewMonth": "Monat",
"viewWeek": "Woche",
"viewDay": "Tag",
"viewAgenda": "Agenda",
"allDay": "Ganztägig",
"allDayShort": "ganztg.",
"moreEvents": "+{{count}} weitere",
"weekNumberLabel": "KW {{week}} · {{month}} {{year}}",
"agendaFrom": "Ab {{date}}",
"titleLabel": "Titel *",
"titlePlaceholder": "z.B. Zahnarzt",
"allDayToggle": "Ganztägig",
"startDateLabel": "Startdatum",
"startTimeLabel": "Startzeit",
"endDateLabel": "Enddatum",
"endTimeLabel": "Endzeit",
"fromLabel": "Von",
"toLabel": "Bis",
"locationLabel": "Ort",
"locationPlaceholder": "Optional",
"assignedLabel": "Zugewiesen an",
"assignedNobody": "— Niemand —",
"colorLabel": "Farbe",
"descriptionLabel": "Beschreibung",
"descriptionPlaceholder": "Optional…",
"popupEdit": "Bearbeiten",
"deleteConfirm": "\"{{title}}\" wirklich löschen?",
"createdToast": "Termin erstellt",
"savedToast": "Termin gespeichert",
"deletedToast": "Termin gelöscht",
"loadError": "Termine konnten nicht geladen werden.",
"saveError": "Fehler beim Speichern",
"deleteError": "Fehler beim Löschen",
"titleRequired": "Titel ist erforderlich",
"monthJanuary": "Januar",
"monthFebruary": "Februar",
"monthMarch": "März",
"monthApril": "April",
"monthMay": "Mai",
"monthJune": "Juni",
"monthJuly": "Juli",
"monthAugust": "August",
"monthSeptember": "September",
"monthOctober": "Oktober",
"monthNovember": "November",
"monthDecember": "Dezember",
"dayShortSunday": "So",
"dayShortMonday": "Mo",
"dayShortTuesday": "Di",
"dayShortWednesday": "Mi",
"dayShortThursday": "Do",
"dayShortFriday": "Fr",
"dayShortSaturday": "Sa",
"dayLongSunday": "Sonntag",
"dayLongMonday": "Montag",
"dayLongTuesday": "Dienstag",
"dayLongWednesday": "Mittwoch",
"dayLongThursday": "Donnerstag",
"dayLongFriday": "Freitag",
"dayLongSaturday": "Samstag"
},
"notes": {
"title": "Pinnwand",
"newNote": "Neue Notiz",
"editNote": "Notiz bearbeiten",
"addNoteLabel": "Neue Notiz",
"searchPlaceholder": "Notizen durchsuchen…",
"emptyTitle": "Noch keine Notizen",
"emptyDescription": "Neue Notiz über den + Button erstellen.",
"noResultsTitle": "Keine Treffer",
"noResultsDescription": "Keine Notiz enthält \"{{query}}\".",
"titleLabel": "Titel (optional)",
"titlePlaceholder": "Kein Titel",
"contentLabel": "Inhalt",
"contentMarkdownHint": "(Markdown-Formatierung möglich)",
"contentPlaceholder": "Notiz eingeben…",
"colorLabel": "Farbe",
"pinnedLabel": "Anpinnen (erscheint auf Dashboard)",
"pinAction": "Anpinnen",
"unpinAction": "Anpinnen aufheben",
"deleteLabel": "Notiz löschen",
"deleteConfirm": "Notiz wirklich löschen?",
"createdToast": "Notiz erstellt",
"savedToast": "Notiz gespeichert",
"deletedToast": "Notiz gelöscht",
"loadError": "Notizen konnten nicht geladen werden.",
"formatBold": "Fett (Strg+B)",
"formatItalic": "Kursiv (Strg+I)",
"formatUnderline": "Unterstrichen (Strg+U)",
"formatStrikethrough": "Durchgestrichen",
"formatHeading": "Überschrift",
"formatList": "Aufzählung",
"formatOrderedList": "Nummerierte Liste",
"formatChecklist": "Checkliste",
"formatLink": "Link",
"formatCode": "Code",
"formatQuote": "Zitat",
"formatDivider": "Trennlinie"
},
"contacts": {
"title": "Kontakte",
"newContact": "Neuer Kontakt",
"editContact": "Kontakt bearbeiten",
"addButton": "Neu",
"newContactLabel": "Neuer Kontakt",
"searchPlaceholder": "Name, Telefon oder E-Mail suchen…",
"importButton": "Import",
"importLabel": "Kontakt aus vCard importieren",
"importTooltip": "vCard importieren",
"emptyTitle": "Noch keine Kontakte",
"emptyDescription": "Neue Kontakte über den + Button hinzufügen.",
"filterAll": "Alle",
"nameLabel": "Name *",
"namePlaceholder": "Vollständiger Name",
"categoryLabel": "Kategorie",
"phoneLabel": "Telefon",
"phonePlaceholder": "+49 …",
"emailLabel": "E-Mail",
"emailPlaceholder": "name@beispiel.de",
"addressLabel": "Adresse",
"addressPlaceholder": "Straße, PLZ Ort",
"notesLabel": "Notizen",
"notesPlaceholder": "Optional…",
"callLabel": "Anrufen",
"emailActionLabel": "E-Mail",
"mapsLabel": "In Maps öffnen",
"exportLabel": "Als vCard exportieren",
"exportTooltip": "vCard exportieren",
"deleteLabel": "Kontakt löschen",
"deleteConfirm": "Kontakt wirklich löschen?",
"deletePersonConfirm": "\"{{name}}\" wirklich löschen?",
"savedToast": "Kontakt gespeichert",
"updatedToast": "Kontakt aktualisiert",
"deletedToast": "Kontakt gelöscht",
"importedToast": "{{name}} importiert.",
"importError": "Import fehlgeschlagen: {{error}}",
"vcardNoName": "vCard enthält keinen Namen.",
"catDoctor": "Arzt",
"catSchool": "Schule/Kita",
"catAuthority": "Behörde",
"catInsurance": "Versicherung",
"catCraftsman": "Handwerker",
"catEmergency": "Notfall",
"catMisc": "Sonstiges"
},
"budget": {
"title": "Budget",
"newEntry": "Neuer Eintrag",
"editEntry": "Eintrag bearbeiten",
"addEntryLabel": "Eintrag hinzufügen",
"newEntryFabLabel": "Neuer Eintrag",
"currentMonth": "Aktuell",
"prevMonth": "Vorheriger Monat",
"nextMonth": "Nächster Monat",
"income": "Einnahmen",
"expenses": "Ausgaben",
"balance": "Saldo",
"byCategory": "Nach Kategorie",
"transactions": "Transaktionen",
"emptyTitle": "Keine Einträge diesen Monat",
"emptyDescription": "Budget-Einträge über den + Button hinzufügen.",
"csvExport": "CSV",
"typeExpense": "Ausgabe",
"typeIncome": "Einnahme",
"titleLabel": "Titel *",
"titlePlaceholder": "z.B. REWE Einkauf",
"amountLabel": "Betrag (€) *",
"amountPlaceholder": "0,00",
"categoryLabel": "Kategorie",
"dateLabel": "Datum *",
"recurringLabel": "Wiederkehrend",
"deleteLabel": "Eintrag löschen",
"deleteConfirm": "Eintrag wirklich löschen?",
"deletePersonConfirm": "\"{{title}}\" wirklich löschen?",
"addedToast": "Eintrag hinzugefügt",
"savedToast": "Eintrag gespeichert",
"deletedToast": "Eintrag gelöscht",
"loadError": "Budget konnte nicht geladen werden.",
"trendNeutral": "— wie {{month}}",
"validAmountRequired": "Gültigen Betrag eingeben",
"dateRequired": "Datum ist erforderlich",
"catFood": "Lebensmittel",
"catRent": "Miete",
"catInsurance": "Versicherung",
"catMobility": "Mobilität",
"catLeisure": "Freizeit",
"catClothing": "Kleidung",
"catHealth": "Gesundheit",
"catEducation": "Bildung",
"catMisc": "Sonstiges",
"loadingIndicator": "Lade…"
},
"settings": {
"title": "Einstellungen",
"sectionDesign": "Design",
"sectionAccount": "Mein Konto",
"sectionCalendarSync": "Kalender-Synchronisation",
"sectionFamily": "Familienmitglieder",
"cardAppearance": "Darstellung",
"themeSystem": "System",
"themeSysLabel": "System-Einstellung verwenden",
"themeLight": "Hell",
"themeLightLabel": "Helles Design",
"themeDark": "Dunkel",
"themeDarkLabel": "Dunkles Design",
"changePassword": "Passwort ändern",
"currentPasswordLabel": "Aktuelles Passwort",
"newPasswordLabel": "Neues Passwort",
"confirmPasswordLabel": "Neues Passwort bestätigen",
"savePassword": "Passwort speichern",
"passwordMismatch": "Passwörter stimmen nicht überein.",
"passwordSavedToast": "Passwort erfolgreich geändert.",
"googleCalendar": "Google Calendar",
"appleCalendar": "Apple Calendar (iCloud)",
"syncNow": "Jetzt synchronisieren",
"disconnect": "Verbindung trennen",
"connectGoogle": "Mit Google verbinden",
"connected": "Verbunden",
"connectedLastSync": "Verbunden · Zuletzt: {{date}}",
"notConnected": "Nicht verbunden",
"notConfigured": "Nicht konfiguriert (fehlende .env-Variablen)",
"configured": "Konfiguriert (via .env)",
"configuredLastSync": "Konfiguriert (via .env) · Zuletzt: {{date}}",
"syncSuccess": "{{provider}} synchronisiert.",
"disconnectedToast": "{{provider}} getrennt.",
"googleOnlyAdmin": "Nur Admin kann Google Calendar verbinden.",
"appleOnlyAdmin": "Nur Admin kann Apple Calendar verbinden.",
"caldavUrlLabel": "CalDAV-Server-URL",
"caldavUrlPlaceholder": "https://caldav.icloud.com",
"appleIdLabel": "Apple-ID (E-Mail)",
"applePasswordLabel": "App-spezifisches Passwort",
"applePasswordHint": "Passwort unter <strong>appleid.apple.com → Sicherheit</strong> erstellen.",
"appleConnectBtn": "Verbinden & testen",
"appleConnecting": "Verbinde…",
"appleConnectedToast": "Apple Calendar verbunden.",
"syncSuccessGoogle": "Kalender-Sync mit Google erfolgreich verbunden.",
"syncSuccessApple": "Kalender-Sync mit Apple erfolgreich verbunden.",
"syncErrorGoogle": "Verbindung mit Google fehlgeschlagen. Bitte erneut versuchen.",
"syncErrorApple": "Verbindung mit Apple fehlgeschlagen. Bitte erneut versuchen.",
"addMember": "+ Mitglied hinzufügen",
"newMemberTitle": "Neues Familienmitglied",
"usernameLabel": "Benutzername",
"displayNameLabel": "Anzeigename",
"memberPasswordLabel": "Passwort",
"colorLabel": "Farbe",
"roleLabel": "Rolle",
"roleMember": "Mitglied",
"roleAdmin": "Admin",
"createMember": "Erstellen",
"cancelAddMember": "Abbrechen",
"memberAddedToast": "{{name}} hinzugefügt.",
"deleteMemberConfirm": "{{name}} wirklich löschen?",
"memberDeletedToast": "{{name}} gelöscht.",
"deleteMemberLabel": "Löschen",
"logout": "Abmelden",
"synchronizing": "Synchronisiere…",
"googleDisconnectConfirm": "Google Calendar-Verbindung trennen?",
"appleDisconnectConfirm": "Apple Calendar-Verbindung trennen?"
},
"login": {
"tagline": "Familienplanung. Sicher. Datenschutzfreundlich. Open Source.",
"usernameLabel": "Benutzername",
"usernamePlaceholder": "benutzername",
"passwordLabel": "Passwort",
"passwordPlaceholder": "••••••••",
"loginButton": "Anmelden",
"loggingIn": "Wird angemeldet …",
"tooManyAttempts": "Zu viele Versuche. Bitte warte kurz.",
"invalidCredentials": "Ungültige Anmeldedaten."
},
"install": {
"title": "Oikos installieren",
"subtitle": "Zur App hinzufügen",
"iosTip1": "Tippe auf ",
"iosTip2": " \u2192 \"Zum Home-Bildschirm\"",
"installButton": "Installieren",
"dismissLabel": "Schließen"
},
"modal": {
"closeLabel": "Schließen"
}
}
+525
View File
@@ -0,0 +1,525 @@
{
"common": {
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"close": "Close",
"create": "Create",
"add": "Add",
"back": "Back",
"next": "Next",
"loading": "Loading…",
"saving": "Saving…",
"required": "This field is required.",
"error": "Error",
"allFieldsRequired": "Please fill in all fields.",
"today": "Today",
"tomorrow": "Tomorrow",
"skipToContent": "Skip to content",
"reload": "Reload",
"errorOccurred": "Something went wrong.",
"unexpectedError": "An unexpected error occurred.",
"errorGeneric": "An error occurred.",
"updateAvailable": "Update available — reload the page to get the latest version.",
"titleRequired": "Title is required",
"nameRequired": "Name is required",
"contentRequired": "Content is required",
"all": "All"
},
"nav": {
"dashboard": "Overview",
"tasks": "Tasks",
"calendar": "Calendar",
"meals": "Meals",
"shopping": "Shopping",
"notes": "Board",
"contacts": "Contacts",
"budget": "Budget",
"settings": "Settings",
"main": "Main navigation",
"navigation": "Navigation",
"quickActions": "Quick actions"
},
"dashboard": {
"title": "Overview",
"greetingMorning": "Good morning, {{name}}",
"greetingDay": "Good afternoon, {{name}}",
"greetingEvening": "Good evening, {{name}}",
"allDone": "All done",
"noEvents": "No events",
"noPinnedNotes": "No pinned notes",
"todayMeals": "Today's meals",
"allLink": "All",
"weekLink": "Week",
"urgentTasksChip": "{{count}} urgent task",
"urgentTasksChipPlural": "{{count}} urgent tasks",
"eventsChip": "{{count}} event today",
"eventsChipPlural": "{{count}} events today",
"todayMealChip": "Today: {{title}}",
"loadError": "Dashboard could not be fully loaded.",
"weatherRefresh": "Refresh weather",
"weatherRefreshTitle": "Refresh",
"weatherFeelsLike": "Feels like {{temp}}° · {{humidity}}% · Wind {{wind}} km/h",
"fabTaskLabel": "Add task",
"fabCalendarLabel": "Add event",
"fabShoppingLabel": "Add shopping",
"fabNoteLabel": "Add note",
"fabTask": "Task",
"fabCalendar": "Event",
"fabShopping": "Shopping",
"fabNote": "Note",
"overdue": "Overdue",
"dueSoon": "Due today",
"dueTomorrow": "Due tomorrow",
"allDay": "All day"
},
"tasks": {
"title": "Tasks",
"newTask": "New Task",
"editTask": "Edit Task",
"emptyTitle": "No tasks — all done?",
"emptyDescription": "Create new tasks with the + button.",
"titleLabel": "Title *",
"titlePlaceholder": "What needs to be done?",
"descriptionLabel": "Note",
"descriptionPlaceholder": "Optional details…",
"priorityLabel": "Priority",
"categoryLabel": "Category",
"dueDateLabel": "Due date",
"dueTimeLabel": "Time",
"assignedLabel": "Assigned to",
"assignedNobody": "— Nobody —",
"statusLabel": "Status",
"priorityUrgent": "Urgent",
"priorityHigh": "High",
"priorityMedium": "Medium",
"priorityLow": "Low",
"statusOpen": "Open",
"statusInProgress": "In Progress",
"statusDone": "Done",
"categoryHousehold": "Household",
"categorySchool": "School",
"categoryShopping": "Shopping",
"categoryRepair": "Repair",
"categoryHealth": "Health",
"categoryFinance": "Finance",
"categoryLeisure": "Leisure",
"categoryMisc": "Miscellaneous",
"overdue": "Overdue",
"overdueDay": "{{count}}d overdue",
"dueToday": "Due today",
"dueTomorrow": "Due tomorrow",
"groupOverdue": "Overdue",
"groupToday": "Today",
"groupThisWeek": "This week",
"groupNextWeek": "Next week",
"groupLater": "Later",
"groupNoDate": "No date",
"markDone": "Mark {{title}} as done",
"editButton": "Edit task",
"swipeOpen": "Reopen",
"swipeDone": "Done",
"swipeEdit": "Edit",
"subtaskAdd": "+ Add subtask",
"subtaskToggle": "Show subtasks",
"subtaskMarkDone": "Mark {{title}} as done",
"deleteConfirm": "Delete task and all subtasks?",
"savedToast": "Task saved.",
"createdToast": "Task created.",
"deletedToast": "Task deleted.",
"loadError": "Task could not be loaded.",
"subtaskPrompt": "Subtask:",
"kanbanOpen": "Open",
"kanbanInProgress": "In Progress",
"kanbanDone": "Done"
},
"shopping": {
"title": "Shopping",
"noLists": "No lists",
"noListsDescription": "Create a list with the + button.",
"emptyList": "The list is empty",
"emptyListDescription": "Add items using the input field above.",
"newListPrompt": "Name for the new list:",
"newListButton": "Create new list",
"renameListPrompt": "New list name:",
"deleteListConfirm": "Delete list \"{{name}}\" and all items?",
"deletedListToast": "List deleted.",
"itemsRemovedToast": "{{count}} items removed.",
"clearChecked": "Remove checked ({{count}})",
"itemNamePlaceholder": "Add item…",
"itemQtyPlaceholder": "Quantity",
"itemNameLabel": "Item name",
"itemQtyLabel": "Quantity",
"categoryLabel": "Category",
"addItemLabel": "Add item",
"renameListLabel": "Rename list",
"deleteListLabel": "Delete list",
"swipeBack": "Undo",
"swipeCheck": "Check off",
"swipeDelete": "Delete",
"markDoneLabel": "Check off {{name}}",
"markUndoneLabel": "Uncheck {{name}}",
"deleteItemLabel": "Delete {{name}}",
"listsLoadError": "Lists could not be loaded.",
"itemsLoadError": "Items could not be loaded.",
"catFruitVeg": "Fruit & Vegetables",
"catBakery": "Bakery",
"catDairy": "Dairy",
"catMeatFish": "Meat & Fish",
"catFrozen": "Frozen",
"catDrinks": "Drinks",
"catHousehold": "Household",
"catDrugstore": "Drugstore",
"catMisc": "Miscellaneous"
},
"meals": {
"title": "Meal Plan",
"noMealPlanned": "No meal planned",
"addMeal": "Add {{type}}",
"editMeal": "Edit meal",
"addMealTitle": "Add meal",
"deleteMeal": "Delete meal",
"transferToShoppingList": "Add ingredients to shopping list",
"today": "Today",
"prevWeek": "Previous week",
"nextWeek": "Next week",
"loadError": "Meal plan could not be loaded.",
"typeBreakfast": "Breakfast",
"typeLunch": "Lunch",
"typeDinner": "Dinner",
"typeSnack": "Snack",
"dayMo": "Mon",
"dayDi": "Tue",
"dayMi": "Wed",
"dayDo": "Thu",
"dayFr": "Fri",
"daySa": "Sat",
"daySo": "Sun",
"dateLabel": "Date",
"mealTypeLabel": "Meal",
"titleLabel": "Title *",
"titlePlaceholder": "e.g. Spaghetti Bolognese",
"notesLabel": "Notes",
"notesPlaceholder": "Optional…",
"ingredientsLabel": "Ingredients",
"addIngredient": "Add ingredient",
"ingredientNamePlaceholder": "Ingredient",
"ingredientQtyPlaceholder": "Quantity",
"removeIngredient": "Remove ingredient",
"transferLabel": "Transfer ingredients to shopping list",
"transferNow": "Transfer now",
"noShoppingLists": "No shopping lists available",
"transferSuccess": "{{count}} ingredient transferred",
"transferSuccessPlural": "{{count}} ingredients transferred",
"transferAlreadyDone": "All ingredients already transferred",
"ingredientCount": "{{count}} ingredient",
"ingredientCountPlural": "{{count}} ingredients",
"titleRequired": "Title is required",
"loadingIndicator": "Loading…"
},
"calendar": {
"title": "Calendar",
"newEvent": "New Event",
"editEvent": "Edit Event",
"addEvent": "Add event",
"deleteEvent": "Delete event",
"noEvents": "No events in the selected period.",
"today": "Today",
"back": "Back",
"forward": "Forward",
"viewMonth": "Month",
"viewWeek": "Week",
"viewDay": "Day",
"viewAgenda": "Agenda",
"allDay": "All day",
"allDayShort": "all day",
"moreEvents": "+{{count}} more",
"weekNumberLabel": "W{{week}} · {{month}} {{year}}",
"agendaFrom": "From {{date}}",
"titleLabel": "Title *",
"titlePlaceholder": "e.g. Dentist",
"allDayToggle": "All day",
"startDateLabel": "Start date",
"startTimeLabel": "Start time",
"endDateLabel": "End date",
"endTimeLabel": "End time",
"fromLabel": "From",
"toLabel": "To",
"locationLabel": "Location",
"locationPlaceholder": "Optional",
"assignedLabel": "Assigned to",
"assignedNobody": "— Nobody —",
"colorLabel": "Color",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Optional…",
"popupEdit": "Edit",
"deleteConfirm": "Really delete \"{{title}}\"?",
"createdToast": "Event created",
"savedToast": "Event saved",
"deletedToast": "Event deleted",
"loadError": "Events could not be loaded.",
"saveError": "Error saving",
"deleteError": "Error deleting",
"titleRequired": "Title is required",
"monthJanuary": "January",
"monthFebruary": "February",
"monthMarch": "March",
"monthApril": "April",
"monthMay": "May",
"monthJune": "June",
"monthJuly": "July",
"monthAugust": "August",
"monthSeptember": "September",
"monthOctober": "October",
"monthNovember": "November",
"monthDecember": "December",
"dayShortSunday": "Sun",
"dayShortMonday": "Mon",
"dayShortTuesday": "Tue",
"dayShortWednesday": "Wed",
"dayShortThursday": "Thu",
"dayShortFriday": "Fri",
"dayShortSaturday": "Sat",
"dayLongSunday": "Sunday",
"dayLongMonday": "Monday",
"dayLongTuesday": "Tuesday",
"dayLongWednesday": "Wednesday",
"dayLongThursday": "Thursday",
"dayLongFriday": "Friday",
"dayLongSaturday": "Saturday"
},
"notes": {
"title": "Board",
"newNote": "New Note",
"editNote": "Edit Note",
"addNoteLabel": "New Note",
"searchPlaceholder": "Search notes…",
"emptyTitle": "No notes yet",
"emptyDescription": "Create a new note with the + button.",
"noResultsTitle": "No results",
"noResultsDescription": "No note contains \"{{query}}\".",
"titleLabel": "Title (optional)",
"titlePlaceholder": "No title",
"contentLabel": "Content",
"contentMarkdownHint": "(Markdown formatting supported)",
"contentPlaceholder": "Enter note…",
"colorLabel": "Color",
"pinnedLabel": "Pin (appears on dashboard)",
"pinAction": "Pin",
"unpinAction": "Unpin",
"deleteLabel": "Delete note",
"deleteConfirm": "Really delete this note?",
"createdToast": "Note created",
"savedToast": "Note saved",
"deletedToast": "Note deleted",
"loadError": "Notes could not be loaded.",
"formatBold": "Bold (Ctrl+B)",
"formatItalic": "Italic (Ctrl+I)",
"formatUnderline": "Underline (Ctrl+U)",
"formatStrikethrough": "Strikethrough",
"formatHeading": "Heading",
"formatList": "Bullet list",
"formatOrderedList": "Numbered list",
"formatChecklist": "Checklist",
"formatLink": "Link",
"formatCode": "Code",
"formatQuote": "Quote",
"formatDivider": "Divider"
},
"contacts": {
"title": "Contacts",
"newContact": "New Contact",
"editContact": "Edit Contact",
"addButton": "New",
"newContactLabel": "New Contact",
"searchPlaceholder": "Search by name, phone or email…",
"importButton": "Import",
"importLabel": "Import contact from vCard",
"importTooltip": "Import vCard",
"emptyTitle": "No contacts yet",
"emptyDescription": "Add new contacts with the + button.",
"filterAll": "All",
"nameLabel": "Name *",
"namePlaceholder": "Full name",
"categoryLabel": "Category",
"phoneLabel": "Phone",
"phonePlaceholder": "+1 …",
"emailLabel": "Email",
"emailPlaceholder": "name@example.com",
"addressLabel": "Address",
"addressPlaceholder": "Street, ZIP City",
"notesLabel": "Notes",
"notesPlaceholder": "Optional…",
"callLabel": "Call",
"emailActionLabel": "Email",
"mapsLabel": "Open in Maps",
"exportLabel": "Export as vCard",
"exportTooltip": "Export vCard",
"deleteLabel": "Delete contact",
"deleteConfirm": "Really delete this contact?",
"deletePersonConfirm": "Really delete \"{{name}}\"?",
"savedToast": "Contact saved",
"updatedToast": "Contact updated",
"deletedToast": "Contact deleted",
"importedToast": "{{name}} imported.",
"importError": "Import failed: {{error}}",
"vcardNoName": "vCard does not contain a name.",
"catDoctor": "Doctor",
"catSchool": "School/Childcare",
"catAuthority": "Authority",
"catInsurance": "Insurance",
"catCraftsman": "Tradesperson",
"catEmergency": "Emergency",
"catMisc": "Miscellaneous"
},
"budget": {
"title": "Budget",
"newEntry": "New Entry",
"editEntry": "Edit Entry",
"addEntryLabel": "Add entry",
"newEntryFabLabel": "New Entry",
"currentMonth": "Current",
"prevMonth": "Previous month",
"nextMonth": "Next month",
"income": "Income",
"expenses": "Expenses",
"balance": "Balance",
"byCategory": "By category",
"transactions": "Transactions",
"emptyTitle": "No entries this month",
"emptyDescription": "Add budget entries with the + button.",
"csvExport": "CSV",
"typeExpense": "Expense",
"typeIncome": "Income",
"titleLabel": "Title *",
"titlePlaceholder": "e.g. Supermarket",
"amountLabel": "Amount (€) *",
"amountPlaceholder": "0.00",
"categoryLabel": "Category",
"dateLabel": "Date *",
"recurringLabel": "Recurring",
"deleteLabel": "Delete entry",
"deleteConfirm": "Really delete this entry?",
"deletePersonConfirm": "Really delete \"{{title}}\"?",
"addedToast": "Entry added",
"savedToast": "Entry saved",
"deletedToast": "Entry deleted",
"loadError": "Budget could not be loaded.",
"trendNeutral": "— same as {{month}}",
"validAmountRequired": "Please enter a valid amount",
"dateRequired": "Date is required",
"catFood": "Groceries",
"catRent": "Rent",
"catInsurance": "Insurance",
"catMobility": "Transport",
"catLeisure": "Leisure",
"catClothing": "Clothing",
"catHealth": "Health",
"catEducation": "Education",
"catMisc": "Miscellaneous",
"loadingIndicator": "Loading…"
},
"settings": {
"title": "Settings",
"sectionDesign": "Appearance",
"sectionAccount": "My Account",
"sectionCalendarSync": "Calendar Sync",
"sectionFamily": "Family Members",
"cardAppearance": "Display",
"themeSystem": "System",
"themeSysLabel": "Use system setting",
"themeLight": "Light",
"themeLightLabel": "Light mode",
"themeDark": "Dark",
"themeDarkLabel": "Dark mode",
"changePassword": "Change password",
"currentPasswordLabel": "Current password",
"newPasswordLabel": "New password",
"confirmPasswordLabel": "Confirm new password",
"savePassword": "Save password",
"passwordMismatch": "Passwords do not match.",
"passwordSavedToast": "Password changed successfully.",
"googleCalendar": "Google Calendar",
"appleCalendar": "Apple Calendar (iCloud)",
"syncNow": "Sync now",
"disconnect": "Disconnect",
"connectGoogle": "Connect with Google",
"connected": "Connected",
"connectedLastSync": "Connected · Last: {{date}}",
"notConnected": "Not connected",
"notConfigured": "Not configured (missing .env variables)",
"configured": "Configured (via .env)",
"configuredLastSync": "Configured (via .env) · Last: {{date}}",
"syncSuccess": "{{provider}} synced.",
"disconnectedToast": "{{provider}} disconnected.",
"googleOnlyAdmin": "Only admin can connect Google Calendar.",
"appleOnlyAdmin": "Only admin can connect Apple Calendar.",
"caldavUrlLabel": "CalDAV Server URL",
"caldavUrlPlaceholder": "https://caldav.icloud.com",
"appleIdLabel": "Apple ID (email)",
"applePasswordLabel": "App-specific password",
"applePasswordHint": "Create password at <strong>appleid.apple.com → Security</strong>.",
"appleConnectBtn": "Connect & test",
"appleConnecting": "Connecting…",
"appleConnectedToast": "Apple Calendar connected.",
"syncSuccessGoogle": "Calendar sync with Google connected successfully.",
"syncSuccessApple": "Calendar sync with Apple connected successfully.",
"syncErrorGoogle": "Connection to Google failed. Please try again.",
"syncErrorApple": "Connection to Apple failed. Please try again.",
"addMember": "+ Add member",
"newMemberTitle": "New Family Member",
"usernameLabel": "Username",
"displayNameLabel": "Display name",
"memberPasswordLabel": "Password",
"colorLabel": "Color",
"roleLabel": "Role",
"roleMember": "Member",
"roleAdmin": "Admin",
"createMember": "Create",
"cancelAddMember": "Cancel",
"memberAddedToast": "{{name}} added.",
"deleteMemberConfirm": "Really delete {{name}}?",
"memberDeletedToast": "{{name}} deleted.",
"deleteMemberLabel": "Delete",
"logout": "Log out",
"synchronizing": "Syncing…",
"googleDisconnectConfirm": "Disconnect Google Calendar?",
"appleDisconnectConfirm": "Disconnect Apple Calendar?"
},
"login": {
"tagline": "Family planning. Secure. Privacy-friendly. Open source.",
"usernameLabel": "Username",
"usernamePlaceholder": "username",
"passwordLabel": "Password",
"passwordPlaceholder": "••••••••",
"loginButton": "Log in",
"loggingIn": "Logging in…",
"tooManyAttempts": "Too many attempts. Please wait a moment.",
"invalidCredentials": "Invalid credentials."
},
"install": {
"title": "Install Oikos",
"subtitle": "Add to home screen",
"iosTip1": "Tap ",
"iosTip2": " → \"Add to Home Screen\"",
"installButton": "Install",
"dismissLabel": "Close"
},
"modal": {
"closeLabel": "Close"
}
}