Javier Martínez
4 min readFeb 27, 2022

--

Internationalize your App (I)

Time goes by and new applications appear in the app markets, most of them under the umbrella of Android and iOS application. Thanks to the new modularization techniques, as the app technology matures, is likely that most of them are published in different countries under the same codebase, which implies different languages.

This is a huge challenge for Product Managers and developers.

Problem

Working in environments as the one described above make us face many challenges. Some of them are:

  • Different strings codebase for any of the platforms (Android and iOS), which causes double maintenance overload for managing the strings codebase.
  • iOS project are plausible to have their strings hardcoded in the code if the project was not born “international first”.
  • Product Managers have no control over the strings at all, which makes very fuzzy to work on environments like the ones in which one country puts into the code new strings and the other ones just have to translate them.
  • Inexistent source of truth. There could be different texts for the same feature for the different platforms.
  • Unscalable solution. If one new language is added all the strings have to be translated, at best, twice (one per platform). Furthermore, if one new platform appears (for instance a web frontend or a desktop application) the strings would need to be added from scratch.

Solution

Purely and simple, having a single source of truth for the whole strings codebase.

By achieving that we would get the following benefits:

  • Single source of strings regardless how many platforms exist (Android, iOS, web frontend?, desktop app?).
  • Easier maintenance. Linear maintenance complexity. From O(Nᴺ) to just O(n).
  • Less error prone.
  • Same feature, same texts. Product consistency.
  • Scalable solution. If a new platform appears, no new translations are needed. If a new language appears, one single file translation is needed.
  • If you choose right the common string format it’s possible to empower Product Managers through the use of some tool to manage the strings remotely. We will see more about this further in the article.

Personal Context

They say each person is a world. And I would also say that each company is a world. Both concepts together is what define our specific domain or context.

Provided that I just want to add that the solution I am about to explain does not aim to be the best nor the unique one. Hence, you will have to find the best solution that fit your needs for your specific domain. Here is mine.

@Check24 is a huge german company which consist of thousand of people trying to build the best multi-product and multi-service comparator. They are having a great success and they found out that they could be competitive out of Germany as well. At this point is where a bunch of brilliant people (and I) come into play. Internationalization. It sound scary, doesn’t it?

To give you more context about the technical and structural architecture of the product I believe appropriated to show you this simple diagram.

@check24 architecture overview

At this point you can see the core/platform module which includes features like user profile, log-in, Single Sign On, notifications, payments, store deployments, etc. Obviously all of this must be localized, translated and adapted.

Besides, vertically you can find the products (or verticals, as we call it). Each product is a module (or plugin) that is connected to the platform. Furthermore, if the native module fails, a web app is shown (do you remember when I said “multiple platforms”?). Each module is composed by its own team, its own technical implementation and its own Product Management (even its own legal entity). Guess what? All of this must be internationalized (translated) and localized (adapted) .

And now to loop the loop, we, as new country, do not have a bunch of developers for each of the verticals. At the moment of writing this lines we are a small group of people in charge of core/platform and the different products and platforms.

Imagine how time consuming it would be for us to take care of such a huge codebase of strings for the different products and for the different platforms. Just keeping them updated and translated might be a total nightmare.

We had to do something.

Stay tuned for the next articles to know more about what we did and how we achieved it.

--

--