Inclusion d'un fichier externe sous condition !

jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012 - 5 nov. 2011 à 12:54
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 5 nov. 2011 à 16:06
Bonjour à tous !

Comme vous le devinerez je débute en PHP.

Je suis entrain de réaliser un site en 3 langues différentes (en, fr, nl)... il y a donc un script de détection de la langue qui redirige vers
index_en.php
ou index_fr.php
ou index_nl.php.

Tout le texte de mon site se trouve dans un fichier externe en 3 langues :
m_lang_en_inc.php,
m_lang_fr_inc.php,
m_lang_nl_inc.php.

(fichier inclus directement dans l'une des 3 version "index").
Par exemple : m_lang_en_inc.php est inclus directement dans index_en.php

Jusque là tout fonctionne.

Maintenant mon problème:

Certain liens renvoie à une page commune au 3 versions de langues. Par exemple : fichier.php
(c'est pour éviter de créer 3 fichiers : fichier_en.php, fichier_fr.php, fichier_nl.php et donc plus de modifications).

J'ai donc mon script php qui détecte la langue (en, fr ou nl) et sous condition inclura l'un des 3 fichiers contenant le texte du site.
Voici le script :

<?php
if (!isset($langue_user) && !isset($_SESSION["ch_langue"])){
$langue_user=substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
switch($langue_user){
case"fr":
$_SESSION["ch_langue"] = "fr";
include("m_lang_fr_inc.php");
break;

case "en":
$_SESSION["ch_langue"] = "en";
include("m_lang_en_inc.php");
break;

case "nl":
$_SESSION["ch_langue"] = "nl";
include("m_lang_nl_inc.php");
break;

default:
$_SESSION["ch_langue"] = "en";
include(".m_lang_en_inc.php");
break;
}
}
?>/php

Le problème c'est qu'il m'inclus automatiquement les 3 fichiers et utilise le premier par défaut (soit "m_lang_fr_inc.php") au lieu d'inclure seulement le fichiers correspondant à la langue détectée.

J'ai parcourus le NET, essayé maintes solutions en vain...
Alors si quelqu'un peut m'aider ce serait vraiment sympa car je ne sais plus comment faire.

Merci à tous.

jrmy7

10 réponses

cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 13:42
if (!isset($langue_user) && !isset($_SESSION["ch_langue"])){
ça je pense que ça sert à rien

$langue_user=substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
switch($langue_user){
case"fr":
$_SESSION["ch_langue"] = "fr";
include("m_lang_fr_inc.php");
break;

case "en":
$_SESSION["ch_langue"] = "en";
include("m_lang_en_inc.php");
break;

case "nl":
$_SESSION["ch_langue"] = "nl";
include("m_lang_nl_inc.php");
break;

default:
$_SESSION["ch_langue"] = "en";
include(".m_lang_en_inc.php"); ??????????
break;
}
//}
Bonne programmation !
0
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 13:43
bonjour

donc

<?php
session_start();
//http://www.apprendre-php.com/portions-de-script/script-23-detection-automatique-de-la-langue-du-navigateur.html
function autoSelectLanguage($aLanguages, $sDefault = 'fr') {
  if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    $aBrowserLanguages = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    foreach($aBrowserLanguages as $sBrowserLanguage) {
      $sLang = strtolower(substr($sBrowserLanguage,0,2));
      if(in_array($sLang, $aLanguages)) {
        return $sLang;
      }
    }
  }
  return $sDefault;
}


$aLanguages=array('en','nl','fr');
echo $lang=autoSelectLanguage($aLanguages,'fr');
echo '<hr>';

switch($lang){ 
case"fr": 
echo $_SESSION["ch_langue"] = $lang; 
include("m_lang_fr_inc.php"); 
break; 

case "en": 
echo $_SESSION["ch_langue"] = $lang; 
include("m_lang_en_inc.php"); 
break; 

case "nl": 
echo $_SESSION["ch_langue"] = $lang; 
include("m_lang_nl_inc.php"); 
break; 

default: 
echo $_SESSION["ch_langue"] = "en"; 
include("m_lang_en_inc.php");
break; 
} 
?>



Bonne programmation !
0
jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012
5 nov. 2011 à 15:05
Merci pour cette réponse rapide mais ça ne fonctionne pas les 3 fichiers langue (m_lang_en_inc, m_lang_fr_inc, m_lang_nl_inc) sont toujours tout les 3 inclus et j'ai enplus un problème d'affichage qui apparaît...
0
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 15:13
je pense que le script fonctionne tu dois avoir un problème d'organisation du code
j'ai testé ça en local chez mois cela fonctionne très bien
faudrait que je mette ça en ligne et teste avec un navigateur en chaque langue

as tu détruit la session précédente

fait un fichier
<?php
session_start();
session_unset();
session_destroy();
?>
et appel le vidersession.php puis tu le lances
1 x

Bonne programmation !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 15:20
test iciTapez le texte de l'url ici.

Bonne programmation !
0
jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012
5 nov. 2011 à 15:27
En fait je viens de comprendre mon problème et j'ai tout faux depuis le début.
Je m'explique.

1 - Le visiteur arrive sur mon site.
2 - Le programme détecte la langue et inclus le fichiers dans la langue approprier (par exemple "fr").
3 - Le visiteur navigue de page en page (j'ai fait c'est page pour les 3 versions de langues) et décide de changer de langue, il choisi "en" et clique donc sur le petit drapeau "anglais" dans le menu.
4 - Il se retrouve sur la version anglaise.

Jusque là pas de souci.

5 - Il veut aller sur l'une des pages en commun au 3 langues (galeries photos avec un peu de texte : voilà pourquoi je ne veut pas faire une version des ces page pour chaque langues, il y en a vraiment beaucoup !)
6 - Et là le programme doit inclure le fichier langue "en".

Ici est mon erreur : j'ai remis le programme de détection de langue, c'est donc la version "fr" qui est redétecté car je navigue en FR.
Il faut un programme qui détecte sur quel drapeau le visiteur à cliqué (dans l'exemple "en") et inclus la page texte en anglais soit "m_lang_en_inc.php".

Mais là je sèche sachant que le menu est aussi dans un fichier externe... je suis vraiment perdus.
Si quelqu'un peut m'aider..

Merci
0
jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012
5 nov. 2011 à 15:29
petite faute... "(j'ai fait ces pages pour les 3 versions de langues)" et non pas "(j'ai fait c'est page pour les 3 versions de langues)".
0
jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012
5 nov. 2011 à 15:34
La solution est peut-être de garder le fichier inclus dans la page précédente.

Explications:

Si le visiteur à choisi de cliquer sur la version anglaise le fichier inclus sera ""m_lang_en_inc.php" et quand il visitera une page commune au 3 langues cette page inclura automatiquement "m_lang_en_inc.php" (puisque c'était celui inclus précédement).

Mais je ne sais pas si c'est possible...
0
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 15:35
tester avec ie 8 ok ++
Bonne programmation !
0
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 20
5 nov. 2011 à 16:06
essaye

[?langue=fr fr]
[?langue=en en]
[?langue=nl nl]

<?php

$langs=array('fr','en','nl');
if(!empty($_GET['langue']) && in_array($_GET['langue'],$langs,true)){
include("m_lang_".$_GET['langue']."_inc.php");

}
?>

Bonne programmation !
0