feat(i18n): translate remaining components (HU/EN/DE)
Feed, VideoCard, Sidebar, PlayerModal, Channels, Stats, SettingsPanel, OnboardingWizard, NotificationCenter, Toaster, ErrorBoundary and the relativeTime helper are now fully translated in Hungarian, English and German, each with its own locale area file (auto-loaded). Key parity verified across all three languages.
This commit is contained in:
parent
b38ae92d8d
commit
9c61bd898d
45 changed files with 1522 additions and 355 deletions
17
frontend/src/i18n/locales/de/card.json
Normal file
17
frontend/src/i18n/locales/de/card.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"watchedUnmark": "Angesehen — zum Aufheben klicken",
|
||||
"markWatched": "Als angesehen markieren",
|
||||
"savedRemove": "Gespeichert — zum Entfernen klicken",
|
||||
"saveForLater": "Für später speichern",
|
||||
"unhide": "Einblenden",
|
||||
"hide": "Ausblenden",
|
||||
"onlyThisChannel": "Nur dieser Kanal",
|
||||
"thisChannel": "Dieser Kanal",
|
||||
"continueTitle": "Dort fortsetzen, wo du aufgehört hast",
|
||||
"continue": "Fortsetzen",
|
||||
"restartTitle": "Von vorne abspielen",
|
||||
"restart": "Von vorne",
|
||||
"play": "Abspielen",
|
||||
"stream": "Stream",
|
||||
"views": "Aufrufe"
|
||||
}
|
||||
69
frontend/src/i18n/locales/de/channels.json
Normal file
69
frontend/src/i18n/locales/de/channels.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"intro": "Lege die <0>Priorität</0> eines Kanals fest, um seine Videos nach oben zu schieben, wenn du nach „Kanalpriorität“ sortierst, hänge eigene <1>Tags</1> an, um den Feed zu filtern, oder <2>blende</2> einen Kanal <2>aus</2>, um ihn ohne Abbestellung aus dem Feed zu entfernen.",
|
||||
"filterPlaceholder": "Kanäle filtern…",
|
||||
"syncSubscriptions": "Abos synchronisieren",
|
||||
"syncSubscriptionsHint": "Importiert deine Abo-Liste erneut von YouTube — fügt neu abonnierte Kanäle hinzu und entfernt abbestellte. Die Videos selbst werden weiterhin automatisch im Hintergrund synchronisiert; sie werden hierbei nicht neu geladen.",
|
||||
"backfillEverything": "Alles nachladen",
|
||||
"backfillEverythingHint": "Fordert das vollständige Nachladen des gesamten Katalogs für jeden abonnierten Kanal an. Ältere Videos und die Suche werden vollständig, soweit das gemeinsame Tageskontingent es zulässt — das kann eine Weile dauern.",
|
||||
"filters": {
|
||||
"all": "Alle",
|
||||
"needsFull": "Verlauf unvollständig",
|
||||
"fullySynced": "Vollständig synchronisiert",
|
||||
"hidden": "Ausgeblendet"
|
||||
},
|
||||
"tags": {
|
||||
"yourTags": "Deine Tags",
|
||||
"yourTagsHint": "Deine persönlichen Labels. Hänge sie unten an Kanäle an und filtere den Feed dann über die Seitenleiste nach Tag. (Getrennt von den automatischen Sprach-/Themen-Tags.)",
|
||||
"newTag": "neuer Tag",
|
||||
"createTag": "Tag erstellen"
|
||||
},
|
||||
"loading": "Kanäle werden geladen…",
|
||||
"empty": "Keine Kanäle.",
|
||||
"stats": {
|
||||
"channels": "Kanäle",
|
||||
"channelsHint": "Kanäle, die du abonniert hast.",
|
||||
"recentSynced": "Aktuelle synchronisiert",
|
||||
"recentSyncedHint": "Kanäle, deren neueste Uploads in der lokalen Datenbank sind und in deinem Feed erscheinen.",
|
||||
"fullHistory": "Vollständiger Verlauf",
|
||||
"fullHistoryHint": "Kanäle, deren gesamter Katalog geladen ist, von denen, für die du den vollständigen Verlauf angefordert hast.",
|
||||
"left": "übrig",
|
||||
"leftHint": "Grobe Schätzung zum Abschluss des Nachladens des vollständigen Verlaufs für {{count}} ausstehende(n) Kanal/Kanäle, basierend auf dem gemeinsamen Tageskontingent.",
|
||||
"myVideos": "Meine Videos",
|
||||
"myVideosHint": "Insgesamt verfügbare Videos über all deine Kanäle.",
|
||||
"quotaLeft": "Kontingent übrig",
|
||||
"quotaLeftHint": "Heute noch verbleibendes gemeinsames YouTube-API-Budget (wird um Mitternacht US-Pazifikzeit zurückgesetzt)."
|
||||
},
|
||||
"row": {
|
||||
"stored": "{{formatted}} gespeichert",
|
||||
"subs": "{{formatted}} Abonnenten",
|
||||
"priorityHint": "Deine Einstufung für diesen Kanal. Sortiere den Feed nach „Kanalpriorität“, um Kanäle mit höherer Priorität nach oben zu bringen.",
|
||||
"raisePriority": "Priorität erhöhen",
|
||||
"lowerPriority": "Priorität senken",
|
||||
"recent": "aktuell",
|
||||
"recentSyncedHint": "Neueste Uploads synchronisiert.",
|
||||
"recentNotSyncedHint": "Neueste Uploads noch nicht geladen.",
|
||||
"full": "vollständig",
|
||||
"fullHint": "Vollständiger Verlauf geladen.",
|
||||
"fullHistoryQueued": "vollständiger Verlauf in Warteschlange",
|
||||
"queuedRequestedHint": "Vollständiger Verlauf angefordert — der gesamte Katalog dieses Kanals wird nachgeladen, soweit das gemeinsame Kontingent es zulässt. Klicke, um deine Anforderung abzubrechen.",
|
||||
"queuedByOtherHint": "Ein anderer Abonnent hat den vollständigen Verlauf dieses Kanals bereits angefordert, sein gesamter Katalog ist also für alle unterwegs — hier gibt es nichts zu tun.",
|
||||
"getFullHistory": "vollständigen Verlauf laden",
|
||||
"getFullHistoryHint": "Bisher nur neueste Uploads. Klicke, um den gesamten Katalog dieses Kanals anzufordern (ältere Videos + vollständige Suche).",
|
||||
"hiddenHint": "Ausgeblendet — die Videos dieses Kanals bleiben aus deinem Feed heraus. Klicke, um sie wieder anzuzeigen.",
|
||||
"hideHint": "Blendet die Videos dieses Kanals aus deinem Feed aus. Er bleibt abonniert; dies bestellt nicht bei YouTube ab.",
|
||||
"unhide": "Einblenden",
|
||||
"hideFromFeed": "Aus Feed ausblenden",
|
||||
"unsubscribeHint": "Bestelle diesen Kanal bei YouTube ab (ändert dein echtes Konto). Im schreibgeschützten Modus ist dies ausgeblendet — nutze stattdessen Ausblenden.",
|
||||
"unsubscribeOnYoutube": "Bei YouTube abbestellen",
|
||||
"thisChannel": "Dieser Kanal"
|
||||
},
|
||||
"notify": {
|
||||
"synced": "{{count}} Abos synchronisiert",
|
||||
"syncFailed": "Abo-Synchronisierung fehlgeschlagen",
|
||||
"unsubscribed": "Bei YouTube abbestellt",
|
||||
"unsubscribeFailed": "Abbestellen fehlgeschlagen",
|
||||
"fullHistoryRequested": "Vollständiger Verlauf für {{count}} Kanäle angefordert",
|
||||
"fullHistoryFailed": "Vollständiger Verlauf konnte nicht angefordert werden"
|
||||
},
|
||||
"confirmUnsubscribe": "Kanal „{{name}}“ bei YouTube abbestellen? Dies ändert dein echtes YouTube-Konto. Um ihn nur aus deinem Feed zu entfernen, blende ihn stattdessen aus."
|
||||
}
|
||||
9
frontend/src/i18n/locales/de/errors.json
Normal file
9
frontend/src/i18n/locales/de/errors.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"boundary": {
|
||||
"title": "Etwas ist schiefgelaufen.",
|
||||
"subtitle": "Die App ist auf einen unerwarteten Fehler gestoßen.",
|
||||
"reload": "Neu laden",
|
||||
"notifTitle": "Etwas ist kaputtgegangen",
|
||||
"notifMessage": "Unerwarteter Fehler"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/de/feed.json
Normal file
17
frontend/src/i18n/locales/de/feed.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Feed wird geladen…",
|
||||
"loadError": "Feed konnte nicht geladen werden.",
|
||||
"emptyTitle": "Dein Feed ist leer",
|
||||
"emptyBody": "Verbinde dein YouTube-Konto, um deine Abos zu importieren und deinen Feed aufzubauen.",
|
||||
"setUp": "Meinen Feed einrichten",
|
||||
"noMatches": "Keine Videos entsprechen diesen Filtern.",
|
||||
"videoCount_one": "{{formattedCount}} Video",
|
||||
"videoCount_other": "{{formattedCount}} Videos",
|
||||
"loadingMore": "Mehr wird geladen…",
|
||||
"hiddenNamed": "Ausgeblendet: „{{title}}”",
|
||||
"hidden": "Video ausgeblendet",
|
||||
"undo": "Rückgängig",
|
||||
"markedWatchedNamed": "Als angesehen markiert: „{{title}}”",
|
||||
"markedWatched": "Als angesehen markiert",
|
||||
"unwatch": "Nicht mehr als angesehen"
|
||||
}
|
||||
19
frontend/src/i18n/locales/de/notifications.json
Normal file
19
frontend/src/i18n/locales/de/notifications.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"title": "Benachrichtigungen",
|
||||
"clearAll": "Alle löschen",
|
||||
"clear": "Löschen",
|
||||
"empty": "Noch keine Benachrichtigungen.",
|
||||
"actionNeeded": "Aktion erforderlich",
|
||||
"dismiss": "Schließen",
|
||||
"findInFeed": "Im Feed finden",
|
||||
"unhide": "Einblenden",
|
||||
"unwatch": "Nicht angesehen",
|
||||
"unhidden": "Eingeblendet „{{title}}”",
|
||||
"unwatched": "Als nicht angesehen markiert „{{title}}”",
|
||||
"time": {
|
||||
"justNow": "gerade eben",
|
||||
"minutes": "vor {{count}} Min.",
|
||||
"hours": "vor {{count}} Std.",
|
||||
"days": "vor {{count}} T."
|
||||
}
|
||||
}
|
||||
29
frontend/src/i18n/locales/de/onboarding.json
Normal file
29
frontend/src/i18n/locales/de/onboarding.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"close": "Schließen",
|
||||
"consent": "Google zeigt einen <0>„Google hat diese App nicht überprüft“</0>-Bildschirm — das ist zu erwarten, da Siftlode die vollständige Überprüfung von Google nicht durchlaufen hat. Es ist sicher fortzufahren: klicke auf <1>Erweitert</1> → <2>Weiter zu Siftlode</2>. Du kannst den Zugriff jederzeit in deinem <3>Google-Konto</3> widerrufen.",
|
||||
"read": {
|
||||
"title": "Verbinde deine YouTube-Abos",
|
||||
"body": "Du bist angemeldet. Um deinen Feed aufzubauen, benötigt Siftlode <0>schreibgeschützten</0> Zugriff auf die Kanäle, die du auf YouTube abonniert hast. Es postet, löscht oder ändert damit niemals etwas.",
|
||||
"connect": "Verbinden (schreibgeschützt)",
|
||||
"skip": "Vorerst überspringen"
|
||||
},
|
||||
"importing": {
|
||||
"title": "Dein Feed wird aufgebaut…",
|
||||
"body": "Deine YouTube-Abos werden importiert. Bereits in Siftlode vorhandene Kanäle erscheinen sofort; neue werden automatisch im Hintergrund ergänzt."
|
||||
},
|
||||
"write": {
|
||||
"title": "Du bist verbunden",
|
||||
"importFailed": "Dein YouTube-Konto ist verbunden, aber der Import der Abos ist fehlgeschlagen — du kannst es unter Einstellungen → Synchronisierung erneut versuchen. ",
|
||||
"feedReady": "Dein Feed ist bereit{{channels}}. Optional kannst du Siftlode erlauben, ",
|
||||
"feedReadyChannels": " ({{count}} Kanäle)",
|
||||
"rationale": "Kanäle auf YouTube für dich <0>abzubestellen</0> — dafür ist eine zusätzliche Schreibberechtigung nötig. Überspringe es, um schreibgeschützt zu bleiben; du kannst es später jederzeit in den Einstellungen aktivieren.",
|
||||
"retryImport": "Import erneut versuchen",
|
||||
"enableUnsubscribe": "Abbestellen aktivieren",
|
||||
"keepReadOnly": "Nein danke — schreibgeschützt bleiben"
|
||||
},
|
||||
"done": {
|
||||
"title": "Alles erledigt",
|
||||
"body": "Lese- und Abbestell-Zugriff sind beide erteilt. Du kannst beide jederzeit unter Einstellungen → Konto oder in deinem Google-Konto überprüfen oder widerrufen.",
|
||||
"done": "Fertig"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/de/player.json
Normal file
17
frontend/src/i18n/locales/de/player.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Wird geladen…",
|
||||
"backToOriginal": "Zurück zum ursprünglichen Video",
|
||||
"back": "Zurück",
|
||||
"close": "Schließen",
|
||||
"closeEsc": "Schließen (Esc)",
|
||||
"description": "Beschreibung",
|
||||
"noDescription": "Keine Beschreibung.",
|
||||
"channel": "Kanal",
|
||||
"views": "{{formattedCount}} Aufrufe",
|
||||
"stream": "Stream",
|
||||
"watched": "Angesehen",
|
||||
"markWatched": "Als angesehen markieren",
|
||||
"watchedUnmark": "Angesehen — zum Aufheben klicken",
|
||||
"jumpToTime": "Zu dieser Stelle springen",
|
||||
"playInApp": "Im integrierten Player abspielen"
|
||||
}
|
||||
101
frontend/src/i18n/locales/de/settings.json
Normal file
101
frontend/src/i18n/locales/de/settings.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"title": "Einstellungen",
|
||||
"tabs": {
|
||||
"appearance": "Darstellung",
|
||||
"notifications": "Benachrichtigungen",
|
||||
"sync": "Synchronisierung",
|
||||
"account": "Konto"
|
||||
},
|
||||
"appearance": {
|
||||
"colorScheme": "Farbschema",
|
||||
"display": "Anzeige",
|
||||
"darkMode": "Dunkler Modus",
|
||||
"listView": "Listenansicht",
|
||||
"listViewHint": "Zeigt den Feed als kompakte Liste statt als Kartenraster an.",
|
||||
"performanceMode": "Leistungsmodus",
|
||||
"performanceModeHint": "Schaltet den durchscheinenden Glaseffekt und die weichen Schatten aus, für flüssigere Darstellung auf langsameren Geräten.",
|
||||
"showHints": "Hinweise anzeigen",
|
||||
"showHintsHint": "Diese kleinen Hover-Erklärungen. Schalte sie aus, sobald du dich auskennst.",
|
||||
"textSize": "Schriftgröße"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Benachrichtigungen",
|
||||
"sound": "Ton bei Hinweisen",
|
||||
"soundHint": "Spielt einen kurzen Ton ab, wenn eine Benachrichtigung deine Aufmerksamkeit braucht (z. B. Fehler, Abfragen).",
|
||||
"autoDismiss": "Toasts automatisch ausblenden",
|
||||
"autoDismissHint": "Ausgeschaltet bleiben Pop-up-Toasts, bis du sie schließt. Eingeschaltet blenden sie sich nach der eingestellten Zeit aus.",
|
||||
"dismissAfter": "Ausblenden nach",
|
||||
"sendTest": "Testbenachrichtigung senden",
|
||||
"testTitle": "Testbenachrichtigung",
|
||||
"testMessage": "So sieht eine Benachrichtigung aus."
|
||||
},
|
||||
"sync": {
|
||||
"myStatus": "Mein Synchronisierungsstatus",
|
||||
"channels": "Kanäle",
|
||||
"channelsHint": "Wie viele Kanäle du abonniert hast.",
|
||||
"recentSynced": "Neueste synchronisiert",
|
||||
"recentSyncedHint": "Kanäle, deren neueste Uploads (~letztes Jahr) bereits in der lokalen Datenbank sind und so in deinem Feed erscheinen.",
|
||||
"fullHistory": "Vollständiger Verlauf",
|
||||
"fullHistoryHint": "Kanäle, deren gesamter Katalog abgerufen wurde, von denen, für die du den vollständigen Verlauf angefordert hast (pro Kanal auf der Kanäle-Seite aktivierbar).",
|
||||
"fullHistoryEta": "Vollständiger Verlauf – Restzeit",
|
||||
"fullHistoryEtaHint": "Grobe Schätzung, um das Nachladen des vollständigen Verlaufs von {{count}} ausstehenden Kanal/Kanälen abzuschließen, basierend auf dem gemeinsamen Tageskontingent.",
|
||||
"myVideos": "Meine Videos",
|
||||
"myVideosHint": "Gesamtzahl der dir verfügbaren Videos über deine abonnierten Kanäle.",
|
||||
"quotaLeft": "Heute verbleibendes Kontingent",
|
||||
"quotaLeftHint": "Heute verbleibendes gemeinsames YouTube-API-Budget (wird um Mitternacht US-Pazifik zurückgesetzt). Das Nachladen ordnet sich diesem unter.",
|
||||
"loading": "Wird geladen…",
|
||||
"apiUsage": "Deine API-Nutzung",
|
||||
"today": "Heute",
|
||||
"todayHint": "YouTube-API-Einheiten, die deine eigenen Aktionen heute verbraucht haben (wird um Mitternacht US-Pazifik zurückgesetzt). Die Hintergrund-Synchronisierung zählt hier nicht.",
|
||||
"last7d": "Letzte 7 Tage",
|
||||
"last30d": "Letzte 30 Tage",
|
||||
"allTime": "Gesamt",
|
||||
"byAction": "Nach Aktion (30 Tage)",
|
||||
"noUsage": "Noch keine Nutzung.",
|
||||
"actions": "Aktionen",
|
||||
"syncSubscriptions": "Abos synchronisieren",
|
||||
"syncSubscriptionsHint": "Importiert deine YouTube-Abos erneut und holt neu gefolgte Kanäle hinzu.",
|
||||
"backfillEverything": "Alles nachladen",
|
||||
"backfillEverythingHint": "Fordert das Nachladen des vollständigen Katalogs für jeden Kanal an, den du abonniert hast. Ältere Videos und die vollständige Suche werden gefüllt, soweit das gemeinsame Tageskontingent es zulässt.",
|
||||
"synced": "{{count}} Abos synchronisiert",
|
||||
"syncFailed": "Synchronisierung fehlgeschlagen",
|
||||
"fullHistoryRequested": "Vollständiger Verlauf für {{count}} Kanäle angefordert",
|
||||
"fullHistoryFailed": "Vollständiger Verlauf konnte nicht angefordert werden",
|
||||
"admin": "Admin",
|
||||
"adminPauseHint": "Pausiert oder setzt die Hintergrund-Synchronisierung für die gesamte App fort (alle Nutzer).",
|
||||
"resumeBackgroundSync": "Hintergrund-Synchronisierung fortsetzen",
|
||||
"pauseBackgroundSync": "Hintergrund-Synchronisierung pausieren"
|
||||
},
|
||||
"account": {
|
||||
"title": "Konto",
|
||||
"youtubeAccess": "YouTube-Zugriff",
|
||||
"youtubeAccessIntro": "Die Anmeldung teilt nur deinen Namen und deine E-Mail-Adresse. Der YouTube-Zugriff wird separat erteilt, unten — jeder ist optional und jederzeit in deinem Google-Konto widerrufbar.",
|
||||
"readTitle": "Abos lesen (dein Feed)",
|
||||
"readGrantedHint": "Erteilt. Siftlode liest die Kanäle, denen du folgst, um deinen Feed aufzubauen. Damit ändert es nie dein YouTube-Konto.",
|
||||
"readEnableHint": "Nur-Lese-Zugriff auf deine Abos — erforderlich, um deinen Feed aufzubauen. Siftlode kann damit nichts ändern.",
|
||||
"writeTitle": "Abbestellen (Schreiben)",
|
||||
"writeGrantedHint": "Erteilt. Du kannst Kanäle auf YouTube von innerhalb Siftlode abbestellen. Es schreibt nur, wenn du es anforderst.",
|
||||
"writeEnableHint": "Ermöglicht Siftlode, Kanäle auf YouTube für dich abzubestellen. Optional — überspringe es, um im Nur-Lese-Modus zu bleiben.",
|
||||
"granted": "Erteilt",
|
||||
"enable": "Aktivieren",
|
||||
"enableHint": "Leitet zu Google weiter, um die Berechtigung zu erteilen. Google zeigt einen Hinweis „nicht verifizierte App“ — das ist zu erwarten; klicke auf Erweitert → Weiter zu Siftlode.",
|
||||
"walkMeThrough": "Führe mich durch die Einrichtung"
|
||||
},
|
||||
"invites": {
|
||||
"title": "Zugriffsanfragen",
|
||||
"noPending": "Keine ausstehenden Anfragen.",
|
||||
"addPlaceholder": "E-Mail direkt hinzufügen…",
|
||||
"add": "Hinzufügen",
|
||||
"decided": "{{count}} entschieden",
|
||||
"approved": "Genehmigt — sie können sich jetzt anmelden",
|
||||
"approveFailed": "Genehmigung fehlgeschlagen",
|
||||
"denyFailed": "Ablehnung fehlgeschlagen",
|
||||
"addedToWhitelist": "Zur Whitelist hinzugefügt",
|
||||
"addFailed": "Diese E-Mail konnte nicht hinzugefügt werden",
|
||||
"requested": "angefragt {{time}}",
|
||||
"approveHint": "Genehmigen — setzt diese E-Mail auf die Whitelist und benachrichtigt sie per E-Mail, dass sie dabei sind.",
|
||||
"approve": "Genehmigen",
|
||||
"denyHint": "Diese Anfrage ablehnen.",
|
||||
"deny": "Ablehnen"
|
||||
}
|
||||
}
|
||||
65
frontend/src/i18n/locales/de/sidebar.json
Normal file
65
frontend/src/i18n/locales/de/sidebar.json
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"filters": "Filter",
|
||||
"activeCount": "{{count}} aktiv",
|
||||
"clearAll": "Alle löschen",
|
||||
"resetDefaults": "Auf Standard zurücksetzen",
|
||||
"customize": "Seitenleiste anpassen",
|
||||
"done": "Fertig",
|
||||
"editHint": "Zum Umordnen ziehen · Auge zum Ein-/Ausblenden",
|
||||
"channel": "Kanal",
|
||||
"loading": "Wird geladen…",
|
||||
"thisChannel": "Dieser Kanal",
|
||||
"channelCount": "{{count}} Kanal",
|
||||
"channelCount_other": "{{count}} Kanäle",
|
||||
"dragToReorder": "Zum Umordnen ziehen",
|
||||
"showWidget": "Widget einblenden",
|
||||
"hideWidget": "Widget ausblenden",
|
||||
"expand": "Ausklappen",
|
||||
"collapse": "Einklappen",
|
||||
"any": "Beliebig",
|
||||
"all": "Alle",
|
||||
"tagModeTooltip": "Beliebige vs. alle ausgewählten Tags treffen",
|
||||
"custom": "Benutzerdefiniert",
|
||||
"from": "Von",
|
||||
"to": "Bis",
|
||||
"clearDates": "Daten löschen",
|
||||
"widget": {
|
||||
"show": "Anzeigen",
|
||||
"sort": "Sortierung",
|
||||
"date": "Upload-Datum",
|
||||
"content": "Inhaltstyp",
|
||||
"language": "Sprache",
|
||||
"topic": "Thema"
|
||||
},
|
||||
"show": {
|
||||
"unwatched": "Ungesehen",
|
||||
"in_progress": "Angefangen",
|
||||
"all": "Alle",
|
||||
"watched": "Angesehen",
|
||||
"saved": "Gespeichert",
|
||||
"hidden": "Ausgeblendet"
|
||||
},
|
||||
"sort": {
|
||||
"newest": "Neueste",
|
||||
"oldest": "Älteste",
|
||||
"views": "Meistgesehen",
|
||||
"duration_desc": "Längste",
|
||||
"duration_asc": "Kürzeste",
|
||||
"title": "Name (A–Z)",
|
||||
"subscribers": "Kanal-Abonnenten",
|
||||
"priority": "Kanal-Priorität",
|
||||
"shuffle": "Überrasch mich"
|
||||
},
|
||||
"content": {
|
||||
"normal": "Normal",
|
||||
"shorts": "Shorts",
|
||||
"live": "Live / Demnächst"
|
||||
},
|
||||
"datePreset": {
|
||||
"24h": "24 Std.",
|
||||
"1week": "1 Woche",
|
||||
"1month": "1 Monat",
|
||||
"6months": "6 Monate",
|
||||
"1year": "1 Jahr"
|
||||
}
|
||||
}
|
||||
13
frontend/src/i18n/locales/de/stats.json
Normal file
13
frontend/src/i18n/locales/de/stats.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"title": "API-Kontingentnutzung",
|
||||
"rangeDays": "{{count}} T",
|
||||
"introBefore": "YouTube-Data-API-Einheiten, zugeordnet danach, wer die Nutzung ausgelöst hat. ",
|
||||
"introSystem": "System",
|
||||
"introAfter": " ist gemeinsame Hintergrundarbeit (geplantes Nachladen, Anreicherung, erneute Synchronisierung), die nicht an eine Person gebunden ist.",
|
||||
"loading": "Wird geladen…",
|
||||
"noData": "Keine Daten.",
|
||||
"dailyTotal": "Tagessumme ({{count}} T · {{units}} Einheiten)",
|
||||
"noUsageInRange": "Keine Nutzung in diesem Zeitraum.",
|
||||
"dailyTooltip": "{{day}}: {{units}} Einheiten",
|
||||
"system": "System (Hintergrund)"
|
||||
}
|
||||
10
frontend/src/i18n/locales/de/time.json
Normal file
10
frontend/src/i18n/locales/de/time.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"justNow": "gerade eben",
|
||||
"secondsAgo": "vor {{count}} Sek.",
|
||||
"minutesAgo": "vor {{count}} Min.",
|
||||
"hoursAgo": "vor {{count}} Std.",
|
||||
"daysAgo": "vor {{count}} T.",
|
||||
"weeksAgo": "vor {{count}} Wo.",
|
||||
"monthsAgo": "vor {{count}} Mon.",
|
||||
"yearsAgo": "vor {{count}} J."
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue