Erreur phpboost6 et langue [Réglé]

Visiteur
Visiteur
Reprise du message précédent
Je pense que la logique du forum est la suivante :

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Si la langue n'existe pas ( ici ru ou autre) , je pense qu' il effectue le choix dans cette fonction (fichier kernel/framewarok/lang/langloader.class.php.
Code 'PHP' :
public static function get_default_lang() { $browser_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : ''; $browser_lang = !$browser_lang && isset($_SERVER['HTTP_X_COUNTRY_CODE']) ? strtolower($_SERVER['HTTP_X_COUNTRY_CODE']) : $browser_lang; $browser_lang = !$browser_lang ? strtolower(AppContext::get_request()->get_location_info_by_ip()) : $browser_lang; $langs = self::get_available_langs(); if ($browser_lang) { foreach ($langs as $lang) { $lang_config = parse_ini_file(PATH_TO_ROOT . '/lang/' . $lang . '/config.ini'); if (($lang == 'english' && $browser_lang == 'en') || (isset($lang_config['identifier']) && $lang_config['identifier'] == $browser_lang)) return $lang; } } else return $langs[0]; }
Je suppose que la fonction get_available_langs liste les repertoires langs ( soit du module, soit du forum), ici typiquement anglais et français.
Donc imaginons que browser_lang soit défini soit par la variable HTTP_ACCEPT_LANGUAGE,HTTP_X_COUNTRY_CODE ou par l' IP directement, dans ce cas c' est l' anglais qui est retourné par défaut ( english arrivant avant français) . Si ce n' est pas le cas,on se retrouve dans un cas indéfini puisque la fonction ne retourne rien et donc je suppose que le chemin de langue n' est pas défini. Que se passe t'il si browser_lang n' est pas définie ? Je me demande s' il ne faudrait pas définir un cas par défaut pour gérer ce cas (la langue anglaise est de toute façon toujours présente, quel est le risque de mettre un cas par défaut ( un else au bloc if ($browser_lang)) qui retourne english ( return 'english'). La fonction deviendrait
Code 'PHP' :
public static function get_default_lang() { $browser_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : ''; $browser_lang = !$browser_lang && isset($_SERVER['HTTP_X_COUNTRY_CODE']) ? strtolower($_SERVER['HTTP_X_COUNTRY_CODE']) : $browser_lang; $browser_lang = !$browser_lang ? strtolower(AppContext::get_request()->get_location_info_by_ip()) : $browser_lang; $langs = self::get_available_langs(); if ($browser_lang) { foreach ($langs as $lang) { $lang_config = parse_ini_file(PATH_TO_ROOT . '/lang/' . $lang . '/config.ini'); if (($lang == 'english' && $browser_lang == 'en') || (isset($lang_config['identifier']) && $lang_config['identifier'] == $browser_lang)) return $lang; } } else return $langs[0]; } //cas impossible de définir une langue par défaut, retourne le premièr langage trouvé ( english) ! else return $langs[0];; }
Édité par nic80 Le 14/01/2024 à 10h20

vouf Membre non connecté
-
- Voir le profil du membre vouf
- Inscrit le : 16/08/2008
- Groupes :
Je trouve curieux que ce soit l'IP qui force langue et pas le browser lui même. On a deux langues installées (anglais, et français), sachant que le français est la langue par défaut. Normalement, une fois connecté, on peut choisir sa langue au niveau du profil. Si c'est anglais ou français, ça ne devrait pas poser soucis.
Je vois que la langue par défaut au niveau du profil d'Artenaki est l'anglais. Ca ne devrait pas poser soucis. Peut être essayer de la passer en français pour voi si l'instabilité est présente ?
Mageia 9 64 bits Plasma - Asus Prime Z690-P D4 -Intel Core i5 12600 K- 32 Go Kingston Fury Renegade DDR4-3600 Mhz- Gigabyte Nvidia RTX 3060 - Go-M2 Samsung Evo 970 1Tb-SSD 512 Gb Samsung Evo 960 -SSD 512 Gb Crucial M5

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
La langue du navigateur n' est forcée par l' ip que si les deux variables précédentes ne sont pas définie.Donc sauf si la ligne
$browser_lang = !$browser_lang ? strtolower(AppContext::get_request()->get_location_info_by_ip()) : $browser_lang;
crée une variable browser_lang vide ( mais donc qu' elle existe), alors le cas par défaut est traité et retourne ce que que contient le tableau langs ( est il toujours défini ?) .
edit: mince je viens de voir que ce que j' ai écrit précédement n' a pas de sens, je n' ai pas vérifié les accolades le return langs|0] initial est déjà l cas par défaut

edit: Petit test...
Selection de l'affichage en chinois ( en plus du français ( donc je pense que ça ne change rien en fait puisque fr sera envoyé dans le accept-langage, en plus de ça, j' essayes de lancer firefox avec une locale qui n' existe pas => utilisation de la locale 'C' ( cela correspond a quoi comme lang browser ?) et passage par hide.me avec une ip allemande ( pour faire encore plus compliqué) => plantage d' accès.
edit: Je n' ai reussi à obtenir le message d' erreur qu' une seule fois...
Édité par nic80 Le 14/01/2024 à 11h08

vouf Membre non connecté
-
- Voir le profil du membre vouf
- Inscrit le : 16/08/2008
- Groupes :
Merci pour l'aide. je vais creuser quand j'aurai un peu de temps...
Mageia 9 64 bits Plasma - Asus Prime Z690-P D4 -Intel Core i5 12600 K- 32 Go Kingston Fury Renegade DDR4-3600 Mhz- Gigabyte Nvidia RTX 3060 - Go-M2 Samsung Evo 970 1Tb-SSD 512 Gb Samsung Evo 960 -SSD 512 Gb Crucial M5

Visiteur
Visiteur
vouf :Je vois que la langue par défaut au niveau du profil d'Artenaki est l'anglais. Ca ne devrait pas poser soucis. Peut être essayer de la passer en français pour voi si l'instabilité est présente ?
Cela n'a pas d'importance. Connecté (j'ai essayé l'anglais, le français) et anonyme (dans une fenêtre privée).
nic80 :Je n' ai reussi à obtenir le message d' erreur qu' une seule fois
Tu dois attendre quelques heures. L'adresse IP est mise sur liste blanche après la première erreur pendant quelques heures.

Visiteur
Visiteur


Yuusha Membre non connecté
-
- Voir le profil du membre Yuusha
- Inscrit le : 04/07/2017
- Groupes :
-
Modérateur
-
Administrateur
-
Forgeron
artenaki :Quand allez-vous régler ce problème ?
Tu peux aussi aider vouf et nic80 à aller regarder dans le code. Pour l'instant ton bug n'a été reproduit qu'une seule fois. Tu peux aussi aller voir chez phpboost pour voir si le bug vient de chez eux.

Visiteur
Visiteur
Yuusha :Pour l'instant ton bug n'a été reproduit qu'une seule fois
J'ai demandé à mon frère de vérifier et il a immédiatement rencontré l'erreur. Ce n'est pas seulement moi.
Vous avez dit que le robot de Google souffrait.

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Si je comprends le code cité précédemment, je le comprends comme ça ( en supposant que ce code soit appelé lors de la première ( et uniquement la première) visite du site:
- On prend les deux premiers caractères de la variable accept-language que l'on stocke en minuscule ( donc si le navigateur met en avant ru, RU, ru-RU, RU-RU) pour les langages acceptés lang_browser est fixé à ru et en principe par défaut le navigateur envoi quelque chose
- Si cette variable n' est pas définie ( mais ici ce n' est pas le cas), on regarde la variable HTTP_X_COUNTRY_CODE et si elle existe on la stocke en minuscule dans la variable lang_browser
- Si la variable n' était pas définie par les méthodes précédentes, alors visiblement on essaye de déterminer la langue par rapport à l'ip, que l' on stocke dans la variable lang_browser ( je n' ai pas regardé comment fonctionne cette fonction ( ni cherché à la trouver dans le code), mais je suppose que cela doit retourner un code langue basée sur le retour du code pays.
Ici on a donc la variable lang_browser fixée à ru.
Ensuite on obtient la liste des traductions installées sur phpboost ( donc j' ai l' impression qu' il n' y a qu' anglais et français ( il n' y a pas russian ( ou son nom en cyrillique) ?

Et là on part dans les comparaisons.
Choix english:
on récupère le fichier de localisation et son identifiant de langue (en)
- Est ce que lang=english et lang_browser=en ? => non ( english; ru)
- Est ce que lang_identifier=en et lang_browser=en ( deuxième partie du test) ? => non ( en;ru)
Aucune correspondance on passe à la deuxième langue
Choix français:
- Est ce que lang=english et lang_browser=en ? => non ( francais;ru)
- Est ce que lang_identifier=fr et lang_browser=fr ? => non (fr;ru)
On passe à langue suivante ( zut il n' y en a pas) . La fonction ne retourne donc aucune langue possible (chaine vide), donc on peut supposer que si un fichier de localisation doit être inclus il ne peut pas être trouvé ( /lang/menu-lang.php , n' existe donc pas ( d' où un chemin probablement vide).
Donc ici, peut être que cela pourrait être corrigé par:
Code PHP :
public static function get_default_lang() { $browser_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : ''; $browser_lang = !$browser_lang && isset($_SERVER['HTTP_X_COUNTRY_CODE']) ? strtolower($_SERVER['HTTP_X_COUNTRY_CODE']) : $browser_lang; $browser_lang = !$browser_lang ? strtolower(AppContext::get_request()->get_location_info_by_ip()) : $browser_lang; $langs = self::get_available_langs(); if ($browser_lang) { foreach ($langs as $lang) { $lang_config = parse_ini_file(PATH_TO_ROOT . '/lang/' . $lang . '/config.ini'); if (($lang == 'english' && $browser_lang == 'en') || (isset($lang_config['identifier']) && $lang_config['identifier'] == $browser_lang)) return $lang; } //cas impossible de définir une langue par défaut ( $browser_lang est définie mais pas de correspondance trouvée entre langue installée et langue navigateur), retourne le premier langage trouvé par défaut ( english) ! return $langs[0]; } //ici lang_browser n' a jamais été définie, on renvoie le premier langage trouvé dans la liste des langages ( anglais en l' occurence) else return $langs[0]; } }
Le fait que l' appui sur F5 fonctionne pourrait peut être du au fait qu' une session PHP a peut être été créee avec potentiellement un cookie et que dans ce cas on passe sur un langage par défaut (anglais ou français suivant la configuration d' affichage par défaut). Tant qu' il y a interaction et/ou qu' un paramètre de longueur de session n' est pas atteint, alors aucune session php ne doit être recréee et donc le défaut disparait jusqu' à l' expiration de la session PHP.
Ceci ne se sont que des hypothèses de ma part bien entendu.
edit: J' ai fait le test suivant...
Mise en avant d' un langage autre qu' ayant en ou fr dans l' affichage des pages ( on pourrait essayer russian par exemple

edit 2: @vouf
Est ce que curl pour la commande curl ne réutiliserait pas un cookie stocké quelque part ? En tout cas sur mon poste, ça plante à chaque fois et je n' ai pas trouvé l' option pour enregistrer le cookie et le faire revenir ( l' option -c enregistre bien un fichier, mais il n' est pas réutilisé sur les itérations suivantes).
edit 3 : je n' ai pas compris qu' il fallait utiliser l' option -b fichier_cookie_enregistre pour le faire se recharger ( donc peut être un alias pour curl existe ou une variable indiquant un nom de fichier). Peut être qu' il faudrait utiliser l' option -j ( pour éliminer les cookies de session)
Édité par nic80 Le 18/01/2024 à 01h24

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Visiteur
Visiteur

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Citation :Mais quel est le coupable ? moteur, plugins, paramètres personnalisés ?
Je n' ai pas forcément d' idée sur le coupable...
Ici le le fichier se trouve dans un répertoire kernel ( du coup sans kernel rien ne fonctionne

Je voulais regarder sur le site de Phpboost si un bug de ce type existait mais l' accès a l'outil de bug semble bloqué ( connexion obligatoire mais je n' ai pas forcement envie d' encore créer un compte). Est ce que les les développeurs de Phpboost ont un avis sur la question ?


vouf Membre non connecté
-
- Voir le profil du membre vouf
- Inscrit le : 16/08/2008
- Groupes :
Artenaki
a) Tu te connectes à ta session à chaque fois c'est à dire que tu recommence le parcours de connexion ?
b) Ton ip change régulièrement ? Tu es dérrière un vpn , tor, ce qui pourrait amener à des IP de pays différents ?
NB : Dans la mesure ou la langue est fixée dans le profil utilisateur, s'il est connecté, je ne vois pas pourquoi on retombe sur le bug...A moins qu'il y ait un comportement dans le navigateur qui casse la session et oblige à repasser par cet algorythme.
Même si on applique un contournement, il faut passer par les équipes phpboost pour avoir une correction définitive. Je peux faire un rapport de bug, mais je dois pouvoir reproduire ce bug pour faciliter la correction, que ce soit par nous ou phpboost, sachant que je leur ai déjà remonter les messages d'erreurs
Pour information, le source est : https://github.com/PHPBoost/PHPBoost/blob/6.0/kernel/framework/core/lang/LangLoader.class.php
Je ne suis pas certain que ta piste soit la bonne nic80 vu l'enchainement des fonctions. Je peux éventuellement forcer la lanque fr dans le bout de code que tu évoques si la variable est vide..
Mageia 9 64 bits Plasma - Asus Prime Z690-P D4 -Intel Core i5 12600 K- 32 Go Kingston Fury Renegade DDR4-3600 Mhz- Gigabyte Nvidia RTX 3060 - Go-M2 Samsung Evo 970 1Tb-SSD 512 Gb Samsung Evo 960 -SSD 512 Gb Crucial M5

vouf Membre non connecté
-
- Voir le profil du membre vouf
- Inscrit le : 16/08/2008
- Groupes :
J'ai fait pleins de tests sous Tor Browser, en jouant sur le pays et la langue, j
Je viens de reproduire le problème :
Torbrowser
IP : Pays Bas
Dans firefox , au niveau de "Choix de la langue préférée pour l'affichage des page "Russe[ru]". Je le reproduis également avec d'autres langues. La langue du navigateur est restée en français.
Contournement : Un rechargement de la page corrige le soucis..
Je vais pouvoir creuser et surtout créer le bug officiellement
Mageia 9 64 bits Plasma - Asus Prime Z690-P D4 -Intel Core i5 12600 K- 32 Go Kingston Fury Renegade DDR4-3600 Mhz- Gigabyte Nvidia RTX 3060 - Go-M2 Samsung Evo 970 1Tb-SSD 512 Gb Samsung Evo 960 -SSD 512 Gb Crucial M5

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Citation :Je viens de reproduire le problème
Je n' y arrive plus

Même le curl qui plantait ne plante plus quand accept-language est défini à ru ...
Mais je pense que la fonction get_default_lang ne retourne pas toujours une valeur, ce qui me parait problèmatique.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie