[RESOLU] [Site Multilingues] Charger un header différend

Eléphanteau du PHP | 38 Messages

01 févr. 2013, 22:19

Bonjour,

Je suis novice, et je cherche un script pour afficher un header par version de langues utilisé par le visiteur.

Je suis en train de faire un site en 3 langues, pour le moment j'ai utilisé une méthode avec switch() qui permet de changer mes textes sans avoir à éditer chaque pages en trois exemplaires. Voici mes codes :

set_lang.php

<?php
$lang_traduites = array(0 => 'fr', 1 => 'en', 2=> 'ger' );
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,1,2));

$lang =  !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang =  !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang =  !empty($lang)? $lang : $lang_navig ;
$lang =  in_array($lang,$lang_traduites)? $lang : $langue_defaut;

if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) ||
    (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);


switch($lang)
           {
        case 'fr':
        include('lang/lang_fr.php');
        break;
        case 'ger':
        include('lang/lang_ger.php');
        break;
        case 'en':
        include('lang/lang_en.php');
        break; 
                   }
       
?>
Un de mes fichier contenant le texte (lang_fr.php en l'occurrence) :
 

<?php
 

//------------------------------------ index.php ------------------------------------//
	 
 	 define('TXT_ACCUEIL_BLOCK1', 'mon texte 1');
 	 define('TXT_ACCUEIL_BLOCK2', 'mon texte 2');
 	 define('TXT_ACCUEIL_BLOCK3', 'mon texte 3');
 	 
//------------------------------------ expos.php ------------------------------------//
	 
 	 define('TXT_PYRZ_BLOCK1', 'mon texte 4');
 	 define('TXT_CONSEIL_BLOCK2', 'mon texte 5');
 	 

etc......

 ?> 
Tout sa marche bien pour l'instant.

Pour le moment mes 3 header (un pour chaque langues) dans lesquels se trouvent bannière, logo et navigation sont en simple include dans chaque pages du site dans sa langue respactive.
Je mi suis mal pris, car au départ je prévoyais de faire le site un trois exemplaire, un par langue.

Ce code est dans chaque page du coup :
<?php
 include 'languedemandée_overall_header.txt';
 ?>
J'en viens à ma demande :

Avez vous un moyen pour je puisse faire mes include par le biais du script (set_lang.php) ?

Merci à vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 févr. 2013, 22:50

salut,


Si tu as la langue active dans une variables (ce qui semble être le cas ;) )), tu peux l'utiliser pour créer dynamiquement le nom du fichier.

Par exemple
<?php
$banniere = $lang.'_overall_header.txt';
if(file_exists($banniere)) {
 include $banniere;
}
else {
  include 'bannière par défaut';
}
 ?>
A toi de prévoir correctement le chemin vers le fichier ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

01 févr. 2013, 23:36

Merci moogli c'est super sa marche.

Juste une dernière précision s'il te plaît :

J'ai voulut dans un premier temps mettre mes fichier contenant les codes de mes différents header dans un dossier "header" et j'ai voulus prévoir correctement le chemin vers le fichier comme tu m'a fait remarquer.
Alors j'ai tenté ceci mais je pense bien que cette syntaxe n'est pas bonne :
 <?php
  $header = header/$lang.'_overall_header.txt';
  if(file_exists($header)) {
   include $header;
  }
  else {
	include 'fr_overall_header.txt';
  }
?>
Aurais tu la bonne syntaxe ? :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 févr. 2013, 23:48

ben c'est une simple concaténation avec des chaines de caractères.

tu ne peux pas mettre du texte comme ça au milieu de nul part.

donc quelque chose comme ça : $var = 'truc '. $autreVar . ' la suite';


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

01 févr. 2013, 23:51

Impeccable merci bien :)