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é :

<form method='post'>
      <select name="lp" size="1" onchange="chgpage(this.form)">      
	     <option>Faites votre choix</option>  
	     <option value="a.htm">A en Français</option>
	     <option value="b.htm">B en Français</option>
	     <option value="c.htm">C en Français</option>
      </select>
</form>


Et si la langue du navigateur est différente de FR, que ce code soit exécuté :

<form method='post'>
      <select name="lp" size="1" onchange="chgpage(this.form)">      
	     <option>Faites votre choix</option>  
	     <option value="a.htm">A in English</option>
	     <option value="b.htm">B in English</option>
	     <option value="c.htm">C in English</option>
      </select>
</form>


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)
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.
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 !
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. Smiley cligne

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)
La constante globale $_SERVER['HTTP_ACCEPT_LANGUAGE'] contient cette info.

En fait ce que tu veux faire est simple :


$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr' ? 'fr' : 'en';

Modifié par jb_gfx (20 Nov 2011 - 21:57)
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr' ? 'fr' : 'en';

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).
Rackham a écrit :
C'est que je j'ai fait entretemps, mais comment je peux le tester ?

Dans les préférences de Firefox, tu changes la langue préférée, et tu testes plusieurs cas de figure.
fvsch a écrit :
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr' ? 'fr' : 'en';

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 &quot;fr-FR;q=0.5,en-US;q=1&quot; (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).


Y'a une spec quelque part pour ça ?
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);


Ce test n'est-il pas suffisant, à quoi correspondent

'fr' ? 'fr' : 'en';
Pourquoi 2 fois 'fr' ?

Si je veux rajouter l'espagnol donc 'es' comment faut-il le rajouter ?