Creating a new language
Accessing the creation form
- From the dashboard → "Nouvelle langue"
- Or from the language list → "+ Nouvelle langue" button
- Route:
/admin/languages/new
Two modes of use
The form offers two modes:
| Mode | When to use it |
|---|---|
| Create a new language | New language that has never existed in the database |
| Add content to an existing language | Import additional cards into an already created language |
Mode 1 — Create a new language
Section 1: Basic information
Language name (required)
- Free text field
- Must be unique in the system
- Minimum 2 characters
- Letters, spaces, hyphens and accented characters allowed
- Examples: "Pular", "Malinké", "Wolof"
Language code (required)
- Text field, exactly 3 lowercase letters
- Must be unique (checked server-side)
- Used in URLs (
/pul,/wol…) - Recommendation: use ISO 639-3 codes
- Examples: "pul" (Pular), "wol" (Wolof), "bam" (Bambara)
Section 2: Visual identity
Primary colour (recommended)
- Colour picker with preview
- Hexadecimal format (e.g.
#D97706) - Used for the language page background, buttons and dashboard charts
- Choose a vivid and distinctive colour (avoid white and very light colours)
Icon / Silhouette (optional)
- Image file upload
- Accepted formats: PNG, JPG, SVG
- Recommended size: 512×512 pixels minimum
- Maximum size: 2 MB
- Uploaded to MinIO and referenced by URL in the database
- Displayed on the language card on the homepage
💡 Tip: Use a cultural silhouette or a symbol linked to the language community. Transparent background (PNG) is recommended.
Section 3: Speaker configuration (optional)
If you want to create the native speaker account at the same time:
Speaker name
- First and last name of the native speaker
- Displayed in their recording interface
- Example: "Amadou Diallo"
Speaker access code
- Option A — Automatic generation: click "Générer un code"
- Format:
RACINES-XXXXX-2025with 5 random characters - Uniqueness guaranteed
- Option B — Manual entry: type a code of your choice
- Must follow the format
RACINES-XXXXX-2025 - Automatic uniqueness check
⚠️ Note this code after creation — this is the only time it is clearly displayed. You can find (and change) it later in the language list.
Section 4: Content import (optional)
You can import Excel content directly during creation. See the Excel import guide for template details.
- Words file: a
.xlsxfile with word cards - Phrases file: a
.xlsxfile with phrase cards
The import can also be done after creation via the "Add content to an existing language" mode.
Mode 2 — Add content to an existing language
This mode lets you add cards to an already created language without recreating it.
- Select "Ajouter du contenu à une langue existante"
- A search field appears (minimum 2 characters)
- Select the target language from the results
- Upload Excel files (words and/or phrases)
- Click "Importer le contenu"
Order of operations during creation
When you click "Créer la langue", the system performs the following steps in order:
- Field validation (name uniqueness, code, format)
- Icon upload to MinIO (if provided)
- Language insertion into the
languagestable - Speaker account creation in the
speakerstable (if configured) - Parsing of the words Excel file (if provided)
- Batch creation of word cards and items in
cardsanditems - Parsing of the phrases Excel file (if provided)
- Phrase card and item creation
- User code generation (if not already existing)
A progress bar with numbered steps shows the progress.
After creation — what to note
After a successful creation, you are redirected to the language list. Before leaving, note:
| Information | Where to find it later |
|---|---|
| User code | Language list → "Access code" column |
| Speaker code | Language list → "Speaker code" column |
These codes are needed for: - Printing the code in game boxes (user code) - Giving the native speaker their access (speaker code)
Possible error messages
| Message | Cause | Solution |
|---|---|---|
| "Ce nom de langue existe déjà" | Duplicate name | Choose a unique name |
| "Ce code de langue existe déjà" | Duplicate code | Choose a different code |
| "Format de fichier invalide" | Non .xlsx file |
Save in Excel 2007+ format |
| "Colonne manquante : [name]" | Incorrect column header | Check the template import guide |
| "Erreur d'upload de l'icône" | File too large or invalid format | Check the size (< 2MB) and format |
| "Erreur serveur" | Technical issue | Retry or contact the technical team |