0

サイトの URL に常に言語サフィックスを付けたいと考えています。

したがって、入力www.mysite.comすると、に移動する必要がありますwww.mysite.com/en

既定の言語があるので、初めてサイトにアクセスする場合はそれを使用する必要があります。そうでない場合は、使用できる Cookie が設定されています...しかし、どこで使用するかわかりません。

URLに「言語」パラメーターがあるかどうかを確認し、そうでない場合はリダイレクトすることを考えましたが、それはやり過ぎのようです-より良い方法はありますか? ルートでこれを行うことはできますか? またはブートストラップ?

4

3 に答える 3

1

最も効率的な方法は、Web サーバーを使用することです。/リクエストが(ホームページ)に対するものかどうかを簡単に確認して、にリダイレクトでき/enます。

使用しているWebサーバーのドキュメントを確認してください。それらにはすべて、mod_rewrite似たようなものがあります。

編集

/set_default_languageの場合にリダイレクトするようなルートを設定/できます。このコントローラーはデータベースにアクセスして、必要なことを実行できます。

/your/usual/language_switchまたは、言語を指定せずにリダイレクトして、コードがデフォルトを使用できるようにすることもできます。

于 2012-12-16T01:47:04.457 に答える
0

私がしたこと:

AppController の beforeFilter()$this->request->params['langauge']が設定されているかどうかを確認し、設定されていない場合は、それに応じて URL を作成しました。

//Redirect to same url, but with language parameter
if (empty($this->request->params['language']) &&
empty($this->request->params['admin'])) {
    $defaultLanguageCode = Configure::read('Languages.default.code2');
    $cookiedLanguage = $this->Language->activeLanguageByCode($this->Cookie->read('lang'));
    $languageToRedirectTo = (!empty($cookiedLanguage['code2'])) ? cookiedLanguage['code2'] : $defaultLanguageCode;
    $newURL = '/' . $languageToRedirectTo . $this->request->here;
    $this->redirect($newURL);
}

ノート:

私が理解できなかった部分 (IRC でヘルプを得るまで) は$this->request->here、文字列としての URL である を使用して URL を作成することでした。その前に、params 配列を使用して配列を構築しようとしましたが、うまくいきませんでした。

私のルート(誰かを助ける場合に備えて)

(覚えておいてください、私はルートの初心者なので、うまく機能しているように見えますが、うまくいくとは限りません!)

//root URL and root URL w/ language
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));  // eg: www.google.com takes them to pages/display/home
Router::connect('/:language', array('controller'=>'pages', 'action' => 'display', 'home'), array('language'=>'[a-z]{2}')); // eg: /en takes them to pages/display/home and sets language

//pages (eg. /en/r/the_matrix  or  /r/the_matrix)
Router::connect('/:language/r/:slug/*', array('controller'=>'pages', 'action'=>'display'), array('language'=>'[a-z]{2}', 'pass'=>array('slug')));
Router::connect('/r/:slug/*', array('controller'=>'pages', 'action'=>'display'), array('pass'=>array('slug')));

//adds language to default URL
Router::connect('/:language/:controller/:action/*', array(), array('language'=>'[a-z]{2}'));

//Route prefixes
Configure::write('Routing.prefixes', array('admin'));

//User related
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/logout', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/myaccount', array('controller' => 'users', 'action' => 'my_account'));

//
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
于 2012-12-16T02:08:26.830 に答える
0

コントローラーまたはビュー内から requestAction 呼び出しをリダイレクトしたくない場合は、次の条件を IF ステートメントに追加する必要があります。

    if (empty($this->request->params['language']) &&
    empty($this->request->params['admin']) && 
    empty($this->request->params['requested'])) {
    ...
    }
于 2014-01-19T23:25:46.760 に答える