Как организовать многоязычные проекты Zend

Я построил многоязычный веб-сайт. Язык можно переключать, нажимая на флажки на сайте. При нажатии на любой из них запрос передается контроллеру со следующим кодом:

<?php

class LanguageSwitchController extends Zend_Controller_Action
{
    protected $_redirector = null;
    public function init(){
        $this->_helper->layout->disableLayout;
        $this->_helper->viewRenderer->setNoRender();

        $this->_redirector = $this->_helper->getHelper('Redirector');
/*      $this->_redirector->setGotoUrl($this->getInvokeArg('referer'));
*/
    }
    public function switchAction(){
        $session = new Zend_Session_Namespace('language');
        $session->language = $this->_getParam('lang');

        $this->_redirector->gotoUrl($_SERVER['HTTP_REFERER']);
    }
}

Все параметры, связанные с Zend_Session, Zend_Translate и Zend_Locale, определены в файле Bootstripe. В основном все работает отлично. Я использую адаптер Array. Все переводы хранятся в 3 файлах php (ro, ru, en) и в зависимости от выбранного языка страница отображается на соответствующем языке. Проблема в том, что каждая страница не имеет уникального URL для каждого языка. Например, если пользователь находится на странице http://mysite.com/mycontroller/myaction (предположим, что страница отображается на английском языке, потому что это язык по умолчанию для браузера пользователей - сайт автоматически определяет язык браузера по умолчанию) и примет решение переключить его на русский, нажав соответствующий флаг, сайт будет отображается на русском языке, но URL останется прежним: http://mysite.com/mycontroller/myaction, Таким образом, я не могу соответствующим образом проиндексировать его, например, через Google. Не имея уникального URL для каждой страницы на каждом языке, я смогу проиндексировать его только для одного языка (по умолчанию, я считаю). Есть ли возможность как-то настроить проект или мне нужно полностью изменить структуру сайта? Вообще говоря, каков наиболее эффективный способ организации структуры проекта на основе Zend Framework, когда сайт переведен на несколько языков? Благодарю вас.

1 ответ

Решение

Как насчет использования пользовательских маршрутов? Например, определите маршрут для английского языка:

routes.english.route = "en/:controller/:action"
routes.english.defaults.lang = en
Другие вопросы по тегам