Skip to content

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:

FlagLanguageLocale codeDirection
🇬🇧EnglishenLTR
🇮🇳HindihiLTR
🇩🇪GermandeLTR
🇫🇷FrenchfrLTR
🇳🇱DutchnlLTR
🇩🇰DanishdaLTR
🇳🇴NorwegiannoLTR
🇸🇪SwedishsvLTR
🇯🇵JapanesejaLTR

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:

ColumnContent
KeyDot-notation key, e.g. quiz.start_exam
EnglishSource string (read-only reference)
TranslationEditable 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.

  1. Go to Admin → Translation Dashboard and click + Add Language
  2. Type to search (e.g. Arabic, Spanish, Chinese) in the searchable dropdown
  3. Select your locale — flag emoji, native name, and RTL toggle are auto-filled
  4. Click Add Language. Stub files are created in lang/{code}/ using English strings as placeholders
  5. 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:

SettingWhat it controls
Show switcher — Admin panelThe language button in the Filament Admin topbar
Show switcher — Creator panelThe language button in the Filament Creator topbar
Show switcher — Customer portalThe 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.

Quizora — AI-Powered Quiz Platform