[Site multi langues] Pb de compatibilité PHP5

Petit nouveau ! | 8 Messages

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 :
<!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']; ?>
- 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é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 :
Notice: Use of undefined constant LANGUAGE - assumed 'LANGUAGE' in E:\www\monsite\index.php on line 128
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 çà.

D'autant que çà marchait auparavant sous EasyPhp et php4...

Alors merci d'avance à toute âme charitable qui voudra bien m'aider à résoudre çà :wink:
Modifié en dernier par Lucifer le 09 sept. 2008, 19:14, modifié 1 fois.
Amicalement,

Eric

******************************************
http://www.infernoweb.net
******************************************

Mammouth du PHP | 2937 Messages

09 sept. 2008, 18:59

D'une part, évite la notation raccourcie pour les balises PHP, utilise toujours les balises longues :
<?php echo $site_lang['Lang'] ?>
D'autre part, vérifie tes inclusions et surtout si les constantes dont correctement définies.

Petit nouveau ! | 8 Messages

09 sept. 2008, 19:08

Merci Victor pour ta réponse.

En effet, lorsque je mets des balises longues, çà fonctionne un peu mieux. Sauf pour la ligne suivante (faut dire que je pousse peut-être un peu loin la notion de multi langue) :

Code : Tout sélectionner

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php=$site_lang['Lang']; ?>" lang="<?php=$site_lang['Lang']; ?>">
Mais là, je pense que çà ne touche plus au php :?

De même avec des javascripts qui intègrent des balises php :

Code : Tout sélectionner

<script type="text/javascript"> //Affichage de la date de maj FR function aff_date_maj_fr() { jour="<?php=$site_lang['Maj_Day']; ?>"; mois="<?php=$site_lang['Maj_Month']; ?>"; annee="<?php=$site_lang['Maj_Year']; ?>"; document.write(jour+"/"+mois+"/"+annee);}
La aussi, l'utilisation des balises longues semblent poser des problèmes.

Après ton message, j'ai revu la config php de WampServer et, effectivement, l'option "Short open tag" n'était pas activée. Je n'ai pas vraiment l'intention de changer cela mais il faut que j'arrive à résoudre toutes les implications...

[EDIT]
Laissez tomber : Je suis une truffe ! J'ai lu le post de Victor trop vite sans me rendre compte que la solution y était en toutes lettres :

Code : Tout sélectionner

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $site_lang['Lang']; ?>" lang="<?php echo $site_lang['Lang']; ?>">
Désolé, je passe le sujet en résolu :oops:

[/EDIT]
Amicalement,

Eric

******************************************
http://www.infernoweb.net
******************************************