0

我正在 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

4 回答 4

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 是不遵循此路由结构的控制器。例如:

这里

于 2013-03-26T22:07:02.773 回答
0

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

于 2013-04-02T20:20:10.250 回答
0

仅供参考,强制从mydomain.com/auth/loginto重定向mydomain.com/en/auth/login与路由文件无关,它是MY_Lang.php库提供的文件文件,它将用户重定向到默认语言。

于 2013-04-02T21:05:16.130 回答
0

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

于 2013-03-31T22:30:55.063 回答