[spip-dev] Réflexion sur le modèle BDD à appliquer pour un meilleur multilinguisme

Bonjour,

Suite à ce fil de discussion : http://archives.rezo.net/archives/spip-dev.mbox/45JEHVRO7LFZB3OPKIHZ6P2ZKZ473CXE/
Mais également beaucoup d'autres avant lui, et mon expérience personnelle sur le développement et la maintenance d'un site multilingue, il m'est venu l'idée suivante pour améliorer la gestion du multilinguisme en remontant à la source, à savoir le modèle de stockage dans la base de données qui me semble bancal en contexte multilingue (ce qui est problématique vu l'incroyable diversité de langues dans lesquelles spip est disponible).

Il se peut que cette proposition en soit pas du tout applicable pour des raisons qui me sont inconnues, mais le but de ce message est justement d'ouvrir le débat, allons-y.

Rappel : Je ne sais pas pour vous, mais expliquer les blocs <multi> à mes rédacteurs non techniciens est à chaque fois une plaie, et techniquement c'est un bon gros hack.
Cependant, ils sont aujourd'hui nécessaires pour pouvoir gérer un site multilingue sans avoir à dupliquer tous les objets intégralement (ce qui revient presque à faire autant de sites que de langue, en ne gardant que les squelettes :/). En plus de ça, l'impossibilité d'avoir des url différentes suivant les langues pour un même objet est très pénalisante.

Ma proposition est la suivante : pourquoi ne pas utiliser comme index des objets spip le couple (id_xxx,lang) plutôt que l'id, seul ?
L'id_xxx n'étant alors plus unique, seul le couple devant l'être.

Conséquences :
- plus besoin de blocs multi
- plus besoin de id_trad sur les articles
- plus besoin de lang_select
- en appliquant aux url, on gère alors facilement plusieurs url suivant la langue
- n'empêche en rien les anciens fonctionnements (mono langue ou langue par secteurs séparés) car pas d'impact sur la définition de hiérarchie et de liens

Par contre :
- de grosses modifications à faire sur le fonctionnement interne de spip et de ses plugins (il serait peut-être possible d'intégrer des modes de compatibilité activables pour les plugins ?)
- on perd le bénéfice de l'auto_incrément de la base

Qu'en pensez-vous ?

A bientôt
    Simon

Bonjour,

Ayant le meme genre d'experimentation, j'ai les memes reproches a faire aux
blocs multi
qui n'ont que l'avantage IMMENSE d'exister !

Mais je voudrais d'abord te faire remarquer que conceptuellement,
il n'existe aucune différence entre utiliser le couple {id, lang} que tu
proposes,
et utiliser le couple {secteur-lang, id} qui est la règle a ce jour !
- la question est donc posée au niveau de la gestion de l'interface.

A contrario, l'usage en espace public va sans doute devenir bcp plus souple
avec la nouvelle architecture de squelettes Zpip, puisque c'est TOUT #ENV
qui est passé en paramètres automatiquement : d'ou une question en forme de
souhait
à ce propos, {lang} ne devrait-il pas etre rajouté en standard dans ces
squelettes-dist??
Par ailleurs, la solution de référencement multi-lingue
s'obtient assez facilement me semble-t-il si on reprend les URL-propres
(par exemple de facon simpliste avec CS /tollé des puristes, je sais ;-))

En fait, après avoir BCP galéré pour définir un site multi-lingue
mono-arborescence (ne prenant donc pas le modèle 1 langue = 1 secteur),
{ car la solution de duplication de rubriques fait ipso facto perdre la
structure du site ! }
j'ai decouvert une extension Barre d'edition Multi-lingue (c'etait en 1.9
!!)
qui facilite bcp l'usage dans les rubriques et dans les articles,
(proposant une interface uniforme, declinée par langues ciblées) : génaile !

Reste a re-adapter cette extension pour la V2 : je ne suis pas capable d'y
aller seul,
mais si d'aucuns veulent collaborer....

Cdlt
YannX

"Simon Camerlo" <scamerlo.work@gmail.com> a écrit dans le message de news:
4BC7D978.4000906@gmail.com...
Bonjour,

Suite à ce fil de discussion :
http://archives.rezo.net/archives/spip-dev.mbox/45JEHVRO7LFZB3OPKIHZ6P2ZKZ473CXE/
Mais également beaucoup d'autres avant lui, et mon expérience
personnelle sur le développement et la maintenance d'un site
multilingue, il m'est venu l'idée suivante pour améliorer la gestion du
multilinguisme en remontant à la source, à savoir le modèle de stockage
dans la base de données qui me semble bancal en contexte multilingue (ce
qui est problématique vu l'incroyable diversité de langues dans
lesquelles spip est disponible).

Il se peut que cette proposition en soit pas du tout applicable pour des
raisons qui me sont inconnues, mais le but de ce message est justement
d'ouvrir le débat, allons-y.

Rappel : Je ne sais pas pour vous, mais expliquer les blocs <multi> à
mes rédacteurs non techniciens est à chaque fois une plaie, et
techniquement c'est un bon gros hack.
Cependant, ils sont aujourd'hui nécessaires pour pouvoir gérer un site
multilingue sans avoir à dupliquer tous les objets intégralement (ce qui
revient presque à faire autant de sites que de langue, en ne gardant que
les squelettes :/). En plus de ça, l'impossibilité d'avoir des url
différentes suivant les langues pour un même objet est très pénalisante.

Ma proposition est la suivante : pourquoi ne pas utiliser comme index
des objets spip le couple (id_xxx,lang) plutôt que l'id, seul ?
L'id_xxx n'étant alors plus unique, seul le couple devant l'être.

Conséquences :
- plus besoin de blocs multi
- plus besoin de id_trad sur les articles
- plus besoin de lang_select
- en appliquant aux url, on gère alors facilement plusieurs url suivant
la langue
- n'empêche en rien les anciens fonctionnements (mono langue ou langue
par secteurs séparés) car pas d'impact sur la définition de hiérarchie
et de liens

Par contre :
- de grosses modifications à faire sur le fonctionnement interne de spip
et de ses plugins (il serait peut-être possible d'intégrer des modes de
compatibilité activables pour les plugins ?)
- on perd le bénéfice de l'auto_incrément de la base

Qu'en pensez-vous ?

A bientôt
    Simon

+1 pour la barre typo multilingue

Sur un site bilingue en 1.9.2, j'utilise également la barre typographique multilingue avec la barre typographique généralisée.
Si ce n'est pas la solution idéale pour tous les sites, elles est très faciles à comprendre pour des rédacteurs ponctuels. Sur chaque champs, il y a un onglet français et un onglet anglais. C'est très intuitif.

Par contre, c'est impossible d'arriver à suivre que les modifications apportées à une langue sont reportées dans l'autre langue.

Et pour être fonctionnel, il faut que l'on puisse mettre la barre multilingue sur tous les champs, y compris les titres.

Si la discussion va partir sur la barre typo, ça serait bien de changer
le sujet, histoire de pas perdre le thème (intéressant) lancé par Simon,
qui porte sur le modèle de base de données en lui-même.

Je dis ça pour les gens qui parcourent les sujets sans forcément lire
tous les mails, sachant que les listes SPIP ont quand même un gros
débit.

Mais je voudrais d’abord te faire remarquer que conceptuellement,
il n’existe aucune différence entre utiliser le couple {id, lang} que tu
proposes, et utiliser le couple {secteur-lang, id} qui est la règle a ce jour !

Alors là je ne suis pas du tout d’accord, il y a plusieurs différences conceptuelles fortes :

  • en terme d’optimisation du concept premièrement : si on peut déduire la langue de son secteur, à quoi bon alors enregistrer cette même info de langue dans chaque objet ? C’est totalement redondant.

  • en terme de structure de site : le couple secteur-langue impose une structure, hors ce n’est pas forcément la bonne suivant les projets. Dans mon cas, les secteurs sont les grandes thématiques traitées par le site que je gère (culture, sciences…), il me semble que c’est même leur vocation première.

  • enfin, quand je parle d’indexer sur le couple (id,lang), j’entends aller beaucoup plus loin que ce dont tu parles, à savoir remplacer la clé primaire des tables d’objets spip actuels (spip_articles, spip_mots, spip_rubriques…) qui est constituée uniquement sur id_xxx par une clé primaire composite id_xxx + lang. Le id_xxx devient alors non unique, seul le couple l’est, mais un id_xxx se rapporte à un même concept qui sera de fait traduit en plusieurs langues (ou pas) mais géré par une seule et même table d’objets (car techniquement ce sont les mêmes objets avec les mêmes propriétés).

Ce n’est pas la seule manière de se rapprocher d’une situation plus optimale (et moins contraignante) en terme de structure de données (je pense notamment à des tables de traductions…), mais elle a à mon avis le mérite d’être relativement simple à mettre en place et de ne perturber ni le fonctionnement des sites non multilingues, ni le fonctionnement général de la hiérarchie des contenus, ni même les sites qui feraient le choix de rester en 1 secteur = 1 langue.

  • la question est donc posée au niveau de la gestion de l’interface.

Il y a des problématiques d’interface de saisie, certes, mais aussi des soucis de structures de données imposées et des soucis techniques d’optimisation (lourds) ou de contorsions compliquées dans les squelettes pour faire des choses qui seraient pourtant automatisables assez facilement avec un modèle adapté.

Au passage, un moyen de gérer le « OR » dans critères des boucles serait un plus important aussi, j’ai des idées sur comment faire, mais c’est un autre débat :slight_smile:

A contrario, l’usage en espace public va sans doute devenir bcp plus souple
avec la nouvelle architecture de squelettes Zpip, puisque c’est TOUT #ENV
qui est passé en paramètres automatiquement : d’ou une question en forme de
souhait à ce propos, {lang} ne devrait-il pas etre rajouté en standard dans ces
squelettes-dist??
Par ailleurs, la solution de référencement multi-lingue s’obtient assez facilement me semble-t-il si on reprend les URL-propres
(par exemple de facon simpliste avec CS /tollé des puristes, je sais ;-))

Si tu prends les url propres, tous tes objets qui ont une balise multi dans le titre seront référencés sur le titre dans la langue utilisée lors du premier affichage de l’objet => génial pour la cohérence ça…

Pour ma part, j’ai dû ajouter une fonction au début du pipeline de création des url pour traiter les titres dans chaque langue collés les uns aux autres par ordre « d’importance » dans mon site => c’est pas génial, mais j’ai pas trouvé mieux pour le moment.

En fait, après avoir BCP galéré pour définir un site multi-lingue mono-arborescence (ne prenant donc pas le modèle 1 langue = 1 secteur),{ car la solution de duplication de rubriques fait ipso facto perdre la structure du site ! }

Ah ben on est d’accord alors :slight_smile:

j’ai decouvert une extension Barre d’edition Multi-lingue (c’etait en 1.9 !!) qui facilite bcp l’usage dans les rubriques et dans les articles, (proposant une interface uniforme, declinée par langues ciblées) : génaile !
Reste a re-adapter cette extension pour la V2 : je ne suis pas capable d’y aller seul, mais si d’aucuns veulent collaborer…

Le problème, c’est que techniquement cette barre a des défauts :

  • déjà, au niveau interface : les onglets c’est bien, mais si ton site est traduit en 30 langues, ça va faire désordre…

  • au niveau technique ensuite : derrière, ce n’est ni plus ni moins qu’une génération automatisée de blocs , avec tous les défauts d’optimisation des requêtes que ça sous-entend

  • au niveau de la base : on perd l’intérêt des liens de traduction entre articles vu que tout est dans le même, ce qui veut dire qu’on ne peut pas coller des mots clés différents aux différentes versions d’un article, par exemple pour le mettre en valeur dans une langue et pas l’autre

  • enfin, si le titre n’est pas traduit dans toutes les langues par les rédacteurs, on a des « nouvel article » qui se baladent un peu partout sur le site, ce qui est assez regrettable (j’ai aussi cru un temps que c’était la solution, mais je l’ai désinstallée après un seul jour d’utilisation par mes contributeurs pour cette dernière raison.

Voilà pour la barre multilingue, pour revenir au sujet principal, y-a-t-il actuellement des évolutions déjà programmées dans un sens ou dans l’autre du côté du multilinguisme ? Je sais que vous bossez tous comme des malades sur les futures versions, donc il se peut qu’il y ait déjà de super trucs dans les tuyaux…

A bientôt

Simon

Ma proposition est la suivante : pourquoi ne pas utiliser comme index
des objets spip le couple (id_xxx,lang) plutôt que l'id, seul ?
L'id_xxx n'étant alors plus unique, seul le couple devant l'être.

C'est une proposition fort intéressante. Elle me perturbe sur différents points. D'un point de vue des SGBD, je me demande qu'elle peut être l'impact en terme de performance d'une clé primaire qui 1 n'est pas uniquement numérique, 2 est constituée de 2 champs.

On a fait le choix, pour les tables de liaisons, de passer a une clé primaire qui était 2 identifiants, à 2 identifiants et 1 chaine (id_xx, objet, id_objet). Il semble que l'impact de ce point de vue là soit minime. Mais qu'en serait t'il pour toutes les tables ? et que deviendraient ces tables de liaisons ? (id_xx, lang_xx, id_objet, objet, lang_objet) ? Ça fait du monde pour une clé primaire !

Par contre :
- de grosses modifications à faire sur le fonctionnement interne de spip
et de ses plugins (il serait peut-être possible d'intégrer des modes de
compatibilité activables pour les plugins ?)
- on perd le bénéfice de l'auto_incrément de la base

C'est un chantier énorme tu veux dire ! C'est pour SPIP 4 éventuellement :stuck_out_tongue: Mais lancer un tel truc, cela veut dire qu'on est certain que ça résolve tous les problèmes de multilinguisme... et je ne suis pas certain que cette solution ne crée pas plus de problèmes qu'elle n'en enlève.

Quelqu'un connait les stratégies de multilinguisme appliquées par les autres CMS ?

Ma proposition est la suivante : pourquoi ne pas utiliser comme index
des objets spip le couple (id_xxx,lang) plutôt que l’id, seul ?
L’id_xxx n’étant alors plus unique, seul le couple devant l’être.

C’est une proposition fort intéressante. Elle me perturbe sur différents points. D’un point de vue des SGBD, je me demande qu’elle peut être l’impact en terme de performance d’une clé primaire qui 1 n’est pas uniquement numérique, 2 est constituée de 2 champs.

Je ne sais pas non plus, y’a-t-il un expert dans la salle ?

On a fait le choix, pour les tables de liaisons, de passer a une clé primaire qui était 2 identifiants, à 2 identifiants et 1 chaine (id_xx, objet, id_objet). Il semble que l’impact de ce point de vue là soit minime. Mais qu’en serait t’il pour toutes les tables ? et que deviendraient ces tables de liaisons ? (id_xx, lang_xx, id_objet, objet, lang_objet) ? Ça fait du monde pour une clé primaire !

Attention, dans ce que je propose, les tables de liaison ne changent pas !
(id_document, rubrique, id_rubrique) par exemple reste valide à la condition que les documents soient dotés d’une propriété langue et indexés de la même manière sur le couple (id_document,lang) dans la table spip_document.

Ainsi :

  • soit un document ayant un id_document=42
  • il existe en français, en chinois, en anglais et en espagnol, on aura donc dans la table spip_documents les tuples :
    (42, fr, chemin,…)
    (42, zh, chemin,…)
    (42, en, chemin,…)
    (42, es, chemin,…)
  • ce document est relié à la rubrique ayant l’id_rubrique=2, on, aura dans spip_documents_liens : (42, 2, rubrique)
  • cette rubrique n’existant qu’en chinois et espagnol, à la jointure, on vérifie que document.lang = objet.lang => pas besoin de gérer toutes les combinaisons dans les liens

Ceci reflèterait alors le concept de traduction d’objet au sens éditorial : si c’est traduit, c’est conceptuellement équivalent, donc lié avec les mêmes éléments éditoriaux dans toutes les langues (à quelques exceptions près telles que les mots-clés techniques, mais il suffit d’avoir un set de ces mots clés différent pour chaque langue pour gérer les distinctions).

Par contre :

  • de grosses modifications à faire sur le fonctionnement interne de spip
    et de ses plugins (il serait peut-être possible d’intégrer des modes de
    compatibilité activables pour les plugins ?)
  • on perd le bénéfice de l’auto_incrément de la base

C’est un chantier énorme tu veux dire ! C’est pour SPIP 4 éventuellement :stuck_out_tongue: Mais lancer un tel truc, cela veut dire qu’on est certain que ça résolve tous les problèmes de multilinguisme… et je ne suis pas certain que cette solution ne crée pas plus de problèmes qu’elle n’en enlève.

Ah mais moi non-plus ! :slight_smile:
Je n’ai pas prétention à connaître les entrailles de spip autant que vous tous ici, il est donc possible (voir probable) que cette proposition soit tout simplement inapplicable pour plein de raisons car les choix qui ont été faits jusqu’ici (même les mauvais) ont tous été fait avec de bonnes raisons.
Simplement, ça fait du temps que je me casse les dents sur ces problématiques, et c’est la première fois que j’ai un vrai embryon de piste qui me paraît tenir la route pour les résoudre.

Quelqu’un connait les stratégies de multilinguisme appliquées par les autres CMS ?

Ca m’intéresserait aussi de savoir, j’avoue ne pas bien connaître…

A bientôt
Simon

Bonsoir,

Je reponds sur les deux dernières reactions de Simon ; effectivement il y a de nombreuses différences conceptuelles…

mais je reviens plutot sur le mode “pratique” comme le pose marcimat !!
et j’ai envie de dire :

  • soit la structure est totalement dupliquée
    (et dans ce cas, il y a encore plus simple :
    => définir des SQL VIEW “{lang}” tout SQL est fait pour cela :
    un "simple PHP-FILTER qui ré-interprete le nom de table SQL pré-définit la view dans la bonne langue !
  • soit elle est bancale, et je crains que toute solution ne soit qu’un emplatre,
    car la base serait pratiquement à DéNormaliser !

Mais j’y pense, si on rajoutait juste la VUE-langue,
cela ne pourrait-il pas aussi s’appliquer à l’interface privée,
et donc faciliter l’usage de la barre multi-lingue
(à moins que tes utilisateurs gerent plus de 5 langues…)

Ce qui voudrait dire que la barre multi-langue devrait
pouvoir etre paramétrée par chaque redacteur,
avec l’indication des quelques langues qu’il veut gérer ?

Et sans doute l’expérience de Simon nous rajouterait
quelques autres améliorations…

En conclusion, meme si je galère pour le multi-langues,
pas sur que de faire reposer tout SPIP sur cela
facilite bcp tant la tache de migration que le travail des webmestres mono-lingues !

A suivre…
YannX

Bonsoir,

Je reponds sur les deux dernières reactions de Simon ; effectivement il y a de nombreuses différences conceptuelles…

mais je reviens plutot sur le mode « pratique » comme le pose marcimat !!et j’ai envie de dire :

  • soit la structure est totalement dupliquée (et dans ce cas, il y a encore plus simple :
    => définir des SQL VIEW « {lang} » tout SQL est fait pour cela :un "simple PHP-FILTER qui ré-interprete le nom de table SQL pré-définit la view dans la bonne langue !

Dans cette configuration, si j’ai bien compris le fonctionnement des SQL_VIEW, je n’ose pas imaginer le bazar pour gérer les liens de traduction entre les objets.
Je vois comment monter un site parallèle pour chaque langue, oui, mais je ne vois pas comment le faire communiquer facilement avec les autres versions pour maintenir des liens de traduction.
Pourquoi ne pas gérer les langues par la mutualisation des squelettes seuls ? Une base par langue et basta…

  • soit elle est bancale, et je crains que toute solution ne soit qu’un emplatre, car la base serait pratiquement à DéNormaliser !

Autant que je puisse dire, quand on fait du générique (et un CMS l’est par définition), on n’est jamais dans une situation optimale pour tout. Or spip pousse quand même très fort dans le sens du multilinguisme, il n’y a qu’à voir la quantité de langues dans lesquelles spip.net ou l’espace privé sont traduits et les levées de bouclier pour ne pas oublier les autres langues quand on demande d’améliorer la doc en anglais…
Il me paraît donc dommage qu’il s’arrête en si bon chemin pour être le roi des CMS internationalisés.

La prochaine étape dans cette direction, à mon avis, c'est internationaliser le langage des squelettes, mais c'est un autre débat qui va de pair avec la réflexion sur les nouvelles syntaxes... Je rêve d'un : ... :)

Avec ensuite des scripts permettant de traduire automatiquement un squelette d’une langue dans une autre, en maintenant des fichiers d’alias pour les mots-clés de la même manière que les chaînes de langue, par exemple.

Mais j’y pense, si on rajoutait juste la VUE-langue, cela ne pourrait-il pas aussi s’appliquer à l’interface privée,
et donc faciliter l’usage de la barre multi-lingue (à moins que tes utilisateurs gerent plus de 5 langues…)

Comme je le disais : la barre multilingue génère des blocs multi partout, c’est crade, ça génère des erreurs, ça limite les possibilités d’édition et ça rame.

Ce qui voudrait dire que la barre multi-langue devrait pouvoir etre paramétrée par chaque redacteur, avec l’indication des quelques langues qu’il veut gérer ?

Bon, je ne parlais pas du tout d’interface mais de modèle de donnée dans ma proposition car ça n’a finalement pas grand-chose à voir, mais allons sur ce terrain :

Actuellement, les utilisateurs voient toutes les langues parce qu’ils peuvent être amenés à traduire un article depuis une langue qu’ils ne maîtrisent pas => comment tu fais si tu restreints ? A mon avis une meilleure interface de sélection des langues / traduction serait mieux que de restreindre le champ d’édition auquel ils ont accès à priori.

Dans ma proposition, les objets seraient de fait confondus par leur id_xxx, ils n’auraient alors plus besoin que d’une seule vue principale avec la possibilité de switcher entre les langues (liste déroulante ? autre ?), mais ce n’est pas l’objectif principal.

Et sans doute l’expérience de Simon nous rajouterait quelques autres améliorations…

Les manques que j’ai constatés, bien avant de parler d’interface d’édition, se situent au niveau de la conception même des sites multilingues avec des soucis (dans l’ordre) :

  • de liberté de structure de données
  • de performances
  • de liberté de traitement séparé des différentes langues sans les isoler totalement (cf. urls)
  • de saisie plus facile / souple pour les utilisateurs (leur éviter d’avoir recours à des hacks)
  • de concordance de la base de données avec les objets conceptuels réels qu’elle indexe, parce que si tout n’est qu’un souci d’interface, alors on n’a qu’à faire une grosse table de nodes et hop, on renomme en druspipal :slight_smile:

En conclusion, meme si je galère pour le multi-langues, pas sur que de faire reposer tout SPIP sur cela
facilite bcp tant la tache de migration que le travail des webmestres mono-lingues !

C’est pourquoi j’ai proposé une solution qui n’impacterait normalement que peu les sites monolingues.
Par contre, c’est vrai qu’elle demande de revoir une bonne partie de l’organisation des données générées par spip, et donc des scripts qui les manipulent.

Il y aurait peut-être des solutions intermédiaires possibles en modifiant un peu le fonctionnement du id_trad et en le généralisant à tous les objets :

  • initialisé à id_objet pour le premier objet plutôt qu’à 0
  • les tables des objets se verraient ajouter un index unique (pas primary) sur (id_trad,lang)
  • les liens entre les objets se feraient tous dans des tables de liens (id_xxx, id_objet, type_objet), mais pour respecter l’architecture conceptuelle des données (et non pas technique), il faudrait alors que ces liaisons se fassent entre les id_trad plutôt que les id_objets
    => c’est peut-être pluginisable, je sais pas, mais il faudrait alors surcharger tous les critères par défaut qui génèrent des jointures, oulà le travail…

En plus ce fonctionnement serait beaucoup plus compliqué à comprendre pour un non initié, alors que justement l’une des qualités essentielles qu’a, à mon avis, spip par rapport à d’autres, c’est que son modèle de base de données est compréhensible immédiatement par un humain même sans lire les docs, donc extensible facilement.

Bon, sur ce, à bientôt

Simon

Pour le bloc <multi> : tu as essayé le plugin "multilang" qui insère des petits liens "fr" "en", "es", etc en haut du formulaire d'édition (pour l'instant il ne fait que les rubriques mais ce serait intéressant de l'étendre) ?

C'est super rapide et ça marche très bien (y compris pour les "23. Numéros").

C'est la première fois que j'entende de cela ! Merci.

Cela pourrait être utile pour des articles. J'en ai beaucoup avec des titres comme :

040. <multi>By road from the South[ar]الطريق من الجنوب[bg]ако идвате с кола от юг[cs]Po silnici z jihu[da]Når du kommer fra Syd[et]Maanteed mööda lõuna poolt[fi]Maanteitse etelästä[hr]Cestom s juga[hu]Autóval délről[id]Berkendaraan dari Selatan[ja]南からの道路[ko]남쪽에서 차로 올 때[lt]Keliu iš pietų[lv]Braucot pa šoseju no Dienvidiem[no]Kjørerute fra sør[ro]Pe şosea dinspre Sud[ru]Автодорогой с юга[sk]Cestou z juhu[sl]Po cesti z juga[sr]Путем са југа[sv]Vägen från söder[sw]Kwa barabara kutokea kusini[ta]தெற்கு பெருஞ்சலை வழியாக[vi]Đường bộ từ phía Nam[zh]乘陸路交通從南而至[uk]Дорогою з Півдня</multi>

Mais les <multi> comme titres, il y a un grand problème : comment y donner accès aux traducteurs ? (sans les établir admins restreints pour le sectuer où trouve ces titres).

Si je fais traduire par trad-lang : des <:toto:>, ils peuvent u accéder, mais ensuite le titre n'est plus trouvé par le moteur de recherche !

Mais ... même avec cela, SPIP march très bien :slight_smile:

Paolo

Je ne connaissais pas, je vais essayer.
Mais si j’ai bien compris, il fournit juste une interface pour les blocs multi dans l’espace privé ?
Alors dans ce cas, ce n’est pas du tout le propos et il ne répond pas à mes besoins, comme je l’ai déjà dit pour la barre multilangue.

A bientôt
Simon

simon camerlo a écrit :

En quoi est-ce nécessaire ?

Je crois qu'on est parti d'un problème que sont les multi nécessaires dans les rubriques, donc le problème est plutôt la gestion des traductions de rubriques, qui pourrait se faire comme pour les articles, non ?

-Nicolas

Nicolas Hoizey a écrit :

  
quand je parle d'indexer sur le couple (id,lang), j'entends aller beaucoup plus loin que ce dont tu parles, à savoir remplacer la clé primaire des tables d'objets spip actuels (spip_articles, spip_mots, spip_rubriques...) qui est constituée uniquement sur id_xxx par une clé primaire composite id_xxx + lang
    

En quoi est-ce nécessaire ?

Je crois qu'on est parti d'un problème que sont les multi nécessaires dans les rubriques, donc le problème est plutôt la gestion des traductions de rubriques, qui pourrait se faire comme pour les articles, non ?

-Nicolas
  

Ce qui revient à dupliquer l’arborescence, car c’est elle qui est en jeu : logiquement, une arborescence de rubriques est sensée représenter une hiérarchie de concepts, ces concepts et leur articulation restant valide quelle que soit la langue dans laquelle ils sont exprimés => l’indexation sur un couple id_objet (qui serait de fait un id_concept) + lang permettrait alors de relier les concept entre eux, et pas directement leur version dans l’une ou l’autre des langues, dans les tables de liaison.

A bientôt
Simon

Nicolas Hoizey a écrit :

En quoi est-ce nécessaire ?

Je crois qu'on est parti d'un problème que sont les multi nécessaires dans les rubriques, donc le problème est plutôt la gestion des traductions de rubriques, qui pourrait se faire comme pour les articles, non ?

Ce qui revient à dupliquer l'arborescence, car c'est elle qui est en jeu : logiquement, une arborescence de rubriques est sensée représenter une hiérarchie de concepts, ces concepts et leur articulation restant valide quelle que soit la langue dans laquelle ils sont exprimés

Sauf qu'on peut avoir besoin d'arborescences différentes parce que certains sujet seront traités moins complètement dans certaines langues.

=> l'indexation sur un couple id_objet (qui serait de fait un id_concept) + lang permettrait alors de relier les concept entre eux, et pas directement leur version dans l'une ou l'autre des langues, dans les tables de liaison.

On n'a pas de table de liaison pour les traductions d'articles, c'est directement le champ id_trad de la table spip_articles...

-Nicolas

Nicolas Hoizey a écrit :


  
Nicolas Hoizey a écrit :
    
En quoi est-ce nécessaire ?

Je crois qu'on est parti d'un problème que sont les multi nécessaires dans les rubriques, donc le problème est plutôt la gestion des traductions de rubriques, qui pourrait se faire comme pour les articles, non ?  
      
Ce qui revient à dupliquer l'arborescence, car c'est elle qui est en jeu : logiquement, une arborescence de rubriques est sensée représenter une hiérarchie de concepts, ces concepts et leur articulation restant valide quelle que soit la langue dans laquelle ils sont exprimés
    
Sauf qu'on peut avoir besoin d'arborescences différentes parce que certains sujet seront traités moins complètement dans certaines langues.
  

Dans ma proposition, rien n’oblige à utiliser une arborescence unique, tu peux très bien faire un secteur = une langue si c’est ce que tu veux, ou utiliser des arborescences simplifiées pour certaines parties de ton site dans certains cas (dans ce cas tu perds les liens de traduction, c’est l’inconvénient, mais en même temps tu perds l’équivalence conceptuelle, c’est donc logique).
Par contre elle le permet.

=> l'indexation sur un couple id_objet (qui serait de fait un id_concept) + lang permettrait alors de relier les concept entre eux, et pas directement leur version dans l'une ou l'autre des langues, dans les tables de liaison.
    

On n'a pas de table de liaison pour les traductions d'articles, c'est directement le champ id_trad de la table spip_articles...
  

Oui, je sais bien, je ne parle pas des liens de traduction entre articles ou entre rubriques (puisqu’ils ont le même id dans ce que je propose), je parle des liens entre objets : spip_mots_articles, et à définir spip_articles_rubriques.
Ou de manière plus générale vu que c’est dans cette direction qu’on va : spip_mots_liens, spip_rubriques_liens, etc.

A bientôt
Simon

Nicolas Hoizey a écrit :

Sauf qu'on peut avoir besoin d'arborescences différentes parce que certains sujet seront traités moins complètement dans certaines langues

Dans ma proposition, rien n'*oblige* à utiliser une arborescence unique, tu peux très bien faire un secteur = une langue si c'est ce que tu veux, ou utiliser des arborescences simplifiées pour certaines parties de ton site dans certains cas (dans ce cas tu perds les liens de traduction, c'est l'inconvénient, mais en même temps tu perds l'équivalence conceptuelle, c'est donc logique).

Je peux vouloir traduire en anglais une rubrique que j'ai en français, mais la placer ailleurs dans l'arborescence.

Par contre elle le *permet*.

=> l'indexation sur un couple id_objet (qui serait de fait un id_concept) + lang permettrait alors de relier les concept entre eux, et pas directement leur version dans l'une ou l'autre des langues, dans les tables de liaison.

On n'a pas de table de liaison pour les traductions d'articles, c'est directement le champ id_trad de la table spip_articles...

Oui, je sais bien, je ne parle pas des liens de traduction entre articles ou entre rubriques (puisqu'ils ont le même id dans ce que je propose), je parle des liens entre objets : spip_mots_articles, et à définir spip_articles_rubriques.

A quoi servirait spip_articles_rubriques ?

Ou de manière plus générale vu que c'est dans cette direction qu'on va : spip_mots_liens, spip_rubriques_liens, etc.

Je ne comprends toujours pas pourquoi tu veux remplacer un id_article unique par un couple id_article/lang... :wink:

-Nicolas

Fri, 16 Apr 2010, Simon:

il m'est venu l'idée suivante pour améliorer la gestion
du multilinguisme en remontant à la source, à savoir le modèle de
stockage dans la base de données

Voici une autre réflexion/proposition, partant sur le même constat,
mais en pensant à une traduction des *champs* et non pas des *objets*.

* Structure :
Pouvoir utiliser des chaînes du type <:truc:> ou :truc: dans les divers
champs des objets, que ce soient des titres de rubriques ou n'importe
quel champ, pour pouvoir récupérer la chaîne de langue correspondante.

Variante : la chaîne telle quelle sans les ::, systématiquement
considérée comme une clé de traduction, et donc remplacée par la
traduction si celle-ci existe, ou gardée telle quelle sinon. Cette
variante demanderait par contre d'accepter tous les caractères dans les
clés de traduction. On peut se dire que c'est casse-gueule pour des
valeurs identiques de deux champs différents mais qu'on ne voudrait pas
toujours traduire, ou pas traduire pareil, mais en vrai ça c'est juste
une question de bien séparer les espaces de nommage.

* Interface (dans un 2e temps, et optionnellement) :
Intégrer davantage dans l'interface de SPIP les traductions des chaînes
de langue. D'ailleurs j'ai cru comprendre qu'il y a du boulot entamé au
niveau des interfaces de traduction.

* Évolutions :
Proposer un backend de stockage des chaînes de langue en base de
données, ce qui résoudrait d'ailleurs plein de questions abordées dans
d'autres fils.

Autre variante de cette proposition, plus lourde: coller des id sur les
champs, au lieu des valeurs textuelles (titre serait un id par
exemple), et aller chercher la valeur dans une table ayant pour champs
id, valeur, langue. C'est finalement la même approche que le coup des
chaînes de langue, en plus formel (la clé est un nombre, et on stocke
les traductions en base au lieu d'un tableau PHP), avec les avantages
et inconvénients que comporte une solution formelle par rapport à
quelque chose de plus "hacké".

Bref ce ne sont pas des solutions clé en main, mais d'autres pistes de
réflexion.

Nicolas Hoizey a écrit :

Sauf qu’on peut avoir besoin d’arborescences différentes parce que certains sujet seront traités moins complètement dans certaines langues
Dans ma proposition, rien n’oblige à utiliser une arborescence unique, tu peux très bien faire un secteur = une langue si c’est ce que tu veux, ou utiliser des arborescences simplifiées pour certaines parties de ton site dans certains cas (dans ce cas tu perds les liens de traduction, c’est l’inconvénient, mais en même temps tu perds l’équivalence conceptuelle, c’est donc logique).

Je peux vouloir traduire en anglais une rubrique que j’ai en français, mais la placer ailleurs dans l’arborescence.

A quelle fréquence évalues-tu ce besoin par rapport à une arborescence unique, quoique non entièrement traduite ?
Comme je l’ai dit : je pense qu’un CMS est par définition générique, il ne peut donc être optimal dans tous les cas, reste à définir quels sont les cas que l’on veut privilégier, ce qui revient souvent à déterminer les cas d’utilisation les plus fréquents.

Pour ma part, je dirais qu’un site multilingue ayant des arborescences totalement différentes d’une langue à l’autre, ben ça ressemble plutôt à plusieurs sites séparés rassemblés sur la même base simplement pour le confort.
Quel serait alors l’intérêt de maintenir des liens de traduction entre des objets articulés totalement différemment ?
Quel en serait le sens du point de vue de la navigation ?

Par contre elle le permet.

=> l’indexation sur un couple id_objet (qui serait de fait un id_concept) + lang permettrait alors de relier les concept entre eux, et pas directement leur version dans l’une ou l’autre des langues, dans les tables de liaison.

On n’a pas de table de liaison pour les traductions d’articles, c’est directement le champ id_trad de la table spip_articles…
Oui, je sais bien, je ne parle pas des liens de traduction entre articles ou entre rubriques (puisqu’ils ont le même id dans ce que je propose), je parle des liens entre objets : spip_mots_articles, et à définir spip_articles_rubriques.

A quoi servirait spip_articles_rubriques ?

En effet, je me suis emballé sur celui-là, il n’y a pas besoin de cette table et on pourrait maintenir le fonctionnement actuel.
Ou alors passer sur spip_rubriques_liens dont les types d’objets seraient documents, brèves, articles, lettres (avec spip-lettres par exemple), formulaires, etc.

Ou de manière plus générale vu que c’est dans cette direction qu’on va : spip_mots_liens, spip_rubriques_liens, etc.

Je ne comprends toujours pas pourquoi tu veux remplacer un id_article unique par un couple id_article/lang… :wink:

Parce que sémantiquement parlant, l’objet éditorial est le même, il a simplement une propriété de langue différente entraînant un affichage différent de ses champs textuels (c’est pour ça que j’ai parlé de l’autre possibilité : des tables de traductions reliées à un objet principal).

En fait ce n’est pas essentiel sur les articles car ils sont les feuilles de l’arbre, il n’y a pas d’impact sur d’éventuels descendants.
Là où ça se complique, c’est dans le cas des rubriques : si on passe sur un schéma de traduction de rubrique sur le modèle des articles actuels, on n’a aucune garantie du maintien de cette arborescence logique et de l’articulation des concepts / thématiques qu’elle matérialise.

Sur des sites avec un grand nombre d’intervenants faisant chacun son petit truc dans son coin, les arbres des différentes langues vont petit à petit diverger à coup de petits déplacements d’articles ou rubriques, pour finir par ne plus ressembler à rien, bonjour l’angoisse pour l’internaute qui essaie de s’y repérer (ou l’admin en l’occurrence :slight_smile:

L’idée est donc de proposer une solution qui, tout en supprimant les contraintes du système actuel, n’alourdisse pas la création de petits sites simples, ne nuise pas à la lisibilité de la base de données par un humain, et qui par ailleurs puisse aider à maintenir une cohérence éditoriale sur des sites plus gros sans avoir à faire la police toutes les 5 minutes parce que la traduction de tel objet a bougé dans un endroit où elle n’a rien à faire.

A bientôt
Simon