Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Créer un site multilangue avec Smarty

Si vous ne connaissez pas Smarty sachez que c’est un moteur de template très simple à utiliser et très efficace (plus d’info sur smarty ici). je vais vous expliquer comment mettre en place un site multilingue avec Smarty, vous allez voir c’est très simple.

Je vais me baser sur la structure suivante pour vous expliquer à quoi servent chaque fichier ou dossier et ce qu’ils contiennent.

Le dossier “lang” va contenir un sous-dossier par langue utilisée par votre site. Dans notre exemple nous avons donc 4 langues: anglais (en), espagnol (es), français (fr), italien (it).
Chaque dossier de langue contiendra un fichier “lang.txt” qui comportera tous les textes de votre site.
Donc pour le fichier “lang.txt” se trouvant dans le dossier “fr” nous pouvons mettre les lignes suivantes:

nomSite=Mon site web
phraseAccueil=Bienvenu

Pour le fichier “lang.txt” se trouvant dans le dossier “en” nous aurons:

nomSite=my website
phraseAccueil=Welcome

Faites de même pour toutes vos langues.

Le dossier “smarty” comportera tous les fichiers qui composent le moteur Smarty. Téléchargez les ici et contentez-vous de les copier dans ce dossier.

Le dossier “templates” comportera vos fichiers templates c’est à dire ceux qui vont se charger de l’affichage de vos informations. Ici nous n’aurons que le fichier “index.tpl”qui comportera le code suivant:

{config_load file="$smarty.session.strLangue/lang.txt"}
<h1>{#nomSite#}</h1>
{#phraseAccueil#}

Le dossier “templates_c” est nécessaire à la mise en cache des templates, c’est Smarty qui s’occupera de gérer tout ça, contentez-vous simplement de le créer.

Enfin le fichier “index.php” comportera les lignes de code suivantes:

<?php
$myRoot="indique ici le chemion vers le dossier qui contient votre site"
// Inclure la librairie smarty
require_once($myRoot.'Smarty/Smarty.class.php');

// Instancier l'objet smarty
$oSmarty = new Smarty();

// Fixer les chemins de template (optionnel)
$oSmarty->template_dir = $myRoot.'templates';
$oSmarty->compile_dir = $myRoot.'templates_c';
$oSmarty->clear_all_cache();

//démarrage de la session
session_start();

/* explication du code ci-dessous pour le choix de la langue:
* on verifi si dans notre url la variable"strLangue" a été modifiée.
* si oui on met a jour notre variable de session
* sinon on verifie si la veriable de session est vide
* si oui on met par defaut la langue français
* sinon on utilise la langue enregistrée dans notre variable de session
*/
if(isset($_GET['strLangue'])) {
$langAutorises=array('fr','en','it','es');
if (in_array($_GET['strLangue'],$langAutorises))
$_SESSION['strLangue']=$_GET['strLangue'];
}
$_SESSION['strLangue'] = ($_SESSION['strLangue']!=")?$_SESSION['strLangue']:'fr';
$oSmarty->config_dir  =  'lang/';

/** affichage du template **/
$oSmarty->display('index.tpl');
?>

Et voila, pour tester vous n’avez plus qu’à appeler la page index de votre site en modifiant la valeur de la variable strLangue comme ceci:

http://www.monsite.com/index.php?strLangue=fr
http://www.monsite.com/index.php?strLangue=en
http://www.monsite.com/index.php?strLangue=es
http://www.monsite.com/index.php?strLangue=it

Poster un Commentaire

10 Commentaires sur "Créer un site multilangue avec Smarty"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Sébastien
Invité
Sébastien

Il ne manquerait pas qq chose ? je ne vois pas où sont fait les liens vers les fichiers langues..

Sébastien
Invité

Très bien, merci !

ps: j’ai dû lire trop vite…

pibrom
Invité

Bonjour et merci pour le tutoriel, c’est exactement ce qu’il me fallait !

Petite question cependant : Comment gérer les accents dans le fichier lang.txt ? suis-je obligé de les coder (é au lieu de é) même si mon encodage final est en utf-8 ?
Existe-t-il un moyen pour pouvoir utiliser directement les caractères accentués dans le fichier de langue ?

Merci de votre aide.

pibrom
Invité

Re-bonsoir,
Un peu de recherche sur Internet et j’avais ma réponse.
Il faut simplement penser à encoder l’ensemble des éléments en utf-8 :
– le fichier tpl
– le fichier php
– le fichier txt
Et bien entendu, intégrer la bonne balise meta dans le code HTML

toupak29
Invité
toupak29

Bonjour, comment l’appliquer à une page .tpl qui se situe dans un dossier?
Merci

Alexandre
Invité
Alexandre

Bonsoir,
Que dois-je ajouter afin de détecter automatiquement la langue du navigateur et/ou mémoriser le choix de l’utilisateur.
Je sais qu’il faut utiliser le système de cookies mais je ne parviens pas à un code correct.
Très cordialement.

Psyrus
Invité

Merci pour ton post ca m’as permis de vite mettre ca en place pour mon framework !

Une petite erreur de syntaxe dans ton code :
$_SESSION[‘strLangue’] = ($_SESSION[‘strLangue’]!=”)?$_SESSION[‘strLangue’]:’fr’;

Il manque un double quote :
$_SESSION[‘strLangue’] = ($_SESSION[‘strLangue’]!=””)?$_SESSION[‘strLangue’]:’fr’;

Et j’ai aussi eu un autre soucis avec ta déclaration de config_load dans le template :

{config_load file=”$smarty.session.strLangue/lang.txt”}

A remplacer par :
{config_load file=”`$smarty.session.lang`/lang.txt”}
Magic quotes …

pour que ca passe partout ;)

wpDiscuz