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 :

Choisir sa langue sur un site en PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 227
    Par défaut Choisir sa langue sur un site en PHP
    Bien le bonjour,

    Je cherche à installer sur mon site la possibilité de choisir une langue.
    J'ai trouvé 2 solutions:

    1) Faire choisir la langue à l utilisateur et lui passer un cookie.
    2) Passer une variable type: "index.php?langue=fr..."

    Quelle est la meilleure solution d'après vous?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu utilises l'url tu vas devoir indiquer le parametre a chaque changement de page, pas tres pratique.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 227
    Par défaut
    tu connais un bon tutoriel pour installer cette option?

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,

    je penche pour les cookies, c'est plus pratique !

  6. #6
    Membre expérimenté
    Avatar de (Benoit)
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 184
    Par défaut
    +1 pour les cookies !

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par idamarco Voir le message
    Bien le bonjour,

    Je cherche à installer sur mon site la possibilité de choisir une langue.
    J'ai trouvé 2 solutions:

    1) Faire choisir la langue à l utilisateur et lui passer un cookie.
    2) Passer une variable type: "index.php?langue=fr..."

    Quelle est la meilleure solution d'après vous?
    les 2 …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    si le paramètre de requête est défini
     si le paramètre de requête est valable
        variable de session <- paramètre de requête
     fsi
    fsi
     
    si non(la variable de session définie)
        variable de session <- valeur par défaut
    fsi
     
    // arrivé ici la variable de session est supposée définie correctement

  8. #8
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Si c'est pour un site statique, il y a encore plus simple, tu crées un dossier 'fr'
    avec tous les fichiers dedans et ensuite un dupli 'uk' par exemple, ensuite tu fais une fonction qui récupère le chemin de la page courante.

    Tu fais deux drapeaux pour les langues et tu fais un lien dynamique, exemple
    pour le français

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://www.tonsite.com/fr/taPageCourante.php"><img src="drapeau_fr.gif" alt="Drapeau Français" /></a>
    'taPageCourante.php' étant dynamique ;-)

    Ca permet à l'utilisateur de basculer entre chaque langue quand bon lui semble et de rester sur la page correspondante.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 227
    Par défaut
    Merci BlueIce pour l'idée, j'y ai pensé mais j'aimerais traduire le site dans au moins 6 langues...
    Je me suis fait un fichier Excel qui concatene les champs suivant:
    Champs1: define('
    Champs2: Nom1
    Champs3: Nom2 (2ème nom pour plus de souplesse)
    Champs4: ', '
    Champs5: Mot Français
    Champs6: Traduction Anglais
    Champs7: Traduction Russe
    Champs8: ');
    Champs9: =CONCATENER(B3;C3;D3;E3;F3;I3) (Ma colonneA est vide) /concatenation francais
    Champs10 =CONCATENER(B3;C3;D3;E3;G3;I3) Concaténation anglais
    Champs1: =CONCATENER(B3;C3;D3;E3;H3;I3) Concaténation russe
    et plus tard j'intègrerais les autres langues.

    Je n'ai plus alors qu'à faire un copier coller du bloc de texte traduit dans mes fichiers lang...
    Plus pratique en cas de modification...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 227
    Par défaut
    Je vous présente ma petite idée pour parametrer la langue sur mon site:

    2 cookies possible:

    Cookie langnav= langue du navigateur.
    Cookie langdrapeau=langue choisie en cliquant sur un drapeau.
    Une variable $lang récupérant la langue passée.

    Si langdrapeau existe
    --------Pas de modif
    --------$lang=langdrapeau
    Sinon
    --------Si langnav existe
    ------------------Pas de modif
    ------------------$lang=langnav
    --------Sinon
    ------------------=> setcookies langnav (cookies langue navigateur)
    ------------------$lang=langnav
    --------FinSi
    FinSi

    ...Et puis je laisse la possibilité à tout moment à l'utilisateur de cliquer sur un drapeau langue qui créera le cookies langdrapeau et donnera à la variable lang la valeur de langdrapeau...

    Votre avis?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 227
    Par défaut
    Bon,
    je me suis lancé dans le code ci dessous et ça ne passe pas...
    Peut etre sont-ce mes if imbriqués...
    langdrapeau = cookies langue choisie sur click bouton
    lang= cookies langue du navigateur.
    Le cookies langdrapeau devant prendre le dessus sur celui du navigateur.

    testlang.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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php   
        if(isset($HTTP_COOKIE_VARS['langdrapeau'])) {  
           $lang = $HTTP_COOKIE_VARS['langdrapeau'];  
       } else {  
     
    	   if(isset($HTTP_COOKIE_VARS['lang'])) {  
           $lang = $HTTP_COOKIE_VARS['lang'];  
    	   } else { 
     
           // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur  
           $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);   
       }  
         }
       //script d'origine  
     
     
       switch( $lang ) // on fait les tests sur $lang
    {
        case "fr": // si $lang=fr
    		include('lang/fr-lang.php');   
        break;
        case "en": // si $lang=en
    		include('lang/en-lang.php');   
        break;
        case "ru": // si $lang=ru
    		include('lang/ru-lang.php');   
        break;
      default: // dans tous les autres cas
     
    echo 'autre cas';
     
        break;
    }
       //fin du script d'origine  
     
     
       //définition de la durée du cookie (1 an)  
       $expire = 365*24*3600;   
     
       //enregistrement du cookie au nom de lang  
    setcookie("lang", $lang, time() + $expire);?>
    [EDIT]
    Après test, je constate ceci:
    la page index qui contient les drapeaux est sous la racine.
    Le script php testlang.php, tout comme le fichier english.php qui est associé au bouton langueanglais.jpg et qui genere le cookie langdrapeau, se trouvent tout 2 sous le repertoire "/lang"

    Du coup mon navigateur me signale le cookie lang sous la racine et le cookie langdrapeau sous /lang

    En revanche, si je déplace la page index sous /lang et que je modifie le fichier testlang en supprimant le path /lang sur l'appel des includes, ca fonctionne...

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Hiérarchie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ROOT
    |- index.php
    |- lang/
       |- fr.php
       |- en.php
       |- ...
    |- utils/
       |- lang.php
    ROOT/index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php   
    session_start();
     
    // just for testing: to be removed in prod
    if ($_REQUEST['clear'] == 1) unset($_SESSION['lang']) ;
     
    require_once( "utils/lang.php" ) ;
     
    echo $messages['HELLO']." ".$_SESSION['lang']."<br>\n" ;
     
    ?>
    utils/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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?php
     
    $_LANGUAGES = array ( "fr", "en", "ru" ) ;
    $_DEFAULT_LANG = "en" ;
     
    $uris = explode("/", $_SERVER['REQUEST_URI']) ;
     
    if (count($uris) > 1) {
    	foreach($_LANGUAGES as $k => $l) {
    		if (in_array( $l, $uris ) ) {
    			$uri = str_replace( "/".$l, "", $_SERVER['REQUEST_URI']) ;
     
    			if (strpos($uri,"lang=")) {
    				$uri = preg_replace("/\?lang=[^?]*&/", "?", $uri) ;
    				$uri = preg_replace("/\?lang=[^?]*/", "", $uri) ;
    				$uri = preg_replace("/&lang=[^?]*&/", "&", $uri) ;
    				$uri = preg_replace("/&lang=[^?]*/", "", $uri) ;
    			}
     
    			if (strpos($uri, "?") > 0) {
    				$uri .= "&lang=$l" ;
    			}
    			else {
    				$uri .= "?lang=$l" ;
    			}
     
    			header('Location: '.$uri) ;
    			exit ;
    		}
    	}
    }
     
    if(isset($_SESSION['lang'])) {  
    	$lang = $_SESSION['lang'];  
    } 
     
    if(isset($_REQUEST['lang'])) {  
    	$lang = $_REQUEST['lang'];  
    } 
     
    if (!isset($lang)) { 
    	$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);   
    }  
     
    if (!isset($lang)) {
    	$lang = $_DEFAUT_LANG ;
    }
    else {
    	$lang = strtolower($lang) ;
    	if ( !in_array($lang, $_LANGUAGES) )
    		$lang = $_DEFAUT_LANG ;
    }
     
    $_SESSION['lang'] = $lang ;
    include("lang/$lang.php");
     
    ?>
    lang/fr.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
     
    $messages = array(
    	'HELLO' => "Bonjour"
    ) ;
     
    ?>
    lang/en.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
     
    $messages = array(
    	'HELLO' => "Hello"
    ) ;
     
    ?>
    http://192.168.1.6/test/index.php :
    "Bonjour fr"

    http://192.168.1.6/test/en/index.php redirect to http://192.168.1.6/test/index.php?lang=en :
    "Hello en"

    http://192.168.1.6/test/index.php?clear=1&lang=fr :
    "Bonjour fr"

    http://192.168.1.6/test/en/index.php?clear=1&lang=fr redirect to http://192.168.1.6/test/index.php?clear=1&lang=en :
    "Hello en"

Discussions similaires

  1. Gestion des langues sur mon site
    Par RicardoBxl dans le forum Débuter
    Réponses: 4
    Dernier message: 22/01/2013, 14h31
  2. Probleme de langue sur un site Joomla
    Par origon dans le forum Requêtes
    Réponses: 0
    Dernier message: 07/08/2012, 11h21
  3. acces multiple a un compte sur un site en php
    Par simoelasimo dans le forum Sécurité
    Réponses: 1
    Dernier message: 24/03/2011, 14h47
  4. Réponses: 3
    Dernier message: 19/02/2007, 20h32

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