diff --git a/public/locales/de/auth.json b/public/locales/de/auth.json index 8cdc6ca7..870aa639 100644 --- a/public/locales/de/auth.json +++ b/public/locales/de/auth.json @@ -1,7 +1,7 @@ { "validationError": "Validierungsfehler", - "primaryUsernameRequired": "Der Benutzername des Hauptkontos ist für die Anmeldung am Unterkonto erforderlich", - "subNameRequired": "Der Name des Unterkontos ist für die Anmeldung am Unterkonto erforderlich", + "primaryUsernameRequired": "Für die Anmeldung bei einem Unterkonto ist der Benutzername des Hauptkontos erforderlich", + "subNameRequired": "Für die Anmeldung bei einem Unterkonto ist dessen Name erforderlich", "usernameRequired": "Benutzername ist erforderlich", "passwordRequired": "Passwort ist erforderlich", "loginFailed": "Anmeldung fehlgeschlagen", @@ -112,7 +112,7 @@ "signInToContinueSubtitle": "Melde dich bei deinem Konto an, um fortzufahren.", "continueAs": "Weiter als {{name}}", "dontHaveAccount": "Du hast noch kein Konto?", - "privacyPolicy": "Datenschutzbestimmungen", + "privacyPolicy": "Datenschutzerklärung", "termsOfUse": "Nutzungsbedingungen", "emailRequired": "E-Mail-Adresse ist erforderlich", "validEmailRequired": "Bitte gib eine gültige E-Mail-Adresse ein", diff --git a/public/locales/de/chores.json b/public/locales/de/chores.json index 677a6040..703f325c 100644 --- a/public/locales/de/chores.json +++ b/public/locales/de/chores.json @@ -26,9 +26,9 @@ "taskCompleted": "Aufgabe abgeschlossen", "taskCompletedMessage": "Deine Aufgabe wurde als abgeschlossen markiert", "taskCompletionUndone": "Aufgabenabschluss wurde rückgängig gemacht.", - "taskSkipUndone": "Aufgabe überspringen wurde rückgängig gemacht.", - "undoSuccessful": "Rückgängig erfolgreich", - "undoFailed": "Rückgängig fehlgeschlagen", + "taskSkipUndone": "Das Überspringen der Aufgabe wurde rückgängig gemacht.", + "undoSuccessful": "Erfolgreich rückgängig gemacht", + "undoFailed": "Rückgängigmachen fehlgeschlagen", "undoFailedMessage": "Die Aktion konnte nicht rückgängig gemacht werden. Bitte versuche es erneut.", "resetTimer": "Timer zurücksetzen", "resetTimerConfirmation": "Bist du sicher, dass du den Timer zurücksetzen möchtest? Dies löscht alle Zeitaufzeichnungen seit du die Aufgabe gestartet hast.", @@ -210,7 +210,7 @@ "noDueDateDesc_other": "{{count}} Aufgaben benötigen eine Frist" }, "labels": { - "label": "Beschriftungen" + "label": "Labels" }, "actionMenu": { "view": "Anzeigen", @@ -261,14 +261,14 @@ "bulk": { "completeTitle": "Aufgaben abschließen", "completedTitle": "✅ Aufgaben abgeschlossen", - "completeFailedTitle": "Massenabschluss fehlgeschlagen", + "completeFailedTitle": "Abschluss mehrerer Aufgaben fehlgeschlagen", "archiveTitle": "Aufgaben archivieren", "archivedTitle": "📦 Aufgaben archiviert", - "archiveFailedTitle": "Massenarchivierung fehlgeschlagen", + "archiveFailedTitle": "Das Archivieren mehrerer Aufgaben ist fehlgeschlagen", "deleteTitle": "Aufgaben löschen", "skipTitle": "Aufgaben überspringen", "skippedTitle": "⏭️ Aufgaben übersprungen", - "skipFailedTitle": "Massenüberspringen fehlgeschlagen" + "skipFailedTitle": "Das Überspringen mehrere Aufgaben ist fehlgeschlagen" } }, "archived": { @@ -279,7 +279,7 @@ "someFailedTitle": "Einige Aufgaben sind fehlgeschlagen", "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut.", "deletedBulkTitle": "🗑️ Aufgaben gelöscht", - "bulkDeleteFailTitle": "Massenlöschung fehlgeschlagen", + "bulkDeleteFailTitle": "Die Löschung mehrerer Aufgaben ist fehlgeschlagen", "archivedDate": "Archivierungsdatum", "loadFailTitle": "Archivierte Aufgaben konnten nicht geladen werden", "loadFailMsg": "Bitte versuche es später erneut.", @@ -293,7 +293,7 @@ "restoredCount_other": "{{count}} Aufgaben wiederhergestellt{{offline}}.", "restoreFailCount_one": "{{count}} Aufgabe konnte nicht wiederhergestellt werden.", "restoreFailCount_other": "{{count}} Aufgaben konnten nicht wiederhergestellt werden.", - "bulkRestoreFailTitle": "Massenwiederherstellung fehlgeschlagen", + "bulkRestoreFailTitle": "Die Wiederherstellung mehrerer Aufgaben ist fehlgeschlagen", "deleteTasksTitle": "Archivierte Aufgaben löschen", "deleteConfirm_one": "{{count}} archivierte Aufgabe dauerhaft löschen?\n\nDiese Aktion kann nicht rückgängig gemacht werden.", "deleteConfirm_other": "{{count}} archivierte Aufgaben dauerhaft löschen?\n\nDiese Aktion kann nicht rückgängig gemacht werden.", @@ -310,17 +310,17 @@ "exitMultiSelect": "Mehrfachauswahl beenden (Strg+S)", "enableMultiSelect": "Mehrfachauswahl aktivieren (Strg+S)", "selected_one": "{{count}} Aufgabe ausgewählt", - "selected_other": "{{count}} Aufgaben ausgewählt", + "selected_other": "{{count}}\u00a0Aufgaben ausgewählt", "selectAllTitle": "Alle sichtbaren Aufgaben auswählen (Strg+A)", "all": "Alle", "closeMultiSelect": "Mehrfachauswahl schließen (Esc)", - "clearMultiSelect": "Mehrfachauswahl leeren (Esc)", + "clearMultiSelect": "Auswahl aufheben (Esc)", "close": "Schließen", "clear": "Leeren", "restoreSelectedTitle": "Ausgewählte Aufgaben wiederherstellen (R)", "deleteSelectedTitle": "Ausgewählte Aufgaben löschen (E)", "clearSearch": "Suche löschen", - "clearFilters": "Filter löschen", + "clearFilters": "Filter zurücksetzen", "count_one": "{{count}} archivierte Aufgabe", "count_other": "{{count}} archivierte Aufgaben", "matching": " passend zu „{{term}}“", @@ -363,7 +363,7 @@ "archive": "Archivieren", "deleteTitle": "Ausgewählte Aufgaben löschen (Umschalt+X)", "mixed": "Gemischt", - "due": "Fällig", + "due": "Fälligkeit", "dueTitleSet": "Fälligkeitsdatum der ausgewählten Aufgaben: {{value}}", "dueTitleEmpty": "Fälligkeitsdatum für ausgewählte Aufgaben festlegen", "presetToday": "Heute", @@ -374,11 +374,11 @@ "moveTitle": "Ausgewählte Aufgaben in ein Projekt verschieben", "move": "Verschieben", "defaultProject": "Standardprojekt", - "moreTitle": "Priorität, Zuweisung oder Beschriftungen festlegen", + "moreTitle": "Priorität, Zuweisung oder Labels festlegen", "more": "Mehr", "priority": "Priorität", "assignee": "Zugewiesene Person", - "labels": "Beschriftungen", + "labels": "Labels", "labelsHint": "Tippen zum Hinzufügen · erneut tippen zum Entfernen", "done": "Fertig", "noPriority": "Keine" @@ -399,7 +399,11 @@ "removeAria": "Erinnerungen entfernen" }, "assignee": { - "anyone": "Jeder" + "label": "Zugewiesene Person", + "anyone": "Jeder", + "unknown": "Unbekannt", + "selectedCount_one": "{{count}} zugewiesene Person", + "selectedCount_other": "{{count}} zugewiesene Personen" }, "filterChip": { "cancelAll": "Alle Filter aufheben", @@ -466,7 +470,7 @@ "newChore": "Neue Aufgabe", "unassigned": "Nicht zugewiesen", "changeDueDate": "Fälligkeitsdatum ändern", - "colDue": "Fällig", + "colDue": "Fälligkeit", "colChore": "Aufgabe", "colAssignee": "Zugewiesene Person", "colAction": "Aktion" @@ -520,7 +524,7 @@ "customTime": "Benutzerdefinierte Uhrzeit", "anytime": "Beliebige Uhrzeit", "specificTime": "Bestimmte Uhrzeit", - "due": "Fällig", + "due": "Fälligkeit", "clearAria": "Fälligkeitsdatum entfernen" }, "attachmentPicker": { @@ -546,7 +550,7 @@ "addPlaceholder": "Neue Aufgabe hinzufügen... (Eingabetaste zum Hinzufügen)" }, "voiceToTask": { - "title": "Sprich deine Aufgaben", + "title": "Sprich deine Aufgaben ein", "onDevice": "Auf dem Gerät", "micDeniedMessage": "Für die Sprachaufnahme wird Mikrofonzugriff benötigt. Aktiviere ihn in deinen Geräteeinstellungen und versuche es erneut.", "tryAgain": "Erneut versuchen", @@ -658,9 +662,9 @@ "project": "Projekt", "projectDesc": "Zu welchem Projekt gehört diese Aufgabe?", "defaultProject": "Standardprojekt", - "labels": "Beschriftungen", + "labels": "Labels", "labelsDesc": "Hinweise zu dieser Aufgabe oder Schlagwörter zur Kennzeichnung", - "addNewLabel": "Neue Beschriftung hinzufügen", + "addNewLabel": "Neues Label hinzufügen", "subTasks": "Unteraufgaben", "attachments": "Anhänge", "attachmentsDesc": "An diese Aufgabe angehängte Dateien", @@ -942,7 +946,7 @@ "statusHeading": "Status", "priority": "Priorität", "dueDate": "Fälligkeitsdatum", - "labels": "Beschriftungen", + "labels": "Labels", "projects": "Projekte", "defaultProject": "Standardprojekt", "points": "Punkte", @@ -950,7 +954,7 @@ "filterFallback": "Filter", "notPrefix": "Nicht ", "customDueDate": "Benutzerdefiniert", - "clear": "Leeren" + "clear": "Zurücksetzen" }, "empty": { "errorTitle": "Donetick ist nicht erreichbar", @@ -965,7 +969,7 @@ "noMatchFilters": "Du hast Aufgaben, aber keine davon entspricht den aktuell gesetzten Filtern.", "clearSearch": "Suche löschen", "showEveryone": "Aufgaben aller anzeigen", - "clearFilters": "Filter löschen", + "clearFilters": "Filter zurücksetzen", "projectTitle": "Noch nichts in {{name}}", "projectDescription": "Aufgaben, die du diesem Projekt hinzufügst, erscheinen hier. Deine anderen Aufgaben bleiben dort, wo sie sind.", "addTaskHere": "Hier eine Aufgabe hinzufügen", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 22981483..f5239fee 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -28,7 +28,7 @@ "Ocean": "Ozean", "Mustard": "Senf", "Ruby": "Rubin", - "Periwinkle": "Immergrün", + "Periwinkle": "Lavendelblau", "Turquoise": "Türkis", "Lime": "Limette", "Blush": "Rosé", @@ -48,9 +48,9 @@ "navigation": { "search": "Suche", "allTasks": "Alle Aufgaben", - "archived": "Archiviert", + "archived": "Archiv", "things": "Dinge", - "labels": "Beschriftungen", + "labels": "Labels", "projects": "Projekte", "filters": "Filter", "activities": "Aktivitäten", @@ -61,7 +61,7 @@ "search": { "title": "Suche", "placeholder": "Donetick durchsuchen", - "inputAriaLabel": "Aufgaben, Verlauf, Projekte, Beschriftungen und Einstellungen durchsuchen", + "inputAriaLabel": "Aufgaben, Verlauf, Projekte, Labels und Einstellungen durchsuchen", "deviceNote": "Es wird in Inhalten gesucht, die auf diesem Gerät verfügbar sind", "escape": "Esc", "recent": "Zuletzt verwendet", @@ -74,7 +74,7 @@ "tasks": "Aufgaben", "history": "Notizen", "projects": "Projekte", - "labels": "Beschriftungen", + "labels": "Labels", "people": "Personen", "settings": "Einstellungen", "actions": "Schnellaktionen" @@ -83,13 +83,13 @@ "quickAction": "Schnellaktion", "navigation": "Navigation", "createTask": "Aufgabe erstellen", - "createLabel": "Beschriftung erstellen", + "createLabel": "Label erstellen", "createProject": "Projekt erstellen", "createFilter": "Filter erstellen", "viewAllTasks": "Alle Aufgaben anzeigen", "viewArchivedTasks": "Archivierte Aufgaben anzeigen", "viewThings": "Dinge anzeigen", - "viewLabels": "Beschriftungen anzeigen", + "viewLabels": "Labels anzeigen", "viewProjects": "Projekte anzeigen", "viewFilters": "Filter anzeigen", "viewActivities": "Aktivitäten anzeigen", @@ -104,7 +104,7 @@ "results_one": "{{count}} Ergebnis", "results_other": "{{count}} Ergebnisse", "typeToSearch": "Zum Suchen tippen", - "slashHint": "/ um zu einer Ansicht zu springen" + "slashHint": "/ drücken, um zu einer Ansicht zu springen" }, "modes": { "actions": { @@ -220,7 +220,7 @@ "planPlus": "Plus", "planPlusExpiring": "Plus (läuft bald ab)", "switchUser": "Benutzer wechseln", - "impersonateUser": "Benutzer übernehmen", + "impersonateUser": "Benutzeridentität übernehmen", "switchToLight": "Zum hellen Design wechseln", "switchToDark": "Zum dunklen Design wechseln", "unlockPremium": "Premium-Funktionen freischalten", @@ -251,7 +251,7 @@ "apply": "Übernehmen", "cancelAll": "Alle abbrechen", "backFromSearch": "Zurück aus der Suche", - "newVersionAvailable": "Eine neue Version ist jetzt verfügbar. Klicke auf die Aktualisieren-Schaltfläche, um zu aktualisieren.", + "newVersionAvailable": "Eine neue Version ist verfügbar. Klicke auf die Aktualisieren-Schaltfläche, um sie zu installieren.", "notFound": { "title": "Seite nicht gefunden", "description": "Dieser Link führt ins Leere. Möglicherweise wurde er verschoben oder die Adresse enthält einen Tippfehler.", @@ -339,9 +339,9 @@ "type": "Tippen" }, "capture": { - "voiceCaption": "Datumsangaben, Beschriftungen und Punkte aus deinen Worten", + "voiceCaption": "Datumsangaben, Labels und Punkte aus deinen Worten", "deviceCaption": "Auf deinem Gerät auslesen", - "typeCaption": "#Beschriftungen @Personen *Punkte beim Tippen", + "typeCaption": "#Labels @Personen *Punkte beim Tippen", "trashTitle": "♻️ Müll rausbringen", "trashDue": "Morgen fällig", "trashRepeat": "Jeden Montag", @@ -420,7 +420,7 @@ "problemTitle": "Vergiss die kleinen Dinge nicht mehr", "problemBody": "Donetick merkt sich, wann etwas zuletzt erledigt wurde und wann es wieder fällig ist. So muss es sich niemand sonst merken.", "captureTitle": "Trag es ein, bevor du es vergisst", - "captureBody": "Tippe es ein, sprich es aus oder mach ein Foto. Donetick ergänzt Fälligkeitsdatum, Priorität, Beschriftungen und Zuständigkeit.", + "captureBody": "Tippe es ein, sprich es aus oder mach ein Foto. Donetick ergänzt Fälligkeitsdatum, Priorität, Labels und Zuständigkeit.", "scheduleTitle": "Es kommt genau dann wieder, wenn es soll", "scheduleBody": "Jede Woche, alle 3 Monate oder einen Monat nachdem du es tatsächlich erledigt hast. Ein verspäteter Abschluss verschiebt nicht gleich den Rest des Jahres.", "circleTitle": "Jeder kommt dran – Schluss mit Diskussionen", diff --git a/public/locales/de/history.json b/public/locales/de/history.json index 872d0f12..27223918 100644 --- a/public/locales/de/history.json +++ b/public/locales/de/history.json @@ -50,7 +50,7 @@ }, "charts": { "noData": "Keine Daten verfügbar", - "noLabels": "Keine Beschriftungen", + "noLabels": "Keine Labels", "unassigned": "Nicht zugewiesen", "unknownTask": "Unbekannte Aufgabe", "late": "Verspätet", @@ -67,12 +67,12 @@ "description": "Aufgaben nach Priorität" }, "labels": { - "title": "Beschriftungen", - "description": "Aufgaben nach Beschriftungen" + "title": "Labels", + "description": "Aufgaben nach Labels" }, "labelsDuration": { - "title": "Beschriftungen (Zeit)", - "description": "Aufgewendete Zeit nach Beschriftungen (Stunden)" + "title": "Labels (Zeit)", + "description": "Aufgewendete Zeit nach Labels (Stunden)" }, "tasksTime": { "title": "Aufgaben (Zeit)", @@ -86,7 +86,7 @@ "filter": { "status": "Status", "pending": "Ausstehend", - "labels": "Beschriftungen", + "labels": "Labels", "hasNotes": "Mit Notizen", "hasPoints": "Mit Punkten", "timePeriod": "Zeitraum", diff --git a/public/locales/de/labels.json b/public/locales/de/labels.json index 7825b82f..e5ecf8e1 100644 --- a/public/locales/de/labels.json +++ b/public/locales/de/labels.json @@ -1,47 +1,47 @@ { "shared": "Geteilt", "delete": { - "title": "Beschriftung löschen", - "message": "Möchtest du diese Beschriftung wirklich löschen? Sie wird von allen Aufgaben entfernt." + "title": "Label löschen", + "message": "Möchtest du dieses Label wirklich löschen? Es wird von allen Aufgaben entfernt." }, - "loadError": "Beschriftungen konnten nicht geladen werden. Bitte versuche es erneut.", + "loadError": "Labels konnten nicht geladen werden. Bitte versuche es erneut.", "search": { - "placeholder": "Beschriftungen durchsuchen", - "noResultsTitle": "Keine passenden Beschriftungen", - "noResultsDescription": "Keine Beschriftung passt zu „{{searchTerm}}“.", - "noFilterResultsDescription": "Keine Beschriftung entspricht dem aktuellen Filter.", + "placeholder": "Labels durchsuchen", + "noResultsTitle": "Keine passenden Labels", + "noResultsDescription": "Kein Label passt zu „{{searchTerm}}“.", + "noFilterResultsDescription": "Kein Label entspricht dem aktuellen Filter.", "clear": "Suche löschen", - "showAll": "Alle Beschriftungen anzeigen" + "showAll": "Alle Labels anzeigen" }, "detail": { "taskCount_one": "{{count}} Aufgabe", "taskCount_other": "{{count}} Aufgaben", - "labelActions": "Beschriftungsaktionen", + "labelActions": "Label-Aktionen", "filters": { "all": "Alle", "overdue": "Überfällig", "today": "Heute", "undated": "Kein Datum" }, - "noMatchingStatus": "Keine Aufgabe mit dieser Beschriftung hat derzeit diesen Status.", + "noMatchingStatus": "Keine Aufgabe mit diesem Label hat derzeit diesen Status.", "clearFilters": "Alle Aufgaben anzeigen", - "searchPlaceholder": "Aufgaben mit dieser Beschriftung durchsuchen", - "emptyTitle": "Keine Aufgaben mit dieser Beschriftung", - "emptyDescription": "Noch ist nichts mit „{{label}}“ gekennzeichnet. Füge die Beschriftung einer Aufgabe hinzu, dann erscheint sie hier.", + "searchPlaceholder": "Aufgaben mit diesem Label durchsuchen", + "emptyTitle": "Keine Aufgaben mit diesem Label", + "emptyDescription": "Noch ist nichts mit „{{label}}“ gekennzeichnet. Füge das Label einer Aufgabe hinzu, dann erscheint sie hier.", "browseTasks": "Aufgaben durchsuchen", "noResultsTitle": "Keine passenden Aufgaben", - "noResultsDescription": "Keine Aufgabe mit dieser Beschriftung passt zu „{{searchTerm}}“.", - "notFoundTitle": "Beschriftung nicht gefunden", - "notFoundDescription": "Diese Beschriftung wurde möglicherweise gelöscht oder wird nicht mehr mit dir geteilt.", - "backToLabels": "Zurück zu den Beschriftungen" + "noResultsDescription": "Keine Aufgabe mit diesem Label passt zu „{{searchTerm}}“.", + "notFoundTitle": "Label nicht gefunden", + "notFoundDescription": "Dieses Label wurde möglicherweise gelöscht oder wird nicht mehr mit dir geteilt.", + "backToLabels": "Zurück zu den Labels" }, - "blurb": "Verwalte deine Beschriftungen und organisiere deine Aufgaben übersichtlich. Beschriftungen werden automatisch mit deinem Kreis geteilt, wenn sie für eine geteilte Aufgabe verwendet werden.", + "blurb": "Verwalte deine Labels und organisiere deine Aufgaben übersichtlich. Labels werden automatisch mit deinem Kreis geteilt, wenn sie für eine geteilte Aufgabe verwendet werden.", "modal": { "errorEmptyName": "Name darf nicht leer sein", - "errorDuplicate": "Eine Beschriftung mit diesem Namen ist bereits vorhanden", + "errorDuplicate": "Ein Label mit diesem Namen ist bereits vorhanden", "errorNoColor": "Bitte wähle eine Farbe aus", - "saveFailedTitle": "Beschriftung konnte nicht gespeichert werden", - "saveFailedMessage": "Beschriftung konnte nicht gespeichert werden. Bitte versuche es erneut.", + "saveFailedTitle": "Label konnte nicht gespeichert werden", + "saveFailedMessage": "Label konnte nicht gespeichert werden. Bitte versuche es erneut.", "name": "Name", "editTitle": "Label bearbeiten", "addTitle": "Label hinzufügen", diff --git a/public/locales/de/projects.json b/public/locales/de/projects.json index aa15d55a..ff5f7f07 100644 --- a/public/locales/de/projects.json +++ b/public/locales/de/projects.json @@ -51,7 +51,7 @@ "selector": { "title": "Projekte", "createNew": "Neues Projekt erstellen", - "createNewDescription": "Eigenen Projektarbeitsbereich hinzufügen", + "createNewDescription": "Eigenen Projekt-Arbeitsbereich hinzufügen", "manage": "Projekte verwalten", "manageDescription": "Alle Projekte anzeigen, bearbeiten und organisieren", "currentProjectTitle": "Aktuelles Projekt: {{project}} (Strg+E)", diff --git a/public/locales/de/settings.json b/public/locales/de/settings.json index 9f35a78c..1237bdad 100644 --- a/public/locales/de/settings.json +++ b/public/locales/de/settings.json @@ -35,7 +35,7 @@ "description": "Aktualisiere deine Profildaten, dein Foto, deinen Anzeigenamen und deine Zeitzone." }, "circle": { - "title": "Kreis-Einstellungen", + "title": "Kreiseinstellungen", "description": "Verwalte deinen Kreis, lade Mitglieder ein und bearbeite Beitrittsanfragen." }, "account": { @@ -55,7 +55,7 @@ "description": "Erhöhe deine Sicherheit mit MFA über Authenticator-Apps." }, "apitokens": { - "title": "API-Token", + "title": "API-Tokens", "description": "Erstelle und verwalte Zugriffstoken für Drittanbieter-Integrationen und API-Zugriff." }, "storage": { @@ -142,7 +142,7 @@ "requestedToJoin": "Beitrittsanfrage {{date}}", "roles": { "member": "Mitglied", - "memberDescription": "Ein normales Mitglied des Kreise", + "memberDescription": "Ein reguläres Mitglied des Kreises", "manager": "Manager", "managerDescription": "Kann sich als Nutzer ausgeben und in deren Namen handeln", "admin": "Administrator", @@ -167,7 +167,7 @@ "enterCodePlaceholder": "Code eingeben", "joinCircle": "Kreis beitreten", "joinedPending": "Kreis erfolgreich beigetreten, warte auf die Bestätigung durch die Kreisbesitzerin oder den Kreisbesitzer.", - "alreadyMember": "Du bist bereits Mitglied dieses Kreise", + "alreadyMember": "Du bist bereits Mitglied dieses Kreises", "joinFailed": "Beitritt zum Kreis fehlgeschlagen", "copyLink": "Link kopieren" }, @@ -357,7 +357,7 @@ "generateCodes": "Neue Codes erzeugen" }, "apiTokens": { - "title": "API-Token", + "title": "API-Tokens", "accessToken": "Zugriffstoken", "description": "Erstelle ein Token, um über die API Dinge zu aktualisieren, die Aufgaben auslösen", "plusNotice": "API-Token sind im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um API-Token für die Anbindung externer Systeme und die Automatisierung deiner Aufgaben zu erstellen.", @@ -374,11 +374,11 @@ }, "storage": { "title": "Speichereinstellungen", - "serverTitle": "Serverspeicher-Nutzung", + "serverTitle": "Serverspeichernutzung", "serverDescription": "Das ist der Speicher, den dein Konto auf unseren Servern belegt (z. B. Dateien, Bilder und hochgeladene Daten).", "usagePlaceholder": "-- MB belegt / -- MB gesamt (--)", "usage": "{{used}} MB belegt / {{total}} MB gesamt ({{percent}} %)", - "basicPlanNotice": "Serverspeicher ist im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um deine Serverspeicher-Nutzung zu verfolgen.", + "basicPlanNotice": "Serverspeicher ist im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um deine Serverspeichernutzung zu verfolgen.", "localTitleApp": "Lokaler App-Speicher & Cache", "localTitleBrowser": "Lokaler Browser-Speicher & Cache", "localDescription": "Das sind Daten, die für schnelleren Zugriff lokal in deinem Browser gespeichert werden. Das Löschen wirkt sich nicht auf deine Serverdaten aus, meldet dich aber möglicherweise ab.", @@ -430,7 +430,7 @@ "theme": { "title": "Design-Einstellungen", "description": "Lege fest, wie die Seite für dich aussieht. Wähle ein festes Design oder synchronisiere mit deinem System, um automatisch zwischen hellem und dunklem Design zu wechseln.", - "themeMode": "Design-Modus", + "themeMode": "Designmodus", "light": "Hell", "dark": "Dunkel", "system": "System" @@ -583,7 +583,7 @@ "readFailed": "Sicherungsdatei konnte nicht gelesen werden", "createIntro": "Erstelle eine verschlüsselte Sicherung deiner Daten. Sie enthält alle Aufgaben, den Verlauf, Einstellungen und optional deine hochgeladenen Dateien.", "keyPlaceholder": "Starken Verschlüsselungsschlüssel eingeben", - "includeAssets": "Hochgeladene Dateien und Assets einschließen", + "includeAssets": "Hochgeladene Dateien einschließen", "warningLabel": "Warnung:", "restoreWarning": "Beim Wiederherstellen einer Sicherung werden alle aktuellen Daten ersetzt. Diese Aktion kann nicht rückgängig gemacht werden.", "restoreKeyPlaceholder": "Den für diese Sicherung verwendeten Verschlüsselungsschlüssel eingeben", diff --git a/public/locales/de/things.json b/public/locales/de/things.json index 0e38e876..ac5e2cd1 100644 --- a/public/locales/de/things.json +++ b/public/locales/de/things.json @@ -23,7 +23,7 @@ }, "view": { "title": "Dinge", - "description": "Dinge sind benutzerdefinierte Werte, die mit Aufgaben verknüpft werden können, um zusätzliche Informationen zu erfassen. Sie können Text, Zahl oder Wahrheitswert sein. Du kannst Dinge mit Aufgaben verknüpfen und eine Aufgabe fällig werden lassen, sobald eine Bedingung erfüllt ist.", + "description": "Dinge sind benutzerdefinierte Werte, die mit Aufgaben verknüpft werden können, um zusätzliche Informationen zu erfassen. Sie können Text-, Zahlen- oder Wahrheitswerte sein. Du kannst Dinge mit Aufgaben verknüpfen und eine Aufgabe fällig werden lassen, sobald eine Bedingung erfüllt ist.", "searchPlaceholder": "Dinge durchsuchen", "sortName": "Name", "sortType": "Typ", @@ -44,7 +44,7 @@ "types": { "text": "Text", "number": "Zahl", - "boolean": "Wahrheitswert" + "boolean": "Wahrheitwert" }, "notify": { "savedTitle": "Gespeichert", diff --git a/public/locales/de/timer.json b/public/locales/de/timer.json index d5b5de47..094db600 100644 --- a/public/locales/de/timer.json +++ b/public/locales/de/timer.json @@ -12,11 +12,11 @@ "deleteConfirmMessage": "Möchtest du diese Timer-Sitzung wirklich löschen?", "startedTitle": "Timer gestartet", "startedMessage": "Arbeitssitzung wurde erfolgreich gestartet.", - "startQueuedTitle": "Start eingereiht", + "startQueuedTitle": "Start vorgemerkt", "startFailTitle": "Timer konnte nicht gestartet werden", "pausedTitle": "Timer pausiert", "pausedMessage": "Arbeitssitzung wurde pausiert.", - "pauseQueuedTitle": "Pausieren eingereiht", + "pauseQueuedTitle": "Pause vorgemerkt", "pauseFailTitle": "Timer konnte nicht pausiert werden", "deleteSessionTitle": "Sitzung löschen" }, @@ -26,7 +26,7 @@ "breakTime": "Pausenzeit", "workSessions": "Arbeitssitzungen", "totalTime": "Gesamtzeit", - "distribution": "Verteilung Arbeit und Pause", + "distribution": "Verteilung von Arbeits- und Pausenzeit", "noActiveTime": "Noch keine aktive Zeit", "sessionBreakdown": "Sitzungsübersicht", "sessions": "Sitzungen", diff --git a/public/locales/en/chores.json b/public/locales/en/chores.json index 22053733..173921b2 100644 --- a/public/locales/en/chores.json +++ b/public/locales/en/chores.json @@ -399,7 +399,11 @@ "removeAria": "Remove reminders" }, "assignee": { - "anyone": "Anyone" + "label": "Assignee", + "anyone": "Anyone", + "unknown": "Unknown", + "selectedCount_one": "{{count}} assignee", + "selectedCount_other": "{{count}} assignees" }, "filterChip": { "cancelAll": "Cancel All Filters", diff --git a/src/views/components/AssigneePickerField.jsx b/src/views/components/AssigneePickerField.jsx index e0ac1770..f170ba91 100644 --- a/src/views/components/AssigneePickerField.jsx +++ b/src/views/components/AssigneePickerField.jsx @@ -1,4 +1,5 @@ import { Person } from '@mui/icons-material' +import { useTranslation } from 'react-i18next' import BaseOptionPicker from './BaseOptionPicker' @@ -14,11 +15,16 @@ const AssigneePickerField = ({ onClear, values = [], }) => { + const { t } = useTranslation('chores') + const options = [ - ...(includeAnyone ? [{ userId: ANYONE, displayName: 'Anyone' }] : []), + ...(includeAnyone + ? [{ userId: ANYONE, displayName: t('assignee.anyone') }] + : []), ...members.map(member => ({ userId: member.userId, - displayName: member.displayName || member.username || 'Unknown', + displayName: + member.displayName || member.username || t('assignee.unknown'), })), ] @@ -52,15 +58,15 @@ const AssigneePickerField = ({ onValuesChange={handleValuesChange} onClear={onClear} emptyDisplay={emptyDisplay} - emptyLabel='Assignee' + emptyLabel={t('assignee.label')} getItemValue={item => item.userId} getItemLabel={item => item.displayName} renderTriggerIcon={() => } renderItemStart={() => } getTriggerText={({ isEmpty, selectedItems }) => { - if (isEmpty) return 'Assignee' + if (isEmpty) return t('assignee.label') if (selectedItems.length === 1) return selectedItems[0].displayName - return `${selectedItems.length} assignees` + return t('assignee.selectedCount', { count: selectedItems.length }) }} menuMinWidth={220} /> diff --git a/src/views/components/PriorityPickerField.jsx b/src/views/components/PriorityPickerField.jsx index ec542ac1..3718b7c5 100644 --- a/src/views/components/PriorityPickerField.jsx +++ b/src/views/components/PriorityPickerField.jsx @@ -1,4 +1,5 @@ import { Flag } from '@mui/icons-material' +import { useTranslation } from 'react-i18next' import BaseOptionPicker from './BaseOptionPicker' @@ -27,6 +28,8 @@ const PriorityPickerField = ({ size = 'sm', value = 0, }) => { + const { t } = useTranslation('chores') + const options = [1, 2, 3, 4].map(priorityOption => ({ id: priorityOption, label: priorityLabels[priorityOption], @@ -48,7 +51,7 @@ const PriorityPickerField = ({ getItemColor={item => item.color} getTriggerText={({ isEmpty, selectedItems }) => { // For priority 0 (no priority), show empty string (icon only) - if (value === 0 || isEmpty) return 'Priority' + if (value === 0 || isEmpty) return t('priority') return selectedItems[0]?.label || '' }} renderTriggerIcon={({ isEmpty, selectedItems }) => (