Skip to content

Language & localization

calit ships with English, German, and Hebrew built in. No configuration or environment variables are required to enable any of them — all are always available.

Hebrew (עברית) is a right-to-left language: when it is active, calit automatically mirrors the entire layout (<html dir="rtl">) for both web pages and emails. No setting controls this — it follows the chosen language.

If a phrase is not yet translated, calit falls back to English automatically.

When someone opens your public booking page (/<username>/<slug>), calit detects their preferred language from the browser’s Accept-Language header and displays the page accordingly.

A language switcher in the page footer lets visitors choose between English, Deutsch, and עברית. Selecting a language:

  • Reloads the page in the chosen language immediately.
  • Saves the choice in a calit_lang cookie so it persists across page loads and future visits.

Append ?lang=en, ?lang=de, or ?lang=he to any booking URL to force that language for whoever opens the link — useful for sharing a page in a specific language regardless of the recipient’s browser settings:

https://your.calit.example/alice/intro?lang=he

This override wins over the owner setting, the calit_lang cookie, and the browser’s Accept-Language. It is ephemeral: it sets no cookie and does not change the visitor’s saved preference. An unknown or unsupported code is ignored and normal detection applies.

The booking calendar starts the week on the visitor’s regional convention — Sunday in the US and Israel, Monday in Germany and most of the world. This follows the browser’s locale (region included), not the page’s display language, so it is correct even when the two differ.

Times on the booking page follow the visitor’s own device, not the page’s display language. A visitor whose device is set to a 24-hour region sees 14:30; one on a 12-hour region sees 2:30 PM. Both see the same instant — only the label differs, and the booking that gets made is identical either way.

Only the clock format follows the device. The words around it — weekday, month, and connectors — stay in the page’s display language, so a Hebrew page shows a Hebrew date with the visitor’s own clock convention rather than switching to English.

The page owner’s own time-format setting (below) is never applied here. A public booking page carries no one person’s preference, so what a visitor sees depends only on their device.

The language a visitor uses when booking is remembered for that booking. Any follow-up emails they receive — confirmation, reminder, cancellation, reschedule, and declined notices — are sent in that same language.

Account owners control their own language independently of any visitor’s browser setting. The language choice applies to:

  • The owner’s admin UI (/me and all sub-pages).
  • Notification emails the owner receives (new booking alerts, etc.).

Go to Settings (accessible from the /me navigation) and find the Language field. Choose English, Deutsch, or עברית and save. The change takes effect immediately.

Settings → Time format controls the clock used on your own pages and in your own emails. It has three values:

ValueOn your /me pagesIn emails you receive
Automatic (default)Follows the device you are viewing onKeeps the format your language already uses (24-hour in all three shipped languages)
24-hour14:3014:30
12-hour2:30 PM2:30 PM

Automatic means something slightly different on each side, because an email has no device to read: your pages follow whatever machine you open them on, while your emails keep the format built into your language. Upgrading an existing installation changes nothing — every account starts on Automatic, which reproduces the previous behaviour exactly.

This setting is yours alone. It never changes what a visitor sees on your public booking page, and it never changes the emails your invitees or their guests receive — those always follow the invitee’s own device and language.

Community contributions are welcome — adding a new language requires dropping two translation files (msg_XX.properties and adm_XX.properties) into src/main/resources/messages/; the language is then auto-discovered with no further configuration. Right-to-left languages need no extra work — the dir attribute is derived from the active language. See the project repository for details.