如何根据语言更改CodeIgniter的URI段

时间:2015-03-09 11:15:10

标签: 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 )。

其他信息:
将来,我计划将不同语言的用户重定向到不同的子域,例如lt.website.com,但是现在我希望根据用户语言翻译URI段。

我想说清楚:

  1. 我已经知道如何创建语言切换器并进行更改 语言。
  2. 我不希望语​​言代码包含在网址中, 比如'/ en'或'/ lt'。
  3. 我的(不好)想法
    我认为这可以通过翻译的路由地址完成 $route[lang('url_market')] = 'market/index'; 但是当完成路由时,语言库并没有被加载。

3 个答案:

答案 0 :(得分:1)

基于@AdrienXL答案,这是一个不使用数据库的示例。

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

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

显然,您知道使用会话的用户的语言,并且您拥有控制器名称,您可以通过访问配置项轻松获得翻译。

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

哪个应该为你提供en'和' 'accueil'为fr

答案 1 :(得分:0)

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

构建一个如下所示的表:

routes_translation

*****************************************
*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;
} 

答案 2 :(得分:0)

简单....

  1. 从db获取用户选择语言或将其存储在SESSION
  2. 加载语言库时传递选定的语言
  3. 例如:$ this-> lang-> load(“message”,$ SESSION ['selected_language']);