Mam problem z ustawieniem rouingu i tłumaczeniami w ZF1. Chcę, aby wyglądało to tak:
domain.tld - główna strona, domyślnie angielska (en)
de.domain.tld - ta sama strona, ale po niemiecku
XX.domain.tld - każde inne tłumaczenie, ta sama strona
etc.domain.tld - nieistniejące tłumaczenie -> przekierowanie na domain.tld
sub.domain.tld - inny moduł, bez tłumaczeń
DNSy są ustawione, serwer http przekierowuje wszystko do ZF poprawnie, ale coś poszło nie po mojej myśli, bo rezultat mam taki:
domain.tld - działa ok, jest po angielsku
etc.domain.tld - przekierowuje na domain.tld - jest ok
sub.domain.tld - jest ok
de.domain.tld - tłumaczy poprawnie index/index, ale każda inna podstrona pokazuje tylko i wyłącznie index/index (nie przekierowuje, po prostu ładuje zły kontroler i akcję)
Czy ktoś ma jakiś pomysł, co może być nie tak? Mam to zrobione tak:
Application.ini
Kod
resources.router.routes.radio.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.radio.route = ":sub.domain.tld"
resources.router.routes.radio.defaults.module = "radio"
resources.router.routes.radio.chains.index.defaults.controller = "index"
resources.router.routes.radio.chains.index.defaults.action = "listen"
resources.router.routes.radio.chains.listen.route = "listen/:station"
resources.router.routes.radio.chains.listen.defaults.controller = "index"
resources.router.routes.radio.chains.listen.defaults.action = "listen"
resources.router.routes.lang.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.lang.route = ":language.domain.tld"
resources.router.routes.lang.reqs.language= "[a-z]{2}"
resources.router.routes.lang.defaults.language = "en"
resources.router.routes.lang.defaults.controller = "index"
resources.router.routes.lang.defaults.action = "index"
resources.router.routes.radio.route = ":sub.domain.tld"
resources.router.routes.radio.defaults.module = "radio"
resources.router.routes.radio.chains.index.defaults.controller = "index"
resources.router.routes.radio.chains.index.defaults.action = "listen"
resources.router.routes.radio.chains.listen.route = "listen/:station"
resources.router.routes.radio.chains.listen.defaults.controller = "index"
resources.router.routes.radio.chains.listen.defaults.action = "listen"
resources.router.routes.lang.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.lang.route = ":language.domain.tld"
resources.router.routes.lang.reqs.language= "[a-z]{2}"
resources.router.routes.lang.defaults.language = "en"
resources.router.routes.lang.defaults.controller = "index"
resources.router.routes.lang.defaults.action = "index"
Bootstrap.php
Kod
$translate = new Zend_Translate('array',
APPLICATION_PATH . "/langs/",
'en,
array('scan' => Zend_Translate::LOCALE_DIRECTORY));
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Translate', $translate);
/* Activation of plugin for translations in controllers */
$subTranslate = new Stream_Controller_Plugin_SubTranslate();
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin($subTranslate);
APPLICATION_PATH . "/langs/",
'en,
array('scan' => Zend_Translate::LOCALE_DIRECTORY));
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Translate', $translate);
/* Activation of plugin for translations in controllers */
$subTranslate = new Stream_Controller_Plugin_SubTranslate();
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin($subTranslate);
Plugin kontrolera
Kod
<?php
class Stream_Controller_Plugin_SubTranslate extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$translate = Zend_Registry::get("Zend_Translate");
$urlLang = $request->getParam('language');
$translate->setLocale(new Zend_Locale('en_EN'));
if(isset($urlLang))
{
if ($translate->isAvailable($urlLang))
{
$translate->setLocale(new Zend_Locale($urlLang));
} else
{
$this->getResponse()->setRedirect('http://domain.tld', 301);
}
}
}
}
class Stream_Controller_Plugin_SubTranslate extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$translate = Zend_Registry::get("Zend_Translate");
$urlLang = $request->getParam('language');
$translate->setLocale(new Zend_Locale('en_EN'));
if(isset($urlLang))
{
if ($translate->isAvailable($urlLang))
{
$translate->setLocale(new Zend_Locale($urlLang));
} else
{
$this->getResponse()->setRedirect('http://domain.tld', 301);
}
}
}
}