By Krishna Gandhi on 2026-07-07 10:42 in Google Summer of Code Joomla Team

For an overview of how things are going, see the Kanban board of the project


36 pull requests merged since coding began on May 25. Summary of what has been done:

- Set up the com_translations component for Joomla 6 (J5-compatible): installer, service providers, database tables for the translation queue, per-language queue states, feedback and rules.
- Built the translation queue as a grid view: source items as rows, installed target languages as columns, each cell showing that item's translation state.
- Made the source language configurable in the component options.
- Built the side-by-side translator feedback editor showing the machine draft next to the source, field by field.
- Added a "Save & Train" button to the editor: saves the correction into the draft article and stores one feedback row per changed field.
- Built the translation pipeline (TranslationModel): creates an unpublished draft in the target language, links it via Joomla Associations and sets its queue state to review; clickable manual trigger in the queue.
- Added a "No need for translation" toggle to the article edit form via a content plugin, with a queue filter and un-mark button.
- Introduced contenttypes.json, a per-content-type property map that makes the pipeline content-type independent.
- Added categories, tags and menu items to the translation pipeline, including deriving and creating per-language menus.
- Added content-type tabs to the queue view.
- Extended the feedback editor to all translatable fields (title, intro/full text, meta description, meta keywords, note, image alt and caption) and to all four content types.
- Added translatable custom fields (com_fields) to both the pipeline and the feedback editor.
- Added remapping of related items: a translated article's category and tags point to their translated counterparts.
- Added lifecycle sync via the content plugin: trashing/deleting a source cascades to its translations and queue rows; deleting a draft clears its stale queue cell; a duplicate-draft guard updates the existing draft on re-translation.
- Created the "translation" plugin group with an onTranslate event and the first provider plugin for the Claude API (structured JSON output; validated live with a real key on real articles)
- Built the Rules view and editor: list with filters/ordering/publish states, edit form, component permissions
- Built the rules distiller: a word-level diff of machine vs human text feeds an onDistil provider call that writes draft terminology/style/preservation rules, merging into existing rules instead of duplicating; manual "Distil Now" trigger; validated live for all three rule types
- Wrote documentation: glossary, user guide, content-type map reference, translation-plugin developer guide

On track ? yes. The midterm goal (queue, feedback capture, rules distilled from feedback, rules editable) is done and merged.

Plans for the second half:

- Scheduled task plugins: batch distillation of pending feedback and automatic translation of queued items.
- RAG: retrieve the relevant stored rules and inject them into translation prompts.
- Seed rules from existing core translations (machine translation diffed against official language packs).
- An Approve button in the feedback editor that publishes the reviewed draft translation; an optional auto-publish setting that skips review.
- Separate distillation into its own plugin group.
- Re-translation when a source is edited.
- Frontend translator views, automated tests and CI, cleanup