我没有看到任何机制来引用视图中的一个将被模板分析器重写的language_key.现在,我的视图包含如下字符串:
{register} {userid} {password}
我希望这些替换为语言定义中的匹配字符串,就好像我在视图中这样做了:
<?=$this->lang->line('register')?> <?=$this->lang->line('userid')?> <?=$this->lang->line('password')?>
但是,我没有看到任何自动支持此功能的机制.所以,我在控制器中这样做:
$data = array( 'userid' => $this->lang->line('userid'),'password' => $this->lang->line('password'),'register' => $this->lang->line('register') ); $this->parser->parse('register',$data);
这对我来说似乎很愚蠢.我认为Template Parser类应该自动支持扩展任何已定义的language_keys.也许通过使用第二组分隔符:
[register] [userid] [password]
或者也许使用像下划线这样的指标:
{_register} {_userid} {_password}
或者也许是GetText风格:
_(register) _(userid) _(password)
有人可以告诉我,我正在寻找的功能是否实际可用,我只是错过了它?否则,我的建议看起来是否合理,或者是否有更好的替代想法?
不幸的是,CI内置的模板解析器类没有此功能.你可以在
sparks directory中环顾四周,有多个火花集成了许多模板引擎,如smarty或twig,可以通过调整来创建这样的东西.
原文链接:https://www.f2er.com/php/134338.html此外,您可以尝试扩展CI_Parser类来为您执行此操作,如下所示:
<?PHP class MY_Parser extends CI_Parser { const LANG_REPLACE_REGEXP = '!\{_\s*(?<key>[^\}]+)\}!'; public $CI = null; public function parse($template,$data,$return = FALSE) { $this->CI = get_instance(); $template = $this->CI->load->view($template,TRUE); $template = $this->replace_lang_keys($template); return $this->_parse($template,$return); } protected function replace_lang_keys($template) { return preg_replace_callback(self::LANG_REPLACE_REGEXP,array($this,'replace_lang_key'),$template); } protected function replace_lang_key($key) { return $this->CI->lang->line($key[1]); } }
这将使用$this-> lang-> line(‘password’)替换{_ password}之类的部分.可以针对您喜欢的版本调整模式.
将其置于application / libraries / MY_Parser.PHP和CI之下应该选择它,不需要更改控制器代码,如Extending Native Libraries部分所述.