df5d1a9b9b
CI / build-and-test (pull_request) Successful in 2m46s
The reporting period was baked into the data service, so nothing could change what the dashboard shows without editing code. - DashboardFilter (period + optional region) parameterises every ChartDataService query; the no-arg overloads are the default filter. - DashboardContext is the bus between the new DashboardFilterBar and the widgets: charts subscribe in WidgetRegistry, KPI tiles in DashboardView. - Updates go through updateData, so widgets patch in place instead of being rebuilt; SparklineChart gained the same path. - KpiData carries the number, the bundle the unit and number pattern, so a KPI value can follow the filter and stay locale-formatted. - Filter state is deliberately not persisted, unlike the grid layout. Closes #24 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0124BiJikbhbiEsNfJxdWM69
139 lines
3.3 KiB
Properties
139 lines
3.3 KiB
Properties
# English
|
||
|
||
app.title=Chart App
|
||
action.themeToggle=Switch color scheme
|
||
action.language=Switch language
|
||
lang.de=Deutsch
|
||
lang.en=English
|
||
lang.es=Español
|
||
|
||
nav.dashboard=Dashboard
|
||
nav.form=Form
|
||
nav.table=Table
|
||
|
||
page.dashboard=Dashboard
|
||
page.form=Form
|
||
page.table=Table
|
||
|
||
card.revenueTrend=Revenue Trend
|
||
card.revenueByMonth=Revenue by Month
|
||
card.revenueByRegion=Revenue by Region
|
||
card.registration=Registration
|
||
card.employees=Employees
|
||
card.gridstackHint=How it works
|
||
|
||
gridstack.hint=Move cards with the grip in their top right corner, resize them from the bottom right corner, close them with the X in the top right corner. The layout is stored in your browser and restored on your next visit.
|
||
gridstack.addWidget=Add widget
|
||
gridstack.reset=Reset layout
|
||
gridstack.status=Layout changed – {0} widgets
|
||
gridstack.statusInitial=Layout unchanged
|
||
gridstack.pickerTitle=Choose a widget
|
||
gridstack.dragHandle=Move
|
||
gridstack.close=Close
|
||
|
||
filter.period=Period
|
||
filter.period.month=Month
|
||
filter.period.quarter=Quarter
|
||
filter.period.halfYear=Half year
|
||
filter.period.year=Year
|
||
filter.region=Region
|
||
filter.allRegions=All regions
|
||
|
||
# The KPI values are MessageFormat patterns: the number comes from the data
|
||
# service (it depends on the filter), unit and number format from the bundle.
|
||
kpi.revenueTotal=Total revenue
|
||
kpi.revenueTotal.value=€{0,number,#,##0.00}M
|
||
kpi.openOrders=Open orders
|
||
kpi.openOrders.value={0,number,#,##0}
|
||
kpi.newCustomers=New customers
|
||
kpi.newCustomers.value={0,number,#,##0}
|
||
kpi.averageOrderValue=Avg. order value
|
||
kpi.averageOrderValue.value=€{0,number,#,##0}
|
||
|
||
chart.revenueSeries=Revenue 2026
|
||
chart.pointClick=Series {0}, point {1}
|
||
chart.sliceClick=Slice {0}
|
||
|
||
month.jan=Jan
|
||
month.feb=Feb
|
||
month.mar=Mar
|
||
month.apr=Apr
|
||
month.may=May
|
||
month.jun=Jun
|
||
month.jul=Jul
|
||
month.aug=Aug
|
||
month.sep=Sep
|
||
month.oct=Oct
|
||
month.nov=Nov
|
||
month.dec=Dec
|
||
|
||
week.1=Week 1
|
||
week.2=Week 2
|
||
week.3=Week 3
|
||
week.4=Week 4
|
||
|
||
region.north=North
|
||
region.south=South
|
||
region.east=East
|
||
region.west=West
|
||
|
||
form.firstName=First name
|
||
form.lastName=Last name
|
||
form.email=Email
|
||
form.password=Password
|
||
form.age=Age
|
||
form.salary=Salary (€)
|
||
form.birthdate=Date of birth
|
||
form.time=Preferred time
|
||
form.country=Country
|
||
form.department=Department
|
||
form.interests=Interests
|
||
form.salutation=Salutation
|
||
form.newsletter=Subscribe to newsletter
|
||
form.remark=Remark
|
||
form.save=Save
|
||
form.reset=Reset
|
||
form.today=Today
|
||
form.cancel=Cancel
|
||
form.time.badInput=Invalid time
|
||
form.time.required=Time is required
|
||
form.time.min=Time is before the earliest allowed time
|
||
form.time.max=Time is after the latest allowed time
|
||
|
||
country.de=Germany
|
||
country.at=Austria
|
||
country.ch=Switzerland
|
||
country.fr=France
|
||
country.nl=Netherlands
|
||
|
||
dept.sales=Sales
|
||
dept.marketing=Marketing
|
||
dept.dev=Development
|
||
dept.support=Support
|
||
dept.management=Management
|
||
|
||
interest.newsletter=Newsletter topics
|
||
interest.webinars=Webinars
|
||
interest.updates=Product updates
|
||
interest.events=Events
|
||
|
||
salutation.mrs=Ms.
|
||
salutation.mr=Mr.
|
||
salutation.diverse=Diverse
|
||
salutation.none=Not specified
|
||
|
||
valid.firstNameRequired=First name is required
|
||
valid.lastNameRequired=Last name is required
|
||
valid.emailRequired=Email is required
|
||
valid.emailInvalid=Invalid email address
|
||
valid.ageRange=Age must be between 0 and 120
|
||
|
||
notify.saved=Saved: {0} {1}
|
||
notify.checkInput=Please check your entries
|
||
|
||
table.search=Search…
|
||
col.name=Name
|
||
col.department=Department
|
||
col.city=City
|
||
col.salary=Salary (€)
|