Skip to content
World Wide Web Server edited this page Jul 4, 2012 · 9 revisions

Category:Libraries::Extended If you want to add your own methods, go ahead

[code] class MY_Language extends CI_Language { var $_get = array(); var $_set = array();

function MY_Language()
{
    parent::CI_Language();
}
/**
* Makes switching between languages easier
*
*  example : http://codeigniter.com/forums/viewreply/339962/
*/
function switch_to($idiom)
{
    $CI =& get_instance();
    if(is_string($idiom) && $idiom != $CI->config->item('language'))
    {
        $CI->config->set_item('language',$idiom);
        $loaded = $this->is_loaded;
        $this->is_loaded = array();
            
        foreach($loaded as $file)
        {
            $this->load(str_replace('_lang.php','',$file));    
        }
    }
}
/**
 * sql like syntax to get one or more language lines
 *
 */
 /*
  * select more than one line using the full line keys
  */
function select($select,$prefix='')
{
    
    if(is_string($select))
    {
        $temp = explode(',',$select);
        array_walk($temp, create_function('&$v,$k,$pre', '$v = $pre.$v;'),$prefix);
        $this->_get = $temp;
    }
    elseif(is_array($select))
    {
        array_walk($select, create_function('&$v,$k,$pre', '$v = $pre.$v;'),$prefix);
        $this->_get = $select;
    }
}
/*
 * select one or more lines using a part of the line key
 */
function like($like,$side = 'after')
{
    switch($side)
    {
        case 'before': $pattern = '/^'.$like.'/'; break;
        case 'after': $pattern = '/'.$like.'$/'; break;
        default: $pattern = '/'.$like.'/'; break;
    }
    $keys = array_keys($this->language);
    foreach($keys as $key)
    {
        if(preg_match($pattern,$key) && !in_array($key,$this->_get))
        {
            $this->_get[] = $key;
        }
    }
}
/*
 * select one line using the parameter or process select and/or like method
 *
 * examples (php5):
 *
 *  $this->lang->get('line');
 *  $this->lang->select('line1,line2')->get();
 *  $this->lang->select('1,2','line')->get();
 *  $this->lang->like('line')->get(); // gets line,line1,line2
 *  $this->lang->like('1','before')->get(); // gets line1
 *  $this->lang->select('line1','line2')->like('line')->get(); // gets line, line1,line2
 */
function get($line=null)
{
    // line key added to get method
    if(is_string($line))
    {
        return (! isset($this->language[$line])) ? FALSE : $this->language[$line];
    }
    // select or like method is used
    if(count($this->_get) > 0)
    {
        $temp = array();
        foreach($this->_get as $line)
        {
            $temp[$line] = (! isset($this->language[$line])) ? FALSE : $this->language[$line];
        }
            return $temp;
    }
    // if none of the possibilities are met
    return false;
}
/*
 * set a key-value pair or an array to replace placeholders with actual values
 */
 function set($set,$value=null)
 {
     if(is_string($set) && is_string($value))
     {
         $this->_set[$set] = $value;
     }
     if(is_array($set))
     {
         foreach($set as $key=>$val)
         {
            $this->_set[$key] = $val; 
         }
         
     }
 }
 /*
  * inserts line(s) using 2 parameters or uses the _set array
  *
  */
 function insert($insert,$value=null)
 {
    if(is_string($insert) && is_string($value))
    {
        if(!isset($this->language[$key]))
        {
            $this->language[$insert] = $value;
        }
    }
    if(count($this->_set) > 0)
    {
        foreach($this->_set as $key=>$val)
        {
            if(!isset($this->language[$key]))
            {
                $this->language[$key] = $val;
            }
        }
    }
 }
 /*
  * update line when parameter is string else update lines set by select,like
  *
  * examples (php5):
  *
  * $this->lang->set('[0]','10')->update('line');
  *
  * $set = array('[0]'=>10,'[1]'=>'you');
  * $this->lang->set($set)->update('line');
  *
  * $this->lang->select('line1','line2')->set('[0]','10')->update();
  * $this->lang->like('line')->set('[0]','10')->update();
  */
 function update($line = null)
 {
     if(is_string($line) && count($this->_set) > 0)
     {
         foreach($this->_set as $key=> $val)
         {
             $this->language[$line] = str_replace($key,$val,$this->language[$line]);
         }
         return true;
     }
     if(count($this->_get) > 0 && count($this->_set) > 0)
     {
         $i = 0;
         foreach($this->_get as $line)
         {
             foreach($this->_set as $key2=> $val2)
             {
                 if(is_array($val2))
                 {
                    $this->language[$line] = str_replace($key2,$val2[$i],$this->language[$line]);
                 }
                 else
                 {
                    $this->language[$line] = str_replace($key2,$val2,$this->language[$line]);
                 }
             }
             $i++;
         }
         return true;
     }
     return false;
 }
/*
 * release file and its lines
 *
 * examples (php5):
 *
 * $this->lang->delete('lang_file');
 * $this->lang->delete('lang_file','language');
 */
function delete($file=null,$idiom = '')
{
    $langfile = $file.'_lang'.EXT;
    if(is_string($file) && in_array($langfile,$this->is_loaded))
    {
        if ($idiom == '')
    {
       $CI =& get_instance();
       $deft_lang = $CI->config->item('language');
       $idiom = ($deft_lang == '') ? 'english' : $deft_lang;
    }
        include(APPPATH.'language/'.$idiom.'/'.$langfile);
        $keys = array_keys($lang);
        unset($lang);
        foreach($keys as $key)
        {
            unset($this->language[$key]);
        }
        return true;
    }
    return false;
}

} [/code]

Clone this wiki locally