9 Reaktionen zu “EXT:redirects – Sprach-Weiterleitungen richtig gelöst”

Kommentare abonnieren (RSS) oder TrackBack URL

Mittlerweile gibts kleine Anpassungen zu machen: zb. der namespace hat sich geändert. Soweit kein Problem. Der Trait scheitert aber mit dem Fehler „Typed property FMD\FmdLanguagedetection\Service\RedirectService::$linkLanguageHandler must not be accessed before initialization
in /var/www/fohhn/www-dev/typo3conf/ext/language_detection/Classes/Service/RespectLanguageLinkDetailsTrait.php line 36“

Ich war somit leider nicht in der Lage das hier umzusetzen.

Alex am 31. August 2022 um 10:25

Hey Alex,
der Trait hat sich inzwischen ein wenig verändert. Dieser braucht nicht mehr eine „EventDispatcherInterface“ implementierung, sondern ein LinkLanguageHandler objekt. Der Code von oben sollte weiter funktionieren, du musst nur ein anderes Objekt in deinem Konstruktur via DI entgegennehmen, sodass der Trait vollständig ist. Siehe hier: https://github.com/lochmueller/language_detection/blob/main/Classes/Service/RespectLanguageLinkDetailsTrait.php#L20

Beste Grüße,
Tim

Tim Lochmüller am 31. August 2022 um 10:57

Hi Tim, danke für die Hilfe. Ich hab das angepasst, versuche jetzt schon eine Weile hinter die Details zu steigen. Mit den oben genannten Anpassungen wird kein PHP Fehler mehr ausgegeben, aber es findet keine Sprachprüfung statt.

Ich hab dann das $response = $this->linkLanguageHandler->handle($request); mal aus dem try {} catch rausgenommen um zu sehen was hier passiert:

(1/1) #3284924 Lochmueller\LanguageDetection\Handler\Exception\NoUserLanguagesException

No user languages
in /var/www/fohhn/www-dev/typo3conf/ext/language_detection/Classes/Handler/LinkLanguageHandler.php line 45

Tritt bei $detect->getUserLanguages()->isEmpty() auf. Warum verstehe ich nicht, $site und $request sehen für mich okay aus.

Vielleicht hast Du noch mal einen Tip. Das hier wäre ein sinnvolles Feature für viele in der Community.

Danke
Alex

Alex am 31. August 2022 um 13:24

PS Ich glaube die LocaleCollection ist zu dem Zeitpunkt, nachdem sie instanziert und geprüft wurde einfach leer, daher greift das ->isEmpty() .

Alex am 31. August 2022 um 13:43

Hast du mal geschaut ob in dem Request ein „accept-language“ header drin ist? Ggf. fehlt der in deinem Beispiel und entsprechend gibt es dann keine Benutzer Sprache.

Vgl.: https://github.com/lochmueller/language_detection/blob/main/Classes/Detect/BrowserLanguageDetect.php#L15

Beste Grüße,
Tim

Tim Lochmüller am 31. August 2022 um 13:52

Um diesen Request geht es: https://github.com/lochmueller/language_detection/blob/main/Classes/Service/RespectLanguageLinkDetailsTrait.php#L32 Der sollte eine Benutzer Sprache haben, da ansonsten auch keine Detection stattfinden kann.

Tim Lochmüller am 31. August 2022 um 13:53

Der Request des Browsers ist okay (Accept-Language de,en;q=0.7,af;q=0.3). Ich hab hier paar Sprachen zum Testen in Rotation.

Auf Codeseite dann hab ich den ServerRequest $request und $site angeschaut, die beide in linkLanguageHandler benötigt werden. Die Objekte sehen soweit ich sie bisher gesehen habe okay aus. Von meinen Browsersprachen ist hier aber nichts enthalten. Müssten die hier irgendwo in den Objekten sein?

Im Code gehts dann weiter über LinkLanguageHandler, DetectUserLanguagesEvent, und dann über LocaleCollection. Diese ist leer. Ich finde auch nichts wo die Browsersprache irgendwie in die LocaleCollection mit add() gesetzt wird.

Alex am 31. August 2022 um 14:14

Hey Alex, bitte mach hier mal ein Issue auf: https://github.com/lochmueller/language_detection/issues
Das macht mehr Sinn als hier im Blog. Ich vermute das das interne Request Objekt falsch ist (sollte auch die Sprachen enthalten, da ansonsten keine Detection gemacht werden kann). Beste Grüße,
Tim

Tim Lochmüller am 31. August 2022 um 14:17

Hi Tim, danke, werd ich machen. Das ist die beste Lösung. Grüße Alex

Alex am 31. August 2022 um 16:52

Kategorien

Archiv