Automated translations service for multi-language content

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):

  1. Product Principles & Roadmap doesn’t really mention any translations
  2. Same for recent GH issues
  3. i11y blog post on your site neither
  4. This old forum thread is.. well - old
  5. 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:

  1. Multiple Ghost sites/publications + translation sync service
    1. 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:
      1. watch for new/updated posts in the source language (via webhooks and/or polling)
      2. translate content using a configurable translation engine (DeepL, Google, OpenAI, etc.)
      3. create/update the corresponding post in the destination Ghost instance as a draft (or optionally publish automatically)
      4. carry over metadata (tags, canonical URL, publication date, feature image, etc.)
      5. optionally add cross-links or language metadata to help themes generate hreflang / language switchers
      6. etc
    2. This feels like a good “power-user/self-hosted” solution and fits Ghost’s existing stance.
  2. Single Ghost site + translation proxy layer (fully automatic reader-side switching)
    1. For users who want one site and a language switcher without maintaining multiple Ghost instances, the alternative is a proxy/edge layer that:
      1. serves /lng-en/<original-slug>/ (or similar) paths
      2. fetches the original HTML from Ghost
      3. translates only the relevant text (leaving asset URLs intact)
      4. rewrites internal navigation links to preserve the selected language
      5. caches translated results aggressively and revalidates on post updates
    2. 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).
  3. (Skipping for now) Hybrid approaches
    1. 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:

  1. these would likely be separate OSS projects (not necessarily Ghost core), but explicitly designed for Ghost.
  2. 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)
  3. 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:

  1. is there any current roadmap/direction (even informal) around post-level multilingual publishing that I should be aware of?
  2. 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.
  3. 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

I don’t work for Ghost.

I’ll drop this here by way of reply. It’s a year old, but not too much has changed:

Since I last updated that post, I did a multi-language project that runs in the same Ghost install. It also does some tricks like having comments being shared between post and has two sets of translations for the theme that are loaded based on a combination of urls and tags. One of these days I’ll write it up, but here’s a link if you want a look! https://theinitium.com/

[You’ve already identified that the official recommendation is two Ghost installs. I’m clearly violating that here. Having their readers all in the same site and able to interact with each other was a high priority, and that meant one site.]

1 Like

Thank you Cathy for that - very helpful and detailed post!

I will give myself a few more days, before moving forward, as maybe there will be some more answers about the overall direction of translations.

I’ll probably start with a separate blog approach and the sync service, since it just works best for my scenario. Once again thank you for sharing your post - it’s very informative.

1 Like