1

So, I've set up a simple means of changing languages:

    protected function _initRoutes()
    {
        $this->bootstrap('FrontController');
        $this->_frontController = $this->getResource('FrontController');

        $router = $this->_frontController->getRouter();

        $route = new Zend_Controller_Router_Route(
            ':language/:controller/:action/*',
            array(
                 'language' => 'en',
                 'module' => 'default',
                 'controller' => 'index',
                 'action' => 'index'
            )
        );
        $router->addRoute('lang_default', $route);

    }

    protected function _initLanguage()
    {
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new JP_Controller_Plugin_Language());
    }

And:

class JP_Controller_Plugin_Language
    extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {

        $locale = new Zend_Locale();
        $options = array('scan' => Zend_Translate::LOCALE_FILENAME);
        $translate = new Zend_Translate('array', APPLICATION_PATH . '/translations/', 'auto', $options);

        $requestParams = $this->getRequest()->getParams();
        $language = (isset($requestParams['language'])) ? $requestParams['language'] : false;
        if ($language == false) {
            $language = ($translate->isAvailable($locale->getLanguage())) ? $locale->getLanguage() : 'en';
        }
        if (!$translate->isAvailable($language)) {
            throw new Zend_Controller_Action_Exception('This page, in this language doesn\'t exist', 404);
        } else {
            $locale->setLocale($language);
            $translate->setLocale($locale);

            Zend_Form::setDefaultTranslator($translate);


            setcookie('lang', $locale->getLanguage(), null, '/');
            Zend_Registry::set('Turniri_Language', $language);
            Zend_Controller_Front::getInstance()->setBaseUrl('/'.Zend_Registry::get('Turniri_Language'));
            Zend_Registry::set('Zend_Locale', $locale);
            Zend_Registry::set('Zend_Translate', $translate);
        }
    }
}

So, now I've got a wish. I'd like to use the same approach that I've been using until now, like seting Form Action like this:

$form->setAction("/path/to/some/action");

but I'd also like for the system to automatically prepend the language id to the url. How could this be done?

using setBaseUrl() didn't do it.

Janis Peisenieks
  • 4,938
  • 10
  • 55
  • 85

0 Answers0