Discussion autour de _T_ou_typo()

Matthieu Marcillaud <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <[email protected]>
Bonjour,

Plusieurs fois on nous a fait la demande d'intégrer la fonction 
_T_ou_typo() au Core. Cette fonction est actuellement définie dans les 
plugins Bonux et/ou Saisies.

Elle a comme usage principal d'appliquer la fonction typo() sur le texte 
qui lui est envoyé, ou récursivement sur chaque valeur si un tableau lui 
est donné.

Et, si un des textes est de la forme "<:cle_de_langue:>" ou 
"<:module:cle_de_langue:>" (une forme simple de l'écriture de chaîne de 
langue dans les squelettes donc), alors c'est la valeur de traduction de 
cette chaîne de langue qui est retourné.

Autrement dit :
_T_ou_typo("Coucou") == "Coucou"
_T_ou_typo("<:module:bonjour:>") == "Coucou" (avec le fichier de langue 
qui va bien quand même)
_T_ou_typo("<multi>[fr]Coucou[en]Hi</multi>") == "Coucou"
_T_ou_typo(["Coucou", "<:module:bonjour:>", 
"<multi>[fr]Coucou[en]Hi</multi>"]) == ["Coucou", "Coucou", "Coucou"]


Cette intégration pose plusieurs questions sur l'usage / le besoin 
d'origine et sur la réponse apportée.

L'usage et solution actuelle
----------------------------

Le besoin est de permettre dans des fichiers de configuration (yaml, 
xml, json) de certains plugins, ou dans des options de configuration de 
certains plugins directement dans l'interface privée de SPIP (Menus, 
Formidable, Champs Extras, ...), de pouvoir indiquer soit un texte 
quelconque, soit de se référer à une chaîne de langue quelque part.

Par exemple, dans une déclaration .yaml d'une saisie, on peut trouver : 
"label: '<:saisies:option_groupe_description:>'". On pourrait utiliser 
pour des saisies spécifiques à un site "label: 'Description'" si on sait 
que le site n'est pas multilingue par exemple.

La difficulté d'utiliser directement le code de langue (ie: label: 
'saisies:option_groupe_description'" qui paraît pourtant plus simple) 
est qu'il est impossible de discriminer les cas où on écrirait un code 
de langue, des cas où c'est réellement le texte voulu, par exemple avec 
"label: 'todo'", qui si on utilise le code de langue retournerait 'à 
venir' (dans spip_fr.php), alors que ce n'était pas forcément ce qui 
serait souhaité.

D'où donc l'apparition de cette écriture "<:truc:muche:>" pour les 
textes de configuration, écriture connue déjà dans les squelettes SPIP, 
avec les nuances qu'on parle bien ici d'une syntaxe simplifiée.
On ne peut pas écrire "label: '<:module:nb_elephants{nb=5}:>'" par exemple.


Proposition
-----------

Dans la petite lumière matinale d'IRC, il m'a semblé ce matin qu'une 
autre solution que d'intégrer et utiliser pour cela _T_ou_typo() 
pourrait être implémentée.

Cette solution consisterait à dire que,
à l'instar de la balise (polyglotte) "<multi>...</multi>" que l'on peut 
écrire à la fois dans les squelettes SPIP et à la fois dans le texte 
d'un article (traité par la fonction typo()), que l'idiome 
"<:module:cle:>" pourrait aussi être traité par typo directement.

Ainsi typo("<:module:bonjour:>") retournerait "Coucou" en allant piocher 
la chaîne de langue correspondante.

La conséquence est que ça permettrait plus de possibilités (on pourrait 
mettre des chaines de langue dans les textes d'articles par exemple)(je 
ne dis pas que ça serait recommandé non plus, mais dans certains cas ça 
serait pratique !), tout en répondant au problème d'origine avec les 
configurations de type .yaml ou d'autres déclarations multilingues.

Qu'en pensez-vous ?

N'étant pas certain des effets de bords que cette solution pourrait 
entrainer pour les plugins concernés, si cette solution semble 
intéressante, peut être à voir du coup pour la version suivante 3.3.
La 3.2 ne cassant pas de choses actuellement dans les plugins hors JS.
Ou pas.

Bon dimanche,

MM.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.