This bundle simply redirects your requests to a locale prefixed route.
So /news
is going to be /en/news
, if the current language is en
.
Localized routes are something that has been repeatedly discussed on sites like StackOverflow in the past.
I think it's better to use a well tested bundle for this purpose instead of writing a new listener for each project. This bundle can then be further developed and improved by the community.
composer require braunstetter/localized-routes
Now you can prefix your controller routes:
# annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: /{_locale}
You're done! Your blank routes are getting redirected to localized ones.
Since the framework bundle already provides two configuration values (default_locale, enabled_locales), we can use this to configure our forwarding process.
framework:
default_locale: en
enabled_locales: [ 'es', 'en' ]
This is just the fallback locale. If not set, Symfony will try to determine a value based on your system settings. Most likely 'en'.
If this value is not specified, then all locales are allowed. If you transfer an array of values here, the selection is restricted accordingly.
This bundle exposes the enabled_locales
and default_locale
configuration values of the framework-bundle as parameters.
In addition to this, you also have an enabled_locales_string
parameter - joining your enabled_locales e.g.: de|en|es
So you can use these locale-specific parameters in your configuration files:
# annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: /{_locale}
requirements:
_locale: '%enabled_locales_string%'
defaults:
_locales: '%default_locale%'
This bundle can certainly be improved. If you have any questions and/or suggestions for improvements, don't hesitate to create a new issue or submit a PR.
- add attributes to documentation
- add explanation for a language switcher to documentation
- redirect on not supported locale to default locale - like
/es/my_route
when justde|en
are supported