IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Multi language site web


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Multi language site web
    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
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?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
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?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)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?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)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?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); 
    } 
    ?>

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    J'ai copié-collé vos fichiers : au niveau des fichiers "lang.php", on est un peu noyé sous les commentaires, les tests et la présentation peu aérée.
    Je pense qu'il faut repartir de zéro et faire un code indépendant des langues et de leur nombre en les mettant dans un tableau associatif.
    Voilà une base pour un nouveau fichier "lang.php" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    //paramètres
    $ar_langs= //langues possibles (à chaque langue on peut faire correspondre un array de propriétés si besoin)
    	[
    	'en'=>null,
    	'fr'=>null
    	];
    $st_langDefa='fr'; //langue défaut
    $nb_dureCook=365*24*3600; //durée cookie (pas un peu long ?)
     
     
    //sélection langue
    if(isset($_GET['langue'])===true && array_key_exists($st_=$_GET['langue'],$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else if(isset($_COOKIE['langue'])===true && array_key_exists($st_=$_COOKIE['langue'],$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else if(array_key_exists($st_=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2),$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else
    	{
    	$langue=$st_langDefa;
    	}
    setcookie("langue",$langue,time()+$nb_dureCook);
    require $langue.'_lang.php';
    ?>

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut RE: Multi language site web
    Bonjour Loralina,

    Merci pour votre pront réponse.
    Je n'ai pas encore testé toute les possibilités sur le code proposé mais reviendrais sur ce commentaire pour approfondir.
    Ayant trouvé une alternative fonctionnel laissé ci-dessous pour les internautes, je laisse quelques commentaires arrivé pour analyse.
    merci encore Loralina
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php 
    function set_cookie($langue) 
    { 
    $expire = 365*24*3600; 
     
    if (setcookie("CHOIXlang", $langue, time() + $expire) != TRUE) 
    { 
    } 
    else 
    { 
    setcookie("CHOIXlang", $langue, time() + $expire);	
    } 
    } 
    $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); 
    } 
     
    if ($GETlangue == "fr" || $langue == "fr")  { include('fr-lang.php'); } 
     
    elseif ($GETlangue == "en" || $langue == "en")  { include('en-lang.php'); }
     
    ?>
    AJOUT DE CODE POUR SOLUTION SANS INPUT

    FORMULAIRE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <fieldset>
    <label for="changelang-langs">
    <?php 
    if ($GETlangue == "fr" || $langue == "fr") { echo "French"; } 
    elseif ($GETlangue == "en" || $langue == "en") { echo "English"; } ?>
    </label>
    <form method="post"  action="<?php echo ROOTPATH; ?>/language/changelang.php" name="changelang" id="changelang">
    <select name="changelang" onchange="document.changelang.submit(this.options[this.selectedIndex].value)">
    <option value="" selected="selected"><?php echo TXT_CHANGELANGUAGE_UP;?></option>
    <option value='<?php echo ROOTPATH; ?>/index.php?langue=fr' >French</option>
    <option value='<?php echo ROOTPATH; ?>/index.php?langue=en' >English</option>
              </fieldset>
    CONTENU ACTION CHANGELANG
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    /* on vérifie que l'information "changelog" existe ET qu'elle n'est pas vide : */
    if ( isset($_POST['changelang']) && !empty($_POST['changelang']) ) 
     
    /* si c'est bien le cas (existe ET non-vide à la fois), on redirige le visiteur vers sa valeur choisie de l'information "menu_direction" : */
         {header("Location: ".$_POST['changelang']."");}
     
    /* sinon, on le redirige vers une autre page utile : */
    else 
         {header("Location: https://votre.site.web");}
     
    ?>
    Toute ces recherches rassemblent en un même lieu toutes les interrogations sur le sujet et présente donc comment appliqué le multilanguage sur un site web en php7.
    Je reviendrais définir les possibilités du code proposé un peu plus tard.
    Les commentaires positif pour améliorer sont bienvenue.
    Merci encore Loralina pour votre participation :-)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Suite développement
    Bonjour Loralina,

    Je reviens sur le sujet après avoir tester votre code.
    Parfais pour ma part, seul inconvénient que je puisse avoir est l'enregistrement du cookies pour seulement la page ou l'on as effectuée le changement de langue.
    J'ai retourner tout les différente possibilité pour arriver au code suivant, plus de log erreur sur le server mais un très gros inconvénient....
    Google ne détecte pas la langue et ne suis donc pas référencé par rapport au texte du site.
    Pouvez vous éclairer la suite de ce post afin de conclure ce chapitre.
    Je vous remercie ainsi que les internautes voulant bien répondre a cette question.
    Voici le code en question (un peu a répétition dans la conception, avec votre aide nous pourrons améliorer ..! )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
    //paramètres
    function set_cookie($langue) 
    {
    	$ar_langs=
    	[
    	'en'=>null,
    	'fr'=>null
    	];
    $st_langDefa='fr'; //langue défaut
    $nb_dureCook=365*24*3600; 
     
     
    //sélection langue
    if(isset($_GET['langue'])===true && array_key_exists($st_=$_GET['langue'],$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else if(isset($_COOKIE['CHOIXlang'])===true && array_key_exists($st_=$_COOKIE['CHOIXlang'],$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else if(array_key_exists($st_=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2),$ar_langs)===true)
    	{
    	$langue=$st_;
    	}
    else
    	{
    	$langue=$st_langDefa;
    	}
     
    setcookie("CHOIXlang",$langue,time()+$nb_dureCook);
    } 
     
    $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); 
    } 
    require $langue.'-lang.php';
     
    ?>

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Remarque google
    Ci-joint les remarques google
    merci
    Remarque : Indéfini index: HTTP_ACCEPT_LANGUAGE dans D: \ WWW \ french-interface.ssl \ langue \ lang.php à la ligne 48

    Remarque : Indéfini index: HTTP_ACCEPT_LANGUAGE dans D: \ WWW \ french-interface.ssl \ langue \ lang.php à la ligne 23

    Avertissement : require (-lang.php): échec de l'ouverture du flux: aucun fichier ou répertoire de ce type dans D: \ WWW \ french-interface.ssl \ langue \ lang.php à la ligne 52

    Erreur irrécupérable : require (): Échec de l'ouverture requise '-lang.php' (include_path = '; C: \ php \ pear') dans D: \ WWW \ french-interface.ssl \ language \ lang.php à la ligne 52

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Problème : il n'y a pas d'index HTTP_ACCEPT_LANGUAGE dans $_SERVER. Tu peux te débarrasser des deux notices "Index indéfini" avec une vérification isset($_SERVER['HTTP_ACCEPT_LANGUAGE']).
    Corollaire : tu n'as pas de solution de secours. Il te faut une langue par défaut pour le cas où aucune langue n'est définie.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Password manager multi-compte pour connexion sur sites web
    Par NeraOne dans le forum Autres Solutions d'entreprise
    Réponses: 0
    Dernier message: 03/07/2013, 20h50
  2. Réponses: 3
    Dernier message: 29/12/2011, 18h45
  3. asp.net site multi language
    Par windows2056 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/08/2011, 11h50
  4. SITE WEB QUI TRAVAILLE AVEC DU MULTI ECRAN
    Par Invité dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 23/04/2010, 17h21
  5. Site web multi langues
    Par piotrr dans le forum Langage
    Réponses: 8
    Dernier message: 10/01/2008, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo