如何处理 Codeigniter 上的多语言 uri 重定向?
Posted
技术标签:
【中文标题】如何处理 Codeigniter 上的多语言 uri 重定向?【英文标题】:How to deal with multilingual uri redirect on Codeigniter? 【发布时间】:2018-02-26 17:02:37 【问题描述】:我正在 Codeigniter 3.0 下构建一个多语言网站,我希望有这种行为:
网站的默认语言是“en”。 当用户访问站点 (/) 时,它会获取浏览器的 Accept-language 并将其存储在 session var 中。然后我检查语言是否为“en”。如果不是,它重定向到 mysite.com/lang。案例语言不是“en”,什么也不做,所以它保留 mysite.com/
问题在于 CI 将 /lang 作为控制器。
我将 routes.php 编辑如下:
$route['es'] = '/';
$route['en'] = '/';
$route['de'] = '/';
但是现在我遇到了“重定向过多”的问题,因为 routes.php 在来自 /language 时重定向到 / 并且在我的控制器中重定向到 /language
我的控制器:
class Checklanguage
public $CI;
/**
* Constructor.
*/
public function __construct()
if (!isset($this->CI))
$this->CI =& get_instance();
$this->CI->load->library('session');
public function redirect_if_not_default()
/* LANGUAGES SECTION */
$browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
// if browser has no language, we use 'en'
if (strlen($browserLang) != 2) $browserLang = 'en';
// retrieve session lang (maybe NULL)
$sessionLang = $this->CI->session->userdata('lang');
// determine which language use
// if user has not set any language, we use browser lang
if(!isset($sessionLang)) $preferredLang = $browserLang;
// if user has changed language, we use session language
if (strlen($sessionLang) == 2)
$preferredLang = $sessionLang;
// redirect if language is not 'en'
if ($preferredLang != 'en')
header('Location: /'.$preferredLang);
我该如何解决这个问题? 谢谢
【问题讨论】:
【参考方案1】:试试:
if ($preferredLang != 'en')
redirect(base_url()."/$preferredLang");
加法:
如果您为此使用CI
语言类,您只需要在application/language
中设置一个语言文件,然后在控制器中加载该语言。
CI documentation
【讨论】:
同样的问题 您是否使用 Apache 重写规则(例如:从 url 中删除 index.php)其次,这些语言目录是否在您提到的不同设置中 CI 将这些作为控制器? 是的,我从 .htaccess 中删除了 index.php,但我没有语言文件夹。我没有不同语言的文件夹。我只有一个 CI 安装,它使用会话变量来处理语言。除了这个“url问题”之外,一切都很好。如果我可以做一些事情来禁用“/en”调用该控制器(en,那个obv不存在)会很好...... 抱歉,如果我没有正确理解您的问题。根据CI
文档https://www.codeigniter.com/userguide3/libraries/language.html
你不需要重定向,只需加载语言文件。你也可以查看这个答案:https://***.com/questions/1328420/the-best-way-to-make-codeigniter-website-multi-language-calling-from-lang-array
如果你只使用CL
类作为语言,那么你只需要在application/language
中设置语言文件,然后加载这个语言文件。以上是关于如何处理 Codeigniter 上的多语言 uri 重定向?的主要内容,如果未能解决你的问题,请参考以下文章