Run your workspace
Internationalization
Glozr ships with internationalization support for more than 130 locales out of the box. English, Spanish, French, and Turkish are fully translated; the rest have their UI chrome translated with graceful English fallback for any remaining strings.
Overview
Locale handling spans the admin app, the agent runtime, and the visitor widget. The same translation dictionaries power all three, so a new language added in one place becomes available everywhere.
Adding a language
Adding a locale takes one file. Drop a JSON dictionary into lang/ (for example lang/sv.json for Swedish) and the runtime auto-discovers it — no code changes, no service restart, no rebuild. The language picker lists the new locale on the next page load.
Right-to-left support
RTL locales — Arabic, Hebrew, Persian, Urdu, and others — are first-class. The system handles them through:
dir="rtl"on root elements where needed.- Tailwind logical properties (
ms-*,pe-*, etc.) that flip automatically. - Radix UI primitives that adjust alignment and animation direction.
- Hooks like
useIsRtl()anduseDirection()for explicit direction logic in custom components. - A
<DirArrow>component for icons that need to mirror.
Locale resolution order
The active locale is decided in this priority order:
- Query string:
?locale=<code>. - Authenticated user's stored preference (
users.locale). - Persistent cookie (
pb_locale). - Browser
Accept-Languageheader. - Application default.
Geo-location banner
When Cloudflare geolocation headers tag a visitor with a country whose locale is available, a non-intrusive banner suggests switching. The visitor can accept, dismiss, or ignore — Glozr never switches locale automatically.
Translation coverage
The dictionary is around 2,300 keys. Four locales are fully covered today; the rest translate the essential UI chrome (buttons, forms, navigation) and fall back to English for the long tail. A Node.js coverage command reports the current percentage per locale so you know where the gaps are.
Where translations live
lang/{locale}.json— the primary application dictionary.lang/{locale}/{auth,validation,passwords,pagination}.php— Laravel framework messages.lang/_glossary.md— terminology standards so translations stay consistent across the product.
Adding new strings
Wrap any user-facing text with the appropriate translation helper:
__('Text')in Blade templates.t('Text')in React and the widget runtime.
Missing translations fall back to English without breaking the layout, so you can ship new copy before every locale is filled in.