我按照本教程创建了多语言网站。 http://nuts-and-bolts-of-cakephp.com/2008/11/28/cakephp-url-based-language-switching-for-i18n-and-l10n-internationalization-and-localization/
然而,虽然我尝试登录时可以到example.com/en/users/login
的登录页面,但登录不会通过。我在example.com/users/login
没有/en/
时被抛出,我不知道这是否重要,但密码不包含4个字母/星/点,就像我试过的密码一样,但是大约40个。
另外,我注意到example.com/en/users/logout
函数确实可以让我退出,但却转到example.com/users/login
而不是example.com/en/users/logout
我设法弄清楚打破它的功能是:
class AppHelper extends Helper {
function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language'])) {
$url['language'] = $this->params['language'];
}
return parent::url($url, $full);
}
}
但是,如果没有它,在URL中/en/
添加方面根本没有网址可用。
有人可以帮忙吗?我将提供所需的任何代码。
答案 0 :(得分:1)
这是一个让它发挥作用的旅程。我仍然没有得到的一些东西,但至少我知道它们有效。如果你对此有所改进让我知道,我想知道它。
问题中的这个教程只能让你走到一半。
此外,以下是一些需要进行调整以使其正常工作的内容:
routes.php文件:
/**
* LANGUAGES
*/
Router::connect( '/:language/:plugin/:controller/:action/*', array(), array('language' => '[a-z]{3}')); // PLUGIN FIX
Router::connect('/:language/:controller/:action/*', array('plugin' => null), array('language' => '[a-z]{3}'));
Router::connect('/:language', array('controller'=>'static', 'plugin'=>null), array('language' => '[a-z]{3}'));
App_controller.php:
function beforeFilter(){
$this->_setLanguage();
$this->Auth->logoutRedirect = array( 'controller' => 'static', 'action' => 'index', 'language'=>$this->Session->read('Config.language'));
$this->Auth->loginRedirect = array( 'controller' => 'static', 'action' => 'dashboard', 'language'=>$this->Session->read('Config.language'));
$this->Auth->loginAction = array( 'controller'=>'users', 'action'=>'login', 'language'=>$this->Session->read('Config.language'));
}
function _setLanguage() {
if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
// If ... don't really get this.
$this->Session->write('Config.language', $this->Cookie->read('lang'));
}
else if (isset($this->params['language']) && ($this->params['language']
!= $this->Session->read('Config.language'))) {
// Had a language set, but different from the one in the URL, set to URL
$this->Session->write('Config.language', $this->params['language']);
$this->Cookie->write('lang',$this->params['language'], false, '360 days');
}else{
// First time comer
$this->Session->write('Config.language', Configure::read('Config.language' ));
$this->Cookie->write('lang', Configure::read('Config.language' ), false, '360 days');
}
}
function redirect( $url, $status = NULL, $exit = true ) {
if (!isset($url['language']) && $this->Session->check('Config.language')) {
$url['language'] = $this->Session->read('Config.language');
}
parent::redirect($url,$status,$exit);
}
app_helper.php:
function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language'])) {
$url['language'] = $this->params['language'];
}else if (!isset($url['language']) && !isset($this->params['language'])){
if($_COOKIE['lang']){
$url['language'] = $_COOKIE['lang'];
}else{
$url['language'] = Configure::read('Config.language');
}
}
return parent::url($url, $full);
}
这应该是它。希望能帮助你们所有人失去灵魂的多语种cakephp东西 第
答案 1 :(得分:1)
我使用相同的资源来制作cakephp多语言,但今天仍遇到了这个问题,默认登录操作失去了语言。当我发现这篇文章时,除了原始手册之外我唯一需要的是controller_app.php beforeFilter中的以下代码:
$this->Auth->logoutRedirect = array( 'language'=>$this->Session->read('Config.language'));
$this->Auth->loginRedirect = array( 'language'=>$this->Session->read('Config.language'));
$this->Auth->loginAction = array( 'controller'=>'users', 'action'=>'login', 'language'=>$this->Session->read('Config.language'));
答案 2 :(得分:0)
我看到了关于多语言设置的另一个问题。我打算说,只需将默认语言设为'en'即可。但我不确定这将如何影响SEO,所以我没有说什么。但是,你现在正在做的方式可能会干扰很多Cake的自动化,就像你遇到的Auth问题一样。 这就是我的建议:在app_controller中:
function beforeFilter(){ $this->Auth->loginAction = array( 'controller' => 'users', 'action' => 'login' // insert the language option that you use here ); $this->Auth->logoutRedirect = array( 'controller' => 'users', 'action' => 'index' );// you can set where to redirect after logout here }
我建议不要重定向到/ users / logout,除非你想在那里做点什么。而且您还需要更改users_controller中的注销功能。
答案 3 :(得分:0)
有一件事对我有帮助,(不完美,但这是一个开始)
我为'loginPage'(自动组件的登录操作)
创建了例外因此登录时不会填充网址的语言。
这帮助了我,因为直到我这样做才能登录
我将此添加到app_helper.php
> //exceptions to allow to login
> if (isset($url['action'])) {
> if ($url['action'] == 'loginPage') $url['language'] = false;
> }