Je n'ai pas suivi cette discussion, mais ce serait bien de voir si les modifications sont en rapport avec [Bugtracker] ticket 1142
Hors ligne
J'ai un programme de test;
//=============================================================
$same = $user['language'];
echo '<pre> Langue initiale : '.$user['language']."
";
echo "Init :".l10n('hello')."
";
//==================================
echo "--------------------------
switch_lang_to--> it_IT
";
switch_lang_to('it_IT');
echo "1 ".l10n('hello')."
";
//==================================
echo "--------------------------
switch_lang_to--> es_ES
";
switch_lang_to('es_ES');
echo "1 ".l10n('hello')."
";
.......etc ................
switch_lang_back();
echo "switch_lang_back() --> Fin 4:".l10n('hello')."<br />";
switch_lang_back();
echo "switch_lang_back() --> Fin 3:".l10n('hello')."<br />";
........etc ....
Résultat du test avec ta solution:
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Hallo
switch_lang_back() --> Fin 3:Hallo
switch_lang_back() --> Fin 2:Hallo
switch_lang_back() --> Fin 1:Hallo
switch_lang_back() --> Fin 0:Hallo
:-(
nous ne retouvons pas la langue d'origine. (LIFI last in first in sans dépilement)
Ce que j'obtiens avec ma solution.
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Hello
switch_lang_back() --> Fin 3:Ciao
switch_lang_back() --> Fin 2:Hola
switch_lang_back() --> Fin 1:Ciao
switch_lang_back() --> Fin 0:Bonjour
:-)
nous retrouvons la langue d'origine, (LIFO)
Hors ligne
plg a écrit:
Je n'ai pas suivi cette discussion, mais ce serait bien de voir si les modifications sont en rapport avec [Bugtracker] ticket 1142
Oui, c'est en rapport (à 99%)!
Hors ligne
cljosse a écrit:
J'ai un programme de test;
Cool d'avoir un programme de test.
Essaie de empiler/dépiler aussi 2 fois la même langue et teste avec ta modif et les miennes.
Sinon, je pense avoir trouve le vrai bug, c'est un problème dans l'assignation des tableaux, un ['language'] manquant.
Code modifié avec ce qu'on a en trunk:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO if (count($switch_lang['stack']) == 0) { $prev_language = $user['language']; } else { $prev_language = end($switch_lang['stack']); } $switch_lang['stack'][] = $language; if ($prev_language != $language) { if (!isset($switch_lang['language'][$prev_language])) { $switch_lang['language'][$prev_language]['lang_info'] = $lang_info; $switch_lang['language'][$prev_language]['lang'] = $lang; } if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; $last_language = array_pop($switch_lang['stack']); if (count($switch_lang['stack']) > 0) { $language = end($switch_lang['stack']); } else { $language = $user['language']; } if ($last_language != $language) { if (!isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } }
Code modifié avec "l'optimisation":
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO // Treatment with current ingo // Language of current user is saved (it's considered OK) //if (count($switch_lang['stack']) == 0) if (!isset($switch_lang['language'][$user['language']])) { $switch_lang['language'][$user['language']]['lang_info'] = $lang_info; $switch_lang['language'][$user['language']]['lang'] = $lang; } // Change current infos $switch_lang['stack'][] = $language; $user['language'] = $language; // Load new data if necessary if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; // Get last value $language = end($switch_lang['stack']); // Change current infos if (!isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; }
On attend les résultats des tests! ;-)
Dernière modification par rub (2010-02-18 16:30:59)
Hors ligne
cljosse a écrit:
if (!isset($switch_lang['language'][$language])) // ??? on devrait plutot regarder last_language?
Je n'avais pas vu cette remarque et c'est bien la l'erreur!
Je corrige ASAP, ne prend pas en compte le post précédent!
Hors ligne
cljosse, si j'ai bien compris, dans ton algo, tu cherches à empiler uniquement si nécessaire.
Dans mon algo, je cherchais à reloader uniquement si nécessaire.
D'un point de vue syntaxe, il y a eu emmelage de pinceaux au niveaux des tableaux, des lasts et des tests isset.
J'ai fait les 2 corrections dans les 2 cas.
Avec la version trunk:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO if (count($switch_lang['stack']) == 0) { $prev_language = $user['language']; if (!isset($switch_lang['language'][$prev_language])) { $switch_lang['language'][$prev_language]['lang_info'] = $lang_info; $switch_lang['language'][$prev_language]['lang'] = $lang; } } else { $prev_language = end($switch_lang['stack']); } $switch_lang['stack'][] = $language; if ($prev_language != $language) { if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; $last_language = array_pop($switch_lang['stack']); if (count($switch_lang['stack']) > 0) { $language = end($switch_lang['stack']); } else { $language = $user['language']; } if ($last_language != $language) { if (isset($switch_lang['language'][$last_language])) { $lang_info = $switch_lang['language'][$last_language]['lang_info']; $lang = $switch_lang['language'][$last_language]['lang']; } $user['language'] = $last_language; } }
Avec la version optimisée:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO // $switch_lang['initialisation'] allow to know if it's first call // Treatment with current user // Language of current user is saved (it's considered OK on firt call) if (!isset($switch_lang['initialisation'] and !isset($switch_lang['language'][$user['language']])) { $switch_lang['initialisation'] = true; $switch_lang['language'][$user['language']]['lang_info'] = $lang_info; $switch_lang['language'][$user['language']]['lang'] = $lang; } // Change current infos $switch_lang['stack'][] = $language; $user['language'] = $language; // Load new data if necessary if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; // Get last value $language = array_pop($switch_lang['stack']); // Change current infos if (isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; }
Bien entendu, elle est à testée mais je la préférés.
Car elle empile tout, donc si on désempile de trop, il y a une erreur.
Ca ne prend pas en compte les modifications sur le user, lang entre 2 appels. (la méthode du trunk faisant des tests sur le $user, on peut avoir des soucis).
Elle continue de recharger qu'une seule fois les langues inconnues.
Seul lors du premier appel, on récupère les données en cours.
A tester bien entendu!
Hors ligne
Je tente de raccrocher les wagons et je teste ASAP ;-)
Hors ligne
Presque bon.
J'ai testé la version optimisé, la pile n'est pas correcte, à corriger:
a l'initialisation : ajouter $switch_lang['stack'][] = $user['language']
+ attention il manque une parenthese:
switch_lang['initialisation'] and
Le Double empilement ne marche pas.
Corrigé:
if (!isset($switch_lang['initialisation']) and !isset($switch_lang['language'][$user['language']])) { $switch_lang['initialisation'] = true; $switch_lang['language'][$user['language']]['lang_info'] = $lang_info; $switch_lang['language'][$user['language']]['lang'] = $lang; //--------------------------------------------------------------------------- $switch_lang['stack'][] = $user['language'] ;// //-------------------------------------------------------------------------- } // Change current infos $switch_lang['stack'][] =$language; ......
resultat des tests version optimisée et corrigée:
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 3:Ciaoswitch_lang_back() --> Fin 2:Ciao--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 4:Ciaoswitch_lang_back() --> Fin 3:Ciao--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Halloswitch_lang_back() --> Fin 3:Helloswitch_lang_back() --> Fin 2:Ciaoswitch_lang_back() --> Fin 1:Holaswitch_lang_back() --> Fin 0:Bonjour
----- FIN DU TEST 1 ----------------
version TRUNK:
Modif apportée: if (count($switch_lang['stack']) == 0) {$language = $user['language'];
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 3:Ciaoswitch_lang_back() --> Fin 2:Bonjour--------------------------
switch_lang_to--> it_IT
1 Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 4:Ciaoswitch_lang_back() --> Fin 3:Bonjour--------------------------
switch_lang_to --> es_ES
2 Bonjour
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Halloswitch_lang_back() --> Fin 3:Helloswitch_lang_back() --> Fin 2:Ciaoswitch_lang_back() --> Fin 1:Bonjourswitch_lang_back() --> Fin 0:Bonjour
----- FIN DU TEST version TRUNK----------------
Mes résultats:
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to--> it_IT
1 Ciao
fr_FR switch_lang_back() --> Fin 3:Bonjourfr_FR switch_lang_back() --> Fin 2:Bonjour--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
en_UK switch_lang_back() --> Fin 4:Helloit_IT switch_lang_back() --> Fin 3:Ciaoes_ES switch_lang_back() --> Fin 2:Holait_IT switch_lang_back() --> Fin 1:Ciaofr_FR switch_lang_back() --> Fin 0:Bonjour
Dernière modification par cljosse (2010-02-18 17:45:19)
Hors ligne
Pour la version optimisée, bien vu la remarque sur le "$switch_lang['stack'][] = $user['language']" mais ce n'est pas dans l'init qu'il faut le mettre , il faut remplacer la ligne "change info".
Car, le stack et languague sont dissociés.
Ok pour parenthèse, j'avais prévenu pas de test ;-)
Pour le trunk, ta modif n'est pas bonne, donc résultat ko.
Il faut faire aussi un "$switch_lang['stack'][] = $user['language'];"
Avec ta version, le back avec doucle empilement ne fonctionne pas...
En espérant que ca soit la bonne...
Version trunk:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO if (count($switch_lang['stack']) == 0) { $prev_language = $user['language']; if (!isset($switch_lang['language'][$prev_language])) { $switch_lang['language'][$prev_language]['lang_info'] = $lang_info; $switch_lang['language'][$prev_language]['lang'] = $lang; } } else { $prev_language = end($switch_lang['stack']); } $switch_lang['stack'][] = $user['language']; if ($prev_language != $language) { if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; $last_language = array_pop($switch_lang['stack']); if (count($switch_lang['stack']) > 0) { $language = end($switch_lang['stack']); } else { $language = $user['language']; } if ($last_language != $language) { if (isset($switch_lang['language'][$last_language])) { $lang_info = $switch_lang['language'][$last_language]['lang_info']; $lang = $switch_lang['language'][$last_language]['lang']; } $user['language'] = $last_language; } }
Version optimisée:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO // $switch_lang['initialisation'] allow to know if it's first call // Treatment with current user // Language of current user is saved (it's considered OK on firt call) if (!isset($switch_lang['initialisation']) and !isset($switch_lang['language'][$user['language']])) { $switch_lang['initialisation'] = true; $switch_lang['language'][$user['language']]['lang_info'] = $lang_info; $switch_lang['language'][$user['language']]['lang'] = $lang; } // Change current infos $switch_lang['stack'][] = $user['language']; $user['language'] = $language; // Load new data if necessary if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; // Get last value $language = array_pop($switch_lang['stack']); // Change current infos if (isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; }
Hors ligne
rub a écrit:
Pour la version optimisée, bien vu la remarque sur le "$switch_lang['stack'][] = $user['language']" mais ce n'est pas dans l'init qu'il faut le mettre , il faut remplacer la ligne "change info".
Car, le stack et languague sont dissociés.
Ok pour parenthèse, j'avais prévenu pas de test ;-)
Pour le trunk, ta modif n'est pas bonne, donc résultat ko.
Il faut faire aussi un "$switch_lang['stack'][] = $user['language'];"
Avec ta version, le back avec doucle empilement ne fonctionne pas...
En espérant que ca soit la bonne...
Je viens de tester la dernière version optimisée avec la fonction GhostTracker de mon plugin. J'ai l'impression qu'il y a encore une coquille.
Voici le code que j'utilise pour mes test (possible que la faute soit aussi là !) :
function ghostreminder($user_id, $username, $email) { global $conf; $conf_nbc_UserAdvManager = isset($conf['nbc_UserAdvManager']) ? explode(";" , $conf['nbc_UserAdvManager']) : array(); include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php'); $infos1_perso = ""; /* We have to get the user's language in database */ $query =' SELECT user_id, language FROM '.USER_INFOS_TABLE.' WHERE user_id = '.$user_id.' ;'; $data = mysql_fetch_assoc(pwg_query($query)); $language = $data['language']; /* And switch gallery to this language before using personalized and multilangual contents */ switch_lang_to($data['language']); load_language('plugin.lang', NBC_UserAdvManager_PATH); $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Ghost_reminder_of_%s', $username)); if (isset($conf_nbc_UserAdvManager[19]) and $conf_nbc_UserAdvManager[19] <> '' and isset($conf_nbc_UserAdvManager[17]) and $conf_nbc_UserAdvManager[17] == 'true') { if (function_exists('get_user_language_desc')) { $infos1 = get_user_language_desc($conf_nbc_UserAdvManager[19])."\n\n"; } else { load_language('plugin.lang', NBC_UserAdvManager_PATH); $infos1 = l10n($conf_nbc_UserAdvManager[19])."\n\n"; } resetlastvisit($user_id); } // pwg_mail($email, array( // 'subject' => $subject, // 'content' => $infos1.get_absolute_root_url(), // )); /* Switching back to default language */ switch_lang_back(); /* ********************** */ /* Email sending debugger */ /* This is only to trace */ /* the send of emails for */ /* debugging */ /* ********************** */ $content = get_user_language_desc($conf_nbc_UserAdvManager[19])."\n\n"; MailLog($subject,$content,$language); /* ********************** */ }
La langue de l'admin de la galerie est en FR et le user notifié est en EN. Voici le fichier résultant :
[Lucifer's Lair web site] test3, this is a reminder email
Bonjour.
Ceci est un message de rappel car cela fait 20 jours que vous n'êtes pas revenu sur notre galerie. Si vous ne souhaitez plus utiliser votre compte d'accès, merci de bien vouloir nous en informer en répondant à ce message. Votre compte sera alors supprimé.
A réception du présent message et sans nouvelle visite de votre part dans les 1 jours, nous serions dans l'obligation de supprimer automatiquement votre compte.
Cordialement,
L'administrateur de la galerie.
Langue :
en_UK
Le sujet du mail est bien en EN mais pas le contenu. Pourtant la langue du user est bien détectée.
[edit] A l'issue, l'interface de la galerie revient bien dans la langue d'origine FR [/edit]
Dernière modification par Eric (2010-02-18 18:39:41)
Hors ligne
Resultats ça vient.
Optimisé OK
Trunk dépilement :
switch_lang_back() --> Fin 4:Hello
switch_lang_back() --> Fin 3:Hello
-(
test sur "Envoyer un mail d'informations aux membres d'un groupe" ok en trunk
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 3:Ciao
switch_lang_back() --> Fin 2:Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Hola
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Hello
switch_lang_back() --> Fin 3:Hello
switch_lang_back() --> Fin 2:Hola
switch_lang_back() --> Fin 1:Ciao
switch_lang_back() --> Fin 0:Bonjour
----- FIN DU TEST TRUNK ---------------
Langue initiale : fr_FR
Init :Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to--> it_IT
1 Ciao
switch_lang_back() --> Fin 3:Ciao
switch_lang_back() --> Fin 2:Bonjour
--------------------------
switch_lang_to--> it_IT
1 Ciao
--------------------------
switch_lang_to --> es_ES
2 Hola
--------------------------
switch_lang_to --> it_IT
3 Ciao
--------------------------
switch_lang_to --> en_UK
4 Hello
--------------------------
switch_lang_to --> nl_NL
5 Hallo
========================================================================
switch_lang_back() --> Fin 4:Hello
switch_lang_back() --> Fin 3:Ciao
switch_lang_back() --> Fin 2:Hola
switch_lang_back() --> Fin 1:Ciao
switch_lang_back() --> Fin 0:Bonjour
switch_lang_back() --> Fin 0:Bonjour
switch_lang_back() --> Fin 0:Bonjour
----- FIN DU TEST OPTIMISEE ---------------
Hors ligne
Eric a écrit:
(...)
Le sujet du mail est bien en EN mais pas le contenu. Pourtant la langue du user est bien détectée.
[edit] A l'issue, l'interface de la galerie revient bien dans la langue d'origine FR [/edit]
Erratum! C'est OK pour moi également sur la version optimisée. J'avais oublié de passer le switch_lang_back() tout à la fin de la fonction :-/
Hors ligne
cljosse a écrit:
Resultats ça vient.
Optimisé OK
Enfin... mais il y avait quand même bcp de coquilles dans ce que j'avais fait...
On part sur la version optimisée mais j'ai quand même essayer de corrige le trunk.
Lors de back, la comparaison de la langue dépilée doit se faire la langue en cours...
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO if (count($switch_lang['stack']) == 0) { $prev_language = $user['language']; if (!isset($switch_lang['language'][$prev_language])) { $switch_lang['language'][$prev_language]['lang_info'] = $lang_info; $switch_lang['language'][$prev_language]['lang'] = $lang; } } else { $prev_language = end($switch_lang['stack']); } $switch_lang['stack'][] = $user['language']; if ($prev_language != $language) { if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; $last_language = array_pop($switch_lang['stack']); $language = $user['language']; if ($last_language != $language) { if (isset($switch_lang['language'][$last_language])) { $lang_info = $switch_lang['language'][$last_language]['lang_info']; $lang = $switch_lang['language'][$last_language]['lang']; } $user['language'] = $last_language; } }
Pour la version optimisée, j'ai vu que tu as fait plus de switch_lang_back que switch_lang_to.
J'avais pensé qu'une erreur se serait lévée... mais non...
Ton test -//:---\spam que c'est bon mais en fait non... les $lang, $lang_info sont corrects mais $user aura une langue à null.
J'ai donc rajouté un test sur la valeur du array_pop. J'ai fait aussi une version en testant le count. (laquelle prendre?)
Ca donne:
/* * Switch language to param language * All entries are push on language stack * * @param string language */ function switch_lang_to($language) { global $switch_lang, $user, $lang, $lang_info; // explanation of switch_lang // $switch_lang['language'] contains data of language // $switch_lang['stack'] contains stack LIFO // $switch_lang['initialisation'] allow to know if it's first call // Treatment with current user // Language of current user is saved (it's considered OK on firt call) if (!isset($switch_lang['initialisation']) and !isset($switch_lang['language'][$user['language']])) { $switch_lang['initialisation'] = true; $switch_lang['language'][$user['language']]['lang_info'] = $lang_info; $switch_lang['language'][$user['language']]['lang'] = $lang; } // Change current infos $switch_lang['stack'][] = $user['language']; $user['language'] = $language; // Load new data if necessary if (!isset($switch_lang['language'][$language])) { // Re-Init language arrays $lang_info = array(); $lang = array(); // language files load_language('common.lang', '', array('language'=>$language) ); // No test admin because script is checked admin (user selected no) // Translations are in admin file too load_language('admin.lang', '', array('language'=>$language) ); trigger_action('loading_lang'); load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true)); $switch_lang['language'][$language]['lang_info'] = $lang_info; $switch_lang['language'][$language]['lang'] = $lang; } else { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } } /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; // Get last value $language = array_pop($switch_lang['stack']); if (!is_null($language)) { // Change current infos if (isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } } ou bien /* * Switch back language pushed with switch_lang_to function * * @param: none */ function switch_lang_back() { global $switch_lang, $user, $lang, $lang_info; if (count($switch_lang['stack']) > 0) { // Get last value $language = array_pop($switch_lang['stack']); // Change current infos if (isset($switch_lang['language'][$language])) { $lang_info = $switch_lang['language'][$language]['lang_info']; $lang = $switch_lang['language'][$language]['lang']; } $user['language'] = $language; } }
Hors ligne
Eric a écrit:
Eric a écrit:
(...)
Le sujet du mail est bien en EN mais pas le contenu. Pourtant la langue du user est bien détectée.
[edit] A l'issue, l'interface de la galerie revient bien dans la langue d'origine FR [/edit]Erratum! C'est OK pour moi également sur la version optimisée. J'avais oublié de passer le switch_lang_back() tout à la fin de la fonction :-/
Ok.
Par contre, tu avais aussi un soucis sur le changement de la langue de ton plugin?
Tu as fait le test en utilisant le trigger?
Hors ligne
rub a écrit:
Eric a écrit:
Eric a écrit:
(...)
Le sujet du mail est bien en EN mais pas le contenu. Pourtant la langue du user est bien détectée.
[edit] A l'issue, l'interface de la galerie revient bien dans la langue d'origine FR [/edit]Erratum! C'est OK pour moi également sur la version optimisée. J'avais oublié de passer le switch_lang_back() tout à la fin de la fonction :-/
Ok.
Par contre, tu avais aussi un soucis sur le changement de la langue de ton plugin?
Tu as fait le test en utilisant le trigger?
Vu ton exemple, ca va fonctionner mais tu vas recharger la langue à chaque fois. A mon avis, ca vaut le coup de tester le trigger.
Hors ligne