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

PHP & Base de données Discussion :

Cookies en php (garder la langue choisie)


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut Cookies en php (garder la langue choisie)
    Bonjour à tous,

    Je n'ai jamais fait de cookies en php et je me heurte à un souci:

    Je voudrais proposer mon site en 3 langues. Jusque là, tout va bien; mes traductions sont correctes,...

    Mais quand je passe d'une page à l'autre, je voudrais que le navigateur garde la langue choisie par l'utilisateur. Après avoir chercher sur la toile, j'ai trouvé quelque chose qui me parait logique mais cela ne garde pas le choix de ma langue

    Pouvez-vous me donner quelques conseils ou idées? Je mets aussi une partie de mon code en php que j'ai inséré dans le header.

    Merci d'avance.
    David

    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
     
    <?
    	if(isset($HTTP_COOKIE_VARS['lang'])) {
    	 $lang = $HTTP_COOKIE_VARS['lang'];
    	} else {
     
    	 $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); 
    	}
    	if ($_GET['lang']=='fr') {           
    		include('lang/fr-lang.php');
    	} 
    	else if ($_GET['lang']=='en') {      
    		include('lang/en-lang.php');
    	}
    	else if ($_GET['lang']=='nl') {      
    		include('lang/nl-lang.php');
    	}	
    	else {                      
    		include('lang/fr-lang.php');
    	}
     	 //définition de la durée du cookie (1 an)
     	 $expire = 365*24*3600; 
     
     	 //enregistrement du cookie au nom de lang
     	 setcookie("lang", $lang, time() + $expire); 
     
    	if(isset($_POST['button'])){
    		if($_POST['login']=="test" && $_POST['pswd']=="test"){
    			session_start();
    			$_SESSION['admin']=true;
    			header("location: menu_nav.php");
    		} else {
    			$error .= TXT_ERROR_LOGIN;
    		}
    	}
    ?>
    Et ma partie dans les balises BODY:

    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
     
    <div id="language">
    	<a href="index.php?lang=en"><img src="../img/gb.png" alt="English" title="English" /></a> 
    	<a href="index.php?lang=nl"><img src="../img/ndls.png" alt="Nederlands" title="Nederlands" /></a>       
    	<a href="index.php?lang=fr"><img src="../img/gf.png" alt="Français" title="Français" /></a>
    </div>
    <div id="title">
    	<h1><?= TXT_TITLE_HEADER;?></h1>
    <div id="error"><?=$error?></div>	
    </div>    
    <div id="padlock"></div>    
    	<form id="form_login" name="form_login" method="post" action="" onsubmit="return validate_admin()">
        		<p>
                	<label for="login"><?= TXT_LOGIN;?></label>
                    	<input type="text" name="login" id="login" />
                </p>
                <p>
                	<label for="pswd"><?= TXT_PASS;?></label>
                    	<input type="password" name="pswd" id="pswd" />
                </p>
                <p>
                	<input type="submit" name="button" id="button" value="<?= TXT_SUBMIT;?>" />
                </p>
                <p>
                    <a href="http://validator.w3.org/check?uri=referer" target="_blank"><img src="../img/xhtml.png" alt="Valid XHTML 1.0 Transitional"/></a>
                </p>
                <p>
                    <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank"><img src="../img/css2.png" alt="CSS2 Valide !" /></a>
                </p>
                <p>
                    <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank"><img src="../img/css3.png" alt="CSS3 Valide !" /></a>
                </p>   
    		</form>             
    </div>

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Par défaut
    En fait tu à un soucis de variable.

    Au début tu vérifies si un cookies avec la langue existe.
    Si elle existe tu créé la variable $lang
    Si elle n'existe pas tu créé également la variable $lang avec la langue du navigateur.

    Ensuite tu vérifie $_GET['lang'] est définie ou pas et tu affiche le fichier de langue.

    ton soucis c'est que $lan et $_GET['lang'] ne sont pas les même.

    je te conseil ce script :

    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
     
    <?
     
    	if(!empty($HTTP_COOKIE_VARS['lang'])) {
    	 $lang = $HTTP_COOKIE_VARS['lang'];
    	}
            elseif (!empty($_GET['lang']))
           {
           $lang = $_GET['lang'];
           }
           else {
     
    	 $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); 
    	}
    	if ($lang=='fr') {           
    		include('lang/fr-lang.php');
    	} 
    	else if ($lang=='en') {      
    		include('lang/en-lang.php');
    	}
    	else if ($lang=='nl') {      
    		include('lang/nl-lang.php');
    	}	
    	else {                      
    		include('lang/fr-lang.php');
    	}
     	 //définition de la durée du cookie (1 an)
     	 $expire = 365*24*3600; 
     
     	 //enregistrement du cookie au nom de lang
     	 setcookie("lang", $lang, time() + $expire); 
     
    	if(isset($_POST['button'])){
    		if($_POST['login']=="test" && $_POST['pswd']=="test"){
    			session_start();
    			$_SESSION['admin']=true;
    			header("location: menu_nav.php");
    		} else {
    			$error .= TXT_ERROR_LOGIN;
    		}
    	}
    ?>

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci de ta réponse.

    Ayant lu ton code et testé mais cela ne fonctionne pas. Il me redirige bien mais ne prend pas le cookies en compte ni même le changement de langue sur la page Index.php...

    J'avoue patauger LOL
    Un p'tit coup de pouce n'est pas de refus ^^

    Merci d'avance

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Voilà,

    je pense avoir doucement compris les cookies, mais je voudrais avoir votre avis sur ce code car quand je ne sélectionne pas de langue le français est mis pas défaut mais le n'ai pas le paramètre "FR" dans l'URL.

    Merci de vos conseils

    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
     
    <?
    	if(isset($HTTP_COOKIE_VARS['lang'])){
    	 $lang = $HTTP_COOKIE_VARS['lang'];
    	} else {
    	 // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
    	 $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); 
    	}
    	//script d'origine
    	if ($_GET['lang']=='fr'){           // si la langue est 'fr' (français) on affiche le fichier fr-lang.php
    		include('lang/fr-lang.php');
    	}else if ($_GET['lang']=='en'){      // si la langue est 'en' (anglais) on affiche le fichier en-lang.php
    		include('lang/en-lang.php');
    	}else if ($_GET['lang']=='nl'){      // si la langue est 'nl' (néerlandais) on affiche le fichier nl-lang.php
    		include('lang/nl-lang.php');
    	}else{                       		// si aucune langue n'est déclarée on affiche le fichier fr-lang.php par défaut
    		include('lang/fr-lang.php');
    			//définition de la durée du cookie (1 an)
    		$expire = 365*24*3600; 
    			//enregistrement du cookie au nom de lang
    		setcookie("lang", $lang, time() + $expire); 
    	}
    	if(isset($_POST['button'])){
    		if($_POST['login']=="test" && $_POST['pswd']=="test"){
    			session_start();
    			$_SESSION['admin']=true;
    			header("location: menu_nav.php?" . "lang=" . $_GET['lang']);
    		}else{
    			$error .= TXT_ERROR_LOGIN;
    		}
    	}
    ?>
    Et mes liens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div id="language">
    	<a href="index.php?lang=en"><img src="../img/gb.png" alt="English" title="English" /></a> 
    	<a href="index.php?lang=nl"><img src="../img/ndls.png" alt="Nederlands" title="Nederlands" /></a>       
    	<a href="index.php?lang=fr"><img src="../img/gf.png" alt="Français" title="Français" /></a>
    </div>

  5. #5
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    Citation Envoyé par andaman Voir le message
    je voudrais avoir votre avis sur ce code car quand je ne sélectionne pas de langue le français est mis pas défaut mais le n'ai pas le paramètre "FR" dans l'URL.
    Normal, c'est ton dernier "else" qui met en français par défaut.

    Tu as une erreur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ($_GET['lang']=='fr'){           // si la langue est 'fr' (français) on affiche le fichier fr-lang.php
    		include('lang/fr-lang.php');
    	}else if ($_GET['lang']=='en'){      // si la langue est 'en' (anglais) on affiche le fichier en-lang.php
    		include('lang/en-lang.php');
    	}else if ($_GET['lang']=='nl'){      // si la langue est 'nl' (néerlandais) on affiche le fichier nl-lang.php
    		include('lang/nl-lang.php');
    	}else{                       		// si aucune langue n'est déclarée on affiche le fichier fr-lang.php par défaut
    		include('lang/fr-lang.php');
    			//définition de la durée du cookie (1 an)
    		$expire = 365*24*3600; 
    			//enregistrement du cookie au nom de lang
    		setcookie("lang", $lang, time() + $expire); 
    	}
    le cookie n'est créé QUE si tu n'as aucun paramètre dans l'url.

    Ce qui serait à mon avis mieux :
    Code php : 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
    switch($_GET['lang']) {
    	default:
    	case 'fr':
    		include('lang/fr-lang.php');
    		break;
    	case 'en':
    		include('lang/en-lang.php');
    		break;
    	case 'nl':
    		include('lang/nl-lang.php');
    		break;
    }
    //définition de la durée du cookie (1 an)
    $expire = 365*24*3600; 
    //enregistrement du cookie au nom de lang
    setcookie("lang", $lang, time() + $expire);

Discussions similaires

  1. PHP et la langue arabe !
    Par omarfla dans le forum Langage
    Réponses: 8
    Dernier message: 09/05/2007, 18h29
  2. [Cookies] Site PHP multilangue
    Par RobinNono dans le forum Langage
    Réponses: 4
    Dernier message: 15/05/2006, 13h47
  3. Réponses: 4
    Dernier message: 03/05/2006, 18h23
  4. [Cookies] Cookie avec PHP
    Par fleo0 dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2006, 11h32
  5. [Cookies] Quand PHP rhyme avec étrange... .
    Par JSuper_Kitten dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2005, 23h46

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