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

2026/9/7 – 2026/9/13

周一
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

Sep 6 – 12, 2026

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.