URL 中的 Yii urlManager 语言 [英] Yii urlManager language in URL
本文介绍了URL 中的 Yii urlManager 语言的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用以下语法向 url 添加语言:http://www.example.com/en/site/page/view/关于
I am trying to add a language to the url with following syntax: http://www.example.com/en/site/page/view/about
到目前为止我所拥有的适用于短网址,例如:http://www.example.com/en/site/contact但不像我的第一个例子那样长时间
What I have so far works with short urls like: http://www.example.com/en/site/contact but not with long once as in my first example
这是我目前所拥有的:
/config/main.php
/config/main.php
'urlManager'=>array(
'class'=>'application.components.MyCUrlManager',
'urlFormat'=>'path', 'showScriptName'=>false,
'rules'=>array(
'<language:\w+>/<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<language:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<language:\w+>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
<小时>
<?php // components/MyCUrlManager.php
class MyCUrlManager extends CUrlManager
{
public function createUrl($route,$params=array(),$ampersand='&')
{
if(isset($_POST['_lang']))
{
Yii::app()->setLanguage($_POST['_lang']);
$route['language']=Yii::app()->language;
}
elseif (!isset($route['language']))
{
$route['language']=Yii::app()->language;
}
else
{
Yii::app()->setLanguage($route['language']);
}
return parent::createUrl($route, $params, $ampersand);
}
}
?>
<小时>
class LangBox extends CWidget {
public function run() {
$currentLang = Yii::app()->language;
require_once 'Zend/Locale.php';
$locale = new Zend_Locale();
//$siteLanguages = $this->getLang();
$siteLanguages = array('en','de','tr');
foreach($siteLanguages as $value){
$list[$value] = $locale->getTranslation($value, 'Language', $value);
}
asort($list);
$this->render('langBox', array('currentLang' => $currentLang, 'list'=>$list));
}
}
推荐答案
我遇到了同样的问题,以下规则对我也适用于子模块和任意数量的参数:
I had same problem, and following rules work for me also with submodules and any number of params:
'<lang:[a-z]{2}>/<_m>/<_c>' => '<_m>/<_c>',
'<lang:[a-z]{2}>/<_m>/<_c>/<_a>*' => '<_m>/<_c>/<_a>',
'<lang:[a-z]{2}>/<_m>/<_a>' => '<_m>/<_a>',
'<lang:[a-z]{2}>/<_c>' => '<_c>',
'<lang:[a-z]{2}>/<_c>/<_a>' => '<_c>/<_a>',
_m 是模块的特殊值,_c 是控制器,_a 是动作.
_m is special value for module, _c for controller and _a for action.
这篇关于URL 中的 Yii urlManager 语言的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文