GSoC 2026 Inquiry: Internationalization Feature – Architecture Proposal & Maintainer Feedback
Hi MIT App Inventor team,
@ewpatton @Susan_Lane
I am Akash, a recent Computer Science graduate currently contributing to App Inventor and preparing a proposal for GSoC 2026. I have been actively working on the repository to better understand the architecture and contribution workflow.
Recent Contributions
Some of my recent pull requests include:
- #3795 – Treat disabled blocks as empty setter sockets (merged)
- #3758 – Fix Road map tiles not rendering due to OSM redirects (merged)
- #3731 – Improve contrast for Download APK dialog link text (open)
- #3741 – Add
CopyToClipboard block to Sharing component (Android & iOS implementation)
- #3774 – Add configurable
AndroidMinSdk project property with UI dropdown and build integration (open)
Working on these issues helped me understand several important parts of the codebase including:
- the Blocks editor logic
- component metadata and versioning
- the YoungAndroid project structure
- the build pipeline and manifest generation
Internationalization Feature Exploration
I am currently investigating the “Internationalization features for applications” project idea and wanted to share my current approach to see if it aligns with the project architecture.
From my investigation:
- UI component properties are stored in
.scm files
- Blocks logic is stored in
.bky files
- Component metadata is provided through
SimpleComponentDatabase
- Apps are compiled via the buildserver, which generates the Android project structure before building the APK.
Currently, text values such as Button.Text or Label.Text are stored directly in component properties rather than in a localization system.
Proposed Architecture
Translation Editor
Introduce a Translations editor where developers can define language-specific values.
Example structure:
Key English Spanish Hindi
--------------------------------------------------
button1_text Login Iniciar लॉगिन
label1_text Welcome Bienvenido स्वागत
The translation table would manage key-value pairs across languages.
Automatic Sync Layer
A synchronization layer would observe the Designer and Blocks editors.
When developers add or modify UI components:
- The system checks component metadata via
SimpleComponentDatabase
- If the property is user-visible text, a translation key is created automatically
- Keys are updated when components are added/removed
This avoids manual key creation and ensures the translation table stays synchronized with UI components.
Translation Resource File
Translations would be stored in a project-level file such as:
translations.json
Example:
{
"button1_text": {
"en": "Login",
"es": "Iniciar sesión",
"hi": "लॉगिन"
}
}
Build Integration
During the build process:
- The project export includes
translations.json
- A build step reads this file
- Platform localization resources are generated automatically
For Android:
res/values/strings.xml
res/values-es/strings.xml
res/values-hi/strings.xml
This allows Android to automatically load the correct language at runtime.
If translations.json does not exist, the build pipeline behaves exactly as it does today, ensuring full backward compatibility.
Questions for Maintainers
I would appreciate guidance on a few design decisions before continuing deeper implementation work:
-
Does introducing a project-level translation resource file align with the intended architecture for localization?
-
Would the buildserver stage be the correct place to generate Android/iOS localization resources?
-
Is using component metadata from SimpleComponentDatabase the appropriate way to determine which properties should appear in the translation table?
-
Would it be preferable to implement the translation UI as:
- a new editor tab, or
- an extension of the Designer / Properties panel?
Any suggestions or architectural guidance would be extremely helpful as I refine the design and prepare my GSoC proposal.
Thank you for your time and for maintaining such an impactful open source project.
Best regards,
Akash