GSoC'26 - Translator Feedback Loop [Week Report #8]
By Krishna Gandhi on 2026-07-20 17:33 in Google Summer of Code Joomla Team
For an overview of how things are going, see the Kanban board of the project
Done this week:
- Backfilled pre-existing Joomla associations into the translation queue on install, so already-translated articles show their real per-language state instead of "No translation yet" and are not offered for re-translation (merged, #74).
- Added a component install script (postflight) that scans existing associations grouped by their shared key, seeds a queue row per source article and a state row per translation, and is idempotent so it is safe to re-run.
- Built re-translation on source edit: when a source article is saved as a new version, its existing translations are marked as needing re-translation, driven by a content plugin and gated on the recorded source version (raised for review, #46).
- Recorded, at translation time, the source version each translation was made from, and made queue cells in that state clickable so the translator can re-run the translation.
- Live-tested #74 and #46 on a Joomla 6.1.2 site with multilingual sample data; kept php-lint and PHPStan clean.
- Held the weekly meeting with Herman and walked through the #74 and #46 code.
Problems and how they were tackled:
- The association backfill first stamped every restored translation as "published". Caught it in live testing and changed it to derive the state from each translation's actual publish state (published stays published, trashed is skipped, everything else becomes review).
- For re-translation, the source's new version is written after the save event the plugin listens on, so reading it there was always one edit behind. Resolved it by triggering on the history row's own store event instead, which reuses Joomla's own change detection and stays compatible with Joomla 5.
Plans for next week:
- Extend the association backfill to categories and menu items.
- Start automated tests for the pure component methods and a minimal CI workflow.
- Begin the RAG work: retrieving the distilled rules and injecting them into translation prompts.