会话与多语种网站 - codeigniter

时间:2016-03-23 00:20:27

标签: php codeigniter session

我关注了this tutorial,但在下拉列表中选择其他语言时,文字没有切换到另一种语言。然而,重定向工作正常。

我正在使用数据库会话,并且数据库中的site_lang值已正确更改。 我在视图中print_r($return_lang) return_lang $data['return_lang'] = $this->session->all_userdata();,结果是:

  

数组([__ ci_last_regenerate] => 1458691563)

看起来site_lang永远不会出现在那里。仅在数据库中。我无法弄清楚出了什么问题。

我使用了本教程的Hooks方法,在语言文件夹下创建了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中我不理解一行:

  

function switchLang($ language =&#34;&#34;){

为什么我们将语言设置为""? 我试图移除= "",但无论如何它都没有帮助......

更新1:

我发现了其中一个问题:

$config['base_url']设置为' ',当我在网址中使用127.0.0.1而不是localhost时,我得到了预期的行为

然后我改为:

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

但只有在URL中使用localhost时才有效。

在网址栏中使用IP地址时,使用$config['base_url'] = 'http://127.0.0.1/mySite/';可以正常

我想让它适用于任何事情(localhost和ip地址)。 当我说它没有按预期工作时,[site_lang]会话没有填充英语/法语/德语。

1 个答案:

答案 0 :(得分:0)

我在我的CI中使用LangSwitcher.php,这是我的工作代码:

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

然后,您必须为语言文件夹中的每个语言设置不同的文件夹,例如:english,french以及所有名为message_lang.php的文件

以这种方式翻译:

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

在视图中,每次需要使用翻译时都会使用此选项:<?php echo lang('text'); ?>

然后切换lang你应该去: <?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()

希望它对你有帮助或者放一些“光”。在你的问题上。