- Published on
TYPO3: Autolanguage detection with PSR-15
- Authors
- Name
- Susanne Moog
This post outlines a simple approach to detect a visitor’s preferred language and redirect to the appropriate site language using a PSR-15 middleware in TYPO3.
Middleware skeleton
<?php
declare(strict_types=1);
namespace Vendor\Site\Middleware;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
final class LanguageDetectionMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$acceptLang = $request->getHeaderLine('Accept-Language');
$preferred = substr($acceptLang, 0, 2) ?: 'en';
// Map to site language base
$map = [
'de' => '/de/',
'en' => '/en/',
];
$target = $map[$preferred] ?? '/en/';
// Example: redirect if we’re at root
$uri = (string)$request->getUri();
if (rtrim($uri, '/') === '') {
return new \TYPO3\CMS\Core\Http\RedirectResponse($target, 302);
}
return $handler->handle($request);
}
}
Register middleware
Configuration/RequestMiddlewares.php
:
<?php
return [
'frontend' => [
'vendor/site/lang-detect' => [
'target' => Vendor\Site\Middleware\LanguageDetectionMiddleware::class,
'after' => [ 'typo3/cms-frontend/site' ],
],
],
];
Notes
- Use robust language parsing and persist the user’s choice via cookie
- Respect already localized URLs and avoid redirect loops
- Consider geo-IP or user profile settings as a fallback
With a small middleware you can offer a more localized experience to your visitors.