ecmall语言文件的加载使用流程

本文详细介绍了ECMall电子商务平台如何通过一系列函数和类实现多语言支持,包括语言文件的加载、语言数据的获取及传递过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,ECMall startup函数启动,定义APP常量


        $app    = isset($_REQUEST['app']) ? preg_replace('/(\W+)/', '', $_REQUEST['app']) : $default_app;

        define('APP', $app);


2,frontend.base.php或者backend.base.php构造函数加载语言文件

        Lang::load(lang_file('common'));

        Lang::load(lang_file(APP));


3,Lang类的加载定义实现


    function load($lang_file)

    {

        static $loaded = array();

        $old_lang = $new_lang = array();

        $file_md5 = md5($lang_file);

        if (!isset($loaded[$file_md5]))

        {

            $new_lang = Lang::fetch($lang_file);

            $loaded[$file_md5] = $lang_file;

        }

        else

        {

            return;

        }

        $old_lang =& $GLOBALS['__ECLANG__'];

        if (is_array($old_lang))

        {

            $new_lang = array_merge($old_lang, $new_lang);

        }


        $GLOBALS['__ECLANG__'] = $new_lang;

    }


加载文件内容数组

    function fetch($lang_file)

    {

        return is_file($lang_file) ? include($lang_file) : array();

    }


构建语言文件名称

function lang_file($file)

{

    return ROOT_PATH . '/languages/' . LANG . '/' . $file . '.lang.php';

}


file变量即为请求的app名称,在ecmall启动函数中被设置


4,获取加载好的语言数据

app在display数据时使用基类ecapp.base.php的display

里面调用 

        /* 语言项 */

        $this->assign('lang', Lang::get());

设置语言数据


 Lang::get 获取预研key值

    function &get($key = '')

    {

        if (Lang::_valid_key($key) == false)

        {

            return $key;

        }

        $vkey = $key ? strtokey("{$key}", '$GLOBALS[\'__ECLANG__\']') : '$GLOBALS[\'__ECLANG__\']';

        $tmp = eval('if(isset(' . $vkey . '))return ' . $vkey . ';else{ return $key; }');


        return $tmp;

    }


ecapp.base.php使用基类的app.base.phpassign函数给视图传递变量。

    function assign($k, $v = null)

    {

        $this->_init_view();

        if (is_array($k))

        {

            $args  = func_get_args();

            foreach ($args as $arg)     //遍历参数

            {

                foreach ($arg as $key => $value)    //遍历数据并传给视图

                {

                    $this->_view->assign($key, $value);

                }

            }

        }

        else

        {

            $this->_view->assign($k, $v);

        }

    }


app.base.phpassign调用_view既是template.php的assign函数为视图添加变量。

    function assign($tpl_var, $value = '')

    {

        if (is_array($tpl_var))

        {

            foreach ($tpl_var AS $key => $val)

            {

                if ($key != '')

                {

                    $this->_var[$key] = $val;

                }

            }

        }

        else

        {

            if ($tpl_var != '')

            {

                $this->_var[$tpl_var] = $value;

            }

        }

    }


5,在视图类中设置模板后,既可以使用了。

ecapp.base.php 的display函数

        parent::display($f);

调用父类app.base.php的display函数

    function display($n)

    {

        $this->_init_view();

        $this->_view->display($n);

    }

既调用了template.php的display函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值