Маршрут с культурой, например:
contacts:
url: /:sf_culture/contacts
param: { module: static, action: contacts }
requirements: { sf_culture: (?:uk) }
Тот же маршрут без культуры:
contacts:
url: /contacts
param: { module: static, action: contacts }
Просто установите культуру по умолчанию для каждого пользователя, когда:
homepage:
url: /
param: { module: static, action: about}
requirements: { sf_culture: (?:uk }
localized_homepage:
url: /:sf_culture
param: { module: static, action: about}
requirements: { sf_culture: (?:uk) }
apps/frontend/modules/static/action.class.php
public function executeAbout(sfWebRequest $request)
{
if (!$request->getParameter('sf_culture'))
{
if ($this->getUser()->isFirstRequest())
{
$culture = $request->getPreferredCulture(array('uk'));
$this->getUser()->setCulture($culture);
$this->getUser()->isFirstRequest(false);
}
else
{
$culture = $this->getUser()->getCulture();
}
$this->redirect('localized_homepage');
}
}
// apps / frontend / lib / myUser.class.php
public function isFirstRequest($boolean = null)
{
if (is_null($boolean))
{
return $this->getAttribute('first_request', true);
}
$this->setAttribute('first_request', $boolean);
}
Если пользователь вводит ссылку, которая не содержит никакой культуры, то все в порядке, важно то, что она была ранее определена,Просто попробуйте)
Вы также можете установить культуру в действии:
$this->getUser()->setCulture('uk');
Обновление:
Если переменная sf_culture отсутствует в запросе, это означает, что пользователь зашел на / URL.Если это так, и сеанс новый, предпочтительная культура используется в качестве пользовательской культуры.В противном случае используется текущая культура пользователя.
Это из учебника Jobeet. ( click )