Starting with internationalization

Have a project and want to translate it into several languages? This guide will help you do so. Several typical situations are showcased, but most of the examples are generic and can be applied to other scenarios as well.

Before translating any software, you should realize that languages around the world are really different and you should not make any assumption based on your experience. For most of languages it will look weird if you try to concatenate a sentence out of translated segments. You also should properly handle plural forms because many languages have complex rules for that and the internationalization framework you end up using should support this.

Last but not least, sometimes it might be necessary to add some context to the translated string. Imagine a translator would get string Sun to translate. Without context most people would translate that as our closest star, but it might be actually used as an abbreviation for Sunday.

Choosing internationalization framework

Choose whatever is standard on your platform, try to avoid reinventing the wheel by creating your own framework to handle localizations. Weblate supports most of the widely used frameworks, see Formatos de archivo admitidos for more information (especially Translation types capabilities).

Our personal recommendation for some platforms is in the following table. This is based on our experience, but that can not cover all use cases, so always consider your environment when doing the choice.

Plataforma

Formato recomendado

Android

Recursos de cadenas de Android

iOS

Cadenas de iOS de Apple

Qt

.ts de Qt Linguist

Python

gettext de GNU

PHP

gettext de GNU 1

C/C++

gettext de GNU

C#

.XML resource files

Perl

gettext de GNU

Ruby

Ruby YAML files

Extensiones web

JSON para WebExtension

Java

XLIFF 2

JavaScript

Archivos JSON de i18next 3

1

Como la compatibilidad nativa de PHP con gettext es defectuosa y a menudo inexistente en las compilaciones para Windows, recomendamos que utilice en su lugar la biblioteca de terceros motranslator.

2

You can also use Java properties if plurals are not needed.

3

You can also use plain Archivos JSON if plurals are not needed.

The more detailed workflow for some formats is described in following chapters: