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

  [Opened] Internationaliser un JavaScript avec un template

Posted by Powermanga on 09/30/2009 13:23

Bonjour,

J'ai eu besoin d'internationaliser un script JavaScript qui contenait des chaînes de caractères en dur.

J'ai donc créé un fichier template « monJavaScript.tpl », en utilisant des méthodes «{literal}», ainsi que la syntaxe « @selecteurDeLocale@ ».

J'ai créé un contrôleur comme suit :

  class scriptCtrl extends jController {
    function monJavaScript() {
      $rep = $this->getResponse('text');
      $rep->addHttpHeader('Content-Type',
                          'application/x-javascript;charset='
                           .$GLOBALS['gJConfig']->charset,false);
      $tpl = new jTpl();
      $rep->content = $tpl->fetch('monModule~monJavaScript',
                                  'text', true, false); 
      return $rep;
    }
  }

Et également un template de type « meta » comme suit :

  function jtpl_meta_html_monJs($tpl,
                                $method,
                                $selector,
                                $params = array(),
                                $escape = true) {
    global $gJCoord;
    if($gJCoord->response->getType() != 'html') {
      return;
    }   
    $params['lang'] = jLocale::getCurrentLang();
    $url = jUrl::get($selector, $params, ($escape ? 1 : 0 )); 
    switch($method){
       case 'js':
       $gJCoord->response->addJSLink($url);
       break;
    }   
  }

Je peux donc inclure mon script JavaScript dans un template HTML comme suit :

 {meta_monJs js 'monModule~script:monJavaScript@classic'}

Ça marche bien, pas de souci donc.

Mais je me pose la question à savoir si on pouvait faire plus simple ? Et ce que ça vaut au niveau performance ?

Merci.

  [Opened] Re: Internationaliser un JavaScript avec un template

Reply #1 Posted by laurentj on 09/30/2009 13:33

sympa, mais niveau perf, je pense qu'il y a mieux.

Si les chaines à localiser sont statiques, personellement, je ferais comme ça:

  1. dans le fichier js, je ferais appel à un objet ou un tableau JS contenant toutes les chaines
  2. je definirais cet objet dans un fichier à part, avec un fichier par langue.
  3. j'indiquerai juste l'url du premier fichier JS et l'url du fichier de langue correspondant à la langue courante

ça fait une requete http en plus mais ça soulage le serveur. Et ça le soulage d'autant plus que ces fichiers seront mis en cache dans le navigateur. ça ne sera pas le cas avec ton contrôleur. À moins que tu modifies ton action de manière à gérer les entetes http pour le cache.

  [Opened] Re: Internationaliser un JavaScript avec un template

Reply #2 Posted by laurentj on 10/01/2009 14:02

je n'ai plus en tête le protocole, mais c'est un truc dans le genre, oui.

 
Page
  1. Internationaliser un JavaScript avec un template