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 :

[Cookies] multi langue PHP avec cookie


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut [Cookies] multi langue PHP avec cookie
    Bonjour,

    voila je cherche à developper un site multi-lang en php. J'ai donc un script si dessous qui en fonction de la langue va orienter un vers un fichier contenant les traductions dans la langue choisie . Ce script utilise des cookies ....
    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
    <?php   
     
        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 ($lang=='fr') {           // si la langue est 'fr' (français) on inclut le fichier fr-lang.php  
            include('fr.php');   
        } elseif ($lang=='en') {      // si la langue est 'en' (anglais) on inclut le fichier en-lang.php  
            include('en.php');   
        }   
        //fin du script d'origine  
     
        //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);   
     
        ?>
    ma question est comment arriver à transmettre la variable 'lang' qui doit être enregistrée dans le cookie puis utilisée dans le script ci dessus pour determiner la langue. (en gros quel lien dois je mettre derriere le petit drapeau anglais ou Francais ?)

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Tu pouvais aussi poser ta question dans le post de Linon un peu plus bas et partagez ton experience avec lui.

    Sinon pour ta question de lien à mettre il faut que tu l'envoi vers une page php ou tu recup la langue ( en GET par exemple). Ensuite tu pose le cookie avec setcookie

    Voilà

    Pierre

    PS : plutôt que HTTp_COOKIE_VAR utilise $_COOKIE c'est plus court

  3. #3
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    voilà j'ai mis mon code à jour

    j'ai deux lien pour choisir la lang et acceder à ma page
    <a href="page1.php?lang=en">anglais</a><br />
    <a href="page1.php?lang=fr">francais</a><br />

    cela appel le script ci-dessous (qui choisi la langue) et determine le ficher de traduction à utiliser.

    ....mais j'ai une erreur ....vous avez une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\ser\multilang\decide-lang.php:1) in c:\program files\easyphp1-8\www\ser\multilang\decide-lang.php on line 22
    voici mon script decide-lang.php

    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
     <?php   
        if(!empty($_GET['lang'])) 
        if(isset($_COOKIE['lang'])) {  
           $lang =$_COOKIE['lang'];  
        } else {  
           // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur  
           $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);   
       }  
     
       //script d'origine  
       if ($lang=='fr') {           // si la langue est 'fr' (français) on inclut le fichier fr-lang.php  
           include('fr-lang.php');   
       } elseif ($lang=='en') {      // si la langue est 'en' (anglais) on inclut le fichier en-lang.php  
            include('en-lang.php');   
        }   
        //fin du script d'origine  
     
        //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);   
     
     
    ?>

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    L'envoi d'un cookie vers le poste de l'utilisateur ne peu se faire que si celui-ci n'a reçu aucune donnée de la part du script.

    Verifies que tu n'as pas laissé un echo, du html, des espaces. Pour etre sur <? doivent etre les premiers caractères de ta page.

  5. #5
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    j'avais effectivement un espace avant <?php.
    Mais j'ai encore un pb....mon script ne marche pas du tout ! Le choix de la langue ne se fait pas .....c'est toujours en français meme quand je clique sur anglais ... je pense que le cookie ne s'initialise pas et qu'il prends la langue du navigateur ....une idée ?

    j'ai une page index avec les liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <a href="page1.php?lang=en">anglais</a><br />
    	<a href="page1.php?lang=fr">francais</a><br />

    un script decide-lang
    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
    <?   
    if(!empty($_GET['lang'])) 
    if(isset($_COOKIE['lang'])){  
    $lang=$_COOKIE['lang'];  
    } else{  
    // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur  
    $lang=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);   
    }     
    //script d'origine  
    if ($lang=='fr'){           // si la langue est 'fr' (français) on inclut le fichier fr-lang.php  
    include('fr-lang.php');   
    } elseif($lang=='en'){      // si la langue est 'en' (anglais) on inclut le fichier en-lang.php  
    include('en-lang.php');   
    }   
    //fin du script d'origine        
    //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);   
    ?>
    un fichier de traduction ici en français et le meme en anglais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    define('TXT_METEO', 'Il fait un soleil radieux !');  
    define('TXT_CONSEIL_INDEX', 'Faites du PHP !'); 
    ?>
    et la page d'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php  
     require("decide-lang.php");  
        ?>  
        <html>  
        <body>  
     
        <br>  
        Meteo du jour : <?php echo TXT_METEO; ?>  
        <br>  
        Conseil du jour : <?php echo TXT_CONSEIL_INDEX; ?>  
     
     
        </body>  
        </html>

  6. #6
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par FCYPBA
    PS : plutôt que HTTp_COOKIE_VAR utilise $_COOKIE c'est plus court
    C'est surtout que $HTTP_COOKIE_VARS est obsolète... comme tous les $HTTP_*_VARS... .. .

    Sinon voila comment je te conseil de faire... .. .

    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
    // on crée un constante avec le chemin du répertoire courant
    define('LANG_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
    
    // on cherche dans $_GET et $_COOKIE si la variable lang existe
    if(isset($_GET['lang']) && !empty($_GET['lang']))
       $lang = $_GET['lang'];
    elseif(isset($_COOKIE['lang']) && !empty($_COOKIE['lang']))
          $lang = $_COOKIE['lang'];
    else
    {
          // la variable lang n'existe pas on va donc chercher dans les languages acceptés par le navigateur
          $lang_codes = array();
          $accept_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : @getenv('HTTP_ACCEPT_LANGUAGE');
          
          if(!empty($accept_lang)) 
          {
                $accept_lang = explode(',',$accept_lang);
                // on recherche les languages acceptés en fonction de leur ordre d'importance
                foreach($accept_lang  as $lang_spec) 
                {
                      if (preg_match('/([a-z]+)(?:-[a-z]+)?(?:;q=(\d+\.\d+))?/', trim($lang_spec), $matches)) 
                      {
                            $lang_code = $matches[1];
                            $qvalue      = isset($matches[2]) ? $matches[2] : 1;
                            
                            if ($qvalue > 0.0001)
                                  $lang_codes[$lang_code] = isset($lang_codes[$lang_code]) ? max($lang_codes[$lang_code], $qvalue) : $qvalue;
                      }
                }
                
                // on classe les languages acceptés du plus important au moins important
                arsort($lang_codes, SORT_NUMERIC);
                
                // on vérifie que les fichier langue existe le premier toruvé c'est le bon
                foreach(array_keys($lang_codes) as $lang_code) 
                {
                      if(is_file(LANG_PATH.$lang_code.'-lang.php'))
                      {
                            $lang = $lang_code;
                            break;
                      }
                }
          }
          else $lang = 'fr';
    }
    
    // on vérifie que le fichier langue existe
    if(!is_file(LANG_PATH.$lang.'-lang.php'))
          $lang = 'fr';
    
    // on inclu et on met à jour le cookie
    include(LANG_PATH.$lang.'-lang.php');
    setcookie("lang", $lang,( time()+(365*24*3600 )));
    @ tchaOo°

  7. #7
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    ok merci beaucoup pour ces corrections !
    ça fonctionne très bien.
    Je voudrais juste savoir maintenant quels liens je doit mettre lorsque je veux passer de page en page pour conserver la langue choisie initialement ?

    merci

  8. #8
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par heteroclite
    Je voudrais juste savoir maintenant quels liens je doit mettre lorsque je veux passer de page en page pour conserver la langue choisie initialement ?
    Aucun la langue est sauvée dans le cookie... la seule condition c'est que le navigateur de l'internaute accept les cookies... sinon tu dois juste créer un lien par langue sur chaque page en fonction de l'adresse de la page affichée... du 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    // si PHP4
    if(!function_exists('http_build_query'))
    {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function http_build_query($vars, $prefix = '')
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!is_array($vars))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return false;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;elseif(empty($vars))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return '';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$ret = '';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;foreach($vars as $name => $value)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$ret .= $prefix.$name.'='.urlencode($value).'&';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return substr( $ret, 0, -1);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    }
    
    // on recupere l'url de la page courante
    $url = (!empty($_SERVER&#91;'HTTPS']) ? 'https' : 'http').' ://'.$_SERVER&#91;'HTTP_HOST'].$_SERVER&#91;'PHP_SELF'];
    
    // on verifie si il y a des parametre passés dans l'url s'il y en a on les récupère
    $query_str = '';
    
    if(isset($_SERVER&#91;'QUERY_STRING']))
    {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!empty($_SERVER&#91;'QUERY_STRING']))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$query_str = $_SERVER&#91;'QUERY_STRING'].'&';
     
    }
    elseif(!empty($_GET))
    &#160;&#160;&#160;&#160;&#160;&#160;$query_str = http_build_query($_GET).'&';
    
    // on vire lang s'il y est 
    $query_str = preg_replace('~&?lang=&#91;a-z]{2}~','',$query_str);
    
    // on affiche les liens
    echo '<a href="'.$url.'?'.$query_str.'lang=en">anglais</a><br />
    &#160;&#160;&#160;&#160;&#160;&#160;<a href="'.$url.'?'.$query_str.'lang=fr">francais</a><br />';
    
    @ tchaOo°

  9. #9
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    y' aurai pas un moyen pour eviter de selectionner la langue à chaque page de faire le choix sur l'index et de récupérer la variable enregistrée dans le cookie pour les autres pages ?

    je m'explique

    index: choix de la langue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="page1.php?lang=en">anglais</a><br />
    <a href="page1.php?lang=fr">francais</a><br />
    puis affichage de la page 1 avec des liens vers les autres pages (page 2) type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page2.php?lang=.$_COOKIE['lang'].'">
    c'est possible ça ?

  10. #10
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Les cookies sont transmis de page en page sans que tu est besoin de t'en soucier.

    Le premier post de kankrelune te donne clairement la méthode a utiliser.
    - Tu test le _GET['lang'] au cas ou l'utilisateur change de langue
    - Tu test le _COOKIE['lang'] pour recupere la langue
    - Si aucun des deux alors langue par défaut

  11. #11
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par heteroclite
    y' aurai pas un moyen pour eviter de selectionner la langue à chaque page de faire le choix sur l'index et de récupérer la variable enregistrée dans le cookie pour les autres pages ?

    je m'explique

    index: choix de la langue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="page1.php?lang=en">anglais</a><br />
    <a href="page1.php?lang=fr">francais</a><br />
    puis affichage de la page 1 avec des liens vers les autres pages (page 2) type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="page2.php?lang=.$_COOKIE['lang'].'">
    c'est possible ça ?
    C'est déja le cas... mais prenons un autre cas de figure... si l'internaute arrive sur une autre page que l'acceuil par exemple après avoir suivi un lien qu'on lui a donné ou après avoir fait une recherche sur un moteur de recherche... il faut lui laisser la possibilité de changer de langue... d'où l'interet de la deuxieme portion de code que je te donne... tu laisse les deux liens dans un coin discret de tes pages (tu peux remplacer la langue en texte par une petite image avec le drapeau de la langue aussi) et comme ça on peut changer à tout moment... .. .

    @ tchaOo°

  12. #12
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    il y a un truc que je comprends pas:

    1 je selectionne la langue sur l'index (anglais)
    2 mon script enregistre la langue dans le cookie
    3 j'arrive sur la page 1 je clique sur un lien vers la page 2 (<a href="page2.php">) (page2 qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require("decide-lang.php");
    )

    la page 2 devrait s'afficher en anglais non ? puisque le le fichier decide-lang devrait voir dans le cookie que la langue = en


    eh bien non ....elle s'affiche en francais ...


    il y a un probleme ??? je vois pas ...

  13. #13
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    peux tu mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo '<pre>';
    print_r($_COOKIE);
    echo '</pre>';
    dans ta page2... juste après le require('decide-lang.php'); puis refaire le test de changement de page et nous poster le tableau qui s'affiche sur ta page2... .. .

    @ tchaOo°

  14. #14
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    resultat du tableau

    je signale que lorsque je selectionne la langue sur l'index la page 1 s'affiche dans la langue choisie . lors du passage à la page 2 (avec un lien simple page2.php) ....la langue devient systematiquement le francais

  15. #15
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Ton navigateur accepte les cookies au moins... .. ?

    @ tchaOo°

  16. #16
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    oui....et pourtant ça a pas l'air de marcher

  17. #17
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    met

    error_reporting(E_ALL);

    au début de ton fichier decide-lang.php puis retest... le cookie n'est pas écrit surement parce qu'il y a du contenu qui est envoyé en amont... .. .

    @ tchaOo°

  18. #18
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    je viens de le rajouter.....aucun changement...même comportement...c'est sensé produire un log d'erreur ?

  19. #19
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par heteroclite
    je viens de le rajouter.....aucun changement...même comportement...c'est sensé produire un log d'erreur ?
    Aucune erreur ne s'affiche ? tu l'as bien mis au début de ton fichier decid-lang... est ce que tu as des echo ou du html qui s'affiche avant l'inclusion de ton fichier decid-lang... .. ?

    @ tchaOo°

  20. #20
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Voici mes codes:

    index
    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
    <html>
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>New Page 1</title>
    </head>
    <body>
    <p>
        <a href="page1.php?lang=en">anglais</a><br />
    	<a href="page1.php?lang=fr">francais</a><br />
     
    </p>
     
    </body>
     
    </html>
    decide-lang
    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
    <?
    error_reporting(E_ALL);
     
    // on crée un constante avec le chemin du répertoire courant
    define('LANG_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
     
    // on cherche dans $_GET et $_COOKIE si la variable lang existe
    if(isset($_GET['lang']) && !empty($_GET['lang']))
       $lang = $_GET['lang'];
    elseif(isset($_COOKIE['lang']) && !empty($_COOKIE['lang']))
          $lang = $_COOKIE['lang'];
    else
    {
          // la variable lang n'existe pas on va donc chercher dans les languages acceptés par le navigateur
          $lang_codes = array();
          $accept_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : @getenv('HTTP_ACCEPT_LANGUAGE');
     
          if(!empty($accept_lang)) 
          {
                $accept_lang = explode(',',$accept_lang);
                // on recherche les languages acceptés en fonction de leur ordre d'importance
                foreach($accept_lang  as $lang_spec) 
                {
                      if (preg_match('/([a-z]+)(?:-[a-z]+)?(?:;q=(\d+\.\d+))?/', trim($lang_spec), $matches)) 
                      {
                            $lang_code = $matches[1];
                            $qvalue      = isset($matches[2]) ? $matches[2] : 1;
     
                            if ($qvalue > 0.0001)
                                  $lang_codes[$lang_code] = isset($lang_codes[$lang_code]) ? max($lang_codes[$lang_code], $qvalue) : $qvalue;
                      }
                }
     
                // on classe les languages acceptés du plus important au moins important
                arsort($lang_codes, SORT_NUMERIC);
     
                // on vérifie que les fichier langue existe le premier toruvé c'est le bon
                foreach(array_keys($lang_codes) as $lang_code) 
                {
                      if(is_file(LANG_PATH.$lang_code.'-lang.php'))
                      {
                            $lang = $lang_code;
                            break;
                      }
                }
          }
          else $lang = 'fr';
    }
     
    // on vérifie que le fichier langue existe
    if(!is_file(LANG_PATH.$lang.'-lang.php'))
          $lang = 'fr';
     
    // on inclu et on met à jour le cookie
    include(LANG_PATH.$lang.'-lang.php');
    setcookie("lang", $lang, time())+(365*24*3600);   
    ?>
    page1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php  
     require("decide-lang.php");  
        ?>  
        <html>  
        <body>  
     
        <br>  
        Meteo du jour : <?php echo TXT_METEO; ?>  
        <br>  
        Conseil du jour : <?php echo TXT_CONSEIL_INDEX; ?>  
    	<a href="page2.php">page2</a><br />
     
        </body>  
        </html>
    page2
    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
    <?php  
     require("decide-lang.php");  
     echo '<pre>';
    print_r($_COOKIE);
    echo '</pre>';
        ?>  
        <html>  
        <body>  
     
        <br>  
        Meteo du jour : <?php echo TXT_METEO; ?>  
        <br>  
        Conseil du jour : <?php echo TXT_CONSEIL_INDEX; ?>  
        </body>  
        </html>
    fichier de traduction fr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    define('TXT_METEO', 'Il fait un soleil radieux !');  
    define('TXT_CONSEIL_INDEX', 'Faites du PHP !'); 
    ?>
    fichier de trad en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php  
    define('TXT_METEO', 'The sun is shining !');  
    define('TXT_CONSEIL_INDEX', 'Let/s do some PHP !');  
     
    ?>

Discussions similaires

  1. Cookie multi-langue
    Par Le_Pierre dans le forum WordPress
    Réponses: 0
    Dernier message: 26/05/2011, 17h52
  2. Site multi-langue PHP
    Par swissmade dans le forum Langage
    Réponses: 40
    Dernier message: 19/07/2007, 00h06
  3. Réponses: 3
    Dernier message: 25/06/2007, 16h50
  4. [Cookies] mise ne forme avec cookies
    Par Tee shot dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2007, 22h39

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