6

我的组件包含一个 java 脚本文件:

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

我有几个客户端消息,我想用语言常量添加,即

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

在您的前端 php 代码(如 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!")
            }
        }

对此的最佳做法是什么?

4

2 回答 2

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);
        }
    }
}
于 2013-04-21T22:41:51.980 回答
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);
于 2013-04-21T16:19:17.257 回答