SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 325 visiteurs en ce moment

Accueil > Multilinguisme > Navigation multilingue > Traduction d’items > Plugin « Traduction » V2

Plugin « Traduction » V2

16 février 2008 – par Xavier T. – 18 commentaires

3 votes

Plugin permettant la gestion des traductions multilangues coté site public

Après avoir réalisé plusieurs sites multilingues (et pas mal galéré dessus), je me suis penché sur un problème majeur ... la gestion du multilinguisme coté site public.

La question était la suivante : comment gérer les fichiers de langue (local_#LANG) sans avoir à les faire « à la main » au fur et à mesure de l’avancée de la programmation du site et permettre de « sectoriser » les mots et petits textes à traduire afin de ne pas avoir, au bout de quelques jours, des listes imbuvables de plusieurs dizaines (voire même centaines) de mots dans lesquelles on ne peut s’y retrouver !!!

J’ai donc créé ce petit plugin qui vous permet de pouvoir gérer cela très facilement.

Si vous avez déjà installer la V1 du plugin, la mise à jour se fait automatiquement et sans douleur


-  ce plugin dans sa version actuelle ne fonctionne pas avec spip 2.x.x
-  je lui ai apporté quelques améliorations pour spip 2.x.x
-  vous le trouverez ici -> Items & Traductions

Effectuer la mise à jour :
-  Désactivez le plugin dans votre interface
-  Remplacez la V1 par la V2
-  Réactivez le plugin ... le reste se fait tout seul !!!

Effets de la mise à jour :
-  Les traductions présentes dans les différentes tables sont ajoutées dans la table principale après ajout des champs de langue dans cette dèrnière
-  Suppression des tables des langues
-  Suppression des champs de langues dans la table des secteurs

Modifications depuis la V1 :
-  Plus que 2 tables à la place de 3 à n tables selon le nombres de langues utilisées sur le site
-  Repérage de la langue native du site en rouge dans le menu de gauche
-  Blocage des ajouts de secteurs et d’item si l’interface n’est pas dans la langue native du site (pour éviter aux traducteurs d’avoir la main sur ses parties sensibles du plugin)
-  Lors de la saisie d’un item, une vérification automatique se fait évitant ainsi des items trop courts (3 caractères minimum) ainsi que les doublons, votre item est OK si le carré à droite du champ de saisie de l’item est vert, sinon vous ne pouvez pas valider votre item
-  1 seule langue (la langue native) pour la gestion des secteurs
-  Interface plus intuitif pour les traducteurs proposant pour chaque item le descriptif et la "valeur" dans la langue native

Révisions

V2.1

-  Un petit bug s’était glissé lors de la réalisation de la V2 depuis la V1, du coup, la création des fichiers de langues posait problème.
-  Bug rectifié grâce à la vigilance de bobMorane ... merci

Installation

GIF - 23.3 ko

L’installation se déroule comme pour tous les autres plugins, cf. http://www.spip.net/fr_article3396.html

Celui ci va créer les tables nécessaires dans la base SPIP ainsi que les fichiers de langues dans le dossier « squelettes ».

Gestion des secteurs

GIF - 27 ko

Commencez par créer vos secteurs :
-  le descriptif vous permet de vous repérer dans les différents secteurs que vous aller créer
-  vous nommez ensuite le secteur, vous pouvez n’utiliser qu’une langue à ce niveau là, pensez tout de même à vos traducteurs le cas échéant !!!
-  vous pouvez toujours revenir sur un secteur créé en le sélectionnant dans la liste en dessous du formulaire de saisie

Création et édition des items

GIF - 27.2 ko

Il suffit ensuite de sélectionner la langue de base du site dans la liste de gauche pour accéder au menu de création des items, dans le formulaire de saisie :
-  « item à traduire » correspond au « mot » que vous aller placer sur vos squelettes avec le code multi <:mot_a_traduire:> [1]
-  vous avez ensuite le descriptif pour vous y retrouver
-  puis la « traduction » qui correspond à ce qui sera affiché sur votre site
-  pour accédez à la liste complète des « mots » d’un secteur il suffit de cliquer sur le secteur souhaité dans la liste en dessous du formulaire de saisie.

Gestion des traductions

GIF - 36.8 ko

A partir de cet écran, vous pouvez gérer vos items de traduction et obtenir aussi les items au format SPIP à insérer dans vos squelettes, soit les actions :
-  changer une traduction : en modifiant directement la valeur dans les champs de texte.
-  modifier un item : en cliquant sur « modifier » (on ne peut pas changer l’item de traduction lui même, ce qui est logique car s’il est utilisé sur le site, cela ne correspondra plus, mais on peut changer son secteur et son descriptif)
-  supprimer un item

Voilà, je ne suis pas très fort en explications, mais j’espère que vous aurez compris comment fonctionne mon plugin.

pour le télécharger c’est juste là !!!

Zip - 27.7 ko
Traduction V2.1

Notes

[1Plus d’explication sur l’usage de ce code dans la documentation officielle Internationaliser les squelettes (paragraphe « 1. Méthode des fichiers de langue »)

Dernière modification de cette page le 25 juin 2009

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 25 juin 2009 à 16:04, par Xavier T. En réponse à : Plugin « Traduction » V2

    Bonjour à tous,

    voilà déjà quelques temps (6 mois, je sais je n’ai pas été rapide sur le coup) que l’on me demande de porter ce plugin pour spip 2, c’est aujourd’hui chose faite !

    Rendez-vous sur cette page pour en profiter !

    Xavier

    Répondre à ce message

  • Le 9 février 2009 à 00:05, par Bisi2poche En réponse à : Plugin « Traduction » V2

    Bonjour,

    à première vue, le problème de penchaki est en deux parties :

    1- L’affichage du code provient de l’utilisation des balises <? [...] ?> au lieu de <?PHP [...] ?> (A savoir que la directive short_open_tag de php n’est plus active par défaut, il est recommandé d’utiliser les balises complètes <?PHP [...] ?> )

    2- En activant le short_open_tag, on obtient un message d’erreur (voir image jointe) qui laisse entendre que l’on doit d’abord avoir installé puis désinstallé la version 1 pour que la v2 puisse mettre à jour les tables de la BDD. C’est bien celà ? (je vais essayer si je trouve la v1)

    JPEG - 93.1 ko
    • Le 9 février 2009 à 00:31, par Bisi2poche En réponse à : Plugin « Traduction » V2

      Je viens de comprendre une partie du problème :

      Dans la définition du squelette on peut normalement indiquer plusieurs répertoires séparés par des «  : »
      (ex : « mon_squelette:mon_squelette/modeles »)

      Lors de l’installation du plugin (inc/traduction_install.php @80) la valeur est utilisée pour créer ou controler le répertoire « lang » et les fichiers « lang/local_#LANG#.php » dans le squelette. Dans l’exemple, on essait donc de créer « mon_squelette:mon_squelette/modeles/lang/... »

      Je sais pas si c’est le plus propre qu’il y est, mais pour ma part, en ajoutant le code suivant avant la ligne 80 ( if(!is_dir(’../’. ), ce problème est résolu :
      <?php
          $dossiers_squelettes 
      explode(':',$GLOBALS['dossier_squelettes']);<br>
          
      sort($dossiers_squelettes);<br>
          
      $dossier_squelette $dossiers_squelettes[0];<br>
      ?>


      Après j’ai encore ces erreurs :

      Une erreur est survenue lors de la mise à jour du plugin Les anciennes tables de ’spip_traductions_langues’ ont été supprimées avec succés Les champs de langues de la table ’spip_traduction_secteurs’ ont été supprimés avec succés spip_traductions : Table non créée spip_traductions_secteurs : Table non créée


      snif :(

    • Le 9 février 2009 à 16:38, par penchaki En réponse à : Plugin « Traduction » V2

      Merci Bisi2poche ...

      Je vais tenter de poursuivre ...

    Répondre à ce message

  • Le 17 janvier 2009 à 14:36, par penchaki En réponse à : Plugin « Traduction » V2

    Bonjour ,

    Je viens de migrer vers la SPIP 2.0.1 de spip et pour la version du plugin : traductionV2.rar-2

    voici ce que j’obtient :

    $val) if($val != «  » && (!in_array($val,$Row_Liste_champs_table_traduction[$val]))) $global_maj = 1 ; // ajout du champ de la langue dans la table spip_traductions if(!$Maj_table_spip_langues = spip_query_db(« ALTER TABLE `spip_traductions` ADD ` ».$val.« ` BLOB NOT NULL ; »))$erreur_maj = 1 ; // mise a jour de la table spip traduction pour les items de la langue if(in_array(’spip_traductions_’.$val,$listing_table_traduction_maj)) $Recup_trad_v1 = spip_query_db(’select * from spip_traductions_’.$val) ; $Row_Recup_trad_v1 = mysql_fetch_assoc($Recup_trad_v1) ; do if(!$Insert_recup_v1 = spip_query_db(« update spip_traductions set « .$val. » =  »« .$Row_Recup_trad_v1[’item_traduction_langue’]. »\« where id_traduction = ».$Row_Recup_trad_v1[’id_traduction’]))$erreur_maj = 1 ; while($Row_Recup_trad_v1 = mysql_fetch_assoc($Recup_trad_v1)) ; // suppression de la table de langue de la V1 qui ne sert plus if(!$Suppression_table_v1 = spip_query_db(« DROP TABLE spip_traductions_ ».$val))$erreur_maj_sup_table = 1 ; // suppression de l’item langue dans la table secteurs if(!$Suppression_champs_secteur = spip_query_db(« ALTER TABLE spip_traductions_secteurs DROP item_secteurs_ ».$val))$erreur_maj_sup_champs = 1 ; if($global_maj == 1) if($erreur_maj == 0)$reponse_init_plugin .= _T(’traduction:maj_ok’) ; else $reponse_init_plugin .= _T(’traduction:maj_ko’) ; if($erreur_maj_sup_table == 0)$reponse_init_plugin .= _T(’traduction:maj_sup_table_ok’) ; else $reponse_init_plugin .= _T(’traduction:maj_sup_table_ko’) ; if($erreur_maj_sup_champs == 0)$reponse_init_plugin .= _T(’traduction:maj_sup_champs_ok’) ; else $reponse_init_plugin .= _T(’traduction:maj_sup_champs_ko’) ; // fin maj depuis la V1 // creation du fichier config if(!file_exists(« ../plugins/traduction/config.php »)) if(!fopen(« ../plugins/traduction/config.php »,« w+ »))$reponse_init_plugin .= _T(’traduction:droits_fichier_config’) ; else $prepa_config = «  » ; $File_config = fopen(« ../plugins/traduction/config.php »,« w+ ») ; fwrite($File_config,$prepa_config) ; fclose($File_config) ; $reponse_init_plugin .= _T(’traduction:fichier_config_ok’) ; // creation des fichiers de langue // on commence par creer le dossier de langue if(!is_dir(’../’.$GLOBALS[’dossier_squelettes’].’/lang’) && !mkdir(’../’.$GLOBALS[’dossier_squelettes’].’/lang’,0777)) $reponse_init_plugin .= _T(’traduction:droits_dossier_squelette’) ; else //on prepares l’ecriture des fichiers de langue $prepa_fichier = «  » ; // on boucle sur les langues actives pour créer les fichiers de langue foreach($tableau_langues as $key=>$val) if($val != «  » && (!file_exists(’../’.$GLOBALS[’dossier_squelettes’].’/lang/local_’.$val.’.php’))) $fichier_langue = fopen(’../’.$GLOBALS[’dossier_squelettes’].’/lang/local_’.$val.’.php’,’w+’) ; fwrite($fichier_langue,$prepa_fichier) ; chmod(’../’.$GLOBALS[’dossier_squelettes’].’/lang/local_’.$val,0666) ; if(file_exists(’../’.$GLOBALS[’dossier_squelettes’].’/lang/local_’.$val.’.php’)) $reponse_init_plugin .= ’local_’.$val.«  : « ._T(’traduction:fichier_ok’) ; else $reponse_init_plugin .= ’local_’.$val. » : »._T(’traduction:fichier_ko’) ; // initialisation du plugin, on liste les tables pour // vérifier si les tables associées au plugin existent déjà $liste_table_traduction = mysql_list_tables($GLOBALS[spip_mysql_db]) ; $row = mysql_fetch_row($liste_table_traduction) ; $listing_table_traduction = array() ; while($row = mysql_fetch_row($liste_table_traduction)) $table_traduction = $row[0] ; array_push($listing_table_traduction,$table_traduction) ; // si les tables n’existent pas, on les génère if(!in_array(’spip_traductions’,$listing_table_traduction)) // table des traductions $create_table_spip_traductions = « CREATE TABLE `spip_traductions` (`id_traduction` BIGINT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, `item_traduction` VARCHAR( 255 ) NOT NULL, `exp_traduction` VARCHAR( 255 ) NOT NULL, `secteur_traduction` INT( 50 ) NOT NULL DEFAULT 0) ENGINE = MYISAM ; » ; if($Result_create_table_spip_traductions = spip_query_db($create_table_spip_traductions)) $reponse_init_plugin .= ’spip_traductions’.’ : ’._T(’traduction:table_ok’) ; else $reponse_init_plugin .= ’spip_traductions’.’ : ’._T(’traduction:table_ko’) ; // table des secteurs de traductions // pour permettre de classifier un peu tout sinon c’est le b... ! if(!in_array(’spip_traductions_secteurs’,$listing_table_traduction)) $create_table_spip_traductions_secteurs = « CREATE TABLE `spip_traductions_secteurs` (`id_secteurs_traduction` BIGINT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, `item_secteurs_traduction` VARCHAR( 255 ) NOT NULL) ENGINE = MYISAM ; » ; if($Result_create_table_spip_traductions_secteurs = spip_query_db($create_table_spip_traductions_secteurs)) $reponse_init_plugin .= ’spip_traductions_secteurs’.’ : ’._T(’traduction:table_trad_ok’) ; else $reponse_init_plugin .= ’spip_traductions_secteurs’.’ : ’._T(’traduction:table_trad_ko’) ; // on liste les champs de la table spip_traductions pour ajouter les langues actives $Liste_champs_table_traduction = « SHOW COLUMNS FROM `spip_traductions` » ; $Result_Liste_champs_table_traduction = spip_query_db($Liste_champs_table_traduction) ; $Row_Liste_champs_table_traduction = mysql_fetch_row($Result_Liste_champs_table_traduction) ; // mise a jour de la table spip_traductions foreach($tableau_langues as $key=>$val) if($val != «  » && (!in_array($val,$Row_Liste_champs_table_traduction[$val])))$create_table_spip_langues = spip_query_db(« ALTER TABLE `spip_traductions` ADD ` ».$val.« ` BLOB NOT NULL ; ») ; if($reponse_init_plugin != «  ») debut_boite_info() ; echo « 

     »._T(’traduction:infos’)."
    «  ; echo »

    « .stripslashes($reponse_init_plugin). »
    " ; fin_boite_info() ;  ?>

    Avez vous une idée des modifications à apporter ?
    Merci
    Panchaki

    Répondre à ce message

  • Le 15 décembre 2008 à 18:29, par med En réponse à : Plugin « Traduction » V2

    ce plugin fonctionne t’il sur spip 2.0 ? sinon pour quand la version compatible avec ?

    Répondre à ce message

  • Le 18 septembre 2008 à 12:28, par Charles En réponse à : Plugin « Traduction » V2

    Ce plug-in m’a l’air bien sympathique mais lorsque je l’installe (j’ai déjà installé plusieurs plug je sais faire) j’ai cet erreur qui apparaît dans la colonne gauche de la page des plug-ins :

    Fatal error: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument in /mnt/140/sdc/9/0/batirsaintest/plugins/traduction/inc/traduction_install.php on line 37

    l’onglet traduction est créer dans éditions mais le lien m’affiche une page blanche.

    Merci de l’aide que vous pourriez m’apportez.

    • Le 18 septembre 2008 à 12:34, par Charles En réponse à : Plugin « Traduction » V2

      Et la liste des plug-in disparait.

      J’ai oublié de dire également que j’était sous spip 1.9.2d et que j’avais ces plug installé :

      • acces groupe 1.9.2
      • Agenda pour SPIP 1.9.2
      • cfg : moteur de configuration
      • Le Couteau Suisse
      • Inscription2
      • Widget Calendrier

    Répondre à ce message

  • Le 17 septembre 2008 à 11:47, par ? En réponse à : Accéder à l’outil de traduction ?

    Hello,
    je m’excuse mais après installation du plugin (apparemment fructueuse) et après son activation, je ne vois pas du tout comment arriver à la page traduction... fâcheux !

    Depuis quel lien dans l’espace privé les nouvelles fonctions sont-elles actives ?

    NB : je ne sais pas si cela a qqch à voir : après activation du plugin, petit message en rouge :

    Infos plugin « Traduction »
    Une erreur est survenue lors de la mise à jour du plugin
    Les anciennes tables de ’spip_traductions_langues’ ont été supprimées avec succés
    _
    Les champs de langues de la table ’spip_traduction_secteurs’ ont été supprimés avec succés

    merci de votre aide, je suis impatient de pouvoir utiliser ce plugin !

    L

    Répondre à ce message

  • Le 19 mai 2008 à 16:55, par bobMorane En réponse à : Plugin « Traduction » V2

    Très beau travail, j’ai toutefois rencontré des problèmes au démarrage de la V2, ça pourra certainement servir à d’autres :
    fichier php_ajax.php
    il faut remplacer les lignes 4 à 12

    $Lister_mots = « select * from spip_traductions » ;
    $Result_Lister_mots = spip_query_db($Lister_mots) ;
    $Row_Lister_mots = mysql_fetch_assoc($Result_Lister_mots) ;
    do
    $lister_traductions = « select * from spip_traductions_ ».$langue." where id_traduction = « .$Row_Lister_mots[’id_traduction’] ;
    $Result_lister_traductions = spip_query_db($lister_traductions) ;
    $Row_lister_traductions = mysql_fetch_assoc($Result_lister_traductions) ;
    $liste_item .= »’« .$Row_Lister_mots[’item_traduction’]. »’ => ’« .addslashes($Row_lister_traductions[’item_traduction_langue’]). »’,\n" ;
    while($Row_Lister_mots = mysql_fetch_assoc($Result_Lister_mots)) ;

    par

    $lister_traductions = « select * from spip_traductions where $langue != ’’ » ;
    $Result_lister_traductions = spip_query_db($lister_traductions) ;
    while($Row_lister_traductions = mysql_fetch_assoc($Result_lister_traductions))
    $liste_item .= « ’ ».$Row_lister_traductions[’item_traduction’].« ’ => ’ ».addslashes($Row_lister_traductions[$langue]).« ’,\n » ;

    c’est certainement un petit oubli, ça semblait faire appel à l’architecture de la V1.

    Ensuite, les fichiers de langue étaient sur ma version de SPIP dans le dosssier /ecrire/lang/public_*et non dans /lang/local_*

    Et un petit truc qui serait super intéressant à rajouter car très frustrant, lors de l’installation, initialiser la table traduction grâce au fichier de langue par défaut.

    Sinon, encore bravo pour ce travail !

    Répondre à ce message

  • Le 14 mars 2008 à 20:07, par Ploufplouf En réponse à : Plugin « Traduction »

    Bonjour,

    Je viens d’installer le plugin sur la dernière version de spip 1.9.2d et apparemment il ne fonctionne pas. Je l’ai installé comme tout autre plugin mais lorsque que je vais dans mo onglet de traduction il m’affiche le code php.
    Quelqu’un aurait-il une solution à ce problème ?

    Répondre à ce message

  • Le 23 février 2008 à 08:56, par taoufik karkar En réponse à : Plugin « Traduction »

    Je viens de télécharger le plugin traduction. D’avance je dis merci ! Car SPIP est vraiement multilingue dans sa conception native . Il lui manquait des petits outils qui lui permettent d’exploiter ses possibilités. Depuis longtemps je voulais retravailler la traduction en arabe fournie par spip.zip car
    elle est plus adaptée à l’arabe du moyen orient qu’à celui du maghreb. (vocbulaire, dénomination des mois, etc...)

    • Le 2 mars 2008 à 17:19, par paolo En réponse à : Plugin « Traduction »

      Si tu as envie de proposer une traduction « pour le maghreb » des fichiers SPIP, fais-le sur la liste spip-trad. SPIP comprend déjà plusieurs versions occitanes, pourquoi pas plusieurs versions arabes ?

    • Le 17 mars 2008 à 09:32, par vbat En réponse à : Plugin « Traduction »

      Plusieurs versions arabes serait une excellente idée...!

    Répondre à ce message

  • Le 4 mars 2008 à 15:50, par Christophe Danaux En réponse à : Dans les plugins ?

    Bonjour,

    Est-ce ça marche aussi pour les labels des formulaires du plugins forms@tables ?

    Répondre à ce message

Répondre à cet article

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là