@roastcodes/ttdash 6.1.8 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,8 @@
20
20
  "loadedAt": "Zuletzt geladen: {{time}}",
21
21
  "autoLoadActive": "Auto-Load beim Start",
22
22
  "autoLoadAt": "Beim Start automatisch geladen: {{time}}",
23
- "versionLinkTitle": "TTDash v{{version}} auf npm öffnen"
23
+ "versionLinkTitle": "TTDash v{{version}} auf npm öffnen",
24
+ "streak": "{{count}} Tage in Folge"
24
25
  },
25
26
  "emptyState": {
26
27
  "description": "Lade ein `toktrack`- oder Legacy-JSON hoch oder starte den lokalen Auto-Import mit lokalem `toktrack`, `bunx toktrack daily --json` oder `npx --yes toktrack daily --json`.",
@@ -29,6 +30,18 @@
29
30
  "openSettings": "Einstellungen & Backups",
30
31
  "or": "oder"
31
32
  },
33
+ "loadError": {
34
+ "title": "Lokaler App-Zustand konnte nicht geladen werden",
35
+ "settingsDescription": "Die lokalen Einstellungen konnten nicht geladen werden. Setze sie zurück oder lade den Zustand erneut.",
36
+ "usageDescription": "Die gespeicherten Nutzungsdaten konnten nicht geladen werden. Entferne die defekten Daten oder lade den Zustand erneut.",
37
+ "multipleDescription": "TTDash hat Probleme sowohl in den lokalen Einstellungen als auch in den gespeicherten Nutzungsdaten gefunden. Setze die betroffenen Daten zurück und lade den Zustand erneut.",
38
+ "details": "Details",
39
+ "retry": "Erneut laden",
40
+ "resetSettings": "Einstellungen zurücksetzen",
41
+ "deleteData": "Gespeicherte Daten löschen",
42
+ "settingsCorrupted": "Die lokale Einstellungsdatei ist unlesbar oder beschädigt.",
43
+ "usageCorrupted": "Die lokale Nutzungsdatei ist unlesbar oder beschädigt."
44
+ },
32
45
  "viewModes": {
33
46
  "daily": "Tagesansicht",
34
47
  "monthly": "Monatsansicht",
@@ -62,7 +75,7 @@
62
75
  "cost": "Kosten",
63
76
  "costs": "Kosten",
64
77
  "tokens": "Tokens",
65
- "requests": "Requests",
78
+ "requests": "Anfragen",
66
79
  "today": "Heute",
67
80
  "currentMonth": "Monat",
68
81
  "yes": "Ja",
@@ -77,7 +90,7 @@
77
90
  "nextMonth": "Nächster Monat",
78
91
  "startDate": "Startdatum",
79
92
  "endDate": "Enddatum",
80
- "selectedProviders": "Ausgewählte Provider",
93
+ "selectedProviders": "Ausgewählte Anbieter",
81
94
  "selectedModels": "Ausgewählte Modelle",
82
95
  "allProviders": "Alle Anbieter",
83
96
  "allModels": "Alle Modelle",
@@ -86,21 +99,26 @@
86
99
  "focusMonth": "Fokusmonat",
87
100
  "showInfo": "Info anzeigen",
88
101
  "expand": "Vergrössern",
102
+ "expandWithTitle": "{{title}} vergrössern",
103
+ "expandedCardDescription": "Erweiterte Kartenansicht mit zusätzlichen Kennzahlen und vollständigem Inhalt.",
89
104
  "input": "Input",
90
105
  "output": "Output",
91
106
  "cacheWrite": "Cache Write",
92
107
  "cacheRead": "Cache Read",
93
108
  "thinking": "Thinking",
94
- "requestsShort": "Req",
95
- "request": "Request",
109
+ "requestsShort": "Anf.",
110
+ "request": "Anfrage",
96
111
  "share": "Anteil",
97
112
  "top": "Top"
98
113
  },
99
114
  "filterBar": {
100
115
  "status": "Filterstatus",
116
+ "viewModeLabel": "Ansichtsmodus",
117
+ "focusMonthLabel": "Fokusmonat",
101
118
  "providersActive": "{{count}} Anbieter aktiv",
102
119
  "modelsActive": "{{count}} Modelle aktiv",
103
120
  "dateFilterActive": "Datumsfilter aktiv",
121
+ "clearDate": "{{label}} zurücksetzen",
104
122
  "presets": {
105
123
  "7d": "7T",
106
124
  "30d": "30T",
@@ -117,10 +135,10 @@
117
135
  },
118
136
  "dashboard": {
119
137
  "insights": {
120
- "title": "Insights",
138
+ "title": "Einblicke",
121
139
  "badge": "Verdichtete Signale",
122
- "description": "Konzentrierte Aussagen aus Kosten-, Modell- und Request-Daten",
123
- "quickRead": "Quick Read"
140
+ "description": "Konzentrierte Aussagen aus Kosten-, Modell- und Anfragedaten",
141
+ "quickRead": "Kurzfazit"
124
142
  },
125
143
  "metrics": {
126
144
  "title": "Metriken",
@@ -146,8 +164,8 @@
146
164
  "description": "Verbrauch nach Token-Typ"
147
165
  },
148
166
  "requestAnalysis": {
149
- "title": "Request-Analyse",
150
- "description": "Requests gesamt, pro Modell und im Verlauf"
167
+ "title": "Anfragen-Analyse",
168
+ "description": "Anfragen gesamt, pro Modell und im Verlauf"
151
169
  },
152
170
  "advancedAnalysis": {
153
171
  "title": "Verteilungen & Risiko",
@@ -188,19 +206,22 @@
188
206
  "topModel": "Top Modell",
189
207
  "cacheHitRate": "Cache-Hit-Rate",
190
208
  "costPerMillion": "$/1M Tokens",
191
- "requests": "Requests",
209
+ "requests": "Anfragen",
192
210
  "thinking": "Thinking",
193
211
  "avgPerPeriod": "{{value}}/{{unit}} im Mittel",
194
- "tokensPerRequestAvg": "{{value}} pro Request im Mittel",
212
+ "tokensPerRequestAvg": "{{value}} pro Anfrage im Mittel",
195
213
  "coverageOfDays": "{{coverage}} Abdeckung von {{days}} Tagen",
196
214
  "providersActive": "{{count}} Anbieter aktiv",
197
215
  "share": "{{value}} Anteil",
198
- "requestLead": "Req-Lead: {{value}}",
216
+ "requestLead": "Führend bei Anfragen: {{value}}",
199
217
  "allTokensViaCacheRead": "{{value}} aller Tokens via Cache Read",
200
- "requestCountersMissing": "Keine Request-Zähler im Datensatz",
218
+ "requestCountersMissing": "Keine Anfragezähler im Datensatz",
201
219
  "thinkingShareOfVolume": "{{value}} des gesamten Tokenvolumens",
202
- "requestsSubtitle": "Ø {{requests}} / {{unit}} · {{cost}} / Req · σ {{volatility}}",
203
- "thinkingSubtitle": "{{share}} Anteil · {{tokens}} / Request"
220
+ "totalCostSubtitle": "Ø {{average}}/{{unit}} · {{costPerRequest}} pro Anfrage",
221
+ "totalTokensSubtitle": "{{tokensPerRequest}} pro Anfrage",
222
+ "totalTokensSubtitleWithRatio": "Input/Output-Verhältnis {{ratio}}:1 · {{tokensPerRequest}} pro Anfrage",
223
+ "requestsSubtitle": "Ø {{requests}} / {{unit}} · {{cost}} pro Anfrage · σ {{volatility}}",
224
+ "thinkingSubtitle": "{{share}} Anteil · {{tokens}} pro Anfrage"
204
225
  },
205
226
  "secondary": {
206
227
  "mostExpensiveDay": "Teuerster Tag",
@@ -212,9 +233,9 @@
212
233
  "spread": "Spanne: {{value}}",
213
234
  "medianPerUnit": "Median/{{unit}}",
214
235
  "vsAverage": "{{direction}}{{value}}% vs. Ø",
215
- "vsAverageWithVolatility": "{{direction}}{{value}}% vs. Ø · σ Req {{volatility}}",
236
+ "vsAverageWithVolatility": "{{direction}}{{value}}% vs. Ø · σ Anf. {{volatility}}",
216
237
  "medianInfo": "Der Median zeigt den typischen Wert und ist weniger anfällig für Ausreisser als der Durchschnitt.",
217
- "requestLeader": "{{model}} · {{requests}} Req",
238
+ "requestLeader": "{{model}} · {{requests}} Anfragen",
218
239
  "dominantProviderSubtitle": "{{share}} Anteil · {{cost}}{{requestLeader}}"
219
240
  },
220
241
  "today": {
@@ -225,17 +246,19 @@
225
246
  "models": "Modelle",
226
247
  "costPerMillion": "$/1M Tokens",
227
248
  "cacheHitRate": "Cache-Hit-Rate",
228
- "requests": "Requests",
249
+ "requests": "Anfragen",
229
250
  "thinking": "Thinking",
230
251
  "vsAverageShort": "vs. Ø",
231
252
  "overallAverage": "Gesamt-Ø: {{value}}",
232
253
  "cacheShare": "{{value}} Cache-Anteil",
233
- "requestsToday": "Requests heute",
254
+ "requestsToday": "Anfragen heute",
234
255
  "avgPerDay": "Ø {{value}}/Tag",
235
- "ioRatio": "I/O Ratio: {{value}}:1",
256
+ "ioRatio": "Input/Output-Verhältnis: {{value}}:1",
236
257
  "topModel": "Top: {{value}}",
237
- "requestsSubtitle": "{{value}} / Modell · {{cost}}/Req",
238
- "requestCountersMissing": "Keine Request-Zähler",
258
+ "requestsSubtitle": "{{value}} / Modell · {{cost}} pro Anfrage",
259
+ "tokensInsight": "{{value}} pro Anfrage",
260
+ "requestsInsight": "{{value}} pro Anfrage",
261
+ "requestCountersMissing": "Keine Anfragezähler",
239
262
  "thinkingSubtitle": "{{value}} Anteil"
240
263
  },
241
264
  "month": {
@@ -248,18 +271,18 @@
248
271
  "models": "Modelle",
249
272
  "costPerMillion": "$/1M Tokens",
250
273
  "cacheHitRate": "Cache-Hit-Rate",
251
- "requests": "Requests",
274
+ "requests": "Anfragen",
252
275
  "thinking": "Thinking",
253
276
  "vsPreviousMonth": "vs. Vormonat",
254
277
  "coverage": "{{value}} Abdeckung",
255
- "requestsInMonth": "Requests im Monat",
278
+ "requestsInMonth": "Anfragen im Monat",
256
279
  "avgPerDay": "Ø {{value}}/Tag",
257
- "ioRatio": "I/O Ratio: {{value}}:1",
280
+ "ioRatio": "Input/Output-Verhältnis: {{value}}:1",
258
281
  "topModel": "Top: {{value}}",
259
282
  "cacheMix": "In: {{input}} / Out: {{output}}",
260
- "costPerRequest": "{{value}} / Req",
261
- "requestsSubtitle": "Ø {{value}}/Tag · {{cost}}/Req",
262
- "requestCountersMissing": "Keine Request-Zähler",
283
+ "costPerRequest": "{{value}} pro Anfrage",
284
+ "requestsSubtitle": "Ø {{value}}/Tag · {{cost}} pro Anfrage",
285
+ "requestCountersMissing": "Keine Anfragezähler",
263
286
  "thinkingSubtitle": "{{value}} Anteil"
264
287
  }
265
288
  },
@@ -274,19 +297,19 @@
274
297
  "topThreeModels": "Top 3 Modelle"
275
298
  },
276
299
  "requestEconomy": {
277
- "title": "Request-Ökonomie",
278
- "valueLabel": "Ø Kosten pro Request",
300
+ "title": "Anfrage-Ökonomie",
301
+ "valueLabel": "Ø Kosten pro Anfrage",
279
302
  "summary": "Jede Anfrage kostet im Mittel {{cost}} und verarbeitet {{tokens}}. {{leader}}",
280
- "leader": "{{model}} führt aktuell beim Request-Volumen.",
281
- "fallback": "Der geladene Datensatz enthält keine verlässlichen Request-Zähler. Request-Ökonomie ist deshalb nicht verfügbar.",
282
- "avgRequests": "Ø Req/{{unit}}",
283
- "avgTokensPerRequest": "Ø Tokens/Req",
303
+ "leader": "{{model}} führt aktuell beim Anfragevolumen.",
304
+ "fallback": "Der geladene Datensatz enthält keine verlässlichen Anfragezähler. Anfrage-Ökonomie ist deshalb nicht verfügbar.",
305
+ "avgRequests": "Ø Anfragen/{{unit}}",
306
+ "avgTokensPerRequest": "Ø Tokens / Anfrage",
284
307
  "costPerMillion": "$/1M Tokens",
285
- "totalRequests": "Gesamt Requests"
308
+ "totalRequests": "Gesamt-Anfragen"
286
309
  },
287
310
  "usagePatterns": {
288
311
  "title": "Nutzungsmuster",
289
- "summaryWithCoverage": "{{activeDays}} von {{totalDays}} Kalendertagen enthalten Aktivität im gefilterten Zeitraum. Die Requests schwanken dabei um {{volatility}}.",
312
+ "summaryWithCoverage": "{{activeDays}} von {{totalDays}} Kalendertagen enthalten Aktivität im gefilterten Zeitraum. Die Anfragen schwanken dabei um {{volatility}}.",
290
313
  "summaryWithoutCoverage": "{{activeDays}} aktive {{unit}} im gewählten Ausschnitt.",
291
314
  "avgModels": "Ø Modelle/Eintrag",
292
315
  "providersActive": "Anbieter aktiv",
@@ -307,7 +330,7 @@
307
330
  },
308
331
  "quickRead": {
309
332
  "summary": "{{provider}} trägt {{providerShare}} der Kosten, während die Top-3-Modelle {{topThreeShare}} bündeln. {{requestLeader}}",
310
- "requestLeader": "{{requestModel}} führt bei den Requests, {{tokenModel}} beim Tokenvolumen.",
333
+ "requestLeader": "{{requestModel}} führt bei den Anfragen, {{tokenModel}} beim Tokenvolumen.",
311
334
  "fallback": "Für den aktuellen Filterausschnitt sind noch nicht genug Daten für eine stabile Zusammenfassung vorhanden."
312
335
  }
313
336
  },
@@ -349,8 +372,8 @@
349
372
  "averageSuffix": "Ø"
350
373
  },
351
374
  "requestsOverTime": {
352
- "title": "Requests im Zeitverlauf",
353
- "subtitle": "Requests gesamt, nach Modell und mit 7-Tage-Ø",
375
+ "title": "Anfragen im Zeitverlauf",
376
+ "subtitle": "Anfragen gesamt, nach Modell und mit 7-Tage-Ø",
354
377
  "summary": "Gesamt {{total}} · Peak {{peak}} am {{date}}",
355
378
  "averagePerUnit": "Ø / {{unit}}",
356
379
  "trend": "Trend Ø",
@@ -358,12 +381,12 @@
358
381
  "trendHeading": "Gleitender Durchschnitt pro Modell",
359
382
  "movingAverageHeading": "7-Tage Durchschnitt pro Modell",
360
383
  "totalMovingAverage": "Gesamt {{label}}",
361
- "requestsByModelTotal": "Requests nach Modell gesamt",
362
- "requestsInRange": "Requests im gewählten Zeitraum",
384
+ "requestsByModelTotal": "Anfragen nach Modell gesamt",
385
+ "requestsInRange": "Anfragen im gewählten Zeitraum",
363
386
  "total": "Gesamt",
364
387
  "topModel": "Top Modell",
365
388
  "topShare": "Top Share",
366
- "totalRequestsSeries": "Gesamt-Requests"
389
+ "totalRequestsSeries": "Gesamt-Anfragen"
367
390
  },
368
391
  "requestCacheHitRate": {
369
392
  "title": "Cache-Hit-Rate nach Modell",
@@ -379,10 +402,11 @@
379
402
  },
380
403
  "heatmap": {
381
404
  "costTitle": "Kosten-Heatmap",
382
- "requestsTitle": "Request-Heatmap",
405
+ "requestsTitle": "Anfragen-Heatmap",
383
406
  "tokensTitle": "Token-Heatmap",
407
+ "cellLabel": "{{date}}: {{value}}",
384
408
  "costEmpty": "Kosten-Heatmap nur in der Tagesansicht verfügbar",
385
- "requestsEmpty": "Request-Heatmap nur in der Tagesansicht verfügbar",
409
+ "requestsEmpty": "Anfragen-Heatmap nur in der Tagesansicht verfügbar",
386
410
  "tokensEmpty": "Token-Heatmap nur in der Tagesansicht verfügbar",
387
411
  "switchToDaily": "Wechsle zur Tagesansicht für die Kalender-Heatmap",
388
412
  "less": "Weniger",
@@ -401,8 +425,8 @@
401
425
  "title": "Verteilungen",
402
426
  "requiresData": "Für Verteilungen werden mindestens 2 Datenpunkte im aktuellen Filter benötigt.",
403
427
  "costPerPeriod": "Kosten je {{period}}",
404
- "requestsPerPeriod": "Requests je {{period}}",
405
- "tokensPerRequest": "Tokens pro Request",
428
+ "requestsPerPeriod": "Anfragen je {{period}}",
429
+ "tokensPerRequest": "Tokens pro Anfrage",
406
430
  "interval": "Intervall",
407
431
  "dataPoints": "Datenpunkte",
408
432
  "buckets": "Buckets"
@@ -411,21 +435,21 @@
411
435
  "title": "Korrelationen",
412
436
  "requiresData": "Für Korrelationen werden mindestens 2 Datenpunkte im aktuellen Filter benötigt.",
413
437
  "points": "{{count}} Punkte",
414
- "requestsVsCost": "Requests vs. Kosten",
415
- "cacheVsCostPerRequest": "Cache-Rate vs. $/Req",
416
- "requestsAxis": "Requests",
417
- "requestsLabel": "Requests",
438
+ "requestsVsCost": "Anfragen vs. Kosten",
439
+ "cacheVsCostPerRequest": "Cache-Rate vs. Kosten / Anfrage",
440
+ "requestsAxis": "Anfragen",
441
+ "requestsLabel": "Anfragen",
418
442
  "tokensLabel": "Tokens",
419
- "costPerRequestAxis": "$/Req",
443
+ "costPerRequestAxis": "Kosten / Anfrage",
420
444
  "cost": "Kosten",
421
- "costPerRequest": "Kosten / Req",
445
+ "costPerRequest": "Kosten / Anfrage",
422
446
  "cacheRate": "Cache-Rate",
423
- "strongRequestCost": "Starker Zusammenhang: Mehr Requests treiben die Kosten sichtbar.",
447
+ "strongRequestCost": "Starker Zusammenhang: Mehr Anfragen treiben die Kosten sichtbar.",
424
448
  "mediumRequestCost": "Moderater Zusammenhang zwischen Last und Kosten.",
425
449
  "weakRequestCost": "Schwacher Zusammenhang: Kosten werden stärker von Modellmix und Tokenlast geprägt.",
426
- "negativeCache": "Negativer Zusammenhang: Höhere Cache-Rate senkt tendenziell die Kosten pro Request.",
450
+ "negativeCache": "Negativer Zusammenhang: Höhere Cache-Rate senkt tendenziell die Kosten pro Anfrage.",
427
451
  "neutralCache": "Kaum linearer Effekt: Cache wirkt, aber nicht allein entscheidend.",
428
- "positiveCache": "Positiver Zusammenhang: Hohe Cache-Raten fallen hier nicht automatisch mit niedrigen Kosten pro Request zusammen."
452
+ "positiveCache": "Positiver Zusammenhang: Hohe Cache-Raten fallen hier nicht automatisch mit niedrigen Kosten pro Anfrage zusammen."
429
453
  },
430
454
  "costByWeekday": {
431
455
  "title": "Kosten nach Wochentag",
@@ -450,23 +474,23 @@
450
474
  "providerHint": "HHI {{value}} · Zeigt die Abhängigkeit von einzelnen Anbietern."
451
475
  },
452
476
  "requestQuality": {
453
- "title": "Request-Qualität",
454
- "tokensPerRequest": "Tokens / Request",
455
- "costPerRequest": "Kosten / Request",
456
- "cachePerRequest": "Cache / Request",
457
- "thinkingPerRequest": "Thinking / Request",
477
+ "title": "Anfragequalität",
478
+ "tokensPerRequest": "Tokens / Anfrage",
479
+ "costPerRequest": "Kosten / Anfrage",
480
+ "cachePerRequest": "Cache / Anfrage",
481
+ "thinkingPerRequest": "Thinking / Anfrage",
458
482
  "tokensHint": "Durchschnittliche Tokenlast pro Anfrage",
459
483
  "costHint": "Direkte Kosten pro Anfrage",
460
484
  "cacheHint": "Gelesene Cache-Tokens pro Anfrage",
461
485
  "thinkingHint": "Thinking-Tokens pro Anfrage",
462
- "requestDensity": "Request-Dichte",
486
+ "requestDensity": "Anfragedichte",
463
487
  "averagePerActiveUnit": "Ø pro aktivem {{unit}}",
464
488
  "cacheHitRate": "Cache-Hit-Rate",
465
489
  "cacheHitHint": "Direkt aus Cache-Read relativ zu allen Tokens",
466
490
  "inputOutput": "Input / Output",
467
491
  "inputOutputHint": "Drift zwischen eingehenden und erzeugten Tokens",
468
- "topRequestModel": "Top Request-Modell",
469
- "noRequestLeader": "Kein Request-Leader"
492
+ "topRequestModel": "Top-Anfragemodell",
493
+ "noRequestLeader": "Kein führendes Anfragemodell"
470
494
  },
471
495
  "forecast": {
472
496
  "noData": "Keine Daten verfügbar",
@@ -535,7 +559,7 @@
535
559
  "count": "{{count}} Modelle",
536
560
  "topModel": "Top Modell",
537
561
  "mostEfficient": "Effizientestes Modell",
538
- "totalRequests": "Gesamt-Requests",
562
+ "totalRequests": "Gesamt-Anfragen",
539
563
  "topModelTokens": "Top Modell Tokens",
540
564
  "share": "{{value}} Anteil",
541
565
  "perModel": "{{value}} / Modell",
@@ -544,29 +568,29 @@
544
568
  "cost": "Kosten",
545
569
  "tokens": "Tokens",
546
570
  "shareShort": "Anteil",
547
- "req": "Req",
548
- "reqShare": "Req %",
549
- "costPerReq": "$ / Req",
550
- "tokensPerReq": "Tokens / Req",
571
+ "req": "Anfragen",
572
+ "reqShare": "Anfragen %",
573
+ "costPerReq": "Kosten / Anfrage",
574
+ "tokensPerReq": "Tokens / Anfrage",
551
575
  "cacheShare": "Cache %",
552
576
  "thinkingShare": "Think %",
553
577
  "avgPerUnit": "Ø/{{unit}}"
554
578
  },
555
579
  "providerEfficiency": {
556
- "title": "Provider-Effizienz",
580
+ "title": "Anbieter-Effizienz",
557
581
  "count": "{{count}} Anbieter",
558
- "leadProvider": "Lead Provider",
559
- "mostEfficient": "Effizientester Provider",
560
- "totalRequests": "Gesamt-Requests",
582
+ "leadProvider": "Führender Anbieter",
583
+ "mostEfficient": "Effizientester Anbieter",
584
+ "totalRequests": "Gesamt-Anfragen",
561
585
  "share": "{{value}} Anteil",
562
586
  "perProvider": "{{value}} / Anbieter",
563
587
  "avgPerUnit": "Ø/{{unit}}",
564
- "provider": "Provider",
588
+ "provider": "Anbieter",
565
589
  "cost": "Kosten",
566
590
  "shareShort": "Anteil",
567
- "req": "Req",
591
+ "req": "Anfragen",
568
592
  "tokens": "Tokens",
569
- "costPerReq": "$ / Req",
593
+ "costPerReq": "Kosten / Anfrage",
570
594
  "costPerMillion": "$/1M",
571
595
  "cacheShare": "Cache %"
572
596
  },
@@ -579,12 +603,12 @@
579
603
  "showAll": "Alle anzeigen",
580
604
  "totalCost": "Gesamtkosten",
581
605
  "totalTokens": "Gesamt-Tokens",
582
- "requests": "Requests",
606
+ "requests": "Anfragen",
583
607
  "cacheReadShare": "Cache Read Anteil",
584
608
  "peak": "Peak",
585
609
  "previousDay": "Vortag",
586
610
  "avg7d": "7T-Ø",
587
- "reqAvg": "Req-Ø",
611
+ "reqAvg": "Anfragen-Ø",
588
612
  "date": "Datum",
589
613
  "cost": "Kosten",
590
614
  "tokens": "Tokens",
@@ -599,7 +623,10 @@
599
623
  "github": "GitHub",
600
624
  "issues": "GitHub Issues"
601
625
  },
602
- "chartsAndFeatures": "Charts & Features",
626
+ "chartsAndFeatures": "Charts",
627
+ "dashboardSectionsTitle": "Dashboard-Sektionen",
628
+ "featuresTitle": "Features",
629
+ "tablesTitle": "Tabellen",
603
630
  "metricLabels": {
604
631
  "totalCost": "Gesamtkosten",
605
632
  "totalTokens": "Tokens gesamt",
@@ -619,7 +646,7 @@
619
646
  "cumulativeCost": "Kumulative Kosten",
620
647
  "costByWeekday": "Kosten nach Wochentag",
621
648
  "tokensOverTime": "Tokens über Zeit",
622
- "requestsOverTime": "Requests im Zeitverlauf",
649
+ "requestsOverTime": "Anfragen im Zeitverlauf",
623
650
  "requestCacheHitRate": "Cache-Hit-Rate nach Modell",
624
651
  "tokenTypes": "Token-Typen",
625
652
  "tokenEfficiency": "Token-Effizienz",
@@ -627,15 +654,19 @@
627
654
  "distributionAnalysis": "Verteilungen",
628
655
  "correlationAnalysis": "Korrelationen",
629
656
  "heatmap": "Kosten-Heatmap",
630
- "requestHeatmap": "Request-Heatmap",
657
+ "requestHeatmap": "Anfragen-Heatmap",
631
658
  "tokenHeatmap": "Token-Heatmap",
632
659
  "forecast": "Prognose",
633
660
  "cacheROI": "Cache-ROI",
661
+ "providerLimitProgress": "Anbieter-Limit-Auslastung",
662
+ "providerSubscriptionMix": "Anbieter-Abos vs. API-Kosten",
663
+ "providerLimitTimeline": "Anbieterlimits im Zeitverlauf",
634
664
  "periodComparison": "Periodenvergleich",
635
- "anomalyDetection": "Anomalie-Erkennung"
665
+ "anomalyDetection": "Anomalie-Erkennung",
666
+ "cellLabel": "{{date}}: {{value}}"
636
667
  },
637
668
  "sectionLabels": {
638
- "insights": "Insights",
669
+ "insights": "Einblicke",
639
670
  "metrics": "Metriken",
640
671
  "today": "Heute",
641
672
  "currentMonth": "Monat",
@@ -643,17 +674,17 @@
643
674
  "forecastCache": "Prognose & Cache",
644
675
  "costAnalysis": "Kostenanalyse",
645
676
  "tokenAnalysis": "Token-Analyse",
646
- "requestAnalysis": "Request-Analyse",
677
+ "requestAnalysis": "Anfragen-Analyse",
647
678
  "advancedAnalysis": "Verteilungen & Risiko",
648
679
  "comparisons": "Vergleiche & Anomalien",
649
680
  "tables": "Tabellen",
650
- "limits": "Limits & Subscriptions"
681
+ "limits": "Limits & Abonnements"
651
682
  },
652
683
  "featureLabels": {
653
- "requestQuality": "Request-Qualität",
654
- "providerLimits": "Limits & Subscriptions",
684
+ "requestQuality": "Anfragequalität",
685
+ "providerLimits": "Anbieterlimits",
655
686
  "concentrationRisk": "Konzentrationsrisiko",
656
- "providerEfficiency": "Provider-Effizienz",
687
+ "providerEfficiency": "Anbieter-Effizienz",
657
688
  "modelEfficiency": "Modell-Effizienz",
658
689
  "recentDays": "Zeiträume im Detail"
659
690
  }
@@ -701,7 +732,7 @@
701
732
  },
702
733
  "openSettings": {
703
734
  "label": "Einstellungen öffnen",
704
- "description": "Backups, App-Optionen und Provider Limits verwalten"
735
+ "description": "Backups, App-Optionen und Anbieterlimits verwalten"
705
736
  },
706
737
  "exportCsv": {
707
738
  "label": "CSV exportieren",
@@ -785,7 +816,7 @@
785
816
  "description": "Springt zur Sektion {{section}}"
786
817
  },
787
818
  "insights": {
788
- "label": "Zu Insights",
819
+ "label": "Zu Einblicke",
789
820
  "description": "Springt zur Executive Summary"
790
821
  },
791
822
  "metrics": {
@@ -809,7 +840,7 @@
809
840
  "description": "Springt zu Forecast und Cache ROI"
810
841
  },
811
842
  "limits": {
812
- "label": "Zu Limits & Subscriptions",
843
+ "label": "Zu Limits & Abonnements",
813
844
  "description": "Springt zur Limits-Sektion"
814
845
  },
815
846
  "charts": {
@@ -821,8 +852,8 @@
821
852
  "description": "Springt zu Token-Charts und Verteilungen"
822
853
  },
823
854
  "requestAnalysis": {
824
- "label": "Zu Request-Analyse",
825
- "description": "Springt zu Requests im Zeitverlauf und Request-Verteilung"
855
+ "label": "Zu Anfragen-Analyse",
856
+ "description": "Springt zu Anfragen im Zeitverlauf und zur Anfragen-Verteilung"
826
857
  },
827
858
  "comparisons": {
828
859
  "label": "Zu Vergleiche & Anomalien",
@@ -857,7 +888,9 @@
857
888
  "settings": {
858
889
  "modal": {
859
890
  "title": "Einstellungen",
860
- "description": "Verwalte App-Backups, gespeicherte Daten und Provider Limits an einem Ort.",
891
+ "description": "Verwalte App-Backups, gespeicherte Daten und Anbieterlimits an einem Ort.",
892
+ "languageTitle": "Dashboard-Sprache",
893
+ "languageDescription": "Lege fest, welche Sprache im Dashboard, in Dialogen und in Reports verwendet wird.",
861
894
  "dataStatus": "Datenstatus",
862
895
  "lastLoaded": "Zuletzt geladen",
863
896
  "loadedVia": "Geladen über",
@@ -881,8 +914,8 @@
881
914
  "dataBackupDescription": "Exportiert den lokal gespeicherten Nutzungsstand als Backup und importiert Backups konservativ zurück.",
882
915
  "dataImportPolicy": "Beim Datenimport werden nur fehlende Tage ergänzt. Bestehende Tage mit abweichenden Werten bleiben lokal erhalten und werden als Konflikt gemeldet.",
883
916
  "dataImportReplaceHint": "Wenn du einen Datensatz vollständig ersetzen willst, nutze weiter den normalen JSON-Upload im Header.",
884
- "providerLimitsTitle": "Provider Limits",
885
- "providerLimitsDescription": "Definiere Subscription und Monatslimit pro Anbieter. Nur Anbieter aus dem aktuell geladenen Report sind editierbar.",
917
+ "providerLimitsTitle": "Anbieterlimits",
918
+ "providerLimitsDescription": "Definiere Abo und Monatslimit pro Anbieter. Nur Anbieter aus dem aktuell geladenen Report sind editierbar.",
886
919
  "noProviders": "Keine Anbieter im geladenen Report gefunden.",
887
920
  "exportSettings": "Einstellungen exportieren",
888
921
  "importSettings": "Einstellungen importieren",
@@ -910,19 +943,48 @@
910
943
  }
911
944
  }
912
945
  },
946
+ "drillDown": {
947
+ "description": "Detaillierte Tagesansicht mit Token-Verteilung, Modellanteilen, Anfragen und Thinking-Tokens.",
948
+ "cacheRate": "Cache-Rate",
949
+ "tokensPerRequest": "Tokens / Anfrage",
950
+ "costPerRequest": "Kosten / Anfrage",
951
+ "costRank": "Kosten-Rang",
952
+ "requestRank": "Anfragen-Rang",
953
+ "topRequestModel": "Dominant nach Anfragen",
954
+ "costVsAverage7d": "Kosten vs. 7T-Ø",
955
+ "requestsVsAverage7d": "Anfragen vs. 7T-Ø",
956
+ "tokenDistribution": "Token-Verteilung",
957
+ "requestCountShort": "{{count}} Anfragen",
958
+ "modelRequestSummary": "{{costPerRequest}} / Anfrage · {{tokensPerRequest}} / Anfrage",
959
+ "noRequests": "Keine Anfragen",
960
+ "tokenSegments": {
961
+ "cacheRead": "Cache Read",
962
+ "cacheWrite": "Cache Write"
963
+ }
964
+ },
965
+ "chartCard": {
966
+ "expandedDescription": "Erweiterte Chart-Ansicht mit Kennzahlenübersicht und optionalem CSV-Export.",
967
+ "exportCsv": "CSV exportieren"
968
+ },
969
+ "customTooltip": {
970
+ "total": "Gesamt",
971
+ "delta": "Delta",
972
+ "vsPrevious": "vs. vorher",
973
+ "vsAverage": "vs. Ø"
974
+ },
913
975
  "limits": {
914
- "sectionTitle": "Limits & Subscriptions",
915
- "sectionDescription": "Budget-Risiko getrennt von Subscription-Wirkung im aktuellen Filterkontext",
976
+ "sectionTitle": "Limits & Abonnements",
977
+ "sectionDescription": "Budget-Risiko getrennt von Abo-Wirkung im aktuellen Filterkontext",
916
978
  "providersBadge": "{{count}} Anbieter",
917
979
  "warningBanner": "{{count}} Anbieter haben ihr Monatslimit im aktuellen Ausschnitt erreicht oder überschritten.",
918
980
  "cards": {
919
981
  "atLimit": "Anbieter am Limit",
920
982
  "nearLimit": "Nahe am Limit",
921
- "subscriptionVolume": "Subscription-Volumen",
922
- "subscriptionValue": "Subscription-Mehrwert",
983
+ "subscriptionVolume": "Abo-Volumen",
984
+ "subscriptionValue": "Abo-Mehrwert",
923
985
  "nearLimitHint": "ab 80% Auslastung",
924
986
  "subscriptionVolumeHint": "fixe Kosten / Monat",
925
- "subscriptionValueHint": "Usage über Subscription",
987
+ "subscriptionValueHint": "Nutzung über dem Abo",
926
988
  "noMonth": "Kein Monat"
927
989
  },
928
990
  "statuses": {
@@ -930,9 +992,9 @@
930
992
  "budgetTight": "Budget angespannt",
931
993
  "budgetStable": "Budget stabil",
932
994
  "noLimit": "Kein Limit gesetzt",
933
- "noSubscription": "Keine Subscription",
934
- "subscriptionPaysOff": "Subscription zahlt sich aus",
935
- "belowSubscription": "Noch unter Subscription"
995
+ "noSubscription": "Kein Abo",
996
+ "subscriptionPaysOff": "Abo zahlt sich aus",
997
+ "belowSubscription": "Noch unter dem Abo"
936
998
  },
937
999
  "badge": {
938
1000
  "limit": "{{value}}% Limit",
@@ -943,16 +1005,16 @@
943
1005
  "budgetTitle": "Budget-Status je Anbieter",
944
1006
  "budgetSubtitle": "Jeder Track zeigt pro Anbieter direkt den Abstand bis zum Limit oder den bereits eingetretenen Überzug",
945
1007
  "budgetNoMonth": "Kein Monat im aktuellen Ausschnitt",
946
- "subscriptionTitle": "Subscription-Status je Anbieter",
1008
+ "subscriptionTitle": "Abo-Status je Anbieter",
947
1009
  "subscriptionSubtitle": "Jeder Track zeigt pro Anbieter direkt den Abstand zum Break-even oder den bereits erreichten Mehrwert",
948
1010
  "subscriptionNoMonth": "Kein Monat im aktuellen Ausschnitt",
949
1011
  "portfolioTitle": "Portfolio-Entwicklung",
950
- "portfolioSubtitle": "Monatlicher Verlauf von Usage, konfigurierten Limits und Subscription-Wirkung",
951
- "usage": "Usage",
1012
+ "portfolioSubtitle": "Monatlicher Verlauf von Nutzung, konfigurierten Limits und Abo-Wirkung",
1013
+ "usage": "Nutzung",
952
1014
  "limit": "Limit",
953
1015
  "limits": "Limits",
954
- "subscription": "Subscription",
955
- "subscriptions": "Subscriptions",
1016
+ "subscription": "Abo",
1017
+ "subscriptions": "Abos",
956
1018
  "breakEven": "Break-even",
957
1019
  "currentlyUsed": "Aktuell verbraucht",
958
1020
  "remainingToLimit": "Bis Limit offen",
@@ -960,25 +1022,25 @@
960
1022
  "remainingToBreakEven": "Bis Break-even offen",
961
1023
  "alreadyAboveBreakEven": "Schon darüber",
962
1024
  "usageFocusMonth": "Kosten Fokusmonat",
963
- "limitSubscription": "Limit / Subscription",
1025
+ "limitSubscription": "Limit / Abo",
964
1026
  "budgetRisk": "Budget-Risiko",
965
- "subscriptionEffect": "Subscription-Wirkung",
1027
+ "subscriptionEffect": "Abo-Wirkung",
966
1028
  "stillToLimit": "Noch {{value}} bis zum Limit",
967
1029
  "alreadyAboveLimit": "Schon {{value}} über Limit",
968
1030
  "stillToBreakEven": "Noch {{value}} bis Break-even",
969
1031
  "alreadyAboveBreakEvenText": "Schon {{value}} über Break-even",
970
- "noSubscriptionSet": "Keine Subscription gesetzt"
1032
+ "noSubscriptionSet": "Kein Abo gesetzt"
971
1033
  },
972
1034
  "modal": {
973
- "title": "Provider Limits",
974
- "description": "Definiere pro Anbieter Subscription und Monatslimit. Nur Anbieter aus dem aktuell geladenen Report sind editierbar. Ein Limit von 0 bedeutet kein Limit.",
1035
+ "title": "Anbieterlimits",
1036
+ "description": "Definiere pro Anbieter Abo und Monatslimit. Nur Anbieter aus dem aktuell geladenen Report sind editierbar. Ein Limit von 0 bedeutet kein Limit.",
975
1037
  "dataStatus": "Datenstatus",
976
1038
  "lastLoaded": "Zuletzt geladen",
977
1039
  "loadedVia": "Geladen über",
978
1040
  "cliAutoLoad": "CLI Auto-Load",
979
1041
  "noProviders": "Keine Anbieter im geladenen Report gefunden.",
980
- "hasSubscription": "Subscription vorhanden",
981
- "subscriptionPerMonth": "Subscription $/Monat",
1042
+ "hasSubscription": "Abo vorhanden",
1043
+ "subscriptionPerMonth": "Abo $/Monat",
982
1044
  "monthlyLimit": "Monatslimit $",
983
1045
  "close": "Schliessen",
984
1046
  "save": "Speichern",
@@ -1005,7 +1067,7 @@
1005
1067
  "overview": "Überblick",
1006
1068
  "insights": "Wichtigste Erkenntnisse",
1007
1069
  "filters": "Filter",
1008
- "modelsProviders": "Modelle & Provider",
1070
+ "modelsProviders": "Modelle & Anbieter",
1009
1071
  "recentPeriods": "Letzte Zeiträume",
1010
1072
  "interpretation": "Interpretation"
1011
1073
  },
@@ -1014,7 +1076,7 @@
1014
1076
  "view": "Ansicht",
1015
1077
  "generated": "Generiert",
1016
1078
  "month": "Monat",
1017
- "selectedProviders": "Ausgewählte Provider",
1079
+ "selectedProviders": "Ausgewählte Anbieter",
1018
1080
  "selectedModels": "Ausgewählte Modelle",
1019
1081
  "startDate": "Startdatum",
1020
1082
  "endDate": "Enddatum"
@@ -1026,29 +1088,37 @@
1026
1088
  },
1027
1089
  "tables": {
1028
1090
  "topModels": "Top-Modelle",
1029
- "providers": "Provider",
1091
+ "providers": "Anbieter",
1030
1092
  "columns": {
1031
1093
  "model": "Modell",
1032
- "provider": "Provider",
1094
+ "provider": "Anbieter",
1033
1095
  "cost": "Kosten",
1034
1096
  "tokens": "Tokens",
1035
- "requests": "Requests",
1097
+ "requests": "Anfragen",
1036
1098
  "period": "Zeitraum"
1037
1099
  }
1038
1100
  },
1039
1101
  "charts": {
1040
1102
  "costTrend": "Kostenverlauf",
1041
1103
  "topModels": "Top-Modelle nach Kosten",
1042
- "tokenTrend": "Token-Mix pro Zeitraum"
1104
+ "tokenTrend": "Token-Mix pro Zeitraum",
1105
+ "costTrendAlt": "Liniendiagramm der Report-Kosten pro Zeitraum.",
1106
+ "costTrendSummary": "Letzter Wert {{latest}}. Peak {{peak}} am {{date}}.",
1107
+ "topModelsAlt": "Horizontales Balkendiagramm der teuersten Modelle im Report.",
1108
+ "topModelsSummary": "{{model}} führt mit {{cost}} und {{share}} der Report-Kosten.",
1109
+ "topModelsFullNames": "Vollständige Diagramm-Labels: {{names}}.",
1110
+ "tokenTrendAlt": "Gestapeltes Balkendiagramm des Token-Mix pro Report-Zeitraum.",
1111
+ "tokenTrendSummary": "Gesamt {{total}}. Höchstes Token-Volumen {{peak}} am {{date}}.",
1112
+ "noDataSummary": "Nicht genug Daten für eine belastbare Diagramm-Zusammenfassung."
1043
1113
  },
1044
1114
  "interpretation": {
1045
- "summary": "Dieser Report umfasst {{days}} Rohdaten-Tage und {{periods}} aggregierte Zeiträume. Spitzenzeitraum: {{peak}}. Top-Modell: {{topModel}}. Führender Provider: {{topProvider}}.",
1115
+ "summary": "Dieser Report umfasst {{days}} Rohdaten-Tage und {{periods}} aggregierte Zeiträume. Spitzenzeitraum: {{peak}}. Top-Modell: {{topModel}}. Führender Anbieter: {{topProvider}}.",
1046
1116
  "footer": "Erstellt mit TTDash v{{version}} und serverseitiger Typst-Kompilierung."
1047
1117
  },
1048
1118
  "insights": {
1049
1119
  "coverageTitle": "Datenbasis",
1050
1120
  "coverageBody": "Dieser Report basiert auf einer schmalen Datenbasis mit {{days}} Rohdaten-Tagen und {{periods}} aggregierten Zeiträumen. Trend-Aussagen sollten vorsichtig gelesen werden.",
1051
- "providerTitle": "Provider-Konzentration",
1121
+ "providerTitle": "Anbieter-Konzentration",
1052
1122
  "providerBody": "{{provider}} steht für {{share}} der gesamten Report-Kosten.",
1053
1123
  "cacheTitle": "Cache-Beitrag",
1054
1124
  "cacheBody": "Cache-Reads machen im gewählten Zeitraum {{share}} der Token-Aktivität aus.",
@@ -1058,10 +1128,13 @@
1058
1128
  },
1059
1129
  "api": {
1060
1130
  "fetchUsageFailed": "Fehler beim Laden der Daten",
1131
+ "fetchSettingsFailed": "Fehler beim Laden der Einstellungen",
1061
1132
  "uploadFailed": "Upload fehlgeschlagen",
1062
1133
  "deleteFailed": "Löschen fehlgeschlagen",
1134
+ "deleteSettingsFailed": "Einstellungen konnten nicht zurückgesetzt werden",
1063
1135
  "importUsageFailed": "Datenimport fehlgeschlagen",
1064
1136
  "importSettingsFailed": "Einstellungs-Import fehlgeschlagen",
1137
+ "saveSettingsFailed": "Einstellungen konnten nicht gespeichert werden",
1065
1138
  "pdfFailed": "PDF-Generierung fehlgeschlagen"
1066
1139
  },
1067
1140
  "toasts": {
@@ -1074,6 +1147,7 @@
1074
1147
  "dataExported": "Daten-Backup exportiert",
1075
1148
  "noDataToExport": "Keine Daten zum Exportieren vorhanden",
1076
1149
  "settingsImported": "Einstellungen aus {{name}} importiert",
1150
+ "settingsReset": "Einstellungen zurückgesetzt",
1077
1151
  "settingsSaved": "Einstellungen gespeichert",
1078
1152
  "dataBackupImported": "Backup importiert: {{added}} neue Tage ergänzt, {{unchanged}} identische Tage übersprungen",
1079
1153
  "dataBackupImportedWithConflicts": "Backup importiert: {{added}} neue Tage ergänzt, {{conflicts}} Konflikttage lokal beibehalten"