setOpen((o) => !o)}
- className="w-full flex items-center gap-3 text-left"
- >
+ setOpen((o) => !o)} className="w-full flex items-center gap-3 text-left">
{isSystem ? t("stats.system") : row.email}
-
- {row.total.toLocaleString()}
-
+ {row.total.toLocaleString()}
{/* Proportion bar */}
diff --git a/frontend/src/i18n/locales/de/settings.json b/frontend/src/i18n/locales/de/settings.json
index 0b9677f..b610ea8 100644
--- a/frontend/src/i18n/locales/de/settings.json
+++ b/frontend/src/i18n/locales/de/settings.json
@@ -3,7 +3,6 @@
"tabs": {
"appearance": "Darstellung",
"notifications": "Benachrichtigungen",
- "sync": "Synchronisierung",
"account": "Konto"
},
"save": {
@@ -42,43 +41,6 @@
"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",
diff --git a/frontend/src/i18n/locales/de/stats.json b/frontend/src/i18n/locales/de/stats.json
index 6f90ffe..3abf5ce 100644
--- a/frontend/src/i18n/locales/de/stats.json
+++ b/frontend/src/i18n/locales/de/stats.json
@@ -1,4 +1,8 @@
{
+ "tabs": {
+ "overview": "Übersicht",
+ "system": "System"
+ },
"title": "API-Kontingentnutzung",
"rangeDays": "{{count}} T",
"introBefore": "YouTube-Data-API-Einheiten, zugeordnet danach, wer die Nutzung ausgelöst hat. ",
@@ -9,5 +13,42 @@
"dailyTotal": "Tagessumme ({{count}} T · {{units}} Einheiten)",
"noUsageInRange": "Keine Nutzung in diesem Zeitraum.",
"dailyTooltip": "{{day}}: {{units}} Einheiten",
- "system": "System (Hintergrund)"
+ "system": "System (Hintergrund)",
+ "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"
+ }
}
diff --git a/frontend/src/i18n/locales/en/settings.json b/frontend/src/i18n/locales/en/settings.json
index b7e837f..7302b80 100644
--- a/frontend/src/i18n/locales/en/settings.json
+++ b/frontend/src/i18n/locales/en/settings.json
@@ -3,7 +3,6 @@
"tabs": {
"appearance": "Appearance",
"notifications": "Notifications",
- "sync": "Sync",
"account": "Account"
},
"save": {
@@ -42,43 +41,6 @@
"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",
diff --git a/frontend/src/i18n/locales/en/stats.json b/frontend/src/i18n/locales/en/stats.json
index b8a0efc..1131e73 100644
--- a/frontend/src/i18n/locales/en/stats.json
+++ b/frontend/src/i18n/locales/en/stats.json
@@ -1,4 +1,8 @@
{
+ "tabs": {
+ "overview": "Overview",
+ "system": "System"
+ },
"title": "API quota usage",
"rangeDays": "{{count}}d",
"introBefore": "YouTube Data API units attributed by who triggered the spend. ",
@@ -9,5 +13,42 @@
"dailyTotal": "Daily total ({{count}}d · {{units}} units)",
"noUsageInRange": "No usage in this range.",
"dailyTooltip": "{{day}}: {{units}} units",
- "system": "System (background)"
+ "system": "System (background)",
+ "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"
+ }
}
diff --git a/frontend/src/i18n/locales/hu/settings.json b/frontend/src/i18n/locales/hu/settings.json
index 0212e51..d06369f 100644
--- a/frontend/src/i18n/locales/hu/settings.json
+++ b/frontend/src/i18n/locales/hu/settings.json
@@ -3,7 +3,6 @@
"tabs": {
"appearance": "Megjelenés",
"notifications": "Értesítések",
- "sync": "Szinkronizálás",
"account": "Fiók"
},
"save": {
@@ -42,43 +41,6 @@
"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",
diff --git a/frontend/src/i18n/locales/hu/stats.json b/frontend/src/i18n/locales/hu/stats.json
index 3c1b901..d85adb0 100644
--- a/frontend/src/i18n/locales/hu/stats.json
+++ b/frontend/src/i18n/locales/hu/stats.json
@@ -1,4 +1,8 @@
{
+ "tabs": {
+ "overview": "Áttekintés",
+ "system": "Rendszer"
+ },
"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 ",
@@ -9,5 +13,42 @@
"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)"
+ "system": "Rendszer (háttér)",
+ "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"
+ }
}