[Résolu] BUG de `Salvatore` qui modifie les clés trop longues d'un fichier de langue ?

Bonjour,

Ok, je l’avoue les clés de mes fichiers de langue sont très longues car j’aime bien être verbeux ^^

Mais du coup, j’ai l’impression que Salvatore m’a coupé tout seul une clé très longue (trop ?) d’un de mes fichiers de langues de mon plugin statut_article_archive : https://gitlab.forge.education.gouv.fr/aot-spip/spip-plugins-public/statut_article_archive/-/commit/9a92dfb55f462f59bbed3f9e4aabcf409e22c528#e28f40b22365472527430bb8437b3e85d045e96d

Avant ma clé était : si_la_suppression_automatique_est_activee_les_articles_avec_le_statut_archive_seront_automatiquement_supprimes_des_que_la_date_d_archivage_est_depassee_du_nombre_de_jours_indiques

Après le passage de Salvatore elle est devenue : si_la_suppression_automatique_est_activee_les_articles_avec_le_statut_archive_seront_automatiquement_supprimes_des_que_la_date_d

Bug ou c’est une contrainte documentée que j’ai loupée ?

Merci de votre aide

Après lecture rapide du code de trad-lang je me demande si ça ne vient pas de la taille du champ id dans la base qu’il utilise cf base/tradlang.php · master · spip-contrib-extensions / trad-lang · GitLab

Mais, je ne serai te dire pourquoi cette taille max a été choisie…

PS : le lien que tu donnes vers le gitlab semble non fonctionnel.

Ne pourrit on pas éviter les pronoms dans l’item ? En dirait que l’item est identique au texte final…

Ouais, bon, c’est dommage que ça bloque hein… mais j’ai envie de dire c’est un peu abusé comme « clé », et pas spécialement légitime. On n’est pas dans des fichiers de langue comme on voit parfois ailleurs où la clé c’est la chaine de la langue par défaut à traduire. Chez SPIP on n’attend vraiment des clés, des identifiants.

Beaucoup plus lisible en plus dans les utilisations dans les squelettes ensuite.

Clairement personne n’a pensé que quelqu’un utiliserait les clés de langue de la sorte aussi longues.

Ça n’a pas vraiment de sens : c’est censé être un code résumé / identifiant, qui ne change pas si le texte change peu à l’intérieur, et rend d’usage dans SPIP bien laborieux de ces clés par ailleurs !

On dirait que tu fais comme dans du gettext (fichiers .po) qui utilisent plus facilement le texte complet de la langue source comme « msgid » d’identifiant ; mais c’est pas non plus ce qui est fait ici, qui est un mixte des deux bien étrange ! Et SPIP ne sait pas gérer l’appel de traductions avec une chaine qui aurait pour clé un texte par ailleurs : c’est peut être pour cela que tu as remplacé par des soulignés etc… Mais ça rend l’ensemble très chaotique il me semble, non ? Ni l’un, ni l’autre…

Bah éventuellement on peut augmenter la taille du varchar, c’est pas sorcier… y a de la marge…
Mais, le veux t’on vraiment ? C’est effectivement une question !

Perso je ne le souhaite pas :slight_smile:

J’ai tendance à ne pas le souhaiter non plus…

non plus :slight_smile:
(je trouve effectivement la chaîne de langue initiale proposée dure à digérer)

Merci @b_b ça vient bien de la ! Le nombre de caractères max est 128 pour l’id d’une chaine de langue si on utilise le plugin spip-contrib-extensions / trad-lang · GitLab et les traduction sur https://trad.spip.net

Je vais donc réduire la taille des id de mes chaines de langue pour ne pas dépasser 128 caractères.

Peut-être une petit précision dans la doc ici Que fait Salvatore ? - Traduire SPIP et ici Fichiers de langues - Programmer avec SPIP 4 serait bienvenue pour signaler cette limite.

+1 c’est un travail pour @documentation, d’ailleurs le premier lien mentionne encore « le serveur svn » qui pourrait être remplacé par « la forge » :stuck_out_tongue:

Pour préciser pourquoi j’en suis arriver à faire des chaines de langues si longues, c’est surtout que j’en avais marre de toujours rechercher dans les fichiers de langue à quoi correspond tel ou tel chaine de langue pas du tout explicite.

Par exemple, vous savez à quoi correspondent les chaines de langues suivantes :

  1. erreur
  2. erreur_texte
  3. forum_titre_erreur
  4. pass_erreur
  5. avis_erreur
  6. info_erreur_systeme
  7. info_erreur_systeme2

Et bien ça correspond à :

  1. Erreur
  2. erreur(s)
  3. Erreur...
  4. Erreur
  5. Erreur : voir ci-dessous
  6. Erreur système (errno @errsys@)
  7. Le disque dur est peut-être plein, ou la base de données endommagée...

Je pourrais en citer d’autre avec les innombrables info_publie_1, info_publie_2, info_publie_01, info_propose_1, info_propose_2, info_propose_3, info_propose_4, info_propose_5

Bref, du coup étant habitué à gettext avec des fichiers .po/.mo qui utilise la langue source comme msgid d’identifiant j’ai « réappliquer » ce concept aux fichiers de langue pour mes plugins SPIP avec 2 gros avantages pour moi :

  • Avec la chaine de langue je sais tout de suite quel texte sera affiché (du moins dans la langue fr)
  • Quand une chaine de langue n’est pas traduite, c’est son identifiant qui est affiché et du coup même sans traduction les auteurs (français) comprennent le texte et peuvent me remonter plus facilement le bug.

Ça m’évite les retours quand ça bug du type : Hey, j’ai le message info_image_process_titre / info_message_2 / info_propose_3… qui s’affiche, je comprend rien !

Voilà ^^

1 « J'aime »

C’est bon pour programmer.spip
Je le ferais bien sur trad.spip mais je n’ai pas les super pouvoirs.
Tu m’upgrades ?

je t’ai passé admin. Tu diras si cela convient.

Merci.

Sur la page « Que fait Salvatore », je ne voyais pas trop où ajouter la précision, alors je l’ai ajoutée à la fin de cette FAQ :

Dites moi si vous avez une meilleure idée (@jo_aot ?)

Merci @nicod, maintenant que c’est dans la doc, ça évitera peut-être à d’autres de se prendre les pieds dans le tapis ^^ :slight_smile:

Ensuite, il faudrait voir avec le core SPIP, car si l’idée est de rester avec des clés assez courtes de maximum 128 caractères, peut-être qu’un petit test avec le déclenchement d’une alerte lors de l’affichage d’une chaîne de langue avec un code trop long serait le bienvenu :

// dans `inc_traduire_dist()`
if ( strlen($code) > 128 ) {
	  trigger_error('Attention la clé de la chaine langue est très longue et non supportée par Salvatore', E_USER_WARNING);
	  spip_log('Attention la clé de la chaine langue est très longue et non supportée par Salvatore', _LOG_AVERTISSEMENT);
}

Mais bon, ça rajoute de la lourdeur pour, j’imagine, très peu de cas comme le mien ^^, donc dans la doc, c’est déjà bien !

Et mettre ce 128 dans une constante configurable ? Mais il me semble que c’est pas banal pour une constante de modifier le type d’un champ créé en BDD.

c’est la valeur du varchar de la bdd du site des traductions …