cakephp用网址选择语言 - 第2部分

时间:2010-12-29 15:28:47

标签: php cakephp localization cakephp-1.3

好的,我现在基于URL(http://stackoverflow.com/questions/4550670/cakephp-choosing-language-by-url)进行本地化工作,但是如何创建一个会改变语言的链接?我试过了

<?php echo $html->link('English', array('language'=>'eng')); ?>

但它只是在网址的末尾添加language:engwww.example.com/blah/blah/language:eng而不是www.example.com/eng/blah/blah)并且根本不会切换语言。

现在的路线如下:

Router::connect('/registered/:language/:controller',  
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));
Router::connect('/registered/:language/:controller/:action/*', 
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));

我还覆盖了app_helper中的url方法:

    function url($url = null, $full = false) {
        if(!isset($url['language']) && isset($this->params['language'])) {
          $url['language'] = $this->params['language'];
        }
        return parent::url($url, $full);
   }

如何设置链接以应有的方式工作? 感谢

1 个答案:

答案 0 :(得分:0)

尝试从您的路由器网址中删除:语言。

未经过测试,但它应该可以正常运行,因为您的网址已经命名为param:language

Router::connect('/registered/:controller',  
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));
Router::connect('/registered/:controller/:action/*', 
                array('prefix' => 'registered', 'registered' => true, 'layout'=> 'registered'),
                array('language' => '[a-z]{3}'));

保持url覆盖方法以确保您接受两种类型的GET变量。