Traductions de rubriques autrement

Navigation entre rubriques traduites et gestion des traduction des rubriques similaire à la méthodes des traduction des articles du plugin Traductions d’articles autrement.
(voir aussi pour SPIP 3 Traductions de rubriques autrement 3)

Introduction

Comment traduire des sections autrement si SPIP ne propose pas nativement un système de traduction pour les rubriques ?

Le plugin Traduction entre rubriques comble cette lacune avec un système inspiré par celui des traductions des articles ; c’est à dire en ajoutant un champ id_trad à la table rubriques, et en liant ainsi les traductions des rubriques.

Le présent plugin modifie simplement la manière de gestion des traductions des rubriques proposé par le plugin Traduction entre rubriques avec un solution similaire au plugin Traductions d’articles autrement, dont l’installation est recommandé (téléchargement ici) afin de pouvoir offrir une approche cohérente des traductions des rubriques et de la navigation entre les traductions des articles et rubriques.

Utilisation

Ce plugin trouve son utilité surtout dans un site avec des langues par secteur.

Menu/liens des traductions

voici un exemple de liens de traductions pour rubriques, articles et autres (auteurs,sites,...) nécessite le plugin spip bonux

#CACHE{0}
[(#REM) Si on est dans le contexte d'un article, on affiche les langues des articles]
<BOUCLE_article(ARTICLES){id_article}>
<B_traductions>
<p class="traductions">
        <BOUCLE_traductions(ARTICLES) {traduction} {par lang}{'|'}>[(#TOTAL_BOUCLE|>{1}|?{' '})
        <span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>
                [(#EXPOSE{'',<a href="[(#URL_ACTION_AUTEUR{'converser',#LANG&var_lang=#LANG,[(#URL_ARTICLE|parametre_url{lang,'','&'})]}|parametre_url{arg,''})]" rel="alternate" hreflang="#LANG"[ title="(#TITRE|attribut_html|couper{80})"]>})]
                [(#LANG|traduire_nom_langue)]#EXPOSE{'',</a>}</span>
        ]</BOUCLE_traductions>
</p>
</B_traductions>
</BOUCLE_article>
        [(#REM) Sinon, si on est dans le contexte d'une rubrique, on affiche les langues des rubriques]
        <B_rubrique>
                <p class="traductions">
           <BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
                   <BOUCLE_traductions_rub(RUBRIQUES) {traduction} {par lang}{'|'}>
                <span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>
                        [(#ENV{lang}|=={#LANG}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#LANG&var_lang=#LANG,[(#URL_RUBRIQUE|parametre_url{lang,'','&'})]}|parametre_url{arg,''})]" rel="alternate" hreflang="#LANG"[ title="(#TITRE|attribut_html|couper{80})"]>[(#LANG|traduire_nom_langue)]</a>]
                        [(#ENV{lang}|=={#LANG}|oui)[(#LANG|traduire_nom_langue)]]
                </span>
                        </BOUCLE_traductions_rub>
       </BOUCLE_rubrique>
                </p>
        </B_rubrique>
        [(#REM) Sinon, si on on boucle sur les langues disponibles dans le public grâce à spip-bonux]
           [(#SET{langues,[(#CONFIG{langues_utilisees}|explode{','}|serialize)]})]
           <B_langue_possibles>
                           <p class="traductions">
              <BOUCLE_langue_possibles(POUR){tableau #GET{langues}}{'|'}>
                 <span lang="#VALEUR" xml:lang="#VALEUR" dir="#LANG_DIR" [(#ENV{lang}|=={#LANG}|oui) class="on"]>
                         [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]}|parametre_url{arg,''})]" rel="alternate" hreflang="#VALEUR">[(#VALEUR|traduire_nom_langue)]</a>]
                         [(#ENV{lang}|=={#VALEUR}|oui)[(#VALEUR|traduire_nom_langue)]]
                                </span>
                </BOUCLE_langue_possibles> 
                </p>
             </B_langue_possibles>           
        <//B_rubrique>
<//B_article>        

Affichage squelettes

Il est possible de conditionner l’affichage des squelettes/noisettes en utilisant la balise

#ID_TRAD

par exemple, pour afficher une noisette déterminée seulement si on se trouve dans la rubrique 21 ou dans ses traductions. Il suffit de prendre l’id_rubrique de la rubrique de référence (celle qui a une * a coté du lien traduction - voir ci-haut) et qui est également l’id_trad.

Dans notre exemple, la rubrique de référence est la rubrique 21, donc l’id_trad est également le 21.

on utiliserai donc

[(#ID_TRAD|=={21}|oui)<INCLURE{fond=inc/noisette}/>]

pour afficher inc/noisette.html pour la rubrique 21 et ses traductions

Discussion

5 discussions

  • 1

    J’ai ajouté un modèle de liens de traductions pour les rubriques.

    À moins que je ne me trompe, il n’existe pas de modèle SPIP pour les liens entre traductions de rubriques, à l’instar de celui pour les liens entre traductions d’articles.

    J’en ai donc créé un :

    La différence avec celui pour les articles est minime et se limite à faire référence aux rubriques et non aux articles :

    l’insertion dans le squelette article :

    [(#REM) Inclure le modele des liens de traductions ]
                    #MODELE{rubrique_traductions}

    Le modèle rubrique_traductions.html à placer dans squelettes/modeles/ :

    [(#REM)
            Affiche les traductions disponibles d'une rubrique.
            La langue de la rubrique courante s'affiche en gras, sans lien.
    ][(#REM)
    
            Note : le lien <a rel="alternate" hreflang="xx" ...> indique qu'il
            s'agit d'une traduction (version alternative dans la langue xx)
    
    ]<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
    <B_traductions>
    <p class="traductions">
            <:trad_rubrique_traduction:>
            <BOUCLE_traductions(RUBRIQUES) {traduction} {par lang}>[(#TOTAL_BOUCLE|>{1}|?{' '})
            <span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>&#91;[(#EXPOSE{'',<a href="#URL_RUBRIQUE" rel="alternate" hreflang="#LANG"[ title="(#TITRE|attribut_html|couper{80})"]>})][(#LANG|traduire_nom_langue)]#EXPOSE{'',</a>}&#93;</span>
            ]</BOUCLE_traductions>
    </p>
    </B_traductions>
    </BOUCLE_rubrique>

    Reste l’ajout d’entrées dans les fichiers de langues placés dans squelettes/lang/ :
    Dans public_fr.php :
    'trad_rubrique_traduction' => 'All the versions of this rubrique',

    Dans public_en.php :
    'trad_rubrique_traduction' => 'Toutes les versions de cette rubrique',

    • Petite erreur que vous aurez corrigée vous même :

      Reste l’ajout d’entrées dans les fichiers de langues placés dans squelettes/lang/ :
      Dans public_fr.php :
      'trad_rubrique_traduction' => 'Toutes les versions de cette rubrique',

      Dans public_en.php :
      'trad_rubrique_traduction' => 'All the versions of this rubrique',

    Répondre à ce message

  • 8
    Bertrand

    Yop,

    super, par contre j’ai du mal à saisir le fonctionnement car sur mon blog les articles en anglais et français apparaissent toujours ensemble ! Comment changer cela ?

    • Bonjour,

      Je ne comprends pas tout à fait le problème. Qu’est-ce que ça signifie ils apparaissent ensemble ? C’est un problème de l’interface interne ou du site public ?

      Rainer

    • Bertrand

      Salut,

      et bien en fait dans l’interface interne j’ai créer mes rub en fr et je les ai traduite en anglais, idem pour mes articles. Mais lorsque je vais sur le site public, les deux articles fr et ang sont affichés sans distinctions.

      Bertrand

    • Tu peux me donner un lien ?

    • Bonjour,

      le menu par défaut de spip ne fonctionne as avec une structure basé sur les secteurs par langue, utilisé par ce plugin.

      Il te faut copier le fichier squelettes_dist/inc-entete.html dans ton dossier squelettes puis remplacer

      #MENU_LANGUE

      par

      <B_rub>
          <div class="langue">
              <ul>
                   <BOUCLE_rub(RUBRIQUES){id_rubrique}{tout}>
                          <BOUCLE_rubrique_trad(RUBRIQUES){traduction}{tout}>
                       [(#ENV{lang}|=={#LANG}|?{<li>[(#LANG)]</li>,<li><a href="[(#URL_ACTION_AUTEUR{'converser',#LANG&var_lang=#LANG,[(#URL_RUBRIQUE|parametre_url{lang,'','&'})]})]">[(#LANG)]</a></li>})]
                          </BOUCLE_rubrique_trad>
                     </BOUCLE_rub>
              </ul>
             </div>        
       </B_rub

      Attention, il te faut installer le plugin spip-bonux pour que cela fonctionne

      Afin de rediriger l’internaute directement sur la bonne rubrique, installe le plugin Langue préférée par l’internaute

      Et remplace le contenu de ton squelette sommaire para la balise #LANGUE_PREFEREE_SECTEUR_REDIRECTION

      Dis-moi si cela résous ton problème

      Rainer

    • Bertrand

      Bonsoir,

      tout d’abord merci de ton aide et patience. Pour l’heure je n’ai pas créé de squelette la notion reste flou pour moi et j’utilise Zpip couplé à Zen Garden (bien que je n’utilise pas encore de thème pour l’instant). J’ai donc modifié le fichier squelettes_dist/inc-entete.html (l’autre occurence entete se trouve être /public_html/spip/plugins/auto/zpip/inclure/entete.html. Mais malheureusement cela ne change pas l’affichage, voici ce que mon fichier contient :

      <div id="entete">
      <a rel="start home" href="#URL_SITE_SPIP/" title="<:accueil_site:>" class="accueil">[(#LOGO_SITE_SPIP|image_reduire{300,100}) ]<strong id="nom_site_spip">#NOM_SITE_SPIP</strong></a>
      <B_rub>
          <div class="langue">
              <ul>
                   <BOUCLE_rub(RUBRIQUES){id_rubrique}{tout}>
                          <BOUCLE_rubrique_trad(RUBRIQUES){traduction}{tout}>
                       [(#ENV{lang}|=={#LANG}|?{<li>[(#LANG)]</li>,<li><a href="[(#URL_ACTION_AUTEUR{'converser',#LANG&var_lang=#LANG,[(#URL_RUBRIQUE|parametre_url{lang,'','&'})]})]">[(#LANG)]</a></li>})]
                          </BOUCLE_rubrique_trad>
                     </BOUCLE_rub>
              </ul>
             </div>        
       </B_rub
      </div>

      ++

    • Bonjour, alors dans ce cas, crée à la racine de ton site un dossier nommé squelettes, dedans tu crée le dossier inclure dans lequel tu copie le fichier « zpip/inclure/entete.html ».

      Ce nouveau fichier squelettes/inclure/entete.html surchargera alors zpip/inclure/entete.html

      et maintenant tu peux faire, les modifications décrite ci-haut

      Rainer

    • Bertrand

      Bonsoir,

      idem... Il y a définitivement quelques choses que je ne comprend pas :-/

      <div class="accueil">
      	[<a rel="start home" href="#URL_SITE_SPIP/" title="<:accueil_site:>">(#LOGO_SITE_SPIP||image_reduire{300,100})</a>]
      	<strong id="nom_site_spip"><a rel="start home" href="#URL_SITE_SPIP/" title="<:accueil_site:>">#NOM_SITE_SPIP</a></strong>
      	[<div id='slogan_site_spip'>(#SLOGAN_SITE_SPIP|PtoBR)</div>]
      </div>
      <B_rub>
          <div class="langue">
              <ul>
                   <BOUCLE_rub(RUBRIQUES){id_rubrique}{tout}>
                          <BOUCLE_rubrique_trad(RUBRIQUES){traduction}{tout}>
                       [(#ENV{lang}|=={#LANG}|?{<li>[(#LANG)]</li>,<li><a href="[(#URL_ACTION_AUTEUR{'converser',#LANG&var_lang=#LANG,[(#URL_RUBRIQUE|parametre_url{lang,'','&'})]})]">[(#LANG)]</a></li>})]
                          </BOUCLE_rubrique_trad>
                     </BOUCLE_rub>
              </ul>
             </div>        
       </B_rub
    • Ce week-end j’étais sur ton site et j’ai vue que le menu de langue fonctionnait, donc quel est actuellement ton problème ?

    Répondre à ce message

  • 1
    RODRIGUEZ

    Sur mon site internet, j’ai besoin d’un retour des utilisateurs,
    de leur avis sur le site.
    Existe t-il un plugin qui réalise cela ?
    Celui-ci me donnerait la possibilité de mettre en ligne ou non les commentaires des visiteurs !!

    J’ai supprimé le forum public car je recevais des spams en quantité importante d’un site chinois !!

    Quelqu’un pourrait-il m’aider ?
    Je lui en serait très reconnaissant

    • Bonjour,

      je crois que tu t’est trompé de forum, pose ta question plutôt sur le forum de spip

      Mais concernant ton problème.

      Normalement le forum de spip est idéal pour ce que tu décris, les problèmes de spam peuvent normalement être résolu corrigé en utilisant la dernière version de spip.

      Pour améliorer la protection antispam tu peux installer le plugin NoSpam qui me donne des bons résultat ou bien la lame antispam du couteau suisse

      Rainer

    Répondre à ce message

  • 7

    Bonjour,

    Je viens juste d’installer TAA et TRA pour tester.
    Je note que dans ce plugin (TRA), un système d’installation est présent. Deux choses :

    • il semble inutile, vu que tradrub s’en charge déjà.
    • la désinstallation supprime sql_alter("TABLE spip_formulaires_reponses DROP page");, qui doit être une erreur de copier coller je suppose ! Enfin, je ne vois pas le rapport avec ce plugin :)

    À suivre :)

    • Tu as tout à fait raison, le plugin tradrub s’en charge déjà.

      Je viens d’enlever le système d’installation, ce qui corrige en même temps l’erreur du copier coller de la désinstallation

    • Parfait...

      Je continue mon exploration

      • j’aime *vraiment* bien le lien vers les changements de traduction sous le titre de l’article.
      • Les langues non traduites ne se différencient pas assez à mon goût
      • l’option « article toujours en édition » ne me plait pas trop (parce que quelqu’un peut avoir l’autorisation de voir l’article dans le privé sans pouvoir le modifier) (mais bon, c’est une option). + La « date de publication » colle le formulaire en bas.
      • L’option « affichage reduit » est pratique. Le bouton [+] bien trop difficile à cliquer (préférer une image ?) et mal placé pour déplier : je le placerais plutôt dans la colonne traductions justement.

      Quelques bugs

      • Mon site de test (l’équivalent de programmer.spip.org) a une langue par secteur, et chaque secteur a un arbre de rubriques traduites, par exemple : fr / étendre spip / généralités. Si « étendre spip » est traduit en espagnol, mais pas généralités, et que dans la rubrique généralités, je clique « espagnol », la rubrique de création de ma nouvelle rubrique espagnole est par défaut la rubrique racine (’es’), et non, disons, la plus proche traduction connue dans la hiérarchie des rubriques.
      • sur quelque chose comme : fr / étendre spip / généralités / un article (page ?exec=articles&id_article=xx), un article fr qui n’a pas de traduction espagnole me retourne une erreur SQL :
        Erreur SQL 1064
        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
        SELECT lang FROM spip_rubriques WHERE id_rubrique=

        . Je pensais que c’était la fonction rubrique_traduction() qui ne vérifie pas que $id_rubrique existe bien, mais il semble que ce n’est pas cela. Par ailleurs, la requête devrait utiliser de préférence sql_quote() :

        $id_trad_parent = sql_getfetsel('id_trad','spip_rubriques','id_rubrique=' . sql_quote($id_rubrique));

      Surcharges

      • il reste à mon sens une surcharge, c’est le code source de la page de visualisation d’un article qui est presque entièrement repris dans inc/article_afficher_contenu.php, mais c’est peut-être la seule solution pour réaliser tout ce que tu souhaitais.

      Bilan

      bravo :)

    • J’ai corrigé l’erreur SQL.

    • Merci pout tes tests et commentaires exhaustives.

      J’ai corrigé le bug concernant la détection des id_parents de traductions et ajouté les sql_quote.

      Je vais prendre en compte tes commentaires pour le plugin taa

    • Merci pour tes modifications du plugin taa.

      Les langues non traduites ne se différencient pas assez à mon goût

      j’ai mis les langues non-traduites en italique, en plus du background.

      l’option « article toujours en édition » ne me plait pas trop (parce que quelqu’un peut avoir l’autorisation de voir l’article dans le privé sans pouvoir le modifier)

      le plugin n’affiche le mode "édition seulement" si l’auteur a effectivement les droits d’éditions sur l’article, sinon c’est la prévisualisation par défaut qui s’affiche.

      + La « date de publication » colle le formulaire en bas.

      Je ne suis pas sur de comprendre. Le formulaire édition apparaît juste après les liens de langue et avant la date, tu trouverai plus logique de mettre la date en dessus ?

      J’ai suivis ton conseil et remplacé le + par l’image deplierbas.gif et le - par deplierhaut.gif puis je les ai mis dans la colonne traductions.

    • Pour la date de publication, c’est que visuellement, je n’ai pas d’espace entre le bas du formulaire d’édition et le haut du cadre de date de publication. Un margin à ajouter probablement.

    • ok, j’ai rajouté un marge

    Répondre à ce message

  • 1

    Impossible d’activer le plugin ../plugins/traduction_rubriques_autrement
    Nécessite le plugin TRADRUB en version [2.1.0 ;] minimum.

    On le trouve ou TradRub ?

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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

Dernière modification de cette page le 5 novembre 2017