这是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'));
}
}
我有两个问题:
如果您在主页上并将其更改为“Catala”语言,则会更改网址,但是如果您点击任何菜单项,它会转到您的页面但没有?lang=ca
...它只是打开西班牙语部分,这是默认语言。所以基本上似乎会话语言不能正常工作,因为在您输入任何部分后它都没有被传递。
第二个问题是,如果您的浏览器主要语言为英语,则该网站会以该语言打开(不显示根据spanish
或catala
语言加载的菜单图片)而不是打开在config.php
文件中已经设置的默认值:
$ config ['language'] ='spanish';
有人可以帮我解决这两个问题吗?
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;
答案 0 :(得分:0)
在Chrome中查看网站时,图像未显示。我的语言环境是en,它看起来好像是正确匹配语言环境,显然没有匹配语言环境的图像。
也许问题可能与浏览器返回的语言环境有关?如果您使用的是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
库,问题解决了。