Codeigniter:语言文件中的变量/配置项

时间:2009-11-11 19:53:15

标签: php codeigniter variables config

我的语言文件包含一长串字符串供我的视图文件使用。 我的问题是如何将变量或配置项传递给语言文件?

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="'.$this->config->item('base_url').'member/request_activation" title="Request a New Activation Key">here</a>.';

我愿意接受

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="'.$base_url.'member/request_activation" title="Request a New Activation Key">here</a>.';

并以某种方式将base_url传递给它。我只是不知道如何。

谢谢!

2 个答案:

答案 0 :(得分:5)

在CI论坛中,nlogachev建议更好的解决方案。
它可以切换变量顺序。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Language extends CI_Language
{

    function MY_Language()
    {
        parent::CI_Language();
    }

    /**
     * Fetch a single line of text from the language array. Takes variable number
     * of arguments and supports wildcards in the form of '%1', '%2', etc.
     * Overloaded function.
     *
     * @access public
     * @return mixed false if not found or the language string
     */
    public function line()
    {
        //get the arguments passed to the function
        $args = func_get_args();

        //count the number of arguments
        $c = count($args);

        //if one or more arguments, perform the necessary processing
        if ($c)
        {
            //first argument should be the actual language line key
            //so remove it from the array (pop from front)
            $line = array_shift($args);

            //check to make sure the key is valid and load the line
            $line = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];

            //if the line exists and more function arguments remain
            //perform wildcard replacements
            if ($line && $args)
            {
                $i = 1;
                foreach ($args as $arg)
                {
                    $line = preg_replace('/\%'.$i.'/', $arg, $line);
                    $i++;
                }
            }
        }
        else
        {
            //if no arguments given, no language line available
            $line = false;
        }

        return $line;
    }


}

?> 

用例〜

//in english
$lang['some_key'] = 'Some string with %1 %2.';

//in another language
$lang['some_key'] = 'Some string %2 with %1.';

//the actual usage
echo $this->lang->line('some_key','first','second'); 

答案 1 :(得分:4)

最好的办法是将占位符放在那里,然后在你的控制器中交换它。

Lang文件:

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="%s/member/request_activation" title="Request a New Activation Key">here</a>.';

在控制器中:

$activation_message = sprintf($this->lang->line('error_activation_key_expired'), $base_url);