Bonjour,
Je débute en Php , j'ai trouvé un moyen pour faire un site multi
lingue, cependant il ne fonctionne qu'avec firefox et non IE ?? ça
pose problème !!!
que puis je faire ?
au début de chaque page j'ai :
<?php
$page="lapageencours.php";
if(isset($_COOKIE['langue']))
{
if($_COOKIE['langue'] == 'fr')
{
require("langues/fr/$page");
}
elseif($_COOKIE['langue'] == 'en')
{
// Pour les anglais
require("langues/en/$page");
}
elseif($_COOKIE['langue'] == 'de')
{
// Pour les allemands
require("langues/de/$page");
}
elseif($_COOKIE['langue'] == 'it')
{
// Pour les italiens
require("langues/it/$page");
}
elseif($_COOKIE['langue'] == 'tr')
{
// Pour les turcs
require("langues/tr/$page");
}
else
{
// Au cas où le cookie de langue soit dans une autre langue que
celles proposées
require("langues/en/$page");
}
}
else
{
$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langue = $langue[0].$langue[1];
if($langue == 'fr')
{
// Pour les navigateurs français
require("langues/fr/$page");
}
elseif($langue == 'en')
{
// Pour les anglais
require("langues/en/$page");
}
elseif($langue == 'de')
{
// Pour les allemands
require("langues/de/$page");
}
elseif($langue == 'it')
{
// Pour les italiens
require("langues/it/$page");
}
elseif($langue == 'tr')
{
// Pour les turcs
require("langues/tr/$page");
}
else
{
// Au cas où la langue soit dans une autre langue que celles
proposées
require("langues/en/$page");
}
}
if($_GET['langue'] == 'fr')
{
$date_expiration = time() + 2*24*3600; // Un an !
setcookie('langue', 'fr', $date_expiration); // On enregistre le
cookie
header("location: $page"); // On lui remontre la meme page
et sur toutes les pages j'ai les drapeaux des pays pour avec un lien ?
langue=fr pour le français par exemple!
je ne comprends pas pourquoi ça marche sur firefox et pas sur IE, que
faut il faire pour y remédier, ça fait plusieurs jours que je tourne
en rond !!
Merci pour vos futures très bonnes réponses!!
Bruno
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Je débute en Php , j'ai trouvé un moyen pour faire un site multi lingue, cependant il ne fonctionne qu'avec firefox et non IE ?? ça pose problème !!! que puis je faire ? au début de chaque page j'ai :
<?php [ code long comme un jour sans pain, plein de redondances ] ?>
Voici déjà une version condensée de ton code (sauf erreur ça fait exactement la même chose, mais en quatre fois plus court).
switch ($_COOKIE['langue']) { case 'fr': case 'en': case 'de': case 'it': case 'tr': break; default: $langue = 'en'; } require("langues/$langue/$page");
switch ($_GET['langue']) { case 'fr': case 'en': case 'de': case 'it': case 'tr': $date_expiration = time() + 2*24*3600; setcookie('langue', $_GET['langue'], $date_expiration); header("location: $page"); break; } ?>
Et là on peut remarquer plein d'erreurs. Par exemple : - tu ne testes pas que $_SERVER['HTTP_ACCEPT_LANGUAGE'] existe ; - tu ne testes pas que $_GET['langue'] existe ; - s'il existe et vaut l'une des cinq langues prévues, la redirection par header rend inutile tout le traitement fait précédemment (à moins que le require() fasse un exit(), auquel cas c'est la fin du code qui est inutile) ; - s'il n'existe pas, ou s'il vaut par exemple 'es', tu ne fais rien (à moins que tu aies coupé du code dans ton exemple) ; - si tu n'as pas de cookie mais un paramètre en get, le setcookie est fait deux fois, pas forcément avec la même valeur ; - la redirection est faite vers une adresse relative et non pas absolue. Ça marchera avec la plupart des navigateurs, mais comme c'est interdit par la norme rien ne garantit que ça marchera avec tous ; - de toute façon ce genre de redirection est plutôt stupide (voir la FAQ).
J'en ai peut-être oublié... mais déjà tu as quelques pistes pour avancer.
Je débute en Php , j'ai trouvé un moyen pour faire un site multi
lingue, cependant il ne fonctionne qu'avec firefox et non IE ?? ça
pose problème !!!
que puis je faire ?
au début de chaque page j'ai :
<?php
[ code long comme un jour sans pain, plein de redondances ]
?>
Voici déjà une version condensée de ton code (sauf erreur ça fait
exactement la même chose, mais en quatre fois plus court).
switch ($_COOKIE['langue']) {
case 'fr':
case 'en':
case 'de':
case 'it':
case 'tr':
break;
default:
$langue = 'en';
}
require("langues/$langue/$page");
switch ($_GET['langue']) {
case 'fr':
case 'en':
case 'de':
case 'it':
case 'tr':
$date_expiration = time() + 2*24*3600;
setcookie('langue', $_GET['langue'], $date_expiration);
header("location: $page");
break;
}
?>
Et là on peut remarquer plein d'erreurs. Par exemple :
- tu ne testes pas que $_SERVER['HTTP_ACCEPT_LANGUAGE'] existe ;
- tu ne testes pas que $_GET['langue'] existe ;
- s'il existe et vaut l'une des cinq langues prévues, la redirection
par header rend inutile tout le traitement fait précédemment (à
moins que le require() fasse un exit(), auquel cas c'est la fin du
code qui est inutile) ;
- s'il n'existe pas, ou s'il vaut par exemple 'es', tu ne fais rien
(à moins que tu aies coupé du code dans ton exemple) ;
- si tu n'as pas de cookie mais un paramètre en get, le setcookie
est fait deux fois, pas forcément avec la même valeur ;
- la redirection est faite vers une adresse relative et non pas
absolue. Ça marchera avec la plupart des navigateurs, mais comme
c'est interdit par la norme rien ne garantit que ça marchera avec
tous ;
- de toute façon ce genre de redirection est plutôt stupide (voir
la FAQ).
J'en ai peut-être oublié... mais déjà tu as quelques pistes pour
avancer.
Je débute en Php , j'ai trouvé un moyen pour faire un site multi lingue, cependant il ne fonctionne qu'avec firefox et non IE ?? ça pose problème !!! que puis je faire ? au début de chaque page j'ai :
<?php [ code long comme un jour sans pain, plein de redondances ] ?>
Voici déjà une version condensée de ton code (sauf erreur ça fait exactement la même chose, mais en quatre fois plus court).
switch ($_COOKIE['langue']) { case 'fr': case 'en': case 'de': case 'it': case 'tr': break; default: $langue = 'en'; } require("langues/$langue/$page");
switch ($_GET['langue']) { case 'fr': case 'en': case 'de': case 'it': case 'tr': $date_expiration = time() + 2*24*3600; setcookie('langue', $_GET['langue'], $date_expiration); header("location: $page"); break; } ?>
Et là on peut remarquer plein d'erreurs. Par exemple : - tu ne testes pas que $_SERVER['HTTP_ACCEPT_LANGUAGE'] existe ; - tu ne testes pas que $_GET['langue'] existe ; - s'il existe et vaut l'une des cinq langues prévues, la redirection par header rend inutile tout le traitement fait précédemment (à moins que le require() fasse un exit(), auquel cas c'est la fin du code qui est inutile) ; - s'il n'existe pas, ou s'il vaut par exemple 'es', tu ne fais rien (à moins que tu aies coupé du code dans ton exemple) ; - si tu n'as pas de cookie mais un paramètre en get, le setcookie est fait deux fois, pas forcément avec la même valeur ; - la redirection est faite vers une adresse relative et non pas absolue. Ça marchera avec la plupart des navigateurs, mais comme c'est interdit par la norme rien ne garantit que ça marchera avec tous ; - de toute façon ce genre de redirection est plutôt stupide (voir la FAQ).
J'en ai peut-être oublié... mais déjà tu as quelques pistes pour avancer.
thierry
re
relativement à mon précédent message il y a une erreur. le script va boucler sur le header('location:...') il faut qu'il soit conditionné par un test, par exemple sur $setCookie
thierry
re
relativement à mon précédent message il y a une erreur.
le script va boucler sur le header('location:...')
il faut qu'il soit conditionné par un test, par exemple
sur $setCookie
relativement à mon précédent message il y a une erreur. le script va boucler sur le header('location:...') il faut qu'il soit conditionné par un test, par exemple sur $setCookie
thierry
Olivier Miakinen
relativement à mon précédent message il y a une erreur.
Il y en a plus d'une. ;-)
le script va boucler sur le header('location:...')
Rectification : il va boucler pour les navigateurs qui acceptent un lien relatif, il ne va rien faire pour ceux (s'il en existe) qui sont 100 % conformes à la norme. Rectification bis : ce n'est pas le script qui va boucler, mais le navigateur qui va le relancer indéfiniment, en surchargeant donc aussi bien l'ordinateur de tes visiteurs que le réseau.
Raison de plus pour ne pas utiliser de header('location:...') du tout. Dans ton cas, un require() est largement suffisant, beaucoup plus performant, et beaucoup moins sujet à ce genre de bug, sans compter que tu ne dépends pas du comportement des navigateurs.
il faut qu'il soit conditionné par un test, par exemple sur $setCookie
S'il te plaît, ne commence pas à compliquer ton code inutilement, il l'est déjà assez comme ça. Au contraire il faut le simplifier.
thierry
Tiens ? Dans ton premier article tu t'appelais Bruno. Au passage, si tu n'es pas thierry.ANTISPAM.schmit, tu devrais avoir le nom de domaine qui se termine en « .INVALID ».
Exemples :
Mais pas :
Ni :
relativement à mon précédent message il y a une erreur.
Il y en a plus d'une. ;-)
le script va boucler sur le header('location:...')
Rectification : il va boucler pour les navigateurs qui acceptent un lien
relatif, il ne va rien faire pour ceux (s'il en existe) qui sont 100 %
conformes à la norme. Rectification bis : ce n'est pas le script qui
va boucler, mais le navigateur qui va le relancer indéfiniment, en
surchargeant donc aussi bien l'ordinateur de tes visiteurs que le
réseau.
Raison de plus pour ne pas utiliser de header('location:...') du tout.
Dans ton cas, un require() est largement suffisant, beaucoup plus
performant, et beaucoup moins sujet à ce genre de bug, sans compter
que tu ne dépends pas du comportement des navigateurs.
il faut qu'il soit conditionné par un test, par exemple
sur $setCookie
S'il te plaît, ne commence pas à compliquer ton code inutilement, il
l'est déjà assez comme ça. Au contraire il faut le simplifier.
thierry
Tiens ? Dans ton premier article tu t'appelais Bruno. Au passage, si tu
n'es pas thierry.ANTISPAM.schmit, tu devrais avoir le nom de domaine qui
se termine en « .INVALID ».
relativement à mon précédent message il y a une erreur.
Il y en a plus d'une. ;-)
le script va boucler sur le header('location:...')
Rectification : il va boucler pour les navigateurs qui acceptent un lien relatif, il ne va rien faire pour ceux (s'il en existe) qui sont 100 % conformes à la norme. Rectification bis : ce n'est pas le script qui va boucler, mais le navigateur qui va le relancer indéfiniment, en surchargeant donc aussi bien l'ordinateur de tes visiteurs que le réseau.
Raison de plus pour ne pas utiliser de header('location:...') du tout. Dans ton cas, un require() est largement suffisant, beaucoup plus performant, et beaucoup moins sujet à ce genre de bug, sans compter que tu ne dépends pas du comportement des navigateurs.
il faut qu'il soit conditionné par un test, par exemple sur $setCookie
S'il te plaît, ne commence pas à compliquer ton code inutilement, il l'est déjà assez comme ça. Au contraire il faut le simplifier.
thierry
Tiens ? Dans ton premier article tu t'appelais Bruno. Au passage, si tu n'es pas thierry.ANTISPAM.schmit, tu devrais avoir le nom de domaine qui se termine en « .INVALID ».
Exemples :
Mais pas :
Ni :
Thierry
en fait relativement à un message sur lequel j'ai fait répondre à l'auteur et non pas répondre au groupe, d'où mon message n'est pas paru. Et comme ton condensé de code est plus court que celui que je proposais je vais me dispenser de le poster sur le forum :)
"Olivier Miakinen" <om+ a écrit dans le message de news:45f14243$
relativement à mon précédent message il y a une erreur.
Il y en a plus d'une. ;-)
en fait relativement à un message sur lequel j'ai fait répondre à l'auteur
et non pas répondre au groupe, d'où mon message n'est pas paru.
Et comme ton condensé de code est plus court que celui que je proposais
je vais me dispenser de le poster sur le forum :)
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de
news:45f14243$1@neottia.net...
relativement à mon précédent message il y a une erreur.
en fait relativement à un message sur lequel j'ai fait répondre à l'auteur et non pas répondre au groupe, d'où mon message n'est pas paru. Et comme ton condensé de code est plus court que celui que je proposais je vais me dispenser de le poster sur le forum :)
"Olivier Miakinen" <om+ a écrit dans le message de news:45f14243$
relativement à mon précédent message il y a une erreur.
Il y en a plus d'une. ;-)
Olivier Miakinen
Voici déjà une version condensée de ton code (sauf erreur ça fait exactement la même chose, mais en quatre fois plus court).
Merci à vous thierry et Olivier!! Bien que je ne soit pas doué, j'ai beaucoup appris avec vous!! alors j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue'])) {$langue= $_COOKIE['langue']; } else { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langue = $langue[0].$langue[1];} else {$langue = 'en'; }}
if (isset($_GET['langue'])) { $langue = $_GET['langue']; }
switch ($langue) {case 'fr': case 'en': case 'de': case 'it': case 'tr': break; default: $langue = 'en'; }
et ça a l'air de bien marcher !! J'espère ne rien avoir oublié, je n'ai pas pu faire tous les tests, mais bon!, qu'est ce que vous en pensez ? Merci encore!! Bruno
On 9 mar, 18:51, Olivier Miakinen <om+n...@miakinen.net> wrote:
Voici déjà une version condensée de ton code (sauf erreur ça fait
exactement la même chose, mais en quatre fois plus court).
Merci à vous thierry et Olivier!!
Bien que je ne soit pas doué, j'ai beaucoup appris avec vous!!
alors j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a
l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue']))
{$langue= $_COOKIE['langue']; }
else {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langue = $langue[0].$langue[1];}
else {$langue = 'en'; }}
if (isset($_GET['langue']))
{ $langue = $_GET['langue']; }
switch ($langue)
{case 'fr':
case 'en':
case 'de':
case 'it':
case 'tr':
break;
default:
$langue = 'en'; }
et ça a l'air de bien marcher !!
J'espère ne rien avoir oublié, je n'ai pas pu faire tous les tests,
mais bon!, qu'est ce que vous en pensez ?
Merci encore!!
Bruno
Merci à vous thierry et Olivier!! Bien que je ne soit pas doué, j'ai beaucoup appris avec vous!! alors j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue'])) {$langue= $_COOKIE['langue']; } else { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langue = $langue[0].$langue[1];} else {$langue = 'en'; }}
if (isset($_GET['langue'])) { $langue = $_GET['langue']; }
switch ($langue) {case 'fr': case 'en': case 'de': case 'it': case 'tr': break; default: $langue = 'en'; }
et ça a l'air de bien marcher !! J'espère ne rien avoir oublié, je n'ai pas pu faire tous les tests, mais bon!, qu'est ce que vous en pensez ? Merci encore!! Bruno
Olivier Miakinen
On 9 mar, 18:51, Olivier Miakinen <om+ wrote:
Hahaha... c'est Google qui trouve que « om+n... » est plus court que « om+news » ?
Si c'est pour charcuter ainsi l'adresse de courriel, il vaudrait mieux ne pas la mettre du tout et se contenter du nom.
[...] j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue'])) {$langue= $_COOKIE['langue']; } else { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langue = $langue[0].$langue[1];} else {$langue = 'en'; }}
if (isset($_GET['langue'])) { $langue = $_GET['langue']; }
Ici, le $_GET prend le pas sur les deux autres. Du coup, plutôt que de calculer $langue à partir de $_COOKIE ou de HTTP_ACCEPT_LANGUAGE avant de l'écraser par le $_GET, tu peux faire ceci (je réindente d'une façon que je trouve personnellement *beaucoup* plus lisible) :
Et du coup tu peux même encore simplifier avec $_REQUEST qui englobe en une seule fois $_GET et $_COOKIE (et même $_POST pour le jour où tu voudras faire des formulaires en POST) :
Ça me semble bien (sauf pour l'indentation, et surtout la place des accolades qui me fait penser à certains programmes en lisp). ;-)
On 9 mar, 18:51, Olivier Miakinen <om+n...@miakinen.net> wrote:
Hahaha... c'est Google qui trouve que « om+n... » est plus court que
« om+news » ?
Si c'est pour charcuter ainsi l'adresse de courriel, il vaudrait mieux
ne pas la mettre du tout et se contenter du nom.
[...] j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a
l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue']))
{$langue= $_COOKIE['langue']; }
else {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langue = $langue[0].$langue[1];}
else {$langue = 'en'; }}
if (isset($_GET['langue']))
{ $langue = $_GET['langue']; }
Ici, le $_GET prend le pas sur les deux autres. Du coup, plutôt que de
calculer $langue à partir de $_COOKIE ou de HTTP_ACCEPT_LANGUAGE avant
de l'écraser par le $_GET, tu peux faire ceci (je réindente d'une façon
que je trouve personnellement *beaucoup* plus lisible) :
Et du coup tu peux même encore simplifier avec $_REQUEST qui englobe en
une seule fois $_GET et $_COOKIE (et même $_POST pour le jour où tu
voudras faire des formulaires en POST) :
Hahaha... c'est Google qui trouve que « om+n... » est plus court que « om+news » ?
Si c'est pour charcuter ainsi l'adresse de courriel, il vaudrait mieux ne pas la mettre du tout et se contenter du nom.
[...] j'ai essayer de suivre vos idées, et j'ai fait un essai et ça a l'air de pas mal marcher!! bon j'espère qu'il n'y a pas de failles??
voilà ce que ça donne:
$page=pageencours.php;
if (isset($_COOKIE['langue'])) {$langue= $_COOKIE['langue']; } else { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$langue = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $langue = $langue[0].$langue[1];} else {$langue = 'en'; }}
if (isset($_GET['langue'])) { $langue = $_GET['langue']; }
Ici, le $_GET prend le pas sur les deux autres. Du coup, plutôt que de calculer $langue à partir de $_COOKIE ou de HTTP_ACCEPT_LANGUAGE avant de l'écraser par le $_GET, tu peux faire ceci (je réindente d'une façon que je trouve personnellement *beaucoup* plus lisible) :
Et du coup tu peux même encore simplifier avec $_REQUEST qui englobe en une seule fois $_GET et $_COOKIE (et même $_POST pour le jour où tu voudras faire des formulaires en POST) :
"thierry" a écrit dans le message de news: 45f2747b$0$6774$
salut,
perso je supprimerais le switch par un reg exp....
Ou juste un test : if (file_exists("langues/$langue/$page)) include("langues/$langue/$page"); else include("langues/en/$page");
Olivier Miakinen
perso je supprimerais le switch par un reg exp....
Ou juste un test : if (file_exists("langues/$langue/$page)) include("langues/$langue/$page"); else include("langues/en/$page");
Pas mal, mais à manier avec précaution quand même. En effet, si j'ai bien compris, $page représente la page en cours. Alors si $langue vaut "..", le script va boucler puisque "langues/../$page" est équivalent à "$page".
perso je supprimerais le switch par un reg exp....
Ou juste un test :
if (file_exists("langues/$langue/$page))
include("langues/$langue/$page");
else include("langues/en/$page");
Pas mal, mais à manier avec précaution quand même. En effet, si j'ai
bien compris, $page représente la page en cours. Alors si $langue vaut
"..", le script va boucler puisque "langues/../$page" est équivalent à
"$page".
perso je supprimerais le switch par un reg exp....
Ou juste un test : if (file_exists("langues/$langue/$page)) include("langues/$langue/$page"); else include("langues/en/$page");
Pas mal, mais à manier avec précaution quand même. En effet, si j'ai bien compris, $page représente la page en cours. Alors si $langue vaut "..", le script va boucler puisque "langues/../$page" est équivalent à "$page".