Carnet Wiki

GestionDeLiensDeTraduction

Version 1 — August 2004 — 81.57.xx.xx — Version initiale

post original

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*

Retour à la version courante

Toutes les versions