Contensio logo
All features

Multilingual content

Translations are first-class — slugs, meta, body per language — not a plugin bolted on after the fact.

Replaces WPML, Polylang

In WordPress, "multilingual" means picking a plugin — WPML (paid), Polylang (freemium), TranslatePress (freemium) — and hoping it plays nicely with your theme, your other plugins, and every future update. Translations live in extra tables bolted onto the schema, URL structures depend on the plugin you chose, and switching plugins later is a migration project.

Contensio takes the opposite approach. Translations are first-class from day one. Every piece of content — pages, posts, custom types, menus, taxonomies, settings — has a translations relationship built into the schema. You can't not be multilingual; the first language is just the first row in the translations table.

What's localized

Titles, slugs, body

Each language has its own title, URL slug, and full body content. Not a translated-on-top overlay — the real thing.

SEO meta per language

Meta title, meta description, OG image — independently editable per language.

Menus & items

Menu labels translate per language. Link the same target, or different targets per locale.

Custom fields & taxonomies

Field values and term names are translatable. Mark fields as "not translatable" to share the value across languages.

URL strategy

The default language sits at the root — no locale prefix, no ugly /en/ segment. Other languages get a clean /{code}/ prefix, with fully translated path segments. An English /features/block-editor becomes /ro/functionalitati/editor-blocuri — not /ro/features/block-editor.

// config/app.php
'locale' => 'en',
'supported_locales' => ['en', 'ro', 'fr', 'de'],

Compared to WordPress

WordPress

  • Third-party plugin required
  • WPML Pro is paid-only
  • Translations stored in plugin-specific tables
  • URL structure depends on plugin choice
  • Plugin updates can break translations

Contensio

  • Built into the core
  • Free forever (AGPL)
  • First-class Eloquent relationships
  • Translated URL segments per locale
  • Schema guarantees; no plugin drift

FAQ

Yes. Languages are stored in a languages table — add one from the admin and it's immediately available as a translation target. Existing content stays in the languages it already has.

Perfect — one language just means one row in the translations table. There's zero overhead and you don't need to think about multilingual at all until you do.

Each language record has a direction flag (ltr/rtl). Themes read it to apply the correct layout direction automatically.