将语言常量添加到Joomla组件javascript中

Tom*_*Tom 6 joomla joomla2.5

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

$doc->addScript("/components/com_cam/js/cam.js");
Run Code Online (Sandbox Code Playgroud)

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

<?php echo JText::_('COM_CAM_SEND_LABEL'); ?>
Run Code Online (Sandbox Code Playgroud)

你的前端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!")
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是什么最好的做法?

Cra*_*aig 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)