src/Aqarmap/Bundle/MainBundle/Locale/DefaultLocaleResolver.php line 40

  1. <?php
  2. namespace Aqarmap\Bundle\MainBundle\Locale;
  3. use JMS\I18nRoutingBundle\Router\LocaleResolverInterface;
  4. use Symfony\Component\HttpFoundation\Request;
  5. /**
  6. * Default Locale Resolver.
  7. */
  8. class DefaultLocaleResolver implements LocaleResolverInterface
  9. {
  10. public function __construct(private readonly string $cookieName, $acceptHeaderLanguages = true, private array $hostMap = [])
  11. {
  12. }
  13. public function resolveLocale(Request $request, array $availableLocales): ?string
  14. {
  15. if ($this->hostMap && isset($this->hostMap[$host = $request->getHost()])) {
  16. return $this->hostMap[$host];
  17. }
  18. // if a locale has been specifically set as a query parameter, use it
  19. if ($request->query->has('hl')) {
  20. $hostLanguage = $request->query->get('hl');
  21. if (preg_match('#^[a-z]{2}(?:_[a-z]{2})?$#i', $hostLanguage)) {
  22. return $hostLanguage;
  23. }
  24. }
  25. // check if a session exists, and if it contains a locale
  26. if ($request->hasPreviousSession()) {
  27. $session = $request->getSession();
  28. if ($session->has('_locale')) {
  29. return $session->get('_locale');
  30. }
  31. }
  32. // if user sends a cookie, use it
  33. if ($request->cookies->has($this->cookieName)) {
  34. $hostLanguage = $request->cookies->get($this->cookieName);
  35. if (preg_match('#^[a-z]{2}(?:_[a-z]{2})?$#i', $hostLanguage)) {
  36. return $hostLanguage;
  37. }
  38. }
  39. return null;
  40. }
  41. }