Comment traduire son application ? I18N + React

Parlez la langue de vos clients ou mourez

20 %.

C’est le nombre de conversions que vous ratez lorsque votre app d’e-commerce n’est pas disponible dans la langue maternelle d’un segment d’utilisateurs 🥲 (source).

Et même si votre app est génialissime, il y a très peu de chances qu’un internaute aille apprendre une langue nouvelle juste pour l’utiliser.

Si vous souhaitez augmenter votre CA, une application bilingue, multilingue ou disponible dans toutes les langues est un atout de taille.

Et heureusement, traduire une application mobile est assez simple grâce à l’internationalisation.

L’internationalisation, ou i18N, consiste à concevoir des logiciels facilement adaptables aux différentes langues. Cerise sur le gâteau : l’i18N ne nécessite pas de modifier le code source de votre app.

Alors pourquoi s’en priver ?

On vous a concocté un guide complet sur comment traduire votre application à l’aide du framework i18N.

Let’s go.

Pourquoi i18N et pas une autre librairie d’internationalisation ?

Soyons d’accord : vous pouvez traduire automatiquement vos contenus avec un logiciel de traduction automatique comme Google Traduction.

C’est rapide et pas cher.

Par contre, les résultats sont parfois assez douteux.

Raison pour laquelle les développeurs optent pour une autre solution : les frameworks React.

Il y en a deux :

  • React-intl
  • React-i18next.

Notre choix s’est porté sur l’outil de traduction React-i18next à cause de sa kyrielle d’avantages :

  • c’est une bibliothèque est intégralement écrite en JavaScript ;
  • React-i18N abrite un système de traduction automatique complet pour plusieurs langues différentes ;
  • c’est une bibliothèque aisément scalable grâce à sa capacité de séparer chaque traduction en plusieurs fichiers et de les charger à la demande.

Sans transition, voyons ensemble comment traduire votre application en plusieurs langues étrangères de A à Z.

5 étapes pour traduire intégralement les textes d’une application en plusieurs langues

1 – Installez les packages

Afin de traduire votre application mobile, vous aurez besoin d’installer tous les packages qui suivent :

  • I18N, la star du jour ;
  • React-i18n, qui vous permet d’utiliser toutes les fonctionnalités d’i18N dans votre application mobile react ;
  • I18next-browser-languagedetector, qui permet de détecter la langue de l’utilisateur depuis son navigateur ;
  • I18next-http-backend, que l’on utilisera pour charger les fichiers de traductions.

Pour les installer, rien de plus simple : copiez-collez la commande suivante dans votre invite de commande.

npm install i18next react-i18next i18next-browser-languagedetector i18next-http-backend

Ps : n’oubliez pas de démarrer votre serveur node.js avant de saisir cette instruction, sinon ça ne fonctionnera pas. Si vous ne savez pas ce qu’est node.js, on vous en parle en détail ici.

2 – Créez les fichiers de traduction

Vos textes à traduire ne seront pas rédigés directement dans le code source.

Vous pouvez le faire, mais c’est une très mauvaise idée.

À la place, voici ce qu’on vous propose : créer des fichiers pour chaque langue de traduction.

Suivez les instructions suivantes à la lettre pour que ça fonctionne :

  • Allez dans le répertoire « public » de votre app » ;
  • Créez-y un dossier « locales » ;
  • Pour chaque langue-cible que vous voulez intégrer, créer un nouveau fichier dans le dossier « locales ». Nommez chaque fichier selon les codes correspondants desdites langues (EN, FR, SP, etc.) ;
  • Enfin, dans chacun des dossiers de langues, créez un fichier « translation.json ».

Voici l’architecture que vous devriez normalement avoir :

Architecture fichier i-18next
Architecture fichier i-18next

3 – Initialiser i18next

Maintenant que les packages et les fichiers de traduction sont prêts, initialisons i18N.

Pour cela, créez un nouveau fichier i18n.js dans le répertoire src et ajoutez-y le code suivant :

 

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend';
i18n
    .use(Backend)
    .use(LanguageDetector)
    .use(initReactI18next)
    .init({
        debug: true,
        fallbackLng: 'en',
        });
export default i18n;

 

Parmi toutes ces lignes, une est assez intéressante :

fallbackLng :’en’;

Concrètement, elle dit à l’application : « si tu ne trouves pas de fichier de traduction pour la langue de recherchée par l’internaute, affiche les contenus en anglais. ».

Sachant qu’un quart des internautes au monde comprennent l’anglais, c’est un choix judicieux d’en faire la langue par défaut.

Une fois que vous avez créé ce fichier, allez dans le fichier index.js, lui aussi situé dans le répertoire “src”. Rajoutez les lignes suivantes :

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import './i18n'; // <--- add this

// ... other code ...

Grâce au composant « Suspense », nous allons pouvoir charger les traductions de manière asynchrone. Sans lui, si une ressource n’est pas disponible, votre app va afficher un vilain message d’erreur à l’utilisateur.

Ouvrez le fichier App.js et rajoutez les importations suivantes :

import { Suspense } from 'react';
import { useTranslation} from 'react-i18next';
// ...

Maintenant, modifions la fonction App() :

import { Suspense } from 'react';
import { useTranslation } from 'react-i18next';
function App() {
  const { t, i18n } = useTranslation();
  return (
    <div>
      <h1></h1>
    </div>
  );
}
export default function WrappedApp() {
  return (
    <Suspense fallback="...loading">
      <App />
    </Suspense>
  )
}

Prêtez attention à la ligne :

const { t, i18n } = useTranslation() ;

‘T’ est la fonction que nous allons utiliser pour traduire nos textes.

‘I18n’ est l’objet que nous allons utiliser pour charger la liste des langues et les interchanger.

4 – Traduisons nos textes pleins avec i18N

Enfin, le moment tant attendu est arrivé : traduisons nos textes.

Pour ça, commencez (logiquement) par ajouter des traductions dans chacun de vos fichiers translation.json.

Voici comment faire avec la version anglaise.

{
  "main": {
    "header": "Welcome to the app!"
  }
}

« header » ici est la clé de traduction que l’on va utiliser.

Si vous souhaitez traduire d’autres contenus, changez juste la clé et reprenez le même processus.

Refaite la même chose avec les autres langues et c’est bon.

Maintenant, il est temps de les utiliser.

Rien de plus simple : nous allons passer les noms des clés des textes à traduire à la fonction « t ». Au moment où le mobinaute voudra charger les contenus, ce sera la valeur de la clé qui sera affichée automatiquement.

Maintenant, allez dans le fichier src/App.js et ajoutez une traduction pour la balise h1 :

// ... imports ...
function App() {
    const { t, i18n } = useTranslation();
    return (
    <div>
        <h1>{t('main.header')}</h1>
    </div>
    );
}
// ... other code ...

Ensuite, rebootez l’application en entrant la commande npm start dans votre invite de commande. Puis rendez-vous sur votre serveur local (http://localhost:3000) et vérifiez : tada, vos textes sont traduits.

Pour afficher la traduction de votre choix, allez dans le fichier i18n.js et ajoutez la commande :

i18n.changeLanguage('ES');

ES ici signifie espagnol. Mais si vous avez une autre langue en tête, remplacez ES par ladite langue.

Ça y est ! Vous venez de créer votre premier contenu traduit. Vous n’aurez plus qu’à insérer les traductions de chaque contenu dans les fichiers translation.js correspondants.

5 – Faire appel à une agence de développement web ou à des traducteurs freelances

Ok.

Vous savez maintenant comment traduire votre app.

Sauf que vous vous en doutez, si votre app comporte plusieurs interfaces remplies de textes… créer votre dictionnaire multilingue va vous prendre des mois.

Sans compter la gestion des balises 🤯

Vous avez 2 options :

  • soit vous mobilisez votre équipe pendant plusieurs semaines sur ça ;
  • soit vous faites appel à des traducteurs professionnels en freelance ou à une agence de développement web et économisez du temps.

À vous de voir.

Mais si vous voulez en discuter, n’hésitez pas à faire un message à notre chef de projet informatique. En fonction de votre situation, il vous aiguillera vers la meilleure solution (et c’est sans engagement 😁).

C’est par ici.

3+1 Fails récurrents de traduction d’app à éviter à tout prix

Avant de nous séparer, parlons des menaces qui planent sur vos tentatives de traduction.

Et ils sont plus nombreux et plus vicieux que vous ne pouvez le croire.

On vous en a sélectionné les 4 plus dangereux.

1 – Oublier le formatage et la culture des pays visés

Aux USA, ils n’affichent pas le temps comme nous.

Tandis que nous sommes habitué·e·s au format jour/mois/années, les américains préfèrent le format jour/année/mois.

Pareil pour le calendrier. Pour nous, la semaine commence le lundi, contre dimanche chez l’Oncle Sam.

Pourquoi je vous parle de tout ça ? Pour vous mettre la puce à l’oreille sur les erreurs de formatage et de métriques.

Et elles ne concernent pas que l’heure. La monnaie, les fuseaux horaires, les unités de mesure… tout peut varier.

Ps : méfiez vous des règles de grammaire (You 🇬🇧 = Tu et Vous en français).

2 – Les symboles bizarres face aux caractères non latins

Vous les avez sûrement déjà vus.

Ces symboles qui ne veulent humainement rien dire, mais qui sont parfaitement logiques pour les logiciels.

C’est ce qu’il se passe quand vous essayez d’afficher des caractères non latins – chinois,  hindi, arabe, etc. – avec un formatage purement latin (ex : ASCII).

Heureusement, la solution ici est assez simple : utilisez le format unicode autant que possible.

3 – Des boutons calibrés au millimètre

Dans notre article sur les 32 lois de l’UX design, on vous avait parlé des dangers de ne pas laisser de marge autour de vos contenus.

Et ça revient encore. Car si votre équipe de développement est anglophone et qu’elle prévoit des espaces adaptés uniquement à l’anglais, vous courrez à la catastrophe.

Pourquoi ? Parce que toutes les langues n’ont pas besoin du même nombre de mots/caractères pour exprimer la même idée.

“Bonjour”🇫🇷 (7 caractères) = “Hello”🇬🇧 (5 caractères) = “Guten Morgen”🇩🇪 (12 caractères).

Certaines, comme l’anglais, sont très concises. D’autres, à l’instar du français et de l’allemand, nécessitent beaucoup plus de caractères.

Fatalement, si ça n’a pas été pris en compte, vos textes vont déborder de vos éléments graphiques. Idem lorsque vos utilisateurs utilisent des extensions sur leurs moteurs de recherche pour vous comprendre.

Pour éviter ça, prévoyez toujours 30 % de marge autour des textes lorsque vous concevez la mise en page de vos interfaces.

4 – Des designs pensés pour une seule langue.

Vous lisez ce texte de gauche à droite.

Si je le traduis en japonais, vous ne le ferez plus de droite à gauche, mais de haut en bas. Et si j’opte pour l’arable, vous lirez de droite à gauche.

En conclusion : vérifiez toujours que vos textes traduits puissent être lus par toutes les audiences et dans tous les sens.

React Native ou Flutter en 2023 ?

Cher Lecteur,

Aujourd’hui, nous allons supposer que vous êtes le lead developper de votre entreprise, ou mieux le CTO.

Votre entreprise vous a ordonné de développer une application mobile fonctionnant sur les plateformes iOS et Android. Parmi votre équipe d’ingénieurs logiciel, certains vous recommandent le framework React Native, tandis que d’autres ne jurent que par Flutter.

Comment choisir le meilleur framework pour créer une application mobile multi-plateforme aussi performante qu’une application native ?

Voici quelques éléments qui pourront vous aider à choisir votre framework.

React Native ou Flutter : 8 critères pour trouver le framework qui vous conviendra le plus

Cher Lecteur,

Si vous côtoyez régulièrement des programmeurs informatiques, vous savez à quel point une discussion autour d’un outil peut vite devenir une guerre de tranchées.

Sceptique ? Demandez à quelques-uns si vous devez créer votre site d’e-commerce sur-mesure ou via un CMS, en headless ou à partir d’un template… et observez le feu que vous avez allumé brûler.

Le débat React Native vs Flutter ne fait pas exception à cette règle.

Pour vous permettre de trancher, nous allons comparer les deux cadres de développement sur 8 critères :

  1. Installation et configuration
  2. Composants de l’interface utilisateur
  3. Processus de développement
  4. Architecture
  5. Performance
  6. Documentation
  7. Communauté
  8. Tests

Mais avant, présentons les deux frameworks.

Présentation générale de Flutter et React Native

Flutter, ou le développement mobile selon Google

Google Ads, Alibaba, eBay, Groupon… les applications développées via Flutter sont légion sur la toile (et dans les app stores).

Pourtant, Flutter est assez récent. Lancé en 2017 par Google, Flutter est un SDK cross-plateforme Android et iOS open-source. La popularité de Flutter auprès des codeurs s’explique par deux raisons :

  • il utilise le langage de programmation orienté objet DART (qui est plus facile à utiliser que Java, mais moins que le JavaScript) ;
  • il dispose d’une quantité ahurissante de widgets prêts à l’emploi (parfait pour passer rapidement du wireframe à un MVP fonctionnel).

De plus, si vous souhaitez créer un site internet responsive au design épuré, vous pourrez utiliser Flutter for web.

React Native, le framework de Meta (ex-Facebook)

Créé par Facebook en 2015, React Native est aussi un framework open-source permettant de créer des applications mobiles cross-plateformes.

Sans surprise, dans la liste des applications utilisant React Native, bon nombre sont issues de la grande famille Meta : Facebook, Instagram, WhatsApp… mais aussi Netflix, Amazon, Uber et Viber.

Côté langage de programmation, React Native vous plonge dans des codes JavaScript et de React.js. Ce qui est un grand avantage si vous ne voulez pas avoir à réapprendre de nouveaux langages de programmation à partir de zéro.

Par rapport à Flutter, React Native a vu le jour un peu plus longtemps puisqu’il a été lancé en 2015. Les principaux avantages de React Native sont de vastes bibliothèques ainsi qu’un grand nombre de guides de formation.

Installation et configuration : +1 pour React Native

Ordinateur avec des lignes de codes informatiques
Ordinateur avec des lignes de codes informatiques

Commençons par React Native.

Vous avez deux méthodes plutôt simples pour installer le framework de Facebook :

  • via le Node Packet Manager (NPM) en installant directement une distribution sur votre système (n’oubliez pas de télécharger aussi Android SDK) ;
  • via l’environnement de développement ExpoGo (méthode la plus facile).

Honnêtement, les deux installations sont d’une facilité déconcertante (surtout si l’on compare à celle d’Android Studio et du JDK😥). Pour plus de détails, voici des tutoriels qui vous expliquent pas à pas comment configurer React via le NPM ou via ExpoGO.

Concernant Flutter, le processus d’installation vous demandera un peu plus d’effort.

En effet, vous devrez installer :

  • le JDK et l’Android SDK ;
  • Android Studio (si vous voulez créer une application Android) ou Xcode pour iOS ;
  • le SDK de flutter.

Voici un tutoriel qui présente l’installation de Flutter pas à pas, et c’est loin d’être simple. Preuve en est que vous devrez modifier la variable PATH de votre os, voire télécharger le code binaire de Flutter.

Notre verdict ? Si vous aimez les installations simples, optez pour React Native.

Composants de l’interface utilisateur : +1 pour flutter

Si vous souhaitez créer une application au design qui fera pousser un « wow » à vos utilisateurs, ce point est fait pour vous.

Et pour cause : en travaillant avec un webdesigner, vous obtiendrez des maquettes que vous devrez implémenter le plus fidèlement possible. L’objectif étant que le rendu final ressemble à s’y méprendre à celui d’une application native iOS ou Android.

Les composants natifs sont des composants implémentés directement par les concepteurs des plateformes (Google et Apple).

Et quand il s’agit de gérer les éléments natifs, Flutter gagne haut la main, voici pourquoi :

  • Flutter est livré avec une armée de widgets prêts à l’emploi et hautement personnalisable ;
  • Flutter continent des composants de rendu de l’interface utilisateur ;
  • il embarque l’accès aux API du périphérique ainsi que des composants de rendu ;
  • vous pouvez utiliser du code natif au sein de votre application Flutter.

Pour finir, Flutter dispose d’une foule de bibliothèques capables qui en font un véritable kit de développement logiciel complet.

De son côté, le framework React Native fournit uniquement le rendu de l’interface utilisateur et les API d’accès aux périphériques. Exit les accès intégrés aux modules natifs : vous devrez y accéder via des bibliothèques tierces.

Pour couronner le tout, React Native offre moins d’éléments graphiques que Flutter.

Processus de développement : match nul

Pour estimer le coût du développement d’un logiciel et déterminer le mode de facturation le plus adapté, mieux vaut un framework rapide.

Ici, difficile de départager les deux : ils sont équivalents.

En effet, qu’importe que vous jetiez votre dévolu sur React Native ou Flutter, vous utiliserez des modules prêts à l’emploi. En plus de leurs nombreux modules prêts à l’emploi, les deux vous offrent la fonction Hot Reload.

Elle permet aux codeurs d’introduire des changements dans le code de l’application sans avoir à la recompiler. Naturellement, le fait de pouvoir visualiser des changements à l’instant augmente l’efficacité et la vitesse de développement.

Architecture : match nul

En termes d’architecture de logiciel, Google et Facebook ont des approches radicalement différentes.

Chez Meta, le choix a été fait d’utiliser deux patterns principaux pour la conception d’application mobile : Flux et Redux. Leur particularité : stocker l’état de l’application globale dans un magasin central, rendant ainsi les composants de l’application sans état.

Côté Google, la solution la plus populaire est le BLoC (Business Logic Component), suivi de près par… le Flux et le Redux.

Maintenant, laquelle de ces architectures est la plus efficace ? Impossible à dire, à vous de trouver celle qui cadre le plus avec votre projet.

Performances : +1 pour flutter

Pour déterminer les performances – c’est-à-dire la vitesse d’exécution des codes compilés via ces frameworks – analysons les en détails.

Chez React Native, le code est écrit dans le langage JavaScript et en langage natif. Pour convertir le tout en code natif et interpréter le rendu des composants, React utilise un pont logiciel. Autrement dit, après avoir écrit votre code JavaScript, React va directement l’exécuter.

Conséquence : vous devrez attendre plus longtemps pour avoir le fichier .apk ou .ipa et vos animations seront plus lentes.

De son côté, Flutter compile l’ensemble de vos fichiers informatiques en code natif, sans avoir à passer par un pont.

Résultat : des performances de loin supérieures à celles de React et un rendu rapide.

Documentation : match nul

Cher Lecteur,

Imaginez un instant…

Après de longues heures confronté à un bug, vous vous rendez compte que le problème vient d’une fonction de votre framework.

À ce moment, vous vous ruez sur stackoverflow en quête de réponse, mais ne trouvez rien : vous devez lire la documentation.

Ici, clairement, vous serez avantagé si vous développez votre application avec le framework Flutter. Voici pourquoi :

  • Flutter dispose d’une documentation exhaustive ;
  • Flutter possède une variété d’outils dédiés aux développeurs ;
  • Dart, le langage informatique utilisé par Flutter, est très similaire à Java, Swift et Kotlin, ce qui permet de trouver des réponses assez facilement.

De son côté, React Native possède une documentation technique moins garnie, mais à l’avantage de carburer au JavaScript. De plus, sa communauté d’utilisateurs a produit de nombreux guides – éparpillés sur le web – ce qui vous assure de trouver une réponse rapidement.

Communauté : +1 pour React Native

Groupes de développeurs assis autour d'une table

Parfois, dans votre quête de réponse ou de patch contre les bugs, vous aurez besoin du soutien d’autres développeurs. Vous aurez besoin de la communauté d’aficionados du framework que vous utilisez.

Bonne nouvelle : React Native et Flutter disposent tous deux d’une vaste communauté de passionnés.

Mais, en termes de nombre de membres, React Native surpasse de loin Flutter. En cause : Flutter est sorti en premier et a été plutôt bien reçu par les adeptes du développement mobile.

Test et assurance-qualité : match nul

Saviez-vous que le moindre bug peut pousser Apple à rejeter votre demande de publication sur son App store ? Mieux vaut donc vous assurer que la version build de votre app que vous soumettrez n’en comporte aucun.

L’un des avantages du développement multi-plateforme est que vous réduisez le temps alloué aux tests unitaires par deux.

React Native brille par sa gestion des tests unitaires sous JavaScript. Par contre, lorsqu’il s’agit d’automatiser et de tester l’interface utilisateur, il y a encore des progrès à faire.

Quant à Flutter, sa particularité est qu’il dispose d’excellentes options pour tester les widgets hors-ligne, et à la vitesse des tests unitaires.

React Native ou Flutter : lequel des deux choisir pour ?

Au final, devez-vous choisir React Native ou Flutter ?

Difficile à dire. Cela dépend des attentes que vous avez envers votre application hybride.

De nombreux experts s’accordent à dire que l’intérêt croissant de Flutter lui conférera le leadership. D’autres par contre soutiennent que la stabilité, la fiabilité et la très forte communauté des pro-react native continueront d’augmenter sa popularité.

Pour résumer :

  • React Native utilise le JavaScript, ce qui le rend facile à prendre en main ;
  • Flutter développe de nouvelles fonctionnalités plus rapidement.

Souhaitez-vous trouver le meilleur framework de développement mobile ? Contactez l’un de nos experts pour lui parler de votre projet.