diff --git a/components/Feed/Controller/Feeds.php b/components/Feed/Controller/Feeds.php index 56a01ef2dc..d43e6ae3db 100644 --- a/components/Feed/Controller/Feeds.php +++ b/components/Feed/Controller/Feeds.php @@ -49,7 +49,7 @@ class Feeds extends FeedController { $data = $this->query( query: 'note-local:true', - language: Common::actor()?->getTopLanguage()?->getLocale(), + locale: Common::currentLanguage()->getLocale(), ); return [ '_template' => 'collection/notes.html.twig', @@ -67,7 +67,7 @@ class Feeds extends FeedController $actor = $user->getActor(); $data = $this->query( query: 'note-from:subscribed-person,subscribed-group,subscribed-organization,subscribed-business', - language: $actor->getTopLanguage()->getLocale(), + locale: Common::currentLanguage()->getLocale(), actor: $actor, ); return [ diff --git a/components/FreeNetwork/Controller/Feeds.php b/components/FreeNetwork/Controller/Feeds.php index f9db70b7fe..7ef8e807e0 100644 --- a/components/FreeNetwork/Controller/Feeds.php +++ b/components/FreeNetwork/Controller/Feeds.php @@ -53,7 +53,7 @@ class Feeds extends FeedController Common::ensureLoggedIn(); $data = $this->query( query: 'note-local:false', - language: Common::actor()?->getTopLanguage()?->getLocale(), + locale: Common::currentLanguage()->getLocale(), ); return [ '_template' => 'collection/notes.html.twig', @@ -101,7 +101,7 @@ class Feeds extends FeedController Common::ensureLoggedIn(); $data = $this->query( query: '', - language: Common::actor()?->getTopLanguage()?->getLocale(), + locale: Common::currentLanguage()->getLocale(), ); return [ '_template' => 'collection/notes.html.twig', diff --git a/src/Core/I18n/I18n.php b/src/Core/I18n/I18n.php index 70d477d87a..2e2eb25b82 100644 --- a/src/Core/I18n/I18n.php +++ b/src/Core/I18n/I18n.php @@ -38,6 +38,7 @@ declare(strict_types = 1); namespace App\Core\I18n; +use App\Util\Common; use App\Util\Exception\ServerException; use App\Util\Formatting; use InvalidArgumentException; @@ -319,7 +320,7 @@ function _m(...$args): string switch (\count($args)) { case 1: // Empty parameters, simple message - return I18n::$translator->trans($args[0], [], $domain); + return I18n::$translator->trans($args[0], [], $domain, Common::currentLanguage()->getLocale()); case 3: // @codeCoverageIgnoreStart if (\is_int($args[2])) { @@ -337,7 +338,7 @@ function _m(...$args): string if (\is_string($args[0])) { $msg = $args[0]; $params = $args[1] ?? []; - return I18n::$translator->trans($msg, $params, $domain); + return I18n::$translator->trans($msg, $params, $domain, Common::currentLanguage()->getLocale()); } // Fallthrough // no break diff --git a/src/Util/Common.php b/src/Util/Common.php index fefaf674a7..ecbd286f37 100644 --- a/src/Util/Common.php +++ b/src/Util/Common.php @@ -34,11 +34,13 @@ declare(strict_types = 1); namespace App\Util; +use App\Core\I18n\I18n; use App\Core\Router\Router; use App\Core\Security; use App\Entity\Actor; use App\Entity\LocalUser; use App\Util\Exception\NoLoggedInUser; +use Component\Language\Entity\Language; use Egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\Validation\RFCValidation as RFCEmailValidation; use Functional as F; @@ -318,4 +320,9 @@ abstract class Common } return $notes; } + + public static function currentLanguage(): Language + { + return self::actor()?->getTopLanguage() ?? Language::getByLocale(!\is_null(self::$request->headers->get('accept-language')) ? I18n::clientPreferredLanguage(self::$request->headers->get('accept-language')) : self::$request->getDefaultLocale()); + } }