Hello OpenMRS community ,
My name is Souvenir Turinumugisha, and I’m currently pursuing a Computer Science major at Northwestern University. I have a strong passion for web development and have built several web applications over the past two years. I’m a full-stack developer (Frontend Heavy), particularly experienced in building responsive and user-friendly web interfaces. My technical toolkit includes modern technologies such as React, Angular, Tailwind CSS, and TypeScript on the frontend, alongside Node.js, Express, and Spring Boot on the backend. I also work with databases like PostgreSQL and MongoDB, and I’m comfortable with tools like Git, GitHub, GitLab, and testing frameworks like Cypress.
I’m incredibly excited to apply for Google Summer of Code 2025 and contribute to OpenMRS’s mission to save lives through code. I’m particularly drawn to the “Translation Editor for Forms” project. Over the past few days, I’ve been closely reviewing the project description and documentation and interacting with the project UI. I’d like to summarize my current understanding of the project after reading the project description and get corrected where I might be wrong to make sure I get everything right as I work on my proposal.
My Current Understanding of the project:
Current translation workflow (before this project):
-
Form translations are created as JSON files and placed in Initializer folders.
-
These translations are loaded at startup and saved to the database as formResources linked to each form.
-
Updates require editing config files and restarting the server which is not ideal for non-technical users.
Goals of this project:
-
Introduce a separate Translation Editor UI for managing multi-language translations.
-
Let users view and edit all translatable strings in a form schema (question labels, answers, etc.).
-
Preview the form in any selected language using the form renderer.
-
Allow users to download translation JSON files for each language (for manual import via Initializer).
-
Not save translations to the backend or database — this is explicitly out of scope.
How translations might be temporarily stored during editing (my current thinking): Since we’re not saving to the backend, I’m assuming we’ll keep translation data:
-
In memory (within React state), or
-
Optionally in localStorage or IndexedDB for session persistence
That way, when users switch between languages or return to edit later, the editor can repopulate the translations they’ve worked on — without losing progress. This is my current assumption and I would like to get corrected if I’m wrong.
Previewing the form in another language:
-
The form renderer can receive the entire formJson (including a translations object) and render the form in the selected language.
-
The language selection here should apply to the form only, not the overall app UI — unless the global language is also changed via the navbar.
Download behavior:
- The final translations should be exportable as JSON files, with the correct naming convention for use with Initializer.
The ask:
I’d really appreciate it if @Nethmi or anyone else who understand this project better could help confirm if:
-
My interpretation of how form and translation data is managed (especially during editing) is aligned with what is anticipated for this project
-
The idea of storing unsaved translation progress in react state (or similar) fits within what’s expected or recommended
-
There are any edge cases I might be missing, especially around previewing, switching languages mid-session, or exporting translations
I’m looking forward to diving deeper into the form engine and builder source code, and I’m excited to begin drafting my GSoC proposal based on this understanding.
Best regards, Souvenir Turinumugisha