From df143cb72a9681d977a7fa85553a95ce1ee2314f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?=
 <skjnldsv@protonmail.com>
Date: Mon, 10 Sep 2018 10:19:49 +0200
Subject: [PATCH] Use user locale as default in the template
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
---
 lib/private/L10N/Factory.php   | 20 ++++++++++++++++++++
 lib/private/TemplateLayout.php |  7 +++++--
 lib/public/L10N/IFactory.php   |  8 ++++++++
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php
index cc2de174509..1a7fff43229 100644
--- a/lib/private/L10N/Factory.php
+++ b/lib/private/L10N/Factory.php
@@ -244,6 +244,26 @@ class Factory implements IFactory {
 		return 'en_US';
 	}
 
+	/**
+	 * find the matching lang from the locale
+	 *
+	 * @param string $app
+	 * @param string $locale
+	 * @return null|string
+	 */
+	public function findLanguageFromLocale($app = 'core', $locale = null) {
+		if ($this->languageExists($app, $locale)) {
+			return $locale;
+		}
+		
+		// Try to split e.g: fr_FR => fr
+		$locale = explode('_', $locale)[0];
+		if ($this->languageExists($app, $locale)) {
+			return $locale;
+		}
+
+	}
+
 	/**
 	 * Find all available languages for an app
 	 *
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index 0bd57c4139b..a710ee856e3 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -139,9 +139,12 @@ class TemplateLayout extends \OC_Template {
 		}
 		// Send the language and the locale to our layouts
 		$lang = \OC::$server->getL10NFactory()->findLanguage();
+		$locale = \OC::$server->getL10NFactory()->findLocale($lang);
+		$localeLang = \OC::$server->getL10NFactory()->findLanguageFromLocale('lib', $locale);
+
 		$lang = str_replace('_', '-', $lang);
 		$this->assign('language', $lang);
-		$this->assign('locale', \OC::$server->getL10NFactory()->findLocale($lang));
+		$this->assign('locale', $locale);
 
 		if(\OC::$server->getSystemConfig()->getValue('installed', false)) {
 			if (empty(self::$versionHash)) {
@@ -159,7 +162,7 @@ class TemplateLayout extends \OC_Template {
 		if ($this->config->getSystemValue('installed', false) && $renderAs != 'error') {
 			if (\OC::$server->getContentSecurityPolicyNonceManager()->browserSupportsCspV3()) {
 				$jsConfigHelper = new JSConfigHelper(
-					\OC::$server->getL10N('lib'),
+					\OC::$server->getL10N('lib', $localeLang),
 					\OC::$server->query(Defaults::class),
 					\OC::$server->getAppManager(),
 					\OC::$server->getSession(),
diff --git a/lib/public/L10N/IFactory.php b/lib/public/L10N/IFactory.php
index 1bc231e4e2e..31276b12897 100644
--- a/lib/public/L10N/IFactory.php
+++ b/lib/public/L10N/IFactory.php
@@ -53,6 +53,14 @@ interface IFactory {
 	 */
 	public function findLocale($lang = null);
 
+	/**
+	 * find the matching lang from the locale
+	 *
+	 * @param string $locale
+	 * @return null|string
+	 */
+	public function findLanguageFromLocale($locale = null);
+
 	/**
 	 * Find all available languages for an app
 	 *
-- 
GitLab