Plainwork

Plainwork / Catalogue / Polyglot for Ghost

TemplatesNo. 1015-09

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
Try the free routes.yaml generator →
Instant deliverySecure checkout by Stripe14-day refund
A bilingual demo site and the output of the tools

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.

A Spanish article page of the demo site: Spanish menu, a language switcher showing English, Español (current) and Français, and the Spanish article text

The same switcher inside the phone menu of the French page, 390 pixels wide

$ 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

Writers and publishers who want one Ghost site in two or more languagesAgencies building bilingual or multilingual Ghost sites for clientsDevelopers who would rather read 500 lines of Node than run a second Ghost and a proxyBusinesses moving a bilingual site from WordPress to Ghost

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

themes/source-polyglotSource 1.7.6 with the generated partials wired into the header, menu, strings and related posts
bin/polyglot.mjs and lib/The command line tool: init, routes, plan, build, pack (theme zip), check, verify
examples/A three-language config and the routes.yaml it generates
strings/Spanish and English theme strings, plus overlays for four languages
docs/Five short guides, from the ten-minute start to troubleshooting
test/run.mjs11 tests for the generator, the export audit and the hreflang verifier

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.

Get it for $29

More from the catalogue

Other small tools

See everything →