Files
chart-app/src/main/resources/vaadin-i18n/translations.properties
T
Pit Friedrich cfa644c0e1
CI / build-and-test (pull_request) Successful in 2m26s
fix: export widget data as CSV from the action menu (#28)
The ApexCharts toolbar stays hidden (DialectTheme), so the dashboard had no
export at all. Adds an "Als CSV exportieren" entry to the per-widget action
menu, served server-side from the same data the widget renders.

- CsvExport: the export table plus its CSV dialect (';' separator, CRLF,
  UTF-8 BOM, locale-formatted numbers) and file-name slugging.
- GridStackItem.setActionDownload: turns a menu entry's caption into an
  anchor over a DownloadHandler, so an entry can hand out a file.
- WidgetRegistry: keeps each widget's query, not only its result, so the
  Export hook re-runs it — an export always matches the current filter.
- DashboardView: builds the download on click; file name is widget title +
  period (revenue-trend-half-year.csv).

Chart image export is left as the follow-up the issue calls optional.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0124BiJikbhbiEsNfJxdWM69
2026-07-28 21:45:40 +02:00

149 lines
3.9 KiB
Properties
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# German (source of truth / DefaultI18NProvider fallback)
app.title=Chart App
action.themeToggle=Farbschema wechseln
action.language=Sprache wechseln
lang.de=Deutsch
lang.en=English
lang.es=Español
nav.dashboard=Dashboard
nav.form=Formular
nav.table=Tabelle
page.dashboard=Dashboard
page.form=Formular
page.table=Tabelle
card.revenueTrend=Umsatz-Entwicklung
card.revenueByMonth=Umsatz nach Monat
card.revenueByRegion=Umsatz nach Region
card.registration=Registrierung
card.employees=Mitarbeiter
card.gridstackHint=Bedienung
gridstack.hint=Karten am Griff oben rechts verschieben, an der unteren rechten Ecke die Größe ändern, mit dem X oben rechts schließen. Weitere Aktionen aktualisieren, maximieren, duplizieren, als CSV exportieren liegen im Menü daneben. Das Layout wird im Browser gespeichert und beim nächsten Besuch wiederhergestellt.
gridstack.addWidget=Widget hinzufügen
gridstack.reset=Layout zurücksetzen
gridstack.status=Layout geändert {0} Widgets
gridstack.statusInitial=Layout unverändert
gridstack.pickerTitle=Widget auswählen
gridstack.dragHandle=Verschieben
gridstack.close=Schließen
gridstack.actions=Aktionen
gridstack.refresh=Aktualisieren
gridstack.maximize=Maximieren
gridstack.restore=Wiederherstellen
gridstack.duplicate=Duplizieren
gridstack.remove=Entfernen
gridstack.export=Als CSV exportieren
# Spaltenüberschrift der CSV-Exporte; die Wertspalte trägt den Serien-Namen.
export.category=Kategorie
filter.period=Zeitraum
filter.period.month=Monat
filter.period.quarter=Quartal
filter.period.halfYear=Halbjahr
filter.period.year=Jahr
filter.region=Region
filter.allRegions=Alle Regionen
# Die KPI-Werte sind MessageFormat-Muster: die Zahl kommt aus dem Datenservice
# (sie hängt vom Filter ab), Einheit und Zahlenformat aus dem Bundle.
kpi.revenueTotal=Gesamtumsatz
kpi.revenueTotal.value={0,number,#,##0.00} Mio. €
kpi.openOrders=Offene Vorgänge
kpi.openOrders.value={0,number,#,##0}
kpi.newCustomers=Neue Kunden
kpi.newCustomers.value={0,number,#,##0}
kpi.averageOrderValue=Ø Bestellwert
kpi.averageOrderValue.value={0,number,#,##0} €
chart.revenueSeries=Umsatz 2026
chart.pointClick=Serie {0}, Punkt {1}
chart.sliceClick=Slice {0}
month.jan=Jan
month.feb=Feb
month.mar=Mär
month.apr=Apr
month.may=Mai
month.jun=Jun
month.jul=Jul
month.aug=Aug
month.sep=Sep
month.oct=Okt
month.nov=Nov
month.dec=Dez
week.1=Woche 1
week.2=Woche 2
week.3=Woche 3
week.4=Woche 4
region.north=Nord
region.south=Süd
region.east=Ost
region.west=West
form.firstName=Vorname
form.lastName=Nachname
form.email=E-Mail
form.password=Passwort
form.age=Alter
form.salary=Gehalt (€)
form.birthdate=Geburtsdatum
form.time=Bevorzugte Uhrzeit
form.country=Land
form.department=Abteilung
form.interests=Interessen
form.salutation=Anrede
form.newsletter=Newsletter abonnieren
form.remark=Bemerkung
form.save=Speichern
form.reset=Zurücksetzen
form.today=Heute
form.cancel=Abbrechen
form.time.badInput=Ungültige Uhrzeit
form.time.required=Uhrzeit ist erforderlich
form.time.min=Uhrzeit liegt vor der frühesten erlaubten Zeit
form.time.max=Uhrzeit liegt nach der spätesten erlaubten Zeit
country.de=Deutschland
country.at=Österreich
country.ch=Schweiz
country.fr=Frankreich
country.nl=Niederlande
dept.sales=Vertrieb
dept.marketing=Marketing
dept.dev=Entwicklung
dept.support=Support
dept.management=Geschäftsführung
interest.newsletter=Newsletter-Themen
interest.webinars=Webinare
interest.updates=Produkt-Updates
interest.events=Events
salutation.mrs=Frau
salutation.mr=Herr
salutation.diverse=Divers
salutation.none=Keine Angabe
valid.firstNameRequired=Vorname wird benötigt
valid.lastNameRequired=Nachname wird benötigt
valid.emailRequired=E-Mail wird benötigt
valid.emailInvalid=Ungültige E-Mail-Adresse
valid.ageRange=Alter muss zwischen 0 und 120 liegen
notify.saved=Gespeichert: {0} {1}
notify.checkInput=Bitte Eingaben prüfen
table.search=Suchen…
col.name=Name
col.department=Abteilung
col.city=Stadt
col.salary=Gehalt (€)