Skip to main content

Internationalisation - i18n

Vue d'ensemble

Tranoo supporte 3 langues : français (défaut), anglais, et arabe, alignées sur toutes les applications de l'écosystème.

Langues supportées

LangueCodeStatut
FrançaisfrLangue par défaut
AnglaisenSupport complet
ArabearSupport complet

Architecture par composant

Web (tranoo_landing - Next.js)

Bibliothèque

  • next-intl - Framework internationalisation Next.js
  • Version : ^4.13.1

Fichiers de traduction

messages/
├── fr.json # Français
├── en.json # Anglais
└── ar.json # Arabe

Configuration

  • i18n/routing.ts - Configuration routing
  • i18n/request.ts - Configuration requêtes
  • middleware.ts - Middleware Next.js

Sélecteur de langue

  • Composant : components/LocaleSwitcher.tsx
  • Emplacement : Login + sidebar
  • Cookie : NEXT_LOCALE (pas de préfixe /fr/ dans l'URL)

Pages migrées (phase 1)

  • /login
  • Section demandes de vérification transitaire
  • Page détail vérification transitaire
  • Erreurs API mappées via lib/i18n-helpers.ts

Utilisation

import { useTranslations } from 'next-intl';

const t = useTranslations("verification");
t("maCle")

Backend (Express - Node.js)

Codes d'erreur stables

  • Fichier : src/utils/errorCodes.js
  • Codes constants indépendants de la langue

Messages localisés

  • Fichier : src/utils/apiResponse.js
  • Objet : LOCALIZED_MESSAGES
  • Mapping codes → messages par langue

Locale

  • Header : Accept-Language
  • Envoyé par le web via axios
  • Détection automatique de la langue

Contrôleurs migrés

  • transitaireVerificationController.js
  • Middleware CAPTCHA

Réponse type

{
"success": false,
"code": "TRANSITAIRE_VERIF_PENDING",
"message": "Une demande est déjà en cours d'examen..."
}

Mobile (Flutter - tranoo + tranoo_pro)

Fichiers de traduction

lib/l10n/
├── app_fr.arb # Français
├── app_en.arb # Anglais
└── app_ar.arb # Arabe

Configuration

  • lib/l10n/ - Configuration internationalisation
  • pubspec.yaml - Dépendances flutter_localizations

Mapping API

  • Fichier : lib/utils/api_error_message.dart
  • Mapping codes API → AppLocalizations

Régénération

flutter gen-l10n

Nouveaux codes API (exemples)

CodeUsage
CAPTCHA_INVALIDTurnstile échoué
TRANSITAIRE_VERIF_PENDINGDemande déjà en cours
TRANSITAIRE_VERIF_SUBMIT_SUCCESSEnvoi dossier OK

Workflow d'ajout de traduction

Web (Next.js)

  1. Ajouter la clé dans tous les fichiers JSON :

    • messages/fr.json
    • messages/en.json
    • messages/ar.json
  2. Utiliser dans un composant :

const t = useTranslations("verification");
t("maCle")

Backend (Node.js)

  1. Ajouter le code dans src/utils/errorCodes.js

  2. Ajouter le message dans src/utils/apiResponse.js :

LOCALIZED_MESSAGES: {
MON_CODE: {
fr: "Message en français",
en: "Message in English",
ar: "رسالة بالعربية"
}
}
  1. Utiliser dans le contrôleur :
return res.status(400).json({
success: false,
code: "MON_CODE",
message: getLocalizedMessage("MON_CODE", locale)
});

Mobile (Flutter)

  1. Ajouter la clé dans tous les fichiers ARB :

    • lib/l10n/app_fr.arb
    • lib/l10n/app_en.arb
    • lib/l10n/app_ar.arb
  2. Régénérer :

flutter gen-l10n
  1. Utiliser :
AppLocalizations.of(context)!.maCle

Codes d'erreur API existants

CodeDescription
CAPTCHA_INVALIDCAPTCHA Turnstile invalide
TRANSITAIRE_VERIF_PENDINGDemande vérification déjà en cours
TRANSITAIRE_VERIF_SUBMIT_SUCCESSEnvoi dossier vérification réussi
AUTH_INVALID_TOKENToken d'authentification invalide
AUTH_TOKEN_EXPIREDToken expiré
USER_NOT_FOUNDUtilisateur non trouvé
INVALID_CREDENTIALSIdentifiants invalides

État de migration i18n

ComposantÉtatReste à faire
WebPartielDashboard (notifications, inscription-agent-com), labels sidebar, PDF transitaire
BackendPartielÉtendre LOCALIZED_MESSAGES aux autres contrôleurs
MobileComplet (base)Vérifier cohérence codes API, compléter traductions manquantes

Les pages migrées côté web sont listées dans la section Web ci-dessus.

Bonnes pratiques

  1. Toujours ajouter les traductions dans les 3 langues
  2. Utiliser des codes stables pour les erreurs API
  3. Ne pas hardcoder les messages dans le code
  4. Régénérer les fichiers Flutter après modification ARB
  5. Tester les 3 langues avant déploiement

Voir aussi