Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] formulaire à saisie multilingue

Posted by nicolas42 on 03/27/2013 18:46

Bonjour,

Je suis débutant sous Jelix, et souhaite mettre en place un formulaire avec des zones de siasies (input) multilingue (Jelix 1.4).

Mon objectif : Un formulaire lié à ma base de données, pour lequel une partie des infos est directement rattachée à une table (jusque là standard). L'autre partie des infos correspond à des zone de textes input (de nombreux libellés à renseigner). Mais je souhaite demander à l'utilisateur les libellés dans chaque langue. Exemple : titre (FR, EN, ES..), description (FR, EN, ES..), commentaire (FR, EN, ES..)..... Je pensais initialement m'inspirer de ce que peut faire Prestashop, à savoir un seul champ de texte par libellé distinct. A côté, le drapeau dans la langue en cours, et quand on clic dessus, une liste de drapeaux possible, permettant de basculer le champ dans une langue ou une autre. Voir pièce jointe, mais je ne sais pas si c'est possible... Dans l'exemple en pièce jointe, les 2 libellés à saisir sont en FR, mais si on clic sur l'un des 2 drapeaux, et qu'on sélectionne une autre langue, toutes les zones de textes input basculent dans l'autre langue. Côté ergonomie utilisateur et espace sur la page, on y gagne beaucoup.

Je suis parti de sources existantes Jelix, qui comprennent :

  • une base de données avec une table des "produits" (poids, taille, prix), une table des langues gérées (FR, EN, ES...) et une table "produits_langues" (les libellés sont traduits dans chaque langue)
  • crud_edit_produits.tpl : incluant le formulaire avec "formfull"
  • produits.dao.xml : qui référence tous mes champs SAUF les libellés déclinés par langue.
  • produits.form.xml : qui référence tous mes champs SAUF les libellés déclinés par langue.
  • produits.classic.php : controleur utilisant Jforms, dans lequel, sur le _create(), j'appelle une fonction qui va boucler et ajouter, au dernier moment, au dessus des champs posés par Jelix, mes champs de libellés multilingues.

Tout fonctionne, mais en l'état, si j'ai 10 langues et 7 libellés multilingues, je me retrouve avec 70 champs de texte !! Je cherche donc, en config pure jelix, ou sans doute avec un peu d'injection javascript dans la page, à pouvoir afficher/masquer les zones de textes en fonction des drapeaux (images ? bouton?) présents à côté de chaque champs. Comment ajouter le drapeau cliquable à côté d'une zone de texte ? comment insérer du javascript ? (Pour le code JS, avec jquery, ça me semble simple, je vais gérer) Ou alors une autre méthode pour répondre à mon besoin ?

Tous vos conseils sont les bienvenues !

screen shot Prestahop gestion langue

  [Opened] formulaire à saisie multilingue

Reply #1 Posted by foxmask on 03/27/2013 21:36

AMHA le mieux n'est pas de jouer avec du JS et afficher 70 champs ; la page va être hyper lourde. Et in fine l'ergonomie en pâtira.

Dans mon quotidien, je bosse dans un environnement professionnel multi-langues (anglais/allemand/italien/chinois/espagnole), pour éviter de gérer 70 champs, on créé un profil d'utilisateur par langue comme ça c'est on ne peut plus souple et performant.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: formulaire à saisie multilingue

Reply #2 Posted by nicolas42 on 03/28/2013 09:37

Merci pour votre réponse. Je n'ai pas dû être assez précis dans mes explications.

L'administrateur du site (et les sous-admin par pays) va :

  • créer un produit générique (international)
  • pour ce produit, il va saisir son libellé, descriptif, commentaire dans les langues de son choix.

Il pourra, pour un produit vendu uniquement en France, ne mettre que les textes en FR. Pour d'autres produits vendus uniquement en Angleterre, il ne mettra que les textes EN. Pour d'autres produits, il renseignera du FR, du EN, du ES, du DE...

Bref, je n'ai pas UNE langue par produit ou par profil d'admin, mais une à DES langues. CF prestashop, qui pour un produit donné, permet de dire dans combien de langues on souhaite le décliner (le même produit, non dupliqué). En temps réel, on peut basculer les inputs d'une langue à l'autre (en cliquant sur le drapeau), donc visuellement 1 seul input (enfin autant que de libellés à traduire), mais techniquement, un input par libellé et par langue.

D'autres idées ?

  [Opened] Re: formulaire à saisie multilingue

Reply #3 Posted by foxmask on 03/28/2013 13:30

Je persisterai sur la voix précédente en gerant un catalogue de produits par langue.

Coté site "publique" libre à vous d"afficher ou non un produit donné sur un pays dans toutes les langues ou non. C'est de la config de votre catalogue & règle métier.

Coté admin, quand bien meme le visuel ne serait qu'un input ; si on gere plusieurs langues pour un meme produit dans le meme formulaire ; on ne voit reellement pas où on en est. ai-je saisie la trad pour l'anglais, l'espagnole etc... quand j'en suis à mon 10ieme produit et que j'ai 4 langues à siasir, obliger de switcher avec le drapeau pour retourner voir si j'ai pas raté une trad. je trouve pas ça productif.

my 2 coins


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: formulaire à saisie multilingue

Reply #4 Posted by laurentj on 03/28/2013 13:44

Bonjour,

Dans le template, il faut générer tous les champs, mais n'afficher que ceux de la langue choisie

  {form $formulaire, 'monmodule~default:sauver'}

   <fieldset><legend>Titre description</legend>

       <div>
             <select id="choixlangue">...</select>
       </div>

       <div id="lg_fr">
         <p> {ctrl_label "titre_fr"} : {ctrl_control "titre_fr"} </p>
         <div> {ctrl_label "desc_fr"} <br> {ctrl_control "desc_fr"} </div>
       </div>

       <div id="lg_en" style="display:none">
         <p> {ctrl_label "titre_en"} : {ctrl_control "titre_en"} </p>
         <div> {ctrl_label "desc_en"} <br> {ctrl_control "desc_en"} </div>
       </div>

       <div id="lg_it" style="display:none">
         <p> {ctrl_label "titre_it"} : {ctrl_control "titre_it"} </p>
         <div> {ctrl_label "desc_it"} <br> {ctrl_control "desc_it"} </div>
       </div>

   </fieldset>
   <fieldset><legend>Autres champs </legend>
      {formcontrols}
         <p> {ctrl_label} : {ctrl_control} </p>
      {/formcontrols}
   </fieldset>

   <div> {formsubmit} </div>
  {/form}

Il faut alors rajouter un script, qui, sur le onchange du select "choixlangue" (ou un bouton ou autre bien sûr), ira cacher ou faire apparaitre les div "lg_*", tout simplement.

Et peux être que, pour effectivement des raisons d'ergonomie qu'a souligné Foxmask, on pourrait avoir en plus un bouton "tout montrer".

@foxmask : avoir un formulaire par langue de produit, c'est tout aussi pénible.

 
Page
  1. formulaire à saisie multilingue