我的语言文件包含一长串字符串供我的视图文件使用。 我的问题是如何将变量或配置项传递给语言文件?
<?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传递给它。我只是不知道如何。
谢谢!
答案 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);