[Opened] Recuperer donné sql avec jlocale
Posted by vinze420 on 12/18/2009 10:05
Bonjour , je me tourne vers la communauté pour avoir quelques renseignements sur la fonction jlocale car je bloque un peu . mon probleme est le suivant : j'utilise jlocale pour internationaliser mon site , pour tout le texte statique du site pas de problème par contre je voudrais pouvoir récupérer une entrée sql en fonction de la langue . En gros pour l instant dans mon template j ai :
{$product->record->description|stripslashes}
la ligne ci dessus m'affiche la description d'un produit , j ai cree dans la partie admin du site plusieurs descriptions (description fr , description en etc) et j aimerais recuperer la description qui correspond au langage adéquate , j ai donc essayé (comme un noob que je suis):
{$product->record->{jlocale 'default~product.1'}|stripslashes}
et dans le fichier langue je mettais (pour le francais par exemple) :
1 = description
Mais cela ne fonctionne pas .J ai ensuite essayer de mettre tout le code dans le fichier langue mais pas mieux . Apres j'ai crée une variable dans mon controlleur qui reprenait "{$product->record->{jlocale 'default~product.1'}|stripslashes}" mais en vain .
Je suis un peu en panne d'idée je me demande meme si la fonction jlocale peut etre utiliser dans un tel cas ?
Je vous remercie d'avance pour vos reponses .
Salutations jelixienne.
[Opened] Re: Recuperer donné sql avec jlocale
Posted by laurentj on 12/18/2009 14:44
Salut,
tu n'as pas besoin d'utilise jLocale, et effectivement ça, ça ne fonctionne pas
{$product->record->{jlocale 'default~product.1'}|stripslashes}
tout simplement parce que tu ne peux pas appeler un plugin dans un autre plugin.
Ce qu'il faut que tu fasse, c'est assigner le code langue à ton template
$tpl->assign("lang", $GLOBALS['gJConfig']->locale);
Et faire afficher tel ou tel champs en fonction de ça.
Ou encore, faire un truc du genre
switch($GLOBALS['gJConfig']->locale) { case 'fr_FR': $descfield = 'description_fr'; break; case 'en_US': default: $descfield = 'description_en'; break; } $tpl->assign('descfield', $descfield);
et dans ton template
{$product->record->$descfield|stripslashes}
Et toutes les variantes possibles autour de l'usage, donc, de l'option 'locale' de la config.
[Opened] Re: Recuperer donné sql avec jlocale
Posted by vinze420 on 12/18/2009 16:25
Merci beaucoup de tes renseignements , j ai suivi tes infos et j'ai ajouter
switch($GLOBALS['gJConfig']->locale) { case 'fr_FR': $descfield = 'description'; break; case 'en_EN': $descfield = 'description_en'; break; case 'it_IT': $descfield = 'description_it'; break; }
dans ma classe et j ai ajouté :
$tpl->assign('descfield', $descfield);
dans mon controleur et enfin :
{$product->record->$descfield|stripslashes}
dans mon template. Mais malheuresement j'obtiens l'erreur suivante:
[error 1] Object of class jTpl could not be converted to string
Il doit rester un detail qui bloque mais je vois pas pour l instant.
Merci pour ton aide.
[Opened] Re: Recuperer donné sql avec jlocale
Posted by foxmask on 12/18/2009 22:20
vider le cache de l'application ?
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] Re: Recuperer donné sql avec jlocale
Posted by vinze420 on 12/18/2009 23:07
Je viens d'essayer mais pas mieux . Merci.
[Opened] Re: Recuperer donné sql avec jlocale
Posted by foxmask on 12/19/2009 14:27
essaye le premier cas de laurentj
1) dans la méthode du contrôleur :
$tpl->assign("lang", $GLOBALS['gJConfig']->locale);
2) dans le template lui même
{if $lang == 'fr_FR'}
{$product->record->description_fr}
{elseif $lang == 'en_EN'}
{$product->record->description_en}
{elseif $lang == 'it_IT'}
{$product->record->description_it}
{/if}
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] Re: Recuperer donné sql avec jlocale
Posted by laurentj on 12/20/2009 22:26
ah oui, mille excuses, car ça :
$product->record->$descfield
ça ne peut pas fonctionner, parce qu'en fait c'est transformé par jtpl en
$t->_vars['product']->record->$t->_vars['descfield']
Il faut donc utiliser la solution expliquée par foxmask
[Opened] Re: Recuperer donné sql avec jlocale
Posted by vinze420 on 12/21/2009 22:50
Bonsoir , merci beaucoup pour vos reponses , je pense que ta solution foxmask devrait marcher mais malheureusement ca ne marche pas , j ai bien suivit tes instructions mais je pense avoir un autre problème ,j'utilise une source de site faite avec jelix mais dans une version inferieure à la 1.0.1 (en tout cas je pense car dans mon default.config.ini la premiere variable est defaultmodule alors qu apparement a partir de la version 1.0 beta3 elle s apelle start module) et je me demande si cela ne poserait pas probleme , par exemple la variable $tpl s apelle $rep dans mon code (pour mon controlleur j ai mit $rep->body->assign("lang", $GLOBALS'gJConfig'->locale)), bon si c est juste un nom de variable pas trop de soucis mais je pense que dut à la version ancienne que j'ai il me manque des choses dans le repertoire "lib" . J'ai essaye de mettre a jour mais apparement j 'ai beaucoup de modifications a faire pour me mettre a jour et mon site et il presque finit, j'aurais prefere faire le prochain directement sur les dernieres distrib. Pensez-vous que la version peut poser probleme ?
Merci.
[Opened] Re: Recuperer donné sql avec jlocale
Posted by vinze420 on 12/21/2009 23:42
Je viens de regarder plus precisement et je pense que mon probleme vient bien de la version de jelix que j'utilise , je vous poste ma class jlocale :
class jLocale { /** * */ static $bundles = array(); /** * static class... */ private function __construct(){} /** * gets the current lang * @return string */ static function getCurrentLang(){ $s=$GLOBALS['gJConfig']->defaultLocale; return substr($s,0, strpos($s,'_')); } /** * gets the current country. * @return string */ static function getCurrentCountry (){ $s=$GLOBALS['gJConfig']->defaultLocale; return substr($s,strpos($s,'_')+1); } /** * gets the correct string, for a given language. * if it can't get the correct language, it will try to gets the string * from the default language. * if both fails, it will raise an exception. * @param string $key the key of the localized string * @param array $args arguments to apply to the localized string with sprintf * @param string $locale the lang code. if null, use the default language * @param string $charset the charset code. if null, use the default charset * @return string the localized string */ static function get ($key, $args=null, $locale=null, $charset=null) { global $gJConfig; try{ $file = new jSelectorLoc($key, $locale, $charset); }catch(jExceptionSelector $e){ if($e->getCode() == 12) throw $e; if ($locale === null) $locale = $gJConfig->defaultLocale; if ($charset === null) $charset = $gJConfig->defaultCharset; throw new Exception('(200)The given locale key "'.$key.'" is invalid (for charset '.$charset.', lang '.$locale.')'); } $locale = $file->locale; $keySelector = $file->module.'~'.$file->fileKey; if (!isset (self::$bundles[$keySelector][$locale])){ self::$bundles[$keySelector][$locale] = new jBundle ($file, $locale); } $bundle = self::$bundles[$keySelector][$locale]; //try to get the message from the bundle. $string = $bundle->get ($file->messageKey, $file->charset); if ($string === null){ //if the message was not found, we're gonna //use the default language and country. if ($locale == $gJConfig->defaultLocale){ throw new Exception('(210)The given locale key "'.$file->toString().'" does not exists in the default lang for the '.$file->charset.' charset '); } return jLocale::get ($key, $args, $gJConfig->defaultLocale); }else{ //here, we know the message if ($args!==null){ $string = call_user_func_array('sprintf', array_merge (array ($string), is_array ($args) ? $args : array ($args))); } return $string; } }
}
j ai modifie le "$GLOBALS'gJConfig'->locale" en "$GLOBALS'gJConfig'->defaultLocale" mais toujours rien qui s affiche , c'est la derniere chose qui me pose probleme je suis comme un fou ...
[Opened] Re: Recuperer donné sql avec jlocale
Posted by foxmask on 12/22/2009 01:02
je ne connais pas la v 1.0.x
3 choses :
- passer à la 1.1.x (recommandé)
- sinon faire un var_dump($gJConfig); dans le controleur puis chercher "locale" qqpart sur la page
- ou regarder le nom du paramètre contenant la locale dans le fichier defaultconfig.ini.php
cdt.
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !