2013-04-20 4 views
6

Моего компонента включает в себя файл Java Script:добавить языковые константы для компонента Joomla Javascript

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

У меня есть несколько стороны клиента сообщения, которые я хотел бы добавить с языковыми константами, т.е.

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

Достаточно легко в вашем php-коде front-end, например default.php, но как насчет сообщений внутри cam.js?

Такие, как мой Jquery проверка:

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

Что является лучшей практикой для этого?

ответ

5

В Joomla! 2.5 (с 1.6, я считаю) есть JText::script(), который добавляет поддержку добавления языковых ключей в глобальный array(), чтобы ваш Javascript мог получить к ним доступ.

Прежде всего, на вашем PHP вы можете позвонить JText::script('COM_MYCOMPONENT_MSG1'); для каждой строки, которую вам нужно перевести в вашем Javascript.

Вы можете использовать встроенный Joomla.JText._('COM_MYCOMPONENT_MSG1') в своем Javascript для его получения.

Когда вы дойдете до точки, в которой есть много строк для преобразования, вам может быть проще просто проанализировать файл javascript во время выполнения (эффективный yada yada, но для внешних экранов администратора не такой большой по рукам).

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

Спасибо! Я просто использовал ваше первое решение, работает как шарм. – elk

0

Создайте вспомогательную функцию для создания сообщений проверки и добавьте их в head.

Нечто подобное сильфона, просто изменить его в соответствии с вашими потребностями

$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); 
Смежные вопросы