Multi language en PHP

Fermé
GUILMAU Messages postés 1 Date d'inscription vendredi 2 mars 2018 Statut Membre Dernière intervention 2 mars 2018 - 2 mars 2018 à 02:34
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 - 2 mars 2018 à 20:46
Bonjour,

Je ne suis pas expert et souhaite de l'aide sur la mise en place en php du changement de langue pour mon site web.
Après avoir parcouru le net a la recherche de code, j'ai trouvé ce que je souhaite mais n'ai pas la connaissance face à un problème que je vais exposé et vous demande de bien vouloir me corriger.
Nous avons 5 pages une index.php, forum.php, en_lang.php, fr_lang.php et lang.php
Mon problème est le suivant : 2 fichier lang différent sont posté
1 est capable de détecté la langue du navigateur afin d'affiché la page dans la langue du navigateur concerné mais impossible de choisir la langue si l'on veut changer par la suite
L'autre est en mesure de swiché correctement la langue et les liens tout en restant dans la langue défini par la suite mais affiche un message de langue non défini lors de changement de page.
Mon problème est le suivant ?
Je souhaite pouvoir définir la langue sur chaque entré de page et de pouvoir la modifier tout en restant sur la même langue pendant la navigation sans ce message d'erreur de code
Fonctionnel par cookies sur le deuxième fichier lang mais avec donc ce message d'erreur que je n'arrive pas a comprendre.
je ne suis pas informaticien et apprend par mes propres moyen merci de votre aide.
----------------------------------------------------------------------------------------
INDEX
<?php require("lang.php");?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
</head>

<body>
<a href="?langue=fr" >FR</a> | <a href="?langue=en" >EN</a> 
	<a href="forum.php">forum</a>
<h1><?php echo TXT_TITRE_INDEX; ?></h1>
<p><?php echo TXT_SLOGAN_INDEX; ?></p>
</body>
</html>
----------------------------------------------------------------------------------------
FORUM
<?php require("lang.php");?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
</head>

<body>
<a href="?langue=fr" >FR</a> | <a href="?langue=en" >EN</a> 
	<a href="index.php">index</a>
<h1><?php echo TXT_TITRE_FORUM; ?></h1>
<p><?php echo TXT_SLOGAN_FORUM; ?></p>
</body>
</html>
----------------------------------------------------------------------------------------
FR_LANG
<?php
 
    //Début index.php (français)
 
    define('TXT_TITRE_INDEX', "Bienvenue "); 
    define('TXT_SLOGAN_INDEX', "LE CONCEPT");
 
    //Fin index.php (français)
 
 
    //Début forum.php (français)
 
    define('TXT_TITRE_FORUM', 'Forums');
    define('TXT_SLOGAN_FORUM', 'Une question ? Posez-la sur le forum :)');
 
    //Fin forum.php (français)
 
?>
----------------------------------------------------------------------------------------
EN_LANG
<?php
 
    //Début index.php (français)
 
    define('TXT_TITRE_INDEX', "Welcome"); 
    define('TXT_SLOGAN_INDEX', "THE CONCEPT");
 
    //Fin index.php (français)
 
 
    //Début forum.php (français)
 
    define('TXT_TITRE_FORUM', 'Forums');
    define('TXT_SLOGAN_FORUM', 'Get a question ? Post it on the forum :)');
 
    //Fin forum.php (français)
 
?>
----------------------------------------------------------------------------------------
LANG (pour détection de langue navigateur)
<?php
 
//On vérifie si le cookie existe déjà
if(isset($_COOKIE['langue'])) {
 
        //Si oui, on créer une variable $lang avec pour valeur celle du cookie.
    $langue = $_COOKIE['langue'];
 
}
 
else {
    // si le cookie n'existe pas on tente de reconnaitre la langue par défaut du navigateur utilisé
    $langue = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
}

//On définit la durée du cookie (avant son expiration)
$expire = 365*24*3600;
//Puis on créé le cookie
setcookie("langue", $langue, time() + $expire);

switch($langue) {
    //Si lang=fr on inclut le fichier de langue française
    case 'fr':
        include('fr-lang.php');
    break;
    //Si lang=en on inclut le fichier de langue anglaise
    case 'en':
        include('en-lang.php');
    break;
}
?>
----------------------------------------------------------------------------------------
LANG (permettant l'enregistrement des cookies pour poursuivre dans la même langue)

<?php 

// si langue déclarée par cookie et qu'il ny a pas de requete 
// pour le choix de la langue alors on choisit le cookie 
if (isset ($_COOKIE['CHOIXlang']) && $_GET['langue'] != 'fr' && $_GET['langue'] != 'en') { $langue = $_COOKIE['CHOIXlang']; } 
// le choix de la langue est déclaré par url 
else if ($_GET['langue'] == 'en' || $_GET['langue'] == 'fr') { $langue = $_GET['langue']; set_cookie($langue); } 
// si aucune langue n'est déclarée on tente de reconnaitre 
// la langue par défaut du navigateur 
else { $langue = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); set_cookie($langue); } 
function set_cookie($langue) { 
	//définition de la durée du cookie (1 an) 
	$expire = 365*24*3600; //enregistrement du cookie au nom de CHOIXlang + détection si erreur 
	if (setcookie("CHOIXlang", $langue, time() + $expire) != TRUE) { 
		// 
		echo 'Le cookie na pas marché<br />'; 
	} else { setcookie("CHOIXlang", $langue, time() + $expire); 
			//	
			echo 'Le cookie a marché<br />';	} } ?>
<?php 
// affichage de la bonne langue 
// si le cookie vaut 'fr' ou si la requete vaut 'fr', 
// on inclut le fichier fr-lang.php 
if ($_GET['langue'] == "fr" || $langue == "fr") { include('fr-lang.php'); } 
// affichage de la bonne langue 
// si le cookie vaut 'en' ou si la requete vaut 'en', 
// on inclut le fichier fr-lang.php 
elseif ($_GET['langue'] == "en" || $langue == "en") { include('en-lang.php'); } ?>
<?php 
$GETlangue = isset($_GET['langue']) ? $_GET['langue']:''; 

if (isset ($_COOKIE['CHOIXlang']) && $GETlangue != 'fr' && $GETlangue != 'en')	
{ 
$langue = $_COOKIE['CHOIXlang']; 
} 
else if ($GETlangue == 'en' || $GETlangue == 'fr') 
{ 
$langue = $GETlangue; 
set_cookie($langue); 
} 
else 
{ 
$langue = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); 
$langue = strtolower(substr(chop($langue[0]),0,2)); 
set_cookie($langue); 
} 
?> 
A voir également:

1 réponse

yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
Modifié le 2 mars 2018 à 20:48
bonsoir, si je comprends bien, tu voudrais utiliser la deuxième version de ton fichier lang.php, et tu souhaites donc éliminer un message de langue non défini lors de changement de page.
si j'ai bien compris, peux-tu nous en dire plus à propos du message (texte précis, quand est-il affiché, sous quelle forme), et aussi par ce que tu entends par "changement de page".
cela aiderait aussi si tu donnais un nom à chacun de tes fichiers lang, plutôt que de parler de l'un et de l'autre. par exemple lang1 et lang2.
0