IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Choix langue avec bouton [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut Choix langue avec bouton
    Bien le bonjour

    je peaufine ce 1er site, pour le HTML ça roule à peu près, mais je me perd avec l'utilisation des variables ($_POST, $_SESSION) et les cookies.

    J'essaie de rendre mon site bilingue (Fra/Eng), comme il y a très peu de texte je ne crée pas 2 sites, ni 2 pages différentes (1 pour chaque langue) et dans le code HTML il y a donc 2 containers, l'un en français, l'autre en anglais, il faut bien sûr une condition pour afficher l'un ou l'autre.

    j'ai rajouté un bouton qui permet de dire je change la condition, mais je n'y arrive pas, j'arrive pas en fait à ce que le bouton change la variable, j'ai essayé en écrivant un cookie 'lang', avec une fonction lang(), mais j'ai tout faux.

    en desespoir de cause j'ai trouvé cette astuce du serveur qui renseigne la langue du navigateur, mais on ne peut pas changer de version

    qqs conseils SVP

    voilà un exemple de code qui marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php
      if(!isset($lang)) {
    	$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
                        }
      if(isset($_POST['']))
            {
    	if ($lang="en") { $lang="fr";}
                       else { $lang="en";}
            }
      require_once("./onglets.php");
      $menu = affiche_menu();
     
    ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
       <title>Camargue & Costières</title>
       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
       <meta http-equiv="Content-language" content="fr" />
       <meta name="robots" content="follow, index, all" />
       <meta name="description" content="villa en camargue à louer" />
       <meta name="keywords" content="villa, camargue, location, vacances, sud" />
       <link rel="stylesheet" media="screen" type="text/css" title="costieres" href="costieres.css" /> <!-- feuille de style -->    
    </head>
     
    <body>
     
    <?php
       include("banniere.php");           // inclusion de la bannière
       echo $menu;                        // inclusion du menu à onglets
     if ($lang == "fr" )
      {
    ?>
      <div class="page">             //   *****  Page en Français  *******
      <form method="post" action="index.php"> 
      <input type="button" value ="English Version" />
      </form>
       <h1>Bienvenue à Saint-Gilles du gard</h1>
       <h3> Calme, Soleil, Nature, Culture, Spiritualité, Traditions</h3>
       <a href="Costieres/pool3.jpg" target="_blank">
       <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
       <h3> Villa confortable 150 m2 - 5 chambres - 2 salles d'eau </h3>
       <h3> Exterieur de 2200 m2 avec Parc & Piscine </h3>
       <h3> Climatisation - Barbecue - 4 parkings ombragés </h3>
       <h3> 3 WC - 2 salles d'eau</h3>
    </div>
    <?php
     }
    else
     {
    ?>
    <div class="page">         //  ********   Page en Anglais  *********
     
    <form method="post" action="index.php"> 
    <input type="button" value ="Version Française"  />
      </form>
       <h1>Welcome in Saint-Gilles of Gard</h1>
       <h3> Quiet, Sun, Culture, Spirituality, Traditions</h3>
       <a href="Costieres/pool3.jpg" target="_blank">
       <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
       <h3> comfortable house 150 m2 - 5 bedrooms  </h3>
       <h3> Garden with swimming-pool </h3>
       <h3> Climatisation - Barbecue - 4 parkings  </h3>
       <h3> 3 restrooms - 2 bathrooms</h3>
    </div>
     
    <?php
    }
    ?>
     
     
     
    <?php include("pied.php"); ?>
    </body>
    </html>
    le site est là: www.villa-camargue.com


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque le nom de ton champ la

  3. #3
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    merci de ta réponse, mais s'il ne manquait que ça ...

    en clickant sur le bouton je voudrais qu'un booleen fasse la bascule entre les 2 langages et je ne vois pas comment. Dois je utiliser un bouton submit ? comment récupérer la validation ? comment changer la valeur (avec une fonction ?) , ...

    bref comment vous coderiez ce bouton ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux avoir un formulaire et un bouton ou même un simple lien (texte ou image).
    La valeur de langue reçue sera simplement stockée en session.

  5. #5
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    oui dit comme ça, ça coule de source ... pour toi

    moi je connaissais rien à HTML/CSS/PHP il y a 1 mois, aussi je bute sur beaucoup de choses

    je met quoi comme formulaire ? input "submit" ? ds la ligne form je met quoi ds action "mapage.php" ? ou une autre page ?

    bref je n'y arrive pas

  6. #6
    Membre régulier Avatar de moogli
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 102
    Points
    102
    Par défaut
    salut,

    pas d'action dans le formulaire afin de ne pas changer de page

    le formulaire peut être ainsi
    <form action="" method="post">
    <input type="submit" name="lang" value="FR" />
    </form>

    tu récupère $_POST['lang'] comme tu le fait déja dans ton code.

    ensuite il faut réfléchir "l'algo"
    - est ce que j'ai deja un cookie ?
    - si oui est ce que $_POST['lang'] existe, si oui on change si non on utilise le cookie
    - si le cookie n'existe pas
    - est ce que $_POST['lang'] existe si oui on envoie le cookie et on affecte la nouvelle valeur à $lang.
    si non on utilise la valeur par défaut.

    @+

  7. #7
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    Ho un gros merci, tu m'as décoincé, ce formulaire vide me perturbait

    J'ai essayé d'utiliser ton algo et j'ai codé ça à "ma façon", ça marche à peu près, le menu ne se rafraichit pas en clickant sur le bouton, mais après oui, lol enfin bon, l'utilisateur éventuel va pas passer son temps à clicker sur ça

    je réalise que l'idéal serait une session pour ne pas avoir à répéter la même chose à toutes les pages, mais bon ça marche

    n'hésitez pas à corriger ce qui vous choque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
    // ** version française par défaut **  
       if(isset($_COOKIE['lang'])){ $lang = $_COOKIE['lang']; }  
                             else { $lang="fr";  }; 
     
       if(isset($_POST['lang']))           // ** bouton clické > switch de la langue 
           {
           if ($lang=="fr") { $lang="en";}
                       else { $lang="fr";};
           setcookie('lang', $value = $lang, time() + 365*24*3600, null, null, false, true);
            }
     
    require_once("./onglets.php");
    $menu = affiche_menu();  
     
    ?>
     
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
       <title>Camargue & Costières</title>
       <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
       <meta http-equiv="Content-language" content="fr" />
       <meta name="robots" content="follow, index, all" />
       <meta name="description" content="villa en camargue à louer" />
       <meta name="keywords" content="villa, camargue, location, vacances, sud" />
       <link rel="stylesheet" media="screen" type="text/css" title="costieres" href="costieres.css" /> <!-- feuille de style -->    
    </head>
     
    <body>
     
     
    <?php
       include("banniere.php");           // inclusion de la bannière
       echo $menu;                        // inclusion du menu à onglets
    if ($lang != "en" )              // par défaut: version française  
      {
    ?>
      <div class="page">    
      <form method="post" action="index.php"  > 
      <input type="submit" name ="lang" value="English Version" />
      </form>
       <h1>Bienvenue à Saint-Gilles du gard</h1>
       <h3> Calme, Soleil, Nature, Culture, Spiritualité, Traditions</h3>
       <a href="Costieres/pool3.jpg" target="_blank">
       <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
       <h3> Villa confortable 150 m2 - 5 chambres - 2 salles d'eau </h3>
       <h3> Exterieur de 2200 m2 avec Parc & Piscine </h3>
       <h3> Climatisation - Barbecue - 4 parkings ombragés </h3>
       <h3> 3 WC - 2 salles d'eau</h3>
    </div>
    <?php
     }
    else   //   ***** version anglaise  *****
     {
    ?>
       <div class="page">
         <form method="post" action="index.php" > 
         <input type="submit" name="lang" value ="Version Française"  />
         </form>
       <h1>Welcome in Saint-Gilles of Gard</h1>
       <h3> Quiet, Sun, Culture, Spirituality, Traditions</h3>
       <a href="Costieres/pool3.jpg" target="_blank">
       <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
       <h3> comfortable house 150 m2 - 5 bedrooms  </h3>
       <h3> Garden with swimming-pool </h3>
       <h3> Climatisation - Barbecue - 4 parkings  </h3>
       <h3> 3 restrooms - 2 bathrooms</h3>
       </div>
     
    <?php
    }
    ?>

  8. #8
    Membre régulier Avatar de moogli
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 102
    Points
    102
    Par défaut
    Yop,

    perso j'aurais fait un truc un peu plus dynamique afin de ne pas avoir a ajouter un elseif si j'ajoute une langue (ben oui le chinois est tendance ^^).

    un truc dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    // ** version française par défaut **  
    if(isset($_COOKIE['lang'])){ 
    	$lang = $_COOKIE['lang']; 
    }  
    else { 
    	$lang = 'fr';  
    }
    // validation du formulaire
    if(isset($_POST['lang'])){           // ** bouton clické > switch de la langue 
    	$languePossible = array('fr','en');
    	if (in_array($_POST['lang'],$languePossible); {
    		//setcookie('lang', $value = $lang, time() + 365*24*3600, null, null, false, true);
    		$lang = $_POST['lang'];
    		setcookie('lang', $_POST['lang'], time() + 365*24*3600, null, null, false, true);
    	}
    }
     
    require_once("./onglets.php");
    $menu = affiche_menu();  
      ?>
    Par contre je ne vois pas pourquoi ton menu ne change pas puisse qu'il est affiché après la définition de $lang, par contre fait attention à l'auto déclaration des variables si c'est le cas ça peut mettre le brin (car $_COOKIE['lang'], $_POST['lang'] et $lang feront référence à la même variable voir la conf du paramètre variables_order dans le php.ini pour savoir laquelle tu a. Sachant bien entendu qu'une fois passé le 1er if / else tu écrase de toute façon la valeur du post ... :/)

    @+

  9. #9
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    ha oui pas mal, si je veux rajouter le néerlandais ou l'allemand, bref des gens du Nooord

    pour le menu je ne comprend pas, visiblement, il rafraichit la page, mais pas la fonction, menu$ n'est pas mis à jour immédiatement, par contre aller fouiller ds PHP.ini ...

    j'ai bien trop peur de tout bouziller

    Merci à vous tous et si qqu'un comprend cette histoire de menu


  10. #10
    Membre régulier Avatar de moogli
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 102
    Points
    102
    Par défaut
    c'est p'tet pas ça le soucis, après faut voir comment fonctionne le menu, c'est peut être simplement un soucis de cache s'il y en a un.

    bref pas assez de donnée pour savoir d'ou viens le problème

    @+

  11. #11
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    là où ça devient comique c'est si tu recliques sur le bouton, alors là tu as un melting site texte en français et menu en anglais, et vice versa

    arf



    voila le code pour la fonction affichemenu()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <?php
        function affiche_menu()  // tableaux contenant les liens d'accès et le texte à afficher
        {   
           $tab_menu_lien  = array( "index.php", "carte.php" , "exterieur.php", "interieur.php","descriptif.php", "tarifs.php", "tourisme.php", "pont.php");
             if($_COOKIE['lang'] != "en")   
             { $tab_menu_texte = array( "Accueil", "Carte" , "Exterieur", "Interieur", "Descriptif", "Tarifs", "Tourisme", "Pont du gard" ); }
               else
             { $tab_menu_texte = array( "Home", "Maps" , "Outside", "Inside", "Descriptive", "Prices", "Tourism", "Roman Bridge" ); } 
     
     
            // informations sur la page
           $info = pathinfo($_SERVER['PHP_SELF']);
     
           $menu = "\n<div id=\"menu\">\n    <ul id=\"onglets\">\n";
     
            // boucle qui parcours les deux tableaux
            foreach($tab_menu_lien as $cle=>$lien)
            {
                $menu .= "    <li";
     
                // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
                if( $info['basename'] == $lien )
                    $menu .= " class=\"active\"";
     
                $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
            }
     
            $menu .= "</ul>\n</div>";
     
            return $menu;        
        }
    ?>

  12. #12
    Membre régulier Avatar de moogli
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 102
    Points
    102
    Par défaut
    heu déjà devrait pas y avoir balise html l@. cette balise est unique et au début du fichier html, donc le fichier qui inclus le menu.

    ensuite tu utilise directement le cookie, tu devrais plutôt passer en argument de la fonction affiche_menu la valeur de la langue. Cela évitera le problème que tu a qui est du au fait que le cookie n'est pas lisible directement après l'envoie mais seulement au ré-affichage de la page (car on lit les cookie une fois placer mais pas "en même temps").

    ta fonction deviendrais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
        function affiche_menu($lang='fr')  // tableaux contenant les liens d'accès et le texte à afficher
        {   
           $tab_menu_lien  = array( "index.php", "carte.php" , "exterieur.php", "interieur.php","descriptif.php", "tarifs.php", "tourisme.php", "pont.php");
             if($lang != "en")   
             { $tab_menu_texte = array( "Accueil", "Carte" , "Exterieur", "Interieur", "Descriptif", "Tarifs", "Tourisme", "Pont du gard" ); }
               else
             { $tab_menu_texte = array( "Home", "Maps" , "Outside", "Inside", "Descriptive", "Prices", "Tourism", "Roman Bridge" ); } 
     
     
            // informations sur la page
           $info = pathinfo($_SERVER['PHP_SELF']);
     
           $menu = "\n<div id=\"menu\">\n    <ul id=\"onglets\">\n";
     
            // boucle qui parcours les deux tableaux
            foreach($tab_menu_lien as $cle=>$lien)
            {
                $menu .= "    <li";
     
                // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
                if( $info['basename'] == $lien )
                    $menu .= " class=\"active\"";
     
                $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
            }
     
            $menu .= "</ul>\n</div>";
     
            return $menu;        
        }
    ?>
    et seulement ça dans le fichier de la fonction

    pour l'utiliser soit tu la garde ainsi soit (et donc utilisation du fr en défaut soit tu met le cookie ou plutôt la variable $lang que tu génère avec le 1er code

    soit affiche_menu($lang);

    Après tu devrais faire plus simple en utilisant l'égalité plutôt que la négation (dans le test de la langue) et a la limite modifier la fonction pour du multilingue

    @+

  13. #13
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    pour l'entête HTML, ds un autre de mes messages de noob, un intervenant m'a dit le contraire, qu'il fallait mettre ça ds toutes mes pages PHP

    le problème avec le cookie, c'est qu'il faut tj le mettre en début de code, c'est chiant et pas simple à cogiter je trouve, si je le met pas en début de page index, je le met où ? dans la fonction ?

    ds ton code, pour la fonction, tu mets en argument: $lang="fr" là vraiment je comprend pas le sens de ça

    en tout cas merci de m'aider

    j'ai donc mis $menu=affiche_menu($lang) et ça marche nickel !

    Bravo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Problème de choix multiples avec boutons d'options.
    Par Axe_Débutant dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/03/2015, 11h59
  2. Formulaire avec boutons radio->multi-choix
    Par pitu69 dans le forum MkFramework
    Réponses: 13
    Dernier message: 06/07/2013, 18h35
  3. [C#] Dropdownlist avec bouton valider
    Par serge benhamou dans le forum ASP.NET
    Réponses: 3
    Dernier message: 28/10/2005, 11h42
  4. Réponses: 24
    Dernier message: 11/01/2005, 11h12
  5. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 21h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo