如果调用特定URL,则忽略CodeIgniter i18n路由

时间:2013-02-18 14:21:14

标签: codeigniter

我正在CodeIgniter上建立一个多语言网站,我正在使用路由强制语言在URL中,如下所示:

// URI like '/en/about' -> use controller 'about'
$route['^(en|de|fr|nl)/(.+)$'] = "$2";

// '/en', '/de', '/fr' and '/nl' URIs -> use default controller
$route['^(en|de|fr|nl)$'] = $route['default_controller'];

有了这个,如果你转到mydomain.com/auth/login,你被重定向到mydomain.com/en/auth/login,但我想避免这个只在被调用的特定URL上。就像我总是希望语言在URL中,除非你打电话给mydomain.com/get/123,它应该保持原样。

我尝试在之前的路线之前添加此功能,但未成功:

$route['get/(:num)'] = "get/$1";

感谢您的帮助,路线让我迷路了。

4 个答案:

答案 0 :(得分:1)

我希望它可以提供帮助。

$default_controller = "webpages";
$language_alias = array('gr','fr');
$controller_exceptions = array('admin','forums');

$route['default_controller'] = $default_controller;
$route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2';
$route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2';
$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1';
foreach($language_alias as $language)
    $route[$language] = $default_controller.'/index';
$route['404_override'] = '';

您唯一真正需要改变的是前三行代码:

$default_controller = "webpages";
$language_alias = array('gr','fr');
$controller_exceptions = array('admin','forums');

如果您有多语言网站,$ language_alias是您要添加的语言元素:

当然,http://mycustomproject.com/grhttp://mycustomproject.com/fr会路由到基本控制器的索引。

$ controller_exceptions是不遵循此路由结构的控制器。例如:

来自here

答案 1 :(得分:0)

如何使用较新版本的库,为非本地化区域提供内置的$ special数组。

答案 2 :(得分:0)

使用较新的库,其中包含用于创建非本地化区域的特殊URI。更多信息可以在这里找到:https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n

答案 3 :(得分:0)

仅仅是为了获取信息,强制从mydomain.com/auth/login重定向到mydomain.com/en/auth/login并不是与路径文件相关的,它是随库提供的文件MY_Lang.php文件,它将用户重定向到默认语言。