Plainwork / Catalogue / Polyglot for Ghost
A multilingual Ghost site on one install
Run English, Spanish, French or any other languages on a single self-hosted Ghost 6: own URL paths, hreflang, a language switcher that finds the translation, per-language menus and strings. One-time price.
- source-polyglot: Ghost's Source theme (1.7.6) with everything wired in, ready to upload; passes gscan 6.6.1 with no errors or warnings
- The polyglot command (Node 18+, no dependencies): init, routes, plan, build, pack, check and verify
- Generated partials: html lang, a complete reciprocal hreflang set with x-default, a language switcher, per-language menus, translated theme strings, related posts in the current language
- Per-language RSS feeds and home pages from a generated routes.yaml (/rss/, /es/rss/)
- Theme strings: Spanish written for this kit, plus French, German, Italian, Dutch, Brazilian Portuguese, Swedish, Turkish, Ukrainian, Vietnamese and Chinese from Source's own locale files
- check audits a Ghost export for missing pairs and double language tags; verify tests a live page's hreflang the way Google reads it
- Docs: quickstart, writing translations, using the partials in another theme, limits, troubleshooting; 11 tests; changelog and a licence for client sites
Open the live demo: a fictional publication in English, Spanish and French (7 sample posts and 3 pages). The switcher below jumps to the matching translation, and each page carries its own hreflang set.


$ node bin/polyglot.mjs verify https://example.com/launch-notes/ OK: 4 hreflang link(s), 3 page(s) checked, all reciprocal. $ node bin/polyglot.mjs check my-export.json ERROR post "Bad both" (/bad-both/) has 2 language tags (es, fr). Use exactly one. WARN Pair #pair-lonely has only post "Lonely" (/lonely/): no translation yet, so no hreflang alternates.
Built and tested on a real Ghost 6.70 install: 101 checks on the demo content (language attribute, translated labels, switcher links, feeds, hreflang reciprocity) pass on every page. The strings are checked in Chromium; Ghost 6 is tested, Ghost 5 and Ghost(Pro) are untested.
Made for
Who it's for
One Ghost, one admin, one bill
No second install, no nginx rewrite, no Cloudflare Workers, no translation subscription. Everything lives in routes.yaml, internal tags and a theme.
Translated slugs and a switcher that finds the page
Each translation has its own address (/es/notas-de-lanzamiento/). The switcher links to the matching translation and falls back to that language's home when there is none.
hreflang you can verify
The set on every page is complete, absolute, self-referencing and has an x-default. The verify command fetches the page and each alternate and tells you if one does not link back.
Honest about what Ghost will not do
Emails, the sign-up pop-up, comments and search stay in the site language. The docs list every limit so you can tell your client before you sell the project.
What's inside
Everything you get
How it works
From checkout to done
Buy
Pay securely with Stripe.
Open
Your download page opens straight away: unzip the kit and read README.md.
Use
Run init, build and pack, upload the theme zip and routes.yaml to your Ghost, and tag your first translation.
Questions
Good to know
Does it work with a theme other than Source?
Yes, with a few template edits. The partials are generic Handlebars; docs/03 lists the five edits and the build rewrites the language filters for you. Source is the one tested end to end.
Does it translate my posts?
No. It links translations you write: each language version gets its own tag and a shared pair tag. Machine translation is not included.
Which Ghost versions does it work on?
Ghost 6 tested, Ghost 5 untested: tested on self-hosted Ghost 6.70 and validated with gscan 6.6.1. It was not tested on Ghost 5 or on Ghost(Pro).
What stays in one language?
The sign-up pop-up, member emails and newsletters, comments, the built-in search, dates and tag or author archives follow your Ghost site language. Docs section 4 lists them.
How good are the translated theme strings?
French, German, Italian, Turkish, Ukrainian and Vietnamese come from Source's own locale files, and Dutch, Brazilian Portuguese, Swedish and Chinese are completed for two strings. The Spanish was written for this kit and has not been reviewed by a native editor, so read it before you ship.
Can I use it for client sites?
Yes: one licence covers any number of Ghost sites you or your company run or build for clients. You may not resell the kit itself.
What if it doesn't work for me?
If it doesn't work as described or you can't access it, email us within 14 days and we'll fix it or refund you. See the refund policy for details.
Polyglot for Ghost
Multilingual Ghost on one install: routes, hreflang, language switcher, menus and strings, a patched Source theme and a CLI. One-time $29.
More from the catalogue
Other small tools
Vantage
Free daily skyscrapers-style logic puzzle: one answer per board, no ads, no account. Supporter Pass $4.
Mailroom Kit
Fourteen transactional emails with plain-text twins and a zero-dependency build, render and check command: Mustache, Go or JS placeholders.
Foliokit
Seven print-ready document templates and a zero-dependency PDF command: invoice, quote, receipt, statement, letter, certificate and report.