[RESOLU] Bug dans le code PHP de changement de langues

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Bug dans le code PHP de changement de langues

Re: Bug dans le code PHP de changement de langues

par anouchka2586 » 03 déc. 2017, 20:02

Merci à tous, ça marche, il fallait remplacer :
([fren]+)

Par :

(fr|en|de)

Re: Bug dans le code PHP de changement de langues

par anouchka2586 » 03 déc. 2017, 18:44

Y a une avancée, la page s'affiche déjà car c'était un problème de version de PHP et dans un autre fichier, la fonction getTitle() n'avait conservé que 2 paramètres au lieu de 3.

Le probleme que j'ai encore ce que la traduction de la page de la 3ème langue ne s'affiche pas et me renvoie vers une page d'erreur 404. Est ce un probleme au niveau du htaccess ? le voici :
ErrorDocument 404 http://www.monsite.com/404
#-----------------------------------------------------------------------------------------
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
#-----------------------------------------------------------------------------------------
RewriteRule ^([fren]+)$ index.php?l=$1 [L]
RewriteRule ^([fren]+)/hebergement$ hebergement/index.php?l=$1 [L]
RewriteRule ^([fren]+)/restauration$ restauration/index.php?l=$1 [L]
RewriteRule ^([fren]+)/bar-brasserie$ bar-brasserie/index.php?l=$1 [L]
RewriteRule ^([fren]+)/seminaire$ seminaire/index.php?l=$1 [L]
RewriteRule ^([fren]+)/environs$ environs/index.php?l=$1 [L]
RewriteRule ^([fren]+)/loisirs$ loisirs/index.php?l=$1 [L]
RewriteRule ^([fren]+)/contact$ contact/index.php?l=$1 [L]
RewriteRule ^([fren]+)/acces$ acces/index.php?l=$1 [L]
RewriteRule ^([fren]+)/legal$ legal/index.php?l=$1 [L]
RewriteRule ^([fren]+)/apropos$ apropos/index.php?l=$1 [L]
RewriteRule ^([fren]+)/404$ 404/index.php?l=$1 [L]
#-----------------------------------------------------------------------------------------
RedirectPermanent /ang.htm http://www.monsite.com/en
RedirectPermanent /all.htm http://www.monsite.com/en
RedirectPermanent /environsetliens.htm http://www.monsite.com/environs
RedirectPermanent /environsetliensang.htm http://www.monsite.com/en/environs
RedirectPermanent /environsetliensall.htm http://www.monsite.com/en/environs
RedirectPermanent /acces.htm http://www.monsite.com/acces
RedirectPermanent /accesall.htm http://www.monsite.com/en/acces
RedirectPermanent /accesang.htm http://www.monsite.com/en/acces
RedirectPermanent /restaurant.htm http://www.monsite.com/restauration
RedirectPermanent /restaurantang.htm http://www.monsite.com/en/restauration
RedirectPermanent /restaurantall.htm http://www.monsite.com/en/restauration
RedirectPermanent /seminaires.htm http://www.monsite.com/seminaire
RedirectPermanent /seminairesang.htm http://www.monsite.com/en/seminaire
RedirectPermanent /seminairesall.htm http://www.monsite.com/en/seminaire
RedirectPermanent /reservation.htm http://www.monsite.com/contact
RedirectPermanent /reservationang.htm http://www.monsite.com/en/contact
RedirectPermanent /reservationall.htm http://www.monsite.com/en/contact
RedirectPermanent /hebergement.htm http://www.monsite.com/hebergement
RedirectPermanent /hebergementall.htm http://www.monsite.com/en/hebergement
RedirectPermanent /hebergementang.htm http://www.monsite.com/en/hebergement
RedirectPermanent /bar.htm http://www.monsite.com/bar-brasserie
RedirectPermanent /barall.htm http://www.monsite.com/en/bar-brasserie
RedirectPermanent /barang.htm http://www.monsite.com/en/bar-brasserie
RedirectPermanent /tarifs.htm http://www.monsite.com/contact
RedirectPermanent /tarifsang.htm http://www.monsite.com/en/contact
RedirectPermanent /tarifsang.htm http://www.monsite.com/en/contact
Et voici le code PHP qui contient les icônes des langues sur lesquelles les utilisateurs cliquent pour obtenir la traduction :
<span id="intl"><a href="<?php print PATH ?>/fr<?php print ((getCurrent($_SERVER['REQUEST_URI'])!='/' && getCurrent($_SERVER['REQUEST_URI'])!='/fr')?getCurrent($_SERVER['REQUEST_URI']):'') ?>" title="Fran&ccedil;ais"><img src="<?php print PATH.'/img/icon/fr.png' ?>" alt="Fran&ccedil;ais" /></a> 
	<a href="<?php print PATH ?>/en<?php print ((getCurrent($_SERVER['REQUEST_URI'])!='/' && getCurrent($_SERVER['REQUEST_URI'])!='/en')?getCurrent($_SERVER['REQUEST_URI']):'') ?>" title="English"><img src="<?php print PATH.'/img/icon/gb.png' ?>" alt="English" /></a> 
	<a href="<?php print PATH ?>/de<?php print ((getCurrent($_SERVER['REQUEST_URI'])!='/' && getCurrent($_SERVER['REQUEST_URI'])!='/de')?getCurrent($_SERVER['REQUEST_URI']):'') ?>" title="Deutsch"><img src="<?php print PATH.'/img/icon/de.png' ?>" alt="Deutsch" /></a></span>

Re: Bug dans le code PHP de changement de langues

par @rthur » 02 déc. 2017, 20:18

le site ne s'affiche plus !
Si tu obtiens une page complètement blanche alors c'est qu'il y a un message d'erreur mais que tu n'as pas activé leur affichage ce qui est très gênant pour développer.
On a un tuto ici :
faq-tutoriels/page-blanche-script-php-c ... 73178.html

Re: Bug dans le code PHP de changement de langues

par or 1 » 02 déc. 2017, 18:36

getTitle prenait 2 paramètres, maintenant 3. si l'appel de la fonction se fait toujours en passant 2 paramètres alors cela peut être l'explication.

Re: Bug dans le code PHP de changement de langues

par anouchka2586 » 02 déc. 2017, 16:55

Il n'y a pas de message d'erreur mais c juste que la page (les parties à traduire du site) disparaissent. Quand je rajoute la 3ème variable de la 3ème langue, le site ne s'affiche plus !

Re: Bug dans le code PHP de changement de langues

par @rthur » 02 déc. 2017, 15:36

Ce tuto a 11 ans !
Je te déconseille trèèèèèèèèèès fortement de l'utiliser.

Le code que tu indiques me semble correct, quel est le message d'erreur rencontré ?

Re: Bug dans le code PHP de changement de langues

par anouchka2586 » 02 déc. 2017, 14:49

Je constate que mon code ne fonctionne pas dès que je modifie cette fonction et je ne comprend pas pourquoi:
GET title
------------------------------------------------------------------------- */
function getTitle($fr, $en) {

	switch(LG) {
		case 'fr' : return $fr;
		break;
		case 'en' : return $en;
		break;
	}
}
Par :
GET title
------------------------------------------------------------------------- */
function getTitle($fr, $en, $de) {

	switch(LG) {
		case 'fr' : return $fr;
		break;
		case 'en' : return $en;
		break;
                case 'de' : return $de;
		break;
	}
}
On m'a également conseillé ce tuto (Site multilingue avec détection de la langue de l'explorateur) et je vois que je n'ai pas d'erreur dans les premières lignes du code :
http://codes-sources.commentcamarche.ne ... xplorateur

Re: Bug dans le code PHP de changement de langues

par @rthur » 02 déc. 2017, 12:44

C'est une expression régulière pour analyser la variable $Language et récupérer les langues de cette variable.

Pour tester/construire ou même comprendre le fonctionnement d'une expression régulière, je te recommande le site regex101, en survolant la regex tu auras bloc par bloc ce qui est en train d'essayer d'être extrait :
https://regex101.com/r/kAuMIF/1


Enfin, il faut noter que la fonction eregi() n'existe plus dans les versions récentes de PHP, il faudra que tu la remplace par preg_match() :
http://php.net/manual/fr/function.eregi.php

Re: Bug dans le code PHP de changement de langues

par anouchka2586 » 02 déc. 2017, 12:38

Je ne comprend pas entièrement le code, particulièrement cette partie :
if (eregi("^(.+);q=([0-9.]*)$", $Language, $Part)) {
			$Accept_Lang[$Index]=$Part[2].';'.strtolower($Part[1]);
		}
		else {
			$Accept_Lang[$Index]='1.0;'.strtolower($Accept_Lang[$Index]);
		}
Quelqu'un peut-il m'aider ?

Re: Bug dans le code PHP de changement de langues

par @rthur » 02 déc. 2017, 01:38

Bonjour,

On ne va pas le faire à ta place, en revanche on peut t'aider si tu as des problèmes donc commence déjà à comprendre comment fonctionne ton code initial, essaye de le modifier et dis nous quand tu auras des messages erreurs qui te bloqueront.

Bug dans le code PHP de changement de langues

par anouchka2586 » 02 déc. 2017, 00:14

Bonjour
J'ai repris un site bilingue (Français et Anglais) et je doit rajouter l'allemand comme 3ème langue. Aidez moi à modifier le code PHP de gestion de langues. Merci

Voici le code PHP de départ avec les 2 langues :
<?php
/*
	Gestion de langue Front End
-------------------------------------------------------------------------- */
$Lang_List=array("fr","en");  
// Règles
if (isset($_GET['l'])&&(@in_array($_GET['l'],$Lang_List))) {
	define('LG', $_GET['l']);
}
elseif (isset($_SESSION["userLg"])) {
	define('LG', $_SESSION["userLg"]);
}
elseif (!defined('LG')) {
	define('LG', "fr");
}
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].';'.strtolower($Part[1]);
		}
		else {
			$Accept_Lang[$Index]='1.0;'.strtolower($Accept_Lang[$Index]);
		}
	}
	//tri par ordre de préférence
	arsort($Accept_Lang);
	reset($Accept_Lang);
	while (list(,$ALang)=@each($Accept_Lang)) {

		reset($Lang_List);
		while (list(,$Language)=@each($Lang_List)) {

			if (strpos($ALang,$Language)!=0) {
				define('LG', $Language);
				break 2;	
			}
		}
	}
unset($Accept_Lang, $ALang, $Language);
}
$_SESSION["userLg"]=LG;

/*
	GET control
------------------------------------------------------------------------- */
function getControl($getter) {

	return htmlentities(stripslashes($getter), ENT_QUOTES, 'UTF-8');
}

/*
	GET link
------------------------------------------------------------------------- */
function getLink($url) {

	return PATH.'/'.getControl(LG).'/'.$url;
}

/*
	GET title
------------------------------------------------------------------------- */
function getTitle($fr, $en) {
	
	switch(LG) {
		case 'fr' : return $fr;
		break;
		case 'en' : return $en;
		break;
	}
}

/*------------------------------------------------------------------------*/
function getCurrent($url) {

	return substr(strrchr($url, '/'), 0);
}
Voici le code PHP avec la 3ème langue et là ça bug, ça plante le site :
<?php
/*
	Gestion de langue Front End
-------------------------------------------------------------------------- */
$Lang_List=array("fr","en", "de");
// Règles
if (isset($_GET['l'])&&(@in_array($_GET['l'],$Lang_List))) {
	define('LG', $_GET['l']);
}
elseif (isset($_SESSION["userLg"])) {
	define('LG', $_SESSION["userLg"]);
}
elseif (!defined('LG')) {
	define('LG', "fr");
}
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].';'.strtolower($Part[1]);
		}
		else {
			$Accept_Lang[$Index]='1.0;'.strtolower($Accept_Lang[$Index]);
		}
	}
	//tri par ordre de préférence
	arsort($Accept_Lang);
	reset($Accept_Lang);
	while (list(,$ALang)=@each($Accept_Lang)) {

		reset($Lang_List);
		while (list(,$Language)=@each($Lang_List)) {

			if (strpos($ALang,$Language)!=0) {
				define('LG', $Language);
				break 2;
			}
		}
	}
unset($Accept_Lang, $ALang, $Language);
}
$_SESSION["userLg"]=LG;

/*
	GET control
------------------------------------------------------------------------- */
function getControl($getter) {

	return htmlentities(stripslashes($getter), ENT_QUOTES, 'UTF-8');
}

/*
	GET link
------------------------------------------------------------------------- */
function getLink($url) {

	return PATH.'/'.getControl(LG).'/'.$url;
}

/*
	GET title
------------------------------------------------------------------------- */
function getTitle($fr, $en, $de) {

	switch(LG) {
		case 'fr' : return $fr;
		break;
		case 'en' : return $en;
		break;
		case 'de' : return $de;
		break;
	}
}

/*------------------------------------------------------------------------*/
function getCurrent($url) {

	return substr(strrchr($url, '/'), 0);
}