繁体   English   中英

多语言网站的会议-Codeigniter

[英]session with multilingual website - codeigniter

我遵循了本教程,但是在下拉菜单中选择其他语言时,文本不会切换为另一种语言。 重定向有效。

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

数组([__ci_last_regenerate] => 1458691563)

似乎site_lang从来没有出现过。 仅在数据库中。 我不知道怎么了。

我使用了本教程的Hooks方法,在language文件夹下创建了3个语言文件,并在htaccess中输入了以下内容(来自另一本教程):

RewriteRule上的RewriteEngine ^(。*)$ 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($ language =“”){

为什么我们将语言设置为"" 我试图删除= "" ,但仍然没有帮助...

更新1:

我发现了问题之一:

$config['base_url']设置为' '只有在URL中使用127.0.0.1而不是localhost时,我才得到预期的行为。

然后,我更改为:

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

但是它仅在URL中使用localhost时有效。

使用$config['base_url'] = 'http://127.0.0.1/mySite/'; 使它在使用URL栏中的IP地址时才能正常工作。

我想让它适用于任何东西(本地主机和IP地址)。 当我说它不能按预期工作时, [site_lang]会话中未填充english / french / german。

LangSwitcher.php 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));
    }
}

然后,对于每个lang语言文件夹,您必须具有不同的文件夹,例如:english,French,所有文件名为: message_lang.php

用这种方式翻译:

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

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

而要切换到lang,您应该转到: <?php echo base_url('langswitch/switchLanguage/english'); ?> <?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()

希望它对您有所帮助或对您的问题有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM