Gmane
From: ARNO* <arno <at> scarabee.com>
Subject: Multilingue: gestion de liens de traduction
Newsgroups: gmane.comp.web.spip.devel
Date: 2003-08-10 22:24:42 GMT (5 years, 16 weeks, 3 days, 3 hours and 11 minutes ago)

Salut,

Je viens d'uploader un système de gestion de liens entre les articles pour 
gérer les traductions. Il s'agit tout simplement de pouvoir indiquer qu'un 
article est la traduction d'un autre.

- Dans la page d'un article, sous le choix de la langue, apparaissent deux 
entrées:

     A. La principale, à droite, est un bouton "Ecrire une nouvelle 
traduction de cet article". C'est la façon la plus simple de s'y prendre: 
le nouvel article est directement "lié" au premier en tant que traduction. 
Tous les rédacteurs peuvent utiliser ce bouton pour proposer une 
traduction.

     B. La seconde (en interface complète seulement), uniquement si article 
éditable, à gauche, permet d'indiquer qu'un article est la traduction d'un 
autre article (on indique son numéro). Cette fonctionnalité est 
indispensable pour rattraper les oublis, et pour mettre à jour un site déjà 
existant. Messages d'erreur si article inexistant ou déjà lié.

- Les articles ainsi liés apparaissent en tant que "Cet article est la 
traduction de...". On peut décider de ne plus lier l'article (déplier la 
case).

- Si on lie un article appartenant déjà à un groupe de traduction à un 
autre groupe déjà existant, les deux groupes de traductions fusionnent.

- Il n'y a pas de vérification de concurrence des langues (par exemple, un 
article en français peut être lié à un autre article en français par ce 
biais - même si ça n'est vraiment pas fait pour). Je ne sais pas si c'est 
vraiment nécessaire (notamment: ça pose de gros problèmes de logique: que 
faire en cas de concurrence?)

- Dans la table, c'est géré très simplement via une colonne supplémentaire 
dans "spip_articles": "id_trad" (qui n'est qu'un chiffre dans l'absolu, 
incrémenté par calcul manuel; il n'y a pas par exemple de table "spip_trad" 
où l'on retrouverait ces "id_trad"). Les articles qui sont la traduction 
l'un de l'autre ont tout simplement le même numéro de $id_trad. L'avantage 
de cette méthode est de simplifier à l'extrême les requêtes (notamment dans 
les requêtes construites par les boucles: il n'y a pas besoin d'un table 
intermédiaire, on se contente de récupérer le id_trad du contexte).

- Dans les boucles (uniquement de type ARTICLES, puisque seuls les articles 
sont ainsi liés), il suffit d'utiliser le critère {traduction}:
    <BOUCLE_trad(ARTICLES){traduction}{exclus}>
fournit la liste des articles liés à l'article principal (lui-même 
s'excluant). Très très simple donc.

N.B. J'aurais pu utiliser directement {id_trad} (on peut, mais faut alors 
préciser aussi {id_trad>0}, mais j'ai préféré créer un critère spécifique 
({traduction}). En effet, c'est nettement plus explicite, et surtout 
{id_trad} pourrait laisser penser à de véritables "groupes" de traduction 
(façon id_mot, id_forum...) alors que ça n'est pas le cas: il ne faut 
surtout pas essayer de s'amuser à sélection des id_trad (genre {id_trad=3}) 
parce que ça ne rime à rien (sachant que, de plus, pour un article, les 
id_trad peuvent changer au cours du temps, notamment lors des fusions de 
liens).

=====

Ah oui, dans les menus de sélection de la rubrique (pour sous-rubrique, 
article, brève), j'indique les changements de langues. C'est important, 
puisque ça conditionne la langue des articles et brèves (surtout si on 
n'active pas le choix de langue par article/brève).

======
Au passage, je signale un changement cosmétique: les boutons qui utilisent 
la petite icone "supprimer.gif" adoptent un fond à rayures (noir et orange, 
mais très très pale), marquant une action relativement "dangereuse".

ARNO*


Salut,

Je viens d'uploader un système de gestion de liens entre les articles pour 
gérer les traductions. Il s'agit tout simplement de pouvoir indiquer qu'un 
article est la traduction d'un autre.

- Dans la page d'un article, sous le choix de la langue, apparaissent deux 
entrées:

     A. La principale, à droite, est un bouton "Ecrire une nouvelle 
traduction de cet article". C'est la façon la plus simple de s'y prendre: 
le nouvel article est directement "lié" au premier en tant que traduction. 
Tous les rédacteurs peuvent utiliser ce bouton pour proposer une 
traduction.

     B. La seconde (en interface complète seulement), uniquement si article 
éditable, à gauche, permet d'indiquer qu'un article est la traduction d'un 
autre article (on indique son numéro). Cette fonctionnalité est 
indispensable pour rattraper les oublis, et pour mettre à jour un site déjà 
existant. Messages d'erreur si article inexistant ou déjà lié.

- Les articles ainsi liés apparaissent en tant que "Cet article est la 
traduction de...". On peut décider de ne plus lier l'article (déplier la 
case).

- Si on lie un article appartenant déjà à un groupe de traduction à un 
autre groupe déjà existant, les deux groupes de traductions fusionnent.

- Il n'y a pas de vérification de concurrence des langues (par exemple, un 
article en français peut être lié à un autre article en français par ce 
biais - même si ça n'est vraiment pas fait pour). Je ne sais pas si c'est 
vraiment nécessaire (notamment: ça pose de gros problèmes de logique: que 
faire en cas de concurrence?)

- Dans la table, c'est géré très simplement via une colonne supplémentaire 
dans "spip_articles": "id_trad" (qui n'est qu'un chiffre dans l'absolu, 
incrémenté par calcul manuel; il n'y a pas par exemple de table "spip_trad" 
où l'on retrouverait ces "id_trad"). Les articles qui sont la traduction 
l'un de l'autre ont tout simplement le même numéro de $id_trad. L'avantage 
de cette méthode est de simplifier à l'extrême les requêtes (notamment dans 
les requêtes construites par les boucles: il n'y a pas besoin d'un table 
intermédiaire, on se contente de récupérer le id_trad du contexte).

- Dans les boucles (uniquement de type ARTICLES, puisque seuls les articles 
sont ainsi liés), il suffit d'utiliser le critère {traduction}:
    <BOUCLE_trad(ARTICLES){traduction}{exclus}>
fournit la liste des articles liés à l'article principal (lui-même 
s'excluant). Très très simple donc.

N.B. J'aurais pu utiliser directement {id_trad} (on peut, mais faut alors 
préciser aussi {id_trad>0}, mais j'ai préféré créer un critère spécifique 
({traduction}). En effet, c'est nettement plus explicite, et surtout 
{id_trad} pourrait laisser penser à de véritables "groupes" de traduction 
(façon id_mot, id_forum...) alors que ça n'est pas le cas: il ne faut 
surtout pas essayer de s'amuser à sélection des id_trad (genre {id_trad=3}) 
parce que ça ne rime à rien (sachant que, de plus, pour un article, les 
id_trad peuvent changer au cours du temps, notamment lors des fusions de 
liens).

=====

Ah oui, dans les menus de sélection de la rubrique (pour sous-rubrique, 
article, brève), j'indique les changements de langues. C'est important, 
puisque ça conditionne la langue des articles et brèves (surtout si on 
n'active pas le choix de langue par article/brève).

======
Au passage, je signale un changement cosmétique: les boutons qui utilisent 
la petite icone "supprimer.gif" adoptent un fond à rayures (noir et orange, 
mais très très pale), marquant une action relativement "dangereuse".

ARNO*