2016-03-30 26 views
0

Ich brauche Sprache erscheinen in der URL für mehrsprachige Website. Hier ist mein Code:URL Codeigniter für mehrsprachige Website

public function changeLang($lang_code){ 
        $this->session->set_userdata('language',$lang_code); 
        redirect($_SERVER['HTTP_REFERER']."".$this->language); 
       } 

Wenn ich diesen Weg schreibe, erscheint eine andere Sprache in URL. Zum Beispiel, egal welche Sprache ich wählte, gibt es für Englisch http://localhost/new/en. oder es erhöht http://localhost/new/enen. Danke im Voraus.

+0

Nur eine Vermutung. Vor der Umleitung: if (substr ($ _ SERVER ['HTTP_REFERER'], - 2)! = $ Lang_code) – Andreas

+0

Hallo Andreas, danke für die Antwort. In meinem Fall zumindest hat es nicht funktioniert :( – Nan

Antwort

0

Ich verstehe, dass Sie mehrsprachige Anwendung erstellen und die Sprache von URL identifizieren möchten, nicht wahr?

Wenn ja, empfehle ich Ihnen, einen Controller in Ihrer Anwendung/Kern erstellen

class MY_Controller extends CI_Controller{ 
    public function redirect($language = NULL){ 
     $this->_set_language($language); 

     $uri    = array(
            'direcotry'  => $this->_get_directory(), 
            'class'   => $this->_get_class(), 
            'method'  => $this->_get_method(), 
            'language'  => $this->get_language() 
            ); 

     return $uri; 
    } 

    public function get_language(){ 
     $this->language  = (empty($this->session->userdata('language'))) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : $this->session->userdata('language'); 

     return $this->language; 
    } 

    private function _set_language($language){ 
     $this->session->set_userdata('language', $language); 

     $this->_set_lang_language(); 
    } 

    private function _set_lang_language($language = ''){ 
     switch($language){ 
      case 'en': 
         $new = 'english'; 
         break; 
      case 'es': 
         $new = 'spanish'; 
         break; 
      default: 
         $new = 'english'; 
         break; 
     } 

     $this->lang->load('calendar', $new); 
     $this->lang->load('date', $new); 
     $this->lang->load('db', $new); 
     $this->lang->load('email', $new); 
     $this->lang->load('form_validation', $new); 
     $this->lang->load('ftp', $new); 
     $this->lang->load('imglib', $new); 
     $this->lang->load('number', $new); 
     $this->lang->load('profiler', $new); 
     $this->lang->load('unit_test', $new); 
     $this->lang->load('upload', $new); 
    } 
} 

Sie eine ausgewählte Sprache in der Kopfzeile o so etwas haben, wen Sie klicken in einer bestimmten Sprache machen, werden Sie rufen die uri Homepage/ändern/{$ language} Ihre normalen Controller

class HomePage extends MY_Controller{ 
    public function change ($language = '', $uri = NULL){ 
     $this->redirect($language); 

     redirect($uri, 'refresh'); 
    } 
} 
+0

Hallo elddenmedio, danke für die Antwort, Es gab mir einen Fehler. 'Fehler Nachricht: Aufruf an undefinierte Methode Home :: redirect()'. Aber ich fand eine andere Lösung zu diesem : "public function changeLang ($ lang_code = '', $ uri = NULL) { $ this-> lang-> laden ('main', $ lang_code == ''? 'englisch': $ lang_code); $ this -> session-> set_userdata ('language', $ lang_code); $ this-> view-> load ('front/inc/navigation'); } " – Nan

+0

Jetzt habe ich ein anderes Problem. In der URL Sprache erscheint aber Controller und Method Name erscheinen auch home/changeLang/en. Kann in der Route sein, die ich ändern kann? oder was würden Sie vorschlagen. Auch für einige Sprachen kann es die Seite mit Sprache nicht lesen, zum Beispiel liest es mit http: // localhost/Neue URL, kann aber nicht mit http: // localhost/de erkannt werden. aber es liest mit Englisch. Vielen Dank im Voraus – Nan

+0

Hallo, ich vergaß in jedem Controller Sie dies in Ihrem Konstruktor 'Funktion __construct() { \t \t $ _language = (isset ($ this-> Sitzung-> userdata ('Sprache')))? $ this-> session-> userdata ('language'): 'englisch'; \t \t \t \t $ this-> lang-> laden ('calendar', $ new); $ this-> lang-> load ('Datum', $ neu); $ this-> lang-> load ('db', $ new); $ this-> lang-> laden ('email', $ new); \t} ' – elddenmedio

0

ich verstehe, dass Sie eine uRL wie

haben

controller.php

class Controller extends CI_Controller{ 
    function change_language($lang = 'english'){ 
     $new = $this->session->set_userdata('language', $lang); 

     $this->lang->load('calendar', $new); 
     $this->lang->load('date', $new); 
     $this->lang->load('db', $new); 
     $this->lang->load('email', $new); 
     $this->lang->load('form_validation', $new); 
     $this->lang->load('ftp', $new); 
     $this->lang->load('imglib', $new); 
     $this->lang->load('number', $new); 
     $this->lang->load('profiler', $new); 
     $this->lang->load('unit_test', $new); 
     $this->lang->load('upload', $new); 

     redirect(base_url, 'refresh'); 
    } 
} 

Damit speichern Sie die neue Sprache in einer Sitzung, und Sie verhindern, dass ein Fehler, der durch URL.

Ich hoffe, dass dies Ihnen helfen kann

+0

ja genau, ich habe url so. Vielen Dank. Ich werde das versuchen – Nan