[Site multi langues] Pb de compatibilité PHP5
Posté : 09 sept. 2008, 18:02
Bonjour à tous et toutes.
J'utilise un script php pour permettre aux visiteurs de mon site de choisir la langue qui leur convient parmi 5 disponibles. Ce script fonctionnait parfaitement sous EasyPhp avec php4 mais depuis, je suis passé sous WampServer 2.0c (PHP5) et çà ne fonctionne plus. Je n'arrive pas à trouver la solution sans avoir à modifier les configs du php.ini.
Voici les données du problème :
- Sur ma page d'index (entre autres) de mon site, au tout début, je fais des include des scripts php que je charge :
- Dans mon dossier include, j'ai mes deux fichiers php de script. Le premier base_inc.php défini les chemin des fichiers de langue dont voici le script :
D'autant que çà marchait auparavant sous EasyPhp et php4...
Alors merci d'avance à toute âme charitable qui voudra bien m'aider à résoudre çà
J'utilise un script php pour permettre aux visiteurs de mon site de choisir la langue qui leur convient parmi 5 disponibles. Ce script fonctionnait parfaitement sous EasyPhp avec php4 mais depuis, je suis passé sous WampServer 2.0c (PHP5) et çà ne fonctionne plus. Je n'arrive pas à trouver la solution sans avoir à modifier les configs du php.ini.
Voici les données du problème :
- Sur ma page d'index (entre autres) de mon site, au tout début, je fais des include des scripts php que je charge :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
include("includes/base_Inc.php");
include("includes/decide_lang.php");
?>
- Toujours dans l'index, les textes à "traduire" sont généré par des appels :
Code : Tout sélectionner
<?=$site_lang['Lang']; ?>// Définir ici l'adresse de base de votre site le serveur
define('HTML_ROOT_PATH',"./");
// Définir ici les langues disponibles sur votre site
$Lang_List=array("FR","EN","DE","ES","IT");
//****************************************************************************
// Détermination de la langue de l'utilisateur en fonction de sa configuration
//****************************************************************************
if (isset($_GET['Language'])&&(@in_array($_GET['Language'],$Lang_List)))
{
define('LANGUAGE', $_GET['Language']);
}
elseif (isset($_SESSION["UserLanguage"]))
{
define('LANGUAGE', $_SESSION["UserLanguage"]);
}
else
{
$Accept_Lang=explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
reset($Accept_Lang);
while ( list($Index,$Language)=@each($Accept_Lang))
{
if (eregi( "^(.+);q=([0-9.]*)$", $Language , $Part))
{
$Accept_Lang[$Index]=$Part[2] . ';'.strtoupper($Part[1]);
}
else
{
$Accept_Lang[$Index]='1.0;'.strtoupper($Accept_Lang[$Index]);
}
}
arsort($Accept_Lang); //tri par ordre de préférence
reset($Accept_Lang);
while (list(,$ALang)=@each($Accept_Lang) )
{
reset($Lang_List);
while ( list(, $Language) = @each($Lang_List) )
{
if (strpos($ALang,$Language)!=0)
{
define('LANGUAGE', $Language);
break 2;
}
}
}
unset($Accept_Lang, $ALang,$Language);
}
if (!defined('LANGUAGE'))
{
//----------------------------------------------------------------------
// Détermination de la langue de l'utilisateur impossible
// affichage d'une page pour sélectionner la langue
//--------------------------------------------------------------------------
$StartUrl=$_SERVER["REQUEST_URI"].(preg_match("/\?/",$_SERVER["REQUEST_URI"])?"&":"?");
?>
<?
exit;
}
$_SESSION["UserLanguage"]=LANGUAGE;
define('HTML_LANG_PATH',HTML_ROOT_PATH . 'languages/Lang_'. LANGUAGE .'/');
//****************************************************************************
include(HTML_LANG_PATH."lang_main.php");
?>
- Et un script decide_lang.php qui permet de switcher manuellement entre les différentes langues avec gestion de cookies :
<?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($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
}
if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier ..fr/lang_main.php
include('languages/Lang_FR/lang_main.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier ..en/lang_main.php
include('languages/Lang_EN/lang_main.php');
} elseif ($lang=='de') { // si la langue est 'de' (allemand) on inclut le fichier ..de/lang_main.php
include('languages/Lang_DE/lang_main.php');
} elseif ($lang=='es') { // si la langue est 'es' (espagnol) on inclut le fichier ..es/lang_main.php
include('languages/Lang_ES/lang_main.php');
} elseif ($lang=='it') { // si la langue est 'it' (italien) on inclut le fichier ..it/lang_main.php
include('languages/Lang_IT/lang_main.php');
} else { // la langue par défaut est 'en' (anglais) on inclut le fichier ..en/lang_main.php
include('languages/Lang_EN/lang_main.php');
}
//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);
?>
- Et, enfin, les fichiers de langue sont sous languages/Lang_XX/lang_main.php et comportent les traductions de la manière suivante :
$site_lang['Lang']='FR';
- Le problème sous WampServer c'est que j'ai des "Notices" et, bien sure, pas d'affichage de mes textes :
Selon moi, l'include dans le fichier d'index ne se fait pas. C'est surement idiot mais je n'arrive pas à comprendre pourquoi et, surtout, comment résoudre çà.Notice: Use of undefined constant LANGUAGE - assumed 'LANGUAGE' in E:\www\monsite\index.php on line 128
D'autant que çà marchait auparavant sous EasyPhp et php4...
Alors merci d'avance à toute âme charitable qui voudra bien m'aider à résoudre çà