добавление языковых констант в компонент Joomla javascript
мой компонент включает файл сценария java:
$doc->addScript("/components/com_cam/js/cam.js");
у меня есть несколько сообщений на стороне клиента, которые я хотел бы добавить с языковыми константами, т. е.
<?php echo JText::_('COM_CAM_SEND_LABEL'); ?>
достаточно легко в вашем интерфейсном php-коде, как по умолчанию.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!")
}
}
какова наилучшая практика для этого?
2 ответов
В Joomla! 2.5 (с 1.6 я считаю) есть JText::script()
что добавляет поддержку добавления языковых ключей к глобальному array()
чтобы ваш Javascript мог получить к ним доступ.
во-первых, в вашем PHP вы можете позвонить JText::script('COM_MYCOMPONENT_MSG1');
для каждой строки вам нужно перевести в Javascript.
вы можете использовать встроенный Joomla.JText._('COM_MYCOMPONENT_MSG1')
в вашем Javascript, чтобы получить его.
когда вы доберетесь до точки, где есть много строк для преобразования вы можете найти его проще просто разобрать файл javascript во время выполнения (in-efficient yada yada, но для back-end admin screens не такое уж большое дело).
/**
* 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);
}
}
}
создайте вспомогательную функцию для создания сообщений проверки и добавьте ее в head
.
что-то вроде bellow, просто отредактируйте его в соответствии с вашими потребностями
$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);