Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 5 additions & 10 deletions src/EventSubscriber/LocaleSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,17 @@

class LocaleSubscriber implements EventSubscriberInterface
{
public function __construct(
private Service\Locales $locales,
) {
}

public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();

$preferredLocale = $this->locales->getBest($request->getLanguages());
$locale = $request->getPreferredLanguage(Service\Locales::getSupportedLocalesCodes());

if ($request->hasPreviousSession()) {
$locale = $request->getSession()->get('_locale', $preferredLocale);
$request->setLocale($locale);
} else {
$request->setLocale($preferredLocale);
$locale = $request->getSession()->get('_locale', $locale);
}

$request->setLocale($locale);
}

public static function getSubscribedEvents(): array
Expand Down
46 changes: 0 additions & 46 deletions src/Service/Locales.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,50 +51,4 @@ public function isAvailable(string $locale): bool
{
return isset(self::SUPPORTED_LOCALES[$locale]);
}

/**
* @param string[] $requestedLocales
*/
public function getBest(array $requestedLocales): string
{
// First, look for an exact match in the supported locales:
foreach ($requestedLocales as $locale) {
if (self::isAvailable($locale)) {
return $locale;
}
}

// Then, create an array to match "super" locales (e.g. en) to
// supported country locales (e.g. en_GB):
$supersToLocales = [];
foreach (self::SUPPORTED_LOCALES as $locale => $localeName) {
$splitLocale = explode('_', $locale, 2);
if (count($splitLocale) < 2) {
continue;
}

$superLocale = $splitLocale[0];
if (!isset($supersToLocales[$superLocale])) {
$supersToLocales[$superLocale] = $locale;
}
}

// And search requested locales in the lookup array:
foreach ($requestedLocales as $locale) {
$splitLocale = explode('_', $locale, 2);
if (count($splitLocale) === 1) {
$superLocale = $locale;
} else {
$superLocale = $splitLocale[0];
}

if (isset($supersToLocales[$superLocale])) {
return $supersToLocales[$superLocale];
}
}

// Bileto doesn't support the requested locales, let's return the
// default one.
return self::getDefaultLocale();
}
}
81 changes: 0 additions & 81 deletions tests/Service/LocalesTest.php

This file was deleted.