Language Management
Updated Oct 18, 2026
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 `` 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_localessetting 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.