[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 !

