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