[RESOLU] Regex de traduction imparfait

Eléphant du PHP | 107 Messages

07 oct. 2022, 13:27

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 oct. 2022, 23:44

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"
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 107 Messages

10 oct. 2022, 11:59

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.

Mammouth du PHP | 2703 Messages

10 oct. 2022, 13:46

non, en retriant le contenu issu du json à chaque fois en php.

Eléphant du PHP | 107 Messages

10 oct. 2022, 14:00

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: