Aller au contenu

[Resolu][PHP] Choix de la langue avec un drapeau


Ocaeph

Messages recommandés

Bonjour à tous

Je souhaites faire de mon site un site multi-lingues avec une gestion de cookie, avec le code suivant j'arrive a gerer les 2 langues:

<?php

if(isset($HTTP_COOKIE_VARS['lang'])) {

$lang = $HTTP_COOKIE_VARS['lang'];

} else {

$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);

}

if ($lang=='fr') {

include('fr/fr-lang.php');

} elseif ($lang=='en') {

include('en/en-lang.php');

}

$expire = 365*24*3600;

setcookie("lang", $lang, time() + $expire);

?>

Maintenant je veux rajouter 2 petits drapeaux un FR/ un EN que l'utilisateur peut cliquer pour que sa change de langue et que le cookie sauvegarde son choix.

Pour l'instant mon code ressemble à ca:

<?php

if( isset($HTTP_GET_VARS['lang'])) {

$lang = $HTTP_GET_VARS['lang'];

} else {

if(isset($HTTP_COOKIE_VARS['lang'])) {

$lang = $HTTP_COOKIE_VARS['lang'];

} else {

$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);

}

}

if ($lang=='fr') {

include('fr/fr-lang.php');

} elseif ($lang=='en') {

include('en/en-lang.php');

}

$expire = 365*24*3600;

setcookie("lang", $lang, time() + $expire);

?>

</head>

<body>

<div>

<a href ="index.php?$lang=='fr'"><img src="Image/fra.gif"></a>

<a href ="index.php?$lang=='en'"><img src="Image/eng.gif"></a>

</div>

Malheuresement ca ne marche pas, mais ca fait pas d'erreur c'est déja ca :yes:

Si quelqu'un peut m'aider à me sortir de ce labyrinthe ce serait cool :mdr:

Lien vers le commentaire
Partager sur d’autres sites

A cause de tes urls je dirais :)

a href ="index.php?$lang=='fr'"><img src="Image/fra.gif"></a>

<a href ="index.php?$lang=='en'"><img src="Image/eng.gif"></a>

c'est pas "$lang==" mais lang= ce qui n'est pas pareil.

$HTTP_GET_VARS['lang']

Si tu es en php4.3, utilise $_GET. Et si tu ne l'as pas, utilise ça $_GET = &$HTTP_GET_VARS; ça t'éviteras des problèmes dans le futur (register_long_arrays à off)

Dernière chose : le accept language c'est différent de ce que tu fais. Normalement ce sont les préférences de l'utilisateur. Si j'ai :

de-DE,fr-FR;q=0.5,en-EN;q=0.6

Tu dois logiquement me donner le français parce que tu ne supporte pas l'allemand, mais parmi les candidats potentiels l'anglais m'intéresse plus.

Ca fonctionne ainsi (si je ne me trompe pas (une chance sur 3), à savoir donc :D

Lien vers le commentaire
Partager sur d’autres sites

Je me doutais que c'était un truc trop simple :francais:

Ca y est ca marche maintenant j'ai des erreures :D

en fait il cherche mes variables dans la page où est le code (ici index.php) et non pas en-lang.php que je lui indique avec include

Ce que je veux faire c'est:

  1. regarder s'il y a deja un cookie
  2. regarder la langue du navigateur
  3. regarder si l'utilisateur a selectionner une langue

le code en cours:

<?php

if(isset($HTTP_COOKIE_VARS['lang']))

{

$lang = $HTTP_COOKIE_VARS['lang'];

} else

{

$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);

}

if( isset($GET['lang']))

{

$lang = $GET['lang'];

}

if ($lang=='fr') {

include('fr/fr-lang.php');

} elseif ($lang=='en') {

include('en/en-lang.php');

}

$expire = 365*24*3600;

setcookie("lang", $lang, time() + $expire);

?>

En tout cas merci de ton aide :-D

Edit:

J'ai trouver, meme erreur il faut:

if ($lang='fr') {

au lieu de

if ($lang=='fr') {
:smack:
Lien vers le commentaire
Partager sur d’autres sites

Honnêtement, abandonne les HTTP_x_VARS :) remplaces les par $_x

($_COOKIE, $_GET, $_POST)

Au moins ton script tournera ailleurs que sur les vieilles versions (et au pire, ces nouveautés peuvent facilement se faire dans les anciennes conf, modulo la "super globalité")

Lien vers le commentaire
Partager sur d’autres sites

Ca y est j'ai enlever les HTTP_x_VARS.

Par contre petit problème, il ne voit que le premier include, donc ca affiche que dans une langue, je comprends pas pourquoi :ouioui:

<?php

$expire = 365*24*3600;

if ( isset($_GET['lang']))

{

$lang = $_GET['lang'];

setcookie("lang", $lang, time() + $expire);

} elseif(isset($_COOKIE['lang']))

{

$lang = $_COOKIE['lang'];

} else {

$lang = substr($_SERVER['_ACCEPT'],0,2);

}

if ($lang='fr') {

include('fr/fr-lang.php');

} elseif ($lang='en')

{

include('en/en-lang.php');

}

?>

Lien vers le commentaire
Partager sur d’autres sites

if ($lang='fr') {
include('fr/fr-lang.php');
} elseif ($lang='en')
{
include('en/en-lang.php');
}

Deux choses :

1. $lang == 'fr' (oui l'opérateur d'égalité, c'est pas '=' qui est l'opérateur d'affectation). Pareil pour en dessous ($lang == 'en')

2. include c'est instruction : inutile de parenthèser !

include 'en/en-lang.php';

Lien vers le commentaire
Partager sur d’autres sites

Ok j'ai fait les modifs mais il va chercher mes variables dans la page que je suis en train de modifier et non celle où j'ai mis mes variable avec include ...

Notice: Use of undefined constant slogan - assumed 'slogan' in c:\program files\easyphp1-7\www\tempv2\index.php on line 220

slogan

alors qu'il devrait allez les chercher dans c:\program files\easyphp1-7\www\tempv2\fr\fr-lang.php

Edit: Ca fait la meme erreur sur toutes les pages alors qu'elles marchaient avant, ce serais pas easyphp qui deconne?

Lien vers le commentaire
Partager sur d’autres sites

Ca fait le meme probleme pour toutes mes variables en faites je stocke la variable dans un autre fichier où il y a tous le texte et je l'appel dans ma page par <?php echo slogan;?>

Mais je pense avoir trouver le problème lorsque je suis sur mes autres pages la valeur du cookie créés est: en ou fr (suivant le cas)

sauf que pour la page où j'insère les drapeaux la valeur du cookie est: %27fr%27 lorsque je cliques sur une des images ;)

Ca doit etre dans cette ligne là qu'il manque quelquechose ou qu'il y a un truc en trop:

<a href ="index.php?$lang='fr'"><img src="Image/fra.gif"> </a>

EDIT:

Le ' était en trop ca donne donc:

<a href ="index.php?$lang=fr"><img src="Image/fra.gif">

Ca y est ca marche à la perfection

Un grand merci pour ton aide :chinois::merci:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...