2016-03-30 3 views
0

Мне нужен язык, отображаемый в URL-адресе для многоязычного сайта. Вот мой код:url codeigniter для многоязычного сайта

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

Когда я пишу таким образом, в url появляется другой язык. Например, любой язык, который я выбрал, дает для английского http://localhost/new/en. или он увеличивает http://localhost/new/enen. Заранее спасибо.

+0

Просто догадаться. Перед перенаправлением: if (substr ($ _ SERVER ['HTTP_REFERER'], - 2)! = $ Lang_code) – Andreas

+0

Привет, Андреас, спасибо за ответ. В моем случае, по крайней мере, это не сработало :( – Nan

ответ

0

Я понимаю, что вы хотите сделать многоязычное приложение и идентифицировать язык по URL-адресу, не так ли?

Если да, то я рекомендую вам создать контроллер в вашем приложении/ядра

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); 
    } 
} 

Вы будете иметь выбранный язык в своем заголовке о чем-то подобном, вэнь вы делаете щелчок на определенном языке, вы будете называют УИР домашнюю страницу/изменение/{$} язык ваш обычный контроллер

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

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

Привет, elddenmedio, спасибо за ответ. Он дал мне ошибку. Ошибка Сообщение: вызов неопределенного метода Home :: redirect() '. Но я нашел другое решение для этого : "public function changeLang ($ lang_code = '', $ uri = NULL) { $ this-> lang-> load ('main', $ lang_code == ''? 'english': $ lang_code); $ this -> session-> set_userdata ('language', $ lang_code) $ this-> view-> load ('front/inc/navigation'); } " – Nan

+0

Теперь у меня другая проблема. также имя контроллера и метода отображается home/changeLang/en. Может быть, на маршруте, который я могу изменить? или что бы вы предложили. Также для некоторых языков он не может прочитать страницу с языком, например, он читает с http: // localhost/новый url, но он не может распознать с помощью http: // localhost/de. но он читается на английском языке. Заранее спасибо – Nan

+0

Привет, я забыл в каждом контроллере, вам нужно поместить это в свой конструктор 'function __construct() { \t \t $ _language = (isset ($ this-> session-> userdata ('language')))? $ this-> session-> userdata ('language'): 'english'; \t \t \t \t $ this-> lang-> load ('calendar', $ new); $ this-> lang-> load ('date', $ new); $ this-> lang-> load ('db', $ new); $ this-> lang-> load ('email', $ new); \t} ' – elddenmedio

0

Я понимаю, что у вас есть URL, как

site.com/controller/change_language/{language} 

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'); 
    } 
} 

При этом вы сохраните новый язык в сессии, и избежать ошибок при ссылке.

Я надеюсь, что это может вам помочь

+0

да, точно, у меня есть URL-адрес. Большое спасибо. Я попробую это – Nan

Смежные вопросы