1 Отредактировано compplace (2015-05-16 02:12:16)

Тема: Проблемы с языковой версией

Пробую добавить языковую версию на сайт.
С Symfony никогда не работал. Версия вроде бы 1.4.
Надо сделать, чтобы по ссылке /en открывалась вторая языковая версия.
Добавлял в .htaccess правила, писал в routing.yml такое:

en:
  url:   /en
  param: { module: homepage, action: index }

Но по ссылке /en всё равно 404.
Пробовал удалять содержимое папки symfony/cache, но тогда вообще всё ложится.
Как правильно добавить эту ссылку, чтобы она вела на главную, но передавала язык и как перенаправить все остальные страницы, чтобы они так же шли дочерними ссылками языковыми типа /en/about и тд при этом чтобы дефолтный язык остался по старым ссылкам?

2 Отредактировано ta1isman (2015-05-15 17:37:39)

Re: Проблемы с языковой версией

прикольно. а почему вы решили что это должно сработать?

Вам бы почитать старый добрый Joobet http://symfony.com/legacy/doc/jobeet/1_ … m=Doctrine

Форум сообщества - не место для любой политической агитации...
Хотите выражать свои политические взгляды - переименуйте его в форум Васи Пупкина,
и высказывайтесь от своего имени, а не от имени всего сообщества.
PS: это моя гражданская позиция )

3

Re: Проблемы с языковой версией

Я думал тут как в обычных MVC можно добавлять модули и страницы свободно...
Что-то я не пойму как он вообще работает.
Добавил как в той ссылке написано параметр :sf_culture к странице /contacts

contacts:
  param: { module: homepage, action: contacts }
  prefix_path:    /:sf_culture/contacts

захожу на /ua/contacts и всё та же 404. Что надо кэш почистить? Или ещё что-то прописать где-то?
Доступа к консоли сервера нет(

4

Re: Проблемы с языковой версией

compplace пишет:

как в обычных MVC

Что, простите? Вы паттерн MVC с CMS не перепутали?

Параметр prefix_path, как мне подсказывают мои остатки памяти, работает только для коллекций, не для простых роутов. И в доке про это явно где-то написано. Так что ваша запись работать не будет, хотя без сброса кеша правильная запись также не будет работать.

Далее. Если у вас были ссылки без поддиректории языка, то добавлением :sf_culture в путь вы все их измените. Соответственно, все старые урл станут давать 404, что вряд ли понравится поисковикам, у которых эти урл в индексе. Для сохранения текущих ссылок процесс сложнее — нужно еще наваять пачку редиректов со старых роутов на новые.

Можно конечно оставить старые роуты нетронутыми и добавить новые с requirements по языку (чтобы не возникло дублей и перекрытий), но этот путь самурая может оказаться слишком сложным. Приложение, вероятнее всего, совершенно не готово к такому раскладу, и будет генерировать ссылки по тем роутам, которые явно указаны по именам.

И да, добавление роутов не добавит языковую версию на сайт, если сайт изначально не рассматривался разработчиком как многоязычное приложение. Все интерфейсные надписи в шаблонах должны быть обернуты в __(). Схема данных также должна быть готова для добавления многоязычных данных (иметь I18n таблицы). Если чего-либо из этого нет, то даже самые правильные роуты вам ничем не помогут.

5

Re: Проблемы с языковой версией

relo_san пишет:

Что, простите? Вы паттерн MVC с CMS не перепутали?

Параметр prefix_path, как мне подсказывают мои остатки памяти, работает только для коллекций, не для простых роутов. И в доке про это явно где-то написано. Так что ваша запись работать не будет, хотя без сброса кеша правильная запись также не будет работать.

Далее. Если у вас были ссылки без поддиректории языка, то добавлением :sf_culture в путь вы все их измените. Соответственно, все старые урл станут давать 404, что вряд ли понравится поисковикам, у которых эти урл в индексе. Для сохранения текущих ссылок процесс сложнее — нужно еще наваять пачку редиректов со старых роутов на новые.

Можно конечно оставить старые роуты нетронутыми и добавить новые с requirements по языку (чтобы не возникло дублей и перекрытий), но этот путь самурая может оказаться слишком сложным. Приложение, вероятнее всего, совершенно не готово к такому раскладу, и будет генерировать ссылки по тем роутам, которые явно указаны по именам.

И да, добавление роутов не добавит языковую версию на сайт, если сайт изначально не рассматривался разработчиком как многоязычное приложение. Все интерфейсные надписи в шаблонах должны быть обернуты в __(). Схема данных также должна быть готова для добавления многоязычных данных (иметь I18n таблицы). Если чего-либо из этого нет, то даже самые правильные роуты вам ничем не помогут.

Не перепутал... Тут хитрая реализация MVC, не так как в других фрэймворках... С ORM, настройками в yml, консолью и т.д.
Так как можно языковую версию добавить или для этого весь сайт надо переделывать?
И как кэш очистить не имя доступ к консоли?

6

Re: Проблемы с языковой версией

compplace пишет:

Не перепутал

Вы бредите. Паттерну MVC нет вообще никакого дела до добавления модулей и страниц. Ему глубоко похуй, он за это не отвечает. С таким же успехом можно утверждать «как в других php-скриптах».

compplace пишет:

Так как можно языковую версию добавить

Реализацию этого конкретного проекта кто-то кроме вас видел и знает, что там наваял программист? Вы опять путаете фреймворк с ЦМС. Здесь нет никаких готовых решений, как из немногоязычного сайта сделать многоязычный двумя кликами мыши. Никто не знает, учитывал ли программист, создававший сайт, изначально, что будет более одного языка, или нет. Если не учитывал, и у модели нет многоязычности, а надписи интерфейса в шаблонах забиты напрямую, то единственный способ сделать такой сайт многоязычным — масштабная переработка кода.

compplace пишет:

И как кэш очистить не имя доступ к консоли?

Удалить все в директории cache, через эфтепе. Но при этом, если у вас все ляжет или кеш сгенерируется с ошибками — это нормально. Потому что не надо удалять кеш таким образом. Нужно иметь доступ к консоли.
Также замечу, что если вы что-то поменяли в коде или конфигурации, и ваши изменения содержат ошибки, то после сброса кеша вы получите 500-ю, потому что пока есть кеш — ваши изменения вместе с ошибками сайт не видит и не учитывает. А как только кеш удалится, будет запрошена генерация нового, и вот тут возникнет исключение.