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."
|
||||
}
|
||||
17
frontend/src/i18n/locales/en/card.json
Normal file
17
frontend/src/i18n/locales/en/card.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"watchedUnmark": "Watched — click to unmark",
|
||||
"markWatched": "Mark watched",
|
||||
"savedRemove": "Saved — click to remove",
|
||||
"saveForLater": "Save for later",
|
||||
"unhide": "Unhide",
|
||||
"hide": "Hide",
|
||||
"onlyThisChannel": "Only this channel",
|
||||
"thisChannel": "This channel",
|
||||
"continueTitle": "Continue where you left off",
|
||||
"continue": "Continue",
|
||||
"restartTitle": "Play from the beginning",
|
||||
"restart": "Restart",
|
||||
"play": "Play",
|
||||
"stream": "stream",
|
||||
"views": "views"
|
||||
}
|
||||
69
frontend/src/i18n/locales/en/channels.json
Normal file
69
frontend/src/i18n/locales/en/channels.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"intro": "Set a channel's <0>priority</0> to push its videos up when you sort by “Channel priority”, attach your own <1>tags</1> to filter the feed, or <2>hide</2> a channel to drop it from the feed without unsubscribing.",
|
||||
"filterPlaceholder": "Filter channels…",
|
||||
"syncSubscriptions": "Sync subscriptions",
|
||||
"syncSubscriptionsHint": "Re-import your subscription list from YouTube — adds channels you've newly followed and drops ones you've unfollowed. The videos themselves keep syncing automatically in the background; this does not re-fetch them.",
|
||||
"backfillEverything": "Backfill everything",
|
||||
"backfillEverythingHint": "Request full back-catalog backfill for every channel you're subscribed to. Older videos and search become complete as the shared daily quota allows — this can take a while.",
|
||||
"filters": {
|
||||
"all": "All",
|
||||
"needsFull": "Needs full history",
|
||||
"fullySynced": "Fully synced",
|
||||
"hidden": "Hidden"
|
||||
},
|
||||
"tags": {
|
||||
"yourTags": "Your tags",
|
||||
"yourTagsHint": "Your personal labels. Attach them to channels below, then filter the feed by tag from the sidebar. (Separate from the automatic language/topic tags.)",
|
||||
"newTag": "new tag",
|
||||
"createTag": "Create tag"
|
||||
},
|
||||
"loading": "Loading channels…",
|
||||
"empty": "No channels.",
|
||||
"stats": {
|
||||
"channels": "Channels",
|
||||
"channelsHint": "Channels you're subscribed to.",
|
||||
"recentSynced": "Recent synced",
|
||||
"recentSyncedHint": "Channels whose recent uploads are in the local DB and show in your feed.",
|
||||
"fullHistory": "Full history",
|
||||
"fullHistoryHint": "Channels whose entire back-catalog is fetched, out of the ones you've requested full history for.",
|
||||
"left": "left",
|
||||
"leftHint": "Rough estimate to finish full-history backfill of {{count}} pending channel(s), based on the shared daily quota.",
|
||||
"myVideos": "My videos",
|
||||
"myVideosHint": "Total videos available across your channels.",
|
||||
"quotaLeft": "Quota left",
|
||||
"quotaLeftHint": "Shared YouTube API budget left today (resets midnight US Pacific)."
|
||||
},
|
||||
"row": {
|
||||
"stored": "{{formatted}} stored",
|
||||
"subs": "{{formatted}} subs",
|
||||
"priorityHint": "Your ranking for this channel. Sort the feed by “Channel priority” to bring higher-priority channels to the top.",
|
||||
"raisePriority": "Raise priority",
|
||||
"lowerPriority": "Lower priority",
|
||||
"recent": "recent",
|
||||
"recentSyncedHint": "Recent uploads synced.",
|
||||
"recentNotSyncedHint": "Recent uploads not fetched yet.",
|
||||
"full": "full",
|
||||
"fullHint": "Full history fetched.",
|
||||
"fullHistoryQueued": "full history queued",
|
||||
"queuedRequestedHint": "Full history requested — this channel's whole back-catalog will backfill as the shared quota allows. Click to cancel your request.",
|
||||
"queuedByOtherHint": "Another subscriber already requested this channel's full history, so its whole back-catalog is on its way to everyone — nothing to do here.",
|
||||
"getFullHistory": "get full history",
|
||||
"getFullHistoryHint": "Only recent uploads so far. Click to request this channel's full back-catalog (older videos + complete search).",
|
||||
"hiddenHint": "Hidden — this channel's videos are kept out of your feed. Click to show them again.",
|
||||
"hideHint": "Hide this channel's videos from your feed. It stays subscribed; this doesn't unsubscribe on YouTube.",
|
||||
"unhide": "Unhide",
|
||||
"hideFromFeed": "Hide from feed",
|
||||
"unsubscribeHint": "Unsubscribe from this channel on YouTube (changes your real account). Read-only mode hides this — use Hide instead.",
|
||||
"unsubscribeOnYoutube": "Unsubscribe on YouTube",
|
||||
"thisChannel": "This channel"
|
||||
},
|
||||
"notify": {
|
||||
"synced": "Synced {{count}} subscriptions",
|
||||
"syncFailed": "Subscription sync failed",
|
||||
"unsubscribed": "Unsubscribed on YouTube",
|
||||
"unsubscribeFailed": "Unsubscribe failed",
|
||||
"fullHistoryRequested": "Full history requested for {{count}} channels",
|
||||
"fullHistoryFailed": "Couldn't request full history"
|
||||
},
|
||||
"confirmUnsubscribe": "Unsubscribe from \"{{name}}\" on YouTube? This changes your real YouTube account. To just remove it from your feed, hide it instead."
|
||||
}
|
||||
9
frontend/src/i18n/locales/en/errors.json
Normal file
9
frontend/src/i18n/locales/en/errors.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"boundary": {
|
||||
"title": "Something went wrong.",
|
||||
"subtitle": "The app hit an unexpected error.",
|
||||
"reload": "Reload",
|
||||
"notifTitle": "Something broke",
|
||||
"notifMessage": "Unexpected error"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/en/feed.json
Normal file
17
frontend/src/i18n/locales/en/feed.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Loading feed…",
|
||||
"loadError": "Couldn't load the feed.",
|
||||
"emptyTitle": "Your feed is empty",
|
||||
"emptyBody": "Connect your YouTube account to import your subscriptions and build your feed.",
|
||||
"setUp": "Set up my feed",
|
||||
"noMatches": "No videos match these filters.",
|
||||
"videoCount_one": "{{formattedCount}} video",
|
||||
"videoCount_other": "{{formattedCount}} videos",
|
||||
"loadingMore": "Loading more…",
|
||||
"hiddenNamed": "Hidden “{{title}}”",
|
||||
"hidden": "Video hidden",
|
||||
"undo": "Undo",
|
||||
"markedWatchedNamed": "Marked watched “{{title}}”",
|
||||
"markedWatched": "Marked watched",
|
||||
"unwatch": "Unwatch"
|
||||
}
|
||||
19
frontend/src/i18n/locales/en/notifications.json
Normal file
19
frontend/src/i18n/locales/en/notifications.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"title": "Notifications",
|
||||
"clearAll": "Clear all",
|
||||
"clear": "Clear",
|
||||
"empty": "No notifications yet.",
|
||||
"actionNeeded": "Action needed",
|
||||
"dismiss": "Dismiss",
|
||||
"findInFeed": "Find in feed",
|
||||
"unhide": "Unhide",
|
||||
"unwatch": "Unwatch",
|
||||
"unhidden": "Unhidden “{{title}}”",
|
||||
"unwatched": "Unwatched “{{title}}”",
|
||||
"time": {
|
||||
"justNow": "just now",
|
||||
"minutes": "{{count}}m ago",
|
||||
"hours": "{{count}}h ago",
|
||||
"days": "{{count}}d ago"
|
||||
}
|
||||
}
|
||||
29
frontend/src/i18n/locales/en/onboarding.json
Normal file
29
frontend/src/i18n/locales/en/onboarding.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"close": "Close",
|
||||
"consent": "Google will show a <0>\"Google hasn't verified this app\"</0> screen — that's expected, because Siftlode hasn't gone through Google's full review. It's safe to continue: click <1>Advanced</1> → <2>Go to Siftlode</2>. You can revoke access anytime from your <3>Google Account</3>.",
|
||||
"read": {
|
||||
"title": "Connect your YouTube subscriptions",
|
||||
"body": "You're signed in. To build your feed, Siftlode needs <0>read-only</0> access to the channels you're subscribed to on YouTube. It never posts, deletes, or changes anything with this.",
|
||||
"connect": "Connect (read-only)",
|
||||
"skip": "Skip for now"
|
||||
},
|
||||
"importing": {
|
||||
"title": "Building your feed…",
|
||||
"body": "Importing your YouTube subscriptions. Channels already in Siftlode show up instantly; any new ones fill in automatically in the background."
|
||||
},
|
||||
"write": {
|
||||
"title": "You're connected",
|
||||
"importFailed": "Your YouTube account is connected, but importing subscriptions failed — you can retry from Settings → Sync. ",
|
||||
"feedReady": "Your feed is ready{{channels}}. Optionally, let Siftlode ",
|
||||
"feedReadyChannels": " ({{count}} channels)",
|
||||
"rationale": "<0>unsubscribe</0> from channels on YouTube for you — this needs an extra write permission. Skip it to stay read-only; you can always enable it later in Settings.",
|
||||
"retryImport": "Retry import",
|
||||
"enableUnsubscribe": "Enable unsubscribe",
|
||||
"keepReadOnly": "No thanks — keep it read-only"
|
||||
},
|
||||
"done": {
|
||||
"title": "All set",
|
||||
"body": "Read and unsubscribe access are both granted. You can review or revoke either one anytime in Settings → Account, or from your Google Account.",
|
||||
"done": "Done"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/en/player.json
Normal file
17
frontend/src/i18n/locales/en/player.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Loading…",
|
||||
"backToOriginal": "Back to the original video",
|
||||
"back": "Back",
|
||||
"close": "Close",
|
||||
"closeEsc": "Close (Esc)",
|
||||
"description": "Description",
|
||||
"noDescription": "No description.",
|
||||
"channel": "Channel",
|
||||
"views": "{{formattedCount}} views",
|
||||
"stream": "stream",
|
||||
"watched": "Watched",
|
||||
"markWatched": "Mark watched",
|
||||
"watchedUnmark": "Watched — click to unmark",
|
||||
"jumpToTime": "Jump to this time",
|
||||
"playInApp": "Play in the in-app player"
|
||||
}
|
||||
101
frontend/src/i18n/locales/en/settings.json
Normal file
101
frontend/src/i18n/locales/en/settings.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"title": "Settings",
|
||||
"tabs": {
|
||||
"appearance": "Appearance",
|
||||
"notifications": "Notifications",
|
||||
"sync": "Sync",
|
||||
"account": "Account"
|
||||
},
|
||||
"appearance": {
|
||||
"colorScheme": "Color scheme",
|
||||
"display": "Display",
|
||||
"darkMode": "Dark mode",
|
||||
"listView": "List view",
|
||||
"listViewHint": "Show the feed as a compact list instead of a grid of cards.",
|
||||
"performanceMode": "Performance mode",
|
||||
"performanceModeHint": "Turns off the translucent glass blur and soft shadows for snappier rendering on slower machines.",
|
||||
"showHints": "Show hints",
|
||||
"showHintsHint": "These little hover explanations. Turn them off once you know your way around.",
|
||||
"textSize": "Text size"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"sound": "Sound on alerts",
|
||||
"soundHint": "Play a short tone when a notification needs your attention (e.g. errors, prompts).",
|
||||
"autoDismiss": "Auto-dismiss toasts",
|
||||
"autoDismissHint": "When off, pop-up toasts stay until you close them. When on, they fade after the set time.",
|
||||
"dismissAfter": "Dismiss after",
|
||||
"sendTest": "Send a test notification",
|
||||
"testTitle": "Test notification",
|
||||
"testMessage": "This is what a notification looks like."
|
||||
},
|
||||
"sync": {
|
||||
"myStatus": "My sync status",
|
||||
"channels": "Channels",
|
||||
"channelsHint": "How many channels you're subscribed to.",
|
||||
"recentSynced": "Recent synced",
|
||||
"recentSyncedHint": "Channels whose recent uploads (~last year) are already in the local database, so they show in your feed.",
|
||||
"fullHistory": "Full history",
|
||||
"fullHistoryHint": "Channels whose entire back-catalog has been fetched, out of the ones you've requested full history for (opt in per channel on the Channels page).",
|
||||
"fullHistoryEta": "Full history ETA",
|
||||
"fullHistoryEtaHint": "Rough estimate to finish full-history backfill of {{count}} pending channel(s), based on the shared daily quota.",
|
||||
"myVideos": "My videos",
|
||||
"myVideosHint": "Total videos available to you across your subscribed channels.",
|
||||
"quotaLeft": "Quota left today",
|
||||
"quotaLeftHint": "Shared YouTube API budget remaining today (resets midnight US Pacific). Backfill yields to it.",
|
||||
"loading": "Loading…",
|
||||
"apiUsage": "Your API usage",
|
||||
"today": "Today",
|
||||
"todayHint": "YouTube API units your own actions used today (resets midnight US Pacific). Background sync isn't counted here.",
|
||||
"last7d": "Last 7 days",
|
||||
"last30d": "Last 30 days",
|
||||
"allTime": "All time",
|
||||
"byAction": "By action (30d)",
|
||||
"noUsage": "No usage yet.",
|
||||
"actions": "Actions",
|
||||
"syncSubscriptions": "Sync subscriptions",
|
||||
"syncSubscriptionsHint": "Re-import your YouTube subscriptions and pull in any newly-followed channels.",
|
||||
"backfillEverything": "Backfill everything",
|
||||
"backfillEverythingHint": "Request full back-catalog backfill for every channel you're subscribed to. Older videos + complete search fill in as the shared daily quota allows.",
|
||||
"synced": "Synced {{count}} subscriptions",
|
||||
"syncFailed": "Sync failed",
|
||||
"fullHistoryRequested": "Full history requested for {{count}} channels",
|
||||
"fullHistoryFailed": "Couldn't request full history",
|
||||
"admin": "Admin",
|
||||
"adminPauseHint": "Pause or resume the background sync for the whole app (all users).",
|
||||
"resumeBackgroundSync": "Resume background sync",
|
||||
"pauseBackgroundSync": "Pause background sync"
|
||||
},
|
||||
"account": {
|
||||
"title": "Account",
|
||||
"youtubeAccess": "YouTube access",
|
||||
"youtubeAccessIntro": "Sign-in only shares your name and email. YouTube access is granted separately, below — each is optional and revocable anytime in your Google Account.",
|
||||
"readTitle": "Read subscriptions (your feed)",
|
||||
"readGrantedHint": "Granted. Siftlode reads the channels you follow to build your feed. It never changes your YouTube account with this.",
|
||||
"readEnableHint": "Read-only access to your subscriptions — required to build your feed. Siftlode can't modify anything with it.",
|
||||
"writeTitle": "Unsubscribe (write)",
|
||||
"writeGrantedHint": "Granted. You can unsubscribe from channels on YouTube from inside Siftlode. It only writes when you ask it to.",
|
||||
"writeEnableHint": "Lets Siftlode unsubscribe from channels on YouTube for you. Optional — skip it to stay read-only.",
|
||||
"granted": "Granted",
|
||||
"enable": "Enable",
|
||||
"enableHint": "Redirects to Google to grant the permission. Google shows an 'unverified app' notice — that's expected; click Advanced → Go to Siftlode.",
|
||||
"walkMeThrough": "Walk me through setup"
|
||||
},
|
||||
"invites": {
|
||||
"title": "Access requests",
|
||||
"noPending": "No pending requests.",
|
||||
"addPlaceholder": "Add an email directly…",
|
||||
"add": "Add",
|
||||
"decided": "{{count}} decided",
|
||||
"approved": "Approved — they can sign in now",
|
||||
"approveFailed": "Approve failed",
|
||||
"denyFailed": "Deny failed",
|
||||
"addedToWhitelist": "Added to the whitelist",
|
||||
"addFailed": "Couldn't add that email",
|
||||
"requested": "requested {{time}}",
|
||||
"approveHint": "Approve — whitelist this email and email them they're in.",
|
||||
"approve": "Approve",
|
||||
"denyHint": "Deny this request.",
|
||||
"deny": "Deny"
|
||||
}
|
||||
}
|
||||
65
frontend/src/i18n/locales/en/sidebar.json
Normal file
65
frontend/src/i18n/locales/en/sidebar.json
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"filters": "Filters",
|
||||
"activeCount": "{{count}} active",
|
||||
"clearAll": "Clear all",
|
||||
"resetDefaults": "Reset to defaults",
|
||||
"customize": "Customize sidebar",
|
||||
"done": "Done",
|
||||
"editHint": "Drag to reorder · eye to show/hide",
|
||||
"channel": "Channel",
|
||||
"loading": "Loading…",
|
||||
"thisChannel": "This channel",
|
||||
"channelCount": "{{count}} channel",
|
||||
"channelCount_other": "{{count}} channels",
|
||||
"dragToReorder": "Drag to reorder",
|
||||
"showWidget": "Show widget",
|
||||
"hideWidget": "Hide widget",
|
||||
"expand": "Expand",
|
||||
"collapse": "Collapse",
|
||||
"any": "Any",
|
||||
"all": "All",
|
||||
"tagModeTooltip": "Match any vs all selected tags",
|
||||
"custom": "Custom",
|
||||
"from": "From",
|
||||
"to": "To",
|
||||
"clearDates": "clear dates",
|
||||
"widget": {
|
||||
"show": "Show",
|
||||
"sort": "Sort",
|
||||
"date": "Upload date",
|
||||
"content": "Content type",
|
||||
"language": "Language",
|
||||
"topic": "Topic"
|
||||
},
|
||||
"show": {
|
||||
"unwatched": "Unwatched",
|
||||
"in_progress": "In progress",
|
||||
"all": "All",
|
||||
"watched": "Watched",
|
||||
"saved": "Saved",
|
||||
"hidden": "Hidden"
|
||||
},
|
||||
"sort": {
|
||||
"newest": "Newest",
|
||||
"oldest": "Oldest",
|
||||
"views": "Most viewed",
|
||||
"duration_desc": "Longest",
|
||||
"duration_asc": "Shortest",
|
||||
"title": "Name (A–Z)",
|
||||
"subscribers": "Channel subscribers",
|
||||
"priority": "Channel priority",
|
||||
"shuffle": "Surprise me"
|
||||
},
|
||||
"content": {
|
||||
"normal": "Normal",
|
||||
"shorts": "Shorts",
|
||||
"live": "Live / Upcoming"
|
||||
},
|
||||
"datePreset": {
|
||||
"24h": "24h",
|
||||
"1week": "1 week",
|
||||
"1month": "1 month",
|
||||
"6months": "6 months",
|
||||
"1year": "1 year"
|
||||
}
|
||||
}
|
||||
13
frontend/src/i18n/locales/en/stats.json
Normal file
13
frontend/src/i18n/locales/en/stats.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"title": "API quota usage",
|
||||
"rangeDays": "{{count}}d",
|
||||
"introBefore": "YouTube Data API units attributed by who triggered the spend. ",
|
||||
"introSystem": "System",
|
||||
"introAfter": " is shared background work (scheduled backfill, enrichment, resync) that isn't tied to one person.",
|
||||
"loading": "Loading…",
|
||||
"noData": "No data.",
|
||||
"dailyTotal": "Daily total ({{count}}d · {{units}} units)",
|
||||
"noUsageInRange": "No usage in this range.",
|
||||
"dailyTooltip": "{{day}}: {{units}} units",
|
||||
"system": "System (background)"
|
||||
}
|
||||
10
frontend/src/i18n/locales/en/time.json
Normal file
10
frontend/src/i18n/locales/en/time.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"justNow": "just now",
|
||||
"secondsAgo": "{{count}}s ago",
|
||||
"minutesAgo": "{{count}} min ago",
|
||||
"hoursAgo": "{{count}}h ago",
|
||||
"daysAgo": "{{count}}d ago",
|
||||
"weeksAgo": "{{count}} wk ago",
|
||||
"monthsAgo": "{{count}} mo ago",
|
||||
"yearsAgo": "{{count}} yr ago"
|
||||
}
|
||||
17
frontend/src/i18n/locales/hu/card.json
Normal file
17
frontend/src/i18n/locales/hu/card.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"watchedUnmark": "Megnézve — kattints a visszavonáshoz",
|
||||
"markWatched": "Megnézettnek jelöl",
|
||||
"savedRemove": "Mentve — kattints az eltávolításhoz",
|
||||
"saveForLater": "Mentés későbbre",
|
||||
"unhide": "Megjelenítés",
|
||||
"hide": "Elrejtés",
|
||||
"onlyThisChannel": "Csak ez a csatorna",
|
||||
"thisChannel": "Ez a csatorna",
|
||||
"continueTitle": "Folytatás ott, ahol abbahagytad",
|
||||
"continue": "Folytatás",
|
||||
"restartTitle": "Lejátszás az elejétől",
|
||||
"restart": "Elölről",
|
||||
"play": "Lejátszás",
|
||||
"stream": "stream",
|
||||
"views": "megtekintés"
|
||||
}
|
||||
69
frontend/src/i18n/locales/hu/channels.json
Normal file
69
frontend/src/i18n/locales/hu/channels.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"intro": "Állíts be egy csatornának <0>prioritást</0>, hogy a videói előrébb kerüljenek, amikor „Csatorna prioritás” szerint rendezel, csatolj saját <1>címkéket</1> a hírfolyam szűréséhez, vagy <2>rejts el</2> egy csatornát, hogy leiratkozás nélkül kivedd a hírfolyamból.",
|
||||
"filterPlaceholder": "Csatornák szűrése…",
|
||||
"syncSubscriptions": "Feliratkozások szinkronizálása",
|
||||
"syncSubscriptionsHint": "Újraimportálja a feliratkozási listádat a YouTube-ról — hozzáadja az újonnan követett csatornákat, és eltávolítja azokat, amelyekről leiratkoztál. Maguk a videók a háttérben automatikusan tovább szinkronizálódnak; ez nem tölti le őket újra.",
|
||||
"backfillEverything": "Minden letöltése",
|
||||
"backfillEverythingHint": "Teljes archívum letöltését kéri minden csatornához, amelyre feliratkoztál. A régebbi videók és a keresés a megosztott napi kvóta függvényében válik teljessé — ez eltarthat egy ideig.",
|
||||
"filters": {
|
||||
"all": "Mind",
|
||||
"needsFull": "Hiányos előzmény",
|
||||
"fullySynced": "Teljesen szinkronizálva",
|
||||
"hidden": "Elrejtett"
|
||||
},
|
||||
"tags": {
|
||||
"yourTags": "Címkéid",
|
||||
"yourTagsHint": "Saját személyes címkéid. Csatold őket az alábbi csatornákhoz, majd szűrd a hírfolyamot címke szerint az oldalsávból. (Az automatikus nyelvi/téma címkéktől függetlenül.)",
|
||||
"newTag": "új címke",
|
||||
"createTag": "Címke létrehozása"
|
||||
},
|
||||
"loading": "Csatornák betöltése…",
|
||||
"empty": "Nincsenek csatornák.",
|
||||
"stats": {
|
||||
"channels": "Csatorna",
|
||||
"channelsHint": "Csatornák, amelyekre feliratkoztál.",
|
||||
"recentSynced": "Legutóbbi szinkronizálva",
|
||||
"recentSyncedHint": "Csatornák, amelyek legutóbbi feltöltései a helyi adatbázisban vannak, és megjelennek a hírfolyamodban.",
|
||||
"fullHistory": "Teljes előzmény",
|
||||
"fullHistoryHint": "Csatornák, amelyek teljes archívuma le van töltve, azok közül, amelyekhez teljes előzményt kértél.",
|
||||
"left": "hátra",
|
||||
"leftHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének letöltésére, a megosztott napi kvóta alapján.",
|
||||
"myVideos": "Videóim",
|
||||
"myVideosHint": "A csatornáidon elérhető videók teljes száma.",
|
||||
"quotaLeft": "Maradék kvóta",
|
||||
"quotaLeftHint": "A ma még hátralévő megosztott YouTube API-keret (csendes-óceáni idő szerint éjfélkor nullázódik)."
|
||||
},
|
||||
"row": {
|
||||
"stored": "{{formatted}} tárolt",
|
||||
"subs": "{{formatted}} feliratkozó",
|
||||
"priorityHint": "A te rangsorod ehhez a csatornához. Rendezd a hírfolyamot „Csatorna prioritás” szerint, hogy a magasabb prioritású csatornák felülre kerüljenek.",
|
||||
"raisePriority": "Prioritás növelése",
|
||||
"lowerPriority": "Prioritás csökkentése",
|
||||
"recent": "legutóbbi",
|
||||
"recentSyncedHint": "Legutóbbi feltöltések szinkronizálva.",
|
||||
"recentNotSyncedHint": "A legutóbbi feltöltések még nincsenek letöltve.",
|
||||
"full": "teljes",
|
||||
"fullHint": "Teljes előzmény letöltve.",
|
||||
"fullHistoryQueued": "teljes előzmény sorban",
|
||||
"queuedRequestedHint": "Teljes előzmény kérve — a csatorna teljes archívuma letöltődik, ahogy a megosztott kvóta engedi. Kattints a kérés visszavonásához.",
|
||||
"queuedByOtherHint": "Egy másik feliratkozó már kérte ennek a csatornának a teljes előzményét, így a teljes archívuma már úton van mindenkihez — itt nincs teendőd.",
|
||||
"getFullHistory": "teljes előzmény lekérése",
|
||||
"getFullHistoryHint": "Egyelőre csak a legutóbbi feltöltések. Kattints a csatorna teljes archívumának lekéréséhez (régebbi videók + teljes keresés).",
|
||||
"hiddenHint": "Elrejtve — a csatorna videói nem jelennek meg a hírfolyamodban. Kattints, hogy újra láthatóak legyenek.",
|
||||
"hideHint": "A csatorna videóinak elrejtése a hírfolyamodból. Feliratkozva marad; ez nem iratkoztat le a YouTube-on.",
|
||||
"unhide": "Megjelenítés",
|
||||
"hideFromFeed": "Elrejtés a hírfolyamból",
|
||||
"unsubscribeHint": "Leiratkozás erről a csatornáról a YouTube-on (megváltoztatja a valódi fiókodat). Csak olvasható módban ez rejtve van — használd helyette az Elrejtést.",
|
||||
"unsubscribeOnYoutube": "Leiratkozás a YouTube-on",
|
||||
"thisChannel": "Ez a csatorna"
|
||||
},
|
||||
"notify": {
|
||||
"synced": "{{count}} feliratkozás szinkronizálva",
|
||||
"syncFailed": "A feliratkozások szinkronizálása sikertelen",
|
||||
"unsubscribed": "Leiratkozva a YouTube-on",
|
||||
"unsubscribeFailed": "A leiratkozás sikertelen",
|
||||
"fullHistoryRequested": "Teljes előzmény kérve {{count}} csatornához",
|
||||
"fullHistoryFailed": "Nem sikerült teljes előzményt kérni"
|
||||
},
|
||||
"confirmUnsubscribe": "Leiratkozol a(z) „{{name}}” csatornáról a YouTube-on? Ez megváltoztatja a valódi YouTube-fiókodat. Ha csak a hírfolyamodból szeretnéd eltávolítani, inkább rejtsd el."
|
||||
}
|
||||
9
frontend/src/i18n/locales/hu/errors.json
Normal file
9
frontend/src/i18n/locales/hu/errors.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"boundary": {
|
||||
"title": "Hiba történt.",
|
||||
"subtitle": "Az alkalmazás váratlan hibába ütközött.",
|
||||
"reload": "Újratöltés",
|
||||
"notifTitle": "Valami elromlott",
|
||||
"notifMessage": "Váratlan hiba"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/hu/feed.json
Normal file
17
frontend/src/i18n/locales/hu/feed.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Hírfolyam betöltése…",
|
||||
"loadError": "Nem sikerült betölteni a hírfolyamot.",
|
||||
"emptyTitle": "A hírfolyamod üres",
|
||||
"emptyBody": "Kösd össze a YouTube-fiókodat, hogy importáld a feliratkozásaidat, és felépítsd a hírfolyamodat.",
|
||||
"setUp": "Hírfolyam beállítása",
|
||||
"noMatches": "Egy videó sem felel meg ezeknek a szűrőknek.",
|
||||
"videoCount_one": "{{formattedCount}} videó",
|
||||
"videoCount_other": "{{formattedCount}} videó",
|
||||
"loadingMore": "Továbbiak betöltése…",
|
||||
"hiddenNamed": "Elrejtve: „{{title}}”",
|
||||
"hidden": "Videó elrejtve",
|
||||
"undo": "Visszavonás",
|
||||
"markedWatchedNamed": "Megnézettnek jelölve: „{{title}}”",
|
||||
"markedWatched": "Megnézettnek jelölve",
|
||||
"unwatch": "Megnézés visszavonása"
|
||||
}
|
||||
19
frontend/src/i18n/locales/hu/notifications.json
Normal file
19
frontend/src/i18n/locales/hu/notifications.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"title": "Értesítések",
|
||||
"clearAll": "Összes törlése",
|
||||
"clear": "Törlés",
|
||||
"empty": "Még nincs értesítés.",
|
||||
"actionNeeded": "Teendő",
|
||||
"dismiss": "Elvetés",
|
||||
"findInFeed": "Keresés a hírfolyamban",
|
||||
"unhide": "Megjelenítés",
|
||||
"unwatch": "Megtekintés visszavonása",
|
||||
"unhidden": "Megjelenítve: „{{title}}”",
|
||||
"unwatched": "Megtekintés visszavonva: „{{title}}”",
|
||||
"time": {
|
||||
"justNow": "az imént",
|
||||
"minutes": "{{count}} perce",
|
||||
"hours": "{{count}} órája",
|
||||
"days": "{{count}} napja"
|
||||
}
|
||||
}
|
||||
29
frontend/src/i18n/locales/hu/onboarding.json
Normal file
29
frontend/src/i18n/locales/hu/onboarding.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"close": "Bezárás",
|
||||
"consent": "A Google megjelenít egy <0>„A Google nem ellenőrizte ezt az alkalmazást”</0> képernyőt — ez várható, mert a Siftlode nem ment át a Google teljes ellenőrzésén. Biztonságos folytatni: kattints a <1>Speciális</1> → <2>Ugrás a Siftlode-ra</2> lehetőségre. A hozzáférést bármikor visszavonhatod a <3>Google-fiókodban</3>.",
|
||||
"read": {
|
||||
"title": "Csatlakoztasd a YouTube-feliratkozásaidat",
|
||||
"body": "Be vagy jelentkezve. A hírfolyamod felépítéséhez a Siftlode-nak <0>csak olvasható</0> hozzáférésre van szüksége azokhoz a csatornákhoz, amelyekre a YouTube-on feliratkoztál. Ezzel soha nem tesz közzé, nem töröl és nem módosít semmit.",
|
||||
"connect": "Csatlakozás (csak olvasható)",
|
||||
"skip": "Most kihagyom"
|
||||
},
|
||||
"importing": {
|
||||
"title": "A hírfolyamod felépítése…",
|
||||
"body": "A YouTube-feliratkozásaid importálása folyamatban. A Siftlode-ban már meglévő csatornák azonnal megjelennek; az újak automatikusan feltöltődnek a háttérben."
|
||||
},
|
||||
"write": {
|
||||
"title": "Csatlakoztatva",
|
||||
"importFailed": "A YouTube-fiókod csatlakoztatva, de a feliratkozások importálása sikertelen volt — újrapróbálhatod a Beállítások → Szinkronizálás menüben. ",
|
||||
"feedReady": "A hírfolyamod készen áll{{channels}}. Választhatóan engedélyezheted, hogy a Siftlode ",
|
||||
"feedReadyChannels": " ({{count}} csatorna)",
|
||||
"rationale": "<0>leiratkozzon</0> helyetted a YouTube-csatornákról — ehhez egy plusz írási engedély szükséges. Hagyd ki, ha csak olvasható módban szeretnél maradni; ezt később bármikor engedélyezheted a Beállításokban.",
|
||||
"retryImport": "Importálás újra",
|
||||
"enableUnsubscribe": "Leiratkozás engedélyezése",
|
||||
"keepReadOnly": "Köszönöm, nem — maradjon csak olvasható"
|
||||
},
|
||||
"done": {
|
||||
"title": "Minden kész",
|
||||
"body": "Az olvasási és a leiratkozási hozzáférés is engedélyezve van. Bármelyiket bármikor áttekintheted vagy visszavonhatod a Beállítások → Fiók menüben, vagy a Google-fiókodban.",
|
||||
"done": "Kész"
|
||||
}
|
||||
}
|
||||
17
frontend/src/i18n/locales/hu/player.json
Normal file
17
frontend/src/i18n/locales/hu/player.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"loading": "Betöltés…",
|
||||
"backToOriginal": "Vissza az eredeti videóhoz",
|
||||
"back": "Vissza",
|
||||
"close": "Bezárás",
|
||||
"closeEsc": "Bezárás (Esc)",
|
||||
"description": "Leírás",
|
||||
"noDescription": "Nincs leírás.",
|
||||
"channel": "Csatorna",
|
||||
"views": "{{formattedCount}} megtekintés",
|
||||
"stream": "élő adás",
|
||||
"watched": "Megtekintve",
|
||||
"markWatched": "Megtekintettnek jelöl",
|
||||
"watchedUnmark": "Megtekintve — kattints a jelölés visszavonásához",
|
||||
"jumpToTime": "Ugrás erre az időpontra",
|
||||
"playInApp": "Lejátszás a beépített lejátszóban"
|
||||
}
|
||||
101
frontend/src/i18n/locales/hu/settings.json
Normal file
101
frontend/src/i18n/locales/hu/settings.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"title": "Beállítások",
|
||||
"tabs": {
|
||||
"appearance": "Megjelenés",
|
||||
"notifications": "Értesítések",
|
||||
"sync": "Szinkronizálás",
|
||||
"account": "Fiók"
|
||||
},
|
||||
"appearance": {
|
||||
"colorScheme": "Színséma",
|
||||
"display": "Megjelenítés",
|
||||
"darkMode": "Sötét mód",
|
||||
"listView": "Listanézet",
|
||||
"listViewHint": "A hírfolyam kompakt listaként jelenik meg a kártyarács helyett.",
|
||||
"performanceMode": "Teljesítmény mód",
|
||||
"performanceModeHint": "Kikapcsolja az áttetsző üvegelmosást és a lágy árnyékokat a gyorsabb megjelenítésért lassabb gépeken.",
|
||||
"showHints": "Tippek megjelenítése",
|
||||
"showHintsHint": "Ezek a kis lebegő magyarázatok. Kapcsold ki őket, ha már kiismerted magad.",
|
||||
"textSize": "Betűméret"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Értesítések",
|
||||
"sound": "Hang riasztásoknál",
|
||||
"soundHint": "Rövid hangjelzés, ha egy értesítés a figyelmedet igényli (pl. hibák, kérdések).",
|
||||
"autoDismiss": "Buborékok automatikus eltüntetése",
|
||||
"autoDismissHint": "Kikapcsolva a felugró buborékok addig maradnak, amíg be nem zárod őket. Bekapcsolva a beállított idő után elhalványulnak.",
|
||||
"dismissAfter": "Eltüntetés ennyi után",
|
||||
"sendTest": "Tesztértesítés küldése",
|
||||
"testTitle": "Tesztértesítés",
|
||||
"testMessage": "Így néz ki egy értesítés."
|
||||
},
|
||||
"sync": {
|
||||
"myStatus": "Saját szinkronizálási állapot",
|
||||
"channels": "Csatornák",
|
||||
"channelsHint": "Hány csatornára vagy feliratkozva.",
|
||||
"recentSynced": "Friss szinkronizálva",
|
||||
"recentSyncedHint": "Azok a csatornák, amelyek legutóbbi feltöltései (~az elmúlt év) már a helyi adatbázisban vannak, így megjelennek a hírfolyamodban.",
|
||||
"fullHistory": "Teljes előzmény",
|
||||
"fullHistoryHint": "Azok a csatornák, amelyek teljes archívuma letöltődött, azokból, amelyekhez teljes előzményt kértél (csatornánként választható a Csatornák oldalon).",
|
||||
"fullHistoryEta": "Teljes előzmény becsült ideje",
|
||||
"fullHistoryEtaHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének letöltéséhez, a megosztott napi kvóta alapján.",
|
||||
"myVideos": "Saját videók",
|
||||
"myVideosHint": "A számodra elérhető videók összesen a feliratkozott csatornáidon.",
|
||||
"quotaLeft": "Ma maradt kvóta",
|
||||
"quotaLeftHint": "A ma fennmaradó megosztott YouTube API-keret (éjfélkor nullázódik, USA csendes-óceáni idő szerint). A letöltés ennek alárendelődik.",
|
||||
"loading": "Betöltés…",
|
||||
"apiUsage": "Saját API-használat",
|
||||
"today": "Ma",
|
||||
"todayHint": "A saját műveleteid által ma használt YouTube API-egységek (éjfélkor nullázódik, USA csendes-óceáni idő szerint). A háttér-szinkronizálás itt nem számít bele.",
|
||||
"last7d": "Utolsó 7 nap",
|
||||
"last30d": "Utolsó 30 nap",
|
||||
"allTime": "Mindenkori",
|
||||
"byAction": "Művelet szerint (30 nap)",
|
||||
"noUsage": "Még nincs használat.",
|
||||
"actions": "Műveletek",
|
||||
"syncSubscriptions": "Feliratkozások szinkronizálása",
|
||||
"syncSubscriptionsHint": "Újraimportálja a YouTube-feliratkozásaidat és behúzza az újonnan követett csatornákat.",
|
||||
"backfillEverything": "Minden letöltése",
|
||||
"backfillEverythingHint": "Teljes archívum letöltésének kérése minden csatornához, amelyre fel vagy iratkozva. A régebbi videók és a teljes keresés annyira töltődnek fel, amennyit a megosztott napi kvóta enged.",
|
||||
"synced": "{{count}} feliratkozás szinkronizálva",
|
||||
"syncFailed": "A szinkronizálás sikertelen",
|
||||
"fullHistoryRequested": "Teljes előzmény kérve {{count}} csatornához",
|
||||
"fullHistoryFailed": "Nem sikerült teljes előzményt kérni",
|
||||
"admin": "Adminisztrátor",
|
||||
"adminPauseHint": "A háttér-szinkronizálás szüneteltetése vagy folytatása az egész alkalmazásra (minden felhasználóra).",
|
||||
"resumeBackgroundSync": "Háttér-szinkronizálás folytatása",
|
||||
"pauseBackgroundSync": "Háttér-szinkronizálás szüneteltetése"
|
||||
},
|
||||
"account": {
|
||||
"title": "Fiók",
|
||||
"youtubeAccess": "YouTube-hozzáférés",
|
||||
"youtubeAccessIntro": "A bejelentkezés csak a nevedet és e-mail-címedet osztja meg. A YouTube-hozzáférést külön kell megadni, lent — mindegyik opcionális és bármikor visszavonható a Google-fiókodban.",
|
||||
"readTitle": "Feliratkozások olvasása (a hírfolyamod)",
|
||||
"readGrantedHint": "Megadva. A Siftlode beolvassa az általad követett csatornákat, hogy felépítse a hírfolyamodat. Ezzel sosem módosítja a YouTube-fiókodat.",
|
||||
"readEnableHint": "Csak olvasási hozzáférés a feliratkozásaidhoz — a hírfolyam felépítéséhez szükséges. A Siftlode ezzel semmit sem tud módosítani.",
|
||||
"writeTitle": "Leiratkozás (írás)",
|
||||
"writeGrantedHint": "Megadva. A Siftlode-on belülről leiratkozhatsz csatornákról a YouTube-on. Csak akkor ír, amikor te kéred.",
|
||||
"writeEnableHint": "Lehetővé teszi, hogy a Siftlode leiratkozzon helyetted csatornákról a YouTube-on. Opcionális — hagyd ki, ha csak olvasási módban szeretnél maradni.",
|
||||
"granted": "Megadva",
|
||||
"enable": "Engedélyezés",
|
||||
"enableHint": "Átirányít a Google-höz az engedély megadásához. A Google „nem ellenőrzött alkalmazás” figyelmeztetést mutat — ez normális; kattints a Speciális → Tovább a Siftlode-ra lehetőségre.",
|
||||
"walkMeThrough": "Vezess végig a beállításon"
|
||||
},
|
||||
"invites": {
|
||||
"title": "Hozzáférési kérelmek",
|
||||
"noPending": "Nincs függőben lévő kérelem.",
|
||||
"addPlaceholder": "E-mail közvetlen hozzáadása…",
|
||||
"add": "Hozzáadás",
|
||||
"decided": "{{count}} eldöntve",
|
||||
"approved": "Jóváhagyva — most már be tud jelentkezni",
|
||||
"approveFailed": "A jóváhagyás sikertelen",
|
||||
"denyFailed": "Az elutasítás sikertelen",
|
||||
"addedToWhitelist": "Hozzáadva a fehérlistához",
|
||||
"addFailed": "Nem sikerült hozzáadni ezt az e-mailt",
|
||||
"requested": "kérve: {{time}}",
|
||||
"approveHint": "Jóváhagyás — fehérlistára teszi ezt az e-mailt és e-mailben értesíti őket, hogy bekerültek.",
|
||||
"approve": "Jóváhagyás",
|
||||
"denyHint": "Kérelem elutasítása.",
|
||||
"deny": "Elutasítás"
|
||||
}
|
||||
}
|
||||
65
frontend/src/i18n/locales/hu/sidebar.json
Normal file
65
frontend/src/i18n/locales/hu/sidebar.json
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"filters": "Szűrők",
|
||||
"activeCount": "{{count}} aktív",
|
||||
"clearAll": "Összes törlése",
|
||||
"resetDefaults": "Visszaállítás alapértelmezettre",
|
||||
"customize": "Oldalsáv testreszabása",
|
||||
"done": "Kész",
|
||||
"editHint": "Húzd az átrendezéshez · szem a megjelenítéshez/elrejtéshez",
|
||||
"channel": "Csatorna",
|
||||
"loading": "Betöltés…",
|
||||
"thisChannel": "Ez a csatorna",
|
||||
"channelCount": "{{count}} csatorna",
|
||||
"channelCount_other": "{{count}} csatorna",
|
||||
"dragToReorder": "Húzd az átrendezéshez",
|
||||
"showWidget": "Modul megjelenítése",
|
||||
"hideWidget": "Modul elrejtése",
|
||||
"expand": "Kibontás",
|
||||
"collapse": "Összecsukás",
|
||||
"any": "Bármelyik",
|
||||
"all": "Összes",
|
||||
"tagModeTooltip": "Bármelyik vagy az összes kijelölt címke illeszkedjen",
|
||||
"custom": "Egyéni",
|
||||
"from": "Ettől",
|
||||
"to": "Eddig",
|
||||
"clearDates": "dátumok törlése",
|
||||
"widget": {
|
||||
"show": "Megjelenítés",
|
||||
"sort": "Rendezés",
|
||||
"date": "Feltöltés dátuma",
|
||||
"content": "Tartalomtípus",
|
||||
"language": "Nyelv",
|
||||
"topic": "Téma"
|
||||
},
|
||||
"show": {
|
||||
"unwatched": "Nem nézett",
|
||||
"in_progress": "Megkezdett",
|
||||
"all": "Összes",
|
||||
"watched": "Megnézett",
|
||||
"saved": "Mentett",
|
||||
"hidden": "Rejtett"
|
||||
},
|
||||
"sort": {
|
||||
"newest": "Legújabb",
|
||||
"oldest": "Legrégebbi",
|
||||
"views": "Legnézettebb",
|
||||
"duration_desc": "Leghosszabb",
|
||||
"duration_asc": "Legrövidebb",
|
||||
"title": "Név (A–Z)",
|
||||
"subscribers": "Csatorna feliratkozói",
|
||||
"priority": "Csatorna prioritás",
|
||||
"shuffle": "Lepj meg"
|
||||
},
|
||||
"content": {
|
||||
"normal": "Normál",
|
||||
"shorts": "Shorts",
|
||||
"live": "Élő / Hamarosan"
|
||||
},
|
||||
"datePreset": {
|
||||
"24h": "24 óra",
|
||||
"1week": "1 hét",
|
||||
"1month": "1 hónap",
|
||||
"6months": "6 hónap",
|
||||
"1year": "1 év"
|
||||
}
|
||||
}
|
||||
13
frontend/src/i18n/locales/hu/stats.json
Normal file
13
frontend/src/i18n/locales/hu/stats.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"title": "API-kvóta használat",
|
||||
"rangeDays": "{{count}} nap",
|
||||
"introBefore": "A YouTube Data API-egységek aszerint, hogy ki váltotta ki a felhasználást. A ",
|
||||
"introSystem": "Rendszer",
|
||||
"introAfter": " a megosztott háttérmunka (ütemezett letöltés, gazdagítás, újraszinkronizálás), amely nem köthető egy személyhez.",
|
||||
"loading": "Betöltés…",
|
||||
"noData": "Nincs adat.",
|
||||
"dailyTotal": "Napi összesen ({{count}} nap · {{units}} egység)",
|
||||
"noUsageInRange": "Nincs használat ebben az időszakban.",
|
||||
"dailyTooltip": "{{day}}: {{units}} egység",
|
||||
"system": "Rendszer (háttér)"
|
||||
}
|
||||
10
frontend/src/i18n/locales/hu/time.json
Normal file
10
frontend/src/i18n/locales/hu/time.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"justNow": "épp most",
|
||||
"secondsAgo": "{{count}} mp-e",
|
||||
"minutesAgo": "{{count}} perce",
|
||||
"hoursAgo": "{{count}} órája",
|
||||
"daysAgo": "{{count}} napja",
|
||||
"weeksAgo": "{{count}} hete",
|
||||
"monthsAgo": "{{count}} hónapja",
|
||||
"yearsAgo": "{{count}} éve"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue