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