For most teams, translations are something releases wait on. Kundo changed that, now translations happen automatically, as part of how they ship, without holding things up or sacrificing quality.
The translation itself isn't really the hard part anymore, you can get LLMs to handle that well with the right context and tooling. The hard part is everything around it: keeping translations in sync as strings change, getting it out of the release path, and not having to build and maintain that pipeline yourself. And keeping the quality up, consistent terminology, the right tone, your brand voice holding across every language, not just text that's technically correct.
While I was building Localhero, I was also doing some consulting at Kundo, so I had a foot in both camps. Their translation process came up as something they wanted to improve, and when I showed them what I'd been building, it turned out to be what they needed. They liked the automation and how easy it was to tweak translations, and we got it set up across their platform. This is the story of that migration.
The problem: translations were slowing down releases
Kundo is a Swedish customer service platform, built for the AI era, that combines ticket handling and self-service in one solution. It's used by 500+ organizations, and it's a fair bit of product across several repos, translated from Swedish into eight more languages: English, German, Dutch, Danish, Spanish, Polish, Finnish and Norwegian.
The translation flow had grown organically over more than a decade. A pretty standard setup: a TMS (Transifex, in their case) with its limitations (more built for project management than for a dev team shipping continuously), and a translation agency doing the actual translations. There were CLI commands to push new strings to the TMS, and translations from the agency were ordered via email. The kind of choices and workarounds that compound over the years into a process with some friction and delays. None of it was broken. There were just quite a few steps, and steps are where releases go to wait and small mistakes slip in.
Here's how Ted Bäckström, Tech Lead at Kundo, described it:
Translations have always caused friction at Kundo. It costs money, sometimes things go wrong, it's easy to miss something, and above all, it takes time. Sometimes it delays our releases by several days just to wait for translations.
The migration
Kundo's platform is a mix of Django, Elixir and React, so this had to work across a few different stacks. The setup was basically like this in the repos:
- Run
localhero initto set up the repo + add the Localhero GitHub Action. - Import the existing translations so nothing was lost.
- Translate anything missing to get full coverage everywhere.
- Set up the style guide and glossary to get the best results from the AI translations.
After that, translations just happen in the normal pull request flow. Localhero picks up new and changed strings, translates them, and adds the result straight to the PR, the same translate-on-every-PR pattern we use ourselves:

You also get a fuller view of each PR in Localhero, every language, every key, and the quality checks in one place:

One important part of getting the translations right was the style guide and glossary. A PM, the CPO and I went through what Kundo already had and captured the tone they wanted, along with the special terms that need to stay consistent across languages. New glossary items get added as they come up. That's what keeps the automated translations on-brand instead of just technically correct. (We have a separate post on setting up a style guide and glossary if you want to go deeper.)
We removed the old TMS tooling, updated some of the existing commands so things stayed familiar for developers, and cleaned up the translation data along the way. It was a joint effort with the Kundo team, which also made it easy to fit the setup to how they already worked.
What changed
Translations are no longer something you wait for. The wins, in order of what mattered to them:
- Releases stay on track. Translations happen automatically as PRs are created, so the translations are always up to date.
- The team keeps control of quality. AI does the first pass, and it's easy to review and adjust the wording when needed. Even new source strings get checked as they're added.
- The language stays consistent. The glossary and style guide keep special terms and tone the same everywhere, across every language and every repo, instead of drifting over time.
- Cost takes care of itself. Less manual coordination, no tooling to maintain.
The translations show up across all of Kundo's products, from the support forms to the AI chat:

It's now rolled out across all of Kundo's services. I'd rather let them say it than grade my own work:
localhero.ai has improved how we work across all these areas. Instant translations, at a better price, plus tools to refine every piece of copy in our platform. It's rolled out across all our services now and it feels great to have in place! 🚀
— Ted Bäckström, Tech Lead at Kundo
Getting translations off your release path
Most teams that have been shipping for a while end up with a translation setup like this: a TMS, an agency, some scripts to tie it together. It's a perfectly reasonable setup, and for a long time it was the best option available. What's changed is that you can now get good translations automatically, with the workflow built around how a product team actually ships. (If you're weighing the options, we wrote about how to choose a translation setup separately.)
If that sounds like your setup, it might be worth a look. Translations don't have to slow down your releases, and you don't have to build and maintain something homegrown to get there.
Want help automating your localization? Get in touch, I'm happy to take a look at your setup and show you what it'd look like for your stack. Or just try Localhero and set it up yourself.