Créer un site multilangue avec Smarty
Classé dans : Programmation
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
Tags : smarty
- Permalien
- maniT4c
- 28 jan 2010 4:47
- Commentaires (6)


le 17 août 2010 à 10:01
Il ne manquerait pas qq chose ? je ne vois pas où sont fait les liens vers les fichiers langues..
le 17 août 2010 à 12:04
C’est la ligne:
{config_load file= »`$smarty.session.strLangue`/lang.txt »}
qui indique ou chercher le fichier langue. session.strLangue étant la session qui contient la langue (en,fr, etc..) et indique donc le dossier cible.
le 19 août 2010 à 7:32
Très bien, merci !
ps: j’ai dû lire trop vite…
le 18 octobre 2010 à 18:11
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.
le 18 octobre 2010 à 18:57
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
le 24 novembre 2010 à 3:21
Bonjour, comment l’appliquer à une page .tpl qui se situe dans un dossier?
Merci