有一些解决方案,只有在非空时才使用带有参数的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)
也许有最简单的解决方案?
答案 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翻译链接(__()
)?
抱歉,但仍然学习英语......