2013-04-20 11 views
6

La mia componente include un file di script java:costanti lingua Aggiungi a componente Joomla javascript

$doc->addScript("/components/com_cam/js/cam.js"); 

Ho diversi messaggi lato client che vorrei aggiungere con costanti lingua, vale a dire

<?php echo JText::_('COM_CAM_SEND_LABEL'); ?> 

Abbastanza facile nel tuo codice php di front-end come default.php ma per quanto riguarda i messaggi all'interno di cam.js?

Come ad esempio la mia convalida jQuery:

 messages: { 
      cam: { 
       required: "Enter a label", 
       minlength: jQuery.format("At least {0} characters required!"), 
       maxlength: jQuery.format("Maximum {0} characters allowed!") 
      } 
     } 

Qual è la migliore pratica per questo?

risposta

5

In Joomla! 2.5 (dal 1.6 credo) c'è lo JText::script() che aggiunge il supporto per l'aggiunta di chiavi di lingua a uno array() globale in modo che il tuo Javascript possa accedervi.

Innanzitutto, nel PHP è possibile chiamare JText::script('COM_MYCOMPONENT_MSG1'); per ogni stringa che è necessario tradurre nel Javascript.

È possibile utilizzare lo Joomla.JText._('COM_MYCOMPONENT_MSG1') integrato nel Javascript per recuperarlo.

Quando arrivi al punto in cui ci sono un sacco di stringhe da convertire, potresti trovare più semplice analizzare il file javascript in fase di esecuzione (in yada yada efficiente ma per gli schermi di amministrazione back-end non così grandi affare).

/** 
* Parses a javascript file looking for JText keys and then loads them ready for use. 
* 
* @param string $jsFile Path to the javascript file. 
* 
* @return bool 
*/ 
public static function loadJSLanguageKeys($jsFile) 
{ 
    if (isset($jsFile)) 
    { 
     $jsFile = JPATH_SITE . $jsFile; 
    } 
    else 
    { 
     return false; 
    } 

    if ($jsContents = file_get_contents($jsFile)) 
    { 
     $languageKeys = array(); 
     preg_match_all('/Joomla\.JText\._\(\'(.*?)\'\)\)?/', $jsContents, $languageKeys); 
     $languageKeys = $languageKeys[1]; 

     foreach ($languageKeys as $lkey) 
     { 
      JText::script($lkey); 
     } 
    } 
} 
+0

Grazie! Ho appena usato la tua prima soluzione, funziona come un fascino. – elk

0

Creare una funzione di supporto per creare messaggi di convalida e aggiungerla a head.

Qualcosa di simile a soffietto, solo modificarlo in base alle proprie esigenze

$messages = '(function ($) { 
    $.extend($.validator.messages, { 
      cam: { 
       required: "' . JText::_('COM_CAM_VALIDATION_REQUIRED') . '", 
       minlength: jQuery.format("' . JText::_('COM_CAM_VALIDATION_MINIMUM') . '"), 
       maxlength: jQuery.format("' . JText::_('COM_CAM_VALIDATION_MAXIMUM') . '") 
      } 
     }); 
}(jQuery));'; 

$doc = JFactory::getDocument(); 
$doc->addScriptDeclaration($messages); 
Problemi correlati