Scaling the translation process
By: Danielle Moreira
Tags: Software Engineering, Translation, Globalization

Going global is a very attractive strategy for companies and a great challenge for product and engineering teams. Usually when we start building products for international markets, the first step is to work on translation. I would like to share with you how we made this process simple and scalable, making life easier for developers and translators, as well as delivering a better experience for our customers.

Context

In 2019, when the RD Station International Product team was formed, there were already more than 120 RDoers in the product and engineering department, executing more than 15 deploys per day. In addition, the strings had already been separated from the source code into translation files and our digital marketing software — RD Station Marketing — was available in English and Spanish.

However, we didn’t have a template to follow regarding how the translation process should work. The responsibility to generate translations for English and Spanish belonged to any team editing / adding an i18n key. Developers could request these translations from our translators via form or slack. Instead, however, they would often use Google Translate or even replicate the keys in Portuguese for all languages.

Given this scenario, we identified four main problems:

Mixed experience

Parts of the product with text in different languages. In the email below, for example, we have text in both Portuguese and Spanish.

Example of an email with mixed experience

2. Dissatisfied external customer

Hola buen día, solicito información de como cancelar mi cuenta con RD Station pues considero que tiene muchas falencias para el idioma español.. es complejo busca ayuda o tutoriales que estén en este idioma. [Customer]

3. Development team with questions

Olá boa tarde, sou novo aqui em produto e estou adicionando uma chave longa de tradução. Como eu procedo para ter esses textos traduzidos? [Developer 1] Hoje como está o processo de solicitar traduções? Eu precisava das traduções (inglês e espanhol) dessas 3 chaves abaixo. [Developer 2]

4. Translation team with questions

Hi, I was just about to write you now. Do you have any context for the task you sent? Screenshots or where to find these strings in the product? [English translator] Holiss, buenos días. Una perguntita. ¿dónde puedo editar la parte de los pop-ups en el Station? Hay algo raro. [Spanish translator]

There were several available options to solve the problems mentioned above, but we decided to consider two of our engineering principles as the basis for creating the solution and we chose to automate the process.

Reducing global complexity is more important than reducing local complexity. Automate everything.

Automating the translation process

Solution

Centralize the responsibility of generating the translations in Crowdin — translation manager system, creating a method that listens to the work-in-progress version and delivers the translation within the same branch. Simple and scalable!

Solution architecture

To make this possible, we created a solution called the translation manager, which had some requirements:

Be SH or binary, supporting different operating systems like Linux, Mac and Windows;

It needed to be installed magically;

Being able to connect to more than one GitHub repository;

It couldn’t have dependencies.

Thus, we created an application in GoLang that was installed in the .git / hooks / pre-push folder when executing any interaction with the application in the development environment: `rails s`,` rails c`, `rails *`.

How it works

A developer changes or adds new strings in Portuguese to the application in their development branch;

When performing a git push… strings are sent by the translation manager and automatically translated into English and Spanish by Crowdin using the translation memory + translation machine (Google, Amazon, Microsoft, etc.);

That done, the already-translated strings are exported to the developer’s development branch by the translation manager. If there are any deleted strings, the translation manager also cleans the translation files.

Finally, changes are automatically submitted to the developer’s development branch in GitHub.

Translation process step by step

After this process is completed, the translators receive notifications of new strings via email and if the branch has not yet been merged, the corrections will be incorporated in the same PR, otherwise a new one will be generated from the master that can be merged later on. This way, the human translation process doesn’t create a bottleneck in the development process.

Translation workflow

The automation of this process ensured the quality of new translations that went into production. However, it didn’t solve the problem of poor quality existing translations in the software. To solve this problem, we used the in-context translation solution provided by Crowdin.

In-context translation

In-context translation allows you to translate texts directly from within the software in real time, by making them editable. Using this feature, translators were able to revise strings within the context of the page containing them, resulting in a much faster and more accurate translation.

In-context translation in RDSM

Conclusion

Demonstration of the new translation process

It was an incredible experience to have participated in the construction of the translation process and to have been able to solve the four problems listed at the beginning of this article. Remember:

Automate to ensure quality and gain scale. Create a globalized product and not just a globalization team.

Special thanks to all the people who participated in this project: Paula Hurtado, Peter Stanley, Jacobo Leen, Carlos Cuzik, Marlon Schweigert and Danilo da Silva.