Site multilingue - Parse error

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Site multilingue - Parse error

Re: Site multilingue - Parse error

par Machinarium » 26 mai 2014, 00:45

Merci une fois encore !

Le code marche à la perfection ! Je n'ai plus qu'à concocter un petit script pour que l'utilisateur puisse changer la langue s'il le souhaite :D !

Re: Site multilingue - Parse error

par Ryle » 25 mai 2014, 19:03

Ben l'idéal serait de faire les deux : le navigateur comme valeur par défaut quand rien n'est spécifié et le choix du visiteur s'il veut en changer ;)

La variable $_SERVER['HTTP_ACCEPT_LANGUAGE'] te permet de connaitre la langue du navigateur
$langue = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

Re: Site multilingue - Parse error

par Machinarium » 25 mai 2014, 18:38

Merci encore pour les explications claires !

Là, si je comprends bien, on s'attend à avoir une URL avec ?lang=fr ou ?lang=en d'entrée (et le test me l'a confirmé) pour afficher une des deux langues.

En fait, ce que j'aimerais faire (mais qui est peut-être pas recommandé), c'est que la page détecte la langue du navigateur et paramètre la langue du site en fonction. Si le navigateur est en français, le site est en français. Sinon, le site est en anglais.

Ou alors, un bon compromis serait de demander à l'utilisateur quelle langue il veut afficher et de mémoriser son choix grâce à un petit cookie.

Sans forcément me dire comment faire chacune des solutions, quelle serait la meilleure ?

Re: Site multilingue - Parse error

par Ryle » 25 mai 2014, 18:23

Quand tu utilises la variable $_GET['lang'], tu demandes à php d'aller lire dans la variable $_GET (qui correspond aux données passées dans l'url et qui n'est rien de plus qu'un tableau :)) la valeur dont la clé est 'lang'.

Le message qui apparait est un message d'avertissement qui t'indique qu'il ne parvient pas à trouver l'index 'lang' dans le tableau $_GET, ce qui signifie que cet attribut n'est pas présent dans l'url :)

Pour pouvoir utiliser ces variables il faut t'assurer qu'elles sont définies au préalable (avec isSet() ou empty() par exemple).
if (isSet($_GET['lang'])) // si une langue est spécifiée dans l'url on la récupère
        $langue = $_GET['lang'];
else // sinon on utilise une langue par défaut
        $langue = 'en';

switch ($langue) {
        case 'en' :
        default : 
                include('files/lang/en-GB.php');
                break;
        case 'fr' :
                include('files/lang/fr-FR.php'); 
                break;
}
On distingue également ainsi la valeur par défaut si aucune langue n'est demandée de la valeur par défaut si la langue demandée n'est pas connue :)

Re: Site multilingue - Parse error

par Machinarium » 25 mai 2014, 18:14

Merci Ryle pour ta réponse !

Ah oui, c'est tout bête, en fait >.< !

Du coup, j'ai utilisé ton code switch/case en faisant de l'anglais le cas par défaut comme ceci :
switch ($_GET['lang']) {
        case 'en' :
        default : 
                include('files/lang/en-GB.php'); 
                break;
        case 'fr' :
                include('files/lang/fr-FR.php');
                break;
Maintenant, j'ai une autre erreur qui s'affiche :
Notice: Undefined index: lang in index.php on line 6

Re: Site multilingue - Parse error

par Ryle » 25 mai 2014, 18:02

Tu as placé une condition après le else, alors qu'il n'en faut pas :)
                if ($_GET['lang'] == "fr") {
                        include('files/lang/fr-FR.php'); 
                }
                else {
                        include('files/lang/en-GB.php');
                }
Ici, si la langue est 'fr', le fichier 'files/lang/fr-FR.php' sera inlcu. Si la langue n'est pas 'fr', qu'elle soit 'en', 'ch' ou 'xx', le fichier 'files/lang/en-GB.php' sera inclu.

Un else correspond à tous les autres cas, si tu veux une seconde condition, il faut utiliser elseif :
                if ($_GET['lang'] == "fr") {
                        include('files/lang/fr-FR.php'); 
                }
                elseif ($_GET['lang'] == "en") {
                        include('files/lang/en-GB.php');
                }
Ici, 'fr' incluera fr-FR.php et 'en' en-GB.php. En revanche aucun fichier ne sera inclut si la langue est 'de', 'ch', 'xx' ...

Il peut donc être intéressant d'utiliser un else également pour gérer une valeur par défaut :
                if ($_GET['lang'] == "fr") {
                        include('files/lang/fr-FR.php'); 
                }
                elseif ($_GET['lang'] == "en") {
                        include('files/lang/en-GB.php');
                }
                else {
                        include(...);
                }

A noter que tu peux également utiliser une structure de type switch/case pour ce type de conditions (le else se gère alors avec l'option "default")
switch ($_GET['lang']) {
        case 'fr' :
        default : 
                include('files/lang/fr-FR.php'); 
                break;
        case 'en' :
                include('files/lang/en-GB.php');
                break;
}

Re: Site multilingue - Parse error

par Machinarium » 25 mai 2014, 17:56

Bonjour,

Merci d'avoir répondu !

L'affichage des caractères non imprimables ne donne rien de probant : juste des tabulations et des retours à la ligne là où j'ai voulu en mettre.

Re: Site multilingue - Parse error

par xTG » 25 mai 2014, 17:39

Je ne vois aucun souci.
Vérifies avec un éditeur qui affiche les caractères non imprimables que tu n'en as pas un qui traîne.
Notepad++ permet de les afficher par exemple.

Site multilingue - Parse error

par Machinarium » 25 mai 2014, 16:14

Bonjour,

J'ai quelques rudiments en PHP, et je suis actuellement en train de les mettre en application dans le but de créer un site bilingue (français/anglais).
Actuellement, au niveau du code, j'ai quelque chose qui ressemble à cela :
  • Fichier index.php
  • [php]<!DOCTYPE html> <html> <head> <link href="files/css/style.css" rel="stylesheet"> <?php if ($_GET['lang'] == "fr") { include('files/lang/fr-FR.php'); } else ($_GET['lang'] == "en") { include('files/lang/en-GB.php'); } ?> <title><?php echo HOME_TITLE; ?></title> </head> <body> <nav id="menu"> <ul id="menu-nav"> <li class="current"><a href="#home-slider"><?php echo NAV_HOME; ?></a></li> <li><a href="#experience"><?php echo NAV_GAMES; ?></a></li> <li><a href="#education"><?php echo NAV_PROGRAMMING; ?></a></li> <li><a href="#skills"><?php echo NAV_INTERNET; ?></a></li> <li><a href="#other"><?php echo NAV_ANDROID; ?></a></li> <li><a href="#contact"><?php echo NAV_CONTACT; ?></a></li> </ul> </nav> </body> </html> [/php]
  • Fichier files/lang/fr-FR.php
  • [php]<?php //--------------------------------------------------------- // index.php //--------------------------------------------------------- // Title define('HOME_TITLE', 'Insérez le titre ici'); // Navigation define('NAV_TITLE', 'Titre du site'); define('NAV_HOME', 'Accueil'); define('NAV_GAMES', 'Jeux vidéo'); define('NAV_PROGRAMMING', 'Programmation'); define('NAV_INTERNET', 'Internet'); define('NAV_ANDROID', 'Android'); define('NAV_CONTACT', 'Contact'); ?>[/php]
Lorsque de je souhaite visualiser ma page, j'obtiens l'erreur suivante :
Parse error: syntax error, unexpected '{' in index.php on line 10
Ce que j'essaie de faire, c'est que si le visiteur utilise un navigateur qui n'est pas en français, le site se met en anglais.

Je ne comprends pas vraiment d'où l'erreur peut venir, ce qui m'empêche de la résoudre. Bref, si vous pouviez m'aider, ce serait chouette !

Bonne fin de dimanche !