Yii urlManager URL 中的语言

发布于 2024-08-27 19:25:01 字数 2154 浏览 7 评论 0原文

我正在尝试使用以下语法向 url 添加语言: http://www.example.com/en/site/page/view/关于

到目前为止,我所拥有的适用于短网址,例如: http://www.example.com/en/site/contact 但不像我的第一个例子那样长时间,

这是我到目前为止所拥有的:

/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 am trying to add a language to the url with following syntax:
http://www.example.com/en/site/page/view/about

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

Here is what I have so far:

/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));
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

日裸衫吸 2024-09-03 19:25:01

我遇到了同样的问题,以下规则也适用于子模块和任意数量的参数:

                 '<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 是操作的特殊值。

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 is special value for module, _c for controller and _a for action.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文