[spip-dev] Spip 1.7.2; $force_lang et rubrique=

Bonjour,

Je suis très intéresse par la vision du multilangue base sur la sélection
faite par la personne qui visite le site.
Ayant SPIP 1.7.2, j'ai mis dans les squelettes rubrique.html en début de
body la ligne suivante
<div align="#LANG_RIGHT">#MENU_LANG</div>
et dans le fichier d'appel rubrique.php
$forcer_lang = true;

Tout fonctionne bien.

Si je fais la même chose avec un squelette rubrique=3.html, le fichier
rubrique.html est toujours sélectionne pour toute les langues.
Si je retire $forcer_lang = true; de rubrique.php le bon squelette
rubrique=3.html est appelle mais sans sélection de langue.

Ayant lu qu'une modification avait été mise dans CVS pour couvrir le même
problème dans article=xx je l'ai chargée mais sans résultat.

Aurais-je oublié un point.

Merci de votre aide et bravo pour SPIP.

Michel

Théoriquement, le bug a été corrigé. Mais chez moi ça ne marche toujours pas.

Pierre

Bonjour Pierre,

Ne voyant pas venir d'information, je me suis mis en recherche.

Je viens de changer la place du test "$forcer_lang" dand la fonction
"calculer_page_globale" du fichier "inc_calcul.php3".

En effet, la position actuelle du test supprime la possibilite de prendre
les squelettes du type "rubrique=xx".

La nouvelle place du test permet la selection des squelettes du type
"rubrique=xx" et ne permet pas la selection de la langue depuis la table
rubrique.

Il y a donc lieu de modifier:

if ($GLOBALS['forcer_lang']) {

// on ne touche plus

} else if ($id_rubrique = $contexte['id_rubrique']) {

$id_rubrique_fond = $id_rubrique;

if ($row = spip_fetch_array(spip_query("SELECT lang FROM

spip_rubriques WHERE id_rubrique='$id_rubrique'")))

Par:

// Start Modif M. Possoz

if ($id_rubrique = $contexte['id_rubrique']) {

$id_rubrique_fond = $id_rubrique;

if ($GLOBALS['forcer_lang']) {

// on ne touche plus. Pardon, je le fais car je pense que cela aide!

} else if ($row = spip_fetch_array(spip_query("SELECT lang

FROM spip_rubriques WHERE id_rubrique='$id_rubrique'")))

// End Modif M. Possoz

Et voila.

Si tu vois ma soeur anne sur le site de l'EPFL, donne lui mon bonjour.

Michel Possoz

Je viens de changer la place du test "$forcer_lang" dand la fonction
"calculer_page_globale" du fichier "inc_calcul.php3".

En effet, la position actuelle du test supprime la possibilite de prendre
les squelettes du type "rubrique=xx".

Oui, tu as tout à fait raison. Je corrige dans le CVS, ainsi, j'espère, que
le bug de forcer_lang dans les <INCLURE()>

Il serait vraiment indispensable d'avoir un site de tests, où chaque test
correspondrait à un fichier d'appel + un squelette + un résultat attendu
selon la doc. Là je perds le compte des situations complexes qui ne font pas
ce qu'on attend d'elles :slight_smile:

-- Fil

j'avais posté un patch il y a qq jours... mais je ne sais pas où il est passé.

enfin, ça revenait au même :slight_smile:

Pierre

Il serait vraiment indispensable d'avoir un site de tests, où chaque test
correspondrait à un fichier d'appel + un squelette + un résultat attendu
selon la doc. Là je perds le compte des situations complexes qui ne font pas
ce qu'on attend d'elles :slight_smile:

La correction faite dans CVS remplit son role.
Le site suivant a forcer_lang dans les appels de sommaire et rubrique. les
traductions viennent des tables langues generale et local ou du tag
<multi>des rubriques, des mots cles.
le texte de tete est une <inclusion>(lang).
http://membres.lycos.fr/dev1dester/index.php
Pour le moment pas de probleme.
Petite demande: C'est difficile de mettre le tag <multi> actif sur le nom
des groules de mots. Si tu me dis environ ou je dois agir je ferais une
proposition.
Grand merci.
Michel

Petite demande: C'est difficile de mettre le tag <multi> actif sur le
nom des groules de mots. Si tu me dis environ ou je dois agir je
ferais une proposition.

Cela marche chez moi:

http://raforum.apinc.org/mots.php3

regarde le premier groupe "Amérique du nord" et vas sur l'anglais : tu as
bien "North America".

JMB

Bonjour

Oui, tu as tout à fait raison. Je corrige dans le CVS, ainsi,
j'espère, que le bug de forcer_lang dans les <INCLURE()>

Comme je le disais hier, ça ne fonctionne vraiment pas du tout ! Je suis
donc revenu au $forcer_lang=true sur chaque appel de page :-((

J'ai même eu l'impression bizarre de régression au niveau des <:chaines:>.
Si tu regardes la page http://raforum.apinc.org et tu fais bouger la langue,
(entre français et anglais pour le moment), le terme "sites référencés" du
comptage est bien remplacé par "websites" en anglais. Dans la CVS d'hier,
j'avais "sites référencés" sour la rubrique en français et "websites" sur
celle en anglas... dans la même page donc !!!???

Il serait vraiment indispensable d'avoir un site de tests, où chaque
test correspondrait à un fichier d'appel + un squelette + un résultat
attendu selon la doc. Là je perds le compte des situations complexes
qui ne font pas ce qu'on attend d'elles :slight_smile:

Dis-moi ce que tu veux que je fasse exactement ?

JMB

Comme je le disais hier, ça ne fonctionne vraiment pas du tout ! Je suis
donc revenu au $forcer_lang=true sur chaque appel de page :-((

Je ne comprends vraiment pas ce que tu essaies de faire. Si le but c'est de
conserver la langue (de l'URL) dans les <INCLURE>, il faut faire
<INCLURE(xxx){lang}>, non ? $forcer_lang fera que le critère d'inclusion
{lang} se rapportera à la langue de l'URL et pas à la langue de l'objet
(article, rubrique, etc). (Je viens de vérifier que ça fonctionne, aussi
bien à l'intérieur qu'à l'extérieur de la boucle principale
(ARTICLES){id_article}.)

Ou alors, ce que tu suggères c'est que $forcer_lang devrait aussi forcer le
passage de &lang=xxx dans les fichiers inclus ? Mais ça serait en
contradiction avec le principe un URL = une page ; je m'explique :

<INCLURE(xxx.php3){critères}> revient à inclure la page qu'on peut appeler
directement par le navigateur xxx.php3?critères... Si on ne passe pas
{lang}, on n'a pas &lang=xx dans ce qui est "l'URL de la page inclue", donc
pas de passage de la langue.

Quand tu parles de mettre $forcer_lang=true dans mes_options.php3, le but
n'est donc pas de forcer le passage de langue dans les fichiers inclus, mais
bien de ne pas avoir à répéter $forcer_lang dans tous les fichiers d'appel.
Et ça, ça fonctionne aussi.

> Il serait vraiment indispensable d'avoir un site de tests, où chaque
> test correspondrait à un fichier d'appel + un squelette + un résultat
> attendu selon la doc. Là je perds le compte des situations complexes
> qui ne font pas ce qu'on attend d'elles :slight_smile:

Dis-moi ce que tu veux que je fasse exactement ?

Je ne sais pas trop comment ça pourrait se faire : j'imagine un site sous
CVS, avec, pour chaque problème, difficulté, discussion, fonctionnalité...
un couple php3/squelette utilisant cette fonctionnalité, et précisant le
résultat prévu par la doc. Comme ça on pourra dire précisément ce qui marche
ou pas.

La plupart des logiciels disposent d'une batterie de tests qui permettent de
valider les fonctionnalités. Pour un ensemble comme SPIP, la manière de
concevoir ces tests m'échappe un peu ; en tous cas si l'un de vous souhaite
se lancer dans cette voie, il/elle est bienvenu(e) !

-- Fil

Je viens de vérifier que ça fonctionne, aussi bien à l'intérieur
qu'à l'extérieur de la boucle principale (ARTICLES){id_article}.

Je confirme, chez moi ça marche nickel:

- j'ai dans mes_options.php3 $forcer_lang=true
- je fais des <INCLURE(...){lang}>

avec la dernière version CVS (ce matin)

Je ne sais pas trop comment ça pourrait se faire : j'imagine un site
sous CVS, avec, pour chaque problème, difficulté, discussion,
fonctionnalité... un couple php3/squelette utilisant cette
fonctionnalité, et précisant le résultat prévu par la doc. Comme ça
on pourra dire précisément ce qui marche ou pas.

Dans le même sens, est ce que quelqu'un utilise Mantis et le système
de gestion de bug de spip? j'ai l'impression que les gens qui postent
des bugs ne le fond que sur le ng?

ce qu'il faudrait, c'est que chaque bug soit posté sur mantis, avec
une pair de fichiers tout simple, qui illustrerait le
bug. Malheureusement, certain bug pourait être lié à des options
globale.

Ensuite, quelques personnes prendraient ces fichiers pour les mettre
sur un serveur de test spip. La question est la suivante: faut il
faire une version de test pour toutes les versions "release" de spip?
je veux dire que si quelqu'un passe sur la 1.7.2, et veux illustrer un
test sur cette version, il s'en fou de passer à la 1.8 alpha cvs en
développement (qui corrige peut être ce bug, mais en introduit
d'autres..).

Il faudrait donc un serveur de test pour la release officielle et un
pour la release de dev.

La plupart des logiciels disposent d'une batterie de tests qui
permettent de valider les fonctionnalités. Pour un ensemble comme
SPIP, la manière de concevoir ces tests m'échappe un peu ;

Ce qui se fait d'habitude dans un développement est la chose suivante:
- on définie le cahier des charges (les fonctionnalités générale),
- on ecrit la doc du système,
- on étudie les fonctionnalités bas niveau pour arriver à un tel
  système,
- on remanie la doc,
- on écrit une batterie de tests qui vérifie tous les points définis
  par la doc.
- on implémente.
- on test.

et on recommence le cycle pour les nouvelles fonctionnalités.

Le problème avec le cycle de base:
- j'imagine des fonctions,
- j'implémente (ha, tiens, la fonction là elle serait bien, bon,
je l'ajoute au passage)
- je fait un test comme je le sens,
- je gère les bugs et j'ecrit la doc.

qui est souvent celui adopté dans les milieux de dev non
professionnels (parce que c'est chiant et pas amusant de faire le
cycle complet, et que ça prend du temps), est que:
- quand on fait les tests, on les fait alors qu'on sait comment
c'est implémenté ("inconsciemment" on évite les bugs)
- quand on ecrit la doc:
   * on a pas trop envie de le faire,
   * les choses nous paraissent évidentes (on vient de l'implémenter)
   * on oublie la moitié des fonctions que l'on a ajoutées (à 1h du
     mat sur la demande pressé d'un utilisateur).

Je ne sais pas si c'est le cas de spip. Mais c'est peut être pour ça
que c'est difficile d'écrire des tests. Heureusement, il y a une
grande communauté qui génère elle même ces tests. Il faut juste un bon
moyen de les centraliser.

en tous cas si l'un de vous souhaite se lancer dans cette voie,
il/elle est bienvenu(e) !

c'est fou tout ce que j'aimerais faire, mais pour lequel je n'ai pas
le temps. Je n'ose pas prendre de tel engagements. Désolé. (si ça se
fait, je veux bien participer, mais je peux pas garantir un suivit à
100%, c'est le pbl de tous je pense)

Pierre

Fil wrote:

Le 5 juin, tu disais :

<citation>
Techniquement, la modif apportée dans le CVS est la suivante :
meilleure gestion de $forcer_lang : la présence de cette variable dans
mes_options.php3 ou dans le fichier d'appel :
        * désactive la recherche du squelette en fonction de la langue de
l'objet
        * désactive le critère {lang_select} automatique sur les objets
classiques (articles, breves, rubriques, sites).
        * pour la langue par défaut du site, active le contexte[lang] comme
si lang=xx était passé dans l'URL (les boucles {lang} fonctionnent donc)

Du coup les blocs multi s'affichent {toujours} dans la langue demandée par
le visiteur ; cette langue est indiquée dans {tous} les URLs des pages (sauf
si c'est la langue par défaut du site ; les <:chaines:> sont toutes das les
langue du visiteur, les dates aussi, etc.
</citation>

Pour moi c'était parfait ! Et, si tu vas aujourd'hui sur le site
http://raforum.apinc.org (j'ai l'impression de radoter !), cela fonctionne
!!!

Qu'est-ce qui focntionne !

Comme tu le dis: le visiteur regarde le site en focntion de la langue qu'il
a choisie par le MENU_LANG et passe de squelettes en squelette.

Pour cela, il fallait juste :
1 - mettre un $forcer_lang=true (où ???)
2 - passer le critère {lang} au niveau des INCLURE (on est donc d'accord !)
3 - et rien d'autre

Le problème est ce $forcer_lang=true que je mets à 2 endroits:
a - dans chaque fichier d'appel.... CA MARCHE (le site est fait comme cela
aujourd'hui)
b - je l'enlève des fichiers d'appel et le met dans mes_options.php3 et CA
NE MARCHE PAS !!!

Je veux bien faire tous les essais possibles, mais qu'on me dise quoi ! Je
veux bien laisser comme cela parce ça marche mais je ne comprends pas lors
la différence avec les options globales. J'ai aussi peut-être loupé un truc
mais cela ne fonctionnerait pas dans les deux cas !

JMB