Bonjour,
Je voudrais obtenir le fonctionnement suivant :
1) site multilingues utilisant le cookie de langue pour choisir la langue d'affichage
2) visiteur :
- si c'est la première fois, regarder la langue préférée de son navigateur (cf HTTP_ACCEPT_LANGUAGE) et poser le cookie de langue correspondant en faisant l'action qui pose et redirige
- si cookie déjà présent, ne rien faire
https://contrib.spip.net/Plugin-Langue-preferee-par-l-internaute ne fait pas ça
https://contrib.spip.net/Site-public-dans-la-langue non plus
https://contrib.spip.net/Une-page-d-accueil-dans-la-bonne avait son code sur un site qui n'est plus en ligne
Ne souhaitant pas réinventer la roue, est-ce que quelqu'un a en stock la fonction qui va bien ?
Merci d'avance
--
RealET
Le 04/06/2017 à 11:21, RealET a écrit :
Bonjour,
Je voudrais obtenir le fonctionnement suivant :
1) site multilingues utilisant le cookie de langue pour choisir la langue d'affichage
2) visiteur :
- si c'est la première fois, regarder la langue préférée de son navigateur (cf HTTP_ACCEPT_LANGUAGE) et poser le cookie de langue correspondant en faisant l'action qui pose et redirige
- si cookie déjà présent, ne rien faire
Plugin « Langue préférée par l’internaute » - SPIP-Contrib ne fait pas ça
Site public dans la langue préférée du navigateur - SPIP-Contrib non plus
Une page d'accueil dans la bonne langue pour chaque visiteur - SPIP-Contrib avait son code sur un site qui n'est plus en ligne
Ne souhaitant pas réinventer la roue, est-ce que quelqu'un a en stock la fonction qui va bien ?
Merci d'avance
2 réponses sur IRC :
<RastaPopoulos> ça fait 100000 ans qu'on devrait avoir un plugin générique pour ça faire…
<RastaPopoulos> faire ça
<RastaPopoulos> les fonctions à appeler sont là, il me semble qu'il y a déjà une fonction pour trouver la langue préférée du visiteur, et ya une autre fonction action pour appliquer le changement de langue
<RastaPopoulos> mais ça ne devrait pas être aux gens de les appeler eux-mêmes dans leur options.php
<RastaPopoulos> faut un plugin à activer et hop ça marche tout ça
<RastaPopoulos> tout seul
<RastaPopoulos> même, ça devrait peut-être être une option à cocher dans la config multilangue du noyau de PSIP
<RastaPopoulos> SPIP
<RastaPopoulos> ou alors, vu que ça va avec la globale "forcer_lang" à priori, faudrait que ce soit une autre variable ou define() uniquement
<RastaPopoulos> mais pas des fonctions à appeler
<RastaPopoulos> vu qu'on peut considéré que c'est non pas aux admins de gérer ça mais *aux créateurices de squelettes* d'appliquer ça suivant comment fonctionne leur squelette
<RastaPopoulos> considérer
<RastaPopoulos> define('_LANG_APPLIQUER_LANGUE_PREFEREE', true)
<RastaPopoulos> un truc dans ce genre…
<RastaPopoulos> à discuter si ça doit être un truc à cocher dans l'admin / ou un plugin à juste activer / ou un define() à mettre dans un jeu de squelettes
<marcimat> pas testé Real3T mais ça doit être un truc comme ça http://spip.pastebin.fr/50132
<Real3T> merci marcimat
<Edgard> Il est vraiment extra ce marcimat 
<Real3T> le set cookie, il fait pas de redirect ?
<marcimat> bah tu as pas dit que tu voulais de redirect 
<Real3T> (il doit falloir terminer par un redirect sur la page en cours)
<Real3T> si si, je veux un redirect
<marcimat> bah pourquoi ? il peut être posé avant l’envoi des headers
<Real3T> parce que la pose du cookie n'est lue par spip qu'au tour suivant
<Real3T> c'est un des trucs rigolo des cookies
<Real3T> un cookie en écriture, n'est lu par le serveur qu'au hit suivant
<Real3T> les cookie en cours d'écriture ne sont pas dispo en lecture
<Real3T> j'ai passé des heures à finir par comprendre ça
<marcimat> bah tu peux bien renseigner $COOKIE['spip_lang'] si ça t’amuse
<Real3T> donc, toute pose de cookie qui doit changer le contenu d'une page doit faire un redirect sur la page en question pour que le résultat soit visible
Merci les gars !!!!!
RealET a écrit le 04/06/2017 à 11:21 :
Bonjour,
Je voudrais obtenir le fonctionnement suivant :
1) site multilingues utilisant le cookie de langue pour choisir la langue d'affichage
2) visiteur :
- si c'est la première fois, regarder la langue préférée de son navigateur (cf HTTP_ACCEPT_LANGUAGE) et poser le cookie de langue correspondant en faisant l'action qui pose et redirige
- si cookie déjà présent, ne rien faire
Plugin « Langue préférée par l’internaute » - SPIP-Contrib ne fait pas ça
Site public dans la langue préférée du navigateur - SPIP-Contrib non plus
Une page d'accueil dans la bonne langue pour chaque visiteur - SPIP-Contrib avait son code sur un site qui n'est plus en ligne
Ne souhaitant pas réinventer la roue, est-ce que quelqu'un a en stock la fonction qui va bien ?
Merci d'avance
Et voici le plugin
L'icone est celle de http://www.languageicon.org/
Merci !
--
RealET
Les dernières modifs montrent clairement qu'il y a un problème dans les fonctions fournies par le noyau de SPIP.
C'est bien ça fait des tests dans un plugin, mais il va falloir faire au moins un ticket de bug et rendre tout ça plus clair et plus générique dans le noyau, parce qu'apparemment ça ne va pas du tout. 
--
RastaPopoulos
RastaPopoulos a écrit le 05/06/2017 à 12:52 :
Les dernières modifs montrent clairement qu'il y a un problème dans les fonctions fournies par le noyau de SPIP.
C'est bien ça fait des tests dans un plugin, mais il va falloir faire au moins un ticket de bug et rendre tout ça plus clair et plus générique dans le noyau, parce qu'apparemment ça ne va pas du tout. 
Ticket fait :
--
RealET
Le 05/06/2017 à 13:26, RealET a écrit :
Ticket fait :
Amélioration de l'API de détection et de changement de langue (#3955) · Tickets · spip / spip · GitLab
J'ai tente une liste de "specs" pour rendre tout ça plus cohérent et compréhensible.
Concrètement il faudrait :
- une fonction générique pour chercher la langue préférée de l'utilisateurice modulo les langues réelles du site (= renvoyer la langue du site que préfère la personne) : chercher_langue_preferee()
- que utiliser_langue_preferee() applique la langue préférée, mais qui existe vraiment dans le site, cf apparemment les modifs qu'a dû faire Real3T
- une fonction générique pour enregistrer une langue donnée en paramètre dans la session/le cookie de la personne qui visite le hit, apparemment on n'a pas de fonction qui fait ça proprement : enregistrer_lanngue_visiteur($lang) ?
- éventuellement, avoir directement une fonction qui combine tout : qui cherche la langue préférée, qui la garde en mémoire chez la personne, et qui l'applique pour le hit en cours : enregistrer_langue_preferee() ?
- avoir une constante qui permet d'activer ce comportement directement (du genre _LANG_ENREGISTRER_PREFEREE) sans rien avoir à coder soi-même ! Et qui serait donc à appliquer par les squelettes qui ont besoin de ce comportement
- éventuellement avoir une option pour activer ça par interface humaine, mais qui ne serait active que si la constante n'est pas définie ! (si la constante est définie, alors l'option est grisée avec sa valeur définie dans la constante, et une phrase expliquant que c'est déjà définie dans le code : "Le comportement de recherche de la langue préférée est déjà défini dans le code de votre site.")
Peut-être aussi qu'il serait pas mal de rendre cohérent toutes les fonctions en les préfixant pareilles, lang_chercher_preferee(), lang_utiliser_preferee(), lang_enregistrer($lang), lang_enregistrer_preferee(), avec les anciennes fonctions toujours là qui appelleraient les nouvelles.
--
RastaPopoulos