Php 如何基于语言更改CodeIgniter的URI段

Php 如何基于语言更改CodeIgniter的URI段,php,codeigniter,Php,Codeigniter,问题: 如何使我的URL语言特定,例如: 英语 www.website.com/controller in en/method in en 其他语言 www.website.com/controller in oth lang/method in oth lang 我希望此URL根据语言文件中的“controller in en”和“method in en”翻译自动重定向到www.website.com/controller in en/method in en。 其他信息: 将来,我计划将不

问题: 如何使我的URL语言特定,例如:

英语 www.website.com/controller in en/method in en 其他语言 www.website.com/controller in oth lang/method in oth lang 我希望此URL根据语言文件中的“controller in en”和“method in en”翻译自动重定向到www.website.com/controller in en/method in en。 其他信息: 将来,我计划将不同语言的用户重定向到不同的子域,例如lt.website.com,但现在我希望根据用户的语言翻译URI段

我想说明的是:

我已经知道如何创建语言切换器和更改 语言 我不希望url中包含语言代码, 比如“/en”或“/lt”。 我的坏主意: 我认为这可以通过转换路由地址来实现 $route[lang'url_market']='market/index';
但当路由完成时,语言库不会被加载。

我看到的唯一方法是通过数据库

构建一个如下所示的表:

翻译路线

*****************************************
*id |  controller   | translation | lang*
*****************************************
* 1 | home          |    home     | en  *
* 2 | home          |  accueil    | fr  *
                   ...
*****************************************
然后在routes.php中

require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->get('routes_translation');
$result = $query->result();
foreach( $result as $row )
{
    $route[$row->translation] = $row->controller;
} 
简单的

从数据库中获取用户选择语言或将其存储在会话中 加载语言库时传递所选语言
例如:$this->lang->loadmessage,$SESSION['selected_language']

基于@AdrienXL answer,这里是一个不使用数据库的示例

$config['routes_translation']['en'] = array(
'home' => 'home'
);

$config['routes_translation']['fr'] = array(
'home' => 'accueil'
);
显然,您知道使用会话的用户的语言,并且您有控制器名称,您可以通过访问配置项轻松获得翻译

$translatedNamed = $config['routes_translation'][$language_code][$controller] 

哪一个应该为en和fr提供“home”和“acueil”

难道不可能通过要求从文件翻译文件而不是数据库进行精确翻译来实现同样的目的吗?@DeividasKaržinuskas您可以通过为每种语言提供一个配置数组,并将控制器名称作为索引和转换为值。@ahmad您能提供一个示例代码吗?我提供了一个基于@AdrienXL solution的配置数组示例。这些说明解释了如何加载语言文件。我需要的是根据会话中存储的语言更改路由。我理解这一点。我想做的是,创建一个自动路径,比如说“市场”控制器,但在其他语言中,它可能被称为不同的。我希望我的应用程序显示“市场”控制器,但如果是立陶宛语的,则应该通过“rinka”URI段访问它。