Changement de langue

SveDec

Membre actif
12 Mai 2004
676
44
Paris
Bonsoir à tous :)
Voilà, je suis en pleine conception d'un site web.
On m'a demandé de faire un site où, en cliquant sur un lien (j'ai mis des drapeaux ^^), le site change de langue.
J'ai eu l'idée (nulle ?) de créer un cookie stockant la langue choisie ("francais" ou "english"), et pour chaque page d'afficher son contenu en telle ou telle langue, selon la valeur du cookie.
Mon problème maintenant ^^
Voilà, quand le cookie n'existe pas, ma version par défaut est la version française. Pas de problème, à la connexion, le français s'affiche.
Si je clique sur le drapeau, il envoie à une page switch.php l'information "english". switch.php se charge de créer le cookie et de lui donner l'information english. Bref, tout ça pour dire que switch.php remplit son rôle et le contenu s'affiche alors en anglais ;)
Le problème est là : si je veux remettre le site en français, et bien ... ça ne fonctionne pas, il reste en anglais :/
Pourtant, le cookie change prend bien la valeur "francais" !
Voilà les codes :

Le code de index.php, qui contient le lien :
Bloc de code:
Blabla html ...
<?php
if (isset($_COOKIE['langue'])) // Si le cookie existe
    {
        $langue = $_COOKIE['langue']; // On crée la variable $langue en lui attribuant la valeur du cookie
        if ($langue = "english") // Si $langue vaut english
            {
                include("fr/lien.php"); // Alors on affiche le lien vers la version française
            }
        elseif ($langue = "francais") // Sinon, si $langue vaut francais
            {
                include("en/link.php"); // Alors on affiche le lien vers la version anglaise
            }
        else // Sinon
            {
                include("en/link.php"); // On affiche le lien vers la version anglaise (choix par défaut donc)
            }
    }
else // Sinon ...
    {
        include("en/link.php"); // On affiche le lien vers la version anglaise (choix par défaut donc)
    }
?>
Blabla html
Je pense que le problème est dans ce code, je m'embrouille peut dans l'ordre des if, elseif, else ...Ou bien c'est autre chose ^^
Je crois que c'est inutile, mais si voulez aussi les codes de switch. php et en/link.php & fr/lien.php ...
Voilà, merci d'avance :)
 
SveDec a dit:
Bref, tout ça pour dire que switch.php remplit son rôle et le contenu s'affiche alors en anglais ;)
Le problème est là : si je veux remettre le site en français, et bien ... ça ne fonctionne pas, il reste en anglais :/
Pourtant, le cookie change prend bien la valeur "francais" !

Ben, peut-être que switch.php ne remplit pas si bien son rôle que ça...
D'après ce que tu as écrit, tu ne constates son fonctionnement que dans le sens français -> anglais, non ?
:zen:
 
Merci pour vos réponses :)

fredmac75 a dit:
Salut,
N'eut-il pas été plus simple de tester la valeur de la langue du navigateur via un javascript et proposer la redirection correspondante :confused:
Un exemple ici
Si peut-être, mais je dois pouvoir donner le choix au visiteur, comme j'essaye de le faire ;)

averell a dit:
Ben, peut-être que switch.php ne remplit pas si bien son rôle que ça...
D'après ce que tu as écrit, tu ne constates son fonctionnement que dans le sens français -> anglais, non ?
:zen:
Voilà, quand j'arrive sur la page, elle est en français, le cookie n'existe pas. Je demande le changement en anglais, le cookie se crée avec la valeur english, le contenu en anglais et le lien vers la version française s'affichent. Je redemande le changement pour le français, le cookie change pour francais, mais la page ne bouge pas :/
Voilà le code de switch.php :
Bloc de code:
<?php
  $validite = time() + 60 * 60 * 24 * 31 * 12; // douze mois en secondes

  // on considère que register_globals est désactivée, ainsi ce script fonctionnera quel que soit la configuration
  if (isset($_GET['langue'])) {
    /* la langue a été passé en méthode GET, dans l'URL */
    $langue = $_GET['langue'];
  }
  else if (isset($_POST['langue'])) {
    /* la langue a été passé en méthode POST, dans les entêtes HTTP */
    $langue = $_POST['langue'];
  }

  if (isset($_GET['redirection'])) {
    /* l'adresse de la page en cours est passée en méthode GET, dans l'URL */
    $redirection = $_GET['redirection'];
  }
  else if (isset($_POST['redirection'])) {
    /* l'adresse de la page en cours a été passée en méthode POST, dans les entêtes HTTP */
    $redirection = $_POST['redirection'];
  }

  // protection contre les petits malins qui tenteraient de pirater le site
  // le nom de la langue ne peut contenir que des caractères alpha-numériques et les caractères _ et -
  $langue = preg_replace('#[^a-zA-Z0-9_-]#', '', $langue);

  // on vérifie qu'il s'agit bien d'un lien interne
  // il doit commencer par http://monsite.com/ 
  if (strpos($redirection, 'http://'.$_SERVER['SERVER_NAME'].'/') === false || strpos($redirection, 'http://'.$_SERVER['SERVER_NAME'].'/') != 0) {
    /* tentative de piratage ? on remplace par la racine du site */
    $redirection = 'http://'.$_SERVER['SERVER_NAME'].'/';
  }

  setcookie('langue', $langue, $validite, '/', $_SERVER['SERVER_NAME'], 0);

  // on n'utilise pas le HTTP_REFERER car ce n'est pas fiable et les proxy ne l'envoyent pas
  header("Location: $redirection");
?>
Sinon, je précise, en/link.php et fr/lien.php ne contiennent que le lien vers l'autre langue. J'ai mis les liens à part par simple soucis d'organisation ...
Allez, je vous le met aussi, comme ça, tout sera dit !
Voilà pour fr/lien.php, pour l'autre je remplace juste la valeur francais par english, et l'image du drapeau ^^
Bloc de code:
<a href="switch.php?langue=francais&redirection=http://<?php echo $_SERVER['SERVER_NAME'].str_replace('&', '&amp;', $_SERVER['REQUEST_URI']);?>"><img src="langues/fr.png" alt="Version fran&ccedil;aise"><img></a>
 
Je viens de découvrir une chose intéressante ...
Si je ne suis pas fou ^^
J'ai quitté et relancé mon navigateur ... Et bien le texte s'affichait de nouveau en français ^^
Avec le cookie valant "francais" ...
Par contre je ne comprend plus, à ce moment-là, quand je demande le changement, le texte et l'image se change bien, mais le cookie garde la valeur "francais" oO
Ou bien je suis fatigué maintenant, ou bien je l'étais avant, car je viens de le remarquer :/
Donc averell doit avoir raison, le switch.php a un peu du mal apparament ... ?
 
moué c'est tordu
si tu mets tes drapeaux dans un form

tu recupères la valeur avec un $_POST['l']; en tete de chaque page

ex : $langue = $_POST['l'];

et ca te donne des links du genre :
http://tonsite.com/index_<?php echo $langue; ?>.php

après tu bidouilles une fonction comme tu veux ...
 
Le truc, c'est qu'ils ne sont pas dans un form oO
Ils sont dans un lien tout con <a href... </a> !
 
SveDec a dit:
J'ai quitté et relancé mon navigateur ... Et bien le texte s'affichait de nouveau en français ^^
Avec le cookie valant "francais" ...

Euh... réflexion probablement idiote... mais... est-ce que le navigateur recharge bien la page (quand tu ne le relances pas, bien sûr :cool: ) ?
:zen:
 
Bonjour :)

averell a dit:
Euh... réflexion probablement idiote... mais... est-ce que le navigateur recharge bien la page (quand tu ne le relances pas, bien sûr :cool: ) ?
:zen:
Je crois, mais même avec un rechargement manuel ça ne change rien ;)

Bon, j'ai cerné le problème : à l'aide d'une batterie de test, j'ai découvert que quelque soit la valeur du cookie (english ou francais donc), c'était la version anglaise qui s'affichait. Ainsi, il n'y a que quand le cookie n'existe pas que le français s'affiche.
Je réfléchis sur le problème et vous tiens au courrant ;)
 
Oh les mecs, j'ai les boules :D
Je viens de trouver l'erreur ^^
Et comme d'habitude, c'est une erreur de gros débutant !!
Vous auriez pu le voir quand même :p
Bon, j'vous le dis :
Bloc de code:
        if ($langue = "english") // Si $langue vaut english
        elseif ($langue = "francais") // Sinon, si $langue vaut francais
Ça vous semble pas louche ? :D
Pour pensez pas qu'en écrivant "==" au lieu de "=" pour ça, ça irait mieux ? ;)
Bon, en tout cas, mon problème est résolu, mais je passe tellement pour un newbie que je vais aller me jeter dans la Seine après m'être pendu et tiré une balle :zen:
 
Captain_X a dit:
pourquoi tu mets pas dans une session la valeur de la langue
Parce qu'une session n'est valable que pour un temps limité et qu'elle se détruit à la fermeture du navigateur ? ^^
Nan mais maintenant que ça fonctionne c'est bon merci ;)
 
  • J’aime
Réactions: averell
SveDec a dit:
Bon, en tout cas, mon problème est résolu, mais je passe tellement pour un newbie que je vais aller me jeter dans la Seine après m'être pendu et tiré une balle :zen:

Attends-moi, je t'accompagne... :D
 
  • J’aime
Réactions: SveDec