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
周一
7
周二
8
周三
9
周四
10
周五
11
周六
12
周日
13
全天
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
6
Mon
7
Tue
8
Wed
9
Thu
10
Fri
11
Sat
12
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.