Développement Web

Gestion de contenu multilingue

Jean-Luc Antoine - 24/08/2002

Un bon nombre d'entre vous a créé un site web, probablement en français. Si vous installez des systèmes de statistiques sur vos pages, vous verrez que des internautes étrangers s'y égarent si votre site est référencé dans les moteurs de recherche. En fait, il y a nettement plus d'internautes étrangers que Français. Si vous arrivez à les rendre captifs, vous augmenterez très nettement la fréquentation de votre site.
Ce qui les éloigne ? Simplement le fait que vos pages sont en français et qu'ils ne parlent pas cette langue. L'idée est donc de pouvoir gérer un site français et anglais, ou encore d'ajouter d'autres langues. C'est effectivement l'anglais qui est le plus souvent utilisé pour les sites web, à cause de la population d'internautes correspondate.

Site statique

Votre site peut être élaboré techniquement selon deux méthodes : des pages statiques ou des pages dynamiques. Les pages statiques possèdent l'extension .html ou .htm. C'est le cas des pages persos hébergées chez wanadoo par exemple. Cela signifie que la seule intelligence ou le moindre dynamisme doit être du code javascript exécuté côté client, via le browser de l'internaute. Nous ferons abstraction des différents plugins (flash etc...) dont le contenu n'est pas référençable dans les moteurs, et dont tous les internautes ne possèdent pas le plugin correspondant.
De nombreux sites statiques ont choisi la méthode de sélectionner une langue sur la page principale, et de brancher sur l'arborescence écrite en français ou celle écrite en anglais. Cela fait donc autant de sites à maintenir que de langues gérées. De plus ergonomiquement cela requiert un clic de l'utilisateur, sur une page dont le contenu est pauvre. Cela ne semble pas la solution idéale. Le meilleure système consiste à rendre le choix de la langue transparent à l'utilisateur, c'est à dire adapter le contenu selon la langue de l'internaute de manière automatique. Si je suis un internaute français, les pages afficheront du texte français et ainsi de suite pour les autres langues.
Il faut donc détecter la langue en javascript. Les objets mis à dipsosition permettent de le faire de manière simple, voici sans plus tarder le morceau de cadeau javacript à placer dans des tags script :

if (typeof(navigator.language)!="undefined")l=navigator.language
else if (typeof(navigator.userLanguage)!="undefined")l=navigator.userLanguage
else if (typeof(navigator.browserLanguage)!="undefined")l=navigator.browserLanguage
else	l="en";
l=(l.substring(0,2)=="fr");
Ces quelques lignes sont compatibles avec la majorité des navigateurs (internet explore, netscape...) dans de multiples versions. On tente de récupérer le code de la langue en interrogeant différents objets jusqu'à ce que l'on en trouve un qui expose ce paramètre. Sinon, on prend par défaut l'anglais ("en") comme langue. La dernière ligne permet de définir la langue en français; le code langue français peut être fr, fr-be (pour la Belgique), fr-ca (pour le Canada), fr-ch, fr-mc etc... autant de pays francophones pour lesquels il faut afficher en français. A la fin de ce script, la variable "l" vaut True s'il faut afficher en français, False sinon.
L'affichage du texte de la page (contenu, meu...) peut être alors réalisé en interrogeant la valeur de cette variable en javascript. Par exemple pour le texte d'un menu pointant sur la page principale du site, on pourrait placer le code suivant des des tags de script :
document.write(l?"Accueil":"Home");
Le texte "Accueil" sera affiché à l'emplacement de ce code sur les navigateurs français, et "Home" pour les autres.
Nous avons donc réussi à gérer dynamiquement le contenu selon la langue, sans la moindre sollicitation de l'utilisateur.

Site dynamique

L'inconvénient de la gestion sur des pages statiques, c'est que l'ensemble de la page est téléchargée sur le poste client, plus le contenu gèrera de langues, plus la page à télécharger sera lourde. L'idée est donc d'effectuer ce choix d'affichage du côté du serveur et de ne transmettre que le contenu correspondant à la langue requise.
Du côté du serveur nous pouvons obtenir beaucoup d'informations sur l'identité du client : adresse ip, signature du navigateur etc... L'ensemble de ces informations sont fournies dans l'en-tête du protocole HTTP. Il suffit donc de lire le contenu de ces variables et de les analyser à peu près selon le même principe qu'en javascript.
Dans notre cas c'est la valeur de HTTP_ACCEPT_LANGUAGE qui nous intéresse. Voici donc en PHP un petit code nous permettant de définir si la langue requise est du français ou non :

$l=is_integer(strpos($HTTP_ACCEPT_LANGUAGE,'fr'));
Par la suite il suffit de gérer l'affichage en interrogeant cette variable toujours comme dans l'exemple statique, mais en script PHP :
echo "Test ".($l?'en français':'in english');
En ASP, le code correspondant pourrait ressembler à celui-ci :
If Instr(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),"fr")>0 Then
	response.write("Français")
Else
	response.write("English") 
End If
Vous avez tous les atouts en main pour gérer désormais un contenu multilingue de vos pages selon les possibilités techniques de votre hébergeur.
Server Info
Remote Info
Compress

Batchs
BootSector
Droit
Accessoire GFA
On Now
Ecran plasma
Système d'exploitation
Son
Unités
Scripting
Multilingue
Site Web
Bruit et son
Architecture Google


4K
Color picker
TaskList
Backup files
Mini Port Scanner
Website To CHM
PixyDemo
Web password recovery
4KWebServer
Kill Popup
VBE decoder
Script Optimizer
Database Password Recovery
Class
Ini
EMail validator
Graphical Class
MP3 Info
Pinger Class
IP ranger class
SoftwareMetering
Path Validator
Time Stamper Class
LoggerCLS
HTA
Keyword Ranking
DOM Explorer
HTA-Notepad
PixyPortManager
Other
flashMessage
Kill Popup
VBE decoder (fixed)
Error Codes
Maze generator
Char counter
HTML To Word
ICQ Choose User
ScreenSaver Password decoder
Mp3Playlister - singleList
Long Filename To Short
Trace Math
Dump Hexa File
Self modifying script
Mp3Playlister - multiList
HTANoid
PixyWebServer
Python
Progress indication

©2002 Jean-Luc Antoine. All Rights Reserved. Scripts or any other material on this website may not be redistributed or put as part of ANY collection (script archives, CDs etc) without prior written permission. Permission granted to use and modify any of the scripts found on InterClasse.com