Aller au contenu

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

Featured Replies

Posté(e)

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:

Modifié par Ocaeph

Posté(e)

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

Modifié par Baldurien

Posté(e)
  • Auteur

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:

Modifié par Ocaeph

Posté(e)

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é")

Posté(e)
  • Auteur

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');

}

?>

Posté(e)

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';

Posté(e)
  • Auteur

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?

Posté(e)

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

Tu y fais quoi? Et tu déclare comment slogan?

Posté(e)
  • Auteur

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:

Modifié par Ocaeph

Archivé

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