Hello Ghost team!
I’m an avid blogger and software engineer with a looong beard any many hats. Recently, I switched all my blogs to the Ghost engine - and I love it.
BUT (straight to the issue)
Some of my blogs are written in my native language, some I create in EN. Thing is that I’d really love to be able to translate those posts automatically into a given set of languages. Or possibly, give this decision (of selecting the translation language) to the reader? Or maybe both approaches somehow?
So I’ve been figuring out this problem for a while now, and decided to work on this and get this done. I have some concepts and ideas (will share in a sec). However, since all of those ideas are really tied to the Ghost engine itself, I went through some steps to validate, if there is any work being done in those regards (and please correct me if I’m missing something):
- Product Principles & Roadmap doesn’t really mention any translations
- Same for recent GH issues
- i11y blog post on your site neither
- This old forum thread is.. well - old
- Documentation states directly, that translation (other than portal/theme) is not available, and that “Our experience shows that this approach is not only the easiest to get off the ground, but it’s also the most sustainable long-term.”
Having those things verified, I started thinking about possible solutions. But as this is an oss project, and also, I haven’t find a clear statement from the Ghost team side, whether there is any work being done in this regards (or any design, concepts, that you folks are following to get this done in some future), I decided to discuss it with you, before I start working on this. I’m totally fine with that some of those parts may (or may not) be used within your cloud/portal offering (I work in a very similar saas environment, thus why I’m even suggesting this). That’s exactly why I also wanted to have this design with you - at least partially. I’m sure you have discussed this item already many times and how some very good insights.
Actually this documentation part of yours suggest in a very precise way, how to approach this the best imo and some of your insights:
“[…] Our experience shows that this approach is not only the easiest to get off the ground, but it’s also the most sustainable long-term. If you’re publishing the same content in different languages, then we recommend using a service like WeGlot or Transifex.[…]”
Now, brief ideas related to this:
- Multiple Ghost sites/publications + translation sync service
- This follows Ghost’s recommended model (separate instance/publication per language), but removes most of the operational pain (but adds to the infra). A standalone translation/sync service could:
- watch for new/updated posts in the source language (via webhooks and/or polling)
- translate content using a configurable translation engine (DeepL, Google, OpenAI, etc.)
- create/update the corresponding post in the destination Ghost instance as a draft (or optionally publish automatically)
- carry over metadata (tags, canonical URL, publication date, feature image, etc.)
- optionally add cross-links or language metadata to help themes generate
hreflang/ language switchers - etc
- This feels like a good “power-user/self-hosted” solution and fits Ghost’s existing stance.
- This follows Ghost’s recommended model (separate instance/publication per language), but removes most of the operational pain (but adds to the infra). A standalone translation/sync service could:
- Single Ghost site + translation proxy layer (fully automatic reader-side switching)
- For users who want one site and a language switcher without maintaining multiple Ghost instances, the alternative is a proxy/edge layer that:
- serves
/lng-en/<original-slug>/(or similar) paths - fetches the original HTML from Ghost
- translates only the relevant text (leaving asset URLs intact)
- rewrites internal navigation links to preserve the selected language
- caches translated results aggressively and revalidates on post updates
- serves
- This seems more like a separate product than a Ghost feature, but it could be quite effective when it targets Ghost specifically. Also: it would need to coexist with existing theme/Portal localization (and avoid translating things like JS/CSS/image URLs).
- For users who want one site and a language switcher without maintaining multiple Ghost instances, the alternative is a proxy/edge layer that:
- (Skipping for now) Hybrid approaches
- Oh, this is something in-between the #1 and #2. Maybe let’s skip this for now, seems E_TOO_COMPLEX and no one asked for ;)
Some assumptions:
- these would likely be separate OSS projects (not necessarily Ghost core), but explicitly designed for Ghost.
- For now I see this rather as a backend solution nor frontend facing. No need to burn trees on Javascript side separately on each browser, when a translation could be done mostly once and saved on the server side somehow (this really depends, not mentioning any state for now)
- cloud-agnostic obviously and rather not k8s-centric => something truly standalone, with clear interfaces and contracts and minimal coupling, which makes it breeze to deploy as either systemd unit or Linux container of any kind, or k8s deployment or whatever-self-hosted-magic-user-prefers
Some closing questions:
- is there any current roadmap/direction (even informal) around post-level multilingual publishing that I should be aware of?
- does Ghost already expose the right primitives (webhooks, Admin API capabilities around posts, images/media, metadata) to make approach (1) viable without hacks? I’m rather thinking about not-obvious things I cannot get from docs/apis.
- from your perspective, which approach aligns better with Ghost’s long-term philosophy? (“none” ofc is a great answer I would truly appreciate!)
Thanks a lot - and have a great 2026!
Maciek