Translations
Current release
English is the only active runtime language. Arabic translation files ship in lang/ar and can be turned on later by adding ar back to available_locales in config/app.php (see below). Until then, language switchers stay hidden, browser language hints and stored Arabic preferences fall back to English, and customer-facing pages stay in English.
Adding a language
Calbok ships English out of the box. Arabic files are included but deferred in the current release. Another language is a folder plus config lines, with no code change and no extra package.
- Copy
lang/entolang/{code}(for examplelang/fr). Translate every string. Keep the array keys identical; placeholders such as:nameand:countstay as they are. - Add the code to
available_localesinconfig/app.php(or theAPPlocale list your deploy already overrides). To enable the bundled Arabic files, include'ar'in that list. - Add the language's own name to
locale_native_namesin the same file, so the switcher can show it (for example'fr' => 'Français'). Arabic is already listed as'ar' => 'العربية'. - If the language is right-to-left, add the code to
rtl_locales. The public pages, the panels, the installer, and the staff invite page setdirfrom that list. Arabic is already inrtl_locales. - After enabling more than one locale, open a page with
?lang={code}or use the language switcher in the admin and tenant panels. A signed-in user's choice is saved on their account. A business can set a default for customer-facing pages under Business profile → Default language. Visitors who have not chosen a language are matched from the browserAccept-Languageheader, then that default.
Filament (the admin and tenant panels) already ships its own translations for framework chrome such as "Save" and "Delete". You do not re-translate those. Strings we wrote (navigation, form labels, the installer, invitations, validation) come from lang/{code}.
Customer-facing booking pages and emails use the customer's language when that locale is in available_locales. Service, provider, and location names have an optional translation on each record (the Translations section). When a translation is missing, the default name is shown.