Appearance
Language Management
Quizora has a fully integrated i18n system. All 9 built-in languages ship pre-translated. From the Translation Dashboard you can add new languages, edit any translation token in the browser, control the language switcher per portal, and support RTL scripts like Arabic — all without touching a single file.
Built-in Languages
The following languages are installed and fully translated out of the box:
| Flag | Language | Locale code | Direction |
|---|---|---|---|
| 🇬🇧 | English | en | LTR |
| 🇮🇳 | Hindi | hi | LTR |
| 🇩🇪 | German | de | LTR |
| 🇫🇷 | French | fr | LTR |
| 🇳🇱 | Dutch | nl | LTR |
| 🇩🇰 | Danish | da | LTR |
| 🇳🇴 | Norwegian | no | LTR |
| 🇸🇪 | Swedish | sv | LTR |
| 🇯🇵 | Japanese | ja | LTR |
Translation Dashboard
Navigate to Admin → Translation Dashboard (/admin/translation-dashboard).
The dashboard shows:
- Stats bar — total installed locales, average coverage across all files, total English source keys
- Language tabs — click a tab to switch to that locale's translation view; each tab has an enable/disable toggle and a delete button
- File list — each PHP translation file (
quiz.php,common.php,creator.php,admin.php) with a coverage percentage badge - Inline editor — click the edit icon next to any file to open the key-by-key translation editor
Inline Translation Editor
Click the pencil icon (✏️) next to any translation file to open the inline editor. You can update any translation key without leaving the browser.
The editor shows three columns:
| Column | Content |
|---|---|
| Key | Dot-notation key, e.g. quiz.start_exam |
| English | Source string (read-only reference) |
| Translation | Editable field for the current locale — highlighted when changed |
Click Save Translations to write changes directly to the PHP file on disk (e.g. lang/de/quiz.php). No deploy or server restart needed.
Adding a New Language
You can add any of 90+ world languages from a searchable picker. Quizora auto-fills the flag emoji, native name, and RTL direction, then creates stub translation files from the English template.
- Go to Admin → Translation Dashboard and click + Add Language
- Type to search (e.g.
Arabic,Spanish,Chinese) in the searchable dropdown - Select your locale — flag emoji, native name, and RTL toggle are auto-filled
- Click Add Language. Stub files are created in
lang/{code}/using English strings as placeholders - The new locale is immediately active in the language switcher and editable in the dashboard
Translation coverage
After adding a language, files show 0% coverage — stubs are English placeholders. Use the inline editor to translate key by key, or edit the files in lang/{code}/ directly.
Enabling & Disabling Languages
The enable/disable toggle on each language tab controls whether that locale appears in the language switcher. Disabled locales are still installed and editable — they just won't show in the dropdown for users.
This is useful if you've added a language but haven't finished translating it yet.
Language Switcher — Per-Panel Control
The language switcher can be independently shown or hidden per portal. Go to Admin → Settings → Languages:
| Setting | What it controls |
|---|---|
| Show switcher — Admin panel | The language button in the Filament Admin topbar |
| Show switcher — Creator panel | The language button in the Filament Creator topbar |
| Show switcher — Customer portal | The language button in the customer-facing navbar |
Common setup
If your platform targets a single-language market, disable the switcher on the Customer portal but keep it on Admin / Creator so operators can switch for testing.
RTL Language Support
When a user switches to an RTL language (Arabic, Hebrew, Urdu, Farsi, etc.), Quizora automatically sets dir="rtl" on the <html> element. This triggers Tailwind's built-in rtl: utility variants across the entire customer portal.
- The Customer portal uses Tailwind
rtl:variants for padding, margins, flexbox direction, and text alignment - The Admin and Creator panels use Filament's built-in RTL support
- Any locale added via the locale picker that has RTL flagged will automatically set
dir="rtl"— no extra configuration needed
Note
If you add a custom RTL locale manually (by editing files), also tick the RTL toggle in the Add Language modal, or add its code to the rtl_locales setting in the database.
Deleting / Hiding a Language
- Custom locales you added — click the Delete (✕) button on the locale's tab. This removes
lang/{code}/and the locale from the database. Cannot be undone. - Built-in locales — toggle the enable/disable switch to hide them from the switcher. The files remain on disk. You can re-enable at any time.
Translation File Structure
Each locale lives in lang/{code}/ with four PHP files:
lang/
en/
common.php — shared UI: nav, buttons, flash messages
quiz.php — quiz listing, detail, exam panel, results
creator.php — creator dashboard, AI generator, earnings
admin.php — admin panel labels, settings, reports
de/
common.php
quiz.php
creator.php
admin.php
(one folder per locale …)Each file returns a PHP array of 'key' => 'Translated string' pairs. Keys are nested (e.g. quiz.start_exam maps to $array['quiz']['start_exam']). The inline editor handles nesting transparently — you edit the flat dot-key, it writes the correct nested PHP array.