diff --git a/src/Locale/Locale.php b/src/Locale/Locale.php
index c06bd95a66da260ba44978a8ce038167ab1ea87b..b7d9a6ddb468c07904afdbf98a261664d58de8b1 100644
--- a/src/Locale/Locale.php
+++ b/src/Locale/Locale.php
@@ -74,7 +74,10 @@ class Locale
         return $locale;
     }
 
-    private static function setRequestLocaleFromQuery(Request $request, string $queryParam): void
+    /**
+     * Same as setCurrentRequestLocaleFromQuery(), but takes a request object.
+     */
+    public static function setRequestLocaleFromQuery(Request $request, string $queryParam): void
     {
         if ($request->query->has($queryParam)) {
             $lang = $request->query->get($queryParam);
diff --git a/tests/LocaleTest.php b/tests/LocaleTest.php
index e9f924c0fc5f302762f989efe7ad7547a8ba1016..f5c08826d403c4cc6f7cec48461ba7bc4a795e56 100644
--- a/tests/LocaleTest.php
+++ b/tests/LocaleTest.php
@@ -39,4 +39,20 @@ class LocaleTest extends TestCase
         $lang = $service->getCurrentPrimaryLanguage();
         $this->assertSame('de', $lang);
     }
+
+    public function testSetExplicit()
+    {
+        $stack = new RequestStack();
+        $params = new ParameterBag(['kernel.default_locale' => \Locale::acceptFromHttp('en')]);
+        $service = new Locale($stack, $params);
+        $request = new Request(['foo' => 'fr']);
+        $service->setRequestLocaleFromQuery($request, 'foo');
+
+        $stack->push($request);
+        $lang = $service->getCurrentPrimaryLanguage();
+        $this->assertSame('fr', $lang);
+        $stack->pop();
+        $lang = $service->getCurrentPrimaryLanguage();
+        $this->assertSame('en', $lang);
+    }
 }