Comment j'ai appris 12 langues - en une nuit

Utiliser les dernières nouveautés de l'apprentissage automatique et une mise en cache intelligente

Un long chemin vers les langues

Cela fait un certain temps que je lance une idée qui me semble intéressante et stimulante : que faudrait-il pour obtenir une prise en charge multilingue de mon application Web avec le moins de maintenance possible ? Considérant également les coûts comme une contrainte principale (ce site ne diffuse aucune annonce et n'utilise aucun suivi, donc pas de revenus entrants ici), à quoi ressemblerait une solution valide ?

Le plan

Tout commence et se termine avec le moteur de traduction à utiliser. Grâce à l'utilisation d'Ubuntu comme l'un de mes pilotes quotidiens, j'ai découvert une fois une jolie petite application dans l'App Store appelée "Argos translate", qui est un moteur de traduction open source construit sur les derniers modèles ML similaires à ceux qui alimentent DeepL . Si vous ne connaissez pas DeepL, c'est un excellent traducteur à utiliser gratuitement sur leur site Web.

Mais revenons à Argos : après avoir jeté un coup d'œil au référentiel associé, j'ai vu qu'il existe également une bibliothèque python OSS disponible, qui conviendrait parfaitement à un environnement auto-hébergé. Après avoir joué pendant une courte période, j'ai décidé de regarder certains traducteurs via des offres SaaS, car l'ensemble du processus de versement d'argos translate n'a pas vraiment fonctionné aussi bien que je l'avais espéré.

J'ai donc opté pour un autre service, Cloud Translations de GCP qui offre 500 000 caractères gratuitement par mois et facture ensuite de l'argent pour chaque 1 000 000.

Tout est dans la mise en cache

Grâce à la configuration de Next.js avec ISG (génération de site incrémentielle), je peux appeler les traductions pour chaque page à la demande, ce qui simplifie considérablement la planification car aucun déploiement unique avec toutes les traductions à la fois ne doit être accompli.

Je ne savais toujours pas comment gérer la mise en cache des chaînes traduites. Bien sûr, le réseau de périphérie de Vercel (où cette PWA est hébergée) peut absolument tirer parti de cette tâche. Mais je voulais que les déploiements soient indépendants des traductions. c'est pourquoi j'ai créé une couche supplémentaire de mise en cache via une simple instance Firestore, également hébergée sur GCP.

Le plus grand défi était l'analyse syntaxique + le remplacement du contenu du bloc pour chaque article. Si vous ne savez pas. Le contenu du bloc décrit le corps réel de l'article, qui est créé par moi dans un CMS. Lors de la traduction, ces blocs ne sont pas en texte brut mais plutôt chacun intégré dans une structure de données spéciale pour permettre le stockage d'informations sémantiques ou de métadonnées. Détecter de manière fiable + traduire uniquement les chaînes pertinentes était l'une des parties les plus importantes de cette implémentation.

Un homme, 12+ langues

Les langues (actuellement) prises en charge sont :

  • "fr": anglais
  • "de": allemand
  • "fr": français
  • "es": espagnol
  • "eo": espéranto
  • "el": grec
  • "ja": japonais
  • "ru": russe
  • "salut": hindi
  • "il": hébreu
  • "tr": turc
  • "af": Afrikaans
  • "ar": arabe
  • "ko": coréen

Pour tester les différentes variantes, placez simplement le code de la langue après l'url de base. Par exemple : "https://flaming.codes/fr". Et c'est tout!

Résumant mon implémentation, la configuration ressemble à ceci :

  • chaque page est construite de manière statique au moins toutes les 4 heures, mais uniquement à la demande ; cela signifie qu'un nouveau travail de traduction est effectué au maximum toutes les 4 heures pour un site donné
  • les traductions elles-mêmes sont d'abord chargées depuis Firestore ; seulement s'il n'y a rien de disponible, les chaînes sont traduites + mises en cache dans Firestore

Cette configuration fonctionne si bien que je n'utiliserai aucune traduction de manière classique, par ex. créer manuellement des fichiers json qui conservent les paires clé-valeur. J'utiliserai l'API Cloud Translation pour tout ce qui doit être internationalisé, ce qui la rendra entièrement dynamique. Grâce à ces changements, le PWA compte environ 430 pages au moment de sa rédaction.

Chaque page est traduite de l'anglais vers 13 autres langues, qui représentent les plus parlées ainsi que celles qui se trouvent entre elles dans le monde entier. Voyons comment cela va évoluer !

  • Tom