私は自分のウェブサイトにローカリゼーションを実装しようとしています。現在、基本(英語)ウェブサイトはhttp://domain.com/controller/actionで、各ローカライゼーションはhttp://domain.com/locale/controller/actionにします。基本的に、ユーザーが後者のURLを訪問する場合、Kohanaは英語版と同じコントローラーとアクションを使用します。コードでは、単に文字列を交換します。コナナでdomain.com/locale/controllerをdomain.com/controllerにルーティングするにはどうすればよいですか?
現在、私は次のルートを追加してみましたが、それはうまくいきませんでした:
// This is my default route:
Route::set('default', '(<controller>(/<action>(/<overflow>)))', array('overflow' => '.*?'))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
// This the route for the localizations:
Route::set('locale', '(<locale>(/<controller>(/<action>(/<overflow>))))', array('overflow' => '.*?'))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
をこの設定で、私はhttp://domain.com/es/controller/actionを訪問した場合、私は404エラーになります。どのように私はこの仕事をするために私のルートを設定する必要がありますか?
編集:
私は単に示唆したように、それが動作するルールを交換する場合だけで、マティーノとジョン・ヒメルマンの答えを完了させます。しかし、「ロケール」ルートはキャッチオールルートとなり、は常にに必要なものがすべてデフォルトのもの(私の場合は "en" /英語)でもロケールを指定する必要があります。これを修正するには、 "ロケール"パラメータをサポートするロケールに制限することができます。例:
Route::set('locale', '(<locale>(/<controller>(/<action>(/<overflow>))))', array('locale' => '(fr|zh|en)', 'overflow' => '.*?'))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
Route::set('default', '(<controller>(/<action>(/<overflow>)))', array('overflow' => '.*?'))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
この場合、「fr」、「zh」または「en」で始まるURLのみがサポートされます。さらに、サポートされていないロケールは404エラーを返し、 "domain.com/controller/action"はデフォルトの英語ロケールを正しく表示します。
スワッピングルールを試してください(最も一般的なルールは最後のルールになるはずです) – matino