Internationalization
Pass any BCP-47 locale tag. Date and time formats come from the browser’s Intl API — no locale bundles to ship. UI strings are built in for English and Chinese, and trivially extensible for anything else.
Locale, week start and clock
周一
28
周二
29
周三
30
周四
1
周五
2
周六
3
周日
4
全天
1时
2时
3时
4时
5时
6时
7时
8时
9时
10时
11时
12时
13时
14时
15时
16时
17时
18时
19时
20时
21时
22时
23时
0时
What the locale controls
- Month/day/weekday names, title formats and time labels (via Intl.DateTimeFormat).
- The default first day of week (via Intl.Locale weekInfo, with a safe fallback) — override with firstDayOfWeek.
- 12/24-hour clock — override with hour12.
- Built-in UI strings for 10 languages: en, zh, de, fr, es, pt, ja, ko, ru, it — anything else falls back to English (override via messages).
Custom UI strings
import type { CalendarMessages } from 'svelte5plus-calendar';
// Add a locale (or override single strings) via the messages prop:
const de: Partial<CalendarMessages> = {
today: 'Heute',
day: 'Tag',
week: 'Woche',
month: 'Monat',
year: 'Jahr',
agenda: 'Agenda',
allDay: 'Ganztägig',
more: (n) => `+${n} weitere`,
noEvents: 'Keine Termine'
};Then pass them to the component: <Calendar locale="de" messages={de} />
Display time zone
Pass an IANA zone via the timeZone prop to render the whole calendar in that zone. Event Dates remain real instants — the grid, popovers, quick-create and drag edits are all displayed and interpreted in the target zone, and edited values are converted back automatically.
Same events, different zones
Sun
27
Mon
28
Tue
29
Wed
30
Thu
1
Fri
2
Sat
3
All-day
1 AM
2 AM
3 AM
4 AM
5 AM
6 AM
7 AM
8 AM
9 AM
10 AM
11 AM
12 PM
1 PM
2 PM
3 PM
4 PM
5 PM
6 PM
7 PM
8 PM
9 PM
10 PM
11 PM
12 AM
Recurrence caveat —
recurring wall-clock times follow the display zone (a 9:30 standup stays at 9:30 in the zone you are viewing). Anchor-zone recurrence is on the roadmap.