Page 1 sur 1

site multilangue avec cookies

Posté : 13 août 2009, 00:46
par martial zero
je vous explique tout simplement mon prob je redige un scirpt
qui me donne la possibilite à travers une cookie de suavgarder la valeur d une langue choisi dans un site supposer un site multi langue
le passage entre les langue se fait de facon parfaite reste le fait que je n arrive pas à sauvgarder la langue lorsque je redemarre la page

pour exlique un peux j ai une
page index
qui te donner la possibilité de choisir la langue
un fichier decide-langue.php qui teste la valeur passer
un fichier choix.php qui donne la possibilité de choisir la langue
2 fichier en-lang.php et fr-lang.php ou je sauvgarde des constante en fonction de la langue choisi

1-ma page index.php
<?php
$html="<html><body>" ;
include("decide-lang.php");
include("choix.php");
$html.=TXT_ACCUEIL_INDEX."<br>";
$html.="Meteo du jour :".TXT_METEO."<br";
$html.="conseil du jour :".TXT_CONSEIL_INDEX;
$html.="</body></html>";
echo $html;
?>
2-ma page choix.php
<?php
$html.='<table><tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=fr" title="langue francaise">langue francaise</a></td></tr>
<tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=en" title="langugue anglaise">langue anglaie </a></td></tr>
</table>';
?>
3ma page decide-lang.php
<?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 ((isset($_GET['lang'])) && ($_GET['lang']=='fr')) { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ((isset($_GET['lang'])) && ($_GET['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", $_GET['lang'], time() + $expire);

?>
et les deux page en-lang.php et fr-lang.php
<?php
define('TXT_ACCUEIL_INDEX', 'Bienvenue sur PHP D&egrave;butant' );
define('TXT_METEO', 'Il fait un soleil radieux !');
define('TXT_CONSEIL_INDEX', 'Faites du PHP !');
?>
<?php
define("TXT_ACCUEIL_INDEX", "Welcome on PHP D&egrave;butant !");
define("TXT_METEO", "The sun is shining !");
define("TXT_CONSEIL_INDEX", "Lets do some PHP !");
?>

Re: site multilangue avec cookies

Posté : 13 août 2009, 04:25
par AB
Pour placer le site dans la langue du navigateur si elle est traduite, sinon afficher la langue par défaut (ici l'anglais), ou afficher la langue choisie par le visiteur avec $_GET['lang'] et mémoriser ce choix dans un cookie pour un an :
$lang_traduites = array(0 => 'en', 1 => 'fr', 2 => 'ru');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang =  !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang =  !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang =  !empty($lang)? $lang : $lang_navig ;
$lang =  in_array($lang,$lang_traduites)? $lang : $langue_defaut;

if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) || (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);

Re: site multilangue avec cookies

Posté : 13 août 2009, 22:08
par martial-zero1981
voila pour le coup de pouce
j ai modifié ma page mais je n arrive toujours pas a récupérer ma cookie

<?php

$lang_traduites = array(0 => 'fr', 1 => 'en');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang = !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang = !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang = !empty($lang)? $lang : $lang_navig ;
$lang = in_array($lang,$lang_traduites)? $lang : $langue_defaut;

//script d'origine
if ((isset($_GET['lang'])) && ($_GET['lang']=='fr')) { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ((isset($_GET['lang'])) && ($_GET['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);

?>

Re: site multilangue avec cookies

Posté : 14 août 2009, 15:31
par AB
Je t'ai donné le code complet.
Il te suffisait de le recopier sans enlever la dernière partie.

Ensuite il faut travailler sur $lang et non pas sur $_GET['lang'] pour faire tes includes.

Donc
$lang_traduites = array(0 => 'fr', 1 => 'en');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang =  !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang =  !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang =  !empty($lang)? $lang : $lang_navig ;
$lang =  in_array($lang,$lang_traduites)? $lang : $langue_defaut;

if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) || (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);


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

Re: site multilangue avec cookies

Posté : 15 août 2009, 15:35
par martial_zero
merci ton aide m été très très concluant
je remis le script comme tu m as dit en modifiant juste un petit paticulier
je te poste mon script finale .

$lang_traduites = array(0 => 'fr', 1 => 'en');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang = !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang = !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang = !empty($lang)? $lang : $lang_navig ;
$lang = in_array($lang,$lang_traduites)? $lang : $langue_defaut;
include($lang.'-lang.php');// le changement que j' ai fait

//script d'origine

//fin du script d'origine

//définition de la durée du cookie (1 an)
if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) || (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);

?>
une autre fois merci infiniment
ca fonctionne