diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index 32967742bd277c793ed50c86a1a18d18db4c2b47..8b39de290860a75f93fffd1431679a29acf4a77d 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -442,6 +442,10 @@ class UsersController extends AUserData {
 			if ($this->config->getSystemValue('force_language', false) === false ||
 				$this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
 				$permittedFields[] = 'language';
+			}
+
+			if ($this->config->getSystemValue('force_locale', false) === false ||
+				$this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
 				$permittedFields[] = 'locale';
 			}
 
diff --git a/config/config.sample.php b/config/config.sample.php
index a1445d77095a7478d7280a64d6700d6ed33ac2fa..2218021bab9a738c1a886b9dc6c7cbb29d2fae91 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -178,6 +178,29 @@ $CONFIG = array(
  */
 'force_language' => 'en',
 
+/**
+ * This sets the default locale on your Nextcloud server, using ISO_639
+ * language codes such as ``en`` for English, ``de`` for German, and ``fr`` for
+ * French, and ISO-3166 country codes such as ``GB``, ``US``, ``CA``, as defined
+ * in RFC 5646. It overrides automatic locale detection on public pages like
+ * login or shared items. User's locale preferences configured under "personal
+ * -> locale" override this setting after they have logged in.
+ *
+ * Defaults to ``en``
+ */
+'default_locale' => 'en_US',
+
+/**
+ * With this setting a locale can be forced for all users. If a locale is
+ * forced, the users are also unable to change their locale in the personal
+ * settings. If users shall be unable to change their locale, but users have
+ * different languages, this value can be set to ``true`` instead of a locale
+ * code.
+ *
+ * Defaults to ``false``
+ */
+'force_locale' => 'en_US',
+
 /**
  * Set the default app to open on login. Use the app names as they appear in the
  * URL after clicking them in the Apps menu, such as documents, calendar, and
diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php
index a6b91d53e4fcdfbfd962843366f648bee82f5512..86f2ab3b1f0cf62f46844d564b169e44157eb0dd 100644
--- a/lib/private/L10N/Factory.php
+++ b/lib/private/L10N/Factory.php
@@ -111,6 +111,11 @@ class Factory implements IFactory {
 			$lang = $forceLang;
 		}
 
+		$forceLocale = $this->config->getSystemValue('force_locale', false);
+		if (is_string($forceLocale)) {
+			$locale = $forceLocale;
+		}
+
 		if ($lang === null || !$this->languageExists($app, $lang)) {
 			$lang = $this->findLanguage($app);
 		}
@@ -207,17 +212,17 @@ class Factory implements IFactory {
 			return $userLocale;
 		}
 
-		// If no user locale set, use lang as locale
-		if (null !== $lang && $this->localeExists($lang)) {
-			return $lang;
-		}
-
 		// Default : use system default locale
 		$defaultLocale = $this->config->getSystemValue('default_locale', false);
 		if ($defaultLocale !== false && $this->localeExists($defaultLocale)) {
 			return $defaultLocale;
 		}
 
+		// If no user locale set, use lang as locale
+		if (null !== $lang && $this->localeExists($lang)) {
+			return $lang;
+		}
+
 		// At last, return USA
 		return 'en_US';
 	}