Я пытаюсь реализовать локализацию на моем сайте. В настоящее время базовый (английский) веб-сайт находится по адресу http://domain.com/controller/action, и я хочу, чтобы каждая локализация была по адресу http://domain.com/locale/controller/action. В основном, если пользователь посещает последний URL-адрес, Kohana будет использовать тот же контроллер и действие, что и для английская версия. В коде я просто поменяю строки.
В настоящее время я попытался добавить следующий маршрут, но это не сработало:
// 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. Есть идеи, как мне настроить маршруты, чтобы это работало?
Edit:
Просто чтобы завершить ответ Матино и Джона Химмельмана, если я просто поменяю правила, как это было предложено, это сработает. Тем не менее, маршрут "locale" станет тогда универсальным маршрутом, и вам всегда придется указывать локаль, даже если вам нужен только язык по умолчанию (в моем случае "en" / English) , Чтобы это исправить, вы можете ограничить параметр locale поддерживаемыми вами языками. Например:
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',
));
В этом случае будут поддерживаться только те URL, которые начинаются с "fr", "zh" или "en". Кроме того, неподдерживаемые локали будут возвращать 404 ошибки, а «domain.com/controller/action» будет правильно отображать английскую локаль по умолчанию.