FORMULAIRE_LOGIN dans la mauvaise langue

Bonjour

Dans un squelette d’article en accès restreint je voudrais mettre, dans le cas où c’est nécessaire, deux lignes pour que les visiteurs s’identifient :

    <p><:vous_devez_vous_identifier:><p>
    #FORMULAIRE_LOGIN

Si j’appelle ma page sans mettre de paramètre langue dans l’URL, la première ligne s’affiche en français (langue principale du site), en prenant bien entendu la traduction adéquate dans le fichier de langue fr.
Mais le formulaire de login est traduit en anglais !

En appelant la page avec un paramètre lang=fr tout est bien en français, mais il n’est pas toujours possible de mettre ce paramètre, notamment dans le cas d’un lien dans le texte d’un article (voir->99)

J’ai essayé de mettre les 2 lignes ci-dessus dans un modèle que j’appelle avec {lang} ou même {lang=fr}, c’est pareil, le formulaire de login est toujours en anglais !

Que puis-je faire pour qu’il soit dans la même langue que ce qui précède, sans paramètre langue ?

Voir Forcer la langue selon le visiteur - Programmer avec SPIP 4 et les articles connexes…

Et donc, probablement essayer ceci dans mes_options.php

$GLOBALS['forcer_lang'] = true;

Dans ce cas, on demande une identification, donc le visiteur n’est pas identifié et on ne peut donc pas forcer la langue selon le visiteur.

As-tu bien lu tout l’article que @placido t’as proposé ? Notamment cette partie :

sinon, la fonction utiliser_langue_visiteur() prend la langue du cookie, sinon la langue du navigateur

Oui, j’ai lu l’article, mais vous ne semblez pas avoir lu attentivement mes messages.

Le problème se produit alors qu’aucun auteur n’est identifié, donc prendre/forcer la langue de l’auteur/du visiteur n’a aucun sens.

Et ce point ne répond pas à ton besoin ?

Avec $GLOBALS['forcer_lang'] = true; ce n’est pas beaucoup mieux :

La 1ère ligne et le formulaire de login sont tous les deux… en anglais !

En mettant mon navigateur en italien, c’est pareil : il ne semble pas que la langue du navigateur soit prise en compte.

Il n’y a pas de paramètre lang, la langue principale du site est le français, personne n’est identifié : pourquoi l’anglais est il activé ?

Vous pouvez essayer ce squelette simplifié :

#CACHE{0}
<!DOCTYPE html>
<html dir="#LANG_DIR" lang="#LANG">
<head>
<meta http-equiv='Content-Language' content='#LANG' />
<meta http-equiv='Content-Type' content='text/html; charset=#CHARSET' />
#INSERT_HEAD
<!-- fin insert_head -->
<title>TEST</title>
</head>
<body>
<BOUCLE1(CONDITION){si #SESSION{statut}|oui}>
<p>connecté : #SESSION{nom}</p>
<a href="#URL_LOGOUT"><:vous_deconnecter:></a>
</BOUCLE1>
</B1>
<p>non identifié.</p>
<p>lang : =#LANG</p>
<p>texte à traduire : <:visible_reservation:><p>
#FORMULAIRE_LOGIN
</B1>
</body>

bonjour,
est-ce que tu est resté en statut connecté?
Claude

Peut-être quelque chose comme ça :

[(#INFO_LANG{article,#ENV{id_article}}|set{l,1}|oui)
	[(#GET{l}|changer_langue)]
]
<p><:vous_devez_vous_identifier:><p>
#FORMULAIRE_LOGIN

Bien sûr que non, un FORMULAIRE_LOGIN n’a pas de sens quand on est connecté.

Placido, peux tu expliquer ce que fait le code que tu indiques ?

Il ne fait absolument rien de plus que le mien. Le formulaire est toujours en anglais après un message traduit en français.

Notamment que fait #INFO_LANG ? Je ne vois rien dans la doc sur cette balise.

hello

  • forcer_lang n’a aucun rapport avec « une personne connectée », mais avec le visiteur (qui peut parfaitement être anonyme), qui peut donc avoir un cookie de langue (si t’as un formulaire ou des liens pour choisir la langue), et si ya pas de cookie, ça prend la langue du navigateur, si elle existe dans les langues choisies pour le site… sinon la langue par défaut du site
  • et donc tu n’as pas indiqué la langue par défaut de ton site aussi il me semble (ou j’ai raté)
  • chelou quand même que la chaine de langue et le formulaire ne prenne pas la même langue si les deux sont placés au même endroit (à la racine d’un squelette, sans contexte passé ?), jamais vu ça en ce qui me concerne

La balise #INFO_XXX et la fonction changer_langue()

En gros, juste avant de charger #FORMULAIRE_LOGIN, on vérifie que le contexte de la page contient un id_article ; on récupère la valeur lang associée à ce dernier, et on l’assigne manuellement, en remplacement de la valeur par défaut du site #CONFIG{langue_site}

Est-ce tu peux confirmer que cela fonctionne ? (?var_mode=recalcul est nécessaire)

Bonjour,

Placido, ton code ne change rien.

Dès que j’appelle FORMULAIRE_LOGIN dans une page qui ne spécifie pas une langue ( &lang=xx dans l’URL) celui-ci est en anglais. J’ai trouvé une raison, c’est vraisemblablement parce qu’il y a un cookie lang=en qui est présent. Mais je ne vois pas bien la raison de la raison. Par quoi ce cookie a été envoyé à mon navigateur ce matin, alors que je n’ai pas choisi l’anglais, que je n’ai aucun #MENU_LANG dans mes squelettes, ni rien dans mon propre code qui envoie des cookies ? Peut être faudrait-il justement que j’envoie ce cookie quand je sélectionne une langue…

Je ne vois pas non plus pourquoi il détermine la langue du formulaire et pas celle du texte traduit (du moins lorsqu’on n’a pas $GLOBALS['forcer_lang'] = true;) . Il y a là une incohérence, à mon avis.

Tant pis. Soit je vais essayer d’envoyer le cookie au changement de langue, soit je continuerai à afficher le formulaire de login sur une autre page appelée avec un paramètre lang, ce qui fonctionne bien.

Merci de vous être penchés sur mon cas.