Codeigniter会话语言 - 默认语言

时间:2014-01-26 16:23:38

标签: php codeigniter

这是website

我正在使用此脚本在网站上使用2种语言(user_agents.php文件):

<?php
class MY_Controller extends CI_Controller {
     public function __construct(){
        parent::__construct();
        parse_str($_SERVER['QUERY_STRING'], $_GET);

        if(!$this->session->userdata('lang') && !isset($_GET['lang']) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
            $this->session->set_userdata('lang' , $lang);
        }else{
            if(isset($_GET['lang'])){
                if($_GET['lang'] == 'es' || $_GET['lang'] == 'ca'){
                    $this->session->set_userdata('lang' , $_GET['lang']);
                }else{
                    $this->session->set_userdata('lang' , 'ca');
                }
            }
        }
        $this->lang->load('site', $this->session->userdata('lang'));

    }
}

我有两个问题

  1. 如果您在主页上并将其更改为“Catala”语言,则会更改网址,但是如果您点击任何菜单项,它会转到您的页面但没有?lang=ca ...它只是打开西班牙语部分,这是默认语言。所以基本上似乎会话语言不能正常工作,因为在您输入任何部分后它都没有被传递。

  2. 第二个问题是,如果您的浏览器主要语言为英语,则该网站会以该语言打开(不显示根据spanishcatala语言加载的菜单图片)而不是打开在config.php文件中已经设置的默认值:

    $ config ['language'] ='spanish';

  3. 有人可以帮我解决这两个问题吗?

    config.php的会话:

    $config['sess_cookie_name']     = 'ci_session';
    $config['sess_expiration']      = 7200;
    $config['sess_expire_on_close'] = FALSE;
    $config['sess_encrypt_cookie']  = FALSE;
    $config['sess_use_database']    = FALSE;
    $config['sess_table_name']      = 'ci_sessions';
    $config['sess_match_ip']        = FALSE;
    $config['sess_match_useragent'] = TRUE;
    $config['sess_time_to_update']  = 300;
    

4 个答案:

答案 0 :(得分:0)

在Chrome中查看网站时,图像未显示。我的语言环境是en,它看起来好像是正确匹配语言环境,显然没有匹配语言环境的图像。

enter image description here

也许问题可能与浏览器返回的语言环境有关?如果您使用的是Android设备,则可以在Chrome中启用remote debugging,以便更好地了解正在发送的区域设置。

答案 1 :(得分:0)

我认为在配置中设置语言可能很有用,试试这个:

<?php
class MY_Controller extends CI_Controller {
    public function __construct(){
        parent::__construct();
        parse_str($_SERVER['QUERY_STRING'], $_GET);

        if(!$this->session->userdata('lang') && !isset($_GET['lang']) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);                
        }else{
            if(isset($_GET['lang'])){
                if($_GET['lang'] == 'es' || $_GET['lang'] == 'ca'){
                    $lang = $_GET['lang'];
                }else{
                    $lang = 'ca';
                }
            }
        }

        $this->session->set_userdata('lang' , $lang);
        $this->config->set_item('language', $lang);
        $this->lang->load('site', $this->session->userdata('lang'));

    }
}

答案 2 :(得分:0)

您是否正在自动加载会话库?如果答案是否定的,则必须先加载它,然后才能对其进行任何操作。

$this->load->library('session');

所以试试

class MY_Controller extends CI_Controller {
    public function __construct(){
        parent::__construct();

        $this->load->library('session'); // Loading the session library

        parse_str($_SERVER['QUERY_STRING'], $_GET);

        if(!$this->session->userdata('lang') && !isset($_GET['lang']) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
            $this->session->set_userdata('lang' , $lang);
        }else{
            if(isset($_GET['lang'])){
                if($_GET['lang'] == 'es' || $_GET['lang'] == 'ca'){
                    $this->session->set_userdata('lang' , $_GET['lang']);
                }else{
                    $this->session->set_userdata('lang' , 'ca');
                }
            }
        }
        $this->lang->load('site', $this->session->userdata('lang'));

    }
}

答案 3 :(得分:0)

您的会话库是否有效?可以通过设置会话值然后打印它来检查。我检查了你的网站。当提供lang GET变量时,它会按预期工作,因为主页上的图像具有正确的prefix(en,es,ca),但是当它未提供时,则默认为en_假定前缀。我建议您打开错误报告或检查错误日志。

我建议您执行以下操作以启用并检查会话是否正常运行。

转到/application/config/autoload.php,找到以$autoload['libraries']开头的行,看看会话是否自动加载。它看起来像这样

$autoload['libraries'] = array('database','session');

然后在你的核心控制器(MY_Controller)中检查以下内容:

$this->session->set_userdata('test','Hello World');
echo $this->session->userdata('test'); exit();

如果打印Hello World,我们可以说会话正在运行。请告诉我你对此的回应。 [与客户聊天后更新]

解决方案:本机会话库似乎无法正常工作。页面刷新时会丢失会话。所以我从here添加了native PHP session库,问题解决了。