好的,我们给了一个用CodeIgniter编写的应用程序,它支持多种语言 .
我们遇到的问题是语言选择发生在CodeIgniter之外,在Joomla网站上,可以从中访问应用程序 . 但是,我们需要从Joomla安装中分离游戏,这次要在wordpress中处理语言选择 . 我们已经在wordpress中为所选语言设置了一个cookie(cookie名称为lang,值为ru或en(俄语和英语)),一般的想法是用户流是这样的:
访客访问WORDPRESS网站(设置cookie) - >通过游戏点击(Codeigniter必须检查cookie并设置会话变量)
因此,鉴于上述流程,从wordpress端写入cookie,因此CodeIgniter应用程序可以访问此cookie以分别设置语言 . 成功执行此操作的代码是:
if (!isset($_COOKIE["lang"])) {
$this->session->set_userdata('lang', 'en');
} else {
if ($_COOKIE["lang"] == "en") $this->session->set_userdata('lang', 'en');
if ($_COOKIE["lang"] == "ru") $this->session->set_userdata('lang', 'ru');
}
这样可以正常工作,但是它不会在首次加载时显示所选语言,但仅在我们重新加载时显示 . 但是,在将所有内容回显到浏览器之前,此代码位于CodeIgniter应用程序的 Headers 视图的顶部,据我们所知,它是在所有模板上调用的第一个文件 .
还有其他文件/方式我们应该这样做吗?我们不是专家,甚至不是CodeIgniter的新手,所以不知道从哪里开始 . 我们尝试将此代码放在其他视图甚至控制器中,但它会中断或者不起作用 .
2 回答
您可以尝试创建一个扩展CI_Controller的自定义控制器,并根据cookie /会话选择适当的语言 .
在application / core文件夹中创建一个名为MY_Controller.php的新文件
然后在你的应用程序上的每个控制器上扩展MY_Controller,就像这样 .
有时在codeigniter中,Cookie不在同一页面上 .