Skip to content

Season of KDE 2026: Final Report - Standardizing Lokalize

Saturday, 28 March 2026  |  Tanish Kumar

Eight weeks in and it's time for the Season of KDE wrap-up - somehow survived the university exams, the KXMLGUI docs, and a dead motherboard to get here.

For the past couple of months, I've been working on KDE's computer-aided translation tool, Lokalize, under the mentorship of Finley Watson. What started as a menubar bug turned into XML configs, C++ backends, a bookmark manager, and somehow a new laptop.

Fixing the "Jumping" Menubar

If you use Lokalize, you’ve probably run into this bug: the menubar reshuffles every time you switch tabs. Go from the Editor to the Project Overview, and suddenly the Edit, Go, and Sync menus disappear or swap places. It totally breaks muscle memory. As part of my Season of KDE project, my task was to fix it.

I restructured how Lokalize handles its menus globally. I created a "Global Skeleton" layout that reserves a permanent spot for every menu, regardless of which tab is open. I then wrote logic that hooks into the application's tab-switching events. Now, if a menu isn't needed for your current tab, it simply greys out instead of disappearing completely. The result is a much more predictable UI!

Image

Ghost Actions & The Bookmark Manager

While exploring the codebase, i discovered a graveyard of 'ghost actions' features that were defined in the underlying XML files but had zero C++ code behind them, meaning they never actually showed up in the menubar. After surveying the KDE translators' mailing list to understand their daily workflows, i got to work building them:

  • Core Editing & Batch Actions: I built the backend logic to make Cut, Copy, Paste, and Alternate Translations work seamlessly. I also implemented batch actions (Save All, Close All, Revert All), complete with a safe shutdown sequence that prompts users for unsaved changes so they never lose their work.
  • The Bookmark Manager (In Review): There was no way to actually see what you had bookmarked - you could toggle them and jump between them, but that's it. I built a standalone dialog that lists all bookmarked entries with text previews and checkboxes so you can clean them up properly. It's currently in UX review with the KDE Visual Design Group (VDG).

The Hardware Crisis

Honestly, the whole project almost derailed in Week 8. Just as the SoK deadline and GSoC proposal dates were creeping up, my laptop's motherboard completely died. With the repair shop giving me a "no promises" timeline, I had to panic-buy a new laptop on the spot. RIP my bank account, but a huge thanks to Finley for providing an extension so I could set my environment back up and finish strong!

What I Learned

The technical work was a lot, but honestly not even the most interesting part. Two things stuck with me:

  • Read before you touch anything: My first instinct in Week 1 was to blindly shuffle tags around and hope the UI fixed itself. That went nowhere. It took a few days of actually digging into the KXMLGUI docs and tracing how the merge worked before things started making sense, but once they did, the fix became obvious.
  • Talk to the actual users: Emailing the KDE translators' mailing list before implementing the ghost actions was really useful, i had assumptions about which ones mattered that turned out to be wrong. Their responses shaped a lot of what i actually built.

List of Contributions

Merged:Pending Review / Ongoing:

What's Next?

SoK is over but i'm not done with Lokalize. The Bookmark Manager still needs to land, and while testing my last MR i found another bug in "Revert All" that i want to fix. Also working on my GSoC proposal right now.

Special Thanks

Huge thanks to my mentor, Finley Watson. The code reviews were incredibly detailed, you were patient when i was going in circles, and you gave me an extension when my laptop decided to die at the absolute worst time. Really appreciate it 🙏 Also thank you to the translators on the mailing list who actually responded to my email - that shaped a lot of what i ended up building. And to the KDE community in general for being so welcoming to a first-time contributor.

See you in the KDE Git logs! 👾

---

P.S. Read my weekly SoK work here: Week 1 | Week 2 | Week 3 | Weeks 4 & 5 | Week 6 | Week 7, 8 & Extension