2016-07-11 7 views
1

Ich habe Codeigniter-Anwendung die Standardsprache ist Englisch und ich habe Tow-Anker, um Sprache auf Englisch zu wechseln.
Codeigniter gewählte Sprache beibehalten

Das Problem ist, wenn ich die Sprache von english zu eg:arabic die gleiche Seite zu wechseln ändert sich aber, wenn ich auf eine andere Seite gehen, ist es wieder auf Englisch zurück.

MY_Lang.php

<?php (defined('BASEPATH')) OR exit('No direct script access allowed'); 
 
// Originaly CodeIgniter i18n library by Jérome Jaglale 
 
// http://maestric.com/en/doc/php/codeigniter_i18n 
 
//modified by Tobin Thomas 
 

 
class MY_Lang extends CI_Lang { 
 

 

 
/************************************************** 
 
configuration 
 
***************************************************/ 
 

 
// Add your languages here 
 
private $languages = array(
 
'en' => 'english', 
 
'ar' => 'arabic' 
 
); 
 

 
// special URIs (not localized) 
 
    private $special = array (
 
'admin', 
 
'assets', 
 
'editor' 
 
); 
 

 
// where to redirect if no language in URI 
 
private $uri; 
 
private $default_uri; 
 
private $lang_code; 
 

 
/**************************************************/ 
 

 

 
function MY_Lang() 
 
{ 
 
    parent::__construct(); 
 

 
    global $CFG; 
 
    global $URI; 
 
    global $RTR; 
 

 
    $this->uri = $URI->uri_string(); 
 
    $this->default_uri = $RTR->default_controller; 
 

 
    $uri_segment = $this->get_uri_lang($this->uri); 
 
    $this->lang_code = $uri_segment['lang'] ; 
 

 
    $url_ok = false; 
 
    if ((!empty($this->lang_code)) && (array_key_exists($this->lang_code, $this->languages))) 
 
    { 
 
     $language = $this->languages[$this->lang_code]; 
 
     $CFG->set_item('language', $language); 
 
     $url_ok = true; 
 
    } 
 

 
    if ((!$url_ok) && (!$this->is_special($uri_segment['parts'][0]))) // special URI -> no redirect 
 
    { 
 
     // set default language 
 
     $CFG->set_item('language', $this->languages[$this->default_lang()]); 
 

 
     $uri = (!empty($this->uri)) ? $this->uri: $this->default_uri; 
 
     $uri = ($uri[0] != '/') ? '/'.$uri : $uri; 
 
     $new_url = $CFG->config['base_url'].$this->default_lang().$uri; 
 

 
     header("Location: " . $new_url, TRUE, 302); 
 
     exit; 
 
    } 
 
} 
 

 

 

 
// get current language 
 
// ex: return 'en' if language in CI config is 'english' 
 

 
function lang() 
 
{ 
 
    global $CFG; 
 
    $language = $CFG->item('language'); 
 

 
    $lang = array_search($language, $this->languages); 
 
    if ($lang) 
 
    { 
 
     return $lang; 
 
    } 
 

 
    return NULL; // this should not happen 
 
} 
 

 

 
function is_special($lang_code) 
 
{ 
 
    if ((!empty($lang_code)) && (in_array($lang_code, $this->special))) 
 
     return TRUE; 
 
    else 
 
    return FALSE; 
 
} 
 

 

 
function switch_uri($lang) 
 
{ 
 
    if ((!empty($this->uri)) && (array_key_exists($lang, $this->languages))) 
 
    { 
 

 
     if ($uri_segment = $this->get_uri_lang($this->uri)) 
 
     { 
 
      $uri_segment['parts'][0] = $lang; 
 
      $uri = implode('/',$uri_segment['parts']); 
 
     } 
 
     else 
 
     { 
 
      $uri = $lang.'/'.$this->uri; 
 
     } 
 
    } 
 

 
    return $uri; 
 
} 
 

 
//check if the language exists 
 
//when true returns an array with lang abbreviation + rest 
 
function get_uri_lang($uri = '') 
 
{ 
 
    if (!empty($uri)) 
 
    { 
 
     $uri = ($uri[0] == '/') ? substr($uri, 0): $uri; 
 

 
     $uri_expl = explode('/', $uri, 2); 
 
     $uri_segment['lang'] = NULL; 
 
     $uri_segment['parts'] = $uri_expl; 
 

 
     if (array_key_exists($uri_expl[0], $this->languages)) 
 
     { 
 
      $uri_segment['lang'] = $uri_expl[0]; 
 
     } 
 
     return $uri_segment; 
 
    } 
 
    else 
 
    return FALSE; 
 
} 
 

 

 
// default language: first element of $this->languages 
 
function default_lang() 
 
{ 
 
    $browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : ''; 
 
    $browser_lang = substr($browser_lang, 0,2); 
 
    return (!empty($browser_lang) && array_key_exists($browser_lang, $this->languages)) ? $browser_lang: 'en'; 
 
} 
 

 

 
// add language segment to $uri (if appropriate) 
 
    function localized($uri) 
 
{ 
 
    if (!empty($uri)) 
 
    { 
 
     $uri_segment = $this->get_uri_lang($uri); 
 
     if (!$uri_segment['lang']) 
 
     { 
 

 
      if ((!$this->is_special($uri_segment['parts'][0])) && (!preg_match('/(.+)\.[a-zA-Z0-9]{2,4}$/', $uri))) 
 
      { 
 
       $uri = $this->lang() . '/' . $uri; 
 
      } 
 
     } 
 
    } 
 
    return $uri; 
 
} 
 
} 
 

 
// END MY_Lang Class 
 

 
/* End of file MY_Lang.php */ 
 
/* Location: ./application/core/MY_Lang.php */

und view.php

<div class="lang-bar pull-left"> 
 
<a href="<?php echo site_url($this->lang->switch_uri('ar'));?>" class="btn btn-success">Ar</a> 
 
<a href="<?php echo site_url($this->lang->switch_uri('en'));?>" class="btn btn-success">En</a> 
 
</div>

so wie die Sprache halten, bis der Nähe Seite

Antwort

Verwandte Themen