Aller au contenu
Parlons de votre projet
tW Translate Plus

tW Translate Plus

CHF 199

Traductions multilingues légères avec moteur au choix pour le site (gpt-oss-20b, OpenAI ou Google Cloud Translation v3, chaque site avec sa propre clé) : un seul objet WordPress, URL avec préfixe langue, glossaire par site et surcharges manuelles.

UGS : tw-translate-plus Catégorie :

Description

tW Translate Plus rend multilingue un site WordPress sans dupliquer quoi que ce soit : une seule page, un seul produit, une seule commande. Le plugin conserve pour chaque texte l'original, la traduction automatique et l'éventuelle correction manuelle, et sert chaque langue à son adresse (/en/, /de/…), indexable par Google.

Ce qui est traduit

  • Contenus : titres, textes, extraits, menus, catégories, descriptions SEO, produits WooCommerce.
  • Tout ce que le thème affiche : étiquettes des modèles, sections des constructeurs de pages, textes des extensions, attributs alt, title, espaces réservés des champs.
  • Textes passés au JavaScript (nouveauté 1.20) : configurateurs, formulaires et composants qui reçoivent leurs textes avec wp_localize_script sont traduits sans toucher aux id, adresses et données techniques.

Couverture réelle, pas seulement un pourcentage

La barre des langues compte les textes que le plugin connaît. Le contrôle Couverture réelle des pages (onglet État) ouvre chaque page dans la langue principale et dans chaque langue active, laisse les scripts s’exécuter et compare ce que le visiteur lit réellement. Les textes restés dans la langue originale sont listés page par page ; les marques et noms propres sont marqués d’un clic comme « identiques dans toutes les langues ».

Moteur au choix, coûts sous contrôle

  • Google Cloud Translation v3 ou OpenAI, avec la clé du site : chaque client ne paie que ses propres traductions.
  • Limite quotidien de caractères, file d’attente en arrière-plan, aucune appel au moteur pendant les visites.
  • Mémoire de traduction : un texte identique traduit une fois n’est pas payé de nouveau.
  • Glossaire par site : marques à ne pas traduire et terminologie toujours cohérente.

Conçu pour ceux qui gèrent le site

  • Corrections manuelles depuis l’onglet Traductions : restent même lorsque le moteur retraduits.
  • Langues activables en aperçu avant de les publier dans le sélecteur, dans le hreflang et le sitemap.
  • SEO multilingue complet : hreflang réciproques, x-default, og:locale, sitemap par langue, adresses traduites.
  • Compatible avec LiteSpeed Cache, WooCommerce, Elementor, multisite ; migration guidée depuis WPML.

Versions

Journal des modifications

Licence perpétuelle : paiement unique, aucun abonnement annuel.

  • WordPress 6.2 ou supérieur
  • PHP 7.4 ou supérieur
  1. 1.20.3Dernière version
    • Nouveautés · slovaque, import WPML corrigé pour les termes, slugs non latins et redirection, v1.20.3
    • Correction · Étape d'importation des chaînes WPML s'est plantée sur $copies indéfini, v1.20.2
    • Correction · bouton de vérification de couverture ; mise à jour détaillée riche v1.20.1
    • Nouveautés · traduire les données du script et vérifier la couverture réelle des pages v1.20.0
    • Correction · ne pas reprogrammer les traductions rendues ; masquer l’onglet WPML après migration v1.19.5
    • Correction · espace blanc dans la courte description, descriptions de variantes WPML v1.19.4
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
  2. 1.20.2
    • Correction · Étape d'importation des chaînes WPML s'est plantée sur $copies indéfini, v1.20.2
    • Correction · bouton de vérification de couverture ; mise à jour détaillée riche v1.20.1
    • Nouveautés · traduire les données du script et vérifier la couverture réelle des pages v1.20.0
    • Correction · ne pas reprogrammer les traductions rendues ; masquer l’onglet WPML après migration v1.19.5
    • Correction · espace blanc dans la courte description, descriptions de variantes WPML v1.19.4
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
  3. 1.20.1
    • Correction · bouton de vérification de couverture ; mise à jour détaillée riche v1.20.1
    • Nouveautés · traduire les données du script et vérifier la couverture réelle des pages v1.20.0
    • Correction · ne pas reprogrammer les traductions rendues ; masquer l’onglet WPML après migration v1.19.5
    • Correction · espace blanc dans la courte description, descriptions de variantes WPML v1.19.4
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
  4. 1.20.0
    • Nouveautés · traduire les données du script et vérifier la couverture réelle des pages v1.20.0
    • Correction · ne pas reprogrammer les traductions rendues ; masquer l’onglet WPML après migration v1.19.5
    • Correction · espace blanc dans la courte description, descriptions de variantes WPML v1.19.4
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
  5. 1.19.5
    • Correction · ne pas reprogrammer les traductions rendues ; masquer l’onglet WPML après migration v1.19.5
    • Correction · espace blanc dans la courte description, descriptions de variantes WPML v1.19.4
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
  6. 1.19.3
    • Correction · ne jamais rediriger les sous‑requêtes LiteSpeed ESI v1.19.3
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
  7. 1.19.2
    • Nouveautés · import WPML des valeurs de champs personnalisés visibles v1.19.2
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
  8. 1.19.1
    • Correction · détection des requêtes de listes paresseuses JetEngine v1.19.1
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
  9. 1.19.0
    • Nouveautés · traduire les fragments HTML dans les réponses AJAX front‑end (JetEngine, Woo) v1.19.0
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
  10. 1.18.3
    • Correction · slug original pour les copies WPML supprimées v1.18.3
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
  11. 1.18.2
    • Correction · ne jamais mettre en file d’attente les textes des pages search/feed/404 v1.18.2
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
  12. 1.18.1
    • Correction · recherche de texte de page insensible aux entités v1.18.1
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
    • Correction · la barre de progression montre uniquement la part des textes traduits v1.12.1
  13. 1.18.0
    • Nouveautés · traduire les noms de frais WooCommerce ; textes texturés des pages dans l’import WPML ; --include-trashed v1.18.0
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
    • Correction · la barre de progression montre uniquement la part des textes traduits v1.12.1
    • Nouveautés · boîte de traduction de l’éditeur + Traduire maintenant, date limite d’exécution stricte v1.12.0
  14. 1.17.3
    • Nouveautés · attributs des libellés du sélecteur v1.17.3
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
    • Correction · la barre de progression montre uniquement la part des textes traduits v1.12.1
    • Nouveautés · boîte de traduction de l’éditeur + Traduire maintenant, date limite d’exécution stricte v1.12.0
    • Nouveautés · mémoire de traduction, auto‑guérison des erreurs, API page simplifiée v1.11.0
  15. 1.17.2
    • Correction · recherche texturée également pour single_post_title v1.17.2
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
    • Correction · la barre de progression montre uniquement la part des textes traduits v1.12.1
    • Nouveautés · boîte de traduction de l’éditeur + Traduire maintenant, date limite d’exécution stricte v1.12.0
    • Nouveautés · mémoire de traduction, auto‑guérison des erreurs, API page simplifiée v1.11.0
    • Nouveautés · worker en arrière‑plan autonome, moteur gpt-oss-20b par défaut v1.10.0
  16. 1.17.1
    • Correction · l’import WPML utilise les textes complets, titres texturés, file d’attente propre ; noms du sélecteur + ordre v1.17.1
    • Nouveautés · importateur WPML, URL traduites + 301, liens Elementor, langue AJAX v1.17.0
    • Correction · indice d’administration lorsqu’aucune langue n’est publiée, aucun cache de page pendant les traductions en attente v1.16.3
    • Correction · traduire les titres des produits, protéger le nom du site, réparation d’écho normalisée, vivacité du worker v1.16.2
    • Correction · redémarrage du worker sur indice obsolète, accepter les textes confirmés inchangés, récupération de page de session, styles de sélecteur arrondis v1.16.1
    • Nouveautés · traduction HTML au niveau de la page de tout ce qui est visible, aperçus du sélecteur par variante v1.16.0
    • Nouveautés · shortcode [tw_language_switcher] avec drapeaux SVG intégrés v1.15.0
    • Correction · rejeter les traductions affichées, gpt-oss-120b, correctifs sécurité/SEO/perf v1.14.0
    • Performances · requêtes parallèles du moteur, fournisseur OpenRouter le plus rapide v1.13.0
    • Correction · le remplissage automatique du navigateur n’écrase plus les clés API v1.12.2
    • Correction · la barre de progression montre uniquement la part des textes traduits v1.12.1
    • Nouveautés · boîte de traduction de l’éditeur + Traduire maintenant, date limite d’exécution stricte v1.12.0
    • Nouveautés · mémoire de traduction, auto‑guérison des erreurs, API page simplifiée v1.11.0
    • Nouveautés · worker en arrière‑plan autonome, moteur gpt-oss-20b par défaut v1.10.0
    • Nouveautés · indexation automatique, exécutions de file d’attente de 45 s, moteur compatible OpenAI v1.9.1
  17. 1.17.0
    • feat(migration): import depuis WPML (onglet «Migration WPML» et wp twtr wpml-import): contenus, produits et variantes, modèles Elementor, entrées de menu, catégories et attributs, médias, chaînes ; aucune traduction refaite par le moteur (origin=wpml, bloquées). Rapport avec les notes à vérifier, import répétable et annulable.
    • feat(url): adresses traduites par langue (Twtr_Slugs, carte par segment : pages même imbriquées, produits, base produit, catégories) sans règle de réécriture ; 301 du slug original vers celui traduit ; redirection 301 pour les anciennes adresses sans page (uniquement sur 404).
    • feat(elementor): les liens internes des pages (Elementor, éditeur) pointent vers la langue courante (sélecteurs de langue exclus) ; le contenu brut des pages construites avec Elementor n’est plus mis en file d’attente (c’est le niveau page qui le traduit : aucun coût inutile).
    • feat(ajax): les requêtes AJAX (formulaires, panier, réponses de plugins) lancées depuis une page traduite utilisent la langue de cette page (Referer du même site).
    • feat(wpml): tant que WPML est actif, tW Translate reste en attente sur le site public (avis dans l’admin avec le lien vers la migration).
  18. 1.16.3
    • ux(selettore): avec moins de deux langues publiées, le shortcode affiche aux administrateurs un avis (« aucune langue publiée : cochez Publiée dans tW Translate → Langues ») au lieu de disparaître sans explication ; les visiteurs continuent de ne rien voir.
    • perf(pagina): une page traduite avec des textes récemment découverts (encore en traduction) n’est pas mise en cache LiteSpeed, ainsi les visiteurs suivants reçoivent les textes traduits dès qu’ils sont prêts au lieu de la version partiellement italienne jusqu’au prochain vidage du cache.
  19. 1.16.2
    • fix(qualità): les titres des produits restaient en italien : les instructions du modèle indiquaient de ne pas traduire les « noms de produit », et gpt-oss laissait ainsi « Caviale di lenticchie all'aglio nero bio 90g ». Maintenant les instructions demandent de traduire les titres et les noms composés de mots courants (en ne conservant que les marques), rappellent que chaque texte est affiché aux visiteurs de la version dans cette langue, et protègent le nom du site (get_bloginfo('name'),) qui autrement devenait «Oase der Gewürze». Vérifié sur oasidellespezie.ch avec gpt-oss-120b : titre, «Collection Oasi», «Voir toute la sélection», «Disponible en laboratoire», «Définir la quantité et ajouter au panier» traduits en allemand et français ; «Choco Duo», «Box "Black Diamond" | Oasi delle Spezie» et l'adresse restent inchangés.
    • fix(qualità): lors de la mise à jour (DB version 5) reviennent en file d’attente aussi les traductions restées en italien qui diffèrent de l'original uniquement par l’entité ou la typographie (all’aglio / all’aglio,) que le contrôle précédent ne reconnaissait pas ; même comparaison normalisée dans le contrôle des textes renvoyés inchangés.
    • fix(worker): après la fin d’un cycle le travailleur restait « actif » pendant 3 minutes, ainsi les textes récemment découverts (ex. les 410 textes du thème trouvés en ouvrant une page) attendaient. Maintenant il y a un indicateur explicite de cycle en cours : le nouveau travail le lance immédiatement.
  20. 1.16.1
    • fix(coda): après la mise à jour le travailleur restait bloqué avec des textes en file d’attente : les lignes remises en file par la migration ne le prévoyaient pas et il se fiait à un compteur à zéro. Maintenant, si le compteur indique zéro, il vérifie réellement la file (une requête indexée, au maximum une fois par minute) et redémarre tout seul.
    • fix(qualità): noms, adresses et marques qui restent correctement identiques («Choco Duo», «Alla Monda 12, 6515 Gudo») étaient signalés comme erreur «renvoyé sans le traduire». Maintenant un texte revenu inchangé dans un groupe est de nouveau demandé seul (en parallèle s’il y en a plusieurs) : si le modèle le confirme inchangé il est accepté. Lors de la mise à jour les erreurs de ce type reviennent en file d’attente.
    • fix(editor): «Traduire maintenant» ouvre les pages traduites avec la session de l’utilisateur, ce qui fonctionne aussi avec la boutique en mode «bientôt disponible» ou en maintenance, où un visiteur anonyme ne voit que la page d’attente.
    • perf(pagina): la traduction de la page terminée est sautée pour les pages de plus de 4 Mo ou avec le processus PHP proche de la limite de mémoire (la page sort non traduite au lieu d’une erreur critique).
    • ux(selettore): aperçus du shortcode fidèles (le style n’était pas chargé dans l’admin) et nouveau style : drapeaux avec coins arrondis et légère ombre, langue actuelle avec anneau, sigles en pilule, menu déroulant à onglet ; hérite des couleurs et polices du thème.
  21. 1.16.0
    • feat(pagina): traduction de la page terminée, comme un traducteur de navigateur (class-twtr-html.php) . Dans les langues supplémentaires le HTML généré est lu en entier et chaque texte visible est traduit, ainsi que <title>, méta description/Open Graph, alt, title, placeholder, aria-label et les textes des boutons : même ceux que le thème ou le page builder génère lui‑même et qu’aucun filtre WordPress ne voit (sections construites en lisant le contenu, libellés dans les templates, widgets Elementor, balisage d’autres plugins). Sur oasidellespezie.ch étaient restés en italien «Caratteristiche & Proprietà», «Note del Maestro Speziere» et les valeurs des fiches produit. Les nouveaux textes sont mis en file d’attente une fois par langue (contexte html, partagé par toutes les pages : une étiquette répétée sur 900 produits ne compte qu’une ligne) et les traductions déjà faites sont réutilisées dans n’importe quel contexte. Scripts, styles, code, pre, textarea, svg, la barre d’administration, class="notranslate", translate="no", textes sans lettres, URL et e‑mail ainsi que les traductions déjà produites par les filtres sont exclus. Une seule requête indexée par page générée ; LiteSpeed met en cache le résultat. Désactivable avec le filtre twtr_translate_html.
    • feat(editor): «Traduire maintenant» ouvre une fois les pages traduites du contenu (en contournant le cache), traduisant ainsi immédiatement aussi les textes du thème de cette page, et le panneau «Traductions» les compte.
    • ux(lingue): aperçu de chaque variante du shortcode à côté du code à copier.
  22. 1.15.0
    • feat(selettore): shortcode [tw_language_switcher] pour placer les drapeaux sur n’importe quel thème ou page builder (Elementor : widget «Shortcode», aussi dans l’en‑tête d’Elementor Pro ; Gutenberg : bloc «Shortcode»), et fonction PHP twtr_language_switcher(). Variantes : style="flags" (par défaut), flags-names, names, codes, dropdown (menu déroulant sans JavaScript) ; current="hide"; size="24"; flags="en:us" pour changer le drapeau d’une langue ; class="...". Chaque lien mène à la même page dans l’autre langue, avec hreflang, lang e aria-current. N’affiche que les langues publiées et rien s’il n’y en a qu’une seule.
    • feat(bandiere): 24 drapeaux SVG inclus dans le plugin (assets/flags/, aussi USA et Suisse), affichées comme images : identiques sur chaque système (les emojis des drapeaux sur Windows n'existent pas et deviennent «DE», «FR») et sans conflits avec le CSS du thème. Filtre twtr_flag_code pour changer un drapeau sur tout le site.
    • feat(admin): dans l'onglet Langues le panneau «Petits drapeaux sur le site» avec aperçu, les shortcodes prêts et le bouton «Copier», ainsi que les options pour les développeurs.
  23. 1.14.0
    • fix(qualità): textes renvoyés non traduits. gpt-oss-20b renvoyait parfois la phrase italienne inchangée, qui était enregistrée comme «traduit» (sur oasidellespezie.ch ~7 % des textes gpt-oss : titre et fiche produit en italien sous /de/). Désormais chaque phrase de 4 + mots retournée identique est de nouveau demandée seule et, si elle reste identique, elle est comptée comme une erreur (réessayée automatiquement), jamais comme traduction ; la mémoire ne copie plus ces cas ; lors de la mise à jour (DB version 4) les lignes déjà affectées de tous les sites reviennent en file d’attente.
    • feat(motore): modèle par défaut gpt-oss-120b (mesuré : traduction correcte en ~1 s, contre des erreurs comme «aglio nero» → «noci nere» du 20b ; ~4× le coût, toujours des fractions de centime par produit). Les sites restés sur l’ancien défaut passent automatiquement au 120b ; un modèle choisi manuellement n’est pas modifié.
    • fix(worker): la chaîne en arrière‑plan s’arrêtait après chaque cycle : le loopback avec un timeout de 10 ms (comme spawn_cron) ne démarrait souvent même pas sur HTTPS. Maintenant 1 s, avec la page déjà détachée du visiteur. Au maximum 3 sites du réseau traduisent ensemble (twtr_worker_max_sites, pour ne pas enlever les processus PHP aux visiteurs.
    • security: les paramètres du moteur (clé, adresse du service, modèle, limites) ne sont modifiés que par un administrateur du site ; les éditeurs et shop managers voient la page en lecture seule. Auparavant un éditeur pouvait pointer l'adresse vers son propre serveur et recevoir la clé et tous les textes. En changeant de service la clé sauvegardée est supprimée. La sortie des moteurs est filtrée avant d’être enregistrée (wp_kses avec uniquement les balises du texte original : rien <script>/onerror injectés). Aucun redirection dans les requêtes aux moteurs (SSRF), token_uri Google accepté uniquement s’il s’agit de Google, fenêtre de signature du travailleur 120 s, paquets de langue téléchargés uniquement par ceux qui peuvent les installer, la capacité n’est plus réassignée à chaque requête (un administrateur peut la retirer).
    • fix(seo): lien mailto:, tel:, #ancora et leurs liens ne sont plus transformés en URL cassés dans les pages traduites ; les URL d’autres sites du réseau ne reçoivent plus le préfixe langue ; hreflang avec des codes de langue unique (de, fr, it, filtre twtr_hreflang_code) au lieu de de-DE; quand une traduction est prête, toutes les langues de la page sont vidées du cache, ainsi les autres langues mettent à jour l'hreflang.
    • perf: le vidange complète du cache LiteSpeed pour les textes du thème se fait au maximum toutes les 10 minutes (auparavant à chaque cycle, c’est‑à‑dire chaque minute, même pour l'italien) ; écritures de la file en une seule transaction par bloc et vidanges par contexte plutôt que par ligne ; mémoire avec un seul jumeau par texte ; index claim; paramètres du site mémorisés par site également à l’intérieur switch_to_blog().
  24. 1.13.0
    • perf(coda): requêtes en parallèle. Avec les modèles linguistiques la file envoie jusqu’à 6 blocs à la fois (Twtr_Openai::translate_many(), curl multi via WpOrgRequests, filtre twtr_concurrency) et récupère 150 textes par tour ; les blocs qui échouent en parallèle à cause d’un incident (réponse désynchronisée, réseau, 400, 429, 5xx) sont repris automatiquement un par un, les clés/crédits/modèles incorrects non. Testé avec un serveur factice : ordre des textes toujours correct, aucun texte bloqué.
    • perf(gpt-oss): sur OpenRouter les requêtes demandent le fournisseur le plus rapide (provider.sort = throughput, filtre twtr_openrouter_provider): mesuré sur oasidellespezie.ch, 4 000 caractères en 2,2 s constants (Groq) au lieu de 3–12 s selon le fournisseur rencontré. Avec le parallèle, un site comme oasidellespezie.ch se traduit en minutes au lieu de jours ; «Traduci adesso» traduit toutes les langues d’un produit en un seul aller‑retour.
    • fix(scoperta): un texte déjà traduit réutilisé par le thème à un autre endroit (ex. la description SEO construite à partir du résumé traduit) n’est plus mis en file comme s’il s’agissait d’un original italien.
    • docs: pour un serveur propre (Ollama, vLLM) WordPress n’accepte que les ports 80, 443 et 8080 (filtres http_allowed_safe_ports e http_request_host_is_external pour les autres).
  25. 1.12.2
    • fix(api): en enregistrant la page «API traduzione» le navigateur pouvait remplir le champ clé (vide) avec un mot de passe mémorisé, qui était enregistré à la place de la clé : sur oasidellespezie.ch la clé OpenRouter a été remplacée par un mot de passe de 10 caractères («Missing Authentication header»). Désormais les champs clé indiquent aux gestionnaires de mots de passe de ne pas les remplir (autocomplete="new-password", attributs pour LastPass, 1Password, Bitwarden) et le plugin n’accepte que des valeurs au format d’une vraie clé (OpenRouter sk-or-…, OpenAI sk-…, autres services d’au moins 20 caractères sans espaces) : sinon la clé enregistrée reste celle d’avant et un avertissement explique pourquoi.
  26. 1.12.1
    • ux(lingue): la barre de progression n’affiche que le pourcentage des textes traduits (ex. 1 343 sur 11 761 → 11 %), plus le minimum entre textes et pages complètes, qui restait à 1–2 % tant que presque aucune page n’était terminée. 100 % uniquement quand rien n’est en attente ou en erreur. Deux requêtes lourdes par langue ont également été retirées de l’onglet Langues.
  27. 1.12.0
    • feat(editor): cadre «Traductions» dans l'éditeur de produits, pages, articles et de tout type de contenu public : état par langue (point vert «Tradotto», jaune «In traduzione : X de Y textes prêts», rouge avec le nombre d’erreurs, gris «Non ancora in coda»), lien «Vedi» vers la page traduite, lien pour corriger manuellement et bouton «Traduire maintenant», qui relit le contenu sauvegardé, remet en file d’attente ses erreurs et traduit immédiatement ses textes (mémoire, puis moteur) avant tout le reste, en moins de 40 secondes ; le reste se complète en arrière‑plan. Dans les listes une colonne «Traductions» avec un point pour chaque langue, lu avec une seule requête par page.
    • fix(worker) : les cycles en arrière‑plan étaient fermés par LiteSpeed après ~120 s («request already in process for 121 seconds, fail with 503») : le budget de 45 s était contrôlé seulement entre un bloc et l’autre, et une requête à gpt‑oss avec le raisonnement par défaut dépassait les 110 s. Désormais chaque cycle a une échéance stricte : aucune requête ne démarre avec moins de 12 s, le timeout de chaque appel est réduit au temps restant, les textes non traités retournent immédiatement en file (pas après 10 minutes) et ne sont pas comptés comme erreurs.
    • perf(gpt-oss) : raisonnement « faible » pour gpt‑oss sur OpenRouter (reasoning.effort) et Groq (reasoning_effort) : mesuré sur oasidellespezie.ch, 40 textes en 8,5 s pour ~0,00008 $ au lieu de plus de 110 s ; blocs de 3000 caractères pour les modèles ouverts.
  28. 1.11.0
    • feat(memoria): mémoire de traduction. Avant d’appeler le moteur, la file remplit les textes en attente (ou en erreur) qui ont un jumeau identique déjà traduit sur le même site et dans la même langue (Twtr_Storage::fill_from_memory(), indice memory_lookup, version DB 3) : gratuit, sans moteur et sans consommer la limite quotidienne. Copie uniquement les traductions automatiques prêtes, jamais les surcharges manuelles ni les textes d’autres sites ; les textes remis en file suite à un changement de glossaire ne sont pas « prêts », ainsi une copie respecte toujours le glossaire actuel. Dans chaque bloc les textes identiques sont envoyés une seule fois. L’onglet État montre les textes réutilisés et les caractères économisés. Sur oasidellespezie.ch environ 19 900 textes en file étaient seulement ~5 300 textes différents.
    • feat(errori) : les erreurs ne restent plus bloquées : quand vous enregistrez ou testez avec succès la configuration du moteur, elles retournent immédiatement en file, et le travailleur les retente seul une fois par jour (crédit rechargé, service rétabli). Aucun bouton à presser.
    • ux(API traduzione) : page simplifiée : encadré en haut vert/rouge « Fonctionne / Ne fonctionne pas » avec la raison en termes simples ; pour gpt‑oss uniquement la clé OpenRouter avec les 3 étapes pour l’obtenir ; adresse et modèle dans « Paramètres avancés », comme la limite de dépense ; le bouton « Enregistrer et tester » enregistre et traduit immédiatement un mot de test. L’état se met à jour automatiquement à chaque cycle de la file.
    • fix(gpt-oss) : messages d’erreur du moteur compatible qui mentionnent le service utilisé au lieu de « OpenAI » ; clés de gestion OpenRouter reconnues (elles ne peuvent pas traduire : « User not found ») avec l’indication de créer une clé API normale ; crédit épuisé (402), modèle inexistant et limites expliquées.
  29. 1.10.0
    • feat(worker): traduction en arrière‑plan autosuffisante, sans configurer quoi que ce soit sur le serveur. Nouveau class-twtr-worker.php : le plugin lance seul son propre travailleur avec une requête loopback non bloquante à son propre admin-ajax.php (comme spawn_cron() du cœur), signée HMAC avec un secret par site ; chaque cycle travaille jusqu’à 45 s (indexation, puis file d’attente) et, s’il reste du travail, lance lui‑même le cycle suivant, donc aucune visite n’est nécessaire. Un contrôle en fin de requête (au maximum une fois par minute, aucune requête supplémentaire : état dans une option autoload) redémarre une chaîne interrompue. Si le serveur bloque le loopback, la file d’attente avance après avoir déjà envoyé la page au visiteur (fastcgi_finish_request / litespeed_finish_request) DISABLE_WP_CRON et l’onglet État le signale. Pause automatique jusqu’à minuit UTC au plafond quotidien et de 10 minutes si le moteur rencontre une erreur ; de nouveaux textes en file d’attente l’annulent. Un seul travailleur par site (verrou). WP‑Cron reste enregistré et passe par le même verrou : là où il fonctionne, il aide. Auparavant, dans un multisite avec
    • feat(motore): et cron système uniquement sur le site principal (comme sur ticinoweb01), les sous‑sites traduisaient seulement par hasard. gpt-oss-20b est le moteur par défauthttps://openrouter.ai/api/v1, openai/gpt-oss-20bpour les sites pas encore configurés : moteur « gpt-oss-20b et autres modèles ouverts », prérempli avec OpenRouter (
  30. 1.9.1
    • ); il suffit de coller la clé OpenRouter. Les sites déjà configurés conservent leur propre moteur. Pour les services publics (OpenRouter, Groq, Together…) la clé est obligatoire, ainsi un site sans clé ne tente pas de requêtes vouées à l’échec.: feat(indicizzazione) automatique. twtr_index_siteLe site entier est relu en arrière‑plan (cron twtr_daily_maintenance, 30 s par passage, reprend là où il s’était arrêté) lorsqu’il n’a jamais été indexé, lorsqu’une nouvelle langue est activée puis tous les 7 jours (contrôle quotidien","), ainsi les contenus publiés avant l’activation, importés ou modifiés sans passer par save_postPendant ces passages le cache LiteSpeed est vidé uniquement pour les contenus qui ont réellement de nouveaux textes. Le bouton « Indexer tout le site » reste disponible pour ceux qui souhaitent tout relire immédiatement ; l’onglet État montre la progression et la date de la dernière lecture complète.
    • perf(coda): chaque exécution du cron travaille jusqu’à 45 secondes (Twtr_Queue::process_for()) au lieu d'un seul bloc de 25 textes, et s'arrête plus tôt si un bloc n'avance pas (limite quotidienne, erreur du moteur, file d'attente vide). Sur oasidellespezie.ch la file traduisait 25–100 textes l'heure.
    • feat(motore): nouveau moteur Compatible OpenAI pour modèles ouverts comme gpt-oss ou d'autres, via n'importe quel service avec la même API (OpenRouter, Groq, Together, Ollama, vLLM) : adresse API, clé (facultative) et nom du modèle pour le site. Même client, glossaire dans le prompt et blocs réduits d'OpenAI ; si le serveur ne supporte pas le format JSON la requête est répétée sans, et le JSON est extrait même si le modèle l'encadre dans du texte. Les requêtes utilisent wp_safe_remote_request (pas d'adresses internes, sauf filtre http_request_host_is_external).
    • feat(update): icône du plugin (assets/icon.svg + PNG 128/256, couleurs ticinoWEB) affichée dans le Tableau de bord → Mises à jour à la place de la prise grise. Le chargeur tw-release-updater.php passe à 1.1.0 et lit les icônes depuis le dossier assets/ de n'importe quel plugin géré ; le mu-plugin se met à jour tout seul. L'icône apparaît à partir des mises à jour suivantes de cette version, car c'est le code déjà installé qui la communique à WordPress.
  31. 1.9.0
    • fix(glossario): le glossaire est pour le site. Auparavant les termes étaient communs à tout le réseau : «Casa dei Ponti», ajouté sur casadeiponti.ch, apparaissait (et était appliqué) aussi dans le glossaire de oasidellespezie.ch. Maintenant le tableau a la colonne blog_id (version DB 2, clé unique blog_id + termine) et chaque site voit, enregistre, supprime et applique uniquement ses propres termes ; la modification d’un terme remet en file d’attente seulement les traductions de ce site. Version du glossaire, paires à synchroniser, fichier CSV et ressources Google sont également du site.
    • feat(migration): à la mise à jour chaque terme existant va aux sites dont le contenu le contient réellement, c’est‑à‑dire les seuls sites où il avait effet ; un terme qui n’apparaît dans aucun site va à tous les sites qui traduisent, ainsi aucun terme ne se perd. Les sites Google reconstruisent leurs ressources au cycle suivant.
    • feat(permessi): Le glossaire et l’API de traduction ne sont plus réservés aux Super Admin : ils sont visibles par les administrateurs, shop manager et éditeur du site, comme le reste du menu tW Translate (capability twtr_manage_translations, attribuée également aux sites déjà installés et au rôle shop manager créé par WooCommerce par la suite). L’option réseau «Dati alla disinstallazione» reste aux Super Admin. La page Glossaire a été supprimée dans Network Admin, qui n’aurait plus de sens maintenant.
    • fix(openai): «Réponse OpenAI non alignée» ne fait plus échouer l’ensemble du groupe de 25 textes : lorsque le modèle perd ou fusionne des segments, la file d’attente divise le groupe en deux et réessaye, jusqu’à isoler le texte problématique. Sur oasidellespezie.ch cette erreur avait bloqué 64 textes.
  32. 1.8.0
    • feat(update): mises à jour via l’en‑tête natif Update URI et le chargeur générique includes/tw-release-updater.php (TW_Release_Updater), partageable par tous les plugins ticinoWEB sans jamais le modifier ; mises à jour automatiques activées (désactivables avec TW_RELEASE_AUTO_UPDATE). Le plugin installe et met à jour seul le chargeur comme mu‑plugin wp-content/mu-plugins/tw-release-updater.php, ainsi les mises à jour fonctionnent aussi en admin réseau et dans le cron du site principal d’un multisite, et sur tout serveur où le plugin est activé. Supprimé includes/class-twtr-updater.php (1.7.0), remplacé par celui‑ci.
  33. 1.7.0
    • feat(multisite): chaque site traduit uniquement avec sa propre clé. Moteur, clé OpenAI / identifiants Google, modèle, bucket, limite quotidienne et compteur de caractères passent des réglages réseau à ceux du site (twtr_engine, twtr_usage, pas en autoload). Un site sans sa propre clé ne traduit pas : aucun fallback sur la clé réseau, constantes TWTR_OPENAI_API_KEY / TWTR_GOOGLE_* / TWTR_PROVIDER ou variables d’environnement, qui traduiraient chaque site aux frais d’un seul client. Auparavant un seul moteur et une seule clé servaient tous les sites : le 2026‑09‑23 Synergy (Google) a traduit avec la clé OpenAI de Casa Dei Ponti, et la limite unique de 500 000 caractères épuisée par un site bloquait aussi les autres.
    • feat(queue): sans identifiants la file d’attente ne démarre pas (pas de cron) et wp twtr queue / «Processa ora» expliquent la raison ; enregistrer les identifiants redémarre la file d’attente. La limite et le compteur sont ceux du site.
    • feat(glossario): termes encore communs au réseau, mais état de synchronisation Google par site (chaque site a les ressources dans son propre projet Google) ; un changement de termes fait resynchroniser chaque site Google au cycle suivant. Token OAuth Google et clé du compte de service mémorisés par site (également dans un switch_to_blog()).
    • feat(admin): la page «API traduction» configure le site actuel et avertit s’il manque la clé ; Network Admin montre seulement le Glossaire. L’onglet File d’attente et wp twtr status affichent le moteur, les derniers chiffres de la clé, les caractères utilisés et la limite du site.
    • feat(cli): wp twtr legacy-keys [--assign=openai|google] [--purge] pour attribuer au bon site les identifiants réseau des versions précédentes et les supprimer du réseau.
    • feat(update): mises à jour depuis le dépôt release gfrino/ticinoweb-wp-themes-and-plugin-releases (§13), avec prise en charge de l'interrupteur des mises à jour automatiques.
Assistant ticinoWEB En ligne