diff --git a/lib/private/l10n.php b/lib/private/l10n.php index 4e9316c333..4fd4a617be 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -79,6 +79,48 @@ class OC_L10N implements \OCP\IL10N { $this->lang = $lang; } + /** + * @param $app + * @return string + */ + public static function setLanguageFromRequest($app = null) { + if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + if (is_array($app)) { + $available = $app; + } else { + $available = self::findAvailableLanguages($app); + } + + // E.g. make sure that 'de' is before 'de_DE'. + sort($available); + + $preferences = preg_split('/,\s*/', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])); + foreach ($preferences as $preference) { + list($preferred_language) = explode(';', $preference); + $preferred_language = str_replace('-', '_', $preferred_language); + foreach ($available as $available_language) { + if ($preferred_language === strtolower($available_language)) { + if (is_null($app)) { + self::$language = $available_language; + } + return $available_language; + } + } + foreach ($available as $available_language) { + if (substr($preferred_language, 0, 2) === $available_language) { + if (is_null($app)) { + self::$language = $available_language; + } + return $available_language; + } + } + } + } + + // Last try: English + return 'en'; + } + /** * @param $transFile * @param bool $mergeTranslations @@ -403,41 +445,7 @@ class OC_L10N implements \OCP\IL10N { return $default_language; } - if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { - if(is_array($app)) { - $available = $app; - } else { - $available = self::findAvailableLanguages($app); - } - - // E.g. make sure that 'de' is before 'de_DE'. - sort($available); - - $preferences = preg_split('/,\s*/', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])); - foreach($preferences as $preference) { - list($preferred_language) = explode(';', $preference); - $preferred_language = str_replace('-', '_', $preferred_language); - foreach($available as $available_language) { - if ($preferred_language === strtolower($available_language)) { - if (is_null($app)) { - self::$language = $available_language; - } - return $available_language; - } - } - foreach($available as $available_language) { - if (substr($preferred_language, 0, 2) === $available_language) { - if (is_null($app)) { - self::$language = $available_language; - } - return $available_language; - } - } - } - } - - // Last try: English - return 'en'; + return self::setLanguageFromRequest($app); } /** diff --git a/ocs/v1.php b/ocs/v1.php index b0f3e5e2b9..86631f3968 100644 --- a/ocs/v1.php +++ b/ocs/v1.php @@ -39,8 +39,8 @@ try { // load all apps to get all api routes properly setup OC_App::loadApps(); - // api calls always will return English - \OC_L10N::forceLanguage('en'); + // force language as given in the http request + \OC_L10N::setLanguageFromRequest(); OC::$server->getRouter()->match('/ocs'.\OC::$server->getRequest()->getRawPathInfo()); } catch (ResourceNotFoundException $e) { diff --git a/remote.php b/remote.php index 80173441e9..101b19a807 100644 --- a/remote.php +++ b/remote.php @@ -29,6 +29,9 @@ try { exit; } + // force language as given in the http request + \OC_L10N::setLanguageFromRequest(); + $file=ltrim($file, '/'); $parts=explode('/', $file, 2);