Internationalisation des applications Kotlin : comment ne pas se perdre dans les langues

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi votre application a besoin d'internationalisation dès aujourd'hui

Imaginez : vous avez développé une super application Kotlin — pratique, rapide, avec une belle interface utilisateur. Mais tous les textes sont en russe. Un utilisateur de Berlin ou de Tokyo ouvre votre produit et... le ferme au bout de 10 secondes. Pourquoi ? Parce qu'il ne comprend pas un mot. L'internationalisation (i18n) n'est pas simplement une « traduction de boutons », c'est un pont entre votre code et des millions d'utilisateurs dans le monde entier.

Dans cet article, nous allons voir comment implémenter correctement l'internationalisation Kotlin dans des projets de toutes tailles : des applications Android aux services serveur avec Ktor. Vous apprendrez à éviter les erreurs courantes, à utiliser Kotlin Multiplatform pour la logique partagée et pourquoi les « chaînes magiques » sont un fléau.

Les bases de l'i18n en Kotlin : du simple au complexe

Fichiers de ressources : le fondement de la localisation

La façon la plus fiable d'organiser la localisation d'une application Kotlin est de placer tous les littéraux de chaîne dans des fichiers de ressources séparés. Dans Android Studio, ce sont les fichiers strings.xml standard, mais pour du Kotlin pur (backend, desktop), nous pouvons utiliser des fichiers .properties ou JSON.

Exemple pour Android :

// res/values/strings.xml (russe — par défaut)
<resources>
    <string name="app_name">Mon application</string>
    <string name="welcome_message">Bienvenue, %s !</string>
    <string name="points">Vous avez %d points</string>
</resources>

// res/values-en/strings.xml (anglais)
<resources>
    <string name="app_name">My App</string>
    <string name="welcome_message">Welcome, %s!</string>
    <string name="points">You have %d points</string>
</resources>

Dans le code, on y accède via context.getString() :

val userName = "Alexei"
val message = context.getString(R.string.welcome_message, userName)
// Résultat : "Bienvenue, Alexei !" (ou "Welcome, Alexey!" en anglais)

Remarque : nous utilisons %s pour les chaînes et %d pour les nombres. Ne concaténez jamais les chaînes manuellement — en japonais ou en arabe, l'ordre des mots peut être différent.

Gestion des formes plurielles

La langue russe est célèbre pour ses règles de déclinaison complexes : 1 балл, 2 балла, 5 баллов. En anglais, c'est plus simple : 1 point, 2 points. L'internationalisation Kotlin doit en tenir compte.

Sous Android, on utilise <plurals> :

// strings.xml
<plurals name="points_count">
    <item quantity="one">%d point</item>
    <item quantity="few">%d points</item>
    <item quantity="many">%d points</item>
    <item quantity="other">%d points</item>
</plurals>

// Dans le code
val points = 3
val text = resources.getQuantityString(R.plurals.points_count, points, points)
// "3 points"

Pour le Kotlin serveur, vous pouvez utiliser la bibliothèque icu4j ou écrire votre propre résolveur simple. La règle principale : ne codez jamais en dur les textes avec des nombres.

Internationalisation dans Kotlin Multiplatform (KMP)

Si vous développez une application multiplateforme avec Kotlin Multiplatform, la tâche se complexifie. Le code commun n'a pas accès aux ressources Android. La solution consiste à utiliser une interface commune et des implémentations spécifiques à chaque plateforme.

Architecture pour KMP

Créez une classe expect dans le module commun :

// commonMain
expect class StringProvider {
    fun getString(key: String, vararg args: Any): String
}

// Utilisation dans le code commun
class Greeting(private val strings: StringProvider) {
    fun greet(name: String): String {
        return strings.getString("welcome", name)
    }
}

Implémentation pour Android :

Blogs

Book Recommendations