Tutoriel : Réaliser un site multilingues INDEX

Transcription

Tutoriel : Réaliser un site multilingues INDEX
Tutoriel : Réaliser un site multilingues
INDEX :
1. Introduction
2. Détecter la langue
3. Gérer les langues avec PHP
a. Usage de variables
b. Traduction à la volée (passage de fonction)
4. Gérer les langues en ASP .NET
a. Avec des constantes
b. Avec des fichiers de traduction
5. Conclusion
1) Introduction
Bonjour à tous !
Aujourd'hui, nous allons apprendre à réaliser un site multilingues. Mais avant tout,
qu'est-ce qu'un site multilingues?
Il s'agit d'un site où l'utilisateur peut choisir la langue du texte? Oui, mais il est
possible de faire mieux encore : régler automatiquement la langue du texte du site
suivant la configuration du visiteur.
Pour cela, nous allons utiliser du Javascript, et soit du PHP, soit de l'ASP .NET. Prêt?
Allons-y alors !
2) Détecter la langue (Javascript en option)
Première étape, décidez comment vous allez gérer la traduction. IL y a deux écoles :
La plus classique, la plus simple, et certainement la plus fiable, est de laisser le visiteur
choisir sa langue. Le mieux pour cela, est de lui demander sur la première page du site,
et ensuite de mettre son choix dans un cookie, afin que les autres pages puissent se
mettre à jour en fonction.
L'autre solution, est automatique, mais peut parfois poser problème, principalement si le
Javascript est désactivé sur le navigateur du client (certes, cela n'arrive pas souvent,
mais sait-on jamais ;)). Elle consiste tout simplement à récupérer la langue du
navigateur, au moyen du code suivant :
var langue = navigator.language;
Et vous voici avec le code de la langue du navigateur client. S'il est en français par
exemple, vous récupérerez le code "fr". Vous pouvez soit mettre ce résultat en cookie
(conseillé), soit le récupérer et le gérer à chaque page. Attention cependant, si vous
utiliser cette méthode, il y a deux règles à respecter :
La première, toujours permettre au client de changer de langue. Ainsi, au cas où il y
aurait eu un défaut de détection, qu'il puisse choisir quand même sa langue.
Deuxièmement, mettre une langue par défaut. Il arrive en effet qu'il ne soit pas
possible de récupérer la langue du navigateur.
3) Gérer les langues avec PHP
Nous allons voir deux méthodes pour permettre la traduction à la volée du texte de
votre site par PHP. Chacune de ses méthodes à ses avantages et ses inconvénients. A
vous de choisir ce qui vous convient le mieux .
a)Usage de variables
Voici une méthode extrêmement simple, puissante et très efficace pour des sites où les
textes sont longs. Mais elle devient de suite moins utile lorsque vous avez besoin de
souplesse dans la traduction.
Nous allons voir tout cela en pratique, et tout vous paraitra plus clair !
Nous allons d'abord mettre toute notre traduction pour une langue particulière dans un
fichier. Attention, vous devrez lui mettre une extension en .php. Ensuite, suivant la
langue, vous chargerez le fichier de traduction qui convient.
Exemple : (code d'acquisition de langue)
<?php
if($_COOKIE['langue'] == "fr") //Si le cookie nommé "langue" a pour valeur "fr"
include('traductions/francais.php');
elseif($_COOKIE['langue'] == "de") //Si le cookie a pour valeur de (allemand)
include('traductions/allemand.php');
elseif($_COOKIE['langue'] == "en")
include('traductions/english.php');
?>
Maintenant que vous savez comment inclure votre fichier de traduction, vous devez le
remplir, à l'aide de variables PHP ! On utilisera ensuite ces variables dans nos pages.
Exemple:
Le fichier de traduction "english.php"
<?php
$titre = "Welcome on my website";
$texte = " This is my first website in php, and he's totally in english and french !";
$pied = "Realised by me in 2009 ";
?>
Le fichier d'index de mon site : "index.php" par exemple.
<?php
if($_COOKIE['langue'] == "fr") //Imaginons que le cookie ait la valeur "fr"
include('traductions/francais.php');
elseif($_COOKIE['langue'] == "en")
include('traductions/english.php');
echo
'<h1>'.$titre.'</h1><br/>'.$texte.'<br/><br/><span
style
=
"font-size:
small;">'.$pied.'</span>';
?>
Comme vous pouvez le voir, quelque soit votre langue, le contenu s'affiche comme il faut.
Comme dit précédemment, cela est très puissant pour de longs textes. Mais imaginons
que votre site soit thématique, et ait peu de texte.
Un exemple simple pourrait être... Un jeu en ligne avec des chevaux. On peut supposer
que les longs textes seront rares, mais que certains mots seront récurrents, comme
"cheval", ou "course".
Dans ce cas, vous serez certainement amener à traduire des dizaines voire centaines de
fois le mot "cheval". Pour remédier à cela, nous allons utiliser une autre méthode, plus
flexible, mais moins fiable à mon gout.
b)Traduction à la volée par passage de fonction
La méthode précédente avait de nombreux avantages, mais pouvait se révéler très
lourde à l'usage. La méthode suivante est utilisée sur de nombreux sites et dans de
nombreux frameworks, tel que DotProject.
Premièrement, nous allons refaire un fichier, éventuellement avec l'extension .php (je
vous le conseille même, par sécurité), qui contiendra nos traductions.
Exemple :
Cheval=>Horse
Sucre=>Sugar
Ici, j'utilise le séparateur "=>", mais libre à vous de mettre n'importe quel symbole pour
séparer le texte original de sa traduction. L'important est de s'y retrouver.
Pareil à la méthode d'avant, il vous faudra un fichier par langue. Nous allons ensuite nous
servir d'une fonction. Elle nous servira en quelque sorte de moteur de recherche dans
vos fichiers.
<?php
/*Ici doit être ajouté le code d'acquisition de langue écrit plus haut*/
function traduction($texte)
{
if($_COOKIE['langue'] == "fr")
$path = "francais";
elseif($_COOKIE['langue'] == "en")
$path = "english";
$path = "traductions/".$path.".php";
$fichier = fopen($path, "r+"); //On ouvre le fichier en mode lecture
//On va devoir lire le fichier ligne par ligne
$resultat = 0 ;
while (!feof($fichier) && $resultat == 0) //Tant que l'on a pas atteint la fin du
fichier
{
$traduction = fgets($fichier); //On récupère toute la ligne, on va ensuite la séparer
en plusieurs parties
//On sépare la partie en deux
List($french, $english) = sscanf($traduction, %s=>%s) ; //Cette fonction est un
peu particulière. Elle permet d’obtenir des variables suivant une chaine formatée. Le %S
représente une chaine de caractères, tandis que le « => » représente tout simplement
mon caractère de séparation. Les amateurs de langage C auront reconnu cette syntaxe.
If($french == $texte) //Maintenant, on vérifie si la ligne correspond au texte à
traduire
$resultat = $english ;
}
fclose($fichier); //On ferme l'accès au fichier
If ($resultat == 0)
Return $texte ; //Si on a rien trouvé, on renvoi le texte d’origine à traduire.
Vous pouvez bien sur renvoyer plutôt un texte de votre choix.
Else
Return $resultat ;
}
Pour les accrocs de la POO, il est possible de créer une classe traducteur, avec
différentes méthodes permettant une traduction plus souple et puissante. On peut aussi
utiliser les tableaux associatifs dans les fichiers, ou encore la fonction ob_start(), pour
gérer toutes les sorties texte avant leur affichage.
Cette méthode est donc extrêmement pratique pour des mots isolés et récurrents. Mais
dés lors que les traductions à faire sont nombreuses, la recherche peut se révéler très
longue, et parfois inexacte.
Un moyen de pallier ce manque, et de faire des fichiers suivant la langue ET suivant
l'endroit où vous êtes dans votre site.
4) Gérer les langues avec ASP .NET
En ASP .NET, les principe est le même qu’en PHP : il vous suffit soit de définir des
constantes. Je pense que personne n’aura besoin d’aide pour cela. Soit de faire des
fichiers de traduction. Là encore, cela reste relativement aisé.
5) Conclusion
Voilà, vous savez comment faire de votre site, un véritable carrefour des langues.
Chacun de deux méthodes présentée ici à ses avantages et ses inconvénients. Le meilleur
moyen reste certainement de combiner les deux méthodes de traduction, afin de
traduire à l'aide de constantes vos longs textes, et laissez le soin à votre
fonction/classe de traduire les termes récurrents. Encore une fois, tout dépend de vos
besoins, la méthode universelle n'existe pas.
En tout cas, vous avez toutes les clés en mains pour réussir, et contribuer à rendre le
web un véritable lien entre tous les gens du monde.
Tutoriel écrit par SALLAT Quentin
Mise en forme et traduction par DECORNIQUET Jérôme