2016-03-23 4 views
0

Я следовал this tutorial, но при выборе другого языка в раскрывающемся списке текст не переключается на другой язык. Однако перенаправление работает.сеанс с многоязычным сайтом - codeigniter

Я использую сеанс базы данных и значение site_lang в базе данных изменено правильно. Я сделал print_r($return_lang) на мой взгляд, return_lang быть $data['return_lang'] = $this->session->all_userdata(); и результат:

Array ([__ci_last_regenerate] => 1458691563)

Похоже, что site_lang никогда не присутствует там. Только в базе данных. Я не могу понять, что случилось.

я использовал метод Крючков учебника, файлы 3 языка создаются в папке языка, и я вошел в следующем в моей Htaccess (из другого учебника.):

RewriteEngine On RewriteRule^(*) $ index.php/$ 1 [PT, L]

RewriteCond $ 1^(index.php)

Это мой HomeController:

<?php 
class homeController extends CI_Controller{ 
    public function index(){ 
     $data['main_content'] = 'home'; 
     $data['return_lang'] = $this->session->all_userdata(); 
     $this->load->view('templates/default',$data); 
    } 
    function initialize() { 
     $ci =& get_instance(); 
     $ci->load->helper('language'); 
     $siteLang = $ci->session->userdata('site_lang'); 
     if ($siteLang) { 
      $ci->lang->load('message',$siteLang); 
     } else { 
      $ci->lang->load('message','english'); 
     } 
    } 
} 

Другие файлы точно такие же, как описано в учебнике.

Существует одна линия, которую я не понимаю, в LanguageSwitcher.php:

функция switchLang ($ язык = "") {

Почему мы установить язык для ""? Я попытался удалить = "" и это не помогло вообще ...

UPDATE 1:

Я нашел проблемы:

$config['base_url'] был установлен в ' ' и я получаю ожидаемый поведение только при использовании 127.0.0.1 вместо localhost в URL.

Затем я изменил на:

$config['base_url'] = 'http://localhost/mySite/'; 

, но это работает только при использовании Localhost в URL.

Использование $config['base_url'] = 'http://127.0.0.1/mySite/'; заставляет его работать нормально только при использовании ip-адреса в строке URL.

Я хотел бы заставить его работать на что угодно (localhost и ip address). Когда я говорю, что он не работает должным образом, сессия [site_lang] не заполняется английским/французским/немецким языком.

+0

спасибо, я понимаю сейчас. Просто что-то узнал ... Я обновил свой вопрос. – remyremy

+0

Почему вы хотите сделать разницу между localhost или 127.0.0.1, оба являются локальными, только ваш компьютер может получить к нему доступ в любом случае? – Vickel

+1

Это потому, что ваш сеанс не сохраняется, если ваш '$ config ['base_url']' не соответствует URL-адресу, который вы используете для доступа к сайту. Файл cookie, используемый для сохранения информации о сеансе, не соответствует домену, который вы используете, поэтому CodeIgniter не может знать, что вы переключили языки. – Technoh

ответ

0

Я использую LangSwitcher.php, а в мой CI, и это мой рабочий код:

your_controller.php

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

     $lang = $this->session->userdata('site_lang');  
     $this->lang->load("message",$lang); 
} 

LanguageSwitch.php (контроллер)

<?php 
class LangSwitch extends CI_Controller 
{ 
    public function __construct() { 
     parent::__construct(); 
     $this->load->helper('url'); 
    } 

    function switchLanguage($language = "") { 
     $language = ($language != "") ? $language : "english"; 
     $this->session->set_userdata('site_lang', $language);    
     $url = (null !== $this->session->userdata('ciutat_name')) ? $this->session->userdata('ciutat_name') : "tria_ciutat"; 

     redirect(base_url($url)); 
    } 
} 

Тогда, у вас должны быть разные папки для каждого языкового языка внутри языковой папки: английский, французский со всеми файлами, называемыми: message_lang.php

с переводом так:

$lang["text"] = "Text in english"; 

В представлении вы используете это каждый раз, когда вам нужно использовать перевод: <?php echo lang('text'); ?>

И переключиться затем Ланг вы должны пойти: <?php echo base_url('langswitch/switchLanguage/english'); ?>

структура:

/controllers: 
- your_controllers.php //here in the __construct set the lang 
- langswitch.php //the langswitcher 

/languages 
    /english: message_lang.php //here the translations 
    /french: message_lang 

/views 
    your_views.php //here you use lang() 

Надеюсь, это поможет вам или поместит немного света на ваш вопрос.

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