Ищу лучшие практики маршрутизации Symfony (4) для моей схемы URL. Допустим, я обнаруживаю IP-адрес GEO и показываю другой язык для веб-пользователей даже в URL-адресе. Итак, как лучше всего разработать маршрутизацию?
примеры ссылок, когда пользователь из США:
example.com/static_link_in_en/additional_static_element_in_en/special_static_element_in_en/extra_static_attribute_in_en
example.com/product_name_in_en/additional_element_of_product_in_en/special_element_for_this_item_in_en/extra_attribute_in_en
когда пользователь приезжает из Франции:
example.com/static_link_in_fr/additional_static_element_in_fr/special_static_element_in_fr/extra_static_attribute_in_fr
example.com/product_name_in_fr/additional_element_of_product_in_fr/special_element_for_this_item_in_fr/extra_attribute_in_fr
другой, может быть, лучший пример:
example.com/tag - static route, generates a tag cloud in EN
example/tag/ - static route, but displays an error or 404 page, because we are not searching in the database with an empty string in EN
example.com/tag/red - searching in the database with keyword 'red'
example.com/tag/blue - exceptional keyword, we have reserved tag 'blue' so the script will not be searching in the database, the static route will be used in EN
те же действия только что переведены на французский язык:
example.com/marque
example.com/marque/
example.com/marque/rouge
допустим, глубинный уровень URL может содержать до 10 элементов, какие-нибудь предложения?






Лучшая политика - включить языковой стандарт в URL-адрес. Это полностью поддерживается системой маршрутизации с использованием специального параметра _locale.
# config/routes.yaml
contact:
path: /{_locale}/contact
controller: App\Controller\ContactController::index
requirements:
_locale: en|fr|de
При использовании в маршруте специального параметра _locale соответствующий языковой стандарт автоматически устанавливается в запросе и может быть получен с помощью метода getLocale (). Другими словами, если пользователь посещает URI / fr / contact, языковой стандарт fr автоматически устанавливается в качестве языкового стандарта для текущего запроса.
Теперь вы можете использовать локаль для создания маршрутов к другим переведенным страницам вашего приложения.
Источник: https://symfony.com/doc/current/translation/locale.html
Symfony не поддерживает определение маршрутов с различным содержимым в зависимости от языка пользователя. В этих случаях вы можете определить несколько маршрутов для каждого контроллера, по одному для каждого поддерживаемого языка; или используйте любой из пакетов, созданных сообществом для реализации этой функции, например JMSI18nRoutingBundle и BeSimpleI18nRoutingBundle.
Источник: https://symfony.com/doc/current/routing.html#translating-routes