|
Documentation
Réserver une démoPlateforme
PlateformeMCPCLIAPIWorkflows
Guides
Changelog

Localisation

  • Aperçu
  • API de traduction
  • Localisation d’applications web
  • Localisation d’apps mobiles
  • iOS avec String Catalogs
  • Android avec strings.xml
  • Localisation des e-mails
  • Contenu statique (ex. : .md, .json)
  • Next.js avec Markdoc
  • Rails avec i18n

Workflows

  • Configurer un moteur avec le MCP
  • Triage Jira
  • CI/CD

Localisation d'une application Android avec strings.xml

Le CLI de Lingo.dev traduit les ressources string Android (strings.xml) à l’aide d’un moteur de localisation configuré. Le type de bucket android du CLI prend en charge nativement les éléments <resources>, <string>, <string-array> et <plurals>, tout en préservant la structure XML et en générant les bonnes catégories de pluriel pour chaque langue cible.

Ce guide vous montre comment localiser une application Android de bout en bout : configurer le CLI, traduire en local et automatiser le tout avec GitHub Actions pour livrer les traductions à chaque push.

Dépôt de démonstration

Clonez ou forkez lingodotdev/android-app-localization-example pour suivre ce guide pas à pas. Le dépôt contient un projet Android fonctionnel avec des ressources string, une configuration du CLI Lingo.dev et un workflow GitHub Actions.

Comment fonctionne la localisation Android#

Android s’appuie sur une convention de répertoires de ressources où chaque langue dispose de son propre répertoire values-[locale]/. Le système charge le bon fichier strings.xml à l’exécution, en fonction de la langue définie sur l’appareil.

text
app/src/main/res/
  values/              # Default (source) strings
    strings.xml
  values-es/           # Spanish
    strings.xml
  values-fr/           # French
    strings.xml
  values-ja/           # Japanese
    strings.xml

Un fichier strings.xml standard contient trois types d’éléments :

xml
<resources>
  <!-- Simple strings -->
  <string name="app_name">My App</string>
  <string name="welcome_message">Welcome back!</string>

  <!-- String arrays -->
  <string-array name="planets">
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
  </string-array>

  <!-- Plurals -->
  <plurals name="items_count">
    <item quantity="one">%d item</item>
    <item quantity="other">%d items</item>
  </plurals>
</resources>

Le CLI analyse ces trois types d’éléments, traduit leur contenu via le moteur de localisation, puis écrit un fichier par langue dans les bons répertoires values-[locale]/.

Prérequis#

1

Créer un moteur de localisation

À chaque exécution, le CLI envoie le contenu à un moteur de localisation : la configuration qui détermine le modèle de LLM, le glossaire, la voix de marque et les instructions à appliquer. Créez-en un dans le dashboard Lingo.dev et générez une clé API.

2

Vérifier Node.js

Le CLI nécessite Node.js 18 ou une version ultérieure :

bash
node -v
3

Configurer votre projet Android

Votre projet doit inclure un fichier strings.xml par défaut dans app/src/main/res/values/. Android Studio crée ce fichier lorsque vous démarrez un nouveau projet. Consultez le guide de localisation d’Android pour configurer les répertoires de ressources.

Configurer le CLI#

Créez un fichier i18n.json à la racine du projet. Le bucket android indique au CLI d’analyser les ressources XML Android et de créer des fichiers distincts pour chaque langue :

json
{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.15",
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja"]
  },
  "buckets": {
    "android": {
      "include": ["app/src/main/res/values-[locale]/strings.xml"]
    }
  }
}

L’espace réservé [locale] est résolu à l’exécution avec le code de chaque langue configurée. Le CLI remplace votre langue source dans le modèle : avec source: "en", il recherche donc values-en/strings.xml. Les langues cibles génèrent values-es/strings.xml, values-fr/strings.xml, etc.

Faire le pont avec le répertoire de langue par défaut#

Android stocke les chaînes par défaut dans values/ (sans suffixe de langue), mais le CLI résout [locale] de façon littérale et recherche values-en/strings.xml. Créez un lien symbolique pour faire le lien entre ces deux conventions :

bash
cd app/src/main/res
ln -s values values-en

Les chaînes source sont ainsi visibles à la fois dans values/strings.xml (où Android les attend) et dans values-en/strings.xml (où le CLI les cherche). Versionnez le lien symbolique dans votre dépôt : git gère nativement les symlinks sur macOS et Linux.

Windows

Sous Windows, Git peut récupérer les liens symboliques sous forme de simples fichiers texte, selon votre configuration. Si vous utilisez Windows, exécutez git config core.symlinks true avant de cloner le dépôt, ou copiez le répertoire values/ vers values-en/ à la place.

Plusieurs fichiers de ressources

Si votre projet répartit les chaînes sur plusieurs fichiers (par exemple strings.xml et arrays.xml), listez-les tous. Le lien symbolique couvre tout le répertoire, donc tous les fichiers présents dans values/ sont accessibles via values-en/ :

json
{
  "buckets": {
    "android": {
      "include": [
        "app/src/main/res/values-[locale]/strings.xml",
        "app/src/main/res/values-[locale]/arrays.xml"
      ]
    }
  }
}

Traduire en local#

Définissez votre clé API, puis lancez le CLI :

bash
export LINGO_API_KEY="your-api-key"
npx lingo.dev@latest run

Le CLI lit votre fichier source strings.xml, repère les entrées non traduites à l’aide du lockfile, traduit uniquement le delta via votre moteur de localisation, puis écrit les résultats dans les répertoires cibles values-[locale]/. Ouvrez n’importe quel fichier cible pour voir les chaînes traduites.

Pour cibler une langue en particulier pendant le développement :

bash
npx lingo.dev@latest run --target-locale es

Pluriels#

Android utilise des éléments <plurals> avec des chaînes de quantité CLDR (zero, one, two, few, many, other) pour gérer les formes plurielles. Chaque langue a ses propres catégories de pluriel : l’anglais en utilise deux (one et other), le russe en utilise quatre et l’arabe six.

Le CLI préserve la structure <plurals> pendant la traduction et génère les entrées de quantité appropriées pour chaque langue cible. Une entrée source avec deux catégories :

xml
<plurals name="messages_count">
  <item quantity="one">%d new message</item>
  <item quantity="other">%d new messages</item>
</plurals>

Le CLI génère les bonnes catégories pour chaque langue cible. Le moteur de localisation sait quelles règles de pluriel CLDR s’appliquent à chaque langue et ne génère que les catégories requises.

Verrouillage des clés#

Certaines chaînes doivent rester identiques dans toutes les langues : noms de marque, endpoints d’API ou formats. Utilisez le verrouillage des clés pour recopier ces valeurs sans les traduire :

json
{
  "buckets": {
    "android": {
      "include": ["app/src/main/res/values-[locale]/strings.xml"],
      "lockedKeys": ["app_name", "api_base_url"]
    }
  }
}

Les clés verrouillées sont copiées du fichier source vers tous les fichiers cibles, sans passer par le pipeline de traduction.

Automatiser avec GitHub Actions#

Ajoutez un fichier de workflow à l’emplacement .github/workflows/translate.yml pour lancer la traduction à chaque push :

Les traductions sont commitées directement sur main : zéro friction, idéal pour les petites équipes :

yaml
name: Translate
on:
  push:
    branches: [main]
permissions:
  contents: write
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

Enregistrez votre clé API sous LINGODOTDEV_API_KEY dans Settings > Secrets and variables > Actions de votre dépôt GitHub.

Vérifier avant le déploiement#

Utilisez l’option --frozen comme garde-fou avant déploiement pour vous assurer qu’aucune chaîne non traduite n’arrive en production. Le CLI renvoie un code de sortie non nul si certaines entrées doivent encore être traduites :

bash
npx lingo.dev@latest run --frozen

Ajoutez cette vérification comme étape CI distincte avant votre build :

yaml
- name: Verify translations
  run: npx lingo.dev@latest run --frozen

Étapes suivantes#

Localisation d’applications mobiles
Vue d'ensemble de toutes les plateformes mobiles : iOS, Android, Flutter, React Native
Workflows CI/CD
Modèles GitHub Actions, GitLab CI et Bitbucket Pipelines
Glossaires
Empêchez la traduction des noms de marque et des termes techniques
Verrouillage des clés
Copiez des valeurs spécifiques sans les traduire

Cette page vous a-t-elle été utile ?

Max PrilutskiyMax Prilutskiy·Mis à jour il y a 3 mois·5 min de lecture