diff --git a/app/Http/Middleware/Localization.php b/app/Http/Middleware/Localization.php
index 466c1442b..bdbf6ccbd 100644
--- a/app/Http/Middleware/Localization.php
+++ b/app/Http/Middleware/Localization.php
@@ -2,6 +2,7 @@
 
 use Carbon\Carbon;
 use Closure;
+use Illuminate\Http\Request;
 
 class Localization
 {
@@ -15,21 +16,33 @@ class Localization
     public function handle($request, Closure $next)
     {
         $defaultLang = config('app.locale');
-        if (user()->isDefault()) {
-            $locale = $defaultLang;
-            $availableLocales = config('app.locales');
-            foreach ($request->getLanguages() as $lang) {
-                if (!in_array($lang, $availableLocales)) {
-                    continue;
-                }
-                $locale = $lang;
-                break;
-            }
+
+        if (user()->isDefault() && config('app.auto_detect_locale')) {
+            $locale = $this->autoDetectLocale($request, $defaultLang);
         } else {
             $locale = setting()->getUser(user(), 'language', $defaultLang);
         }
+
         app()->setLocale($locale);
         Carbon::setLocale($locale);
         return $next($request);
     }
+
+    /**
+     * Autodetect the visitors locale by matching locales in their headers
+     * against the locales supported by BookStack.
+     * @param Request $request
+     * @param string $default
+     * @return string
+     */
+    protected function autoDetectLocale(Request $request, string $default)
+    {
+        $availableLocales = config('app.locales');
+        foreach ($request->getLanguages() as $lang) {
+            if (in_array($lang, $availableLocales)) {
+                return $lang;
+            }
+        }
+        return $default;
+    }
 }
diff --git a/config/app.php b/config/app.php
index 69e2380e8..b0883b9be 100755
--- a/config/app.php
+++ b/config/app.php
@@ -77,8 +77,21 @@ return [
     */
 
     'locale' => env('APP_LANG', 'en'),
+
     'locales' => ['en', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'],
 
+    /*
+    |--------------------------------------------------------------------------
+    | Auto-detect the locale for public users
+    |--------------------------------------------------------------------------
+    |
+    | For public users their locale can be guessed by headers sent by their
+    | browser. This is usually set by users in their browser settings.
+    | If not found the default app locale will be used.
+    |
+    */
+    'auto_detect_locale' => env('APP_AUTO_LANG_PUBLIC', true),
+
     /*
     |--------------------------------------------------------------------------
     | Application Fallback Locale
@@ -245,7 +258,7 @@ return [
         'Activity' => BookStack\Services\Facades\Activity::class,
         'Setting'  => BookStack\Services\Facades\Setting::class,
         'Views'    => BookStack\Services\Facades\Views::class,
-        'Images'   => \BookStack\Services\Facades\Images::class,
+        'Images'   => BookStack\Services\Facades\Images::class,
 
     ],