Machine translation is fast, but it doesn't know the words a community has spent years agreeing on. My Google Summer of Code project adds a feedback loop to Joomla that learns those words from the corrections translators make, so its translations get better over time.
Hi, I'm Krishna Gandhi. I'm a Computer Science student in India, entering the final year of my Bachelor of Technology (B.Tech), and this year I'm a Google Summer of Code 2026 student with Joomla. I didn't start out as a "computer person", I played badminton competitively into my mid-teens, and only began coding during the Covid lockdowns, when curiosity about how video games are built pulled me from C and C++ into web development, and eventually to Joomla <3

I've been contributing to Joomla for a while now, and Emmanuel Lemor (Vice President OSM) was kind enough to tell the story of how I found my way into the community in his interview with me in this magazine's April edition - so I won't repeat it all here. This time I'd rather tell you about the project I am building this summer.
The problem we're trying to solve
If you run a multilingual website, you already know translation is a lot of work. Machine translation tools like Google Translate, DeepL and the newer AI models can give you a draft in seconds. But anyone who has used it on real content knows that draft is rarely quite right/ready to publish. It doesn't know your community's preferred wording. Sometimes it translates a brand name or a technical term that should have been left untouched; other times it picks a tone that's a little too formal, or too casual. So a human has to step in and fix it. Joomla has its own vocabulary - words like "Article," "Module" or "Template" mean very specific things here, and over twenty years, each language's translators have agreed on how to render them. A general-purpose translation tool doesn't know any of that. Take a simple one: the word "Article." Translate it into German the everyday way and you get "Artikel", the general purpose choice. But the German Joomla community settled on a different word, "Beitrag", and a general translation tool, reaching for the dictionary, has no way of knowing that. The reverse happens too: the Dutch and French communities deliberately leave the word "template" in English, so a tool that "helpfully" translates it is just as wrong. Multiply that across thousands of pages of documentation in more than sixty languages, and the scale of the problem starts to show.
And it isn't only about getting each word right - it's about getting it right the same way every time. Translators want a term rendered identically wherever it shows up, across documentation, menus and help text. A tool with no memory of its own past choices can easily translate the same word three different ways on three different pages, and then a human has to go back and make them all match.
Here's the part that really matters: the machine never learns from those fixes. A volunteer translator corrects the same mistake this week that they corrected last week, and will correct again next week. All that human knowledge - "we always translate this word this way", "never translate that word" - lives in people's heads and gets thrown away every single time by the machine translator.
My GSoC project is a feedback loop that tries to fix exactly that. The idea is inspired by how modern AI systems learn from people. A technique called Reinforcement Learning from Human Feedback (RLHF): you let the machine make an attempt, a human corrects it, and the system learns from the correction. In my project, when an article is saved, a background process (a plugin) produces a draft translation of it in target language(s), and a translator goes through that draft and fixes whatever's off. The system records exactly what changed, and as the same corrections come up again and again, turns them into simple rules it can reuse, slowly building up a memory of that community's terminology and style. The next time it translates, it pulls back the rules that matter and feeds them to the model before it starts translating, using an approach known as RAG (Retrieval-Augmented Generation) - so it makes fewer of the same mistakes. From the translator's side it's meant to feel simple: the original on one side, the draft on the other, and you just correct what's wrong. The learning happens in the background, as a natural by-product of the work the translator is already doing.
In other words: the corrections stop being throwaway work - they're saved and reused, so every future translation gets better over time.
Building on twenty years of work
The best part is that the system doesn't start cold. For twenty years, Joomla's translation teams have been making careful, consistent choices about how the software should be read in each language, and all of that already lives in Joomla's official language packs. The project distills those existing translations into a starting set of rules, loaded in before the system ever translates a new word, so it already knows that the German community writes "Beitrag", not "Artikel". So instead of starting from zero, it grows from that existing work, and the corrections translators make from then on keep it improving, both refining the rules it has and adding new ones over time. One practical goal of the project is to put this to work on Joomla's documentation, so newcomers can eventually read it in their own language too. The new user documentation hasn't been translated yet, but the old one was: docs.joomla.org, the long running community wiki that was Joomla's official documentation until recently, holds a lot of translations the community put years of effort into. Those translations themselves carry plenty of useful information for the project to learn from.
Why this project, for me
This was one of the projects Joomla put forward for GSoC this year, proposed and mentored by Herman Peeren, Charvi Mehra and Stefan Wendhausen, and I chose it from the list for two reasons. First, I'd studied how these "learn from feedback" (reinforcement) systems work during my degree, and I'd been wanting to turn my theoretical knowledge into practical work, and this was the perfect chance to do it. Second, I genuinely like that it keeps humans in the loop. It isn't "let the AI translate everything and hope for the best." It's "let the people who care stay in charge, and make their effort count for far more than one article." That balance feels right to me.
What Joomla has taught me so far
Before Joomla, I'd only worked on college projects where coding standards were loose. One of my biggest lessons here has been how strict good standards are - and slowly understanding why that strictness matters. It also opened my eyes to things I'd never really considered before, like how crucial accessibility is. And honestly, learning to take review feedback without taking it personally has made me better, not just at code.
I can't write about this project without talking about my mentor, Herman Peeren. He's been patient, humble and genuinely supportive. Answering even my smallest, sometimes silly questions without ever making me feel small. For more than two weeks he sat with me on live Google Meet sessions and walked me through building a Joomla component from the ground up, going through the code and showing me the right way to do things in Joomla. He has a real love for modelling and the creative side of building software - not just making it work, but shaping it thoughtfully, and some of that has rubbed off on me. One lesson in particular has stuck with me: think a problem through and agree on the plan before rushing into code, because when people build together, everyone pictures it a little (sometimes massively) differently. I truly believe I got one of the best GSoC mentors anyone could ask for.
What's next
The project runs through the summer, and I'll keep sharing how it's going. I'm especially looking forward to presenting it alongside my mentor, Herman Peeren, at the Joomla World Conference.
This project avoids fixing the same machine mistakes over and over, while keeping the quality of Joomla specific translations. So translators can spend their time on what's new instead of redoing what they've already fixed.

Comments