CakePHP 2.x i18n路线

时间:2013-01-20 17:52:48

标签: cakephp internationalization

有一些解决方案,只有在非空时才使用带有参数的CakePHP路径?

现在我在下面编写代码,但我想要更好一些:

if(Configure::read('Config.language') !== 'en') { // en is default language
    $language = '/:language';
} else {
    $language = '';
}

Router::connect($language .'/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register'));

这段代码完美无缺,但我仍然必须通过url()方法在AppHelper中设置语言。

在较旧的应用程序中,我总是重复Router :: connect:

Router::connect('/:language/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // for all languages without default language
Router::connect('/'. __('register', true), array(
    'controller' => 'users',
    'action' => 'register')); // only for default language (en)

也许有最简单的解决方案?

2 个答案:

答案 0 :(得分:4)

您需要使用2条路线,但为您的语言路线添加“持久”选项。添加'persist'将避免每次生成URL时都必须指定'language'。

// for all languages without default language. 
Router::connect(
    '/:lang/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    ), 
    array(
        'persist' => array('lang')
    )
);

// only for default language (en)
Router::connect(
    '/'. __('register', true),
    array(
        'controller' => 'users', 
        'action' => 'register'
    )
); 

您可能还想查看CakeDC's I18n插件。

答案 1 :(得分:0)

好的,这些东西效果更好,但我还有其他问题。

我将Configure::write('Config.language');的默认语言设置为bootstrap.php中的en

接下来我写了这样的网址shema:

Router::connect('/:language/'. __('register', true), array('controller' => 'users', 'action' => 'register'), array('persist' => array('lang')));
Router::connect('/'. __('register', true), array('controller' => 'users', 'action' => 'register')); 

当用户通过AppController中的beforeFilter更改语言(设置新的Config.language)时,内容将来自静态.po和db的偏差,但链接未翻译。 参数:language有效但__()中的魔术函数Router:connect()不起作用。

因为首次加载的是bootstrap.php,接下来是router.php,最后是AppController.php

我的问题是,如何强制router.php翻译链接(__())?

抱歉,但仍然学习英语......