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

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.
nobitos a écrit :
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).

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

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.
Bonjour à tous,

bah quoi...seulement 10 mois pour répondre ? Smiley lol
J'avais totalement laissé ce sujet de côté depuis janvier.
Je viens de retrouver le message de fvsch et suivi ses indications : c’était bien ça, à savoir que vraisemblalement, W3C génère un en-tête SANS ACCEPT_LANGUAGE.
Par conséquent, la variable restait vide dans le cas d'une demande de validation.
Voila pourquoi cela fonctionnait dans un environnement et pas dans un autre...
J'ai donc géré ce cas dans ma classe...ET CA MAAAAAAAAAAAAAARCHE !!!!!!

Un grand merci à fvsch, et à Victor, qui a bien voulu se pencher sur mon problème (même si sa réponse n'était pas la bonne Smiley cligne !).

Je dois dire que ce problème me rendait complètement fou !
Aaaaah : ça va mieux !

Cordialement,
Nobitos.