Revolut Yaroslav T Dec 5, 2023

Evolution of Translations Management for Android

Article Summary

Yaroslav T from Revolut reveals how managing translations for 6 apps across 330 modules and 33 languages evolved from a simple library to a custom Gradle plugin. The journey took 7 years and countless iterations.

Revolut's Android team needed to scale their translation workflow as they grew from a single app to a multi-app, multi-module architecture. They partnered with Lokalise for translations but had to completely rethink their engineering approach multiple times to handle the complexity.

Key Takeaways

Critical Insight

A custom Gradle plugin with conventional configuration replaced fragile Bash scripts, enabling each of 330+ modules to manage translations independently while preventing conflicts and breaking changes.

The article reveals three critical rules they implemented to prevent translations from breaking production releases across multiple app versions.

About This Article

Problem

Revolut's codebase spans over 1 million lines of code across 330 modules. Managing translations required flexibility, but their Yaml, Bash, and Kotlin setup was fragile and hard to test. The system also couldn't download translations in parallel.

Solution

Yaroslav T's team wrote a custom Gradle plugin in Kotlin. It removed the need for Yaml configs and Bash scripts. Instead, each module could declare its translation needs directly in Gradle configuration blocks.

Impact

The plugin made it possible to run unit and integration tests in CI. It eliminated six separate Bash scripts that had to be maintained. Translation downloads across all 330+ modules now run in parallel without duplicating configuration.