Managing Languages
Add languages, set the default, control visibility, and understand how multilingual content works in Contensio.
Contensio is multilingual by design — translations are baked into the schema, not bolted on as a plugin. Every content item, taxonomy term, and field value can have a version per language.
The default language
One language is always designated as the default. It is the primary authoring language and the one served to frontend visitors. Content items are always stored against a language, and the default language is used when no other matches.
The default language is set during installation. You can change it at any time — see Changing the default language.
Language statuses
Each language has one of three statuses:
| Status | Editor visibility | Frontend visibility |
|---|---|---|
| Active | Shown in the language tab switcher in the editor | Served to frontend visitors |
| Inactive | Shown in the editor — editors can add translations | Not served to frontend visitors |
| Disabled | Hidden from the editor entirely | Not served |
Use Inactive when you're preparing translations before a language goes live. The content is editable in the admin but visitors don't see it yet.
Adding a language
- Go to Configuration → Languages and click Add Language.
- Fill in:
- Code — the BCP 47 language tag, e.g.
en,ro,de,fr,pt-BR. Maximum 5 characters. - Name — the human-readable name shown in the admin, e.g.
English,Romanian. - Direction —
LTR(left-to-right) orRTL(right-to-left, for Arabic, Hebrew, etc.). - Status —
Active,Inactive, orDisabled.
- Code — the BCP 47 language tag, e.g.
- Save. The language immediately appears in the editor's tab switcher.
Seven languages are pre-seeded during installation: en, ro, de, es, fr, it, pt. If you need one of these you can add it with the exact code to match the seed.
Changing the default language
On the Languages list, click Set as default next to any active language. The previous default language stays active — it just loses the default flag. The default language cannot be set to Inactive or Disabled while it holds the default flag.
Translating content
When more than one language exists, every content edit screen (pages, posts, custom types) shows language tabs at the top of the title/body area. Switch tabs to enter the translation for each language.
Each language has its own:
- Title and slug
- Body (block content)
- Excerpt
- SEO fields (meta title, meta description, OG image)
- Custom field values (for fields marked as Translatable)
Non-translatable custom field values are shared across all languages.
Editing and deleting languages
Click any language row on the Languages list to edit its name, direction, or status. The language code cannot be changed after creation.
Deleting a language is only possible when:
- It is not the default language.
- It has no content translations stored against it.
If the language has translations, reassign or delete the content first, then delete the language.
Frontend language routing
The built-in frontend (FrontendController) serves content in the default language only. If you need per-language URL routing (e.g. /en/about and /ro/despre) you'll need to implement locale-aware routing in your application or use a plugin.
The default theme is locale-aware for its own UI strings via Laravel's translation system — it will pick up resources/lang/{code}/ translations if present in your app.