Interface de traduction pour objets

Ce plugin propose une interface pour rendre la gestion des traductions de vos objets traduisibles plus facile. Il reprend en grande partie les solutions apportées par Traductions d’articles autrement et Traductions de rubriques autrement en les rendant disponibles pour tous les objets traduisibles.

Recherche de repreneur

Je ne suis plus suffisamment impliqué dans spip pour assurer un maintien correcte de ce plugins, Donc si quelqu’un veuille reprendre la main, c’est avec plaisir.

Introduction

Principe

Ce plugin est censé rendre la gestion des traductions de vos objets éditoriales traduisibles [1] plus faciles. Il intègre et applique à tout objet traduisible les solutions apportées par Traductions d’articles autrement et Traductions de rubriques autrement. Ces derniers seront rendus obsolètes par l’installation du présent plugin et pourront donc être désinstallés sans problème.

Secteur par langue

On parle de secteur par langue si vos rubriques à la racine définissent le secteur d’une langue. Tout contenu contenu à l’intérieur de ce secteur (article ou autre objet qui dépend de rubrique) héritera la langue de la rubrique parente. Afin de profiter des fonctionnalités « Secteur par langue » il vous faut installer le plugin Secteur par Langue

Notez que vous pouvez également installer le plugin Site multilingue facile qui vous permet de disposer d’un site multilingue avec secteur par langue en quelques clics. Tous les plugins nécessaires, dont Secteur par Langue et le présent plugin seront installés automatiquement.

Barre des traductions

Onglets de langues

Pour tout objet éditorial traduisible ce plugin insère des onglets de langues en haut de l’objet, permettent de naviguer plus facilement entre les différentes traductions de cet objet, d’y ajouter une traductions ou d’en enlever une.

Pour chaque langue du site un onglet est créé. En blanc les langues dans lesquelles l’objet est traduit et en gris les traductions manquantes. L’astérisque désigne l’objet d’origine, la référence de la traduction.

Hiérarchie

Quand vous créez une nouvelle traduction et que votre objet dépend d’une rubrique, sa traduction sera automatiquement attachée à la rubrique de l’objet d’origine.

Si vous trouvez dans un système de secteur par langue, la nouvelle traduction d’un objet sera enregistrée sous la traduction correspondante de la rubrique parente. Si la rubrique parente n’est pas encore traduite dans la langue de destination, le plugin vous forcera à traduire toute la structure parente dans la langue de destination avant de pouvoir traduire l’objet en question.

Options de langues

Les options de langues peuvent être modifiées en cliquant sur l’icône à droite des onglets de langue.

S’ouvre alors le formulaire natif de gestion de traductions [2]

La langue

Par défaut, lors de la création d’un nouvel objet, celui-ci, comme nativement dans SPIP, est créé dans la langue de l’espace privé. La langue peut alors être changée en cliquant sur le lien « changer ».

Dans un système de secteur par langue, si votre objet se trouve dans une rubrique, l’objet créé prendra la langue de cette rubrique. Dans ce contexte il n’est pas possible de changer la langue car elle dépend de la rubrique parente.

Traduction de référence

Il s’agit de l’objet original. Vous pouvez le changer en appuyant sur le bouton dans la colonne Traduction.

Affichage compact

Par défaut, le plugin change l’affichage des listes des objets traduisibles [3], en regroupant toutes les traductions.

Sont seulement listés les objets non traduits et les objets d’origine, triés par l’identifiant de l’objet, puis sur la même ligne on peut trouver les éventuelles traductions de l’objet.

En cliquant sur la flèche dans la colonne traductions, il est possible de voir toutes les traductions de manière plus détaillée.

Personnalisation

A défaut d’un squelette de liste compacte pour un objet déterminé, le plugin crée une liste générique.

Vous pouvez vous inspirer de

prive/objets/liste/compacte/articles.html

pour créer la liste compacte pour votre objet.

il suffit de respecter le chemin de base

prive/objets/liste/compacte/NomObjet.html

Configuration

Dans le panneau de configuration du plugin, pour chaque objet traduisible il est possible de :

  • désactiver les onglets de langue ;
  • désactiver l’affichage compact.

Notes

[1Un objet est considéré traduisible s’il contient les champs lang et id_trad.

[2Ce formulaire pourrait également être activé via la page de configuration de « Multilinguisme » et s’affichera alors une deuxième fois un peu plus bas sur la page. Ce qui n’est évidemment pas nécessaire.

[3Ce comportement peut-être désactivé dans Configuration.

Discussion

12 discussions

  • 1

    Bonjour,
    Merci pour ce plugin !
    est-ce qu’un portage en version en 4.2 est à l’ordre du jour ?
    Est-ce que quelqu’un a testé sur 4.2 en modifiant le paquet.xml par hasard ?

    • Je m’auto-réponds.
      Testé en mofiant le paquet.xml (en mettant 4.2.)
      4 erreurs identiques apparaissent :
      Aucun squelette prive/objets/liste/objets_compacte n’est disponible...
      Donc non, ça ne passe pas ;)

    Répondre à ce message

  • Bonjour,

    Sous SPIP 4, à la création d’une nouvelle traduction d’un objet, son logo n’est pas copié.

    Cela provoque même une erreur :
    ERREUR : Echec document_inserer() du document /Users/...../tmp/upload/arton5.jpgUsG8Km arton5.jpg (M ’logoon’ T ’article’ L ’26’ D ’’)

    La fonction document_inserer() du plugin medias appelle le pipeline « pre_insertion » et tente de renseigner des champs qui n’existent pas dans la table spip_documents.

    Il me semble que le problème vient de la fonction interface_traduction_objets_pre_insertion() à la ligne 248 dans le fichier pipelines du plugin qui n’est pas assez restrictive. En mettant ceci, le problème est corrigé :

    if (($lang = _request('lang_dest') AND ($flux['args']['table'] != 'spip_documents'))) {

    Merci pour ce plugin, bien utile !

    Répondre à ce message

  • liberte

    Bonjour

    Pour info, j’ai les messages suivants (pas bloquant) Spip 3.2.13 :

    en lignes 88 et 108

    1Erreur SQL 1054
    Unknown column ’spip_rubriques_liens.id_rubrique’ in ’where clause’
    SELECT id_trad,id_livre FROM spip_livres LEFT JOIN spip_rubriques_liens ON spip_livres.id_livre=spip_rubriques_liens.id_objet WHERE spip_rubriques_liens.objet LIKE ’livre’ AND spip_rubriques_liens.id_rubrique=37 AND spip_livres.id_rubrique=37 ORDER BY id_livre desc
    /home/users/1/mon site/plugins/auto/interface_traduction_objets/v2.0.4/prive/objets/liste/objets_compacte_fonctions.php liste_compacte_requete_objet() sql_allfetsel() ; 88
    2 Erreur SQL 1054
    Unknown column ’spip_rubriques_liens.id_rubrique’ in ’where clause’
    SELECT id_livre as id, date_parution as date FROM spip_livres LEFT JOIN spip_rubriques_liens ON spip_livres.id_livre=spip_rubriques_liens.id_objet WHERE spip_rubriques_liens.objet LIKE ’livre’ AND spip_rubriques_liens.id_rubrique=37 AND spip_livres.id_rubrique=37 AND spip_livres.id_livre IN (-1) ORDER BY id_livre desc
    /home/users/1/mon site/plugins/auto/interface_traduction_objets/v2.0.4/prive/objets/liste/objets_compacte_fonctions.php

    Répondre à ce message

  • 3

    Salut,
    Il y a eu un petit soucis avec le post de mon message précédent. Je ne peux plus répondre dans la discussion maintenant ?!
    Je reprends ici, désolé.
    Pour référence :

    Je teste le plugin v2.0.2 avec spip 4.1.0 et sur la page /ecrire/ ?exec=mot&id_mot=xxx
    j’obtiens une erreur d’exécution.

    Merci pour cette version 2.0.3 mais elle ne règle pas le problème malheureusement. Je ne traduis pas les mots clé (je ne pensais pas que c’était possible)

    Comme tu ne reproduis pas le problème j’ai fouillé un peu plus : c’est quand le plugin Traduction des rubriques est actif que l’erreur apparaît. Il faut dire qu’il n’est pas encore donné comme compatible 4.1 ceci explique peut-être cela. J’essayerais de regarder le code plus en détail dans la semaine.

    Merci de ton aide en tout cas.

    • Bonjour,

      Après une bonne plongée dan le code :
      prive/objets/liste/objets_compacte_fonctions.php ligne 57

      elseif ($objet_associable = objet_associable($exec))

      $exec est NULL chez moi et c’est ce qui déclenche l’erreur.

      elseif ($objet_associable = objet_associable($exec ?? ''))

      permet de la masquer, mais du coup je me demande ce qu’est censée contenir $exec ?

    • Bien joué Alexis,

      la variable

      $exec

      devrait ètre la valeur du parametre exec

      _request('exec')

      mais n’est déclaré nulle part.

      C’est corrigé dans la v 2.0.4

    Répondre à ce message

  • 4

    Bonjour,

    Je teste le plugin v2.0.2 avec spip 4.1.0 et sur la page /ecrire/ ?exec=mot&id_mot=xxx
    j’obtiens une erreur d’exécution :

    Erreur d’exécution ../plugins/auto/interface_traduction_objets/v2.0.2/prive/objets/liste/objets_compacte.html | File […]/ecrire/base/objets.php Line 1067 : Argument 1 passed to table_objet_sql() must be of the type string, null given, called in […]/ecrire/action/editer_liens.php on line 51

    Quelqu’un d’autre constate ce problème ?

    Répondre à ce message

  • bonjour,

    sur un spip 4 « vierge », après installation du plugin, la traduction entre les rubriques n’est pas disponible. Le point est discuté (si j’ai bien compris) dans un échange de ce forum en 2019 et il semble qu’il faille activer le plugin « Traduction entre rubriques » pour que cela soit possible, mais alors pourquoi ces garder 2 plugins, qui font grosso modo la même chose ?
    Mais si les deux se complètent, alors pourquoi ne pas ajouter « Traductions entre rubriques » comme une dépendance explicite et requise de ce plugin ?

    J’en profite pour quelques remarques :
    -  il me semble que la présentation en liste horizontale des langues disponibles sous forme de boutons est assez perturbante. Pourquoi ne pas choisir une interface par select comme c’est le cas partout ailleurs dans Spip ? Ou alors si vous pensez que c’est vraiment mieux de le faire sans passer par un select, il faudrait alors mettre mieux en évidence cette liste de boutons : ce sont des boutons et pas seulement des « étiquettes » comme je l’ai cru au premier abord.

    -  comme il se doit (je me moque de moi-même), j’ai lu (trop) rapidement la doc et j’ai installé le plugin et fais tout de suite quelques essais. Du coup, j’ai mis un certain temps avant de comprendre que le dernier item (avec l’icône de traduction) est en fait un bouton pour changer la langue de l’objet. J’ai cru que c’est une icône de présentation, une sorte de label pour dire les choses autrement. Donc là aussi, je pense qu’il faudrait présenter le bouton comme un vrai... bouton. On est bien d’accord que j’aurais dû mieux lire les infos dans cette page, mais tout de même, il ne devrait pas être nécessaire de lire une documentation pour comprendre qu’un bouton... est un bouton ;).

    -  lorsque la liste des langues disponibles est importante, la présentation sur une seule ligne horizontale ne fonctionne plus. Là aussi, il me semble qu’une présentation verticale (1 colonne ou 2 colonnes) ou autre... serait plus efficace visuellement.

    merci.

    christophe

    Répondre à ce message

  • 2

    Bonjour,
    Ce plugin semble provoquer un bug —> on ne peut plus ranger les articles avec le plugin Rang lorsque le plugin « Interface de traduction pour objets » est activé (sous SPIP 3.2.7, PHP 7.1 et tous les plugins mis à jour).

    Répondre à ce message

  • 4

    Bonjour,

    Mille mercis pour ces plugins d’aide à la traduction que j’utilise à haute dose !

    Je viens de faire une mise à jour de traduire_article_autrement de la version 1.4.6 à la version 2.0.0 et si je comprends bien c’est maintenant ce plugin qui prend le relais. J’ai donc maintenant installé

    interface_traduction_objets en version 1.1.8

    J’ai constaté que les auteurs n’avaient plus accès aux boutons de langues pour leurs articles. Jusqu’à l’update les 3 langues configurées de mon sites (français/turc/anglais) étaient proposées. Depuis l’update seul la langue de l’article est proposée à l’auteur. L’administrateur quant à lui continue de voir les 3 langues. Je joints des copies d’écrans pour être plus claire.

    Quelqu’un constate-t-il le même comportement ? Est-ce le fonctionnement souhaité ?

    • Bonjour,
      J’ai pris le temps de regarder un peu dans le code et effectivement dans le fichier barre_traductions_objet.html l’affichage des boutons de traduction est conditionné à

      #AUTORISER{creerrubriquedans,rubrique,#GET{id_parent_trad}

      Du coup un rédacteur ne peut pas proposer de traduction d’article même si la rubrique est traduite.

      #AUTORISER{creerrarticledans,rubrique,#GET{id_parent_trad}
      serait plus indiqué qu’en pensez-vous ?

    • Salut Alexis,

      c’est effectivement un peu restrictif. Je vais regarder ça demain.

      En attendant tu peux surcharger le fichier.

    • Ça y est, la version 1.2.0 du plugin gère mieux les autorisations.

    • Ça m’a l’air de fonctionner.
      merci !

    Répondre à ce message

  • 11

    Bonjour, merci pour ton plugin, je bosse sur un site pour un projet open source de wargame, et le site est traduit par de nombreuses personnes ne connaissant pas SPIP, dans pleins de langues différentes, du coup ton plugin est juste essentiel.

    Cependant je m’apperçoit aujourdh’ui que le plugin engendre une erreur sur mon site.
    (ce qui est étrange c’est que c’est apparu du jour au lendemain, sans que j’arrive à identifier à quel moment ou à cause de quel actions (mise à jour , autre plugin ?) ce bug est apparu.. vraiment étrange)

    Le plugin empêche de créer des sous-rubriques.

    On peux toujours créer des rubrique à la racine, on peux même les déplacer n’importe ou. Mais la création d’une sous-rubrique n’importe ou engendre le message d’erreur :
    « A technical error prevented the registration. »

    Dans les log mysql je trouve :

    2019-12-17 14:13:30 83.206.96.119 (pid 3997) :Pri:ERREUR : Erreur 1054 de mysql : Unknown column ’id_trad’ in ’field list’in /mnt/data/spip/ecrire/action/editer_rubrique.php L100 [sql_insertq(),rubrique_inserer(),action_editer_rubrique_dist(),formulaires_editer_objet_traiter(),formulaires_editer_rubrique_traiter_dist(),traiter_formulaires_dynamiques()]INSERT INTO spip_rubriques (titre,id_parent,statut,lang,langue_choisie,id_trad) VALUES (’New section’,61,’prepa’,’en’,’oui’,NULL)

    Si je désactive le plugin tout rentre dans l’ordre.

    • Je pense qu’il manque une dépendance au plugin tradrub, qu’il y avait dans « traduction_rubriques_autrement ».

    • Pardon, en fait je viens de mieux comprendre l’explication.

      1. Si tu avais besoin des traductions de rubriques, il faut le plugin « tradrub ». C’est déjà un premier problème : il n’est indiqué ni en <utilise> de interface_traduction_objets, ni en <necessite> sur traduire_rubriques_autrement (le nouveau)
      2. Mais ici, tu n’utilises pas les traductions de rubrique, pourtant le plugin ’interface_traduction_objets’ insère un champ ’id_trad’ à la création d’une rubrique, qui n’a pas lieu d’être car ce champ n’existe pas dans ta base. C’est donc un second problème.
    • Salut Pipol et Marcimat

      @Marcimat Ce plugin n’installe aucun champ. Spip a commencé à inclure l’id_trad dans la table id_rubrique à partir d’une version 3.* (je en sais pas exactement laquelle). Sinon, on installant Secteur par Langue tradrub sera installé qui lui créera de l’id_trad.

      @pipol, tu as installé quel plugins ? Tu utilise la traductions des rubriques (le plugin secteur_langue) ?

      Si tu utilises les traductions des rubriques regarde si ce qui est décrit dans ce poste peut d’aider

      Sinon c’est peut-être https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/interface_traduction_objets/trunk/interface_traduction_objets_pipelines.php#L221 qui provoque ton erreur. Je ne peux pas tester maintenant. Mais je regarderai

    • A priori j’utilise uniquement le plugin « Interface de traduction pour objets »

    • Il me semble que dans le passé j’utilisais traduction d’article autrement. Est ce que j’ai installé une fois traduction de rubrique autrement ? Je ne sais plus, il me semble pas mais peut être. En tout état de cause ce plugin n’est plus dans ma liste des plugin actif ou inactif.

      Je regarde le post en question.

    • Ton site tourne avec quelle version de spip ? Il a été crée avec quelle version de spip ?

      je viens de faire publier un patch v1.1.6 qui devrait empêcher cet erreur.

      Normalement, à partir de Spip3, le id_trad est nativement compris dans la table id_rubrique.

    • Le site est à jour. Il a été créer en juillet 2018 donc devais déjà être en v3.0

    • Ok,alors visiblement le id_trad n’avait pas été crée.
      Tu peux regarder avec la nouvelle version du plugin si le problème est résolu ?

    • Euuh .. Je ne sais pas comment télécharger ou installer un plugin depuis la zone.. J’ai essayé souvent sans jamais avoir de succès.. c’est certainement tout bête .. mais je vois pas :-)

    •  :) - malheureusement le générateur des zip pour le plugins est en panne, donc pour le moment l’actualisation n’est pas disponible via le gestionnaire des plugins. Mais tu peux le prendre depuis le depôt github

    • Version 1.1.7 installé et problème résolu !
      Merci beaucoup pour ta réactivité ;)
      Une bonne journée.

    Répondre à ce message

  • 3

    bonour,
    j’ai eu ce même problème qui arrivait sur la page de *modification* de l’article exec=*article_edit* lorsque la traduction n’existait pas, disparu sur 1.1.4 mais maintenant on a /ecrire/ ?new=oui&id_parent=356&lang_dest=fr&lier_trad=187&retour=nav
    c.a.d qu’il manque le exec=article_edit&
    il y a un souci d’environnement objet sur cette page : objet=> article_edit
    toujours sur cette page l’édition des options de langue pouiche aussi : Erreur SQL 1146
    Table ’synthailand.article_edits’ doesn’t exist
    les liens de traduction sont-ils nécessaire sur exec=article_edit ?
    Cela fonctionne très bien sur exec=article...
    merci pour le boulot Rainer

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom