Analyse par Claude :
non traduit dans l’espace privé (mais fonctionne en public) — SPIP 4.4.20
Contexte :
Un champ titre (spip_mots.titre / spip_groupes_mots.titre) contient un idiome
brut, ex. <:spip:bouton_valider:>, affiché via #TITRE (balise nue, sans
filtre) dans un squelette de l’espace privé (ex. plugins-dist/mots/prive/
objets/liste/mots-admin.html).
Symptôme :
- Le tag n’est jamais traduit : reste affiché littéralement.
- La typographie française insère en plus une espace insécable avant le ‹ : ›
final (non protégé faute de traduction réussie), donnant à l’écran :
<:spip:bouton_valider :> (au lieu de « Valider »)
Reproduction isolée (hors admin, juste pour prouver que ce n’est pas
spécifique à mes données) :
squelette public :
[(#ENV{txt}|extraire_idiome)]
appelé avec ?txt=<:spip:bouton_valider:>
→ résultat : <:spip:bouton_valider:> (non traduit)
Ce qui fonctionne, pour comparaison :<:spip:bouton_valider:>écrit en dur dans le squelette (compilé) → OK,
donne « Valider »#VAL{spip:bouton_valider}|_Tou#ENV{cle}|_T(clé dynamique bare,
sans les crochets <: :>) → OK, donne « Valider »- La même chaîne
<:tour_difficult_1:>stockée en base et affichée via
#TITREdans une BOUCLE(MOTS) publique → OK, traduit correctement.
Donc : seule la combinaison « idiome <: :> embarqué dans du texte dynamique
(#TITRE d’un objet MOTS) + rendu dans l’espace privé » échoue. La fonction
_T() elle-même fonctionne parfaitement avec les mêmes clés en contexte
dynamique — le problème semble localisé au mécanisme d’extraction
d’idiome à la volée (extraire_idiome() / classe Idiomes) tel qu’il est
sollicité par la chaîne de traitement de l’espace privé.
Piste possible : le CHANGELOG mentionne pour la 4.4.0-beta4 :
« #34 Affichage des chaînes de langue en squelettes sur certains cas. »
« #34 !39 Revert: transformation des idiomes en balise (sera dans SPIP 5.0
uniquement) »
Ce cas n’est peut-être pas couvert par ce correctif/revert, ou est une
régression connexe.
Environnement : SPIP 4.4.20 (2026-08-17), PHP (WAMP), MySQL.
