Как организовать многоязычные проекты 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