[php] Créer un site multi-langues facile à gérer
vendredi 7 novembre 2014 à 13:32KraZhtest - Liens utiles - C'est le bordel 07/11/2014
Pour avoir cherché un bon moment une manière simple de gérer un site multi-lanques, j'ai pas trouvé!
Beaucoup de discussions sur les bonnes pratiques, les 3/4 disent d'utiliser un framework php (codeigniter, cakePhp..)
pour "pas se faire chier", beaucoup de codes qui ne marchent pas.
Finalement voici une petite synthèse de tout ce bazar pour 3 langues, on y voit plus claire!
Les critères sont:
- Tout doit se gérer des mêmes fichiers, pas de sous-dossiers.
- Garder un seul fichier de style css pour toutes les langues.
- Les traductions doivent être chacune dans leurs propres fichiers.
- Possibilité d'ajouter une langue facilement.
- Etre bien compatible SEO, chaque page doit avoir son url, donc php.
- Les url(s) sont dans la langue traduite.
- Doit pas causer d'erreurs en cas de variables vides.
- Simplifier pas compliquer!
Créer un dossier "langs" et y créer 3 fichiers: en_lang.php, fr_lang.php, es_lang.php.
D'abord le html de la page d'accueil, pour afficher 3 liens, une pour chaque langues.
<div>
<a href="?speak=en">English</a>
<a href="?parle=fr">Français</a>
<a href="?hablo=es">Español</a>
</div>
Les urls seront alors:
http://----.com/?speak=en pour l'Anglais.
http://----.com/?parle=fr pour le Français.
http://----.com/?hablo=es pour l'espagnol.
Maintenant pour que la page réponde à ces urls, ajouter ce code tout en haut de la page:
Si la page est en .html, renommer là en .php
<?php
if ($_REQUEST['parle'] == fr ){
include_once("langs/fr_lang.php");}
else( include_once("langs/fr_lang.php"));
if ($_REQUEST['speak'] == en ){
include_once("langs/en_lang.php");
}
if ($_REQUEST['hablo'] == es ){
include_once("langs/es_lang.php");
}
?>
Ce code redirigera vers le bon fichier de langue si demandé dans l'url, et maintiens le Français comme langue par default.
Ouvrir fr_lang.php, pour y créer une variable, qui sera le titre:
<?php
$Titre = 'Bienvenue ici!';
?>
Et pareil pour les autres langues:
//en_lang.php
<?php
$Titre = 'Welcome here!';
?>
//es_lang.php
<?php
$Titre = 'Bienvenida aquí!';
?>
Voilà c'est tout bon, maintenant pour appeler le titre, avec echo par exemple:
<div class="Ici-est_le titre">
<h3><?php echo $Titre; ?></h3>
<div>
Pour continuer, ajouter des nouvelles variables dans chacuns des fichiers de langues.
$div5 = 'Un sentiment..';
$lang_div76 = 'Mama mià';
$lang_inputB = 'Open this';
Et les appeler dans le html:
<? echo $lang_div5; ?>
<? echo $lang_div76; ?>
<? echo $lang_inputB; ?>
Démo: http://user23.net/dev/dev/multi-langs/
Zip: http://user23.net/dev/dev/multi-langs/multi-langs.zip
Pour avoir cherché un bon moment une manière simple de gérer un site multi-lanques, j'ai pas trouvé!
Beaucoup de discussions sur les bonnes pratiques, les 3/4 disent d'utiliser un framework php (codeigniter, cakePhp..)
pour "pas se faire chier", beaucoup de codes qui ne marchent pas.
Finalement voici une petite synthèse de tout ce bazar pour 3 langues, on y voit plus claire!
Les critères sont:
- Tout doit se gérer des mêmes fichiers, pas de sous-dossiers.
- Garder un seul fichier de style css pour toutes les langues.
- Les traductions doivent être chacune dans leurs propres fichiers.
- Possibilité d'ajouter une langue facilement.
- Etre bien compatible SEO, chaque page doit avoir son url, donc php.
- Les url(s) sont dans la langue traduite.
- Doit pas causer d'erreurs en cas de variables vides.
- Simplifier pas compliquer!
Créer un dossier "langs" et y créer 3 fichiers: en_lang.php, fr_lang.php, es_lang.php.
D'abord le html de la page d'accueil, pour afficher 3 liens, une pour chaque langues.
<div>
<a href="?speak=en">English</a>
<a href="?parle=fr">Français</a>
<a href="?hablo=es">Español</a>
</div>
Les urls seront alors:
http://----.com/?speak=en pour l'Anglais.
http://----.com/?parle=fr pour le Français.
http://----.com/?hablo=es pour l'espagnol.
Maintenant pour que la page réponde à ces urls, ajouter ce code tout en haut de la page:
Si la page est en .html, renommer là en .php
<?php
if ($_REQUEST['parle'] == fr ){
include_once("langs/fr_lang.php");}
else( include_once("langs/fr_lang.php"));
if ($_REQUEST['speak'] == en ){
include_once("langs/en_lang.php");
}
if ($_REQUEST['hablo'] == es ){
include_once("langs/es_lang.php");
}
?>
Ce code redirigera vers le bon fichier de langue si demandé dans l'url, et maintiens le Français comme langue par default.
Ouvrir fr_lang.php, pour y créer une variable, qui sera le titre:
<?php
$Titre = 'Bienvenue ici!';
?>
Et pareil pour les autres langues:
//en_lang.php
<?php
$Titre = 'Welcome here!';
?>
//es_lang.php
<?php
$Titre = 'Bienvenida aquí!';
?>
Voilà c'est tout bon, maintenant pour appeler le titre, avec echo par exemple:
<div class="Ici-est_le titre">
<h3><?php echo $Titre; ?></h3>
<div>
Pour continuer, ajouter des nouvelles variables dans chacuns des fichiers de langues.
$div5 = 'Un sentiment..';
$lang_div76 = 'Mama mià';
$lang_inputB = 'Open this';
Et les appeler dans le html:
<? echo $lang_div5; ?>
<? echo $lang_div76; ?>
<? echo $lang_inputB; ?>
Démo: http://user23.net/dev/dev/multi-langs/
Zip: http://user23.net/dev/dev/multi-langs/multi-langs.zip