! [spip-dev] Nouvelle syntaxe <multi><en></en><multi>

Salut,

Désolé, j'ai posté précédemment un message par erreur...

J'ai modifié la syntaxe du filtre multi-langue dans un texte.

-> La syntaxe devient "conforme" aux habitudes d'un language de balises, avec (1) la fermeture des balises, (2) l'utilisation de balises de langues avec des chevrons. De plus, on utilise comme texte par défaut un texte qui ne serait pas entre balises de langues; cela permet notamment de ne rien afficher dans certains cas...

La syntaxe devient donc:

<multi>
      Texte par défaut (optionnel)
      <fr>en français</fr>
      <en>in english</en>
      <de>auf deutsch</de>
</multi>

-> L'affichage de ces éléments dans l'espace privé est changé, car il est nécessaire de tout afficher pour pouvoir effectuer les vérifications de relecture d'un seul coup... C'est évidemment à parfaire, mais c'est déjà mieux.

Ainsi, dans le cas précédent, en admettant que l'environnement est le français...
-> sur le site public, ça affiche "en français";
-> dans le site privé, ça affiche une liste agrémentée du petit micro, ainsi:
      [fr] en français
      [en] in english
      [de] auf deutsch
      [defaut] Texte par défaut (optionnel)

=> En revanche, pour l'instant, ça fait déconner l'affichage de l'espace privé si on utilise cette méthode dans les titres.

ARNO*

<multi>
     Texte par défaut (optionnel)
     <fr>en français</fr>
     <en>in english</en>
     <de>auf deutsch</de>
</multi>

C'est plus pénible à taper, moi j'ai pas d'éditeur XML dans les doigts.
C'est pour ça que j'avais pris l'autre option. M'enfin, c'est pas très
grave.

-> L'affichage de ces éléments dans l'espace privé est changé, car il est
nécessaire de tout afficher pour pouvoir effectuer les vérifications de
relecture d'un seul coup... C'est évidemment à parfaire, mais c'est déjà
mieux.

Non, c'est moins bien de tout afficher, car tu ne passes pas ta vie à
"relire" les 30 traductions de ton mot-clé, mais plutôt à affecter le
mot-clé à des articles, donc dans la langue de ton interface.

Pour relire vraiment, on pourrait imaginer autre chose (un popup). Mais de
manière courante, il faut vraiment quelque chose de très léger hors-"micro".

=> En revanche, pour l'instant, ça fait déconner l'affichage de l'espace
privé si on utilise cette méthode dans les titres.

Bah oui, CQFD. Il faudrait revenir à ma méthode, mais l'améliorer avec un
popup en javascript façon rezo.net plutôt qu'un "title" d'image.

-- Fil

> <multi>
> Texte par défaut (optionnel)
> <fr>en français</fr>
> <en>in english</en>
> <de>auf deutsch</de>
> </multi>

C'est plus pénible à taper, moi j'ai pas d'éditeur XML dans les doigts.
C'est pour ça que j'avais pris l'autre option. M'enfin, c'est pas très
grave.

Ah non, il y avait aussi un autre argument pour ne pas l'écrire comme ça (tu
sais, j'ai érfléchi avant de coder...) : tu risques des conflits avec des
balises existantes (<li>...</li>, c'est un morceau de lituanien, ou bien un
élément d'une liste HTML ?

-- Fil

Ah non, il y avait aussi un autre argument pour ne pas l'écrire comme ça (tu
sais, j'ai érfléchi avant de coder...) : tu risques des conflits avec des
balises existantes (<li>...</li>, c'est un morceau de lituanien, ou bien un
élément d'une liste HTML ?

J'aurais besoin que tu précises le but de la manoeuvre, parce que je sais pas si on poursuit le même but.

(1) Première possibilité: tu as défini une syntaxe "privée", transparente in fine pour les rédacteurs, qui servira uniquement de support de stockage de l'information qui, elle, sera déterminée par une interface spécifique (genre, "traduire ce mot-clé en anglais"). Dans ce cas, effectivement, la syntaxe retenue importe peu.

(2) Mais ce que j'ai compris à la fois de l'annonce sur spip-core et spip-trad et de l'exemple "en clair" avec la présence de deux <multi> dans un même texte, c'est qu'il s'agit également d'un nouveau raccourci directement utilisable par les rédacteurs. Et là, il faut qu'on discute de la syntaxe, pour les raisons suivantes:

      - comme indiqué, il faut conserver les habitudes des raccourcis précédents (qui sont, dès l'origine, du pseudo-html, avec des balises ouvrantes et fermantes, et l'usage des chevrons);

      - la définition du texte "par défaut" me semblait très peu claire et incomplète, puisqu'il est déduit d'une autre balise (c'est la première chaîne traduite), et on est obligé d'avoir une chaîne par défaut;

      - surtout: ça me bloque sur un autre point qui me turlupine depuis belle lurette: une balise permettant de changer de langue dans un même champ. Intérêt principal: gérer le sens d'affichage de la langue. Actuellement, par exemple, il est impossible d'afficher à la fois du texte en français et du texte en arabe au sein d'un même article; ce qui interdit par exemple les articles d'analyse linguistique, les cours d'arabe, les listes type lexique, les citations d'un document anglaisau milieu d'un article en arabe (ce que l'on fait couramment à l'intérieur d'un article en français). Et là, il faut que les raccourcis permettant d'indiquer la langue soient cohérents, soit dans le but d'un pavé à option multilingue, soit dans le but d'indiquer un changement de langue.

Pour le pavé dans une autre langue, je pensais à quelque chose du genre:

    blah blah blah en français

    <lang_ar>du texte en arabe</lang_ar>

    blah blah blah en français à nouveau.

Mais s'il existe déjà un autre raccourci qui, pour une option multilingue, utilise un raccourci [ar] seul et non fermé, y'a aucun moyen d'avoir un système qui reste cohérent.

<quote who='Fil' when='11/04/04 21:38'>

<multi>
    Texte par défaut (optionnel)
    <fr>en français</fr>
    <en>in english</en>
    <de>auf deutsch</de>
</multi>

C'est plus pénible à taper, moi j'ai pas d'éditeur XML dans les doigts.
C'est pour ça que j'avais pris l'autre option. M'enfin, c'est pas très
grave.

Ah non, il y avait aussi un autre argument pour ne pas l'écrire comme ça (tu
sais, j'ai érfléchi avant de coder...) : tu risques des conflits avec des
balises existantes (<li>...</li>, c'est un morceau de lituanien, ou bien un
élément d'une liste HTML ?

J'ai failli répondre "utiliser un namespace spip", mais j'ai peur que tu ne protestes encore plus violemment contre cette proposition, puisque tu "n'as pas d'éditeur XML dans les doigts". C'est une position défendable. :slight_smile:

Oh et puis, pour faire avancer le débat, je vais quand même maintenir et développer :

Le principe du XML c'est de pouvoir faire intervenir des espaces de nommage à l'endroit où on en a besoin.

Pour expliciter ce que je veux dire, un <li> en réalité c'est un élément LI de l'espace de nommage HTML, donc un <html:li>. On utilise d'ailleurs déjà des bidouilles des espaces de nommage pour faire prendre en compte à IE des éléments qu'il n'arrive pas à traiter proprement (le <abbr>, cf. <http://dean.edwards.name/my/abbr-cadabra.html&gt;\).

Bref.

Le <li> par défaut c'est un <html:li>. Qu'est-ce qui nous empêche d'imaginer que le <li> de l'extrait lituanien ne serait pas un <multi:li> ou un <spip:li> ?

Je ne dis pas que c'est une solution pratique, ni même que j'ai une solution plus simple à proposer (vu que ce dont je parle impliquerait encore plus de lourdeur d'écriture), mais voilà : j'aime bien la proposition d'Arno de fermer les éléments, pour l'interprétation finale du code.

Je dis ça sans être celui qui *écrit* l'interpréteur (ça c'est vous deux :)), donc c'est juste une remarque pour faire avancer (peut-être) le débat.

<quote who='ARNO*' when='11/04/04 23:12'>

     - surtout: ça me bloque sur un autre point qui me turlupine depuis belle lurette: une balise permettant de changer de langue dans un même champ. Intérêt principal: gérer le sens d'affichage de la langue. Actuellement, par exemple, il est impossible d'afficher à la fois du texte en français et du texte en arabe au sein d'un même article; ce qui interdit par exemple les articles d'analyse linguistique, les cours d'arabe, les listes type lexique, les citations d'un document anglaisau milieu d'un article en arabe (ce que l'on fait couramment à l'intérieur d'un article en français). Et là, il faut que les raccourcis permettant d'indiquer la langue soient cohérents, soit dans le but d'un pavé à option multilingue, soit dans le but d'indiquer un changement de langue.

... oui mais là, on risque de se retrouver avec un système vachement plus lourd que de taper du HTML tout simple et ajoutant un attribut lang="", non ?

Bon, sinon, pour l'évocation du xml, désolé, c'était pas pour faire un argument d'autorité, dieu sait si je suis pas un furieux de ce côté-là.

Ah non ? :wink:

Mon problème, c'est que j'ai fait quelques bidouilles du côté des fonctionnalités d'édition Wysiwyg de Mozilla et MSIE, et franchement c'est carrément pas très souple. Et quand on se rapproche d'un système de balises xml, ça me simplifie nettement le travail, soit pour les inclusions directes de "balises", soit pour les méthodes avec le javascript qui bidouille dans le code source du HTML.

Effectivement la manipulation du DOM est basée sur des noeuds (une gestion de type XML, quoi). On s'éloigne très fortement de l'expresison régulière mais ça gagne énormément en souplesse de manipulation.

Et sur ce je vous souhaite une bonne nuit à tous.

(1) Première possibilité: tu as défini une syntaxe "privée", transparente
in fine pour les rédacteurs, qui servira uniquement de support de stockage
de l'information qui, elle, sera déterminée par une interface spécifique
(genre, "traduire ce mot-clé en anglais"). Dans ce cas, effectivement, la
syntaxe retenue importe peu.

Non, c'est plutôt un raccourci ; faut pas charrier non plus, quand tu en
arrives, dans ton site, à traduire les mots-clés et les descriptifs des
auteurs, tu as déjà suffisamment de bagage pour pouvoir fabriquer une
structure comme celle-ci à la main (et elle est très simple).

Je tiens d'autant plus à cette structure "manuelle" que la fonction qui
affecte un mot à un bloc multi est très ouverte. Elle pourrait très bien,
par exemple, aller chercher les traductions dans un fichier externe, ou dans
la base de données, ou auprès d'un service de traduction en ligne...

Cela signifie, signifie, en clair, qu'il pourrait suffire de taper
<multi>Irak</multi> pour obtenir toutes les traductions à partir d'un dico
installé en local (un simple fichier texte, par exemple, ou une structure
plus complexe). La fonction à modifier pour ça, c'est
        function multi_trad ($lang, $trads) {
                // $lang est la langue demandée
                // $trads un tableau déjà analysé, de la forme
                // Array ('' => 'Irak', 'en'=>'Iraq');
        }

     - comme indiqué, il faut conserver les habitudes des raccourcis
précédents (qui sont, dès l'origine, du pseudo-html, avec des balises
ouvrantes et fermantes, et l'usage des chevrons);

Le raccourci c'est <multi>...</multi>, mais ensuite il faut un méthode
simple, rapide, intuitive pour taper ce qu'il y a *à l'intérieur*. Les
balises fermantes sont inutiles (mais on pourrait éventuellement décider de
les ignorer si elles sont présentes et qu'on est stressé par le xml, bien
que je n'en voie pas l'utilité) ; les chevrons sont trop problématiques (on
les voit mal, ils se confondent avec les autres tags), et d'ailleurs en xml
il faudrait mettre <lang name='li'>en lituanien</lang>...

     - la définition du texte "par défaut" me semblait très peu claire et
incomplète, puisqu'il est déduit d'une autre balise (c'est la première
chaîne traduite), et on est obligé d'avoir une chaîne par défaut;

Tu n'as pas vu que <multi>Irak [en] Iraq</multi> utilise "Irak" comme chaîne
par défaut : il n'est pas *obligatoire* de préciser la langue de la chaîne
par défaut (même si c'est mieux si on aime les choses "bien rangées").

     - surtout: ça me bloque sur un autre point qui me turlupine depuis
belle lurette: une balise permettant de changer de langue dans un même
champ.

.../...

Pour le pavé dans une autre langue, je pensais à quelque chose du genre:

> blah blah blah en français
> <lang_ar>du texte en arabe</lang_ar>
> blah blah blah en français à nouveau.

Pour ce genre d'applications, je pense qu'il est totalement illusoire de
vouloir gérer une typo défférenciée ; il reste le problème du bidi, qui se
règle en HTML par le truc lourdingue <div dir='ltr'>...</div>, pour lequel
on peut inventer un raccourci sous la forme <bidi>...</bidi>, qui inverse le
sens du bloc concerné (pas besoin de mnémotechnique trop lourde).

Je remets mon code en améliorant deux-trois points suite à cette discussion,
tu me diras.

PS: tu verras dans inc_filtres, je calcule un ensemble de <div>...</div>
contenant les textes traduits, mais un peu plus longs que ce qui s'affiche
en survol. Dans inc_presentation, il faudrait écrire le javascript qui
affiche le popup correspondant quand on clique sur le micro ; là j'ai fait
un simple alert("texte à afficher"), faute de maîtriser le DHTML...

-- Fil