for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Lochmueller\LanguageDetection\Detect;
use Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection;
use Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class BrowserLanguageDetect
{
public function __invoke(DetectUserLanguagesEvent $event): void
$languages = GeneralUtility::trimExplode(
',',
implode(',', $event->getRequest()->getHeader('accept-language')),
true
);
// Set default quality
$acceptedLanguagesArr = [];
foreach ($languages as $languageAndQualityStr) {
if (str_contains($languageAndQualityStr, ';')) {
$parts = GeneralUtility::trimExplode(';', $languageAndQualityStr, true);
$languageCode = $parts[0];
$quality = isset($parts[1]) ? $parts[1] : '';
} else {
$languageCode = $languageAndQualityStr;
$quality = 'q=1.0';
}
$acceptedLanguagesArr[$languageCode] = $quality !== '' ? (float)mb_substr($quality, 2) : 1.0;
// Sort
arsort($acceptedLanguagesArr);
// Remove quality 0.0
$acceptedLanguagesArr = array_filter($acceptedLanguagesArr, fn($value, $key): bool => $value !== 0.0, \ARRAY_FILTER_USE_BOTH);
$key
If this is a false-positive, you can also ignore this issue in your code via the ignore-unused annotation
ignore-unused
$acceptedLanguagesArr = array_filter($acceptedLanguagesArr, fn($value, /** @scrutinizer ignore-unused */ $key): bool => $value !== 0.0, \ARRAY_FILTER_USE_BOTH);
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
$event->setUserLanguages(LocaleCollection::fromArray(array_keys($acceptedLanguagesArr)));
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.