2013-04-20 20 views
6

Mój składnik zawiera plik skryptu Java:stałe językowe Dodaj do komponentu Joomla javascript

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

Mam kilka wiadomości po stronie klienta, które chciałbym dodać ze stałych językowych, tj

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

Wystarczająco łatwe w przednim końcu kodu php jak default.php, ale co z wiadomości wewnątrz cam.js?

Taki jak mój sprawdzania poprawności jquery:

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

Co to jest najlepsze praktyki dla tego?

Odpowiedz

5

w Joomla! 2.5 (od 1.6 Wierzę) jest JText::script(), który dodaje obsługę dodawania kluczy językowych do globalnego array(), aby twój Javascript mógł uzyskać do nich dostęp.

Po pierwsze, w swoim PHP możesz zadzwonić pod numer JText::script('COM_MYCOMPONENT_MSG1'); dla każdego ciągu, który chcesz przetłumaczyć w swoim Javascript.

Możesz użyć wbudowanego Joomla.JText._('COM_MYCOMPONENT_MSG1') w swojej przeglądarce JavaScript, aby go pobrać.

Kiedy dojdziesz do momentu, w którym będzie wiele konwertowanych napisów, łatwiej będzie po prostu przeanalizować plik javascript w czasie wykonywania (nieefektywne yada yada, ale ekrany administracyjne back-end nie są tak duże sprawa).

/** 
* 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

Dziękujemy! Użyłem twojego pierwszego rozwiązania, działa jak czar. – elk

0

Utwórz funkcję pomocniczą, aby budować wiadomości sprawdzania poprawności i dodaj ją do head.

Coś jak mieszka, tylko edytować go do własnych potrzeb

$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);