Suivez les fils RSS
 

Des livres incontournables pour tout maîtriser

  • CSS avancées - vers HTML5 et CSS3
  • HTML5
  • CSS2
  • PHP5 avanc�
  • Memento MySQL
  • Memento CSS 3
  • Memento XHTML
  • WordPress 3 100% pratique
  • jQuery et jQuery UI
Auteur
Rackham
#
Citer
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é :

<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)

^
fvsch
#
Citer
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.

http://fvsch.com 
^
Rackham
#
Citer
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
#
Citer
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. 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)

http://fvsch.com 
^
jb_gfx
#
Citer
2853 Posts
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)

Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots.

http://www.pixemedia.com/ 
^
Rackham
#
Citer
32 Posts
Bonjour et merci.

C'est que je j'ai fait entretemps, mais comment je peux le tester ?

^
fvsch
#
Citer
20100 Posts
$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).

http://fvsch.com 
^
fvsch
#
Citer
20100 Posts
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.

http://fvsch.com 
^
Rackham
#
Citer
32 Posts
C'est OK, merci à tous les deux pour tourtes ces infos smile

^
jb_gfx
#
Citer
2853 Posts
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 ?

Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots.

http://www.pixemedia.com/ 
^
Rackham
#
Citer
32 Posts
$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 ?

^
jb_gfx
#
Citer
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.

http://www.pixemedia.com/ 
^
fvsch
#
Citer
20100 Posts
jb_gfx a écrit :
Y'a une spec quelque part pour ça ?

Oui, dans la spec HTTP 1.1 (RFC 2616).

http://fvsch.com 
^
jb_gfx
#
Citer
2853 Posts
fvsch a écrit :

Oui, dans la spec HTTP 1.1 (RFC 2616).


Merci. smile

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.

http://www.pixemedia.com/ 
^
fvsch
#
Citer
20100 Posts
En PHP j'ai trouvé ceci: Parse Accept-Language to detect a user's language.

http://fvsch.com 
^
jb_gfx
#
Citer
2853 Posts
Ça à l'air propre. Pas besoin de réinventer la roue. smile

Je ne sais pas si je suis cultivé ou si je viens d'inventer deux nouveaux mots.

http://www.pixemedia.com/ 
^