begin process at 2012 05 28 14:07:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > ONGLETS ET CHANGEMENT INSTANTANÉ DE LA LANGUE

ONGLETS ET CHANGEMENT INSTANTANÉ DE LA LANGUE


 Description

Cliquez pour voir la capture en taille normale
A priori, la représentation par onglets n'a rien à voir avec le changement de langue.
En effet, le titre de cet article devrait être:
   "Changer l'affichage selon un paramètre (ou un choix)".

Je vais essayer de décrire deux méthodes dont l'une s'applique principalement aux onglets et
l'autre au changement instantané de la langue; mais ces deux méthodes peuvent se mélanger et se compléter.

La méthode par 'blocks' est basée sur le principe suivant:
On écrit dans un HTML une suite consécutive de blocks (principalement des <div> de même dimension); ils seront maintenus invisibles (display:none), sauf celui qui est choisi (display:block).

Dans la méthode par 'fonction', le changement du choix appelle une fonction qui opère explicitement la modification pour chaque élément concerné.
Elle est souvent utilisée pour le changement instantané de la langue.
La construction de cette fonction peut être fastidieuse, et dans certains cas,
il sera plus simple de définir un 'block' pour chaque langue.
Un avantage de la méthode par fonction est qu'on peut appeler une fonction spécifique pour chaque page et même chaque (sous-)fenêtre ouverte (voir mon article "Dialogue entre fenêtres mère et fille").

Pour simplifier la méthode par fonction et pour la rendre plus 'automatique', j'ai introduit un petit 'truc': lorsque le id d'un élément HTML contient (idx=numéro)
   '_i'+idx    |    '_v'+idx   |    '_t'+idx
alors son
   innerHTML   |    value      |    title
est respectivement remplacé par le message d'index idx de la langue choisie (voir function Chn(idx)).

Description des fonctions javascript directement dans le html:
- Chn(i) effectue le changement de langue (la boucle sur tous
    les éléments du document réalise les changements 'automatiques').
- Nav() donne l'index de la langue du navigateur.
- Ban() crée un 'innerHTML' contenant les bannières (avec click et titre) des langues.
- Ini() initialise le programme.


L'objet javascript Ong dans le fichier 'Ong.js' facilite l'utilisation de pages affichées par onglets.
Les particularités sont:
- Il suffit d'appeler 'new Ong('xyz',col,ac,m0,w,h)'
     et de définir dans body la suite de <div>:
<div id='xyz'></div>   ==> contiendra les n=col.length onglets.  
<div id='xyz0'> … </div>  ==> page 0

<div id='xyz6'> … </div>  ==> page n-1
- L'innerHTML du div id='xyz' est généré selon la méthode
     du changement de langue automatique.
- Les divs 'xyzi' sont les pages et peuvent être remplies librement.
- L'array col détermine les couleurs de fond et col.length le nombre d'onglets.
- ac est le numéro de la page initialement active.
- m0 est le numéro de message du titre du premier onglet.
- w et h sont les dimensions des pages.
Les différentes pages HTML peuvent être construites de manière habituelle dans body.
Dans function Ong(...), les tests d'existence des <div> (avec alert(...)) peuvent être supprimés après les premiers essais.

L'exemple HTML donné contient le groupe d'onglets 'Page' dont l'une des pages contient le groupe imbriqué 'Num'.
Le changement de langue se fait 'automatiquement' dans Chn(idx).

Le test à l'air de bien fonctionner avec  IE, Firefox, Google Chrome, Opera et Safari.

Source

  • <!DOCTYPE html>
  • <html>
  • <head>
  • <title>Onglets</title>
  • <meta name='Author' content='William VOIROL, Switzerland, Nov 2011'/>
  • <style type='text/css'>
  • .ongN {float:left; height:16px; text-align:center; font-weight:bold;
  • border:solid gray 4px; padding:4px 8px 2px 8px}
  • .ongS {float:left; height:16px; text-align:center; font-weight:bold;
  • border-top:solid gray 4px; border-right:solid gray 4px; border-left:solid gray 4px;
  • padding:8px 8px 2px 8px}
  • </style>
  • <script type='text/javascript' src='mess.js'></script>
  • <script type='text/javascript' src='Ong.js'></script>
  • <script type="text/javascript">
  • // le fichier 'mess.js' contient _abr[], _lng[], _mes[][]
  • function Chn(idx) { // fait un changement de langue
  • var e,k,m=_mes[idx],n,s,t=document.getElementsByTagName('*');
  • for (k=0;k<t.length;k++)
  • if (s=(e=t[k]).id) { // changements 'automatiques'
  • if ((n=s.indexOf('_i'))>=0) e.innerHTML=m[parseInt(s.substr(n+2))];
  • if ((n=s.indexOf('_v'))>=0) e.value=m[parseInt(s.substr(n+2))];
  • if ((n=s.indexOf('_t'))>=0) e.title=m[parseInt(s.substr(n+2))];
  • }
  • document.getElementById('Page4').innerHTML= // exemple de changement spécifique
  • '<br/>&nbsp; '+_lng[idx]+':<br/>&nbsp; '
  • +m[6]+'<br/>&nbsp; '+m[7]+'<br/>&nbsp; '+m[8]+'<br/>&nbsp; '+m[9];
  • // ajoutez ici les éventuels changements instantanés dans d'autres fenêtres ...
  • }
  • function Nav() { // Index la langue du navigateur (0 si absent)
  • var nv=(navigator.userLanguage)?navigator.userLanguage:navigator.language;
  • for (var i=0;i<_abr.length;i++) if (nv.indexOf(_abr[i])>=0) return i;
  • return 0 // si pas trouvé
  • }
  • function Ban() { // Construit un innerHTML formé des banières
  • var i,s="";
  • for (i=0;i<_abr.length;i++) s+="<img src='"+_abr[i]+".png' alt='"
  • +_abr[i]+".pgn' title='"+_lng[i]+"' width='24' height='16' onclick='Chn("
  • +i+")' style='cursor:pointer'/>&nbsp;";
  • return s
  • }
  • function Ini() {
  • document.getElementById('Ban').innerHTML=Ban();
  • new Ong('Page',['#F8F8F8','#FFDDDD','#FFFFBB','#DDFFDD','#DDDDFF'],0,1,500,400);
  • new Ong('Num',['#66BBDD','#77CCE7','#88DDEE','#99EEF7'],2,6,300,160);
  • Chn(Nav());
  • }
  • </script>
  • </head>
  • <body style='' onload='Ini()'>
  • <div style='float:left; background-color:gray'>
  • <div id='Page'></div>
  • <div id='Page0'> <!-- Afrique -->
  • <br/><br/>&nbsp; <input id='haha_v0_t10' type='button' onclick='alert(this.value)'/>
  • </div>
  • <div id='Page1'> <!-- Amérique -->
  • <br/><br/> ... <input id='pre_v3_t10' type='text' onchange='alert(this.value)'/>
  • </div>
  • <div id='Page2'> <!-- Asie -->
  • <br/><br/> +++ <label id='lab_i0'></label> +++
  • <br/><br/> ### <span id='spn_i10'></span> ###
  • </div>
  • <div id='Page3'> <!-- Europe -->
  • <br/><br/><br/>
  • <div style='float:left; width:80px'>0, 1, 2, 3:</div>
  • <div style='float:left'>
  • <div id='Num'></div>
  • <div id='Num0'></div>
  • <div id='Num1'></div>
  • <div id='Num2'></div>
  • <div id='Num3'></div>
  • </div>
  • </div>
  • <div id='Page4'> <!-- Océanie: changée spécifiquement --> </div>
  • </div>
  • <!-- Menu à droite -->
  • <div style='float:left; width:112px; height:424px; padding:3px; background-color:#BBBBFF'>
  • <div id='Ban'></div>
  • </div>
  • <div style='clear:both'><br/>
  • <a href='http://www.william-voirol.ch/Prog/Tests/Onglets.zip'>Zip du code</a></div>
  • <div><br/><a href='http://www.william-voirol.ch/Prog'>Autres programmes</a></div>
  • </body>
  • </html>
  • Fichier 'Ong.js':
  • ================
  • function Ong(id,col,ac,m0,w,h) {
  • var e,i,k=Ong.all.length,n=col.length,p,s,z='';
  • if (!(e=document.getElementById(id))) {alert("bloc id='"+id+"' ?"); return}
  • for (i=0;i<n;i++) {
  • if (!(p=document.getElementById(id+i))) {alert("bloc id='"+id+i+"' ?"); return}
  • s=p.style; s.backgroundColor=col[i]; s.height=h+'px'; s.width=w+'px'; s.display=(i==ac)?'':'none';
  • z+="<div id='"+id+"_i"+(i+m0)+"' class="+((i==ac)?"'ongS'":"'ongN'")
  • +" style='background-color:"+col[i]+"; cursor:pointer' onclick='Ong.Sel("+k+","+i+")'></div>";
  • }
  • e.innerHTML=z; e.style.width=w+'px'; e.style.height='30px'; Ong.all.push(this);
  • this.id=id; // id de base (utilise les blocks id, id+'0', ..., id+(n-1)
  • this.ac=ac; // numéro de l'onglet actif
  • this.m0=m0; // numéro du messages correspondant au premier onglet
  • }
  • Ong.Sel=function(k,i) {
  • var o=Ong.all[k];
  • document.getElementById(o.id+'_i'+(o.ac+o.m0)).className='ongN';
  • document.getElementById(o.id+'_i'+(i+o.m0)).className='ongS';
  • document.getElementById(o.id+o.ac).style.display='none';
  • o.ac=i; document.getElementById(o.id+i).style.display='';
  • }
  • Ong.all=new Array(0);
<!DOCTYPE html>
<html>
<head>
   <title>Onglets</title>
   <meta name='Author' content='William VOIROL, Switzerland, Nov 2011'/>
   <style type='text/css'>
      .ongN {float:left; height:16px; text-align:center; font-weight:bold;
         border:solid gray 4px; padding:4px 8px 2px 8px}
      .ongS {float:left; height:16px; text-align:center; font-weight:bold;
         border-top:solid gray 4px; border-right:solid gray 4px; border-left:solid gray 4px;
         padding:8px 8px 2px 8px}
   </style> 
   <script type='text/javascript' src='mess.js'></script>
   <script type='text/javascript' src='Ong.js'></script>
   <script type="text/javascript">
      // le fichier 'mess.js' contient _abr[], _lng[], _mes[][]
      function Chn(idx) { // fait un changement de langue
         var e,k,m=_mes[idx],n,s,t=document.getElementsByTagName('*');
         for (k=0;k<t.length;k++)
            if (s=(e=t[k]).id) { // changements 'automatiques'
               if ((n=s.indexOf('_i'))>=0) e.innerHTML=m[parseInt(s.substr(n+2))];
               if ((n=s.indexOf('_v'))>=0) e.value=m[parseInt(s.substr(n+2))];
               if ((n=s.indexOf('_t'))>=0) e.title=m[parseInt(s.substr(n+2))];
            }
         document.getElementById('Page4').innerHTML= // exemple de changement spécifique
            '<br/>&nbsp; '+_lng[idx]+':<br/>&nbsp; '
            +m[6]+'<br/>&nbsp; '+m[7]+'<br/>&nbsp; '+m[8]+'<br/>&nbsp; '+m[9];
         // ajoutez ici les éventuels changements instantanés dans d'autres fenêtres ...
      }
      function Nav() { // Index la langue du navigateur (0 si absent)
         var nv=(navigator.userLanguage)?navigator.userLanguage:navigator.language;
         for (var i=0;i<_abr.length;i++) if (nv.indexOf(_abr[i])>=0) return i;
         return 0 // si pas trouvé
      }
      function Ban() { // Construit un innerHTML formé des banières
         var i,s="";
         for (i=0;i<_abr.length;i++) s+="<img src='"+_abr[i]+".png' alt='"
            +_abr[i]+".pgn' title='"+_lng[i]+"' width='24' height='16' onclick='Chn("
            +i+")' style='cursor:pointer'/>&nbsp;";
         return s
      }
      function Ini() {
         document.getElementById('Ban').innerHTML=Ban();
         new Ong('Page',['#F8F8F8','#FFDDDD','#FFFFBB','#DDFFDD','#DDDDFF'],0,1,500,400);
         new Ong('Num',['#66BBDD','#77CCE7','#88DDEE','#99EEF7'],2,6,300,160);
         Chn(Nav());
      }
   </script>
</head>
<body style='' onload='Ini()'>
   <div style='float:left; background-color:gray'>
      <div id='Page'></div>
      <div id='Page0'> <!-- Afrique -->
         <br/><br/>&nbsp; <input id='haha_v0_t10' type='button' onclick='alert(this.value)'/>
      </div>
      <div id='Page1'> <!-- Amérique -->
         <br/><br/> ... <input id='pre_v3_t10' type='text' onchange='alert(this.value)'/>
      </div>
      <div id='Page2'> <!-- Asie -->
         <br/><br/> +++ <label id='lab_i0'></label> +++
         <br/><br/> ### <span id='spn_i10'></span> ###
      </div>
      <div id='Page3'> <!-- Europe -->
         <br/><br/><br/> 
         <div style='float:left; width:80px'>0, 1, 2, 3:</div>
         <div style='float:left'>
            <div id='Num'></div>
            <div id='Num0'></div>
            <div id='Num1'></div>
            <div id='Num2'></div>
            <div id='Num3'></div>
         </div>
      </div>
      <div id='Page4'> <!-- Océanie: changée spécifiquement --> </div>
   </div>
   <!-- Menu à droite -->
   <div style='float:left; width:112px; height:424px; padding:3px; background-color:#BBBBFF'>
      <div id='Ban'></div>
   </div>
   <div style='clear:both'><br/>
      <a href='http://www.william-voirol.ch/Prog/Tests/Onglets.zip'>Zip du code</a></div>
   <div><br/><a href='http://www.william-voirol.ch/Prog'>Autres programmes</a></div>
</body>
</html>


Fichier 'Ong.js':
================
function Ong(id,col,ac,m0,w,h) {
   var e,i,k=Ong.all.length,n=col.length,p,s,z='';
   if (!(e=document.getElementById(id))) {alert("bloc id='"+id+"' ?"); return}
   for (i=0;i<n;i++) {
      if (!(p=document.getElementById(id+i))) {alert("bloc id='"+id+i+"' ?"); return}
      s=p.style; s.backgroundColor=col[i]; s.height=h+'px'; s.width=w+'px'; s.display=(i==ac)?'':'none';
      z+="<div id='"+id+"_i"+(i+m0)+"' class="+((i==ac)?"'ongS'":"'ongN'")
      +" style='background-color:"+col[i]+"; cursor:pointer' onclick='Ong.Sel("+k+","+i+")'></div>";
   }
   e.innerHTML=z; e.style.width=w+'px'; e.style.height='30px'; Ong.all.push(this);  
   this.id=id;   // id de base (utilise les blocks id, id+'0', ..., id+(n-1)
   this.ac=ac;   // numéro de l'onglet actif
   this.m0=m0;   // numéro du messages correspondant au premier onglet
}
Ong.Sel=function(k,i) {
   var o=Ong.all[k];
   document.getElementById(o.id+'_i'+(o.ac+o.m0)).className='ongN';
   document.getElementById(o.id+'_i'+(i+o.m0)).className='ongS';
   document.getElementById(o.id+o.ac).style.display='none';
   o.ac=i; document.getElementById(o.id+i).style.display='';
}
Ong.all=new Array(0);

 Conclusion

J'ai évité "d'enjoliver" le test pour bien mettre en évidence les moyens utilisés.

Dans n'importe quelle situation de pages actives, le changement de langue se fait instantanément sur les textes, les info-bulles et les inputs.

Pour un essai direct, consultez:
   http://www.william-voirol.ch/Prog
sous 'Tests'.

Le zip (19 Ko) contient tous les fichiers du test.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture RÉSOLUTION D'UN SYSTÈME D'ÉQUATIONS LINÉAIRES À N INCONNUES
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES
Source avec Zip DIALOGUE ENTRE FENÊTRES MÈRE ET FILLE
Source avec Zip ROTATION D'UNE IMAGE, ANIMATION
Source avec Zip FRACTALES, FOUGÈRE, TRIANGLE, CARRÉ

 Sources de la même categorie

PARSER LES CARACTÈRES HTML D'UNE STRING par jdmcreator
CONSTRUCTION D'UNE TABLE TRIABLE À PARTIR D'UN TABLEAU 2D par phm
Source avec Zip Source avec une capture SUBDIVISER LE RÉSULTAT D'UNE RECHERCHE EN PAGES par kimmp
Source avec Zip TIMER : SETTIMEOUT & SETINTERVAL AMÉLIORÉS par jdmcreator
Source avec Zip Source avec une capture COPIER DU TEXTE par m22001111

 Sources en rapport avec celle ci

Source avec Zip TBFRAME: TAB BROWSING FRAME par triumphs
Source avec Zip Source avec une capture NAVIGATEUR INTERNET AVEC ONGLETS par loicseg
ONGLETS par coucou747

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

getElementsByName fonctionne nickel sous Firefox mais pas sous IE [ par Harm_Flav ] Bonjour,j'ai un problème avec la fonction getElementByName sous Internet Explorer. Je tiens à préciser que sous Firefox ça marche très bien.Alors voil Menu avec onglets (tous à gauche) [ par lineb76 ] Bonjour,J'aurais voulu savoir si vous saviez comment faire un menu avec onglets mais o&#249; ils apparaitraient tous &#224; gauche (vous voyez ce que Onglets [ par elevira ] Je refais acutellement un site web qui est compos&#233; de multiples frames. La contrainte que j'ai, est qu'il faut que plusieurs pages puissent &#234 Problème "menu onglets" déconnexion [ par jvergoby ] Bonjour &#224; tous,j'ai un petit soucis avec un code que j'ai pris ici :http://www.javascriptfr.com/codes/MENU-ONGLETS-AVEC-SCROLLB gerer les onglets sur plusieurs lignes [ par fifi_pipo ] bonjour,je suis a la recherche d'un script permettant de gerer plusieurs onglets sur plusieurs lignes.je m'explique, si l'on clic sur un onglet (n'imp gerer les onglets sur plusieurs lignes [ par fifi_pipo ] bonjour,je me suis peut etre trompé de forum precédement...j'ai posté dans " Thèmes / < Avis conception formulaire [ par chamallow ] Bonjour,Dans mon module php/javascript, j'ai une page qui contient un formulaire très grand. Je trouve cela pas très génial pour l'utilisateur. Et en menu changé ? [ par Osiris68 ] salut a tous voila je voudrais savoir ce que je dois changer dans ce script pour faire en sorte que le menu devienne dynamique, je m'explique, enfaite Faire des onglets [ par abder05 ] S'il vous plait donnez moi un code source en html pour pouvoir faire des onglets. Repondez à mon message S.V.P Abderahmane Gestion d'onglets en HTML + Mise à jour dynamique du contenu des ongets (débutant) [ par anakyl ] Bonjour à tous,Je vous écrit car je souhaiterais solliciter votre aide, étant donné que je suis nul en javascript.J'ai découvert cet excellent script


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,856 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales