Part of the EllisLab Network
x
 
Create New Page
 View Previous Changes    ( Last updated by xwero )

MY Language

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

class MY_Language extends CI_Language
{
    
// sqllang variables
    
var $_get = array();
    var
$_set = array();
    var
$_in = 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));    
            
}
        }
    }
    
/**
     *  sqllang
     *  sql like syntax to manipulate items from the language library
     *
     */
     /*
      * 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;
     
}
    
/*
      *  add line keys for deletion
      *
      */
     
function in($in)
     
{
        
if(is_string($in))
        
{
            $this
->_in = array_merge($this->_in,explode(',',$in));
        
}
        
elseif(is_array($in))
        
{
            $this
->_in = array_merge($this->_in,$in);
        
}
     }
    
/*
     * releases file lines or other added lines
     *
     * examples (php5):
     *
     * delete file lines :
     * $this->lang->delete('lang_file');
     * $this->lang->delete('lang_file','language');
     *
     * delete lines :
     * $this->lang->in('line1,line2')->delete();
     * $this->lang->delete('line1');
     */
    
function delete($file=null,$idiom = '')
    
{
        $langfile
= $file.'_lang'.EXT;
        if (
$idiom == '')
        
{
            $CI
=& get_instance();
            
$deft_lang = $CI->config->item('language');
            
$idiom = ($deft_lang == '') ? 'english' : $deft_lang;
        
}
        
if(!is_file(APPPATH.'language/'.$idiom.'/'.$langfile))
        
{
            
if(is_string($file))
            
{
                
unset($this->language[$file]);
            
}
            
if(count($this->_in)>0)
            
{
                
foreach($this->_in as $key)
                
{
                   
unset($this->language[$key]);
                
}
            }
        }
        
else
        
{
            
if(is_string($file) && in_array($langfile,$this->is_loaded))
            
{
                
                
include(APPPATH.'language/'.$idiom.'/'.$langfile);
                
$keys = array_keys($lang);
                unset(
$lang);
                foreach(
$keys as $key)
                
{
                    
unset($this->language[$key]);
                
}
                
return true;
            
}
        }
        
return false;
    
}
    
}

Categories: