summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2013-08-19 11:24:17 +0200
committerGeorg Ehrke <developer@georgehrke.com>2013-08-19 11:24:17 +0200
commitf2702ff1ca45d72300eed5dfa58ebc19aa6e9910 (patch)
treeb1424be17877cbd25bf3781600d353efd3dd0759 /lib
parent7e4dcd268f6cb6618600718a51c4d882e9027829 (diff)
parent9be836814cb4165ea54a086a0f97526d783bcd37 (diff)
downloadnextcloud-server-f2702ff1ca45d72300eed5dfa58ebc19aa6e9910.tar.gz
nextcloud-server-f2702ff1ca45d72300eed5dfa58ebc19aa6e9910.zip
Merge master into oc_preview
Diffstat (limited to 'lib')
-rw-r--r--lib/autoloader.php26
-rw-r--r--lib/connector/sabre/file.php12
-rw-r--r--lib/connector/sabre/principal.php14
-rw-r--r--lib/files/storage/commontest.php2
-rw-r--r--lib/files/type/detection.php121
-rw-r--r--lib/files/type/templatemanager.php46
-rw-r--r--lib/geo.php2
-rw-r--r--lib/helper.php446
-rw-r--r--lib/l10n/af_ZA.php6
-rw-r--r--lib/l10n/ar.php10
-rw-r--r--lib/l10n/be.php8
-rw-r--r--lib/l10n/bg_BG.php10
-rw-r--r--lib/l10n/bn_BD.php8
-rw-r--r--lib/l10n/bs.php8
-rw-r--r--lib/l10n/ca.php10
-rw-r--r--lib/l10n/cs_CZ.php10
-rw-r--r--lib/l10n/cy_GB.php10
-rw-r--r--lib/l10n/da.php10
-rw-r--r--lib/l10n/de.php10
-rw-r--r--lib/l10n/de_AT.php8
-rw-r--r--lib/l10n/de_CH.php10
-rw-r--r--lib/l10n/de_DE.php10
-rw-r--r--lib/l10n/el.php10
-rw-r--r--lib/l10n/en@pirate.php6
-rw-r--r--lib/l10n/eo.php10
-rw-r--r--lib/l10n/es.php10
-rw-r--r--lib/l10n/es_AR.php10
-rw-r--r--lib/l10n/et_EE.php10
-rw-r--r--lib/l10n/eu.php10
-rw-r--r--lib/l10n/fa.php10
-rw-r--r--lib/l10n/fi_FI.php11
-rw-r--r--lib/l10n/fr.php10
-rw-r--r--lib/l10n/gl.php10
-rw-r--r--lib/l10n/he.php10
-rw-r--r--lib/l10n/hi.php6
-rw-r--r--lib/l10n/hr.php4
-rw-r--r--lib/l10n/hu_HU.php10
-rw-r--r--lib/l10n/hy.php8
-rw-r--r--lib/l10n/ia.php6
-rw-r--r--lib/l10n/id.php10
-rw-r--r--lib/l10n/is.php10
-rw-r--r--lib/l10n/it.php10
-rw-r--r--lib/l10n/ja_JP.php10
-rw-r--r--lib/l10n/ka.php8
-rw-r--r--lib/l10n/ka_GE.php10
-rw-r--r--lib/l10n/kn.php8
-rw-r--r--lib/l10n/ko.php10
-rw-r--r--lib/l10n/ku_IQ.php6
-rw-r--r--lib/l10n/lb.php6
-rw-r--r--lib/l10n/lt_LT.php10
-rw-r--r--lib/l10n/lv.php10
-rw-r--r--lib/l10n/mk.php10
-rw-r--r--lib/l10n/ml_IN.php8
-rw-r--r--lib/l10n/ms_MY.php6
-rw-r--r--lib/l10n/my_MM.php10
-rw-r--r--lib/l10n/nb_NO.php10
-rw-r--r--lib/l10n/ne.php8
-rw-r--r--lib/l10n/nl.php10
-rw-r--r--lib/l10n/nn_NO.php6
-rw-r--r--lib/l10n/oc.php7
-rw-r--r--lib/l10n/pl.php10
-rw-r--r--lib/l10n/pt_BR.php10
-rw-r--r--lib/l10n/pt_PT.php10
-rw-r--r--lib/l10n/ro.php12
-rw-r--r--lib/l10n/ru.php10
-rw-r--r--lib/l10n/ru_RU.php6
-rw-r--r--lib/l10n/si_LK.php7
-rw-r--r--lib/l10n/sk.php8
-rw-r--r--lib/l10n/sk_SK.php10
-rw-r--r--lib/l10n/sl.php10
-rw-r--r--lib/l10n/sq.php10
-rw-r--r--lib/l10n/sr.php10
-rw-r--r--lib/l10n/sr@latin.php6
-rw-r--r--lib/l10n/sv.php10
-rw-r--r--lib/l10n/sw_KE.php8
-rw-r--r--lib/l10n/ta_LK.php10
-rw-r--r--lib/l10n/te.php6
-rw-r--r--lib/l10n/th_TH.php10
-rw-r--r--lib/l10n/tr.php14
-rw-r--r--lib/l10n/ug.php10
-rw-r--r--lib/l10n/uk.php10
-rw-r--r--lib/l10n/ur_PK.php6
-rw-r--r--lib/l10n/vi.php10
-rw-r--r--lib/l10n/zh_CN.GB2312.php8
-rw-r--r--lib/l10n/zh_CN.php10
-rw-r--r--lib/l10n/zh_HK.php6
-rw-r--r--lib/l10n/zh_TW.php10
-rw-r--r--lib/memcache/factory.php29
-rw-r--r--lib/ocs/result.php2
-rw-r--r--lib/public/groupinterface.php2
-rw-r--r--lib/public/userinterface.php2
-rw-r--r--lib/public/util.php8
-rw-r--r--lib/user/http.php2
-rw-r--r--lib/user/interface.php2
-rwxr-xr-xlib/util.php24
-rw-r--r--lib/vobject/compoundproperty.php2
-rw-r--r--lib/vobject/stringproperty.php2
97 files changed, 853 insertions, 600 deletions
diff --git a/lib/autoloader.php b/lib/autoloader.php
index 21170639092..01841f831be 100644
--- a/lib/autoloader.php
+++ b/lib/autoloader.php
@@ -111,15 +111,39 @@ class Autoloader {
* @param string $class
* @return bool
*/
+ protected $memoryCache = null;
+ protected $constructingMemoryCache = true; // hack to prevent recursion
public function load($class) {
- $paths = $this->findClass($class);
+ // Does this PHP have an in-memory cache? We cache the paths there
+ if ($this->constructingMemoryCache && !$this->memoryCache) {
+ $this->constructingMemoryCache = false;
+ $this->memoryCache = \OC\Memcache\Factory::createLowLatency('Autoloader');
+ }
+ if ($this->memoryCache) {
+ $pathsToRequire = $this->memoryCache->get($class);
+ if (is_array($pathsToRequire)) {
+ foreach ($pathsToRequire as $path) {
+ require_once $path;
+ }
+ return false;
+ }
+ }
+ // Use the normal class loading path
+ $paths = $this->findClass($class);
if (is_array($paths)) {
+ $pathsToRequire = array();
foreach ($paths as $path) {
if ($fullPath = stream_resolve_include_path($path)) {
require_once $fullPath;
+ $pathsToRequire[] = $fullPath;
}
}
+
+ // Save in our memory cache
+ if ($this->memoryCache) {
+ $this->memoryCache->set($class, $pathsToRequire, 60); // cache 60 sec
+ }
}
return false;
}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 06ab73e3e4d..61bdcd5e0ae 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -50,6 +50,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
throw new \Sabre_DAV_Exception_Forbidden();
}
+ // throw an exception if encryption was disabled but the files are still encrypted
+ if (\OC_Util::encryptedFiles()) {
+ throw new \Sabre_DAV_Exception_ServiceUnavailable();
+ }
+
// mark file as partial while uploading (ignored by the scanner)
$partpath = $this->path . '.part';
@@ -89,7 +94,12 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function get() {
- return \OC\Files\Filesystem::fopen($this->path, 'rb');
+ //throw execption if encryption is disabled but files are still encrypted
+ if (\OC_Util::encryptedFiles()) {
+ throw new \Sabre_DAV_Exception_ServiceUnavailable();
+ } else {
+ return \OC\Files\Filesystem::fopen($this->path, 'rb');
+ }
}
diff --git a/lib/connector/sabre/principal.php b/lib/connector/sabre/principal.php
index 16c88b96ea6..59a96797c16 100644
--- a/lib/connector/sabre/principal.php
+++ b/lib/connector/sabre/principal.php
@@ -66,13 +66,13 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend {
*/
public function getGroupMemberSet($principal) {
// TODO: for now the group principal has only one member, the user itself
- list($prefix, $name) = Sabre_DAV_URLUtil::splitPath($principal);
-
- $principal = $this->getPrincipalByPath($prefix);
- if (!$principal) throw new Sabre_DAV_Exception('Principal not found');
+ $principal = $this->getPrincipalByPath($principal);
+ if (!$principal) {
+ throw new Sabre_DAV_Exception('Principal not found');
+ }
return array(
- $prefix
+ $principal['uri']
);
}
@@ -88,7 +88,9 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend {
$group_membership = array();
if ($prefix == 'principals') {
$principal = $this->getPrincipalByPath($principal);
- if (!$principal) throw new Sabre_DAV_Exception('Principal not found');
+ if (!$principal) {
+ throw new Sabre_DAV_Exception('Principal not found');
+ }
// TODO: for now the user principal has only its own groups
return array(
diff --git a/lib/files/storage/commontest.php b/lib/files/storage/commontest.php
index fbdb7fbf110..c3f1eb31955 100644
--- a/lib/files/storage/commontest.php
+++ b/lib/files/storage/commontest.php
@@ -77,4 +77,4 @@ class CommonTest extends \OC\Files\Storage\Common{
public function touch($path, $mtime=null) {
return $this->storage->touch($path, $mtime);
}
-} \ No newline at end of file
+}
diff --git a/lib/files/type/detection.php b/lib/files/type/detection.php
new file mode 100644
index 00000000000..242a81cb5a4
--- /dev/null
+++ b/lib/files/type/detection.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Type;
+
+/**
+ * Class Detection
+ *
+ * Mimetype detection
+ *
+ * @package OC\Files\Type
+ */
+class Detection {
+ protected $mimetypes = array();
+
+ /**
+ * add an extension -> mimetype mapping
+ *
+ * @param string $extension
+ * @param string $mimetype
+ */
+ public function registerType($extension, $mimetype) {
+ $this->mimetypes[$extension] = $mimetype;
+ }
+
+ /**
+ * add an array of extension -> mimetype mappings
+ *
+ * @param array $types
+ */
+ public function registerTypeArray($types) {
+ $this->mimetypes = array_merge($this->mimetypes, $types);
+ }
+
+ /**
+ * detect mimetype only based on filename, content of file is not used
+ *
+ * @param string $path
+ * @return string
+ */
+ public function detectPath($path) {
+ if (strpos($path, '.')) {
+ //try to guess the type by the file extension
+ $extension = strtolower(strrchr(basename($path), "."));
+ $extension = substr($extension, 1); //remove leading .
+ return (isset($this->mimetypes[$extension])) ? $this->mimetypes[$extension] : 'application/octet-stream';
+ } else {
+ return 'application/octet-stream';
+ }
+ }
+
+ /**
+ * detect mimetype based on both filename and content
+ *
+ * @param string $path
+ * @return string
+ */
+ public function detect($path) {
+ $isWrapped = (strpos($path, '://') !== false) and (substr($path, 0, 7) === 'file://');
+
+ if (@is_dir($path)) {
+ // directories are easy
+ return "httpd/unix-directory";
+ }
+
+ $mimeType = $this->detectPath($path);
+
+ if ($mimeType === 'application/octet-stream' and function_exists('finfo_open')
+ and function_exists('finfo_file') and $finfo = finfo_open(FILEINFO_MIME)
+ ) {
+ $info = @strtolower(finfo_file($finfo, $path));
+ if ($info) {
+ $mimeType = substr($info, 0, strpos($info, ';'));
+ }
+ finfo_close($finfo);
+ }
+ if (!$isWrapped and $mimeType === 'application/octet-stream' && function_exists("mime_content_type")) {
+ // use mime magic extension if available
+ $mimeType = mime_content_type($path);
+ }
+ if (!$isWrapped and $mimeType === 'application/octet-stream' && \OC_Helper::canExecute("file")) {
+ // it looks like we have a 'file' command,
+ // lets see if it does have mime support
+ $path = escapeshellarg($path);
+ $fp = popen("file -b --mime-type $path 2>/dev/null", "r");
+ $reply = fgets($fp);
+ pclose($fp);
+
+ //trim the newline
+ $mimeType = trim($reply);
+
+ }
+ return $mimeType;
+ }
+
+ /**
+ * detect mimetype based on the content of a string
+ *
+ * @param string $data
+ * @return string
+ */
+ public function detectString($data) {
+ if (function_exists('finfo_open') and function_exists('finfo_file')) {
+ $finfo = finfo_open(FILEINFO_MIME);
+ return finfo_buffer($finfo, $data);
+ } else {
+ $tmpFile = \OC_Helper::tmpFile();
+ $fh = fopen($tmpFile, 'wb');
+ fwrite($fh, $data, 8024);
+ fclose($fh);
+ $mime = $this->detect($tmpFile);
+ unset($tmpFile);
+ return $mime;
+ }
+ }
+}
diff --git a/lib/files/type/templatemanager.php b/lib/files/type/templatemanager.php
new file mode 100644
index 00000000000..cd1536d2732
--- /dev/null
+++ b/lib/files/type/templatemanager.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Type;
+
+class TemplateManager {
+ protected $templates = array();
+
+ public function registerTemplate($mimetype, $path) {
+ $this->templates[$mimetype] = $path;
+ }
+
+ /**
+ * get the path of the template for a mimetype
+ *
+ * @param string $mimetype
+ * @return string | null
+ */
+ public function getTemplatePath($mimetype) {
+ if (isset($this->templates[$mimetype])) {
+ return $this->templates[$mimetype];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * get the template content for a mimetype
+ *
+ * @param string $mimetype
+ * @return string
+ */
+ public function getTemplate($mimetype) {
+ $path = $this->getTemplatePath($mimetype);
+ if ($path) {
+ return file_get_contents($path);
+ } else {
+ return '';
+ }
+ }
+}
diff --git a/lib/geo.php b/lib/geo.php
index 4eb785da355..ed01ad0b616 100644
--- a/lib/geo.php
+++ b/lib/geo.php
@@ -28,4 +28,4 @@ class OC_Geo{
reset($variances);
return current($variances);
}
-} \ No newline at end of file
+}
diff --git a/lib/helper.php b/lib/helper.php
index 6552bcce703..ea9afb7f8f2 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -25,9 +25,10 @@
* Collection of useful functions
*/
class OC_Helper {
- private static $mimetypes=array();
- private static $tmpFiles=array();
+ private static $tmpFiles = array();
private static $mimetypeIcons = array();
+ private static $mimetypeDetector;
+ private static $templateManager;
/**
* @brief Creates an url using a defined route
@@ -39,7 +40,7 @@ class OC_Helper {
*
* Returns a url to the given app and file.
*/
- public static function linkToRoute( $route, $parameters = array() ) {
+ public static function linkToRoute($route, $parameters = array()) {
$urlLinkTo = OC::getRouter()->generate($route, $parameters);
return $urlLinkTo;
}
@@ -49,38 +50,35 @@ class OC_Helper {
* @param string $app app
* @param string $file file
* @param array $args array with param=>value, will be appended to the returned url
- * The value of $args will be urlencoded
+ * The value of $args will be urlencoded
* @return string the url
*
* Returns a url to the given app and file.
*/
- public static function linkTo( $app, $file, $args = array() ) {
- if( $app != '' ) {
+ public static function linkTo($app, $file, $args = array()) {
+ if ($app != '') {
$app_path = OC_App::getAppPath($app);
// Check if the app is in the app folder
- if( $app_path && file_exists( $app_path.'/'.$file )) {
- if(substr($file, -3) == 'php' || substr($file, -3) == 'css') {
- $urlLinkTo = OC::$WEBROOT . '/index.php/apps/' . $app;
- $urlLinkTo .= ($file!='index.php') ? '/' . $file : '';
- }else{
- $urlLinkTo = OC_App::getAppWebPath($app) . '/' . $file;
+ if ($app_path && file_exists($app_path . '/' . $file)) {
+ if (substr($file, -3) == 'php' || substr($file, -3) == 'css') {
+ $urlLinkTo = OC::$WEBROOT . '/index.php/apps/' . $app;
+ $urlLinkTo .= ($file != 'index.php') ? '/' . $file : '';
+ } else {
+ $urlLinkTo = OC_App::getAppWebPath($app) . '/' . $file;
}
+ } else {
+ $urlLinkTo = OC::$WEBROOT . '/' . $app . '/' . $file;
}
- else{
- $urlLinkTo = OC::$WEBROOT . '/' . $app . '/' . $file;
- }
- }
- else{
- if( file_exists( OC::$SERVERROOT . '/core/'. $file )) {
- $urlLinkTo = OC::$WEBROOT . '/core/'.$file;
- }
- else{
- $urlLinkTo = OC::$WEBROOT . '/'.$file;
+ } else {
+ if (file_exists(OC::$SERVERROOT . '/core/' . $file)) {
+ $urlLinkTo = OC::$WEBROOT . '/core/' . $file;
+ } else {
+ $urlLinkTo = OC::$WEBROOT . '/' . $file;
}
}
if ($args && $query = http_build_query($args, '', '&')) {
- $urlLinkTo .= '?'.$query;
+ $urlLinkTo .= '?' . $query;
}
return $urlLinkTo;
@@ -91,13 +89,13 @@ class OC_Helper {
* @param string $app app
* @param string $file file
* @param array $args array with param=>value, will be appended to the returned url
- * The value of $args will be urlencoded
+ * The value of $args will be urlencoded
* @return string the url
*
* Returns a absolute url to the given app and file.
*/
- public static function linkToAbsolute( $app, $file, $args = array() ) {
- $urlLinkTo = self::linkTo( $app, $file, $args );
+ public static function linkToAbsolute($app, $file, $args = array()) {
+ $urlLinkTo = self::linkTo($app, $file, $args);
return self::makeURLAbsolute($urlLinkTo);
}
@@ -108,9 +106,8 @@ class OC_Helper {
*
* Returns a absolute url to the given app and file.
*/
- public static function makeURLAbsolute( $url )
- {
- return OC_Request::serverProtocol(). '://' . OC_Request::serverHost() . $url;
+ public static function makeURLAbsolute($url) {
+ return OC_Request::serverProtocol() . '://' . OC_Request::serverHost() . $url;
}
/**
@@ -120,8 +117,8 @@ class OC_Helper {
*
* Returns a url to the given service.
*/
- public static function linkToRemoteBase( $service ) {
- return self::linkTo( '', 'remote.php') . '/' . $service;
+ public static function linkToRemoteBase($service) {
+ return self::linkTo('', 'remote.php') . '/' . $service;
}
/**
@@ -132,9 +129,9 @@ class OC_Helper {
*
* Returns a absolute url to the given service.
*/
- public static function linkToRemote( $service, $add_slash = true ) {
+ public static function linkToRemote($service, $add_slash = true) {
return self::makeURLAbsolute(self::linkToRemoteBase($service))
- . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
+ . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
}
/**
@@ -146,8 +143,8 @@ class OC_Helper {
* Returns a absolute url to the given service.
*/
public static function linkToPublic($service, $add_slash = false) {
- return self::linkToAbsolute( '', 'public.php') . '?service=' . $service
- . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
+ return self::linkToAbsolute('', 'public.php') . '?service=' . $service
+ . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
}
/**
@@ -158,25 +155,25 @@ class OC_Helper {
*
* Returns the path to the image.
*/
- public static function imagePath( $app, $image ) {
+ public static function imagePath($app, $image) {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
// Check if the app is in the app folder
- if( file_exists( OC::$SERVERROOT."/themes/$theme/apps/$app/img/$image" )) {
- return OC::$WEBROOT."/themes/$theme/apps/$app/img/$image";
- }elseif( file_exists(OC_App::getAppPath($app)."/img/$image" )) {
- return OC_App::getAppWebPath($app)."/img/$image";
- }elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/themes/$theme/$app/img/$image" )) {
- return OC::$WEBROOT."/themes/$theme/$app/img/$image";
- }elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/$app/img/$image" )) {
- return OC::$WEBROOT."/$app/img/$image";
- }elseif( file_exists( OC::$SERVERROOT."/themes/$theme/core/img/$image" )) {
- return OC::$WEBROOT."/themes/$theme/core/img/$image";
- }elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )) {
- return OC::$WEBROOT."/core/img/$image";
- }else{
- throw new RuntimeException('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+ if (file_exists(OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) {
+ return OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image";
+ } elseif (file_exists(OC_App::getAppPath($app) . "/img/$image")) {
+ return OC_App::getAppWebPath($app) . "/img/$image";
+ } elseif (!empty($app) and file_exists(OC::$SERVERROOT . "/themes/$theme/$app/img/$image")) {
+ return OC::$WEBROOT . "/themes/$theme/$app/img/$image";
+ } elseif (!empty($app) and file_exists(OC::$SERVERROOT . "/$app/img/$image")) {
+ return OC::$WEBROOT . "/$app/img/$image";
+ } elseif (file_exists(OC::$SERVERROOT . "/themes/$theme/core/img/$image")) {
+ return OC::$WEBROOT . "/themes/$theme/core/img/$image";
+ } elseif (file_exists(OC::$SERVERROOT . "/core/img/$image")) {
+ return OC::$WEBROOT . "/core/img/$image";
+ } else {
+ throw new RuntimeException('image not found: image:' . $image . ' webroot:' . OC::$WEBROOT . ' serverroot:' . OC::$SERVERROOT);
}
}
@@ -228,28 +225,28 @@ class OC_Helper {
}
// Replace slash and backslash with a minus
$icon = str_replace('/', '-', $mimetype);
- $icon = str_replace( '\\', '-', $icon);
+ $icon = str_replace('\\', '-', $icon);
// Is it a dir?
if ($mimetype === 'dir') {
- self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/folder.png';
- return OC::$WEBROOT.'/core/img/filetypes/folder.png';
+ self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/folder.png';
+ return OC::$WEBROOT . '/core/img/filetypes/folder.png';
}
// Icon exists?
- if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$icon.'.png')) {
- self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png';
- return OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png';
+ if (file_exists(OC::$SERVERROOT . '/core/img/filetypes/' . $icon . '.png')) {
+ self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/' . $icon . '.png';
+ return OC::$WEBROOT . '/core/img/filetypes/' . $icon . '.png';
}
// Try only the first part of the filetype
$mimePart = substr($icon, 0, strpos($icon, '-'));
- if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$mimePart.'.png')) {
- self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png';
- return OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png';
+ if (file_exists(OC::$SERVERROOT . '/core/img/filetypes/' . $mimePart . '.png')) {
+ self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/' . $mimePart . '.png';
+ return OC::$WEBROOT . '/core/img/filetypes/' . $mimePart . '.png';
} else {
- self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/file.png';
- return OC::$WEBROOT.'/core/img/filetypes/file.png';
+ self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/file.png';
+ return OC::$WEBROOT . '/core/img/filetypes/file.png';
}
}
@@ -275,25 +272,25 @@ class OC_Helper {
*
* Makes 2048 to 2 kB.
*/
- public static function humanFileSize( $bytes ) {
- if( $bytes < 0 ) {
+ public static function humanFileSize($bytes) {
+ if ($bytes < 0) {
$l = OC_L10N::get('lib');
- return $l->t("couldn't be determined");
+ return "?";
}
- if( $bytes < 1024 ) {
+ if ($bytes < 1024) {
return "$bytes B";
}
- $bytes = round( $bytes / 1024, 1 );
- if( $bytes < 1024 ) {
+ $bytes = round($bytes / 1024, 1);
+ if ($bytes < 1024) {
return "$bytes kB";
}
- $bytes = round( $bytes / 1024, 1 );
- if( $bytes < 1024 ) {
+ $bytes = round($bytes / 1024, 1);
+ if ($bytes < 1024) {
return "$bytes MB";
}
// Wow, heavy duty for owncloud
- $bytes = round( $bytes / 1024, 1 );
+ $bytes = round($bytes / 1024, 1);
return "$bytes GB";
}
@@ -306,21 +303,21 @@ class OC_Helper {
*
* Inspired by: http://www.php.net/manual/en/function.filesize.php#92418
*/
- public static function computerFileSize( $str ) {
- $str=strtolower($str);
+ public static function computerFileSize($str) {
+ $str = strtolower($str);
$bytes_array = array(
'b' => 1,
'k' => 1024,
'kb' => 1024,
'mb' => 1024 * 1024,
- 'm' => 1024 * 1024,
+ 'm' => 1024 * 1024,
'gb' => 1024 * 1024 * 1024,
- 'g' => 1024 * 1024 * 1024,
+ 'g' => 1024 * 1024 * 1024,
'tb' => 1024 * 1024 * 1024 * 1024,
- 't' => 1024 * 1024 * 1024 * 1024,
+ 't' => 1024 * 1024 * 1024 * 1024,
'pb' => 1024 * 1024 * 1024 * 1024 * 1024,
- 'p' => 1024 * 1024 * 1024 * 1024 * 1024,
+ 'p' => 1024 * 1024 * 1024 * 1024 * 1024,
);
$bytes = floatval($str);
@@ -345,18 +342,17 @@ class OC_Helper {
return chmod($path, $filemode);
$dh = opendir($path);
while (($file = readdir($dh)) !== false) {
- if($file != '.' && $file != '..') {
- $fullpath = $path.'/'.$file;
- if(is_link($fullpath))
+ if ($file != '.' && $file != '..') {
+ $fullpath = $path . '/' . $file;
+ if (is_link($fullpath))
return false;
- elseif(!is_dir($fullpath) && !@chmod($fullpath, $filemode))
- return false;
- elseif(!self::chmodr($fullpath, $filemode))
+ elseif (!is_dir($fullpath) && !@chmod($fullpath, $filemode))
+ return false; elseif (!self::chmodr($fullpath, $filemode))
return false;
}
}
closedir($dh);
- if(@chmod($path, $filemode))
+ if (@chmod($path, $filemode))
return true;
else
return false;
@@ -369,8 +365,8 @@ class OC_Helper {
*
*/
static function copyr($src, $dest) {
- if(is_dir($src)) {
- if(!is_dir($dest)) {
+ if (is_dir($src)) {
+ if (!is_dir($dest)) {
mkdir($dest);
}
$files = scandir($src);
@@ -379,7 +375,7 @@ class OC_Helper {
self::copyr("$src/$file", "$dest/$file");
}
}
- }elseif(file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
+ } elseif (file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
copy($src, $dest);
}
}
@@ -390,105 +386,74 @@ class OC_Helper {
* @return bool
*/
static function rmdirr($dir) {
- if(is_dir($dir)) {
- $files=scandir($dir);
- foreach($files as $file) {
+ if (is_dir($dir)) {
+ $files = scandir($dir);
+ foreach ($files as $file) {
if ($file != "." && $file != "..") {
self::rmdirr("$dir/$file");
}
}
rmdir($dir);
- }elseif(file_exists($dir)) {
+ } elseif (file_exists($dir)) {
unlink($dir);
}
- if(file_exists($dir)) {
+ if (file_exists($dir)) {
return false;
- }else{
+ } else {
return true;
}
}
/**
+ * @return \OC\Files\Type\Detection
+ */
+ static public function getMimetypeDetector() {
+ if (!self::$mimetypeDetector) {
+ self::$mimetypeDetector = new \OC\Files\Type\Detection();
+ self::$mimetypeDetector->registerTypeArray(include 'mimetypes.list.php');
+ }
+ return self::$mimetypeDetector;
+ }
+
+ /**
+ * @return \OC\Files\Type\TemplateManager
+ */
+ static public function getFileTemplateManager() {
+ if (!self::$templateManager) {
+ self::$templateManager = new \OC\Files\Type\TemplateManager();
+ }
+ return self::$templateManager;
+ }
+
+ /**
* Try to guess the mimetype based on filename
*
* @param string $path
* @return string
*/
- static public function getFileNameMimeType($path){
- if(strpos($path, '.')) {
- //try to guess the type by the file extension
- if(!self::$mimetypes || self::$mimetypes != include 'mimetypes.list.php') {
- self::$mimetypes=include 'mimetypes.list.php';
- }
- $extension=strtolower(strrchr(basename($path), "."));
- $extension=substr($extension, 1);//remove leading .
- return (isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream';
- }else{
- return 'application/octet-stream';
- }
+ static public function getFileNameMimeType($path) {
+ return self::getMimetypeDetector()->detectPath($path);
}
/**
* get the mimetype form a local file
+ *
* @param string $path
* @return string
* does NOT work for ownClouds filesystem, use OC_FileSystem::getMimeType instead
*/
static function getMimeType($path) {
- $isWrapped=(strpos($path, '://')!==false) and (substr($path, 0, 7)=='file://');
-
- if (@is_dir($path)) {
- // directories are easy
- return "httpd/unix-directory";
- }
-
- $mimeType = self::getFileNameMimeType($path);
-
- if($mimeType=='application/octet-stream' and function_exists('finfo_open')
- and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) {
- $info = @strtolower(finfo_file($finfo, $path));
- if($info) {
- $mimeType=substr($info, 0, strpos($info, ';'));
- }
- finfo_close($finfo);
- }
- if (!$isWrapped and $mimeType=='application/octet-stream' && function_exists("mime_content_type")) {
- // use mime magic extension if available
- $mimeType = mime_content_type($path);
- }
- if (!$isWrapped and $mimeType=='application/octet-stream' && OC_Helper::canExecute("file")) {
- // it looks like we have a 'file' command,
- // lets see if it does have mime support
- $path=escapeshellarg($path);
- $fp = popen("file -b --mime-type $path 2>/dev/null", "r");
- $reply = fgets($fp);
- pclose($fp);
-
- //trim the newline
- $mimeType = trim($reply);
-
- }
- return $mimeType;
+ return self::getMimetypeDetector()->detect($path);
}
/**
* get the mimetype form a data string
+ *
* @param string $data
* @return string
*/
static function getStringMimeType($data) {
- if(function_exists('finfo_open') and function_exists('finfo_file')) {
- $finfo=finfo_open(FILEINFO_MIME);
- return finfo_buffer($finfo, $data);
- }else{
- $tmpFile=OC_Helper::tmpFile();
- $fh=fopen($tmpFile, 'wb');
- fwrite($fh, $data, 8024);
- fclose($fh);
- $mime=self::getMimeType($tmpFile);
- unset($tmpFile);
- return $mime;
- }
+ return self::getMimetypeDetector()->detectString($data);
}
/**
@@ -500,9 +465,9 @@ class OC_Helper {
*/
//FIXME: should also check for value validation (i.e. the email is an email).
- public static function init_var($s, $d="") {
+ public static function init_var($s, $d = "") {
$r = $d;
- if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
+ if (isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
$r = OC_Util::sanitizeHTML($_REQUEST[$s]);
}
@@ -512,12 +477,13 @@ class OC_Helper {
/**
* returns "checked"-attribute if request contains selected radio element
* OR if radio element is the default one -- maybe?
+ *
* @param string $s Name of radio-button element name
* @param string $v Value of current radio-button element
* @param string $d Value of default radio-button element
*/
public static function init_radio($s, $v, $d) {
- if((isset($_REQUEST[$s]) && $_REQUEST[$s]==$v) || (!isset($_REQUEST[$s]) && $v == $d))
+ if ((isset($_REQUEST[$s]) && $_REQUEST[$s] == $v) || (!isset($_REQUEST[$s]) && $v == $d))
print "checked=\"checked\" ";
}
@@ -549,17 +515,17 @@ class OC_Helper {
$dirs = explode(PATH_SEPARATOR, $path);
// WARNING : We have to check if open_basedir is enabled :
$obd = ini_get('open_basedir');
- if($obd != "none") {
+ if ($obd != "none") {
$obd_values = explode(PATH_SEPARATOR, $obd);
- if(count($obd_values) > 0 and $obd_values[0]) {
+ if (count($obd_values) > 0 and $obd_values[0]) {
// open_basedir is in effect !
// We need to check if the program is in one of these dirs :
$dirs = $obd_values;
}
}
- foreach($dirs as $dir) {
- foreach($exts as $ext) {
- if($check_fn("$dir/$name".$ext))
+ foreach ($dirs as $dir) {
+ foreach ($exts as $ext) {
+ if ($check_fn("$dir/$name" . $ext))
return true;
}
}
@@ -568,18 +534,19 @@ class OC_Helper {
/**
* copy the contents of one stream to another
+ *
* @param resource $source
* @param resource $target
* @return int the number of bytes copied
*/
public static function streamCopy($source, $target) {
- if(!$source or !$target) {
+ if (!$source or !$target) {
return false;
}
$result = true;
$count = 0;
- while(!feof($source)) {
- if ( ( $c = fwrite($target, fread($source, 8192)) ) === false) {
+ while (!feof($source)) {
+ if (($c = fwrite($target, fread($source, 8192))) === false) {
$result = false;
} else {
$count += $c;
@@ -590,37 +557,39 @@ class OC_Helper {
/**
* create a temporary file with an unique filename
+ *
* @param string $postfix
* @return string
*
* temporary files are automatically cleaned up after the script is finished
*/
- public static function tmpFile($postfix='') {
- $file=get_temp_dir().'/'.md5(time().rand()).$postfix;
- $fh=fopen($file, 'w');
+ public static function tmpFile($postfix = '') {
+ $file = get_temp_dir() . '/' . md5(time() . rand()) . $postfix;
+ $fh = fopen($file, 'w');
fclose($fh);
- self::$tmpFiles[]=$file;
+ self::$tmpFiles[] = $file;
return $file;
}
/**
* move a file to oc-noclean temp dir
+ *
* @param string $filename
* @return mixed
*
*/
- public static function moveToNoClean($filename='') {
+ public static function moveToNoClean($filename = '') {
if ($filename == '') {
return false;
}
- $tmpDirNoClean=get_temp_dir().'/oc-noclean/';
+ $tmpDirNoClean = get_temp_dir() . '/oc-noclean/';
if (!file_exists($tmpDirNoClean) || !is_dir($tmpDirNoClean)) {
if (file_exists($tmpDirNoClean)) {
unlink($tmpDirNoClean);
}
mkdir($tmpDirNoClean);
}
- $newname=$tmpDirNoClean.basename($filename);
+ $newname = $tmpDirNoClean . basename($filename);
if (rename($filename, $newname)) {
return $newname;
} else {
@@ -630,34 +599,35 @@ class OC_Helper {
/**
* create a temporary folder with an unique filename
+ *
* @return string
*
* temporary files are automatically cleaned up after the script is finished
*/
public static function tmpFolder() {
- $path=get_temp_dir().'/'.md5(time().rand());
+ $path = get_temp_dir() . '/' . md5(time() . rand());
mkdir($path);
- self::$tmpFiles[]=$path;
- return $path.'/';
+ self::$tmpFiles[] = $path;
+ return $path . '/';
}
/**
* remove all files created by self::tmpFile
*/
public static function cleanTmp() {
- $leftoversFile=get_temp_dir().'/oc-not-deleted';
- if(file_exists($leftoversFile)) {
- $leftovers=file($leftoversFile);
- foreach($leftovers as $file) {
+ $leftoversFile = get_temp_dir() . '/oc-not-deleted';
+ if (file_exists($leftoversFile)) {
+ $leftovers = file($leftoversFile);
+ foreach ($leftovers as $file) {
self::rmdirr($file);
}
unlink($leftoversFile);
}
- foreach(self::$tmpFiles as $file) {
- if(file_exists($file)) {
- if(!self::rmdirr($file)) {
- file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
+ foreach (self::$tmpFiles as $file) {
+ if (file_exists($file)) {
+ if (!self::rmdirr($file)) {
+ file_put_contents($leftoversFile, $file . "\n", FILE_APPEND);
}
}
}
@@ -667,34 +637,34 @@ class OC_Helper {
* remove all files in PHP /oc-noclean temp dir
*/
public static function cleanTmpNoClean() {
- $tmpDirNoCleanFile=get_temp_dir().'/oc-noclean/';
- if(file_exists($tmpDirNoCleanFile)) {
+ $tmpDirNoCleanFile = get_temp_dir() . '/oc-noclean/';
+ if (file_exists($tmpDirNoCleanFile)) {
self::rmdirr($tmpDirNoCleanFile);
}
}
/**
- * Adds a suffix to the name in case the file exists
- *
- * @param $path
- * @param $filename
- * @return string
- */
+ * Adds a suffix to the name in case the file exists
+ *
+ * @param $path
+ * @param $filename
+ * @return string
+ */
public static function buildNotExistingFileName($path, $filename) {
$view = \OC\Files\Filesystem::getView();
return self::buildNotExistingFileNameForView($path, $filename, $view);
}
/**
- * Adds a suffix to the name in case the file exists
- *
- * @param $path
- * @param $filename
- * @return string
- */
+ * Adds a suffix to the name in case the file exists
+ *
+ * @param $path
+ * @param $filename
+ * @return string
+ */
public static function buildNotExistingFileNameForView($path, $filename, \OC\Files\View $view) {
- if($path==='/') {
- $path='';
+ if ($path === '/') {
+ $path = '';
}
if ($pos = strrpos($filename, '.')) {
$name = substr($filename, 0, $pos);
@@ -706,10 +676,10 @@ class OC_Helper {
$newpath = $path . '/' . $filename;
if ($view->file_exists($newpath)) {
- if(preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
+ if (preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
//Replace the last "(number)" with "(number+1)"
- $last_match = count($matches[0])-1;
- $counter = $matches[1][$last_match][0]+1;
+ $last_match = count($matches[0]) - 1;
+ $counter = $matches[1][$last_match][0] + 1;
$offset = $matches[0][$last_match][1];
$match_length = strlen($matches[0][$last_match][0]);
} else {
@@ -717,9 +687,9 @@ class OC_Helper {
$offset = false;
}
do {
- if($offset) {
+ if ($offset) {
//Replace the last "(number)" with "(number+1)"
- $newname = substr_replace($name, '('.$counter.')', $offset, $match_length);
+ $newname = substr_replace($name, '(' . $counter . ')', $offset, $match_length);
} else {
$newname = $name . ' (' . $counter . ')';
}
@@ -746,17 +716,17 @@ class OC_Helper {
}
/**
- * @brief Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
- *
- * @param array $input The array to work on
- * @param int $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
- * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
- * @return array
- *
- * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
- * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
- *
- */
+ * @brief Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+ *
+ * @param array $input The array to work on
+ * @param int $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
+ * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @return array
+ *
+ * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+ * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
+ *
+ */
public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8') {
$case = ($case != MB_CASE_UPPER) ? MB_CASE_LOWER : MB_CASE_UPPER;
$ret = array();
@@ -782,26 +752,26 @@ class OC_Helper {
$length = intval($length);
$string = mb_substr($string, 0, $start, $encoding) .
$replacement .
- mb_substr($string, $start+$length, mb_strlen($string, 'UTF-8')-$start, $encoding);
+ mb_substr($string, $start + $length, mb_strlen($string, 'UTF-8') - $start, $encoding);
return $string;
}
/**
- * @brief Replace all occurrences of the search string with the replacement string
- *
- * @param string $search The value being searched for, otherwise known as the needle.
- * @param string $replace The replacement
- * @param string $subject The string or array being searched and replaced on, otherwise known as the haystack.
- * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
- * @param int $count If passed, this will be set to the number of replacements performed.
- * @return string
- *
- */
+ * @brief Replace all occurrences of the search string with the replacement string
+ *
+ * @param string $search The value being searched for, otherwise known as the needle.
+ * @param string $replace The replacement
+ * @param string $subject The string or array being searched and replaced on, otherwise known as the haystack.
+ * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @param int $count If passed, this will be set to the number of replacements performed.
+ * @return string
+ *
+ */
public static function mb_str_replace($search, $replace, $subject, $encoding = 'UTF-8', &$count = null) {
$offset = -1;
$length = mb_strlen($search, $encoding);
- while(($i = mb_strrpos($subject, $search, $offset, $encoding)) !== false ) {
+ while (($i = mb_strrpos($subject, $search, $offset, $encoding)) !== false) {
$subject = OC_Helper::mb_substr_replace($subject, $replace, $i, $length);
$offset = $i - mb_strlen($subject, $encoding);
$count++;
@@ -810,21 +780,21 @@ class OC_Helper {
}
/**
- * @brief performs a search in a nested array
- * @param array $haystack the array to be searched
- * @param string $needle the search string
- * @param string $index optional, only search this key name
- * @return mixed the key of the matching field, otherwise false
- *
- * performs a search in a nested array
- *
- * taken from http://www.php.net/manual/en/function.array-search.php#97645
- */
+ * @brief performs a search in a nested array
+ * @param array $haystack the array to be searched
+ * @param string $needle the search string
+ * @param string $index optional, only search this key name
+ * @return mixed the key of the matching field, otherwise false
+ *
+ * performs a search in a nested array
+ *
+ * taken from http://www.php.net/manual/en/function.array-search.php#97645
+ */
public static function recursiveArraySearch($haystack, $needle, $index = null) {
$aIt = new RecursiveArrayIterator($haystack);
$it = new RecursiveIteratorIterator($aIt);
- while($it->valid()) {
+ while ($it->valid()) {
if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) {
return $aIt->key();
}
@@ -838,6 +808,7 @@ class OC_Helper {
/**
* Shortens str to maxlen by replacing characters in the middle with '...', eg.
* ellipsis('a very long string with lots of useless info to make a better example', 14) becomes 'a very ...example'
+ *
* @param string $str the string
* @param string $maxlen the maximum length of the result
* @return string with at most maxlen characters
@@ -868,7 +839,7 @@ class OC_Helper {
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
}
- if($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN){
+ if ($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN) {
$freeSpace = max($freeSpace, 0);
return min($maxUploadFilesize, $freeSpace);
@@ -879,6 +850,7 @@ class OC_Helper {
/**
* Checks if a function is available
+ *
* @param string $function_name
* @return bool
*/
@@ -907,7 +879,7 @@ class OC_Helper {
$used = 0;
}
$free = \OC\Files\Filesystem::free_space();
- if ($free >= 0){
+ if ($free >= 0) {
$total = $free + $used;
} else {
$total = $free; //either unknown or unlimited
@@ -915,7 +887,7 @@ class OC_Helper {
if ($total == 0) {
$total = 1; // prevent division by zero
}
- if ($total >= 0){
+ if ($total >= 0) {
$relative = round(($used / $total) * 10000) / 100;
} else {
$relative = 0;
diff --git a/lib/l10n/af_ZA.php b/lib/l10n/af_ZA.php
index d17df6563bc..d6bf5771e8d 100644
--- a/lib/l10n/af_ZA.php
+++ b/lib/l10n/af_ZA.php
@@ -5,6 +5,10 @@ $TRANSLATIONS = array(
"Settings" => "Instellings",
"Users" => "Gebruikers",
"Admin" => "Admin",
-"web services under your control" => "webdienste onder jou beheer"
+"web services under your control" => "webdienste onder jou beheer",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ar.php b/lib/l10n/ar.php
index ca48fc39f9b..2e95f28841e 100644
--- a/lib/l10n/ar.php
+++ b/lib/l10n/ar.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "اعدادات خادمك غير صحيحة بشكل تسمح لك بمزامنة ملفاتك وذلك بسبب أن واجهة WebDAV تبدو معطلة",
"Please double check the <a href='%s'>installation guides</a>." => "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>.",
"seconds ago" => "منذ ثواني",
-"1 minute ago" => "منذ دقيقة",
-"%d minutes ago" => "%d دقيقة مضت",
-"1 hour ago" => "قبل ساعة مضت",
-"%d hours ago" => "%d ساعة مضت",
+"_%n minute ago_::_%n minutes ago_" => array("","","","","",""),
+"_%n hour ago_::_%n hours ago_" => array("","","","","",""),
"today" => "اليوم",
"yesterday" => "يوم أمس",
-"%d days ago" => "%d يوم مضى",
+"_%n day go_::_%n days ago_" => array("","","","","",""),
"last month" => "الشهر الماضي",
-"%d months ago" => "%d شهر مضت",
+"_%n month ago_::_%n months ago_" => array("","","","","",""),
"last year" => "السنةالماضية",
"years ago" => "سنة مضت",
"Could not find category \"%s\"" => "تعذر العثور على المجلد \"%s\""
diff --git a/lib/l10n/be.php b/lib/l10n/be.php
new file mode 100644
index 00000000000..1570411eb86
--- /dev/null
+++ b/lib/l10n/be.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("","","",""),
+"_%n hour ago_::_%n hours ago_" => array("","","",""),
+"_%n day go_::_%n days ago_" => array("","","",""),
+"_%n month ago_::_%n months ago_" => array("","","","")
+);
+$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php
index a366199235e..10d3bb610af 100644
--- a/lib/l10n/bg_BG.php
+++ b/lib/l10n/bg_BG.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Вашият web сървър все още не е удачно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът изглежда не работи.",
"Please double check the <a href='%s'>installation guides</a>." => "Моля направете повторна справка с <a href='%s'>ръководството за инсталиране</a>.",
"seconds ago" => "преди секунди",
-"1 minute ago" => "преди 1 минута",
-"%d minutes ago" => "преди %d минути",
-"1 hour ago" => "преди 1 час",
-"%d hours ago" => "преди %d часа",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "днес",
"yesterday" => "вчера",
-"%d days ago" => "преди %d дни",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "последният месец",
-"%d months ago" => "преди %d месеца",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "последната година",
"years ago" => "последните години",
"Could not find category \"%s\"" => "Невъзможно откриване на категорията \"%s\""
diff --git a/lib/l10n/bn_BD.php b/lib/l10n/bn_BD.php
index 2e89f1034f2..a42435a2a47 100644
--- a/lib/l10n/bn_BD.php
+++ b/lib/l10n/bn_BD.php
@@ -16,13 +16,13 @@ $TRANSLATIONS = array(
"Files" => "ফাইল",
"Text" => "টেক্সট",
"seconds ago" => "সেকেন্ড পূর্বে",
-"1 minute ago" => "১ মিনিট পূর্বে",
-"%d minutes ago" => "%d মিনিট পূর্বে",
-"1 hour ago" => "1 ঘন্টা পূর্বে",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "আজ",
"yesterday" => "গতকাল",
-"%d days ago" => "%d দিন পূর্বে",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "গত মাস",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "গত বছর",
"years ago" => "বছর পূর্বে"
);
diff --git a/lib/l10n/bs.php b/lib/l10n/bs.php
new file mode 100644
index 00000000000..3cb98906e62
--- /dev/null
+++ b/lib/l10n/bs.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
+"_%n day go_::_%n days ago_" => array("","",""),
+"_%n month ago_::_%n months ago_" => array("","","")
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php
index bf7c3f8b459..95faed498cd 100644
--- a/lib/l10n/ca.php
+++ b/lib/l10n/ca.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
"Please double check the <a href='%s'>installation guides</a>." => "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"seconds ago" => "segons enrere",
-"1 minute ago" => "fa 1 minut",
-"%d minutes ago" => "fa %d minuts",
-"1 hour ago" => "fa 1 hora",
-"%d hours ago" => "fa %d hores",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "avui",
"yesterday" => "ahir",
-"%d days ago" => "fa %d dies",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "el mes passat",
-"%d months ago" => "fa %d mesos",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "l'any passat",
"years ago" => "anys enrere",
"Caused by:" => "Provocat per:",
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
index c0e0ac6a67b..ec54376024d 100644
--- a/lib/l10n/cs_CZ.php
+++ b/lib/l10n/cs_CZ.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server není správně nastaven pro umožnění synchronizace, rozhraní WebDAV se zdá být rozbité.",
"Please double check the <a href='%s'>installation guides</a>." => "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>.",
"seconds ago" => "před pár sekundami",
-"1 minute ago" => "před minutou",
-"%d minutes ago" => "před %d minutami",
-"1 hour ago" => "před hodinou",
-"%d hours ago" => "před %d hodinami",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "dnes",
"yesterday" => "včera",
-"%d days ago" => "před %d dny",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "minulý měsíc",
-"%d months ago" => "před %d měsíci",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "minulý rok",
"years ago" => "před lety",
"Caused by:" => "Příčina:",
diff --git a/lib/l10n/cy_GB.php b/lib/l10n/cy_GB.php
index 15b54e4cc6e..649a1ebffac 100644
--- a/lib/l10n/cy_GB.php
+++ b/lib/l10n/cy_GB.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Nid yw eich gweinydd wedi'i gyflunio eto i ganiatáu cydweddu ffeiliau oherwydd bod y rhyngwyneb WebDAV wedi torri.",
"Please double check the <a href='%s'>installation guides</a>." => "Gwiriwch y <a href='%s'>canllawiau gosod</a> eto.",
"seconds ago" => "eiliad yn ôl",
-"1 minute ago" => "1 munud yn ôl",
-"%d minutes ago" => "%d munud yn ôl",
-"1 hour ago" => "1 awr yn ôl",
-"%d hours ago" => "%d awr yn ôl",
+"_%n minute ago_::_%n minutes ago_" => array("","","",""),
+"_%n hour ago_::_%n hours ago_" => array("","","",""),
"today" => "heddiw",
"yesterday" => "ddoe",
-"%d days ago" => "%d diwrnod yn ôl",
+"_%n day go_::_%n days ago_" => array("","","",""),
"last month" => "mis diwethaf",
-"%d months ago" => "%d mis yn ôl",
+"_%n month ago_::_%n months ago_" => array("","","",""),
"last year" => "y llynedd",
"years ago" => "blwyddyn yn ôl",
"Could not find category \"%s\"" => "Methu canfod categori \"%s\""
diff --git a/lib/l10n/da.php b/lib/l10n/da.php
index 81650f7eeed..cbf6b16debb 100644
--- a/lib/l10n/da.php
+++ b/lib/l10n/da.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din webserver er endnu ikke sat op til at tillade fil synkronisering fordi WebDAV grænsefladen virker ødelagt.",
"Please double check the <a href='%s'>installation guides</a>." => "Dobbelttjek venligst <a href='%s'>installations vejledningerne</a>.",
"seconds ago" => "sekunder siden",
-"1 minute ago" => "1 minut siden",
-"%d minutes ago" => "%d minutter siden",
-"1 hour ago" => "1 time siden",
-"%d hours ago" => "%d timer siden",
+"_%n minute ago_::_%n minutes ago_" => array("%n minut siden","%n minutter siden"),
+"_%n hour ago_::_%n hours ago_" => array("%n time siden","%n timer siden"),
"today" => "i dag",
"yesterday" => "i går",
-"%d days ago" => "%d dage siden",
+"_%n day go_::_%n days ago_" => array("%n dag siden","%n dage siden"),
"last month" => "sidste måned",
-"%d months ago" => "%d måneder siden",
+"_%n month ago_::_%n months ago_" => array("%n måned siden","%n måneder siden"),
"last year" => "sidste år",
"years ago" => "år siden",
"Caused by:" => "Forårsaget af:",
diff --git a/lib/l10n/de.php b/lib/l10n/de.php
index c3bb8912f70..798322fdb47 100644
--- a/lib/l10n/de.php
+++ b/lib/l10n/de.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"Please double check the <a href='%s'>installation guides</a>." => "Bitte prüfe die <a href='%s'>Installationsanleitungen</a>.",
"seconds ago" => "Gerade eben",
-"1 minute ago" => "vor einer Minute",
-"%d minutes ago" => "Vor %d Minuten",
-"1 hour ago" => "Vor einer Stunde",
-"%d hours ago" => "Vor %d Stunden",
+"_%n minute ago_::_%n minutes ago_" => array("","Vor %n Minuten"),
+"_%n hour ago_::_%n hours ago_" => array("","Vor %n Stunden"),
"today" => "Heute",
"yesterday" => "Gestern",
-"%d days ago" => "Vor %d Tag(en)",
+"_%n day go_::_%n days ago_" => array("","Vor %n Tagen"),
"last month" => "Letzten Monat",
-"%d months ago" => "Vor %d Monaten",
+"_%n month ago_::_%n months ago_" => array("","Vor %n Monaten"),
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Caused by:" => "Verursacht durch:",
diff --git a/lib/l10n/de_AT.php b/lib/l10n/de_AT.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/de_AT.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/de_CH.php b/lib/l10n/de_CH.php
index d100afef3f9..d99c144f185 100644
--- a/lib/l10n/de_CH.php
+++ b/lib/l10n/de_CH.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist noch nicht für eine Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"Please double check the <a href='%s'>installation guides</a>." => "Bitte prüfen Sie die <a href='%s'>Installationsanleitungen</a>.",
"seconds ago" => "Gerade eben",
-"1 minute ago" => "Vor 1 Minute",
-"%d minutes ago" => "Vor %d Minuten",
-"1 hour ago" => "Vor einer Stunde",
-"%d hours ago" => "Vor %d Stunden",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "Heute",
"yesterday" => "Gestern",
-"%d days ago" => "Vor %d Tag(en)",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "Letzten Monat",
-"%d months ago" => "Vor %d Monaten",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Caused by:" => "Verursacht durch:",
diff --git a/lib/l10n/de_DE.php b/lib/l10n/de_DE.php
index 05cc103c869..698a36bd780 100644
--- a/lib/l10n/de_DE.php
+++ b/lib/l10n/de_DE.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ihr Web-Server ist noch nicht für eine Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.",
"Please double check the <a href='%s'>installation guides</a>." => "Bitte prüfen Sie die <a href='%s'>Installationsanleitungen</a>.",
"seconds ago" => "Gerade eben",
-"1 minute ago" => "Vor 1 Minute",
-"%d minutes ago" => "Vor %d Minuten",
-"1 hour ago" => "Vor einer Stunde",
-"%d hours ago" => "Vor %d Stunden",
+"_%n minute ago_::_%n minutes ago_" => array("Vor %n Minute","Vor %n Minuten"),
+"_%n hour ago_::_%n hours ago_" => array("Vor %n Stunde","Vor %n Stunden"),
"today" => "Heute",
"yesterday" => "Gestern",
-"%d days ago" => "Vor %d Tag(en)",
+"_%n day go_::_%n days ago_" => array("Vor %n Tag","Vor %n Tagen"),
"last month" => "Letzten Monat",
-"%d months ago" => "Vor %d Monaten",
+"_%n month ago_::_%n months ago_" => array("Vor %n Monat","Vor %n Monaten"),
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Caused by:" => "Verursacht durch:",
diff --git a/lib/l10n/el.php b/lib/l10n/el.php
index 7433113f810..0fbd134ae92 100644
--- a/lib/l10n/el.php
+++ b/lib/l10n/el.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη.",
"Please double check the <a href='%s'>installation guides</a>." => "Ελέγξτε ξανά τις <a href='%s'>οδηγίες εγκατάστασης</a>.",
"seconds ago" => "δευτερόλεπτα πριν",
-"1 minute ago" => "1 λεπτό πριν",
-"%d minutes ago" => "%d λεπτά πριν",
-"1 hour ago" => "1 ώρα πριν",
-"%d hours ago" => "%d ώρες πριν",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "σήμερα",
"yesterday" => "χτες",
-"%d days ago" => "%d ημέρες πριν",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "τελευταίο μήνα",
-"%d months ago" => "%d μήνες πριν",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "τελευταίο χρόνο",
"years ago" => "χρόνια πριν",
"Caused by:" => "Προκλήθηκε από:",
diff --git a/lib/l10n/en@pirate.php b/lib/l10n/en@pirate.php
index a86492d2a93..a8175b1400f 100644
--- a/lib/l10n/en@pirate.php
+++ b/lib/l10n/en@pirate.php
@@ -1,5 +1,9 @@
<?php
$TRANSLATIONS = array(
-"web services under your control" => "web services under your control"
+"web services under your control" => "web services under your control",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/eo.php b/lib/l10n/eo.php
index 196cdd66900..5311dd6eb15 100644
--- a/lib/l10n/eo.php
+++ b/lib/l10n/eo.php
@@ -34,15 +34,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Via TTT-servilo ankoraŭ ne ĝuste agordiĝis por permesi sinkronigi dosierojn ĉar la WebDAV-interfaco ŝajnas rompita.",
"Please double check the <a href='%s'>installation guides</a>." => "Bonvolu duoble kontroli la <a href='%s'>gvidilon por instalo</a>.",
"seconds ago" => "sekundoj antaŭe",
-"1 minute ago" => "antaŭ 1 minuto",
-"%d minutes ago" => "antaŭ %d minutoj",
-"1 hour ago" => "antaŭ 1 horo",
-"%d hours ago" => "antaŭ %d horoj",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "hodiaŭ",
"yesterday" => "hieraŭ",
-"%d days ago" => "antaŭ %d tagoj",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "lastamonate",
-"%d months ago" => "antaŭ %d monatoj",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "lastajare",
"years ago" => "jaroj antaŭe",
"Could not find category \"%s\"" => "Ne troviĝis kategorio “%s”"
diff --git a/lib/l10n/es.php b/lib/l10n/es.php
index 70dc0c0e92c..2029c9b17fe 100644
--- a/lib/l10n/es.php
+++ b/lib/l10n/es.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
"Please double check the <a href='%s'>installation guides</a>." => "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"seconds ago" => "hace segundos",
-"1 minute ago" => "hace 1 minuto",
-"%d minutes ago" => "hace %d minutos",
-"1 hour ago" => "Hace 1 hora",
-"%d hours ago" => "Hace %d horas",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "hoy",
"yesterday" => "ayer",
-"%d days ago" => "hace %d días",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "mes pasado",
-"%d months ago" => "Hace %d meses",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "año pasado",
"years ago" => "hace años",
"Caused by:" => "Causado por:",
diff --git a/lib/l10n/es_AR.php b/lib/l10n/es_AR.php
index 6208e3eb472..0632c754052 100644
--- a/lib/l10n/es_AR.php
+++ b/lib/l10n/es_AR.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Tu servidor web no está configurado todavía para permitir sincronización de archivos porque la interfaz WebDAV parece no funcionar.",
"Please double check the <a href='%s'>installation guides</a>." => "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>.",
"seconds ago" => "segundos atrás",
-"1 minute ago" => "hace 1 minuto",
-"%d minutes ago" => "hace %d minutos",
-"1 hour ago" => "hace 1 hora",
-"%d hours ago" => "hace %d horas",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "hoy",
"yesterday" => "ayer",
-"%d days ago" => "hace %d días",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "el mes pasado",
-"%d months ago" => "hace %d meses",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "el año pasado",
"years ago" => "años atrás",
"Caused by:" => "Provocado por:",
diff --git a/lib/l10n/et_EE.php b/lib/l10n/et_EE.php
index 1dff8545240..a7d823a62c1 100644
--- a/lib/l10n/et_EE.php
+++ b/lib/l10n/et_EE.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Veebiserveri ei ole veel korralikult seadistatud võimaldamaks failide sünkroniseerimist, kuna WebDAV liides näib olevat mittetoimiv.",
"Please double check the <a href='%s'>installation guides</a>." => "Palun tutvu veelkord <a href='%s'>paigalduse juhenditega</a>.",
"seconds ago" => "sekundit tagasi",
-"1 minute ago" => "1 minut tagasi",
-"%d minutes ago" => "%d minutit tagasi",
-"1 hour ago" => "1 tund tagasi",
-"%d hours ago" => "%d tundi tagasi",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "täna",
"yesterday" => "eile",
-"%d days ago" => "%d päeva tagasi",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "viimasel kuul",
-"%d months ago" => "%d kuud tagasi",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "viimasel aastal",
"years ago" => "aastat tagasi",
"Caused by:" => "Põhjustaja:",
diff --git a/lib/l10n/eu.php b/lib/l10n/eu.php
index 006b3941513..c5ce243f2fa 100644
--- a/lib/l10n/eu.php
+++ b/lib/l10n/eu.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Zure web zerbitzaria ez dago oraindik ongi konfiguratuta fitxategien sinkronizazioa egiteko, WebDAV interfazea ongi ez dagoela dirudi.",
"Please double check the <a href='%s'>installation guides</a>." => "Mesedez begiratu <a href='%s'>instalazio gidak</a>.",
"seconds ago" => "segundu",
-"1 minute ago" => "orain dela minutu 1",
-"%d minutes ago" => "orain dela %d minutu",
-"1 hour ago" => "orain dela ordu bat",
-"%d hours ago" => "orain dela %d ordu",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "gaur",
"yesterday" => "atzo",
-"%d days ago" => "orain dela %d egun",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "joan den hilabetean",
-"%d months ago" => "orain dela %d hilabete",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "joan den urtean",
"years ago" => "urte",
"Caused by:" => "Honek eraginda:",
diff --git a/lib/l10n/fa.php b/lib/l10n/fa.php
index dd313d9d862..e2d8ed50aa3 100644
--- a/lib/l10n/fa.php
+++ b/lib/l10n/fa.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "احتمالاً وب سرور شما طوری تنظیم نشده است که اجازه ی همگام سازی فایلها را بدهد زیرا به نظر میرسد رابط WebDAV از کار افتاده است.",
"Please double check the <a href='%s'>installation guides</a>." => "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید.",
"seconds ago" => "ثانیه‌ها پیش",
-"1 minute ago" => "1 دقیقه پیش",
-"%d minutes ago" => "%d دقیقه پیش",
-"1 hour ago" => "1 ساعت پیش",
-"%d hours ago" => "%d ساعت پیش",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "امروز",
"yesterday" => "دیروز",
-"%d days ago" => "%d روز پیش",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "ماه قبل",
-"%d months ago" => "%dماه پیش",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "سال قبل",
"years ago" => "سال‌های قبل",
"Could not find category \"%s\"" => "دسته بندی %s یافت نشد"
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
index 7ce9fcaabca..dccb1753042 100644
--- a/lib/l10n/fi_FI.php
+++ b/lib/l10n/fi_FI.php
@@ -34,17 +34,16 @@ $TRANSLATIONS = array(
"Set an admin password." => "Aseta ylläpitäjän salasana.",
"Please double check the <a href='%s'>installation guides</a>." => "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
"seconds ago" => "sekuntia sitten",
-"1 minute ago" => "1 minuutti sitten",
-"%d minutes ago" => "%d minuuttia sitten",
-"1 hour ago" => "1 tunti sitten",
-"%d hours ago" => "%d tuntia sitten",
+"_%n minute ago_::_%n minutes ago_" => array("%n minuutti sitten","%n minuuttia sitten"),
+"_%n hour ago_::_%n hours ago_" => array("%n tunti sitten","%n tuntia sitten"),
"today" => "tänään",
"yesterday" => "eilen",
-"%d days ago" => "%d päivää sitten",
+"_%n day go_::_%n days ago_" => array("%n päivä sitten","%n päivää sitten"),
"last month" => "viime kuussa",
-"%d months ago" => "%d kuukautta sitten",
+"_%n month ago_::_%n months ago_" => array("%n kuukausi sitten","%n kuukautta sitten"),
"last year" => "viime vuonna",
"years ago" => "vuotta sitten",
+"Caused by:" => "Aiheuttaja:",
"Could not find category \"%s\"" => "Luokkaa \"%s\" ei löytynyt"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
index 48e12f7b20f..0a040bb9e8e 100644
--- a/lib/l10n/fr.php
+++ b/lib/l10n/fr.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut.",
"Please double check the <a href='%s'>installation guides</a>." => "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
"seconds ago" => "il y a quelques secondes",
-"1 minute ago" => "il y a une minute",
-"%d minutes ago" => "il y a %d minutes",
-"1 hour ago" => "Il y a une heure",
-"%d hours ago" => "Il y a %d heures",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "aujourd'hui",
"yesterday" => "hier",
-"%d days ago" => "il y a %d jours",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "le mois dernier",
-"%d months ago" => "Il y a %d mois",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "l'année dernière",
"years ago" => "il y a plusieurs années",
"Could not find category \"%s\"" => "Impossible de trouver la catégorie \"%s\""
diff --git a/lib/l10n/gl.php b/lib/l10n/gl.php
index 77d672e1450..f105578ace2 100644
--- a/lib/l10n/gl.php
+++ b/lib/l10n/gl.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.",
"Please double check the <a href='%s'>installation guides</a>." => "Volva comprobar as <a href='%s'>guías de instalación</a>",
"seconds ago" => "segundos atrás",
-"1 minute ago" => "hai 1 minuto",
-"%d minutes ago" => "hai %d minutos",
-"1 hour ago" => "Vai 1 hora",
-"%d hours ago" => "Vai %d horas",
+"_%n minute ago_::_%n minutes ago_" => array("hai %n minuto","hai %n minutos"),
+"_%n hour ago_::_%n hours ago_" => array("hai %n hora","hai %n horas"),
"today" => "hoxe",
"yesterday" => "onte",
-"%d days ago" => "hai %d días",
+"_%n day go_::_%n days ago_" => array("hai %n día","hai %n días"),
"last month" => "último mes",
-"%d months ago" => "Vai %d meses",
+"_%n month ago_::_%n months ago_" => array("hai %n mes","hai %n meses"),
"last year" => "último ano",
"years ago" => "anos atrás",
"Caused by:" => "Causado por:",
diff --git a/lib/l10n/he.php b/lib/l10n/he.php
index 8a33cb393fe..bab1a6ff424 100644
--- a/lib/l10n/he.php
+++ b/lib/l10n/he.php
@@ -19,15 +19,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "שרת האינטרנט שלך אינו מוגדר לצורכי סנכרון קבצים עדיין כיוון שמנשק ה־WebDAV כנראה אינו תקין.",
"Please double check the <a href='%s'>installation guides</a>." => "נא לעיין שוב ב<a href='%s'>מדריכי ההתקנה</a>.",
"seconds ago" => "שניות",
-"1 minute ago" => "לפני דקה אחת",
-"%d minutes ago" => "לפני %d דקות",
-"1 hour ago" => "לפני שעה",
-"%d hours ago" => "לפני %d שעות",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "היום",
"yesterday" => "אתמול",
-"%d days ago" => "לפני %d ימים",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "חודש שעבר",
-"%d months ago" => "לפני %d חודשים",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "שנה שעברה",
"years ago" => "שנים",
"Could not find category \"%s\"" => "לא ניתן למצוא את הקטגוריה „%s“"
diff --git a/lib/l10n/hi.php b/lib/l10n/hi.php
index efa06eec8a7..039dfa4465d 100644
--- a/lib/l10n/hi.php
+++ b/lib/l10n/hi.php
@@ -3,6 +3,10 @@ $TRANSLATIONS = array(
"Help" => "सहयोग",
"Personal" => "यक्तिगत",
"Settings" => "सेटिंग्स",
-"Users" => "उपयोगकर्ता"
+"Users" => "उपयोगकर्ता",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/hr.php b/lib/l10n/hr.php
index 9223b4c9ccb..d217f924099 100644
--- a/lib/l10n/hr.php
+++ b/lib/l10n/hr.php
@@ -10,9 +10,13 @@ $TRANSLATIONS = array(
"Files" => "Datoteke",
"Text" => "Tekst",
"seconds ago" => "sekundi prije",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "danas",
"yesterday" => "jučer",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "prošli mjesec",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "prošlu godinu",
"years ago" => "godina"
);
diff --git a/lib/l10n/hu_HU.php b/lib/l10n/hu_HU.php
index 6231d9c3cab..c8aff3add72 100644
--- a/lib/l10n/hu_HU.php
+++ b/lib/l10n/hu_HU.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok szinkronizálásához, mert a WebDAV-elérés úgy tűnik, nem működik.",
"Please double check the <a href='%s'>installation guides</a>." => "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
"seconds ago" => "pár másodperce",
-"1 minute ago" => "1 perce",
-"%d minutes ago" => "%d perce",
-"1 hour ago" => "1 órája",
-"%d hours ago" => "%d órája",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "ma",
"yesterday" => "tegnap",
-"%d days ago" => "%d napja",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "múlt hónapban",
-"%d months ago" => "%d hónapja",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "tavaly",
"years ago" => "több éve",
"Caused by:" => "Okozta:",
diff --git a/lib/l10n/hy.php b/lib/l10n/hy.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/hy.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ia.php b/lib/l10n/ia.php
index a7fee63892b..34f43bc424a 100644
--- a/lib/l10n/ia.php
+++ b/lib/l10n/ia.php
@@ -7,6 +7,10 @@ $TRANSLATIONS = array(
"Admin" => "Administration",
"web services under your control" => "servicios web sub tu controlo",
"Files" => "Files",
-"Text" => "Texto"
+"Text" => "Texto",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/id.php b/lib/l10n/id.php
index d37c8c25493..eaec65516b8 100644
--- a/lib/l10n/id.php
+++ b/lib/l10n/id.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Web server Anda belum dikonfigurasikan dengan baik untuk mengizinkan sinkronisasi berkas karena tampaknya antarmuka WebDAV rusak.",
"Please double check the <a href='%s'>installation guides</a>." => "Silakan periksa ulang <a href='%s'>panduan instalasi</a>.",
"seconds ago" => "beberapa detik yang lalu",
-"1 minute ago" => "1 menit yang lalu",
-"%d minutes ago" => "%d menit yang lalu",
-"1 hour ago" => "1 jam yang lalu",
-"%d hours ago" => "%d jam yang lalu",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "hari ini",
"yesterday" => "kemarin",
-"%d days ago" => "%d hari yang lalu",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "bulan kemarin",
-"%d months ago" => "%d bulan yang lalu",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "tahun kemarin",
"years ago" => "beberapa tahun lalu",
"Could not find category \"%s\"" => "Tidak dapat menemukan kategori \"%s\""
diff --git a/lib/l10n/is.php b/lib/l10n/is.php
index b1402f1df49..7512d278fb8 100644
--- a/lib/l10n/is.php
+++ b/lib/l10n/is.php
@@ -17,15 +17,13 @@ $TRANSLATIONS = array(
"Text" => "Texti",
"Images" => "Myndir",
"seconds ago" => "sek.",
-"1 minute ago" => "Fyrir 1 mínútu",
-"%d minutes ago" => "fyrir %d mínútum",
-"1 hour ago" => "Fyrir 1 klst.",
-"%d hours ago" => "fyrir %d klst.",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "í dag",
"yesterday" => "í gær",
-"%d days ago" => "fyrir %d dögum",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "síðasta mánuði",
-"%d months ago" => "fyrir %d mánuðum",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "síðasta ári",
"years ago" => "einhverjum árum",
"Could not find category \"%s\"" => "Fann ekki flokkinn \"%s\""
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index 50723eecbbe..c29ab4833e3 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.",
"Please double check the <a href='%s'>installation guides</a>." => "Leggi attentamente le <a href='%s'>guide d'installazione</a>.",
"seconds ago" => "secondi fa",
-"1 minute ago" => "Un minuto fa",
-"%d minutes ago" => "%d minuti fa",
-"1 hour ago" => "1 ora fa",
-"%d hours ago" => "%d ore fa",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "oggi",
"yesterday" => "ieri",
-"%d days ago" => "%d giorni fa",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "mese scorso",
-"%d months ago" => "%d mesi fa",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "anno scorso",
"years ago" => "anni fa",
"Caused by:" => "Causato da:",
diff --git a/lib/l10n/ja_JP.php b/lib/l10n/ja_JP.php
index 6561343eaee..482806d4946 100644
--- a/lib/l10n/ja_JP.php
+++ b/lib/l10n/ja_JP.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAVインタフェースが動作していないと考えられるため、あなたのWEBサーバはまだファイルの同期を許可するように適切な設定がされていません。",
"Please double check the <a href='%s'>installation guides</a>." => "<a href='%s'>インストールガイド</a>をよく確認してください。",
"seconds ago" => "数秒前",
-"1 minute ago" => "1 分前",
-"%d minutes ago" => "%d 分前",
-"1 hour ago" => "1 時間前",
-"%d hours ago" => "%d 時間前",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "今日",
"yesterday" => "昨日",
-"%d days ago" => "%d 日前",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "一月前",
-"%d months ago" => "%d 分前",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "一年前",
"years ago" => "年前",
"Caused by:" => "原因は以下:",
diff --git a/lib/l10n/ka.php b/lib/l10n/ka.php
index b6e06997638..04fefe8bdf1 100644
--- a/lib/l10n/ka.php
+++ b/lib/l10n/ka.php
@@ -7,11 +7,11 @@ $TRANSLATIONS = array(
"ZIP download is turned off." => "ZIP გადმოწერა გამორთულია",
"Files" => "ფაილები",
"seconds ago" => "წამის წინ",
-"1 minute ago" => "1 წუთის წინ",
-"%d minutes ago" => "%d წუთის წინ",
-"1 hour ago" => "1 საათის წინ",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "დღეს",
"yesterday" => "გუშინ",
-"%d days ago" => "%d დღის წინ"
+"_%n day go_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/ka_GE.php b/lib/l10n/ka_GE.php
index c03cccf1361..3cb55277d6c 100644
--- a/lib/l10n/ka_GE.php
+++ b/lib/l10n/ka_GE.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "თქვენი web სერვერი არ არის კონფიგურირებული ფაილ სინქრონიზაციისთვის, რადგან WebDAV ინტერფეისი შეიძლება იყოს გატეხილი.",
"Please double check the <a href='%s'>installation guides</a>." => "გთხოვთ გადაათვალიეროთ <a href='%s'>ინსტალაციის გზამკვლევი</a>.",
"seconds ago" => "წამის წინ",
-"1 minute ago" => "1 წუთის წინ",
-"%d minutes ago" => "%d წუთის წინ",
-"1 hour ago" => "1 საათის წინ",
-"%d hours ago" => "%d საათის წინ",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "დღეს",
"yesterday" => "გუშინ",
-"%d days ago" => "%d დღის წინ",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "გასულ თვეში",
-"%d months ago" => "%d თვის წინ",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "ბოლო წელს",
"years ago" => "წლის წინ",
"Could not find category \"%s\"" => "\"%s\" კატეგორიის მოძებნა ვერ მოხერხდა"
diff --git a/lib/l10n/kn.php b/lib/l10n/kn.php
new file mode 100644
index 00000000000..e7b09649a24
--- /dev/null
+++ b/lib/l10n/kn.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
+"_%n day go_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/ko.php b/lib/l10n/ko.php
index 734b6c6a072..824882c984d 100644
--- a/lib/l10n/ko.php
+++ b/lib/l10n/ko.php
@@ -27,15 +27,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서버에서 파일 동기화를 사용할 수 있도록 설정이 제대로 되지 않은 것 같습니다.",
"Please double check the <a href='%s'>installation guides</a>." => "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
"seconds ago" => "초 전",
-"1 minute ago" => "1분 전",
-"%d minutes ago" => "%d분 전",
-"1 hour ago" => "1시간 전",
-"%d hours ago" => "%d시간 전",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "오늘",
"yesterday" => "어제",
-"%d days ago" => "%d일 전",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "지난 달",
-"%d months ago" => "%d개월 전",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "작년",
"years ago" => "년 전",
"Could not find category \"%s\"" => "분류 \"%s\"을(를) 찾을 수 없습니다."
diff --git a/lib/l10n/ku_IQ.php b/lib/l10n/ku_IQ.php
index a2a6e237b99..c99f9dd2a12 100644
--- a/lib/l10n/ku_IQ.php
+++ b/lib/l10n/ku_IQ.php
@@ -4,6 +4,10 @@ $TRANSLATIONS = array(
"Settings" => "ده‌ستكاری",
"Users" => "به‌كارهێنه‌ر",
"Admin" => "به‌ڕێوه‌به‌ری سه‌ره‌كی",
-"web services under your control" => "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
+"web services under your control" => "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/lb.php b/lib/l10n/lb.php
index 84114a6926d..c25f5b55bd5 100644
--- a/lib/l10n/lb.php
+++ b/lib/l10n/lb.php
@@ -10,11 +10,13 @@ $TRANSLATIONS = array(
"Files" => "Dateien",
"Text" => "SMS",
"seconds ago" => "Sekonnen hir",
-"1 minute ago" => "1 Minutt hir",
-"1 hour ago" => "vrun 1 Stonn",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "haut",
"yesterday" => "gëschter",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "Läschte Mount",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "Läscht Joer",
"years ago" => "Joren hier"
);
diff --git a/lib/l10n/lt_LT.php b/lib/l10n/lt_LT.php
index 4aab3f1113d..fb109b86339 100644
--- a/lib/l10n/lt_LT.php
+++ b/lib/l10n/lt_LT.php
@@ -17,15 +17,13 @@ $TRANSLATIONS = array(
"Text" => "Žinučių",
"Images" => "Paveikslėliai",
"seconds ago" => "prieš sekundę",
-"1 minute ago" => "Prieš 1 minutę",
-"%d minutes ago" => "prieš %d minučių",
-"1 hour ago" => "prieš 1 valandą",
-"%d hours ago" => "prieš %d valandų",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "šiandien",
"yesterday" => "vakar",
-"%d days ago" => "prieš %d dienų",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "praeitą mėnesį",
-"%d months ago" => "prieš %d mėnesių",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "praeitais metais",
"years ago" => "prieš metus"
);
diff --git a/lib/l10n/lv.php b/lib/l10n/lv.php
index 38cf55549dd..2a2daee8d89 100644
--- a/lib/l10n/lv.php
+++ b/lib/l10n/lv.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta.",
"Please double check the <a href='%s'>installation guides</a>." => "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>.",
"seconds ago" => "sekundes atpakaļ",
-"1 minute ago" => "pirms 1 minūtes",
-"%d minutes ago" => "pirms %d minūtēm",
-"1 hour ago" => "pirms 1 stundas",
-"%d hours ago" => "pirms %d stundām",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "šodien",
"yesterday" => "vakar",
-"%d days ago" => "pirms %d dienām",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "pagājušajā mēnesī",
-"%d months ago" => "pirms %d mēnešiem",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "gājušajā gadā",
"years ago" => "gadus atpakaļ",
"Could not find category \"%s\"" => "Nevarēja atrast kategoriju “%s”"
diff --git a/lib/l10n/mk.php b/lib/l10n/mk.php
index e4a6afef492..69d4a1cb694 100644
--- a/lib/l10n/mk.php
+++ b/lib/l10n/mk.php
@@ -17,15 +17,13 @@ $TRANSLATIONS = array(
"Text" => "Текст",
"Images" => "Слики",
"seconds ago" => "пред секунди",
-"1 minute ago" => "пред 1 минута",
-"%d minutes ago" => "пред %d минути",
-"1 hour ago" => "пред 1 час",
-"%d hours ago" => "пред %d часови",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "денеска",
"yesterday" => "вчера",
-"%d days ago" => "пред %d денови",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "минатиот месец",
-"%d months ago" => "пред %d месеци",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "минатата година",
"years ago" => "пред години",
"Could not find category \"%s\"" => "Не можам да најдам категорија „%s“"
diff --git a/lib/l10n/ml_IN.php b/lib/l10n/ml_IN.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/ml_IN.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ms_MY.php b/lib/l10n/ms_MY.php
index be7d626ccb7..17ef07f83dd 100644
--- a/lib/l10n/ms_MY.php
+++ b/lib/l10n/ms_MY.php
@@ -8,6 +8,10 @@ $TRANSLATIONS = array(
"web services under your control" => "Perkhidmatan web di bawah kawalan anda",
"Authentication error" => "Ralat pengesahan",
"Files" => "Fail-fail",
-"Text" => "Teks"
+"Text" => "Teks",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
+"_%n day go_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/my_MM.php b/lib/l10n/my_MM.php
index 613b58a87cc..b2e9ca18139 100644
--- a/lib/l10n/my_MM.php
+++ b/lib/l10n/my_MM.php
@@ -14,15 +14,13 @@ $TRANSLATIONS = array(
"Text" => "စာသား",
"Images" => "ပုံရိပ်များ",
"seconds ago" => "စက္ကန့်အနည်းငယ်က",
-"1 minute ago" => "၁ မိနစ်အရင်က",
-"%d minutes ago" => "%d မိနစ်အရင်က",
-"1 hour ago" => "၁ နာရီ အရင်က",
-"%d hours ago" => "%d နာရီအရင်က",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "ယနေ့",
"yesterday" => "မနေ့က",
-"%d days ago" => "%d ရက် အရင်က",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "ပြီးခဲ့သောလ",
-"%d months ago" => "%d လအရင်က",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "မနှစ်က",
"years ago" => "နှစ် အရင်က",
"Could not find category \"%s\"" => "\"%s\"ခေါင်းစဉ်ကို ရှာမတွေ့ပါ"
diff --git a/lib/l10n/nb_NO.php b/lib/l10n/nb_NO.php
index dbc0788f4b0..8e7d095d369 100644
--- a/lib/l10n/nb_NO.php
+++ b/lib/l10n/nb_NO.php
@@ -19,15 +19,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din nettservev er ikke konfigurert korrekt for filsynkronisering. WebDAV ser ut til å ikke funkere.",
"Please double check the <a href='%s'>installation guides</a>." => "Vennligst dobbelsjekk <a href='%s'>installasjonsguiden</a>.",
"seconds ago" => "sekunder siden",
-"1 minute ago" => "1 minutt siden",
-"%d minutes ago" => "%d minutter siden",
-"1 hour ago" => "1 time siden",
-"%d hours ago" => "%d timer siden",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "i dag",
"yesterday" => "i går",
-"%d days ago" => "%d dager siden",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "forrige måned",
-"%d months ago" => "%d måneder siden",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "forrige år",
"years ago" => "år siden",
"Could not find category \"%s\"" => "Kunne ikke finne kategori \"%s\""
diff --git a/lib/l10n/ne.php b/lib/l10n/ne.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/ne.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/nl.php b/lib/l10n/nl.php
index 6f8d01f5943..2d737bd5ebd 100644
--- a/lib/l10n/nl.php
+++ b/lib/l10n/nl.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verbroken lijkt.",
"Please double check the <a href='%s'>installation guides</a>." => "Controleer de <a href='%s'>installatiehandleiding</a> goed.",
"seconds ago" => "seconden geleden",
-"1 minute ago" => "1 minuut geleden",
-"%d minutes ago" => "%d minuten geleden",
-"1 hour ago" => "1 uur geleden",
-"%d hours ago" => "%d uren geleden",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "vandaag",
"yesterday" => "gisteren",
-"%d days ago" => "%d dagen geleden",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "vorige maand",
-"%d months ago" => "%d maanden geleden",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "vorig jaar",
"years ago" => "jaar geleden",
"Caused by:" => "Gekomen door:",
diff --git a/lib/l10n/nn_NO.php b/lib/l10n/nn_NO.php
index 712b1e42375..28b4f7b7d94 100644
--- a/lib/l10n/nn_NO.php
+++ b/lib/l10n/nn_NO.php
@@ -12,11 +12,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Tenaren din er ikkje enno rett innstilt til å tilby filsynkronisering sidan WebDAV-grensesnittet ser ut til å vera øydelagt.",
"Please double check the <a href='%s'>installation guides</a>." => "Ver vennleg og dobbeltsjekk <a href='%s'>installasjonsrettleiinga</a>.",
"seconds ago" => "sekund sidan",
-"1 minute ago" => "1 minutt sidan",
-"1 hour ago" => "1 time sidan",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "i dag",
"yesterday" => "i går",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "førre månad",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "i fjor",
"years ago" => "år sidan"
);
diff --git a/lib/l10n/oc.php b/lib/l10n/oc.php
index be7f3b43a2d..40a527cc76c 100644
--- a/lib/l10n/oc.php
+++ b/lib/l10n/oc.php
@@ -12,12 +12,13 @@ $TRANSLATIONS = array(
"Authentication error" => "Error d'autentificacion",
"Files" => "Fichièrs",
"seconds ago" => "segonda a",
-"1 minute ago" => "1 minuta a",
-"%d minutes ago" => "%d minutas a",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "uèi",
"yesterday" => "ièr",
-"%d days ago" => "%d jorns a",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "mes passat",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "an passat",
"years ago" => "ans a"
);
diff --git a/lib/l10n/pl.php b/lib/l10n/pl.php
index ff75eca6683..1740676080e 100644
--- a/lib/l10n/pl.php
+++ b/lib/l10n/pl.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"Please double check the <a href='%s'>installation guides</a>." => "Sprawdź ponownie <a href='%s'>przewodniki instalacji</a>.",
"seconds ago" => "sekund temu",
-"1 minute ago" => "1 minutę temu",
-"%d minutes ago" => "%d minut temu",
-"1 hour ago" => "1 godzinę temu",
-"%d hours ago" => "%d godzin temu",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "dziś",
"yesterday" => "wczoraj",
-"%d days ago" => "%d dni temu",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "w zeszłym miesiącu",
-"%d months ago" => "%d miesiecy temu",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "w zeszłym roku",
"years ago" => "lat temu",
"Caused by:" => "Spowodowane przez:",
diff --git a/lib/l10n/pt_BR.php b/lib/l10n/pt_BR.php
index fa7dd092519..4ebf587cf86 100644
--- a/lib/l10n/pt_BR.php
+++ b/lib/l10n/pt_BR.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Seu servidor web não está configurado corretamente para permitir sincronização de arquivos porque a interface WebDAV parece estar quebrada.",
"Please double check the <a href='%s'>installation guides</a>." => "Por favor, confira os <a href='%s'>guias de instalação</a>.",
"seconds ago" => "segundos atrás",
-"1 minute ago" => "1 minuto atrás",
-"%d minutes ago" => "%d minutos atrás",
-"1 hour ago" => "1 hora atrás",
-"%d hours ago" => "%d horas atrás",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "hoje",
"yesterday" => "ontem",
-"%d days ago" => "%d dias atrás",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "último mês",
-"%d months ago" => "%d meses atrás",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "último ano",
"years ago" => "anos atrás",
"Caused by:" => "Causados ​​por:",
diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php
index 9411df0be3a..3131499e130 100644
--- a/lib/l10n/pt_PT.php
+++ b/lib/l10n/pt_PT.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"Please double check the <a href='%s'>installation guides</a>." => "Por favor verifique <a href='%s'>installation guides</a>.",
"seconds ago" => "Minutos atrás",
-"1 minute ago" => "Há 1 minuto",
-"%d minutes ago" => "há %d minutos",
-"1 hour ago" => "Há 1 horas",
-"%d hours ago" => "Há %d horas",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "hoje",
"yesterday" => "ontem",
-"%d days ago" => "há %d dias",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "ultímo mês",
-"%d months ago" => "Há %d meses atrás",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "ano passado",
"years ago" => "anos atrás",
"Caused by:" => "Causado por:",
diff --git a/lib/l10n/ro.php b/lib/l10n/ro.php
index f56ee7323f5..2b6d14d58f3 100644
--- a/lib/l10n/ro.php
+++ b/lib/l10n/ro.php
@@ -18,17 +18,15 @@ $TRANSLATIONS = array(
"Text" => "Text",
"Images" => "Imagini",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Serverul de web nu este încă setat corespunzător pentru a permite sincronizarea fișierelor deoarece interfața WebDAV pare a fi întreruptă.",
-"Please double check the <a href='%s'>installation guides</a>." => "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</ a>.",
+"Please double check the <a href='%s'>installation guides</a>." => "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
"seconds ago" => "secunde în urmă",
-"1 minute ago" => "1 minut în urmă",
-"%d minutes ago" => "%d minute în urmă",
-"1 hour ago" => "Acum o ora",
-"%d hours ago" => "%d ore in urma",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "astăzi",
"yesterday" => "ieri",
-"%d days ago" => "%d zile în urmă",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "ultima lună",
-"%d months ago" => "%d luni in urma",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "ultimul an",
"years ago" => "ani în urmă",
"Could not find category \"%s\"" => "Cloud nu a gasit categoria \"%s\""
diff --git a/lib/l10n/ru.php b/lib/l10n/ru.php
index 469acb0a1f0..92b14b9b89e 100644
--- a/lib/l10n/ru.php
+++ b/lib/l10n/ru.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер до сих пор не настроен правильно для возможности синхронизации файлов, похоже что проблема в неисправности интерфейса WebDAV.",
"Please double check the <a href='%s'>installation guides</a>." => "Пожалуйста, дважды просмотрите <a href='%s'>инструкции по установке</a>.",
"seconds ago" => "несколько секунд назад",
-"1 minute ago" => "1 минуту назад",
-"%d minutes ago" => "%d минут назад",
-"1 hour ago" => "час назад",
-"%d hours ago" => "%d часов назад",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "сегодня",
"yesterday" => "вчера",
-"%d days ago" => "%d дней назад",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "в прошлом месяце",
-"%d months ago" => "%d месяцев назад",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "в прошлом году",
"years ago" => "несколько лет назад",
"Caused by:" => "Вызвано:",
diff --git a/lib/l10n/ru_RU.php b/lib/l10n/ru_RU.php
deleted file mode 100644
index 1761c1ebf3b..00000000000
--- a/lib/l10n/ru_RU.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Settings" => "Настройки",
-"Text" => "Текст"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/lib/l10n/si_LK.php b/lib/l10n/si_LK.php
index f09dee7c6cc..d10804cae69 100644
--- a/lib/l10n/si_LK.php
+++ b/lib/l10n/si_LK.php
@@ -17,12 +17,13 @@ $TRANSLATIONS = array(
"Text" => "පෙළ",
"Images" => "අනු රූ",
"seconds ago" => "තත්පරයන්ට පෙර",
-"1 minute ago" => "1 මිනිත්තුවකට පෙර",
-"%d minutes ago" => "%d මිනිත්තුවන්ට පෙර",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "අද",
"yesterday" => "ඊයේ",
-"%d days ago" => "%d දිනකට පෙර",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "පෙර මාසයේ",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "පෙර අවුරුද්දේ",
"years ago" => "අවුරුදු කීපයකට පෙර"
);
diff --git a/lib/l10n/sk.php b/lib/l10n/sk.php
new file mode 100644
index 00000000000..54812b15a6f
--- /dev/null
+++ b/lib/l10n/sk.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
+"_%n day go_::_%n days ago_" => array("","",""),
+"_%n month ago_::_%n months ago_" => array("","","")
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/lib/l10n/sk_SK.php b/lib/l10n/sk_SK.php
index a3e6a17aaac..ef3dc6eb977 100644
--- a/lib/l10n/sk_SK.php
+++ b/lib/l10n/sk_SK.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.",
"Please double check the <a href='%s'>installation guides</a>." => "Prosím skontrolujte <a href='%s'>inštalačnú príručku</a>.",
"seconds ago" => "pred sekundami",
-"1 minute ago" => "pred minútou",
-"%d minutes ago" => "pred %d minútami",
-"1 hour ago" => "Pred 1 hodinou",
-"%d hours ago" => "Pred %d hodinami.",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "dnes",
"yesterday" => "včera",
-"%d days ago" => "pred %d dňami",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "minulý mesiac",
-"%d months ago" => "Pred %d mesiacmi.",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "minulý rok",
"years ago" => "pred rokmi",
"Caused by:" => "Príčina:",
diff --git a/lib/l10n/sl.php b/lib/l10n/sl.php
index 4423155fd95..73a397f3c84 100644
--- a/lib/l10n/sl.php
+++ b/lib/l10n/sl.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Spletni stražnik še ni ustrezno nastavljen in ne omogoča usklajevanja, saj je nastavitev WebDAV okvarjena.",
"Please double check the <a href='%s'>installation guides</a>." => "Preverite <a href='%s'>navodila namestitve</a>.",
"seconds ago" => "pred nekaj sekundami",
-"1 minute ago" => "pred minuto",
-"%d minutes ago" => "pred %d minutami",
-"1 hour ago" => "Pred 1 uro",
-"%d hours ago" => "Pred %d urami",
+"_%n minute ago_::_%n minutes ago_" => array("","","",""),
+"_%n hour ago_::_%n hours ago_" => array("","","",""),
"today" => "danes",
"yesterday" => "včeraj",
-"%d days ago" => "pred %d dnevi",
+"_%n day go_::_%n days ago_" => array("","","",""),
"last month" => "zadnji mesec",
-"%d months ago" => "Pred %d meseci",
+"_%n month ago_::_%n months ago_" => array("","","",""),
"last year" => "lansko leto",
"years ago" => "let nazaj",
"Could not find category \"%s\"" => "Kategorije \"%s\" ni mogoče najti."
diff --git a/lib/l10n/sq.php b/lib/l10n/sq.php
index 7a51b99c2be..ca2364f9864 100644
--- a/lib/l10n/sq.php
+++ b/lib/l10n/sq.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Serveri web i juaji nuk është konfiguruar akoma për të lejuar sinkronizimin e skedarëve sepse ndërfaqja WebDAV mund të jetë e dëmtuar.",
"Please double check the <a href='%s'>installation guides</a>." => "Ju lutemi kontrolloni mirë <a href='%s'>shoqëruesin e instalimit</a>.",
"seconds ago" => "sekonda më parë",
-"1 minute ago" => "1 minutë më parë",
-"%d minutes ago" => "%d minuta më parë",
-"1 hour ago" => "1 orë më parë",
-"%d hours ago" => "%d orë më parë",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "sot",
"yesterday" => "dje",
-"%d days ago" => "%d ditë më parë",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "muajin e shkuar",
-"%d months ago" => "%d muaj më parë",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "vitin e shkuar",
"years ago" => "vite më parë",
"Could not find category \"%s\"" => "Kategoria \"%s\" nuk u gjet"
diff --git a/lib/l10n/sr.php b/lib/l10n/sr.php
index 96dec30124d..c42419b6d92 100644
--- a/lib/l10n/sr.php
+++ b/lib/l10n/sr.php
@@ -20,15 +20,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб сервер тренутно не подржава синхронизацију датотека јер се чини да је WebDAV сучеље неисправно.",
"Please double check the <a href='%s'>installation guides</a>." => "Погледајте <a href='%s'>водиче за инсталацију</a>.",
"seconds ago" => "пре неколико секунди",
-"1 minute ago" => "пре 1 минут",
-"%d minutes ago" => "пре %d минута",
-"1 hour ago" => "Пре једног сата",
-"%d hours ago" => "пре %d сата/и",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "данас",
"yesterday" => "јуче",
-"%d days ago" => "пре %d дана",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "прошлог месеца",
-"%d months ago" => "пре %d месеца/и",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "прошле године",
"years ago" => "година раније",
"Could not find category \"%s\"" => "Не могу да пронађем категорију „%s“."
diff --git a/lib/l10n/sr@latin.php b/lib/l10n/sr@latin.php
index 1bfa1f0126f..5ba51bc0ba7 100644
--- a/lib/l10n/sr@latin.php
+++ b/lib/l10n/sr@latin.php
@@ -7,6 +7,10 @@ $TRANSLATIONS = array(
"Admin" => "Adninistracija",
"Authentication error" => "Greška pri autentifikaciji",
"Files" => "Fajlovi",
-"Text" => "Tekst"
+"Text" => "Tekst",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
+"_%n day go_::_%n days ago_" => array("","",""),
+"_%n month ago_::_%n months ago_" => array("","","")
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php
index 36fd9b4d7b9..fa3ae318cee 100644
--- a/lib/l10n/sv.php
+++ b/lib/l10n/sv.php
@@ -41,15 +41,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.",
"Please double check the <a href='%s'>installation guides</a>." => "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"seconds ago" => "sekunder sedan",
-"1 minute ago" => "1 minut sedan",
-"%d minutes ago" => "%d minuter sedan",
-"1 hour ago" => "1 timme sedan",
-"%d hours ago" => "%d timmar sedan",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "i dag",
"yesterday" => "i går",
-"%d days ago" => "%d dagar sedan",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "förra månaden",
-"%d months ago" => "%d månader sedan",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "förra året",
"years ago" => "år sedan",
"Caused by:" => "Orsakad av:",
diff --git a/lib/l10n/sw_KE.php b/lib/l10n/sw_KE.php
new file mode 100644
index 00000000000..15f78e0bce6
--- /dev/null
+++ b/lib/l10n/sw_KE.php
@@ -0,0 +1,8 @@
+<?php
+$TRANSLATIONS = array(
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/ta_LK.php b/lib/l10n/ta_LK.php
index 4a7dd922f85..e70e65845be 100644
--- a/lib/l10n/ta_LK.php
+++ b/lib/l10n/ta_LK.php
@@ -17,15 +17,13 @@ $TRANSLATIONS = array(
"Text" => "உரை",
"Images" => "படங்கள்",
"seconds ago" => "செக்கன்களுக்கு முன்",
-"1 minute ago" => "1 நிமிடத்திற்கு முன் ",
-"%d minutes ago" => "%d நிமிடங்களுக்கு முன்",
-"1 hour ago" => "1 மணித்தியாலத்திற்கு முன்",
-"%d hours ago" => "%d மணித்தியாலத்திற்கு முன்",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "இன்று",
"yesterday" => "நேற்று",
-"%d days ago" => "%d நாட்களுக்கு முன்",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "கடந்த மாதம்",
-"%d months ago" => "%d மாதத்திற்கு முன்",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "கடந்த வருடம்",
"years ago" => "வருடங்களுக்கு முன்",
"Could not find category \"%s\"" => "பிரிவு \"%s\" ஐ கண்டுப்பிடிக்க முடியவில்லை"
diff --git a/lib/l10n/te.php b/lib/l10n/te.php
index e7d9d921e5e..524ea0c6024 100644
--- a/lib/l10n/te.php
+++ b/lib/l10n/te.php
@@ -4,11 +4,13 @@ $TRANSLATIONS = array(
"Settings" => "అమరికలు",
"Users" => "వాడుకరులు",
"seconds ago" => "క్షణాల క్రితం",
-"1 minute ago" => "1 నిమిషం క్రితం",
-"1 hour ago" => "1 గంట క్రితం",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
"today" => "ఈరోజు",
"yesterday" => "నిన్న",
+"_%n day go_::_%n days ago_" => array("",""),
"last month" => "పోయిన నెల",
+"_%n month ago_::_%n months ago_" => array("",""),
"last year" => "పోయిన సంవత్సరం",
"years ago" => "సంవత్సరాల క్రితం"
);
diff --git a/lib/l10n/th_TH.php b/lib/l10n/th_TH.php
index 6d939c4588d..53a150d8f1e 100644
--- a/lib/l10n/th_TH.php
+++ b/lib/l10n/th_TH.php
@@ -18,15 +18,13 @@ $TRANSLATIONS = array(
"Text" => "ข้อความ",
"Images" => "รูปภาพ",
"seconds ago" => "วินาที ก่อนหน้านี้",
-"1 minute ago" => "1 นาทีก่อนหน้านี้",
-"%d minutes ago" => "%d นาทีที่ผ่านมา",
-"1 hour ago" => "1 ชั่วโมงก่อนหน้านี้",
-"%d hours ago" => "%d ชั่วโมงก่อนหน้านี้",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "วันนี้",
"yesterday" => "เมื่อวานนี้",
-"%d days ago" => "%d วันที่ผ่านมา",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "เดือนที่แล้ว",
-"%d months ago" => "%d เดือนมาแล้ว",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "ปีที่แล้ว",
"years ago" => "ปี ที่ผ่านมา",
"Could not find category \"%s\"" => "ไม่พบหมวดหมู่ \"%s\""
diff --git a/lib/l10n/tr.php b/lib/l10n/tr.php
index c3fc70c798c..f95933645da 100644
--- a/lib/l10n/tr.php
+++ b/lib/l10n/tr.php
@@ -5,11 +5,14 @@ $TRANSLATIONS = array(
"Settings" => "Ayarlar",
"Users" => "Kullanıcılar",
"Admin" => "Yönetici",
+"Failed to upgrade \"%s\"." => "\"%s\" yükseltme başarısız oldu.",
"web services under your control" => "Bilgileriniz güvenli ve şifreli",
+"cannot open \"%s\"" => "\"%s\" açılamıyor",
"ZIP download is turned off." => "ZIP indirmeleri kapatılmıştır.",
"Files need to be downloaded one by one." => "Dosyaların birer birer indirilmesi gerekmektedir.",
"Back to Files" => "Dosyalara dön",
"Selected files too large to generate zip file." => "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür.",
+"Download the files in smaller chunks, seperately or kindly ask your administrator." => "Dosyaları ayrı ayrı, küçük parçalar halinde indirin ya da yöneticinizden yardım isteyin. ",
"couldn't be determined" => "tespit edilemedi",
"Application is not enabled" => "Uygulama etkinleştirilmedi",
"Authentication error" => "Kimlik doğrulama hatası",
@@ -38,17 +41,16 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.",
"Please double check the <a href='%s'>installation guides</a>." => "Lütfen <a href='%s'>kurulum kılavuzlarını</a> iki kez kontrol edin.",
"seconds ago" => "saniye önce",
-"1 minute ago" => "1 dakika önce",
-"%d minutes ago" => "%d dakika önce",
-"1 hour ago" => "1 saat önce",
-"%d hours ago" => "%d saat önce",
+"_%n minute ago_::_%n minutes ago_" => array("","%n dakika önce"),
+"_%n hour ago_::_%n hours ago_" => array("","%n saat önce"),
"today" => "bugün",
"yesterday" => "dün",
-"%d days ago" => "%d gün önce",
+"_%n day go_::_%n days ago_" => array("","%n gün önce"),
"last month" => "geçen ay",
-"%d months ago" => "%d ay önce",
+"_%n month ago_::_%n months ago_" => array("","%n ay önce"),
"last year" => "geçen yıl",
"years ago" => "yıl önce",
+"Caused by:" => "Neden olan:",
"Could not find category \"%s\"" => "\"%s\" kategorisi bulunamadı"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/lib/l10n/ug.php b/lib/l10n/ug.php
index 89d01c4a157..731ad904d7e 100644
--- a/lib/l10n/ug.php
+++ b/lib/l10n/ug.php
@@ -8,13 +8,11 @@ $TRANSLATIONS = array(
"Files" => "ھۆججەتلەر",
"Text" => "قىسقا ئۇچۇر",
"Images" => "سۈرەتلەر",
-"1 minute ago" => "1 مىنۇت ئىلگىرى",
-"%d minutes ago" => "%d مىنۇت ئىلگىرى",
-"1 hour ago" => "1 سائەت ئىلگىرى",
-"%d hours ago" => "%d سائەت ئىلگىرى",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "بۈگۈن",
"yesterday" => "تۈنۈگۈن",
-"%d days ago" => "%d كۈن ئىلگىرى",
-"%d months ago" => "%d ئاي ئىلگىرى"
+"_%n day go_::_%n days ago_" => array(""),
+"_%n month ago_::_%n months ago_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php
index 93b1a005a23..26617396e06 100644
--- a/lib/l10n/uk.php
+++ b/lib/l10n/uk.php
@@ -37,15 +37,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.",
"Please double check the <a href='%s'>installation guides</a>." => "Будь ласка, перевірте <a href='%s'>інструкції по встановленню</a>.",
"seconds ago" => "секунди тому",
-"1 minute ago" => "1 хвилину тому",
-"%d minutes ago" => "%d хвилин тому",
-"1 hour ago" => "1 годину тому",
-"%d hours ago" => "%d годин тому",
+"_%n minute ago_::_%n minutes ago_" => array("","",""),
+"_%n hour ago_::_%n hours ago_" => array("","",""),
"today" => "сьогодні",
"yesterday" => "вчора",
-"%d days ago" => "%d днів тому",
+"_%n day go_::_%n days ago_" => array("","",""),
"last month" => "минулого місяця",
-"%d months ago" => "%d місяців тому",
+"_%n month ago_::_%n months ago_" => array("","",""),
"last year" => "минулого року",
"years ago" => "роки тому",
"Could not find category \"%s\"" => "Не вдалося знайти категорію \"%s\""
diff --git a/lib/l10n/ur_PK.php b/lib/l10n/ur_PK.php
index b98310070e4..7dc967ccd93 100644
--- a/lib/l10n/ur_PK.php
+++ b/lib/l10n/ur_PK.php
@@ -5,6 +5,10 @@ $TRANSLATIONS = array(
"Settings" => "سیٹینگز",
"Users" => "یوزرز",
"Admin" => "ایڈمن",
-"web services under your control" => "آپ کے اختیار میں ویب سروسیز"
+"web services under your control" => "آپ کے اختیار میں ویب سروسیز",
+"_%n minute ago_::_%n minutes ago_" => array("",""),
+"_%n hour ago_::_%n hours ago_" => array("",""),
+"_%n day go_::_%n days ago_" => array("",""),
+"_%n month ago_::_%n months ago_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/lib/l10n/vi.php b/lib/l10n/vi.php
index 82ecc0fa47a..ebdb3ab2810 100644
--- a/lib/l10n/vi.php
+++ b/lib/l10n/vi.php
@@ -18,15 +18,13 @@ $TRANSLATIONS = array(
"Text" => "Văn bản",
"Images" => "Hình ảnh",
"seconds ago" => "vài giây trước",
-"1 minute ago" => "1 phút trước",
-"%d minutes ago" => "%d phút trước",
-"1 hour ago" => "1 giờ trước",
-"%d hours ago" => "%d giờ trước",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "hôm nay",
"yesterday" => "hôm qua",
-"%d days ago" => "%d ngày trước",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "tháng trước",
-"%d months ago" => "%d tháng trước",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "năm trước",
"years ago" => "năm trước",
"Could not find category \"%s\"" => "không thể tìm thấy mục \"%s\""
diff --git a/lib/l10n/zh_CN.GB2312.php b/lib/l10n/zh_CN.GB2312.php
index 3433bdc35b5..bc81ff8fe1b 100644
--- a/lib/l10n/zh_CN.GB2312.php
+++ b/lib/l10n/zh_CN.GB2312.php
@@ -19,13 +19,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "因WebDAV接口故障,您的网络服务器好像并未允许文件同步。",
"Please double check the <a href='%s'>installation guides</a>." => "请双击<a href='%s'>安装向导</a>。",
"seconds ago" => "秒前",
-"1 minute ago" => "1 分钟前",
-"%d minutes ago" => "%d 分钟前",
-"1 hour ago" => "1小时前",
+"_%n minute ago_::_%n minutes ago_" => array("%n 分钟以前"),
+"_%n hour ago_::_%n hours ago_" => array("%n 小时以前"),
"today" => "今天",
"yesterday" => "昨天",
-"%d days ago" => "%d 天前",
+"_%n day go_::_%n days ago_" => array("%n 天以前"),
"last month" => "上个月",
+"_%n month ago_::_%n months ago_" => array("%n 个月以前"),
"last year" => "去年",
"years ago" => "年前"
);
diff --git a/lib/l10n/zh_CN.php b/lib/l10n/zh_CN.php
index c71a1030d8f..b814b055a22 100644
--- a/lib/l10n/zh_CN.php
+++ b/lib/l10n/zh_CN.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "您的Web服务器尚未正确设置以允许文件同步, 因为WebDAV的接口似乎已损坏.",
"Please double check the <a href='%s'>installation guides</a>." => "请认真检查<a href='%s'>安装指南</a>.",
"seconds ago" => "秒前",
-"1 minute ago" => "一分钟前",
-"%d minutes ago" => "%d 分钟前",
-"1 hour ago" => "1小时前",
-"%d hours ago" => "%d小时前",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "今天",
"yesterday" => "昨天",
-"%d days ago" => "%d 天前",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "上月",
-"%d months ago" => "%d 月前",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "去年",
"years ago" => "年前",
"Could not find category \"%s\"" => "无法找到分类 \"%s\""
diff --git a/lib/l10n/zh_HK.php b/lib/l10n/zh_HK.php
index d6a8e217b57..ca3e6d504e7 100644
--- a/lib/l10n/zh_HK.php
+++ b/lib/l10n/zh_HK.php
@@ -7,8 +7,12 @@ $TRANSLATIONS = array(
"Admin" => "管理",
"Files" => "文件",
"Text" => "文字",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "今日",
"yesterday" => "昨日",
-"last month" => "前一月"
+"_%n day go_::_%n days ago_" => array(""),
+"last month" => "前一月",
+"_%n month ago_::_%n months ago_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/zh_TW.php b/lib/l10n/zh_TW.php
index d215995e307..83e0dff3926 100644
--- a/lib/l10n/zh_TW.php
+++ b/lib/l10n/zh_TW.php
@@ -38,15 +38,13 @@ $TRANSLATIONS = array(
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。",
"Please double check the <a href='%s'>installation guides</a>." => "請參考<a href='%s'>安裝指南</a>。",
"seconds ago" => "幾秒前",
-"1 minute ago" => "1 分鐘前",
-"%d minutes ago" => "%d 分鐘前",
-"1 hour ago" => "1 小時之前",
-"%d hours ago" => "%d 小時之前",
+"_%n minute ago_::_%n minutes ago_" => array(""),
+"_%n hour ago_::_%n hours ago_" => array(""),
"today" => "今天",
"yesterday" => "昨天",
-"%d days ago" => "%d 天前",
+"_%n day go_::_%n days ago_" => array(""),
"last month" => "上個月",
-"%d months ago" => "%d 個月之前",
+"_%n month ago_::_%n months ago_" => array(""),
"last year" => "去年",
"years ago" => "幾年前",
"Could not find category \"%s\"" => "找不到分類:\"%s\""
diff --git a/lib/memcache/factory.php b/lib/memcache/factory.php
index 4c1b1ab207f..fde7d947567 100644
--- a/lib/memcache/factory.php
+++ b/lib/memcache/factory.php
@@ -37,4 +37,33 @@ class Factory {
public function isAvailable() {
return XCache::isAvailable() || APCu::isAvailable() || APC::isAvailable() || Memcached::isAvailable();
}
+
+ /**
+ * get a in-server cache instance, will return null if no backend is available
+ *
+ * @param string $prefix
+ * @return \OC\Memcache\Cache
+ */
+ public static function createLowLatency($prefix = '') {
+ if (XCache::isAvailable()) {
+ return new XCache($prefix);
+ } elseif (APCu::isAvailable()) {
+ return new APCu($prefix);
+ } elseif (APC::isAvailable()) {
+ return new APC($prefix);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * check if there is a in-server backend available
+ *
+ * @return bool
+ */
+ public static function isAvailableLowLatency() {
+ return XCache::isAvailable() || APCu::isAvailable() || APC::isAvailable();
+ }
+
+
}
diff --git a/lib/ocs/result.php b/lib/ocs/result.php
index 729c39056d9..84f06fa01c7 100644
--- a/lib/ocs/result.php
+++ b/lib/ocs/result.php
@@ -94,4 +94,4 @@ class OC_OCS_Result{
}
-} \ No newline at end of file
+}
diff --git a/lib/public/groupinterface.php b/lib/public/groupinterface.php
index 97833028118..5603faa8265 100644
--- a/lib/public/groupinterface.php
+++ b/lib/public/groupinterface.php
@@ -28,4 +28,4 @@
namespace OCP;
-interface GroupInterface extends \OC_Group_Interface {} \ No newline at end of file
+interface GroupInterface extends \OC_Group_Interface {}
diff --git a/lib/public/userinterface.php b/lib/public/userinterface.php
index b73a8f8d8b0..53d9faf7a5e 100644
--- a/lib/public/userinterface.php
+++ b/lib/public/userinterface.php
@@ -28,4 +28,4 @@
namespace OCP;
-interface UserInterface extends \OC_User_Interface {} \ No newline at end of file
+interface UserInterface extends \OC_User_Interface {}
diff --git a/lib/public/util.php b/lib/public/util.php
index 693805946ea..b33f07b55e6 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -123,6 +123,14 @@ class Util {
}
/**
+ * @brief check if some encrypted files are stored
+ * @return bool
+ */
+ public static function encryptedFiles() {
+ return \OC_Util::encryptedFiles();
+ }
+
+ /**
* @brief Creates an absolute url
* @param string $app app
* @param string $file file
diff --git a/lib/user/http.php b/lib/user/http.php
index 944ede73a0b..1e044ed4188 100644
--- a/lib/user/http.php
+++ b/lib/user/http.php
@@ -103,4 +103,4 @@ class OC_User_HTTP extends OC_User_Backend {
return false;
}
}
-} \ No newline at end of file
+}
diff --git a/lib/user/interface.php b/lib/user/interface.php
index b1e19aea7fb..c72bdfaf3fd 100644
--- a/lib/user/interface.php
+++ b/lib/user/interface.php
@@ -77,4 +77,4 @@ interface OC_User_Interface {
* @return boolean if users can be listed or not
*/
public function hasUserListings();
-} \ No newline at end of file
+}
diff --git a/lib/util.php b/lib/util.php
index a7a83cf1a23..8c8ab496f7b 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -168,6 +168,10 @@ class OC_Util {
* @return array arrays with error messages and hints
*/
public static function checkServer() {
+ // Assume that if checkServer() succeeded before in this session, then all is fine.
+ if(\OC::$session->exists('checkServer_suceeded') && \OC::$session->get('checkServer_suceeded'))
+ return array();
+
$errors=array();
$defaults = new \OC_Defaults();
@@ -309,10 +313,30 @@ class OC_Util {
'hint'=>'Please ask your server administrator to restart the web server.');
}
+ // Cache the result of this function
+ \OC::$session->set('checkServer_suceeded', count($errors) == 0);
+
return $errors;
}
/**
+ * @brief check if there are still some encrypted files stored
+ * @return boolean
+ */
+ public static function encryptedFiles() {
+ //check if encryption was enabled in the past
+ $encryptedFiles = false;
+ if (OC_App::isEnabled('files_encryption') === false) {
+ $view = new OC\Files\View('/' . OCP\User::getUser());
+ if ($view->file_exists('/files_encryption/keyfiles')) {
+ $encryptedFiles = true;
+ }
+ }
+
+ return $encryptedFiles;
+ }
+
+ /**
* Check for correct file permissions of data directory
* @return array arrays with error messages and hints
*/
diff --git a/lib/vobject/compoundproperty.php b/lib/vobject/compoundproperty.php
index d702ab802e0..7fe42574bed 100644
--- a/lib/vobject/compoundproperty.php
+++ b/lib/vobject/compoundproperty.php
@@ -67,4 +67,4 @@ class CompoundProperty extends \Sabre\VObject\Property\Compound {
}
-} \ No newline at end of file
+}
diff --git a/lib/vobject/stringproperty.php b/lib/vobject/stringproperty.php
index b98a8f26c2b..a9d63a0a789 100644
--- a/lib/vobject/stringproperty.php
+++ b/lib/vobject/stringproperty.php
@@ -77,4 +77,4 @@ class StringProperty extends \Sabre\VObject\Property {
}
-} \ No newline at end of file
+}