Docs · Use Caelo
Multilingual sites
Caelo handles languages through the international-site plugin. You add a language and translate pages by chatting. Steps that change URLs across the site wait for your click.
How it works
Languages come from the international-site plugin, which ships with Caelo. There is no separate language system in the core. An Owner activates the plugin under Settings → Plugins and approves the access it asks for (see Plugin permissions). After that, everything happens in the chat: the AI uses the plugin's tools, and you approve the few steps that change URLs site-wide.
Activating it on an existing single-language site changes no URLs. Your current pages become the default language.
Adding a language
Say "add German to the site". The AI prepares the list of languages and pauses on an approval card. Two decisions come with that click:
- URL shape. A subdirectory (
/de/preise) is the safe default. A subdomain (de.example.com) or a separate domain (example.de) work when you own those hosts. - Default language. Exactly one language is the default. Its pages keep their URLs without a prefix, unless you want every language prefixed (below).
The approver needs the permission to change settings. If the change moves existing URLs, the AI follows up with a separate URL migration proposal. It previews every moved page and the 301 redirects that will be created. Nothing moves until that second approval.
Prefixing the default language too
Some sites want /de/preise next to /en/pricing instead of a bare default. Say "put the German pages under /de/ as well". With this on, the default language's home page stays at /, without a redirect, and /de/ sends a 301 to it. All other default-language pages move under the prefix, through the same URL migration with redirects. It needs the subdirectory URL shape.
Translating pages
Say "translate the pricing page into German". The AI:
- creates the German page as a draft, with a German address (
/de/preise) or the same one (/de/pricing). Languages are linked explicitly, never by matching slugs. A page under another page goes under that page's German version. If the parent has no German version yet, it is translated first; - translates the whole page in one pass: title, meta description and every content field together, so terms and tone stay consistent;
- leaves it as a draft for you to review.
A live translation that already has a meta description keeps it when the page is translated again. It is flagged for SEO review instead of being overwritten.
Corrections stick
Tell the chat "we say Kasse, not Checkout" and the term goes into the site's glossary. "Use informal du on the German site" becomes the German style guide. Later translations apply both.
Keeping translations current
When a source page changes and that change is staged, its translations are marked as needing an update. Ask "update the German translations" and the AI re-translates them in one go. Wording that was polished by hand stays where the source did not change.
Translations run on the chat's model by default. Under Settings → AI provider & models you can pick a smaller translation model to make them cheaper.
Menus, header and footer
Navigation, header, footer and other shared content exist once per language. Say "translate the site chrome into German" and the AI translates all of it in one pass.
- Links follow the language. A menu link to About on a German page goes to the German About page. If there is no published German version, the preview flags the link and publishing stops until it is fixed.
- Nothing falls back silently. A German page never quietly shows the English footer. Missing chrome is flagged and blocks publishing.
- A language can have its own chrome. Say "the German menu should not have the Careers link" and that language's version is detached and kept separately. Switching it back to the translated version overwrites it, so that step needs an approval.
What visitors and search engines see
- Published translations only. A page whose German version is still a draft returns a clean 404 on the German URL. There is no automatic fallback to another language. That is deliberate and correct for search engines.
- Document language. Every page carries its language in
<html lang>. The site language must be set before publishing. The AI sets it from the language you write in, or you set it under Settings → SEO & site identity. - hreflang and sitemap. Published language versions link each other with
hreflang, includingx-defaultfor the default language, and the sitemap carries the same alternates. No configuration needed. - Language switcher. Ask the AI to add one. It builds a module in your site's design from the plugin's list of published language versions of the current page. Placed in the layout, it appears on every page. It renders as plain links and shows only on pages with at least two published languages.
Working from an external agent
Over MCP, an external agent can drive the same flow. When Caelo's own AI is not available to it, the plugin hands the agent the texts to translate, and the agent sends all translations back in one call.
Removing it
Uninstalling the plugin asks for your approval first. Disabling a plugin keeps its data; uninstalling removes it. Pages store their full address, so any URL change that follows can be previewed and goes through a URL migration with redirects.
Something wrong or missing on this page? Open an issue on GitHub