C’est une fonctionnalité de plus en plus demandée sur les sites web et qui va devenir un incontournable : votre site doit pouvoir être consultable en plusieurs langues. C’est vrai qu’il existe des moyens de traduire du contenu par l’utilisateur lui même, mais les traductions proposées par Google Traduction ne sont jamais fidèles. Voici donc la méthode que j’utilise et que j’ai créé pour Pretty Web.
Comment savoir en quelle langue faut-il traduire ?
Avant de traduire votre site en biélorusse, il faudra d’abord le traduire dans les incontournables : la langue locale du pays dans lequel votre site à sa place, et l’anglais qui est la langue internationale.
Et comment savoir ce que l’utilisateur veut ? Après y avoir longtemps pensé, j’ai préféré choisir l’enregistrement par cookies. Enregistrer en base de données était impossible pour les utilisateurs visiteurs et ne possédant pas de comptes (la grande majorité) et l’enregistrement par variables de sessions ne permet pas de garder en mémoire le choix de l’utilisateur lorsqu’il revient après le time out de session.
Ce système peut être facilement améliorer : il suffit d’enregistrer en cookies pour les visiteurs non enregistrés et en BDD pour les membres (on préférera enregistrer dans une colonne int pour optimiser l’enregistrement, inutile de faire trop lourd avec une colonne varchar).
Voici donc le code que j’utilise :
if (isset($_GET['english'])) { setcookie("french", 1 , time() -4200); setcookie("english", 1 , time() + (((3600*24)*30)*12)); echo ""; } if (isset($_GET['french'])) { setcookie("english", 1 , time() -4200); setcookie("french", 1 , time() + (((3600*24)*30)*12)); echo ""; } if (isset($_COOKIE['english']) OR !isset($_COOKIE['french'])) { $language="english"; } else{ $language="french"; }
Le code se passe de commentaires, il reste très basique. J’ai fais le choix de définir l’anglais par défaut, sans cookies ce sera cette langue qui sera utilisée. Bien évidemment il est très facile de rajouter une autre langue, il suffit de suivre le même schéma !
Comment traduire notre interface ?
Maintenant que nous savons quelle langue nous avons choisi d’utiliser pour notre utilisateur, il faut donc traduire le site. Notre langue est enregistrée dans la variable $language, il est temps de s’en servir.
La méthode la plus simple est de créer un dossier “lang” qui regroupera tous vos fichiers de traduction. Dans ce dossier, vous créerez des sous-dossiers, un par langue. Dans mon cas j’ai donc créé un dossier “french” et un autre “english”. A l’intérieur de ces dossiers, vous mettrez tous vos fichiers, qui ne contiendront donc que des fichiers PHP avec des variables et du texte.
Je vous conseille de créer un fichier par page (par exemple pour la page search.php, vous créerez un fichier search.php dans chaque sous dossier de langues de traduction qui contiendra le texte utilisé dans la page search.php à la racine). Enfin, vous pouvez créer un fichier general.php (toujours dans chaque sous-dossier !) qui contient les textes qui sont présents sur chaque page.
Voici un exemple de fichier general.php que j’utilise :
$next_page = "Page suivante"; $previous_page = "Page précédente"; $search = "Rechercher"; $sign_in = "Connexion"; $log_me = "Connexion"; $sign_up = "S'inscrire"; $forget = "J'ai oublié !"; $about = "À propos"; $created_by = "Créé par"; $legal_terms = "Mentions légales"; $home = "Accueil"; $by = "par"; $share = "Partager"; $on = "le"; $comment="commentaire"; $comments="commentaires"; $no_comments="Pas de commentaires"; $logout = "Déconnexion"; $my_account = "Mon compte"; $my_profile = "Mon profil"; $connected_as = "Connecté en tant que"; $co_succes = "Vous vous êtes bien connecté."; $deco_succes = "Vous vous êtes bien déconnecté."; $lien_retour='
» Retour
'; $error = "Erreur !"; $edit = "Éditer"; $random_quote = "Citation aléatoire"; $add_a_quote = "Ajouter une citation"; $developer="Développeur"; $add_favorite="Ajouter cette citation à vos favoris !"; $unfavorite="Supprimer cette citation de vos favoris"; $mobile_website="Site mobile"; $full_website="Site normal";
Et le même en anglais :
$next_page = "Next page"; $previous_page = "Previous page"; $search = "Search"; $sign_in = "Sign in !"; $log_me = "Log me"; $sign_up = "Sign up"; $forget = "Forget ?"; $about = "About"; $created_by = "Created by"; $legal_terms = "Legal terms"; $home = "Home"; $by = "by"; $share = "Share"; $on = "on"; $logout = "Logout"; $comment="comment"; $comments="comments"; $no_comments="No comments"; $my_account = "My account"; $my_profile = "My profile"; $connected_as = "Connected as"; $co_succes = "You have successfully logged."; $deco_succes = "You have been disconnected successfully."; $lien_retour='
» Back
'; $error = "Error !"; $edit = "Edit"; $random_quote = "Random Quote"; $add_a_quote = "Add your quote"; $developer="Developer"; $add_favorite="Add this quote to your favorites !"; $unfavorite="Delete this quote from your favorites"; $mobile_website="Mobile website"; $full_website="Full website";
Vous noterez que j’ai mis toutes mes variables en anglais, c’est un choix, il est toujours mieux de coder et de commenter en anglais : si vous avez besoin d’aide, vous serez plus facilement compris !
Utiliser ces fichiers de traduction
Rien de plus facile, il suffit juste de faire des include et des echo des variables !
Voici la ligne à mettre dans votre header.php que vous incluez sur chaque page :
$page=$_SERVER['PHP_SELF']; $taille= strlen($name_page); $taille2=$taille-4; $name_page = substr("$page",1,$taille2); require 'lang/'.$language.'/general.php'; if ($page!="/index.php") {require 'lang/'.$language.'/'.$name_page.'';}
Ce code ci est plutôt facile aussi à comprendre, mais il est ingénieux ! Comme je vous l’ai conseillé auparavant, il est mieux de créer un fichier par page que l’on veut traduire (on s’y retrouve plus facilement…) avec ce code c’est exactement ce qui est fait !
Il ne vous reste plus qu’à faire de jolis echo partout dans votre code, et vous aurez votre interface disponible dans autant de langues que vous le voulez (et que vous pouvez traduire !)
# - '1'){echo "$nombre_commentaires $comments";}elseif($nombre_commentaires=='1'){echo "$nombre_commentaires $comment";}else{echo"$no_comments";} ?>
Ça fait beaucoup de PHP, mais on s’y retrouve je vous assure !