| Auteur | |
|---|---|
| nobitos | |
| 2 Posts |
bonjour à tous, Dans une classe, je vais chercher un fichier xml, qui se trouve dans /fr, ou /es, ou /.., en fonction de la langue, fichier qui contient tous les libellés à afficher : $xml->load('http://localhost/partiretdire/config/'. $this->getLang() . '/labels_tags.xml'); La méthode getLang est dans la même classe, un peu plus loin. Cette solution fonctionne parfaitement bien sur mon site. Le problème, c'est quand je veux faire valider la page par w3c : avec exactement la même URL, la variable $this->getLang() n'est pas résolue, donc le fichier non trouvé, etc. etc... Quelqu'un aurait-il une explication, car je vais devenir fou ! Mon site fonctionne très bien, seul w3c n'alimente pas ma variable... Comment une même URL peut-elle être interprétée différemment ? Merci à vous pour votre aide, cordialement, Nobitos. Modifié par nobitos (17 Jan 2012 - 17:30) |
| Victor BRITO | |
Je ne suis pas mort, je dors 2385 Posts |
Salut, On ne soumet au validateur du W3C que les pages (ou fragments de page) contenant uniquement le code interprété côté client. Autrement dit, s'il y a du code PHP, il est normal que ça ne passe pas. En campagne contre la balkanisation du Web, pour rappeler qu'il existe un seul Web Mon avatar : l'ancien département de la Seine (le grand 75 d'avant 1968) |
| fvsch | |
| 20100 Posts |
Si ton problème c'est que $this->getLang() renvoie une chaine vide (ou undefined ou NULL ou autre, je sais plus comment ça marche en PHP), il faut voir: - De quelle classe est-ce que l'object $this (dans ce contexte) est une instance. - À partir de quelle information est-ce que ta méthode getLang détermine la langue demandée. Je soupçonne que ta méthode getLang utilise le contenu de l'en-tête HTTP Accept-Language. Dans ce cas il faut s'assurer que cette méthode prend en compte les deux cas de figure suivant: 1. Accept-Language a un format particulier et peut définir plusieurs langues ou variantes linguistiques avec des indices de priorité (ex: dans Accept-Language: en;0.5,fr-FR;1 la langue préférée est le français). La méthode doit être assez intelligente pour gérer ça (et idéalement elle doit pouvoir retourner un code de langue en deux lettres, sans indication de variante régionale, mais de préférence sur demande). 2. L'en-tête Accept-Language n'est pas obligatoire et peut très bien être absent dans une requête HTTP. La méthode doit donc retourner une valeur par défaut (qui doit être configurée quelque part et passée en paramètre, pas en dur dans la classe). |
| nobitos | |
| 2 Posts |
Bonjour, merci à vous pour vos réponses. fvsch : ma classe va bien rechercher ACCEPT_LANGUAGE, et j'obtiens bien 'fr', sauf si la variable $_GET['lang'] est renseignée (l'utilisateur aurait cliqué sur un drapeau). Le problème est que ma page s'affiche, tout va parfaitement bien, c'est uniquement lorsque avec la même URL, je demande la validation w3c... ce qui me fait penser que Victor aurait raison, mais alors, comment passer la langue en variable ? Je ne comprends rien ! Si tu veux bien, je peux t'envoyer mon code et l'URL de mon site, mais par MP : il n'est encore qu'en phase de tests, et j'aimerai garder un maximum de confidentialité à son sujet pour l'instant. Merci encore, en tout cas, pour votre aide à tous les deux. Cordialement, Alain Vergne. |
| fvsch | |
| 20100 Posts |
nobitos a écrit : Et si tu es sur une requête HTTP sans en-tête Accept-Language, tu n'obtiens rien. D'où l'erreur. Donc c'est un bug de ta classe, à corriger en prenant en compte les cas de figure et les pistes que j'ai données plus haut. Par curiosité, tu sais comment se constitue une requête HTTP? Souvent on fait du développement web sans en avoir la moindre idée (peu de bouquins, tutoriels ou cours abordent le sujet), et c'est une lacune à corriger. |