PTC

Comment localiser votre application Android avec l’IA

Configurez vos dossiers values/, traduisez votre fichier strings.xml par IA, changez de langue en Kotlin, puis téléchargez des captures d’écran pour que PTC (Private Translation Cloud) révise l’application Android en cours d’exécution. À la fin de ce guide, vous disposerez d’une application Android multilingue prête pour la production, avec chaque langue cible vérifiée par une relecture visuelle avant la sortie.

Ce guide suppose que vous avez un projet Android existant dans Android Studio. Si vous partez de zéro, commencez par créer un nouveau projet avec le modèle « Empty Activity ».

Comment Android résout les ressources localisées à partir des dossiers values-{locale}/

Android organise les ressources localisées dans des dossiers res/values-{locale}/ au sein de app/src/main/. Le dossier par défaut est values/, qui contient les chaînes de la langue source. Chaque langue cible reçoit son propre dossier values-{locale}/.

app/src/main/res/
  values/strings.xml        # source language (typically English) - REQUIRED
  values-es/strings.xml     # Spanish
  values-fr/strings.xml     # French
  values-de/strings.xml     # German
  values-ja/strings.xml     # Japanese
  values-zh-rCN/strings.xml # Simplified Chinese (region-specific)

Incluez toujours le dossier values/ par défaut sans code de langue. Il s’agit de votre solution de repli (fallback). Android choisit le bon dossier au moment de l’exécution en fonction de la locale de l’appareil de l’utilisateur. Si la langue de l’utilisateur est l’espagnol mais que vous n’avez pas de dossier values-es/, Android se replie sur values/. Ce repli est silencieux. Une application partiellement traduite affichera un mélange d’anglais et d’espagnol, sans erreur.

Les codes de locale suivent la norme BCP 47. es pour l’espagnol, pt-rBR pour le portugais brésilien (notez le préfixe r pour la région), zh-rCN pour le chinois simplifié.

Déplacez chaque chaîne destinée à l’utilisateur dans strings.xml

Utilisez toujours des ressources de chaînes stockées dans strings.xml. Ne codez jamais de texte en dur directement dans le code Kotlin/Java ou dans un attribut de mise en page android:text=. Le texte codé en dur ne peut pas être traduit.

Déplacez chaque chaîne destinée à l’utilisateur dans res/values/strings.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">My Notes</string>
    <string name="welcome_message">Welcome, %1$s!</string>
    <string name="notes_count_zero">No notes yet</string>

    <plurals name="notes_count">
        <item quantity="one">%d note</item>
        <item quantity="other">%d notes</item>
    </plurals>

    <string-array name="categories">
        <item>Personal</item>
        <item>Work</item>
        <item>Travel</item>
    </string-array>
</resources>

Référencez chaque chaîne en Kotlin via l’ID R.string.* généré :

val appName = stringResource(R.string.app_name)
val welcome = stringResource(R.string.welcome_message, userName)
val counts = pluralStringResource(R.plurals.notes_count, notes.size, notes.size)

Conventions clés respectées par PTC :

  • Espaces réservés positionnels. Utilisez %1$s, %2$d, %3$f au lieu de %s, %d. Certaines langues nécessitent de réordonner les arguments. Les espaces réservés positionnels rendent cela possible. PTC les reconnaît et les préserve automatiquement.
  • <plurals> pour les noms dénombrables. N’écrivez pas if (count == 1) "1 note" else "$count notes" dans le code. Utilisez <plurals> avec les quantités one / other / few / many. PTC génère les bonnes catégories de pluriels par langue cible (1 forme pour le japonais, 2 pour l’anglais, 4 pour le polonais, 6 pour l’arabe).
  • <string-array> pour les listes statiques. PTC traduit chaque élément tout en préservant la structure du tableau.
  • Échappez les apostrophes (\') et les guillemets (\") pour éviter les erreurs d’analyse XML.

Traduisez strings.xml avec PTC en 5 étapes

  1. Lancez un projet PTC dans votre tableau de bord. Téléchargez votre fichier values/strings.xml, définissez vos chemins de sortie et choisissez les langues cibles. PTC en prend en charge plus de 40. Pendant l’essai gratuit, vous pouvez en sélectionner deux. PTC utilise la langue source pour choisir le bon moteur de traduction automatique et pour ignorer les chaînes où la source est identique à la cible.
  2. Révisez la description de l’application générée automatiquement. PTC crée une courte description de votre application Android à partir du fichier téléchargé. Modifiez-la pour mieux décrire votre application et votre public. PTC utilise ce contexte pour adopter le ton et le niveau de formalité appropriés pour chaque langue.
  3. Téléversez éventuellement vos traductions existantes. Si vous avez déjà des fichiers values-*/strings.xml traduits, téléversez-les afin que PTC puisse s’adapter à votre style actuel. Sinon, traduisez à partir de zéro.
  4. Traduisez et révisez. PTC respecte chaque clé name= (vos clés ne changent jamais), chaque espace réservé positionnel, et génère les catégories de pluriels correctes par cible. Si une traduction dépasse vos limites de longueur, PTC la signale pour que rien ne vous échappe. Modifiez n’importe quelle chaîne sur place ou demandez à PTC de la retraduire en tenant compte de la contrainte.
  5. Téléchargez les fichiers strings.xml traduits par langue sous forme de ZIP. Chaque fichier est structurellement identique à votre source. Mêmes clés, mêmes tableaux, mêmes balises de pluriels. Valeurs traduites.

Placez les fichiers strings.xml traduits dans values-{locale}/

Déposez chaque fichier traduit dans le dossier values-{locale}/ correspondant :

app/src/main/res/values-es/strings.xml  # from PTC
app/src/main/res/values-fr/strings.xml  # from PTC
app/src/main/res/values-de/strings.xml  # from PTC

Recompilez le projet. Android récupère automatiquement les nouvelles ressources. Pour vérifier, changez la langue de votre émulateur ou de votre appareil et relancez l’application. L’interface utilisateur devrait apparaître dans la nouvelle langue.

Ajoutez un sélecteur de langue intégré avec AppCompatDelegate.setApplicationLocales()

De nombreuses applications nécessitent un sélecteur de langue intégré pour que les utilisateurs puissent passer outre la locale de l’appareil. Depuis Android 13 (API 33), l’approche canonique utilise AppCompatDelegate.setApplicationLocales() :

import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat

fun setAppLanguage(languageTag: String) {
    val locales = LocaleListCompat.forLanguageTags(languageTag)
    AppCompatDelegate.setApplicationLocales(locales)
}

// Usage in a settings screen
binding.spanishButton.setOnClickListener {
    setAppLanguage("es")
}
binding.frenchButton.setOnClickListener {
    setAppLanguage("fr")
}

Pour déclarer les langues prises en charge par votre application (afin que le sélecteur de locale du système les affiche), ajoutez un fichier locales_config.xml :

<!-- res/xml/locales_config.xml -->
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
    <locale android:name="en"/>
    <locale android:name="es"/>
    <locale android:name="fr"/>
    <locale android:name="de"/>
    <locale android:name="ja"/>
</locale-config>

Et référencez-le dans le fichier AndroidManifest.xml :

<application
    android:localeConfig="@xml/locales_config"
    ... >

Pour les applications ciblant Android 12 ou une version antérieure, l’ancienne approche consiste à enregistrer le choix de l’utilisateur dans SharedPreferences et à l’appliquer à chaque démarrage de l’application :

fun setLocale(context: Context, languageCode: String) {
    // Save the user's choice
    val prefs = context.getSharedPreferences("Settings", Context.MODE_PRIVATE)
    prefs.edit().putString("app_language", languageCode).apply()

    // Apply the new locale
    val locale = Locale(languageCode)
    Locale.setDefault(locale)
    val config = Configuration()
    config.setLocale(locale)
    context.resources.updateConfiguration(config, context.resources.displayMetrics)

    // Restart the activity so changes take effect
    if (context is Activity) {
        context.recreate()
    }
}

Ensuite, chargez la langue enregistrée à chaque lancement de l’application :

override fun onCreate() {
    super.onCreate()
    val prefs = getSharedPreferences("Settings", Context.MODE_PRIVATE)
    val languageCode = prefs.getString("app_language", "en") ?: "en"
    val locale = Locale(languageCode)
    Locale.setDefault(locale)
    val config = Configuration()
    config.setLocale(locale)
    resources.updateConfiguration(config, resources.displayMetrics)
}

Cela persiste entre les sessions et fonctionne correctement après la publication sur Google Play.

Utilisez start/end (et non left/right) pour les langues s’écrivant de droite à gauche

Pour l’arabe, l’hébreu, le persan et l’ourdou, utilisez start et end au lieu de left et right dans vos mises en page afin qu’Android applique automatiquement l’effet miroir :

<!-- Instead of this -->
<TextView android:layout_marginLeft="16dp" />

<!-- Use this -->
<TextView android:layout_marginStart="16dp" />

Dans Jetpack Compose, utilisez Arrangement.Start au lieu de Arrangement.Absolute.Left. Activez « Forcer la direction de la mise en page de droite à gauche » dans les Options pour les développeurs pour tester l’effet miroir sans changer la langue de l’appareil.

Automatisez la traduction Android à chaque version avec Git ou l’API PTC

Pour les projets actifs, relancer manuellement la traduction à chaque version n’est pas viable. PTC vous propose deux façons d’automatiser le processus.

Intégration Git (recommandée). Allez dans Settings > Merge Requests dans le tableau de bord PTC et cliquez sur Add Git Integration pour connecter votre dépôt GitHub, GitLab ou Bitbucket. Fournissez un jeton d’accès avec les permissions de lecture et d’écriture et choisissez les branches que PTC doit surveiller. À partir de là, PTC détecte les changements, traduit les chaînes nouvelles ou mises à jour et ouvre une merge request pour votre révision.

Intégration API. Allez dans Settings > Manage API Tokens et créez un jeton d’accès. Utilisez ensuite l’API PTC au sein de votre CI existante :

# .github/workflows/translate.yml
name: PTC translate
on:
  push:
    branches: [main]
    paths:
      - 'app/src/main/res/values/strings.xml'
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Trigger PTC translation
        run: |
          curl -X POST https://api.ptc.wpml.org/v1/projects/${{ secrets.PTC_PROJECT_ID }}/sync \
            -H "Authorization: Bearer ${{ secrets.PTC_API_KEY }}"

L’intégration Git et l’intégration API sont des fonctionnalités Pro disponibles lorsque vous activez le Pay-As-You-Go. Consultez la référence de l’API PTC pour les points de terminaison, les webhooks et le modèle d’intégration complet.

Relecture visuelle de votre application Android traduite : livrez sans contrôle qualité manuel par langue

Une fois que PTC a traduit votre fichier strings.xml, le travail n’est pas terminé. Un libellé traduit peut déborder d’un bouton en allemand. « Submit » peut être traduit par un nom en français alors que l’interface nécessitait un verbe. Une chaîne anglaise codée en dur que quelqu’un a oublié d’envelopper dans getString(R.string.welcome) restera visiblement non traduite dans l’application Android en cours d’exécution. Détecter ces problèmes signifie traditionnellement effectuer un contrôle qualité manuel dans chaque langue cible. C’est l’étape la plus lente et la plus coûteuse de la localisation mobile.

AI Visual QA de PTC remplace cette étape. Pour les applications Android natives (qui ne s’exécutent pas dans un navigateur, le flux d’extension ne s’applique donc pas), utilisez le téléchargement de captures d’écran. Capturez les écrans critiques de l’application en cours d’exécution dans chaque langue cible (paramètres, flux principal, cas limites) et téléchargez-les sur PTC. L’IA de vision de PTC inspecte chaque écran et signale :

  • Les problèmes que PTC peut corriger dans strings.xml. PTC retraduit le sens du verbe, choisit un synonyme plus court qui s’adapte à la largeur du bouton, régénère un pluriel tenant compte de la mise en page. PTC ouvre une PR avec les corrections. Cela ne nécessite aucun travail de votre part.
  • Les problèmes situés dans votre code Kotlin. Enveloppe getString() manquante, chaînes codées en dur, concaténation de phrases qui devrait utiliser String.format() avec des espaces réservés. PTC génère un prompt prêt à être collé pour Cursor ou Claude Code. Votre équipe de développement enveloppe les chaînes en quelques secondes.

Le résultat : vous livrez une application Android multilingue vérifiée à chaque version. Vous n’obtenez pas seulement un fichier strings.xml traduit suivi d’un long contrôle qualité manuel.

Traduisez votre fiche Play Store, vos notes de version et vos notifications push

La description de votre fiche Play Store, les notes de version « Nouveautés » et le texte des notifications push vivent en dehors de strings.xml. L’outil Paste to Translate de PTC gère ces textes dans le même projet. Collez le texte source dans le tableau de bord PTC, choisissez les langues cibles et récupérez des traductions qui utilisent le même glossaire et la même voix de marque que vos chaînes intégrées à l’application. Ensuite, dans la Google Play Console, allez dans Store Presence > Main Store Listing > Translations, ajoutez les descriptions courtes et longues traduites, puis enregistrez.

Traduisez le contenu utilisateur intégré avec l’API PTC

Le chat intégré, les publications sociales et les avis générés par les utilisateurs nécessitent une traduction au fur et à mesure de l’arrivée du contenu. L’API REST PTC traduit ce contenu à la demande avec une authentification par jeton Bearer, en utilisant le même glossaire et la même voix de marque que vos traductions strings.xml.

Testez votre application Android localisée à chaque version

Changez la langue de votre appareil dans les Paramètres, ou utilisez le sélecteur de langue de l’émulateur d’Android Studio. Pour chaque langue, vérifiez les textes trop longs pour les éléments de l’interface, les traductions manquantes (repli silencieux vers la langue par défaut), le formatage incorrect des dates/nombres/devises et les problèmes de mise en page avec des textes plus longs. Pour les langues s’écrivant de droite à gauche, activez « Forcer la direction de la mise en page de droite à gauche » dans les Options pour les développeurs.

Tarification de la traduction Android après l’essai gratuit

Pay-As-You-Go, sans abonnement. Vous ne payez que pour ce que vous traduisez. Les 500 premiers mots de chaque mois sont gratuits, et le tarif diminue à mesure que vous traduisez davantage. Utilisez le calculateur de prix pour obtenir une estimation.

Traduisez maintenant votre véritable application Android

Commencez votre essai gratuit de 30 jours — 20.000 mots vers 2 langues, sans carte bancaire. Téléchargez votre fichier strings.xml, traduisez-le en quelques minutes, puis téléchargez des captures d’écran et laissez PTC vérifier l’application en cours d’exécution.

Voir aussi :