Page 1 sur 1

Regex de traduction imparfait

Posté : 07 oct. 2022, 13:27
par kodjo
Bonjour à tous,

J'ai créé une petite appli javascript qui parse un document HTML et traduit les mots trouvés d'une langue à une autre.
Le script charge des fichiers JSON et fait la traduction avec une expression régulière.

Voici l'expression régulière que j'utilise:

Code : Tout sélectionner

let html = "...mon code HTML..."; let k = "motARemplacer"; let v = "motDeRemplacement"; let regex = new RegExp(`\\b${k}\\b`, 'g'); html = html.replace(regex, v);
Ca marche très bien pour les mots isolés et me transforme par exemple "Red" en "Rouge" pour une traduction anglais vers français. Le problème survient pour la traduction de phrases. Par exemple, "Red car" est transformé en "Rouge car".

Dans mon fichier JSON français, j'ai bien sûr "Voiture rouge". Mais ceci n'est pas utilisé car "Red car" a précédemment été transformé en "Rouge car".

Comment puis-je ajuster mon regex pour prendre en compte la différence entre "Red" et "Red car"? A savoir, traduire "Red" en "Rouge", mais ne pas traduire (ignorer) "Red car"?

En vous remerciant pour vos réponses.

Re: Regex de traduction imparfait

Posté : 09 oct. 2022, 23:44
par @rthur
J'aurais simplement trié mon fichier json pour commencer par traduire les expressions les plus longues en nombre de caractères, comme ça "Voiture rouge" sera traduite avant "rouge"

Re: Regex de traduction imparfait

Posté : 10 oct. 2022, 11:59
par kodjo
Oui effectivement on peut faire ça, mais ce n'est pas très fiable. Si un développeur tiers édite le fichier JSON et ajoute des chaines de caractères dans un autre ordre, c'est le bordel assuré. Une solution dans le regex serait preferable si c'est possible.

Re: Regex de traduction imparfait

Posté : 10 oct. 2022, 13:46
par or 1
non, en retriant le contenu issu du json à chaque fois en php.

Re: Regex de traduction imparfait

Posté : 10 oct. 2022, 14:00
par kodjo
aaaah c pas mal comme approche ça, merci je vais tester. Tant pis pour mon fantasme de regex qui sait faire la cuisine et le ménage :lol: