| Auteur | |
|---|---|
| Rackham | |
| 32 Posts |
Bonjour, Je voudrais que mon menu déroulant s'affiche en français si la langue du navigateur est le français, sinon qu'il s'affiche en anglais, ce qui donne Si la langue du navigateur est FR, que ce code soit exécuté :
Et si la langue du navigateur est différente de FR, que ce code soit exécuté :
Le contenu reste identique, seul le menu s'affiche différemment. Quelle est la meilleure solution à adopter ? Merci d'avance. Modifié par Rackham (18 Nov 2011 - 08:04) |
| fvsch | |
| 20100 Posts |
Bonjour, Les navigateurs envoient une information de langue(s) préférée(s) via un en-tête HTTP nommé Accept-Language. Tu peux donc te baser sur cette information en gardant à l'esprit que: - La valeur est généralement une valeur par défaut qui dépend de la langue d'installation du navigateur ou de la langue de l'interface du système d'exploitation. - Il peut arriver qu'un utilisateur souhaite voir une langue différente de l'information envoyée par son navigateur. On s'efforce en général de laisser un certain contrôle à l'utilisateur, et on utilise Accept-Language uniquement pour un premier tri ou choix automatique. Pour permettre à l'utilisateur de demander une langue spécifique on a plusieurs possibilités, notamment l'ajout d'une préférence dans un cookie ou l'utilisation d'URLs spécifiques à chaque langue (si l'utilisateur demande example.org/fr/login j'affiche la page de connexion en français, même si la langue demandée en premier dans Accept-Charset et l'allemand). Pour l'implémentation exacte, eh bien ça dépend de ce que tu décides de faire au bout du compte, et des éventuels langages de programmation utilisés. Pour information, Apache permet de faire de la négociation de contenu à partir de Accept-Charset sans avoir à utiliser un langage tel que PHP. Un exemple ici. |
| Rackham | |
| 32 Posts |
Bonjour et merci de ta réponse. Je recherche plus à intégrer dans une page quelques lignes de code permettant d'utiliser via une include (en php) une portion de code ou une autre. Tes directives Apache sont intéressantes, mais je veux éviter de maintenir des pages en anglais et en français. Je vais plus m'orienter vers le test de la langue du système d'exploitation pour afficher ma partie de code en anglais ou en français. Si tu as un sample dans ce sens je suis preneur. Et encore merci ! |
| fvsch | |
| 20100 Posts |
Pas d'exemple de code à proposer car je ne connais pas grand chose à PHP, et Google (ou autre moteur de ton choix) est autant ton ami que le mien donc je te laisse en discuter avec lui. Quelques repères: - Si tu n'es pas familier des en-têtes HTTP, et que tu n'as jamais visualisé les en-têtes d'une requête et d'une réponse... eh bien il est grand temps de s'y mettre. Tu peux utiliser des outils intégrés aux navigateurs (par exemple Web Inspector sur Chrome ou bien la Web Console dans Firefox), ou bien un outil en ligne comme http://web-sniffer.net/ - Se renseigner sur les moyens techniques en PHP pour récupérer la valeur d'un en-tête HTTP. J'imagine qu'on consultera la doc. - L'en-tête HTTP Accept-Language a un format particulier. Il faut voir si PHP te propose des outils (dans sa standard lib) pour récupérer un Array avec la liste des valeurs dans le bon ordre, par exemple. Ou s'il faut chercher une classe ou une fonction PHP tierce qui fasse ça bien. - Le reste c'est de la programmation très simple (un ou deux if, peut-être une boucle...). Modifié par fvsch (20 Nov 2011 - 21:41) |
| jb_gfx | |
| 2853 Posts |
La constante globale $_SERVER['HTTP_ACCEPT_LANGUAGE'] contient cette info. En fait ce que tu veux faire est simple :
Modifié par jb_gfx (20 Nov 2011 - 21:57) Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots. |
| Rackham | |
| 32 Posts |
Bonjour et merci. C'est que je j'ai fait entretemps, mais comment je peux le tester ? |
| fvsch | |
| 20100 Posts |
Sauf que les deux premiers caractères de la valeur d'Accept-Language ne correspondent pas forcément à la langue préférée. Par exemple si la valeur est "fr-FR;q=0.5,en-US;q=1" (l'anglais est préféré). Bon, c'est rare, admettons, mais si c'est un développement pour un gros projet ça vaut la peine de faire les choses un peu plus finement (surtout qu'il doit y avoir des utilitaires qui vont bien pour ça). |
| fvsch | |
| 20100 Posts |
Rackham a écrit : Dans les préférences de Firefox, tu changes la langue préférée, et tu testes plusieurs cas de figure. |
| Rackham | |
| 32 Posts |
C'est OK, merci à tous les deux pour tourtes ces infos |
| jb_gfx | |
| 2853 Posts |
fvsch a écrit : Y'a une spec quelque part pour ça ? Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots. |
| Rackham | |
| 32 Posts |
Ce test n'est-il pas suffisant, à quoi correspondent
Pourquoi 2 fois 'fr' ?Si je veux rajouter l'espagnol donc 'es' comment faut-il le rajouter ? |
| jb_gfx | |
| 2853 Posts |
C'est un opérateur ternaire, plus d'infos ici : http://php.net/manual/fr/language.operators.comparison.php Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots. |
| fvsch | |
| 20100 Posts |
jb_gfx a écrit : Oui, dans la spec HTTP 1.1 (RFC 2616). |
| jb_gfx | |
| 2853 Posts |
fvsch a écrit : Merci. Je vais voir ce qu'on peut faire. Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots. |
| fvsch | |
| 20100 Posts |
En PHP j'ai trouvé ceci: Parse Accept-Language to detect a user's language. |
| jb_gfx | |
| 2853 Posts |
Ça à l'air propre. Pas besoin de réinventer la roue. Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots. |