Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [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

Reply #1 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

Reply #2 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

Reply #3 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

Reply #4 Posted by vinze420 on 12/18/2009 23:07

Je viens d'essayer mais pas mieux . Merci.

  [Opened] Re: Recuperer donné sql avec jlocale

Reply #5 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

Reply #6 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

Reply #7 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

Reply #8 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

Reply #9 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 !

 
Page
  1. Re: Recuperer donné sql avec jlocale