In-House Over-the-Air Localizations in a Modular iOS App
Article Summary
Alberto De Bortoli from Just Eat Takeaway built an over-the-air localization system that fixes translation bugs without app releases. No vendor SDK, no compromise—just a few hundred lines of code that works with their 30+ module architecture.
Most iOS teams accept that fixing a wrong translation means waiting for the next release cycle. Just Eat Takeaway rejected that constraint and built their own OTA localization system when their translation platform didn't offer one. The solution leverages Bundle's existing capabilities rather than reimplementing locale logic.
Key Takeaways
- One-line change per module enables OTA updates across 30+ modules
- Bundle handles locale fallback and plurals; no custom resolution needed
- Atomic file operations prevent partial bundles from corrupting the app
- ETag-based CDN checks make 'nothing changed' cases nearly free
- Kill switch clears memory cache and deletes all files instantly
A foundation module with zero dependencies and minimal per-module changes delivers production translation fixes without releases, applying updates only on cold launch to avoid mid-session UI mutations.
About This Article
Just Eat Takeaway's translation platform couldn't update translations over the air. When translations were wrong or new localizations were needed, they had to wait for full app release cycles that took days or weeks across their 30+ module monorepo.
Alberto De Bortoli's team built a foundation module that used Bundle's native locale fallback and plural handling. The system downloads zip archives per module to a CDN and replaces files atomically through FileManager to avoid partial bundle corruption.
The client code came down to roughly 300 lines with just one line of integration per module. ETag-based conditional requests cost almost nothing when content hasn't changed, so they can fix production issues instantly without releasing a new app version.