Négociation de la langue
La même fonctionnalité s’applique à la langue. Pour le prouver, nous devons créer des pages .html dans différentes langues. En fait, nous ne nous soucions pas ici des différents contenus mais nous nous contentons de modifier les pages pour qu’elles contiennent, par exemple :
<h1>Version anglaise</h1>
et nous modifions la version française pour qu’elle contienne la ligne suivante :
<h1>Version française</h1>
Puis, nous donnons une extension appropriée à ces fichiers :
- index.html.en pour l’anglais
- index.html.fr pour le français
- index.html.ko pour le coréen
Apache reconnaît les variantes linguistiques : en-US est une version de l’anglais en, ce qui semble logique. Vous pouvez également mettre à disposition des documents en plusieurs langues. Si vous avez une version « franglaise », vous pourriez la fournir aux lecteurs anglais et francophones en l’appelant frangdoc.en.fr. En réalité, bien sûr, vous auriez d’autres soucis, notamment pour gérer les traducteurs et les spécificités des claviers. De plus, la version française de l’index devrait pointer vers les versions françaises des catalogues mais, dans le monde merveilleux de Butterthlies, Inc., tout est simple.
La version française de notre index serait index.html.fr. Par défaut, Apache recherche un fichier nommé index.html.<qqchose>. S’il en trouve avec une extension linguistique, index.html.fr par exemple, et que celle-ci correspond aux préférences du navigateur, il servira le fichier correspondant. Si, par contre, le fichier d’index s’appelle index.fr.html, Apache recherchera quand même, et ne le trouvera pas, le fichier index.html.<qqchose>. Si index.html.en existe, c’est lui qui sera renvoyé ; si ce fichier s’appelle index.en.html, Apache abandonnera et fournira la liste de tous les fichiers. La morale de cette histoire est que si vous voulez gérer les noms des fichiers d’index sans tenir compte de l’ordre -- c’est à dire pouvoir utiliser indifféremment index.fr.html ou index.html.fr -- vous devez utiliser la directive suivante :
DirectoryIndex index
Avec elle, Apache recherchera un fichier appelé index.<qqchose> plutôt que le nom par défaut, index.html.<qqchose>.
Pour configurer Apache en ce sens, nous devons ajouter les lignes suivantes dans le fichier httpd1.conf :
AddLanguage fr .fr
AddLanguage en .en
AddLanguage ko .ko
Notre navigateur se comporte maintenant de façon civilisée : si vous tapez ./go 1 sur le serveur et que, sur la machine cliente, vous allez dans Édition ® Préférences ® Navigateur ® Langues (Netscape 7 et Mozilla 1) ou dans Outils ® Options Internet ® Langues (MSIE), ou dans les réglages de la langue pour votre navigateur et que vous choisissez le français comme première langue, vous verrez la version française de l’index. Si vous choisissez l’anglais en premier et que vous rechargez la page, vous verrez la version anglaise. Si, maintenant, vous allez dans le répertoire catalog_summer, vous verrez les images, bien que nous n’ayons pas précisé leurs noms en entier : c’est magique !
Si le navigateur ne sait pas le faire, Apache contrôle le choix de la langue. Désactivez les préférences de langues dans votre navigateur et ajoutez la ligne suivante à votre fichier de configuration httpd2.conf :
LanguagePriority fr en ko
Relancez Apache avec ./go 2, les pages affichées par le navigateur seront en français.
LanguagePriority
LanguagePriority langue-MIME langue-MIME ...
Configuration du serveur, hôte virtuel, répertoire, .htaccess
La directive LanguagePriority fixe la priorité des langues dans la gestion d’une requête multi-vues lorsque le client n’exprime pas de préférence. La liste des langue-MIME se lit dans l’ordre des priorités décroissantes. Si cette liste est la suivante :
LanguagePriority en fr de
le serveur renverra truc.html.fr pour une requête de truc.html si truc.html.fr et truc.html.de existent tous les deux, que truc.html.en n’existe pas et que le navigateur n’a pas précisé de langue préférée.
On remarquera que cette directive n’a d’effet que si l’on a aucun autre moyen de déterminer une « meilleure » langue. Elle ne fonctionnera notamment pas si une directive DefaultLanguage a été définie et les requêtes HTTP 1.1 correctement implémentées annuleront son effet.
Comment tout cela fonctionne-t-il ? Vous pouvez aller jeter un coup d’œil aux variables d’environnement présentées au chapitre 16. Parmi elles, vous trouverez :
...
HTTP_ACCEPT=image/gif,image/x-bitmap,image/jpeg,image/pjpeg,*/*
...
HTTP_ACCEPT_LANGUAGE=fr
...
Apache utilisera ces informations pour déduire ce qu’il peut renvoyer.
AddLanguage
AddLanguage langue-MIME [extension] ...
Configuration du serveur, hôte virtuel, répertoire, .htaccess
La directive AddLanguage associe la langue langue-MIME aux fichiers portant l’extension indiquée. Cette association s’ajoute à celles déjà en vigueur et surcharge éventuellement une association existant pour la même extension. Avec les directives suivantes :
AddEncoding x-compress .Z
AddLanguage en .en
AddLanguage fr .fr
le document xxxx.en.Z (ou xxxx.Z.en ) sera traité comme un fichier en anglais, compacté par compress. Bien que la langue du contenu soit signalée au client, il est peu probable que le navigateur utilisera cette information. La directive AddLanguage est plus utile pour la négociation de contenu, où le serveur renvoie un seul document parmi plusieurs en fonction de la langue préférée du client.
S’il existe plusieurs associations de langue pour la même extension, c’est la dernière rencontrée qui sera utilisée. Si l’on a, par exemple, les associations suivantes :
AddLanguage en .en
AddLanguage en-uk .en
AddLanguage en-us .en
les documents portant l’extension .en seront traités comme de l’anglais américain (en-us).
L’extension n’est pas sensible à la casse et peut, ou non, être préfixée d’un point.
DefaultLanguage
DefaultLanguage langue-MIME
Configuration du serveur, hôte virtuel, répertoire, .htaccess
Cette directive n’est disponible qu’à partir d’Apache 1.3.4.
La directive DefaultLanguage indique à Apache que tous les fichiers dans la portée de la directive (tous ceux dans la portée d’un conteneur <Directory>, par exemple) n’ayant pas d’extension spécifique à une langue ( .fr ou .de par exemple, définies via la directive AddLanguage ) seront considérés comme étant dans la langue langue-MIME. Cela permet à un répertoire entier d’être considéré comme contenant du néerlandais, par exemple, sans devoir renommer chaque fichier. À la différence de l’utilisation des extensions de langues, DefaultLanguage ne peut préciser qu’une seule langue.
Si aucune directive DefaultLanguage ne s’applique et qu’un fichier n’a aucune extension de langue configurée par AddLanguage, ce fichier sera considéré comme n’ayant pas d’attribut de langue.
RemoveLanguage
RemoveLanguage extension [extension] ...
Répertoire, .htaccess
Cette directive n’est disponible qu’à partir d’Apache 2.0.24.
La directive RemoveLanguage supprime les associations de langue pour les fichiers ayant les extensions indiquées. Cela permet aux fichiers .htaccess des sous-répertoires d’annuler les associations héritées des répertoires parents ou de la configuration du serveur.
Les extensions passées en paramètre sont insensibles à la casse et peuvent, ou non, être préfixées d’un point.