# Evolution of translations management for Android at Revolut

DevFeed: [Evolution of translations management for Android at Revolut](<https://devfeed.tech/articles/evolution-of-translations-management-for-android-at-revolut-26343.md>)

Original publisher: [Read original article](<https://medium.com/revolut/evolution-of-translations-management-for-android-at-revolut-2f97b5969bfb?source=rss----44c5ac415e14---4>)

Author: Yaroslav T

Published: 2023-12-05T17:28:51Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Script](<https://devfeed.tech/topics/script.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Groovy](<https://devfeed.tech/topics/groovy.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [development](<https://devfeed.tech/tags/development.md>), [evolution](<https://devfeed.tech/tags/evolution.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [management](<https://devfeed.tech/tags/management.md>), [migration](<https://devfeed.tech/tags/migration.md>), [translation](<https://devfeed.tech/tags/translation.md>)

## AI overview

An engineering retrospective on how Revolut evolved Android translation management across multiple apps, modules, and languages. It describes using Lokalise, moving translation downloads from app startup to scripts, and migrating the script from Python to Groovy through a Gradle task.

## Source excerpt

Here's everything you need to know about how translations have evolved at Revolut. We currently have 6 apps, with 330 modules containing strings.xml files. And don't forget, we need to support 33 languages. To make the translation process smooth, we use the API of Lokalise. When one of our engineers adds a new string on the platform, it's translated into all languages within 1 hour. After that, we need to download and place the translations into the correct module. Now, from an engineering perspective, here comes the most interesting part! Initial implementation In 2017, we began our expansion, and the first supported languages were French and Polish. We quickly reached a stage where fast translation became an integral part of the feature release process. Using our partner, Lokalise.com, we started implementing translations for a single app (only Revolut retail app existed at the time). We added Lokalise library to our project and used keys from it via a Singleton pattern: https://medium.com/media/b55574683f8ebc328b4049d46f1114bf/href Library downloads translations from the server once the user opens the app. This approach was fast to implement, but had 2 limitations: API has user limit, which is critical for the fast-growing application Download translations on app launch degrades the performance First script To answer both of these problems, we created a simple local script that downloads strings and puts them into the resources' folder. Before releasing a new version of the app, one of the engineers has to call this script and merge translated files into the release branch. https://medium.com/media/78c6e72e4148de66b8d461b467b0df55/hrefSimplifying developers' life Later on, one of our engineers introduced an additional script to upload keys to Lokalise. The goal was to let engineers create new keys in strings.xml during the development process, automatically upload them to the provider, translate them, and then download them back. However, we soon discovered that