@viz_ko

Как лучше реализовать Routing многоязычного мультисайта на Symfony?

Все доброго времени суток.

Есть (точнее будет) многоязычный мультисайт. Подскажите, как лучше реализовать роутинг (чтобы последующие программисты меня не вспоминали).
Представим, у нас есть сайт (на поддомене)
dom1.site.com - у него доступно несколько языков: Русский (дефолтный), Английский (дополнительный).
Нужно чтобы страницы на русском языке открывались без локали (т.к. дефолтный) dom1.site.com/contact а эти же страницы на английском языке открывались с локалью dom1.site.com/en/contact
Теперь будем представлять дальше. Есть другой сайт
dom2.site.com - у него дефолтный Английский, а дополнительный Испанский. Следовательно. страницы на дефолтном языке должны быть без локали: dom2.site.com/contact а страницы на испанском с локалью dom2.site.com/es/contact
  • Информация о локалях всех сайтов хранится в базе данных. Локали могут правиться (например завтра решили, что дефолтный язык dom2.site.com Португальский).
  • Таких сайтов 200+, языков 15+.
  • Сам сайт site.com тоже рабочий и тоже имеет локали.
  • Все сайты похожи друг на друга, меняется только контактная информация и некоторые тексты на страницах


В целом, отказ от локалей в адресе и хранения ее в сессии я бы не рассматривал. т.к. seo-шник меня порвет, ведь в единицу времени будет существовать сайт с большим количеством title на разных языках.
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@viz_ko Автор вопроса
Один из способов решения(на мой взгляд самый простой):
Нам нужно отказаться от routes.yaml (удалям файл) и создать routes.php со следующим содержимым:

<?php
// Файл config/routes.php
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return static function (RoutingConfigurator $routes):void {
    // Массив с префиксами. Тут мы можем менять префиксы на основе любых условий
    $prefix = ['ru'=>'/', 'en'=>'/en'];

    $routes->import(
        // Стандартное поведение - через атрибуты контроллеров
        '../src/Controller/',
        'attribute',        
    )->prefix($prefix); // Добавляем наши префиксы
};


Дальше нужно решить, как именно править массив с префиксами. Можно создать отдельный json файл, и загружать информацию из него, можно попытаться получить данные из базы (Entity на данном этапе еще не доступны), жестко закодировать массив или любой другой способ, который покажется оптимальным в данной ситуации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы