2009-11-11 58 views
2

我有一个语言文件,其中有一长串的字符串用于查看我的文件。 我的问题是如何将变量或配置项传递给语言文件?Codeigniter:语言文件中的变量/配置项

<?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某种方式传递给它。我只是不知道如何。

谢谢!

回答

4

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

朗文件:

<?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); 
+0

我的BASE_URL多次引用遍及语言文件。重复会有问题吗? – 2009-11-11 20:16:08

+0

不完全确定你的意思。重复在哪里? – Thody 2009-11-11 20:24:10

+0

对不起,nm。 您的解决方案非常完美。谢谢! – 2009-11-11 20:29:19

4

在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'); 
+2

完美答案。在我看来,你的答案必须被接受。 – 2013-07-13 21:44:12