[英]Languages and routing
我正在阅读关于路由的CakePHP文档,但目前还无法掌握。
我要实现的是:
编辑
最后,我提出了我的应用程序逻辑,即如果仅定义了一种语言,则将没有语言前缀,如果有更多语言,则将使用语言前缀(通过覆盖html helper)生成链接,并且路由将不一样 否则,当我尝试定义单一语言版本路由(无前缀)时,总会出现问题。 这是我现在可以使用的代码:
(应用程序/配置/ routes.php文件)
/*
* ===================== Input start ===================== *
*/
/**
* Default language
*/
Configure :: write('Config.language', 'mkd');
/**
* Application languages
*/
Configure :: write('Config.languages', array(
'mkd' => 'Македонски',
'eng' => 'English',
));
/**
* ====================== Input end ====================== *
*/
/**
* Counting languages...
*/
Configure :: write('Config.languageCount', count(Configure :: read('Config.languages')));
/**
* If application is multilingual
*/
if(Configure :: read('Config.languageCount') > 1) {
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => implode('|', array_keys( Configure :: read('Config.languages') )))
);
Router::connect('/:language/:controller/*',
array('action' => 'frontend'),
array('language' => implode('|', array_keys( Configure :: read('Config.languages') )))
);
}
/**
* If application has one language
*/
else {
Router::connect('/:controller/*', array('action' => 'frontend'));
}
感谢Dave和kicaj的帮助,您的帮助简化了我的处理方法。
您可能需要改用正则表达式-像这样:
Router::connect(
'/:language/:controller/:action/*',
array(),
array('language'=>'[a-z]{3}'
));
请注意第三个参数,该参数为:language
提供名称和正则表达式规则。
然后,它将在您的Controllers中可用(您可能会在AppController的beforeFilter()
):
$this->request->params['language']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.