diff options
Diffstat (limited to 'lib')
238 files changed, 2656 insertions, 1690 deletions
diff --git a/lib/base.php b/lib/base.php index 558be6b570f..10f5a5c4302 100644 --- a/lib/base.php +++ b/lib/base.php @@ -100,7 +100,18 @@ class OC { OC_Config::$object = new \OC\Config(self::$configDir); OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT))); - $scriptName = OC_Request::scriptName(); + /** + * FIXME: The following line is required because of a cyclic dependency + * on IRequest. + */ + $params = [ + 'server' => [ + 'SCRIPT_NAME' => $_SERVER['SCRIPT_NAME'], + 'SCRIPT_FILENAME' => $_SERVER['SCRIPT_FILENAME'], + ], + ]; + $fakeRequest = new \OC\AppFramework\Http\Request($params, null, new \OC\AllConfig(new \OC\SystemConfig())); + $scriptName = $fakeRequest->getScriptName(); if (substr($scriptName, -1) == '/') { $scriptName .= 'index.php'; //make sure suburi follows the same rules as scriptName @@ -230,6 +241,8 @@ class OC { } public static function checkSSL() { + $request = \OC::$server->getRequest(); + // redirect to https site if configured if (\OC::$server->getSystemConfig()->getValue('forcessl', false)) { // Default HSTS policy @@ -240,15 +253,16 @@ class OC { $header .= '; includeSubDomains'; } header($header); - ini_set('session.cookie_secure', 'on'); - if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) { - $url = 'https://' . OC_Request::serverHost() . OC_Request::requestUri(); + ini_set('session.cookie_secure', true); + + if ($request->getServerProtocol() <> 'https' && !OC::$CLI) { + $url = 'https://' . $request->getServerHost() . $request->getRequestUri(); header("Location: $url"); exit(); } } else { // Invalidate HSTS headers - if (OC_Request::serverProtocol() === 'https') { + if ($request->getServerProtocol() === 'https') { header('Strict-Transport-Security: max-age=0'); } } @@ -391,7 +405,7 @@ class OC { public static function initSession() { // prevents javascript from accessing php session cookies - ini_set('session.cookie_httponly', '1;'); + ini_set('session.cookie_httponly', true); // set the cookie path to the ownCloud directory $cookie_path = OC::$WEBROOT ? : '/'; @@ -478,7 +492,10 @@ class OC { require_once $vendorAutoLoad; } else { OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE); - OC_Template::printErrorPage('Composer autoloader not found, unable to continue.'); + // we can't use the template error page here, because this needs the + // DI container which isn't available yet + print('Composer autoloader not found, unable to continue. Check the folder "3rdparty".'); + exit(); } // setup the basic server @@ -609,18 +626,24 @@ class OC { return; } - $host = OC_Request::insecureServerHost(); - // if the host passed in headers isn't trusted + $request = \OC::$server->getRequest(); + $host = $request->getInsecureServerHost(); + /** + * if the host passed in headers isn't trusted + * FIXME: Should not be in here at all :see_no_evil: + */ if (!OC::$CLI - // overwritehost is always trusted - && OC_Request::getOverwriteHost() === null - && !OC_Request::isTrustedDomain($host) + // overwritehost is always trusted, workaround to not have to make + // \OC\AppFramework\Http\Request::getOverwriteHost public + && self::$server->getConfig()->getSystemValue('overwritehost') === '' + && !\OC::$server->getTrustedDomainHelper()->isTrustedDomain($host) + && self::$server->getConfig()->getSystemValue('installed', false) ) { header('HTTP/1.1 400 Bad Request'); header('Status: 400 Bad Request'); $tmpl = new OCP\Template('core', 'untrustedDomain', 'guest'); - $tmpl->assign('domain', $_SERVER['SERVER_NAME']); + $tmpl->assign('domain', $request->server['SERVER_NAME']); $tmpl->printPage(); exit(); @@ -716,6 +739,7 @@ class OC { * Handle the request */ public static function handleRequest() { + \OC::$server->getEventLogger()->start('handle_request', 'Handle request'); $systemConfig = \OC::$server->getSystemConfig(); // load all the classpaths from the enabled apps so they are available @@ -730,7 +754,7 @@ class OC { exit(); } - $request = OC_Request::getPathInfo(); + $request = \OC::$server->getRequest()->getPathInfo(); if (substr($request, -3) !== '.js') { // we need these files during the upgrade self::checkMaintenanceMode(); self::checkUpgrade(); @@ -760,7 +784,7 @@ class OC { } self::checkSingleUserMode(); OC_Util::setupFS(); - OC::$server->getRouter()->match(OC_Request::getRawPathInfo()); + OC::$server->getRouter()->match(\OC::$server->getRequest()->getRawPathInfo()); return; } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) { //header('HTTP/1.0 404 Not Found'); @@ -891,7 +915,7 @@ class OC { // if return is true we are logged in -> redirect to the default page if ($return === true) { - $_REQUEST['redirect_url'] = \OC_Request::requestUri(); + $_REQUEST['redirect_url'] = \OC::$server->getRequest()->getRequestUri(); OC_Util::redirectToDefaultPage(); exit; } @@ -956,13 +980,13 @@ class OC { //setup extra user backends OC_User::setupBackends(); - if (OC_User::login($_POST["user"], $_POST["password"])) { + if (OC_User::login((string)$_POST["user"], (string)$_POST["password"])) { $userId = OC_User::getUser(); // setting up the time zone if (isset($_POST['timezone-offset'])) { - self::$server->getSession()->set('timezone', $_POST['timezone-offset']); - self::$server->getConfig()->setUserValue($userId, 'core', 'timezone', $_POST['timezone']); + self::$server->getSession()->set('timezone', (string)$_POST['timezone-offset']); + self::$server->getConfig()->setUserValue($userId, 'core', 'timezone', (string)$_POST['timezone']); } self::cleanupLoginTokens($userId); diff --git a/lib/l10n/af.php b/lib/l10n/af.php deleted file mode 100644 index 15f78e0bce6..00000000000 --- a/lib/l10n/af.php +++ /dev/null @@ -1,8 +0,0 @@ -<?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/af_ZA.js b/lib/l10n/af_ZA.js index 953186be7fe..74f22e6ac46 100644 --- a/lib/l10n/af_ZA.js +++ b/lib/l10n/af_ZA.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Hulp", "Personal" : "Persoonlik", - "Settings" : "Instellings", "Users" : "Gebruikers", "Admin" : "Admin", "Unknown filetype" : "Onbekende leertipe", diff --git a/lib/l10n/af_ZA.json b/lib/l10n/af_ZA.json index 7dd4d1ef718..91f70c2bef0 100644 --- a/lib/l10n/af_ZA.json +++ b/lib/l10n/af_ZA.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Hulp", "Personal" : "Persoonlik", - "Settings" : "Instellings", "Users" : "Gebruikers", "Admin" : "Admin", "Unknown filetype" : "Onbekende leertipe", diff --git a/lib/l10n/ar.js b/lib/l10n/ar.js index 246bffb979c..731b59cfef0 100644 --- a/lib/l10n/ar.js +++ b/lib/l10n/ar.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "المساعدة", "Personal" : "شخصي", - "Settings" : "إعدادات", "Users" : "المستخدمين", "Admin" : "المدير", "No app name specified" : "لا يوجد برنامج بهذا الاسم", diff --git a/lib/l10n/ar.json b/lib/l10n/ar.json index e2eb4272c3e..7055154384c 100644 --- a/lib/l10n/ar.json +++ b/lib/l10n/ar.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "المساعدة", "Personal" : "شخصي", - "Settings" : "إعدادات", "Users" : "المستخدمين", "Admin" : "المدير", "No app name specified" : "لا يوجد برنامج بهذا الاسم", diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js index e7a11ccfe22..7278e0c2418 100644 --- a/lib/l10n/ast.js +++ b/lib/l10n/ast.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "Necesítase PHP %s o superior", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Axustes", "Users" : "Usuarios", "Admin" : "Almin", "Recommended" : "Recomendáu", @@ -94,12 +93,12 @@ OC.L10N.register( "A valid password must be provided" : "Tien d'apurrise una contraseña válida", "The username is already being used" : "El nome d'usuariu yá ta usándose", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nun hai controladores de bases de datos (sqlite, mysql, o postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Davezu los permisos puen iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu raigañu%s.", "Cannot write into \"config\" directory" : "Nun pue escribise nel direutoriu \"config\"", "Cannot write into \"apps\" directory" : "Nun pue escribise nel direutoriu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto pue iguase %sdando permisos d'escritura al sirvidor Web nel direutoriu%s d'apps o deshabilitando la tienda d'apps nel ficheru de configuración.", "Cannot create \"data\" directory (%s)" : "Nun pue crease'l direutoriu \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto pue iguase davezu <a href=\"%s\" target=\"_blank\">dándo-y accesu d'escritura al direutoriu raigañu</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Davezu los permisos puen iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu raigañu%s.", "Setting locale to %s failed" : "Falló l'activación del idioma %s", "Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web", "Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.", diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json index b8fce475855..8ec7d2536b1 100644 --- a/lib/l10n/ast.json +++ b/lib/l10n/ast.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "Necesítase PHP %s o superior", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Axustes", "Users" : "Usuarios", "Admin" : "Almin", "Recommended" : "Recomendáu", @@ -92,12 +91,12 @@ "A valid password must be provided" : "Tien d'apurrise una contraseña válida", "The username is already being used" : "El nome d'usuariu yá ta usándose", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nun hai controladores de bases de datos (sqlite, mysql, o postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Davezu los permisos puen iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu raigañu%s.", "Cannot write into \"config\" directory" : "Nun pue escribise nel direutoriu \"config\"", "Cannot write into \"apps\" directory" : "Nun pue escribise nel direutoriu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto pue iguase %sdando permisos d'escritura al sirvidor Web nel direutoriu%s d'apps o deshabilitando la tienda d'apps nel ficheru de configuración.", "Cannot create \"data\" directory (%s)" : "Nun pue crease'l direutoriu \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto pue iguase davezu <a href=\"%s\" target=\"_blank\">dándo-y accesu d'escritura al direutoriu raigañu</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Davezu los permisos puen iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu raigañu%s.", "Setting locale to %s failed" : "Falló l'activación del idioma %s", "Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web", "Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.", diff --git a/lib/l10n/az.js b/lib/l10n/az.js index 3d5793ef799..9598d4b62ff 100644 --- a/lib/l10n/az.js +++ b/lib/l10n/az.js @@ -8,7 +8,6 @@ OC.L10N.register( "Sample configuration detected" : "Konfiqurasiya nüsxəsi təyin edildi", "Help" : "Kömək", "Personal" : "Şəxsi", - "Settings" : "Quraşdırmalar", "Users" : "İstifadəçilər", "Admin" : "İnzibatçı", "No app name specified" : "Proqram adı təyin edilməyib", @@ -19,6 +18,7 @@ OC.L10N.register( "_%n year ago_::_%n years ago_" : ["",""], "_%n hour ago_::_%n hours ago_" : ["",""], "_%n minute ago_::_%n minutes ago_" : ["",""], + "seconds ago" : "saniyələr öncə", "App directory already exists" : "Proqram təminatı qovluğu artıq mövcuddur.", "Can't create app folder. Please fix permissions. %s" : "Proqram təminatı qovluğunu yaratmaq mümkün olmadı. Xahiş edilir yetkiləri düzgün təyin edəsiniz. %s", "Application is not enabled" : "Proqram təminatı aktiv edilməyib", diff --git a/lib/l10n/az.json b/lib/l10n/az.json index 49d2df41c96..2d54f5df9ad 100644 --- a/lib/l10n/az.json +++ b/lib/l10n/az.json @@ -6,7 +6,6 @@ "Sample configuration detected" : "Konfiqurasiya nüsxəsi təyin edildi", "Help" : "Kömək", "Personal" : "Şəxsi", - "Settings" : "Quraşdırmalar", "Users" : "İstifadəçilər", "Admin" : "İnzibatçı", "No app name specified" : "Proqram adı təyin edilməyib", @@ -17,6 +16,7 @@ "_%n year ago_::_%n years ago_" : ["",""], "_%n hour ago_::_%n hours ago_" : ["",""], "_%n minute ago_::_%n minutes ago_" : ["",""], + "seconds ago" : "saniyələr öncə", "App directory already exists" : "Proqram təminatı qovluğu artıq mövcuddur.", "Can't create app folder. Please fix permissions. %s" : "Proqram təminatı qovluğunu yaratmaq mümkün olmadı. Xahiş edilir yetkiləri düzgün təyin edəsiniz. %s", "Application is not enabled" : "Proqram təminatı aktiv edilməyib", diff --git a/lib/l10n/be.js b/lib/l10n/be.js index f34545ade21..9e8bfb415e4 100644 --- a/lib/l10n/be.js +++ b/lib/l10n/be.js @@ -1,7 +1,6 @@ OC.L10N.register( "lib", { - "Settings" : "Налады", "today" : "Сёння", "yesterday" : "Ўчора", "_%n day ago_::_%n days ago_" : ["","","",""], diff --git a/lib/l10n/be.json b/lib/l10n/be.json index 91f99445d7a..93db93a7e91 100644 --- a/lib/l10n/be.json +++ b/lib/l10n/be.json @@ -1,5 +1,4 @@ { "translations": { - "Settings" : "Налады", "today" : "Сёння", "yesterday" : "Ўчора", "_%n day ago_::_%n days ago_" : ["","","",""], diff --git a/lib/l10n/bg_BG.js b/lib/l10n/bg_BG.js index 021a5c6a08e..6d7238deb2b 100644 --- a/lib/l10n/bg_BG.js +++ b/lib/l10n/bg_BG.js @@ -8,23 +8,32 @@ OC.L10N.register( "Sample configuration detected" : "Открита е примерна конфигурация", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php", "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.", + "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.", + "Following databases are supported: %s" : "Следните бази данни са поддържани: %s", + "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена", + "The library %s is not available." : "Библиотеката %s не е налична", + "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ", + "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ", + "Following platforms are supported: %s" : "Поддържани са следните платформи: %s", + "ownCloud %s or higher is required." : "Необходим е ownCloud %s или по-висока версия.", + "ownCloud with a version lower than %s is required." : "Необходим е ownCloud с по-ниска версия от %s.", "Help" : "Помощ", "Personal" : "Лични", - "Settings" : "Настройки", "Users" : "Потребители", "Admin" : "Админ", "Recommended" : "Препоръчано", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Приложението \\\"%s\\\" не може да бъде инсталирано, защото не е съвместимо с тази версия на ownCloud.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Приложението \\\"%s\\\" не може да бъде инсталирано, защот следните зависимости не са удовлетворени: %s", "No app name specified" : "Не е зададено име на преложението", "Unknown filetype" : "Непознат тип файл.", "Invalid image" : "Невалидно изображение.", "today" : "днес", "yesterday" : "вчера", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"], "last month" : "миналия месец", "_%n month ago_::_%n months ago_" : ["","преди %n месеца"], "last year" : "миналата година", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"], "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"], "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"], "seconds ago" : "преди секунди", @@ -67,6 +76,7 @@ OC.L10N.register( "Set an admin password." : "Задай парола за администратор.", "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s", "%s shared »%s« with you" : "%s сподели »%s« с теб", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.", "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.", "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.", "Sharing %s failed, because the user %s is the item owner" : "Споделяне на %s е неуспешно, защото потребител %s е оригиналния собственик.", @@ -77,6 +87,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.", "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.", "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.", "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.", "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.", @@ -96,17 +107,19 @@ OC.L10N.register( "A valid password must be provided" : "Валидна парола трябва да бъде зададена.", "The username is already being used" : "Това потребителско име е вече заето.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени като %s даде разрешение на уеб сървъра да пише в root папката %s.", "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.", "Cannot write into \"apps\" directory" : "Неуспешен опит за запис в \"apps\" папката.", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.", "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Това обикновено може да бъде оправено като <a href=\"%s\" target=\"_blank\">дадеш разрешение на уеб сървъра да записва в root папката</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени като %s даде разрешение на уеб сървъра да пише в root папката %s.", "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.", "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.", "Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.", "PHP module %s not installed." : "PHP модулът %s не е инсталиран.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP е конфигуриран да запълва post данните от ниско ниво. От PHP 5.6 насам това води до връщането на грешки при абсолютно валиден код.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "За да поправите този проблем, задайте на <code>always_populate_raw_post_data</code> стойност <code>-1</code> във вашоя php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP е настроен да премахва inline doc блокове. Това може да превърне няколко основни приложения недостъпни.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?", diff --git a/lib/l10n/bg_BG.json b/lib/l10n/bg_BG.json index c7bcc9d7dc1..8c88907836a 100644 --- a/lib/l10n/bg_BG.json +++ b/lib/l10n/bg_BG.json @@ -6,23 +6,32 @@ "Sample configuration detected" : "Открита е примерна конфигурация", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php", "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.", + "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.", + "Following databases are supported: %s" : "Следните бази данни са поддържани: %s", + "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена", + "The library %s is not available." : "Библиотеката %s не е налична", + "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ", + "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ", + "Following platforms are supported: %s" : "Поддържани са следните платформи: %s", + "ownCloud %s or higher is required." : "Необходим е ownCloud %s или по-висока версия.", + "ownCloud with a version lower than %s is required." : "Необходим е ownCloud с по-ниска версия от %s.", "Help" : "Помощ", "Personal" : "Лични", - "Settings" : "Настройки", "Users" : "Потребители", "Admin" : "Админ", "Recommended" : "Препоръчано", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Приложението \\\"%s\\\" не може да бъде инсталирано, защото не е съвместимо с тази версия на ownCloud.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Приложението \\\"%s\\\" не може да бъде инсталирано, защот следните зависимости не са удовлетворени: %s", "No app name specified" : "Не е зададено име на преложението", "Unknown filetype" : "Непознат тип файл.", "Invalid image" : "Невалидно изображение.", "today" : "днес", "yesterday" : "вчера", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"], "last month" : "миналия месец", "_%n month ago_::_%n months ago_" : ["","преди %n месеца"], "last year" : "миналата година", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"], "_%n hour ago_::_%n hours ago_" : ["","преди %n часа"], "_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"], "seconds ago" : "преди секунди", @@ -65,6 +74,7 @@ "Set an admin password." : "Задай парола за администратор.", "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s", "%s shared »%s« with you" : "%s сподели »%s« с теб", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.", "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.", "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.", "Sharing %s failed, because the user %s is the item owner" : "Споделяне на %s е неуспешно, защото потребител %s е оригиналния собственик.", @@ -75,6 +85,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.", "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.", "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.", "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.", "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.", @@ -94,17 +105,19 @@ "A valid password must be provided" : "Валидна парола трябва да бъде зададена.", "The username is already being used" : "Това потребителско име е вече заето.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени като %s даде разрешение на уеб сървъра да пише в root папката %s.", "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.", "Cannot write into \"apps\" directory" : "Неуспешен опит за запис в \"apps\" папката.", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.", "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Това обикновено може да бъде оправено като <a href=\"%s\" target=\"_blank\">дадеш разрешение на уеб сървъра да записва в root папката</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени като %s даде разрешение на уеб сървъра да пише в root папката %s.", "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.", "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.", "Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.", "PHP module %s not installed." : "PHP модулът %s не е инсталиран.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP е конфигуриран да запълва post данните от ниско ниво. От PHP 5.6 насам това води до връщането на грешки при абсолютно валиден код.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "За да поправите този проблем, задайте на <code>always_populate_raw_post_data</code> стойност <code>-1</code> във вашоя php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP е настроен да премахва inline doc блокове. Това може да превърне няколко основни приложения недостъпни.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?", diff --git a/lib/l10n/bn_BD.js b/lib/l10n/bn_BD.js index 432d033352f..3f26d26410e 100644 --- a/lib/l10n/bn_BD.js +++ b/lib/l10n/bn_BD.js @@ -8,7 +8,6 @@ OC.L10N.register( "Sample configuration detected" : "নমুনা কনফিগারেশন পাওয়া গেছে", "Help" : "সহায়িকা", "Personal" : "ব্যক্তিগত", - "Settings" : "নিয়ামকসমূহ", "Users" : "ব্যবহারকারী", "Admin" : "প্রশাসন", "No app name specified" : "কোন অ্যাপ নাম সুনির্দিষ্ট নয়", diff --git a/lib/l10n/bn_BD.json b/lib/l10n/bn_BD.json index 08e5edc50d2..224d042a001 100644 --- a/lib/l10n/bn_BD.json +++ b/lib/l10n/bn_BD.json @@ -6,7 +6,6 @@ "Sample configuration detected" : "নমুনা কনফিগারেশন পাওয়া গেছে", "Help" : "সহায়িকা", "Personal" : "ব্যক্তিগত", - "Settings" : "নিয়ামকসমূহ", "Users" : "ব্যবহারকারী", "Admin" : "প্রশাসন", "No app name specified" : "কোন অ্যাপ নাম সুনির্দিষ্ট নয়", diff --git a/lib/l10n/bn_IN.js b/lib/l10n/bn_IN.js index 9933281c8d8..a12702211c2 100644 --- a/lib/l10n/bn_IN.js +++ b/lib/l10n/bn_IN.js @@ -1,7 +1,6 @@ OC.L10N.register( "lib", { - "Settings" : "সেটিংস", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/bn_IN.json b/lib/l10n/bn_IN.json index 239478adca6..b994fa289eb 100644 --- a/lib/l10n/bn_IN.json +++ b/lib/l10n/bn_IN.json @@ -1,5 +1,4 @@ { "translations": { - "Settings" : "সেটিংস", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/bs.js b/lib/l10n/bs.js index cad023a3701..2685f38ea40 100644 --- a/lib/l10n/bs.js +++ b/lib/l10n/bs.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Pomoć", "Personal" : "Osobno", - "Settings" : "Postavke", "Users" : "Korisnici", "Admin" : "Admin", "Recommended" : "Preporučljivo", diff --git a/lib/l10n/bs.json b/lib/l10n/bs.json index df1b3fbd25e..2ae3317736e 100644 --- a/lib/l10n/bs.json +++ b/lib/l10n/bs.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Pomoć", "Personal" : "Osobno", - "Settings" : "Postavke", "Users" : "Korisnici", "Admin" : "Admin", "Recommended" : "Preporučljivo", diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js index d086be8adac..570ffe4e83e 100644 --- a/lib/l10n/ca.js +++ b/lib/l10n/ca.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "Es requereix PHP %s o superior.", "Help" : "Ajuda", "Personal" : "Personal", - "Settings" : "Configuració", "Users" : "Usuaris", "Admin" : "Administració", "Recommended" : "Recomanat", @@ -93,12 +92,12 @@ OC.L10N.register( "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida", "The username is already being used" : "El nom d'usuari ja està en ús", "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"", "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.", "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Aixó normalment es por solucionar <a href=\"%s\" target=\"_blank\">donant al servidor web permís d'accés a la carpeta arrel</a>", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s", "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.", "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.", diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json index e0928e6d606..23cea38826f 100644 --- a/lib/l10n/ca.json +++ b/lib/l10n/ca.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "Es requereix PHP %s o superior.", "Help" : "Ajuda", "Personal" : "Personal", - "Settings" : "Configuració", "Users" : "Usuaris", "Admin" : "Administració", "Recommended" : "Recomanat", @@ -91,12 +90,12 @@ "A valid password must be provided" : "Heu de facilitar una contrasenya vàlida", "The username is already being used" : "El nom d'usuari ja està en ús", "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", "Cannot write into \"config\" directory" : "No es pot escriure a la carpeta \"config\"", "Cannot write into \"apps\" directory" : "No es pot escriure a la carpeta \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta d'aplicacions %s o inhabilitant la botiga d'aplicacions en el fitxer de configuració.", "Cannot create \"data\" directory (%s)" : "No es pot crear la carpeta \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Aixó normalment es por solucionar <a href=\"%s\" target=\"_blank\">donant al servidor web permís d'accés a la carpeta arrel</a>", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s", "Setting locale to %s failed" : "Ha fallat en establir la llengua a %s", "Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.", "Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.", diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js index 3eba7347b72..7f8bd1e75eb 100644 --- a/lib/l10n/cs_CZ.js +++ b/lib/l10n/cs_CZ.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Je vyžadován ownCloud ve verzi nižší než %s.", "Help" : "Nápověda", "Personal" : "Osobní", - "Settings" : "Nastavení", "Users" : "Uživatelé", "Admin" : "Administrace", "Recommended" : "Doporučené", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Musíte zadat platné heslo", "The username is already being used" : "Uživatelské jméno je již využíváno", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nejsou instalovány ovladače databází (sqlite, mysql nebo postresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", "Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.", "Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.", diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json index dbbdccf9261..fefc6f0af7f 100644 --- a/lib/l10n/cs_CZ.json +++ b/lib/l10n/cs_CZ.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Je vyžadován ownCloud ve verzi nižší než %s.", "Help" : "Nápověda", "Personal" : "Osobní", - "Settings" : "Nastavení", "Users" : "Uživatelé", "Admin" : "Administrace", "Recommended" : "Doporučené", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Musíte zadat platné heslo", "The username is already being used" : "Uživatelské jméno je již využíváno", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nejsou instalovány ovladače databází (sqlite, mysql nebo postresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", "Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.", "Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.", diff --git a/lib/l10n/cy_GB.js b/lib/l10n/cy_GB.js index cd3772cd7c1..2b4a4c40221 100644 --- a/lib/l10n/cy_GB.js +++ b/lib/l10n/cy_GB.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Cymorth", "Personal" : "Personol", - "Settings" : "Gosodiadau", "Users" : "Defnyddwyr", "Admin" : "Gweinyddu", "today" : "heddiw", diff --git a/lib/l10n/cy_GB.json b/lib/l10n/cy_GB.json index 3d88f8b876b..8a5d8a9c5bb 100644 --- a/lib/l10n/cy_GB.json +++ b/lib/l10n/cy_GB.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Cymorth", "Personal" : "Personol", - "Settings" : "Gosodiadau", "Users" : "Defnyddwyr", "Admin" : "Gweinyddu", "today" : "heddiw", diff --git a/lib/l10n/da.js b/lib/l10n/da.js index 362f27e3416..b86e8997e6f 100644 --- a/lib/l10n/da.js +++ b/lib/l10n/da.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Der kræves ownCloud i en version som er lavere end %s.", "Help" : "Hjælp", "Personal" : "Personligt", - "Settings" : "Indstillinger", "Users" : "Brugere", "Admin" : "Admin", "Recommended" : "Anbefalet", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "En gyldig adgangskode skal angives", "The username is already being used" : "Brugernavnet er allerede i brug", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen database driver (sqlite, mysql eller postgresql) er installeret.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rettigheder kan som regel rettes ved %sat give webserveren skriveadgang til rodmappen%s.", "Cannot write into \"config\" directory" : "Kan ikke skrive til mappen \"config\"", "Cannot write into \"apps\" directory" : "Kan ikke skrive til mappen \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til apps-mappen%s eller slå appstore fra i config-filen.", "Cannot create \"data\" directory (%s)" : "Kan ikke oprette mappen \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette kan som regel rettes ved <a href=\"%s\" target=\"_blank\">give webserveren skriveadgang til rodmappen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rettigheder kan som regel rettes ved %sat give webserveren skriveadgang til rodmappen%s.", "Setting locale to %s failed" : "Angivelse af %s for lokalitet mislykkedes", "Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.", "Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.", diff --git a/lib/l10n/da.json b/lib/l10n/da.json index b0ab2b4f6e7..94a060735f2 100644 --- a/lib/l10n/da.json +++ b/lib/l10n/da.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Der kræves ownCloud i en version som er lavere end %s.", "Help" : "Hjælp", "Personal" : "Personligt", - "Settings" : "Indstillinger", "Users" : "Brugere", "Admin" : "Admin", "Recommended" : "Anbefalet", @@ -106,12 +105,12 @@ "A valid password must be provided" : "En gyldig adgangskode skal angives", "The username is already being used" : "Brugernavnet er allerede i brug", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen database driver (sqlite, mysql eller postgresql) er installeret.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rettigheder kan som regel rettes ved %sat give webserveren skriveadgang til rodmappen%s.", "Cannot write into \"config\" directory" : "Kan ikke skrive til mappen \"config\"", "Cannot write into \"apps\" directory" : "Kan ikke skrive til mappen \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til apps-mappen%s eller slå appstore fra i config-filen.", "Cannot create \"data\" directory (%s)" : "Kan ikke oprette mappen \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette kan som regel rettes ved <a href=\"%s\" target=\"_blank\">give webserveren skriveadgang til rodmappen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rettigheder kan som regel rettes ved %sat give webserveren skriveadgang til rodmappen%s.", "Setting locale to %s failed" : "Angivelse af %s for lokalitet mislykkedes", "Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.", "Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.", diff --git a/lib/l10n/de.js b/lib/l10n/de.js index 0d8c6085a64..e8fc0cefdd9 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -1,7 +1,7 @@ OC.L10N.register( "lib", { - "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis ist nicht möglich!", + "Cannot write into \"config\" directory!" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich!", "This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird", "See %s" : "Siehe %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.", @@ -19,13 +19,12 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.", "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "Users" : "Benutzer", "Admin" : "Administration", "Recommended" : "Empfohlen", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikation \\\"%s\\\" kann nicht installiert werden, da sie mit dieser ownCloud Version nicht kompatibel ist.", "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", - "No app name specified" : "Es wurde kein Applikation-Name angegeben", + "No app name specified" : "Es wurde kein App-Name angegeben", "Unknown filetype" : "Unbekannter Dateityp", "Invalid image" : "Ungültiges Bild", "today" : "Heute", @@ -40,7 +39,7 @@ OC.L10N.register( "seconds ago" : "Gerade eben", "Database Error" : "Datenbankfehler", "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.", - "web services under your control" : "Web-Services unter Deiner Kontrolle", + "web services under your control" : "Web-Dienste unter Deiner Kontrolle", "App directory already exists" : "Das Applikationsverzeichnis existiert bereits", "Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s", "No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben", @@ -48,35 +47,35 @@ OC.L10N.register( "No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben", "Archives of type %s are not supported" : "Archive vom Typ %s werden nicht unterstützt", "Failed to open archive when installing app" : "Das Archiv konnte bei der Installation der Applikation nicht geöffnet werden", - "App does not provide an info.xml file" : "Die Applikation enthält keine info,xml Datei", + "App does not provide an info.xml file" : "Die Applikation enthält keine info.xml Datei", "App can't be installed because of not allowed code in the App" : "Die Applikation kann auf Grund von unerlaubtem Code nicht installiert werden", "App can't be installed because it is not compatible with this version of ownCloud" : "Die Anwendung konnte nicht installiert werden, weil Sie nicht mit dieser Version von ownCloud kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die Applikation konnte nicht installiert werden, da diese das <shipped>true</shipped> Tag beinhaltet und dieses, bei nicht mitausgelieferten Applikationen, nicht erlaubt ist", "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Die Applikation konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist", "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Fehler bei der Anmeldung", + "Authentication error" : "Authentifizierungsfehler", "Token expired. Please reload page." : "Token abgelaufen. Bitte lade die Seite neu.", "Unknown user" : "Unbekannter Benutzer", "%s enter the database username." : "%s gib den Datenbank-Benutzernamen an.", - "%s enter the database name." : "%s gib den Datenbank-Namen an.", - "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Password ungültig: %s", - "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB Benutzername und/oder Passwort sind nicht gültig", - "DB Error: \"%s\"" : "DB Fehler: \"%s\"", - "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", + "%s enter the database name." : "%s gib den Datenbanknamen an.", + "%s you may not use dots in the database name" : "%s Der Datenbankname darf keine Punkte enthalten", + "MS SQL username and/or password not valid: %s" : "MS SQL-Benutzername und/oder -Passwort ungültig: %s", + "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.", + "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB-Benutzername und/oder -Passwort sind nicht gültig", + "DB Error: \"%s\"" : "DB-Fehler: „%s“", + "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“", "MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB Benutzer '%s'@'localhost' existiert bereits.", - "Drop this user from MySQL/MariaDB" : "Lösche diesen Benutzer von MySQL/MariaDB", - "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB Benutzer '%s'@'%%' existiert bereits", - "Drop this user from MySQL/MariaDB." : "Lösche diesen Benutzer von MySQL/MariaDB.", + "Drop this user from MySQL/MariaDB" : "Diesen Benutzer aus MySQL/MariaDB löschen", + "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB-Benutzer '%s'@'%%' existiert bereits", + "Drop this user from MySQL/MariaDB." : "Diesen Benutzer aus MySQL/MariaDB löschen.", "Oracle connection could not be established" : "Es konnte keine Verbindung zur Oracle-Datenbank hergestellt werden", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", - "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", - "Set an admin password." : "Setze Administrator Passwort", - "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden", - "%s shared »%s« with you" : "%s teilte »%s« mit Dir", + "Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig", + "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: „%s“, Name: %s, Passwort: %s", + "PostgreSQL username and/or password not valid" : "PostgreSQL-Benutzername und/oder -Passwort ungültig", + "Set an admin username." : "Einen Administrator-Benutzernamen setzen.", + "Set an admin password." : "Ein Administrator-Passwort setzen.", + "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.", + "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt", "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.", "Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert", "You are not allowed to share %s" : "Die Freigabe von %s ist Dir nicht erlaubt", @@ -103,17 +102,17 @@ OC.L10N.register( "Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte", "Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte", "Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.", - "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: \"a-z\", \"A-Z\", \"0-9\" und \"_.@-\"", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“ und „_.@-“", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "The username is already being used" : "Dieser Benutzername existiert bereits", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL, oder PostgreSQL) installiert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", - "Cannot write into \"config\" directory" : "Das Schreiben in das \"config\"-Verzeichnis nicht möglich", - "Cannot write into \"apps\" directory" : "Das Schreiben in das \"apps\"-Verzeichnis nicht möglich", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MySQL oder PostgreSQL) installiert.", + "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich", + "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Anwendungsverzeichnis %s gegeben wird oder die Anwendungsauswahl in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des \"data\"-Verzeichnisses nicht möglich (%s)", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.", "Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.", @@ -132,7 +131,7 @@ OC.L10N.register( "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Daten-Verzeichnis eine Datei namens \".ocdata\" im Wurzelverzeichnis enthält.", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf \"%s\" konnte nicht ermittelt werden." }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de.json b/lib/l10n/de.json index cc021ab8d81..fcebdf87fba 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -1,5 +1,5 @@ { "translations": { - "Cannot write into \"config\" directory!" : "Das Schreiben in das \"config\"-Verzeichnis ist nicht möglich!", + "Cannot write into \"config\" directory!" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich!", "This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird", "See %s" : "Siehe %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.", @@ -17,13 +17,12 @@ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.", "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "Users" : "Benutzer", "Admin" : "Administration", "Recommended" : "Empfohlen", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Applikation \\\"%s\\\" kann nicht installiert werden, da sie mit dieser ownCloud Version nicht kompatibel ist.", "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", - "No app name specified" : "Es wurde kein Applikation-Name angegeben", + "No app name specified" : "Es wurde kein App-Name angegeben", "Unknown filetype" : "Unbekannter Dateityp", "Invalid image" : "Ungültiges Bild", "today" : "Heute", @@ -38,7 +37,7 @@ "seconds ago" : "Gerade eben", "Database Error" : "Datenbankfehler", "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.", - "web services under your control" : "Web-Services unter Deiner Kontrolle", + "web services under your control" : "Web-Dienste unter Deiner Kontrolle", "App directory already exists" : "Das Applikationsverzeichnis existiert bereits", "Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s", "No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben", @@ -46,35 +45,35 @@ "No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben", "Archives of type %s are not supported" : "Archive vom Typ %s werden nicht unterstützt", "Failed to open archive when installing app" : "Das Archiv konnte bei der Installation der Applikation nicht geöffnet werden", - "App does not provide an info.xml file" : "Die Applikation enthält keine info,xml Datei", + "App does not provide an info.xml file" : "Die Applikation enthält keine info.xml Datei", "App can't be installed because of not allowed code in the App" : "Die Applikation kann auf Grund von unerlaubtem Code nicht installiert werden", "App can't be installed because it is not compatible with this version of ownCloud" : "Die Anwendung konnte nicht installiert werden, weil Sie nicht mit dieser Version von ownCloud kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die Applikation konnte nicht installiert werden, da diese das <shipped>true</shipped> Tag beinhaltet und dieses, bei nicht mitausgelieferten Applikationen, nicht erlaubt ist", "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Die Applikation konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist", "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Fehler bei der Anmeldung", + "Authentication error" : "Authentifizierungsfehler", "Token expired. Please reload page." : "Token abgelaufen. Bitte lade die Seite neu.", "Unknown user" : "Unbekannter Benutzer", "%s enter the database username." : "%s gib den Datenbank-Benutzernamen an.", - "%s enter the database name." : "%s gib den Datenbank-Namen an.", - "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Password ungültig: %s", - "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB Benutzername und/oder Passwort sind nicht gültig", - "DB Error: \"%s\"" : "DB Fehler: \"%s\"", - "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", + "%s enter the database name." : "%s gib den Datenbanknamen an.", + "%s you may not use dots in the database name" : "%s Der Datenbankname darf keine Punkte enthalten", + "MS SQL username and/or password not valid: %s" : "MS SQL-Benutzername und/oder -Passwort ungültig: %s", + "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.", + "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB-Benutzername und/oder -Passwort sind nicht gültig", + "DB Error: \"%s\"" : "DB-Fehler: „%s“", + "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“", "MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB Benutzer '%s'@'localhost' existiert bereits.", - "Drop this user from MySQL/MariaDB" : "Lösche diesen Benutzer von MySQL/MariaDB", - "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB Benutzer '%s'@'%%' existiert bereits", - "Drop this user from MySQL/MariaDB." : "Lösche diesen Benutzer von MySQL/MariaDB.", + "Drop this user from MySQL/MariaDB" : "Diesen Benutzer aus MySQL/MariaDB löschen", + "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB-Benutzer '%s'@'%%' existiert bereits", + "Drop this user from MySQL/MariaDB." : "Diesen Benutzer aus MySQL/MariaDB löschen.", "Oracle connection could not be established" : "Es konnte keine Verbindung zur Oracle-Datenbank hergestellt werden", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", - "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", - "Set an admin password." : "Setze Administrator Passwort", - "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden", - "%s shared »%s« with you" : "%s teilte »%s« mit Dir", + "Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig", + "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: „%s“, Name: %s, Passwort: %s", + "PostgreSQL username and/or password not valid" : "PostgreSQL-Benutzername und/oder -Passwort ungültig", + "Set an admin username." : "Einen Administrator-Benutzernamen setzen.", + "Set an admin password." : "Ein Administrator-Passwort setzen.", + "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.", + "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt", "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.", "Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert", "You are not allowed to share %s" : "Die Freigabe von %s ist Dir nicht erlaubt", @@ -101,17 +100,17 @@ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte", "Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte", "Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.", - "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: \"a-z\", \"A-Z\", \"0-9\" und \"_.@-\"", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“ und „_.@-“", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "The username is already being used" : "Dieser Benutzername existiert bereits", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL, oder PostgreSQL) installiert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", - "Cannot write into \"config\" directory" : "Das Schreiben in das \"config\"-Verzeichnis nicht möglich", - "Cannot write into \"apps\" directory" : "Das Schreiben in das \"apps\"-Verzeichnis nicht möglich", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MySQL oder PostgreSQL) installiert.", + "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich", + "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Anwendungsverzeichnis %s gegeben wird oder die Anwendungsauswahl in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des \"data\"-Verzeichnisses nicht möglich (%s)", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.", "Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.", @@ -130,7 +129,7 @@ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Daten-Verzeichnis eine Datei namens \".ocdata\" im Wurzelverzeichnis enthält.", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stelle sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf \"%s\" konnte nicht ermittelt werden." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/de_AT.js b/lib/l10n/de_AT.js index 3c567ba4d2d..4dda0e03fd3 100644 --- a/lib/l10n/de_AT.js +++ b/lib/l10n/de_AT.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/de_AT.json b/lib/l10n/de_AT.json index 6e81c34cf1a..90fce6927b0 100644 --- a/lib/l10n/de_AT.json +++ b/lib/l10n/de_AT.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index 3bb4c80313e..8d106b62be3 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -1,7 +1,7 @@ OC.L10N.register( "lib", { - "Cannot write into \"config\" directory!" : "Das Schreiben in das »config«-Verzeichnis nicht möglich!", + "Cannot write into \"config\" directory!" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich!", "This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird", "See %s" : "Siehe %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.", @@ -19,13 +19,12 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.", "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "Users" : "Benutzer", "Admin" : "Administrator", "Recommended" : "Empfohlen", - "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App »%s« kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.", - "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", - "No app name specified" : "Es wurde kein Applikation-Name angegeben", + "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Die App „%s“ kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", + "No app name specified" : "Es wurde kein App-Name angegeben", "Unknown filetype" : "Unbekannter Dateityp", "Invalid image" : "Ungültiges Bild", "today" : "Heute", @@ -40,9 +39,9 @@ OC.L10N.register( "seconds ago" : "Gerade eben", "Database Error" : "Datenbankfehler", "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.", - "web services under your control" : "Web-Services unter Ihrer Kontrolle", - "App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.", - "Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s", + "web services under your control" : "Web-Dienste unter Ihrer Kontrolle", + "App directory already exists" : "Der Ordner für die App ist bereits vorhanden.", + "Can't create app folder. Please fix permissions. %s" : "Der Ordner für die App konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s", "No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben", "No href specified when installing app from http" : "Der Link (href) wurde nicht angegeben um die Applikation per http zu installieren", "No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben", @@ -54,35 +53,35 @@ OC.L10N.register( "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die Applikation konnte nicht installiert werden, da diese das <shipped>true</shipped> Tag beinhaltet und dieses, bei nicht mitausgelieferten Applikationen, nicht erlaubt ist ist", "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Die Applikation konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist", "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Authentifizierungs-Fehler", + "Authentication error" : "Authentifizierungsfehler", "Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.", "Unknown user" : "Unbekannter Benutzer", "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Passwort ungültig: %s", + "MS SQL username and/or password not valid: %s" : "MS SQL-Benutzername und/oder -Passwort ungültig: %s", "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB Benutzername und/oder Passwort sind nicht gültig", + "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB-Benutzername und/oder -Passwort sind nicht gültig", "DB Error: \"%s\"" : "DB Fehler: \"%s\"", "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", "MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB Benutzer '%s'@'localhost' existiert bereits.", "Drop this user from MySQL/MariaDB" : "Löschen Sie diesen Benutzer von MySQL/MariaDB", - "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB Benutzer '%s'@'%%' existiert bereits", + "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB-Benutzer '%s'@'%%' existiert bereits", "Drop this user from MySQL/MariaDB." : "Löschen Sie diesen Benutzer von MySQL/MariaDB.", "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", + "Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig", "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", + "PostgreSQL username and/or password not valid" : "PostgreSQL-Benutzername und/oder -Passwort ungültig", + "Set an admin username." : "Einen Administrator-Benutzernamen setzen.", "Set an admin password." : "Setze Administrator Passwort", - "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden", - "%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt", + "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.", + "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt", "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.", "Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert", "You are not allowed to share %s" : "Die Freigabe von %s ist Ihnen nicht erlaubt", - "Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist", - "Sharing %s failed, because the user %s does not exist" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s nicht existiert", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s kein Gruppenmitglied einer der Gruppen von %s ist", + "Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s Besitzer des Objektes ist", + "Sharing %s failed, because the user %s does not exist" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s nicht existiert", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s kein Gruppenmitglied einer der Gruppen von %s ist", "Sharing %s failed, because this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Sharing %s failed, because the group %s does not exist" : "Freigabe von %s fehlgeschlagen, da die Gruppe %s nicht existiert", "Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist", @@ -97,23 +96,23 @@ OC.L10N.register( "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Freigabe-Backend %s muss in der OCP\\Share_Backend - Schnittstelle implementiert werden", "Sharing backend %s not found" : "Freigabe-Backend %s nicht gefunden", "Sharing backend for %s not found" : "Freigabe-Backend für %s nicht gefunden", - "Sharing %s failed, because the user %s is the original sharer" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s der offizielle Freigeber ist", + "Sharing %s failed, because the user %s is the original sharer" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s der ursprünglich Teilende ist", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Freigabe von %s fehlgeschlagen, da die Berechtigungen die erteilten Berechtigungen %s überschreiten", "Sharing %s failed, because resharing is not allowed" : "Freigabe von %s fehlgeschlagen, da das nochmalige Freigeben einer Freigabe nicht erlaubt ist", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte", "Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte", - "Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.", + "Could not find category \"%s\"" : "Die Kategorie „%s“ konnte nicht gefunden werden.", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: »a-z«, »A-Z«, »0-9« und »_.@-«", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "The username is already being used" : "Der Benutzername existiert bereits", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL, oder PostgreSQL) installiert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL oder PostgreSQL) installiert.", "Cannot write into \"config\" directory" : "Das Schreiben in das »config«-Verzeichnis ist nicht möglich", - "Cannot write into \"apps\" directory" : "Das Schreiben in das »apps«-Verzeichnis ist nicht möglich", + "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Anwendungsverzeichnis %s gegeben wird oder die Anwendungsauswahl in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des »data«-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.", "Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.", @@ -129,10 +128,10 @@ OC.L10N.register( "Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion", "Error occurred while checking PostgreSQL version" : "Es ist ein Fehler beim Prüfen der PostgreSQL-Version aufgetreten", "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Stellen Sie sicher, dass Sie PostgreSQL >= 9 verwenden oder prüfen Sie die Logs für weitere Informationen über den Fehler", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770, so dass das Verzeichnis nicht von anderen Benutzern angezeigt werden kann.", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Daten-Verzeichnis eine Datei namens \".ocdata\" im Wurzelverzeichnis enthält.", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf »%s« konnte nicht ermittelt werden." }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 92aaed58ab3..4d22a549fa4 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -1,5 +1,5 @@ { "translations": { - "Cannot write into \"config\" directory!" : "Das Schreiben in das »config«-Verzeichnis nicht möglich!", + "Cannot write into \"config\" directory!" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich!", "This can usually be fixed by giving the webserver write access to the config directory" : "Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das config-Verzeichnis gegeben wird", "See %s" : "Siehe %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.", @@ -17,13 +17,12 @@ "ownCloud with a version lower than %s is required." : "ownCloud wird in einer früheren Version als %s benötigt.", "Help" : "Hilfe", "Personal" : "Persönlich", - "Settings" : "Einstellungen", "Users" : "Benutzer", "Admin" : "Administrator", "Recommended" : "Empfohlen", - "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "App »%s« kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.", - "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App \\\"%s\\\" kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", - "No app name specified" : "Es wurde kein Applikation-Name angegeben", + "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Die App „%s“ kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind: %s", + "No app name specified" : "Es wurde kein App-Name angegeben", "Unknown filetype" : "Unbekannter Dateityp", "Invalid image" : "Ungültiges Bild", "today" : "Heute", @@ -38,9 +37,9 @@ "seconds ago" : "Gerade eben", "Database Error" : "Datenbankfehler", "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.", - "web services under your control" : "Web-Services unter Ihrer Kontrolle", - "App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.", - "Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s", + "web services under your control" : "Web-Dienste unter Ihrer Kontrolle", + "App directory already exists" : "Der Ordner für die App ist bereits vorhanden.", + "Can't create app folder. Please fix permissions. %s" : "Der Ordner für die App konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s", "No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben", "No href specified when installing app from http" : "Der Link (href) wurde nicht angegeben um die Applikation per http zu installieren", "No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben", @@ -52,35 +51,35 @@ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die Applikation konnte nicht installiert werden, da diese das <shipped>true</shipped> Tag beinhaltet und dieses, bei nicht mitausgelieferten Applikationen, nicht erlaubt ist ist", "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Die Applikation konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist", "Application is not enabled" : "Die Anwendung ist nicht aktiviert", - "Authentication error" : "Authentifizierungs-Fehler", + "Authentication error" : "Authentifizierungsfehler", "Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.", "Unknown user" : "Unbekannter Benutzer", "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", "%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten", - "MS SQL username and/or password not valid: %s" : "MS SQL Benutzername und/oder Passwort ungültig: %s", + "MS SQL username and/or password not valid: %s" : "MS SQL-Benutzername und/oder -Passwort ungültig: %s", "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", - "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB Benutzername und/oder Passwort sind nicht gültig", + "MySQL/MariaDB username and/or password not valid" : "MySQL/MariaDB-Benutzername und/oder -Passwort sind nicht gültig", "DB Error: \"%s\"" : "DB Fehler: \"%s\"", "Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s\"", "MySQL/MariaDB user '%s'@'localhost' exists already." : "MySQL/MariaDB Benutzer '%s'@'localhost' existiert bereits.", "Drop this user from MySQL/MariaDB" : "Löschen Sie diesen Benutzer von MySQL/MariaDB", - "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB Benutzer '%s'@'%%' existiert bereits", + "MySQL/MariaDB user '%s'@'%%' already exists" : "MySQL/MariaDB-Benutzer '%s'@'%%' existiert bereits", "Drop this user from MySQL/MariaDB." : "Löschen Sie diesen Benutzer von MySQL/MariaDB.", "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.", - "Oracle username and/or password not valid" : "Oracle Benutzername und/oder Passwort ungültig", + "Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig", "Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s\", Name: %s, Passwort: %s", - "PostgreSQL username and/or password not valid" : "PostgreSQL Benutzername und/oder Passwort ungültig", - "Set an admin username." : "Setze Administrator Benutzername.", + "PostgreSQL username and/or password not valid" : "PostgreSQL-Benutzername und/oder -Passwort ungültig", + "Set an admin username." : "Einen Administrator-Benutzernamen setzen.", "Set an admin password." : "Setze Administrator Passwort", - "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder beschreiben werden", - "%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt", + "Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.", + "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt", "Sharing %s failed, because the backend does not allow shares from type %i" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %i nicht erlaubt.", "Sharing %s failed, because the file does not exist" : "Freigabe von %s fehlgeschlagen, da die Datei nicht existiert", "You are not allowed to share %s" : "Die Freigabe von %s ist Ihnen nicht erlaubt", - "Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s Besitzer des Objektes ist", - "Sharing %s failed, because the user %s does not exist" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s nicht existiert", - "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s kein Gruppenmitglied einer der Gruppen von %s ist", + "Sharing %s failed, because the user %s is the item owner" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s Besitzer des Objektes ist", + "Sharing %s failed, because the user %s does not exist" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s nicht existiert", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s kein Gruppenmitglied einer der Gruppen von %s ist", "Sharing %s failed, because this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Sharing %s failed, because the group %s does not exist" : "Freigabe von %s fehlgeschlagen, da die Gruppe %s nicht existiert", "Sharing %s failed, because %s is not a member of the group %s" : "Freigabe von %s fehlgeschlagen, da %s kein Mitglied der Gruppe %s ist", @@ -95,23 +94,23 @@ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Freigabe-Backend %s muss in der OCP\\Share_Backend - Schnittstelle implementiert werden", "Sharing backend %s not found" : "Freigabe-Backend %s nicht gefunden", "Sharing backend for %s not found" : "Freigabe-Backend für %s nicht gefunden", - "Sharing %s failed, because the user %s is the original sharer" : "Freigabe von %s fehlgeschlagen, da der Nutzer %s der offizielle Freigeber ist", + "Sharing %s failed, because the user %s is the original sharer" : "Freigabe von %s fehlgeschlagen, da der Benutzer %s der ursprünglich Teilende ist", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Freigabe von %s fehlgeschlagen, da die Berechtigungen die erteilten Berechtigungen %s überschreiten", "Sharing %s failed, because resharing is not allowed" : "Freigabe von %s fehlgeschlagen, da das nochmalige Freigeben einer Freigabe nicht erlaubt ist", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Freigabe von %s fehlgeschlagen, da das Freigabe-Backend für %s nicht in dieser Quelle gefunden werden konnte", "Sharing %s failed, because the file could not be found in the file cache" : "Freigabe von %s fehlgeschlagen, da die Datei im Datei-Cache nicht gefunden werden konnte", - "Could not find category \"%s\"" : "Die Kategorie \"%s\" konnte nicht gefunden werden.", + "Could not find category \"%s\"" : "Die Kategorie „%s“ konnte nicht gefunden werden.", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Folgende Zeichen sind im Benutzernamen erlaubt: »a-z«, »A-Z«, »0-9« und »_.@-«", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "The username is already being used" : "Der Benutzername existiert bereits", - "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL, oder PostgreSQL) installiert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL oder PostgreSQL) installiert.", "Cannot write into \"config\" directory" : "Das Schreiben in das »config«-Verzeichnis ist nicht möglich", - "Cannot write into \"apps\" directory" : "Das Schreiben in das »apps«-Verzeichnis ist nicht möglich", + "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Anwendungsverzeichnis %s gegeben wird oder die Anwendungsauswahl in der Konfigurationsdatei deaktiviert wird.", - "Cannot create \"data\" directory (%s)" : "Das Erstellen des »data«-Verzeichnisses ist nicht möglich (%s)", + "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.", "Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.", @@ -127,10 +126,10 @@ "Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion", "Error occurred while checking PostgreSQL version" : "Es ist ein Fehler beim Prüfen der PostgreSQL-Version aufgetreten", "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Stellen Sie sicher, dass Sie PostgreSQL >= 9 verwenden oder prüfen Sie die Logs für weitere Informationen über den Fehler", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", - "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändern Sie die Berechtigungen auf 0770, so dass das Verzeichnis nicht von anderen Benutzern angezeigt werden kann.", + "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar", "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig", - "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Daten-Verzeichnis eine Datei namens \".ocdata\" im Wurzelverzeichnis enthält.", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Bitte stellen Sie sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.", "Could not obtain lock type %d on \"%s\"." : "Sperrtyp %d auf »%s« konnte nicht ermittelt werden." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/el.js b/lib/l10n/el.js index db45139a1cb..8272add406f 100644 --- a/lib/l10n/el.js +++ b/lib/l10n/el.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.", "Help" : "Βοήθεια", "Personal" : "Προσωπικά", - "Settings" : "Ρυθμίσεις", "Users" : "Χρήστες", "Admin" : "Διαχείριση", "Recommended" : "Προτείνεται", @@ -96,12 +95,12 @@ OC.L10N.register( "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό", "The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο", "No database drivers (sqlite, mysql, or postgresql) installed." : "Δεν βρέθηκαν εγκατεστημένοι οδηγοί βάσεων δεδομένων (sqlite, mysql, or postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Cannot write into \"config\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"config\"", "Cannot write into \"apps\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Αυτό μπορεί συνήθως να διορθωθεί %sδίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%s ή απενεργοποιώντας το κέντρο εφαρμογών στο αρχείο config.", "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Αυτό μπορεί συνήθως να διορθωθεί <a href=\"%s\" target=\"_blank\">δίνοντας δικαιώματα εγγραφής για το βασικό κατάλογο στο διακομιστή δικτύου</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Setting locale to %s failed" : "Ρύθμιση τοπικών ρυθμίσεων σε %s απέτυχε", "Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.", "Please ask your server administrator to install the module." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να εγκαταστήσει τη μονάδα.", diff --git a/lib/l10n/el.json b/lib/l10n/el.json index da637c4a12b..c62fd99589b 100644 --- a/lib/l10n/el.json +++ b/lib/l10n/el.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.", "Help" : "Βοήθεια", "Personal" : "Προσωπικά", - "Settings" : "Ρυθμίσεις", "Users" : "Χρήστες", "Admin" : "Διαχείριση", "Recommended" : "Προτείνεται", @@ -94,12 +93,12 @@ "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό", "The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο", "No database drivers (sqlite, mysql, or postgresql) installed." : "Δεν βρέθηκαν εγκατεστημένοι οδηγοί βάσεων δεδομένων (sqlite, mysql, or postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Cannot write into \"config\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"config\"", "Cannot write into \"apps\" directory" : "Αδυναμία εγγραφής στον κατάλογο \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Αυτό μπορεί συνήθως να διορθωθεί %sδίνοντας διακαιώματα εγγραφής για τον κατάλογο εφαρμογών στο διακομιστή δικτύου%s ή απενεργοποιώντας το κέντρο εφαρμογών στο αρχείο config.", "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Αυτό μπορεί συνήθως να διορθωθεί <a href=\"%s\" target=\"_blank\">δίνοντας δικαιώματα εγγραφής για το βασικό κατάλογο στο διακομιστή δικτύου</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Τα δικαιώματα πρόσβασης μπορούν συνήθως να διορθωθούν %sδίνοντας δικαιώματα εγγραφής για τον βασικό κατάλογο στο διακομιστή δικτύου%s.", "Setting locale to %s failed" : "Ρύθμιση τοπικών ρυθμίσεων σε %s απέτυχε", "Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.", "Please ask your server administrator to install the module." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να εγκαταστήσει τη μονάδα.", diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js index e3c2a7ab67d..6bf8f1ee211 100644 --- a/lib/l10n/en_GB.js +++ b/lib/l10n/en_GB.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud with a version lower than %s is required.", "Help" : "Help", "Personal" : "Personal", - "Settings" : "Settings", "Users" : "Users", "Admin" : "Admin", "Recommended" : "Recommended", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "A valid password must be provided", "The username is already being used" : "The username is already being used", "No database drivers (sqlite, mysql, or postgresql) installed." : "No database drivers (sqlite, mysql, or postgresql) installed.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s.", "Cannot write into \"config\" directory" : "Cannot write into \"config\" directory", "Cannot write into \"apps\" directory" : "Cannot write into \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file.", "Cannot create \"data\" directory (%s)" : "Cannot create \"data\" directory (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s.", "Setting locale to %s failed" : "Setting locale to %s failed", "Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.", "Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.", diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json index 013afd3a0d1..f5672749549 100644 --- a/lib/l10n/en_GB.json +++ b/lib/l10n/en_GB.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud with a version lower than %s is required.", "Help" : "Help", "Personal" : "Personal", - "Settings" : "Settings", "Users" : "Users", "Admin" : "Admin", "Recommended" : "Recommended", @@ -106,12 +105,12 @@ "A valid password must be provided" : "A valid password must be provided", "The username is already being used" : "The username is already being used", "No database drivers (sqlite, mysql, or postgresql) installed." : "No database drivers (sqlite, mysql, or postgresql) installed.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s.", "Cannot write into \"config\" directory" : "Cannot write into \"config\" directory", "Cannot write into \"apps\" directory" : "Cannot write into \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file.", "Cannot create \"data\" directory (%s)" : "Cannot create \"data\" directory (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s.", "Setting locale to %s failed" : "Setting locale to %s failed", "Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.", "Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.", diff --git a/lib/l10n/eo.js b/lib/l10n/eo.js index fdf8d5b5ab0..9a3ca42ac23 100644 --- a/lib/l10n/eo.js +++ b/lib/l10n/eo.js @@ -5,7 +5,6 @@ OC.L10N.register( "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.", "Help" : "Helpo", "Personal" : "Persona", - "Settings" : "Agordo", "Users" : "Uzantoj", "Admin" : "Administranto", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplikaĵo “%s” ne povas instaliĝi ĉar ĝi ne kongruas kun ĉi tiu eldono de ownCloud.", diff --git a/lib/l10n/eo.json b/lib/l10n/eo.json index bd433423828..17aba175900 100644 --- a/lib/l10n/eo.json +++ b/lib/l10n/eo.json @@ -3,7 +3,6 @@ "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.", "Help" : "Helpo", "Personal" : "Persona", - "Settings" : "Agordo", "Users" : "Uzantoj", "Admin" : "Administranto", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplikaĵo “%s” ne povas instaliĝi ĉar ĝi ne kongruas kun ĉi tiu eldono de ownCloud.", diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 39631f01c05..7729c18b6d5 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -1,7 +1,7 @@ OC.L10N.register( "lib", { - "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de configuración!", + "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!", "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede solucionarse fácilmente dándole al servidor permisos de escritura del directorio de configuración", "See %s" : "Mirar %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede solucionarse fácilmente %sotorgándole permisos de escritura al directorio de configuración%s.", @@ -11,15 +11,14 @@ OC.L10N.register( "PHP with a version lower than %s is required." : "PHP con una versión inferior que %s la requerida.", "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s", "The command line tool %s could not be found" : "No se encontró la herramienta %s de línea de comandos", - "The library %s is not available." : "La librería %s no está disponible", + "The library %s is not available." : "La biblioteca %s no está disponible", "Library %s with a version higher than %s is required - available version %s." : "Biblioteca %s con una versión superior que %s la requerida - versión disponible %s.", "Library %s with a version lower than %s is required - available version %s." : "Biblioteca %s con una versión inferior que %s la requerida - versión disponible %s.", - "Following platforms are supported: %s" : "Las siguientes plataformas son soportadas: %s", + "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s", "ownCloud %s or higher is required." : "Se requiere ownCloud %s o superior.", "ownCloud with a version lower than %s is required." : "ownCloud con una versión inferior que %s la requerida.", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Ajustes", "Users" : "Usuarios", "Admin" : "Administración", "Recommended" : "Recomendado", @@ -30,11 +29,11 @@ OC.L10N.register( "Invalid image" : "Imagen inválida", "today" : "hoy", "yesterday" : "ayer", - "_%n day ago_::_%n days ago_" : ["Hace %n día","Hace %n días"], + "_%n day ago_::_%n days ago_" : ["Hace %n día","hace %n días"], "last month" : "mes pasado", "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"], "last year" : "año pasado", - "_%n year ago_::_%n years ago_" : ["Hace %n año","Hace %n años"], + "_%n year ago_::_%n years ago_" : ["Hace %n año","hace %n años"], "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"], "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"], "seconds ago" : "hace segundos", @@ -45,9 +44,9 @@ OC.L10N.register( "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s", "No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación", "No href specified when installing app from http" : "No href especificado cuando se ha instalado la aplicación", - "No path specified when installing app from local file" : "Sin path especificado cuando se ha instalado la aplicación desde el fichero local", - "Archives of type %s are not supported" : "Ficheros de tipo %s no son soportados", - "Failed to open archive when installing app" : "Fallo de apertura de fichero mientras se instala la aplicación", + "No path specified when installing app from local file" : "Ninguna ruta especificada al instalar la aplicación desde el fichero local", + "Archives of type %s are not supported" : "Los ficheros de tipo %s no son soportados", + "Failed to open archive when installing app" : "Falló la apertura ded fichero mientras se instalaba la aplicación", "App does not provide an info.xml file" : "La aplicación no suministra un fichero info.xml", "App can't be installed because of not allowed code in the App" : "La aplicación no puede ser instalada por tener código no autorizado en la aplicación", "App can't be installed because it is not compatible with this version of ownCloud" : "La aplicación no se puede instalar porque no es compatible con esta versión de ownCloud", @@ -55,7 +54,7 @@ OC.L10N.register( "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "La aplicación no puede ser instalada por que la versión en info.xml/version no es la misma que la establecida en la app store", "Application is not enabled" : "La aplicación no está habilitada", "Authentication error" : "Error de autenticación", - "Token expired. Please reload page." : "Token expirado. Por favor, recarga la página.", + "Token expired. Please reload page." : "Token expirado. Por favor, recarge la página.", "Unknown user" : "Usuario desconocido", "%s enter the database username." : "%s ingresar el usuario de la base de datos.", "%s enter the database name." : "%s ingresar el nombre de la base de datos", @@ -102,18 +101,18 @@ OC.L10N.register( "Sharing %s failed, because resharing is not allowed" : "Se ha fallado al compartir %s, ya que volver a compartir no está permitido", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se ha fallado al compartir %s porque el motor compartido para %s podría no encontrar su origen", "Sharing %s failed, because the file could not be found in the file cache" : "Se ha fallado al compartir %s, ya que el archivo no pudo ser encontrado en el cache de archivo", - "Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"", + "Could not find category \"%s\"" : "No puede encontrar la categoría \"%s\"", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo los siguientes caracteres están permitidos en un nombre de usuario: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"", "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido", "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "The username is already being used" : "El nombre de usuario ya está en uso", "No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.", "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto puede ser solucionado <a href=\"%s\" target=\"_blank\">dando al servidor web permisos de escritura en el directorio raíz</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Setting locale to %s failed" : "Falló la activación del idioma %s ", "Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.", "Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.", @@ -130,7 +129,7 @@ OC.L10N.register( "Error occurred while checking PostgreSQL version" : "Ha ocurrido un error mientras se comprobaba la versión de PostgreSQL", "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Por favor, asegúrese de que tiene PostgreSQL 9 o superior, o revise los registros para obtener más información acerca del error.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.", - "Data directory (%s) is readable by other users" : "Directorio de datos (%s) se puede leer por otros usuarios.", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\"." diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 5b08223b093..b3f18b2957b 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -1,5 +1,5 @@ { "translations": { - "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio de configuración!", + "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!", "This can usually be fixed by giving the webserver write access to the config directory" : "Esto puede solucionarse fácilmente dándole al servidor permisos de escritura del directorio de configuración", "See %s" : "Mirar %s", "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede solucionarse fácilmente %sotorgándole permisos de escritura al directorio de configuración%s.", @@ -9,15 +9,14 @@ "PHP with a version lower than %s is required." : "PHP con una versión inferior que %s la requerida.", "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s", "The command line tool %s could not be found" : "No se encontró la herramienta %s de línea de comandos", - "The library %s is not available." : "La librería %s no está disponible", + "The library %s is not available." : "La biblioteca %s no está disponible", "Library %s with a version higher than %s is required - available version %s." : "Biblioteca %s con una versión superior que %s la requerida - versión disponible %s.", "Library %s with a version lower than %s is required - available version %s." : "Biblioteca %s con una versión inferior que %s la requerida - versión disponible %s.", - "Following platforms are supported: %s" : "Las siguientes plataformas son soportadas: %s", + "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s", "ownCloud %s or higher is required." : "Se requiere ownCloud %s o superior.", "ownCloud with a version lower than %s is required." : "ownCloud con una versión inferior que %s la requerida.", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Ajustes", "Users" : "Usuarios", "Admin" : "Administración", "Recommended" : "Recomendado", @@ -28,11 +27,11 @@ "Invalid image" : "Imagen inválida", "today" : "hoy", "yesterday" : "ayer", - "_%n day ago_::_%n days ago_" : ["Hace %n día","Hace %n días"], + "_%n day ago_::_%n days ago_" : ["Hace %n día","hace %n días"], "last month" : "mes pasado", "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"], "last year" : "año pasado", - "_%n year ago_::_%n years ago_" : ["Hace %n año","Hace %n años"], + "_%n year ago_::_%n years ago_" : ["Hace %n año","hace %n años"], "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"], "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"], "seconds ago" : "hace segundos", @@ -43,9 +42,9 @@ "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s", "No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación", "No href specified when installing app from http" : "No href especificado cuando se ha instalado la aplicación", - "No path specified when installing app from local file" : "Sin path especificado cuando se ha instalado la aplicación desde el fichero local", - "Archives of type %s are not supported" : "Ficheros de tipo %s no son soportados", - "Failed to open archive when installing app" : "Fallo de apertura de fichero mientras se instala la aplicación", + "No path specified when installing app from local file" : "Ninguna ruta especificada al instalar la aplicación desde el fichero local", + "Archives of type %s are not supported" : "Los ficheros de tipo %s no son soportados", + "Failed to open archive when installing app" : "Falló la apertura ded fichero mientras se instalaba la aplicación", "App does not provide an info.xml file" : "La aplicación no suministra un fichero info.xml", "App can't be installed because of not allowed code in the App" : "La aplicación no puede ser instalada por tener código no autorizado en la aplicación", "App can't be installed because it is not compatible with this version of ownCloud" : "La aplicación no se puede instalar porque no es compatible con esta versión de ownCloud", @@ -53,7 +52,7 @@ "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "La aplicación no puede ser instalada por que la versión en info.xml/version no es la misma que la establecida en la app store", "Application is not enabled" : "La aplicación no está habilitada", "Authentication error" : "Error de autenticación", - "Token expired. Please reload page." : "Token expirado. Por favor, recarga la página.", + "Token expired. Please reload page." : "Token expirado. Por favor, recarge la página.", "Unknown user" : "Usuario desconocido", "%s enter the database username." : "%s ingresar el usuario de la base de datos.", "%s enter the database name." : "%s ingresar el nombre de la base de datos", @@ -100,18 +99,18 @@ "Sharing %s failed, because resharing is not allowed" : "Se ha fallado al compartir %s, ya que volver a compartir no está permitido", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se ha fallado al compartir %s porque el motor compartido para %s podría no encontrar su origen", "Sharing %s failed, because the file could not be found in the file cache" : "Se ha fallado al compartir %s, ya que el archivo no pudo ser encontrado en el cache de archivo", - "Could not find category \"%s\"" : "No puede encontrar la categoria \"%s\"", + "Could not find category \"%s\"" : "No puede encontrar la categoría \"%s\"", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Solo los siguientes caracteres están permitidos en un nombre de usuario: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"", "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido", "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "The username is already being used" : "El nombre de usuario ya está en uso", "No database drivers (sqlite, mysql, or postgresql) installed." : "No están instalados los drivers de BBDD (sqlite, mysql, o postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Cannot write into \"config\" directory" : "No se puede escribir el el directorio de configuración", "Cannot write into \"apps\" directory" : "No se puede escribir en el directorio de \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto puede solucionarse fácilmente %sdándole permisos de escritura al servidor en el directorio%s de apps o deshabilitando la tienda de apps en el archivo de configuración.", "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto puede ser solucionado <a href=\"%s\" target=\"_blank\">dando al servidor web permisos de escritura en el directorio raíz</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos normalmente puede solucionarse %sdándole al servidor permisos de escritura del directorio raíz%s.", "Setting locale to %s failed" : "Falló la activación del idioma %s ", "Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.", "Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.", @@ -128,7 +127,7 @@ "Error occurred while checking PostgreSQL version" : "Ha ocurrido un error mientras se comprobaba la versión de PostgreSQL", "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Por favor, asegúrese de que tiene PostgreSQL 9 o superior, o revise los registros para obtener más información acerca del error.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambie los permisos a 0770 para que el directorio no se pueda mostrar para otros usuarios.", - "Data directory (%s) is readable by other users" : "Directorio de datos (%s) se puede leer por otros usuarios.", + "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.", "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\"." diff --git a/lib/l10n/es_AR.js b/lib/l10n/es_AR.js index bc291ddb3b6..db0da45be58 100644 --- a/lib/l10n/es_AR.js +++ b/lib/l10n/es_AR.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Configuración", "Users" : "Usuarios", "Admin" : "Administración", "No app name specified" : "No fue especificado el nombre de la app", diff --git a/lib/l10n/es_AR.json b/lib/l10n/es_AR.json index e1245fabfef..2b95e2ab678 100644 --- a/lib/l10n/es_AR.json +++ b/lib/l10n/es_AR.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Configuración", "Users" : "Usuarios", "Admin" : "Administración", "No app name specified" : "No fue especificado el nombre de la app", diff --git a/lib/l10n/es_CL.js b/lib/l10n/es_CL.js index 84e47673937..70629b8d2db 100644 --- a/lib/l10n/es_CL.js +++ b/lib/l10n/es_CL.js @@ -7,7 +7,6 @@ OC.L10N.register( "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Generalmente esto se puede resolver %s otorgando permisos de escritura al servidor web en la carpeta configurada %s", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Configuración", "Users" : "Usuarios", "Admin" : "Administración", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplicación \\\"%s\\\" no puede ser instalada debido a que no es compatible con esta versión de ownCloud.", diff --git a/lib/l10n/es_CL.json b/lib/l10n/es_CL.json index 946cf11dc09..f9b9abab6c1 100644 --- a/lib/l10n/es_CL.json +++ b/lib/l10n/es_CL.json @@ -5,7 +5,6 @@ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Generalmente esto se puede resolver %s otorgando permisos de escritura al servidor web en la carpeta configurada %s", "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Configuración", "Users" : "Usuarios", "Admin" : "Administración", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "La aplicación \\\"%s\\\" no puede ser instalada debido a que no es compatible con esta versión de ownCloud.", diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js index e739b14c9fd..f607baaf755 100644 --- a/lib/l10n/es_MX.js +++ b/lib/l10n/es_MX.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Ajustes", "Users" : "Usuarios", "Admin" : "Administración", "No app name specified" : "No se ha especificado nombre de la aplicación", diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json index 9b63e52244c..55f23534ea6 100644 --- a/lib/l10n/es_MX.json +++ b/lib/l10n/es_MX.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Ayuda", "Personal" : "Personal", - "Settings" : "Ajustes", "Users" : "Usuarios", "Admin" : "Administración", "No app name specified" : "No se ha especificado nombre de la aplicación", diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js index 2718a1e4223..e952ca79f8c 100644 --- a/lib/l10n/et_EE.js +++ b/lib/l10n/et_EE.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "PHP %s või uuem on nõutav.", "Help" : "Abiinfo", "Personal" : "Isiklik", - "Settings" : "Seaded", "Users" : "Kasutajad", "Admin" : "Admin", "Recommended" : "Soovitatud", @@ -94,12 +93,12 @@ OC.L10N.register( "A valid password must be provided" : "Sisesta nõuetele vastav parool", "The username is already being used" : "Kasutajanimi on juba kasutuses", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ühtegi andmebaasi (sqlite, mysql või postgresql) draiverit pole paigaldatud.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Õigused saab tavaliselt paika %s andes veebiserverile juurkataloogile kirjutusõigused %s", "Cannot write into \"config\" directory" : "Ei saa kirjutada \"config\" kataloogi", "Cannot write into \"apps\" directory" : "Ei saa kirjutada \"apps\" kataloogi!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tavaliselt saab selle lahendada %s andes veebiserverile rakendite kataloogile kirjutusõigused %s või keelates seadetes rakendikogu.", "Cannot create \"data\" directory (%s)" : "Ei suuda luua \"data\" kataloogi (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Tavaliselt saab selle lahendada <a href=\"%s\" target=\"_blank\">andes veebiserverile juur-kataloogile kirjutusõigused</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Õigused saab tavaliselt paika %s andes veebiserverile juurkataloogile kirjutusõigused %s", "Setting locale to %s failed" : "Lokaadi %s määramine ebaõnnestus.", "Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.", "Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.", diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json index f71ee98481d..911afbe449b 100644 --- a/lib/l10n/et_EE.json +++ b/lib/l10n/et_EE.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "PHP %s või uuem on nõutav.", "Help" : "Abiinfo", "Personal" : "Isiklik", - "Settings" : "Seaded", "Users" : "Kasutajad", "Admin" : "Admin", "Recommended" : "Soovitatud", @@ -92,12 +91,12 @@ "A valid password must be provided" : "Sisesta nõuetele vastav parool", "The username is already being used" : "Kasutajanimi on juba kasutuses", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ühtegi andmebaasi (sqlite, mysql või postgresql) draiverit pole paigaldatud.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Õigused saab tavaliselt paika %s andes veebiserverile juurkataloogile kirjutusõigused %s", "Cannot write into \"config\" directory" : "Ei saa kirjutada \"config\" kataloogi", "Cannot write into \"apps\" directory" : "Ei saa kirjutada \"apps\" kataloogi!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tavaliselt saab selle lahendada %s andes veebiserverile rakendite kataloogile kirjutusõigused %s või keelates seadetes rakendikogu.", "Cannot create \"data\" directory (%s)" : "Ei suuda luua \"data\" kataloogi (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Tavaliselt saab selle lahendada <a href=\"%s\" target=\"_blank\">andes veebiserverile juur-kataloogile kirjutusõigused</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Õigused saab tavaliselt paika %s andes veebiserverile juurkataloogile kirjutusõigused %s", "Setting locale to %s failed" : "Lokaadi %s määramine ebaõnnestus.", "Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.", "Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.", diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js index f4e0e337107..9c96dca09df 100644 --- a/lib/l10n/eu.js +++ b/lib/l10n/eu.js @@ -8,26 +8,37 @@ OC.L10N.register( "Sample configuration detected" : "Adibide-ezarpena detektatua", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.", "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.", + "PHP with a version lower than %s is required." : "PHPren bertsioa %s baino txikiagoa izan behar da.", + "Following databases are supported: %s" : "Hurrengo datubaseak onartzen dira: %s", + "The command line tool %s could not be found" : "Komando lerroko %s tresna ezin da aurkitu", + "The library %s is not available." : "%s liburutegia ez dago eskuragarri.", + "Library %s with a version higher than %s is required - available version %s." : "%s liburutegiak %s baino bertsio handiagoa izan behar du - dagoen bertsioa %s.", + "Library %s with a version lower than %s is required - available version %s." : "%s liburutegiak %s baino bertsio txikiagoa izan behar du - dagoen bertsioa %s.", + "Following platforms are supported: %s" : "Hurrengo plataformak onartzen dira: %s", + "ownCloud %s or higher is required." : "ownCloud %s edo haundiagoa behar da.", + "ownCloud with a version lower than %s is required." : "ownCloud %s baino bertsio txikiagoa behar da.", "Help" : "Laguntza", "Personal" : "Pertsonala", - "Settings" : "Ezarpenak", "Users" : "Erabiltzaileak", "Admin" : "Admin", "Recommended" : "Aholkatuta", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "\\\"%s\\\" Aplikazioa ezin da instalatu ownCloud bertsio honekin bateragarria ez delako.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "\\\"%s\\\" Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako: %s", "No app name specified" : "Ez da aplikazioaren izena zehaztu", "Unknown filetype" : "Fitxategi mota ezezaguna", "Invalid image" : "Baliogabeko irudia", "today" : "gaur", "yesterday" : "atzo", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"], "last month" : "joan den hilabetean", "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"], "last year" : "joan den urtean", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["orain dela urte %n","orain dela %n urte"], "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"], "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"], "seconds ago" : "segundu", + "Database Error" : "Datu basearen errorea", + "Please contact your system administrator." : "Mesedez jarri harremetan zure sistemaren kudeatzailearekin.", "web services under your control" : "web zerbitzuak zure kontrolpean", "App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da", "Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s", @@ -65,6 +76,7 @@ OC.L10N.register( "Set an admin password." : "Ezarri administraziorako pasahitza.", "Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ", "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s partekatzeak huts egin du, motorrak %i motako partekatzeak baimentzen ez dituelako", "Sharing %s failed, because the file does not exist" : "%s elkarbanatzeak huts egin du, fitxategia ez delako existitzen", "You are not allowed to share %s" : "Ez zadue %s elkarbanatzeko baimendua", "Sharing %s failed, because the user %s is the item owner" : "%s elkarbanatzeak huts egin du, %s erabiltzailea jabea delako", @@ -75,6 +87,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "%s elkarbanatzeak huts egin du, %s ez delako %s taldearen partaidea", "You need to provide a password to create a public link, only protected links are allowed" : "Lotura publiko bat sortzeko pasahitza idatzi behar duzu, bakarrik babestutako loturak baimenduta daude", "Sharing %s failed, because sharing with links is not allowed" : "%s elkarbanatzeak huts egin du, lotura bidezko elkarbanatzea baimendua ez dagoelako", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s partekatzeak huts egin du, ezin da %s aurkitu, agian zerbitzaria orain ez dago eskuragarri.", "Share type %s is not valid for %s" : "%s elkarbanaketa mota ez da %srentzako egokia", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%srentzako baimenak ezartzea huts egin du, baimenak %sri emandakoak baino gehiago direlako", "Setting permissions for %s failed, because the item was not found" : "%srentzako baimenak ezartzea huts egin du, aurkitu ez delako", @@ -94,17 +107,18 @@ OC.L10N.register( "A valid password must be provided" : "Baliozko pasahitza eman behar da", "The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Hau normalean konpondu daiteke <a href=\"%s\" target=\"_blank\">web zerbitzarira erro karpetan idazteko baimenak emanez</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", "Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.", "PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Hau konpontzeko ezarri <code>always_populate_raw_post_data</code> berdin <code>-1</code> zure php.inian", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?", diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json index 46786f41d9c..286d9e763fe 100644 --- a/lib/l10n/eu.json +++ b/lib/l10n/eu.json @@ -6,26 +6,37 @@ "Sample configuration detected" : "Adibide-ezarpena detektatua", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.", "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.", + "PHP with a version lower than %s is required." : "PHPren bertsioa %s baino txikiagoa izan behar da.", + "Following databases are supported: %s" : "Hurrengo datubaseak onartzen dira: %s", + "The command line tool %s could not be found" : "Komando lerroko %s tresna ezin da aurkitu", + "The library %s is not available." : "%s liburutegia ez dago eskuragarri.", + "Library %s with a version higher than %s is required - available version %s." : "%s liburutegiak %s baino bertsio handiagoa izan behar du - dagoen bertsioa %s.", + "Library %s with a version lower than %s is required - available version %s." : "%s liburutegiak %s baino bertsio txikiagoa izan behar du - dagoen bertsioa %s.", + "Following platforms are supported: %s" : "Hurrengo plataformak onartzen dira: %s", + "ownCloud %s or higher is required." : "ownCloud %s edo haundiagoa behar da.", + "ownCloud with a version lower than %s is required." : "ownCloud %s baino bertsio txikiagoa behar da.", "Help" : "Laguntza", "Personal" : "Pertsonala", - "Settings" : "Ezarpenak", "Users" : "Erabiltzaileak", "Admin" : "Admin", "Recommended" : "Aholkatuta", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "\\\"%s\\\" Aplikazioa ezin da instalatu ownCloud bertsio honekin bateragarria ez delako.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "\\\"%s\\\" Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako: %s", "No app name specified" : "Ez da aplikazioaren izena zehaztu", "Unknown filetype" : "Fitxategi mota ezezaguna", "Invalid image" : "Baliogabeko irudia", "today" : "gaur", "yesterday" : "atzo", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"], "last month" : "joan den hilabetean", "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"], "last year" : "joan den urtean", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["orain dela urte %n","orain dela %n urte"], "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"], "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"], "seconds ago" : "segundu", + "Database Error" : "Datu basearen errorea", + "Please contact your system administrator." : "Mesedez jarri harremetan zure sistemaren kudeatzailearekin.", "web services under your control" : "web zerbitzuak zure kontrolpean", "App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da", "Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s", @@ -63,6 +74,7 @@ "Set an admin password." : "Ezarri administraziorako pasahitza.", "Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ", "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s partekatzeak huts egin du, motorrak %i motako partekatzeak baimentzen ez dituelako", "Sharing %s failed, because the file does not exist" : "%s elkarbanatzeak huts egin du, fitxategia ez delako existitzen", "You are not allowed to share %s" : "Ez zadue %s elkarbanatzeko baimendua", "Sharing %s failed, because the user %s is the item owner" : "%s elkarbanatzeak huts egin du, %s erabiltzailea jabea delako", @@ -73,6 +85,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "%s elkarbanatzeak huts egin du, %s ez delako %s taldearen partaidea", "You need to provide a password to create a public link, only protected links are allowed" : "Lotura publiko bat sortzeko pasahitza idatzi behar duzu, bakarrik babestutako loturak baimenduta daude", "Sharing %s failed, because sharing with links is not allowed" : "%s elkarbanatzeak huts egin du, lotura bidezko elkarbanatzea baimendua ez dagoelako", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s partekatzeak huts egin du, ezin da %s aurkitu, agian zerbitzaria orain ez dago eskuragarri.", "Share type %s is not valid for %s" : "%s elkarbanaketa mota ez da %srentzako egokia", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%srentzako baimenak ezartzea huts egin du, baimenak %sri emandakoak baino gehiago direlako", "Setting permissions for %s failed, because the item was not found" : "%srentzako baimenak ezartzea huts egin du, aurkitu ez delako", @@ -92,17 +105,18 @@ "A valid password must be provided" : "Baliozko pasahitza eman behar da", "The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Hau normalean konpondu daiteke <a href=\"%s\" target=\"_blank\">web zerbitzarira erro karpetan idazteko baimenak emanez</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", "Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.", "PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Hau konpontzeko ezarri <code>always_populate_raw_post_data</code> berdin <code>-1</code> zure php.inian", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?", diff --git a/lib/l10n/fa.js b/lib/l10n/fa.js index e5cacb279d4..33f9633e65f 100644 --- a/lib/l10n/fa.js +++ b/lib/l10n/fa.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "راهنما", "Personal" : "شخصی", - "Settings" : "تنظیمات", "Users" : "کاربران", "Admin" : "مدیر", "Unknown filetype" : "نوع فایل ناشناخته", diff --git a/lib/l10n/fa.json b/lib/l10n/fa.json index 608d66645da..5f419ccf229 100644 --- a/lib/l10n/fa.json +++ b/lib/l10n/fa.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "راهنما", "Personal" : "شخصی", - "Settings" : "تنظیمات", "Users" : "کاربران", "Admin" : "مدیر", "Unknown filetype" : "نوع فایل ناشناخته", diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js index 5c37b9c4093..8be70237972 100644 --- a/lib/l10n/fi_FI.js +++ b/lib/l10n/fi_FI.js @@ -18,7 +18,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud versiota %s alempi vaaditaan.", "Help" : "Ohje", "Personal" : "Henkilökohtainen", - "Settings" : "Asetukset", "Users" : "Käyttäjät", "Admin" : "Ylläpito", "Recommended" : "Suositeltu", diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json index 38215ca862d..c19b81afa72 100644 --- a/lib/l10n/fi_FI.json +++ b/lib/l10n/fi_FI.json @@ -16,7 +16,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud versiota %s alempi vaaditaan.", "Help" : "Ohje", "Personal" : "Henkilökohtainen", - "Settings" : "Asetukset", "Users" : "Käyttäjät", "Admin" : "Ylläpito", "Recommended" : "Suositeltu", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 6e86a0fb4fb..aff31f2cd44 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Une version antérieure à %s d'ownCloud est requise.", "Help" : "Aide", "Personal" : "Personnel", - "Settings" : "Paramètres", "Users" : "Utilisateurs", "Admin" : "Administration", "Recommended" : "Recommandée", @@ -93,7 +92,7 @@ OC.L10N.register( "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Le réglage des permissions pour %s a échoué car les permissions dépassent celles accordées à %s", "Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Impossible de configurer la date d'expiration. Un partage ne peut expirer plus de %s après sa création", - "Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration. La date d'expiration est dans le passé.", + "Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration : elle est dans le passé.", "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Le service de partage %s doit implémenter l'interface OCP\\Share_Backend", "Sharing backend %s not found" : "Service de partage %s non trouvé", "Sharing backend for %s not found" : "Le service de partage pour %s est introuvable", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Un mot de passe valide doit être saisi", "The username is already being used" : "Ce nom d'utilisateur est déjà utilisé", "No database drivers (sqlite, mysql, or postgresql) installed." : "Aucun pilote de base de données (sqlite, mysql, ou postgresql) n’est installé.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Les permissions peuvent, généralement, être résolues %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Cannot write into \"config\" directory" : "Impossible d’écrire dans le répertoire \"config\"", "Cannot write into \"apps\" directory" : "Impossible d’écrire dans le répertoire \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire apps%s ou en désactivant l'appstore dans le fichier de configuration.", "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Les permissions peuvent, généralement, être résolues %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Setting locale to %s failed" : "Le choix de la langue pour %s a échoué", "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.", "Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 46384b46402..460822d3e8b 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Une version antérieure à %s d'ownCloud est requise.", "Help" : "Aide", "Personal" : "Personnel", - "Settings" : "Paramètres", "Users" : "Utilisateurs", "Admin" : "Administration", "Recommended" : "Recommandée", @@ -91,7 +90,7 @@ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Le réglage des permissions pour %s a échoué car les permissions dépassent celles accordées à %s", "Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Impossible de configurer la date d'expiration. Un partage ne peut expirer plus de %s après sa création", - "Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration. La date d'expiration est dans le passé.", + "Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration : elle est dans le passé.", "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Le service de partage %s doit implémenter l'interface OCP\\Share_Backend", "Sharing backend %s not found" : "Service de partage %s non trouvé", "Sharing backend for %s not found" : "Le service de partage pour %s est introuvable", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Un mot de passe valide doit être saisi", "The username is already being used" : "Ce nom d'utilisateur est déjà utilisé", "No database drivers (sqlite, mysql, or postgresql) installed." : "Aucun pilote de base de données (sqlite, mysql, ou postgresql) n’est installé.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Les permissions peuvent, généralement, être résolues %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Cannot write into \"config\" directory" : "Impossible d’écrire dans le répertoire \"config\"", "Cannot write into \"apps\" directory" : "Impossible d’écrire dans le répertoire \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire apps%s ou en désactivant l'appstore dans le fichier de configuration.", "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Les permissions peuvent, généralement, être résolues %sen donnant au serveur web un accès en écriture au répertoire racine%s", "Setting locale to %s failed" : "Le choix de la langue pour %s a échoué", "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.", "Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.", diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js index 6a6704799ff..a26629e9418 100644 --- a/lib/l10n/gl.js +++ b/lib/l10n/gl.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Requírese ownCloud cunha versión inferior a %s.", "Help" : "Axuda", "Personal" : "Persoal", - "Settings" : "Axustes", "Users" : "Usuarios", "Admin" : "Administración", "Recommended" : "Recomendado", @@ -108,19 +107,19 @@ OC.L10N.register( "A valid password must be provided" : "Debe fornecer un contrasinal", "The username is already being used" : "Este nome de usuario xa está a ser usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Non hay controladores de base de datos (sqlite, mysql, ou postgresql) instalados.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «root»%s.", "Cannot write into \"config\" directory" : "Non é posíbel escribir no directorio «config»", "Cannot write into \"apps\" directory" : "Non é posíbel escribir no directorio «apps»", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «apps»%s ou a desactivación da «appstore» no ficheiro de configuración.", "Cannot create \"data\" directory (%s)" : "Non é posíbel crear o directorio «data» (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Polo xeral, isto pode ser fixado para <a href=\"%s\" target=\"_blank\">permitirlle ao servidor web acceso de escritura ao directorio «root»</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «root»%s.", "Setting locale to %s failed" : "Fallou o axuste da configuración local a %s", "Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.", "Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.", "PHP module %s not installed." : "O módulo PHP %s non está instalado.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.", - "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP está configurado para surtir datos de código en bruto. Desde PHP 5.6 esto levará a que PHP proporcione avisos con código perfectamente válido.", - "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para solucionar este asunto estableza <code>always_populate_raw_post_data</code> a <code>-1</code> no seu php.ini", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP está configurado para encher datos de código en bruto. Desde PHP 5.6 isto levará a que PHP forneza avisos con código perfectamente correcto.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para solucionar este problema estabeleza <code>always_populate_raw_post_data</code> a <code>-1</code> no seu php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Instaláronse os módulos de PHP, mais aínda aparecen listados como perdidos?", diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json index c9feefa2f53..ff5c6861120 100644 --- a/lib/l10n/gl.json +++ b/lib/l10n/gl.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Requírese ownCloud cunha versión inferior a %s.", "Help" : "Axuda", "Personal" : "Persoal", - "Settings" : "Axustes", "Users" : "Usuarios", "Admin" : "Administración", "Recommended" : "Recomendado", @@ -106,19 +105,19 @@ "A valid password must be provided" : "Debe fornecer un contrasinal", "The username is already being used" : "Este nome de usuario xa está a ser usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Non hay controladores de base de datos (sqlite, mysql, ou postgresql) instalados.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «root»%s.", "Cannot write into \"config\" directory" : "Non é posíbel escribir no directorio «config»", "Cannot write into \"apps\" directory" : "Non é posíbel escribir no directorio «apps»", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «apps»%s ou a desactivación da «appstore» no ficheiro de configuración.", "Cannot create \"data\" directory (%s)" : "Non é posíbel crear o directorio «data» (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Polo xeral, isto pode ser fixado para <a href=\"%s\" target=\"_blank\">permitirlle ao servidor web acceso de escritura ao directorio «root»</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «root»%s.", "Setting locale to %s failed" : "Fallou o axuste da configuración local a %s", "Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.", "Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.", "PHP module %s not installed." : "O módulo PHP %s non está instalado.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.", - "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP está configurado para surtir datos de código en bruto. Desde PHP 5.6 esto levará a que PHP proporcione avisos con código perfectamente válido.", - "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para solucionar este asunto estableza <code>always_populate_raw_post_data</code> a <code>-1</code> no seu php.ini", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP está configurado para encher datos de código en bruto. Desde PHP 5.6 isto levará a que PHP forneza avisos con código perfectamente correcto.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para solucionar este problema estabeleza <code>always_populate_raw_post_data</code> a <code>-1</code> no seu php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Instaláronse os módulos de PHP, mais aínda aparecen listados como perdidos?", diff --git a/lib/l10n/he.js b/lib/l10n/he.js index 200d3d7035a..23561a4d3a5 100644 --- a/lib/l10n/he.js +++ b/lib/l10n/he.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "עזרה", "Personal" : "אישי", - "Settings" : "הגדרות", "Users" : "משתמשים", "Admin" : "מנהל", "today" : "היום", diff --git a/lib/l10n/he.json b/lib/l10n/he.json index 0cadc7beba2..2e1453c7916 100644 --- a/lib/l10n/he.json +++ b/lib/l10n/he.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "עזרה", "Personal" : "אישי", - "Settings" : "הגדרות", "Users" : "משתמשים", "Admin" : "מנהל", "today" : "היום", diff --git a/lib/l10n/hi.js b/lib/l10n/hi.js index fdc0ecac1a2..b4741e9aa06 100644 --- a/lib/l10n/hi.js +++ b/lib/l10n/hi.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "सहयोग", "Personal" : "यक्तिगत", - "Settings" : "सेटिंग्स", "Users" : "उपयोगकर्ता", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], diff --git a/lib/l10n/hi.json b/lib/l10n/hi.json index b231ead2917..b7347838a83 100644 --- a/lib/l10n/hi.json +++ b/lib/l10n/hi.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "सहयोग", "Personal" : "यक्तिगत", - "Settings" : "सेटिंग्स", "Users" : "उपयोगकर्ता", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], diff --git a/lib/l10n/hr.js b/lib/l10n/hr.js index 3c2df29120a..34d5ec9f160 100644 --- a/lib/l10n/hr.js +++ b/lib/l10n/hr.js @@ -16,7 +16,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud sa verzijom manjom od %s je potrebna.", "Help" : "Pomoć", "Personal" : "Osobno", - "Settings" : "Postavke", "Users" : "Korisnici", "Admin" : "Admin", "Recommended" : "Preporuceno", @@ -102,12 +101,12 @@ OC.L10N.register( "A valid password must be provided" : "Nužno je navesti ispravnu lozinku", "The username is already being used" : "Korisničko ime se već koristi", "No database drivers (sqlite, mysql, or postgresql) installed." : "Pogonski programi baze podataka (sqlite, mysql, ili postgresql) nisu instalirani.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dozvole se obično mogu popraviti %sdavanjem pristupa web poslužitelju za pisanje u korijenskom direktoriju%s", "Cannot write into \"config\" directory" : "Nije moguće zapisivati u \"config\" direktorij", "Cannot write into \"apps\" directory" : "Nije moguće zapisivati u \"apps\" direktorij", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u apps direktorij%sili isključivanjem appstorea u konfiguracijskoj datoteci.", "Cannot create \"data\" directory (%s)" : "Kreiranje \"data\" direktorija (%s) nije moguće", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ovo obično može popraviti <a href=\"%s\"target=\"_blank\">davanjem pristupa web poslužiteljuza pisanje u korijenskom direktoriju</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dozvole se obično mogu popraviti %sdavanjem pristupa web poslužitelju za pisanje u korijenskom direktoriju%s", "Setting locale to %s failed" : "Postavljanje regionalne sheme u %s nije uspjelo", "Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.", "Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.", diff --git a/lib/l10n/hr.json b/lib/l10n/hr.json index 372d5515966..5e933fead22 100644 --- a/lib/l10n/hr.json +++ b/lib/l10n/hr.json @@ -14,7 +14,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud sa verzijom manjom od %s je potrebna.", "Help" : "Pomoć", "Personal" : "Osobno", - "Settings" : "Postavke", "Users" : "Korisnici", "Admin" : "Admin", "Recommended" : "Preporuceno", @@ -100,12 +99,12 @@ "A valid password must be provided" : "Nužno je navesti ispravnu lozinku", "The username is already being used" : "Korisničko ime se već koristi", "No database drivers (sqlite, mysql, or postgresql) installed." : "Pogonski programi baze podataka (sqlite, mysql, ili postgresql) nisu instalirani.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dozvole se obično mogu popraviti %sdavanjem pristupa web poslužitelju za pisanje u korijenskom direktoriju%s", "Cannot write into \"config\" directory" : "Nije moguće zapisivati u \"config\" direktorij", "Cannot write into \"apps\" directory" : "Nije moguće zapisivati u \"apps\" direktorij", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u apps direktorij%sili isključivanjem appstorea u konfiguracijskoj datoteci.", "Cannot create \"data\" directory (%s)" : "Kreiranje \"data\" direktorija (%s) nije moguće", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ovo obično može popraviti <a href=\"%s\"target=\"_blank\">davanjem pristupa web poslužiteljuza pisanje u korijenskom direktoriju</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dozvole se obično mogu popraviti %sdavanjem pristupa web poslužitelju za pisanje u korijenskom direktoriju%s", "Setting locale to %s failed" : "Postavljanje regionalne sheme u %s nije uspjelo", "Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.", "Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.", diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js index f1f645b1616..849740ad57d 100644 --- a/lib/l10n/hu_HU.js +++ b/lib/l10n/hu_HU.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.", "Help" : "Súgó", "Personal" : "Személyes", - "Settings" : "Beállítások", "Users" : "Felhasználók", "Admin" : "Adminsztráció", "Recommended" : "Ajánlott", @@ -94,12 +93,12 @@ OC.L10N.register( "A valid password must be provided" : "Érvényes jelszót kell megadnia", "The username is already being used" : "Ez a bejelentkezési név már foglalt", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez rendszerint úgy oldható meg, hogy <a href=\"%s\" target=\"_blank\">írásjogot adunk a webszervernek a gyökérkönyvtárra</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült", "Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!", "Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!", diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json index ac09b9d84ef..265c1a5264e 100644 --- a/lib/l10n/hu_HU.json +++ b/lib/l10n/hu_HU.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.", "Help" : "Súgó", "Personal" : "Személyes", - "Settings" : "Beállítások", "Users" : "Felhasználók", "Admin" : "Adminsztráció", "Recommended" : "Ajánlott", @@ -92,12 +91,12 @@ "A valid password must be provided" : "Érvényes jelszót kell megadnia", "The username is already being used" : "Ez a bejelentkezési név már foglalt", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár", "Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.", "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez rendszerint úgy oldható meg, hogy <a href=\"%s\" target=\"_blank\">írásjogot adunk a webszervernek a gyökérkönyvtárra</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.", "Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült", "Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!", "Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!", diff --git a/lib/l10n/ia.js b/lib/l10n/ia.js index 345df54ec33..336aff70234 100644 --- a/lib/l10n/ia.js +++ b/lib/l10n/ia.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Adjuta", "Personal" : "Personal", - "Settings" : "Configurationes", "Users" : "Usatores", "Admin" : "Administration", "Unknown filetype" : "Typo de file incognite", diff --git a/lib/l10n/ia.json b/lib/l10n/ia.json index 3f722b77a0d..b768db5aed2 100644 --- a/lib/l10n/ia.json +++ b/lib/l10n/ia.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Adjuta", "Personal" : "Personal", - "Settings" : "Configurationes", "Users" : "Usatores", "Admin" : "Administration", "Unknown filetype" : "Typo de file incognite", diff --git a/lib/l10n/id.js b/lib/l10n/id.js index 40b503f3e1d..994c543d070 100644 --- a/lib/l10n/id.js +++ b/lib/l10n/id.js @@ -8,26 +8,37 @@ OC.L10N.register( "Sample configuration detected" : "Konfigurasi sampel ditemukan", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php", "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.", + "PHP with a version lower than %s is required." : "Diperlukan PHP dengan versi yang lebh rendah dari %s.", + "Following databases are supported: %s" : "Berikut adalah basis data yang didukung: %s", + "The command line tool %s could not be found" : "Alat baris perintah %s tidak ditemukan", + "The library %s is not available." : "Pustaka %s tidak tersedia.", + "Library %s with a version higher than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih tinggi dari %s - versi yang tersedia %s.", + "Library %s with a version lower than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih rendah dari %s - versi yang tersedia %s.", + "Following platforms are supported: %s" : "Berikut adalah platform yang didukung: %s", + "ownCloud %s or higher is required." : "Diperlukan ownCloud %s atau yang lebih tinggi.", + "ownCloud with a version lower than %s is required." : "Diperlukan ownCloud dengan versi yang lebih rendah dari %s.", "Help" : "Bantuan", "Personal" : "Pribadi", - "Settings" : "Pengaturan", "Users" : "Pengguna", "Admin" : "Admin", "Recommended" : "Direkomendasikan", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplikasi \\\"%s\\\" tidak dapat diinstal karena tidak kompatibel denga versi ownCloud ini.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikasi \\\"%s\\\" tidak dapat diinstal karena ketergantungan berikut tidak terpenuhi: %s", "No app name specified" : "Tidak ada nama apl yang ditentukan", "Unknown filetype" : "Tipe berkas tak dikenal", "Invalid image" : "Gambar tidak sah", "today" : "hari ini", "yesterday" : "kemarin", - "_%n day ago_::_%n days ago_" : [""], + "_%n day ago_::_%n days ago_" : ["%n hari yang lalu"], "last month" : "bulan kemarin", "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"], "last year" : "tahun kemarin", - "_%n year ago_::_%n years ago_" : [""], + "_%n year ago_::_%n years ago_" : ["%n tahun yang lalu"], "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"], "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"], "seconds ago" : "beberapa detik yang lalu", + "Database Error" : "Basis Data Galat", + "Please contact your system administrator." : "Mohon hubungi administrator sistem Anda.", "web services under your control" : "layanan web dalam kendali anda", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", @@ -65,6 +76,7 @@ OC.L10N.register( "Set an admin password." : "Tetapkan sandi admin.", "Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s", "%s shared »%s« with you" : "%s membagikan »%s« dengan anda", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Gagal berbagi %s, karena backend tidak mengizinkan berbagi dengan tipe %i", "Sharing %s failed, because the file does not exist" : "Gagal membagikan %s, karena berkas tidak ada", "You are not allowed to share %s" : "Anda tidak diizinkan untuk membagikan %s", "Sharing %s failed, because the user %s is the item owner" : "Gagal membagikan %s, karena pengguna %s adalah pemilik item", @@ -90,17 +102,18 @@ OC.L10N.register( "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", "Cannot create \"data\" directory (%s)" : "Tidak dapat membuat direktori (%s) \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Hal ini biasanya dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\">memberikan akses tulis bagi situs web ke direktori root</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Setting locale to %s failed" : "Pengaturan lokal ke %s gagal", "Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.", "Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.", "PHP module %s not installed." : "Module PHP %s tidak terinstal.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Untuk memperbaiki masalah ini, atur <code>always_populate_raw_post_data</code> menjadi <code>-1</code> pada berkas php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya pengaturan PHP strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?", diff --git a/lib/l10n/id.json b/lib/l10n/id.json index b298a5b5628..f5743dc4166 100644 --- a/lib/l10n/id.json +++ b/lib/l10n/id.json @@ -6,26 +6,37 @@ "Sample configuration detected" : "Konfigurasi sampel ditemukan", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php", "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.", + "PHP with a version lower than %s is required." : "Diperlukan PHP dengan versi yang lebh rendah dari %s.", + "Following databases are supported: %s" : "Berikut adalah basis data yang didukung: %s", + "The command line tool %s could not be found" : "Alat baris perintah %s tidak ditemukan", + "The library %s is not available." : "Pustaka %s tidak tersedia.", + "Library %s with a version higher than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih tinggi dari %s - versi yang tersedia %s.", + "Library %s with a version lower than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih rendah dari %s - versi yang tersedia %s.", + "Following platforms are supported: %s" : "Berikut adalah platform yang didukung: %s", + "ownCloud %s or higher is required." : "Diperlukan ownCloud %s atau yang lebih tinggi.", + "ownCloud with a version lower than %s is required." : "Diperlukan ownCloud dengan versi yang lebih rendah dari %s.", "Help" : "Bantuan", "Personal" : "Pribadi", - "Settings" : "Pengaturan", "Users" : "Pengguna", "Admin" : "Admin", "Recommended" : "Direkomendasikan", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "Aplikasi \\\"%s\\\" tidak dapat diinstal karena tidak kompatibel denga versi ownCloud ini.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikasi \\\"%s\\\" tidak dapat diinstal karena ketergantungan berikut tidak terpenuhi: %s", "No app name specified" : "Tidak ada nama apl yang ditentukan", "Unknown filetype" : "Tipe berkas tak dikenal", "Invalid image" : "Gambar tidak sah", "today" : "hari ini", "yesterday" : "kemarin", - "_%n day ago_::_%n days ago_" : [""], + "_%n day ago_::_%n days ago_" : ["%n hari yang lalu"], "last month" : "bulan kemarin", "_%n month ago_::_%n months ago_" : ["%n bulan yang lalu"], "last year" : "tahun kemarin", - "_%n year ago_::_%n years ago_" : [""], + "_%n year ago_::_%n years ago_" : ["%n tahun yang lalu"], "_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"], "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"], "seconds ago" : "beberapa detik yang lalu", + "Database Error" : "Basis Data Galat", + "Please contact your system administrator." : "Mohon hubungi administrator sistem Anda.", "web services under your control" : "layanan web dalam kendali anda", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", @@ -63,6 +74,7 @@ "Set an admin password." : "Tetapkan sandi admin.", "Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s", "%s shared »%s« with you" : "%s membagikan »%s« dengan anda", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Gagal berbagi %s, karena backend tidak mengizinkan berbagi dengan tipe %i", "Sharing %s failed, because the file does not exist" : "Gagal membagikan %s, karena berkas tidak ada", "You are not allowed to share %s" : "Anda tidak diizinkan untuk membagikan %s", "Sharing %s failed, because the user %s is the item owner" : "Gagal membagikan %s, karena pengguna %s adalah pemilik item", @@ -88,17 +100,18 @@ "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", "Cannot create \"data\" directory (%s)" : "Tidak dapat membuat direktori (%s) \"data\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Hal ini biasanya dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\">memberikan akses tulis bagi situs web ke direktori root</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Setting locale to %s failed" : "Pengaturan lokal ke %s gagal", "Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.", "Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.", "PHP module %s not installed." : "Module PHP %s tidak terinstal.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Untuk memperbaiki masalah ini, atur <code>always_populate_raw_post_data</code> menjadi <code>-1</code> pada berkas php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya pengaturan PHP strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?", diff --git a/lib/l10n/is.js b/lib/l10n/is.js index 712b8bbd10a..25c1b18a47c 100644 --- a/lib/l10n/is.js +++ b/lib/l10n/is.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Hjálp", "Personal" : "Um mig", - "Settings" : "Stillingar", "Users" : "Notendur", "Admin" : "Stjórnun", "today" : "í dag", diff --git a/lib/l10n/is.json b/lib/l10n/is.json index fd0291c96c3..8a320228277 100644 --- a/lib/l10n/is.json +++ b/lib/l10n/is.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Hjálp", "Personal" : "Um mig", - "Settings" : "Stillingar", "Users" : "Notendur", "Admin" : "Stjórnun", "today" : "í dag", diff --git a/lib/l10n/it.js b/lib/l10n/it.js index 229bb8bd2ec..9166b48cc6f 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Richiesta una versione di ownCloud minore di %s.", "Help" : "Aiuto", "Personal" : "Personale", - "Settings" : "Impostazioni", "Users" : "Utenti", "Admin" : "Admin", "Recommended" : "Consigliata", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Deve essere fornita una password valida", "The username is already being used" : "Il nome utente è già utilizzato", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nessun driver di database (sqlite, mysql o postgresql) installato", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Cannot write into \"config\" directory" : "Impossibile scrivere nella cartella \"config\"", "Cannot write into \"apps\" directory" : "Impossibile scrivere nella cartella \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"apps\"%s o disabilitando il negozio di applicazioni nel file di configurazione.", "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Setting locale to %s failed" : "L'impostazione della localizzazione a %s non è riuscita", "Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.", "Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 8fca8b4684c..2b90ad9d892 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Richiesta una versione di ownCloud minore di %s.", "Help" : "Aiuto", "Personal" : "Personale", - "Settings" : "Impostazioni", "Users" : "Utenti", "Admin" : "Admin", "Recommended" : "Consigliata", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Deve essere fornita una password valida", "The username is already being used" : "Il nome utente è già utilizzato", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nessun driver di database (sqlite, mysql o postgresql) installato", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Cannot write into \"config\" directory" : "Impossibile scrivere nella cartella \"config\"", "Cannot write into \"apps\" directory" : "Impossibile scrivere nella cartella \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"apps\"%s o disabilitando il negozio di applicazioni nel file di configurazione.", "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "I permessi possono essere normalmente corretti %sfornendo al server web accesso in scrittura alla cartella radice%s.", "Setting locale to %s failed" : "L'impostazione della localizzazione a %s non è riuscita", "Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.", "Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.", diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js index bf0e4f4b4cc..4082c06140d 100644 --- a/lib/l10n/ja.js +++ b/lib/l10n/ja.js @@ -19,10 +19,9 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud %s 以下が必要です。", "Help" : "ヘルプ", "Personal" : "個人", - "Settings" : "設定", "Users" : "ユーザー", "Admin" : "管理", - "Recommended" : "推奨", + "Recommended" : "おすすめ", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "アプリ \\\"%s\\\" をインストールできません。現在のownCloudのバージョンと互換性がありません。", "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "次の依存関係は無いため\\\"%s\\\"のアプリをインストールできません:%s", "No app name specified" : "アプリ名が未指定", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "有効なパスワードを指定する必要があります", "The username is already being used" : "ユーザー名はすでに使われています", "No database drivers (sqlite, mysql, or postgresql) installed." : "データベースドライバー (sqlite, mysql, postgresql) がインストールされていません。", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Cannot write into \"config\" directory" : "\"config\" ディレクトリに書き込みができません", "Cannot write into \"apps\" directory" : "\"apps\" ディレクトリに書き込みができません", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "多くの場合、これは %s Webサーバーにappsディレクトリ %s への書き込み権限を与えるか、設定ファイルでアプリストアを無効化することで解決できます。", "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "多くの場合、これは<a href=\"%s\" target=\"_blank\">Webサーバーにルートディレクトリへの書き込み権限を与える</a>ことで解決できます。", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Setting locale to %s failed" : "ロケールを %s に設定できませんでした", "Please install one of these locales on your system and restart your webserver." : "これらのロケールのうちいずれかをシステムにインストールし、Webサーバーを再起動してください。", "Please ask your server administrator to install the module." : "サーバー管理者にモジュールのインストールを依頼してください。", diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json index 6e3749cd3b7..b4da8536f82 100644 --- a/lib/l10n/ja.json +++ b/lib/l10n/ja.json @@ -17,10 +17,9 @@ "ownCloud with a version lower than %s is required." : "ownCloud %s 以下が必要です。", "Help" : "ヘルプ", "Personal" : "個人", - "Settings" : "設定", "Users" : "ユーザー", "Admin" : "管理", - "Recommended" : "推奨", + "Recommended" : "おすすめ", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "アプリ \\\"%s\\\" をインストールできません。現在のownCloudのバージョンと互換性がありません。", "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "次の依存関係は無いため\\\"%s\\\"のアプリをインストールできません:%s", "No app name specified" : "アプリ名が未指定", @@ -106,12 +105,12 @@ "A valid password must be provided" : "有効なパスワードを指定する必要があります", "The username is already being used" : "ユーザー名はすでに使われています", "No database drivers (sqlite, mysql, or postgresql) installed." : "データベースドライバー (sqlite, mysql, postgresql) がインストールされていません。", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Cannot write into \"config\" directory" : "\"config\" ディレクトリに書き込みができません", "Cannot write into \"apps\" directory" : "\"apps\" ディレクトリに書き込みができません", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "多くの場合、これは %s Webサーバーにappsディレクトリ %s への書き込み権限を与えるか、設定ファイルでアプリストアを無効化することで解決できます。", "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "多くの場合、これは<a href=\"%s\" target=\"_blank\">Webサーバーにルートディレクトリへの書き込み権限を与える</a>ことで解決できます。", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "多くの場合、パーミッションは %s Webサーバーにルートディレクトリ %s への書き込み権限を与えることで解決できます。", "Setting locale to %s failed" : "ロケールを %s に設定できませんでした", "Please install one of these locales on your system and restart your webserver." : "これらのロケールのうちいずれかをシステムにインストールし、Webサーバーを再起動してください。", "Please ask your server administrator to install the module." : "サーバー管理者にモジュールのインストールを依頼してください。", diff --git a/lib/l10n/ka_GE.js b/lib/l10n/ka_GE.js index 63b886e6ce1..b10774e806c 100644 --- a/lib/l10n/ka_GE.js +++ b/lib/l10n/ka_GE.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "დახმარება", "Personal" : "პირადი", - "Settings" : "პარამეტრები", "Users" : "მომხმარებელი", "Admin" : "ადმინისტრატორი", "today" : "დღეს", diff --git a/lib/l10n/ka_GE.json b/lib/l10n/ka_GE.json index 0371cfcfc90..29f7be8e261 100644 --- a/lib/l10n/ka_GE.json +++ b/lib/l10n/ka_GE.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "დახმარება", "Personal" : "პირადი", - "Settings" : "პარამეტრები", "Users" : "მომხმარებელი", "Admin" : "ადმინისტრატორი", "today" : "დღეს", diff --git a/lib/l10n/km.js b/lib/l10n/km.js index 4f96e661179..5bdbc74176b 100644 --- a/lib/l10n/km.js +++ b/lib/l10n/km.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "ជំនួយ", "Personal" : "ផ្ទាល់ខ្លួន", - "Settings" : "ការកំណត់", "Users" : "អ្នកប្រើ", "Admin" : "អ្នកគ្រប់គ្រង", "No app name specified" : "មិនបានបញ្ជាក់ឈ្មោះកម្មវិធី", diff --git a/lib/l10n/km.json b/lib/l10n/km.json index 9c1010b0020..690d937a11e 100644 --- a/lib/l10n/km.json +++ b/lib/l10n/km.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "ជំនួយ", "Personal" : "ផ្ទាល់ខ្លួន", - "Settings" : "ការកំណត់", "Users" : "អ្នកប្រើ", "Admin" : "អ្នកគ្រប់គ្រង", "No app name specified" : "មិនបានបញ្ជាក់ឈ្មោះកម្មវិធី", diff --git a/lib/l10n/kn.js b/lib/l10n/kn.js index 75314b0abea..7bcde5e4d6a 100644 --- a/lib/l10n/kn.js +++ b/lib/l10n/kn.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "ಸಹಾಯ", "Personal" : "ವೈಯಕ್ತಿಕ", - "Settings" : "ಆಯ್ಕೆ", "Users" : "ಬಳಕೆದಾರರು", "Admin" : "ನಿರ್ವಹಕ", "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ", diff --git a/lib/l10n/kn.json b/lib/l10n/kn.json index ae5f3359a13..28b9d581d93 100644 --- a/lib/l10n/kn.json +++ b/lib/l10n/kn.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "ಸಹಾಯ", "Personal" : "ವೈಯಕ್ತಿಕ", - "Settings" : "ಆಯ್ಕೆ", "Users" : "ಬಳಕೆದಾರರು", "Admin" : "ನಿರ್ವಹಕ", "Recommended" : "ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ", diff --git a/lib/l10n/ko.js b/lib/l10n/ko.js index 41f87248eef..a2661ff9494 100644 --- a/lib/l10n/ko.js +++ b/lib/l10n/ko.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud 버전 %s 미만이 필요합니다.", "Help" : "도움말", "Personal" : "개인", - "Settings" : "설정", "Users" : "사용자", "Admin" : "관리자", "Recommended" : "추천", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "올바른 암호를 입력해야 합니다", "The username is already being used" : "사용자 이름이 이미 존재합니다", "No database drivers (sqlite, mysql, or postgresql) installed." : "데이터베이스 드라이버(sqlite, mysql, postgresql)가 설치되지 않았습니다.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "%s루트 디렉터리에 웹 서버 쓰기 권한%s을 주면 해결됩니다.", "Cannot write into \"config\" directory" : "\"config\" 디렉터리에 기록할 수 없습니다", "Cannot write into \"apps\" directory" : "\"apps\" 디렉터리에 기록할 수 없습니다", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "%sapps 디렉터리에 웹 서버 쓰기 권한%s을 주거나 설정 파일에서 앱 스토어를 비활성화하면 해결됩니다.", "Cannot create \"data\" directory (%s)" : "\"data\" 디렉터리를 만들 수 없음(%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "<a href=\"%s\" target=\"_blank\">루트 디렉터리에 웹 서버 쓰기 권한</a>을 주면 해결됩니다.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "%s루트 디렉터리에 웹 서버 쓰기 권한%s을 주면 해결됩니다.", "Setting locale to %s failed" : "로캘을 %s(으)로 설정할 수 없음", "Please install one of these locales on your system and restart your webserver." : "다음 중 하나 이상의 로캘을 시스템에 설치하고 웹 서버를 다시 시작하십시오.", "Please ask your server administrator to install the module." : "서버 관리자에게 모듈 설치를 요청하십시오.", diff --git a/lib/l10n/ko.json b/lib/l10n/ko.json index 768dbeafefe..d2ab229e4ba 100644 --- a/lib/l10n/ko.json +++ b/lib/l10n/ko.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud 버전 %s 미만이 필요합니다.", "Help" : "도움말", "Personal" : "개인", - "Settings" : "설정", "Users" : "사용자", "Admin" : "관리자", "Recommended" : "추천", @@ -106,12 +105,12 @@ "A valid password must be provided" : "올바른 암호를 입력해야 합니다", "The username is already being used" : "사용자 이름이 이미 존재합니다", "No database drivers (sqlite, mysql, or postgresql) installed." : "데이터베이스 드라이버(sqlite, mysql, postgresql)가 설치되지 않았습니다.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "%s루트 디렉터리에 웹 서버 쓰기 권한%s을 주면 해결됩니다.", "Cannot write into \"config\" directory" : "\"config\" 디렉터리에 기록할 수 없습니다", "Cannot write into \"apps\" directory" : "\"apps\" 디렉터리에 기록할 수 없습니다", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "%sapps 디렉터리에 웹 서버 쓰기 권한%s을 주거나 설정 파일에서 앱 스토어를 비활성화하면 해결됩니다.", "Cannot create \"data\" directory (%s)" : "\"data\" 디렉터리를 만들 수 없음(%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "<a href=\"%s\" target=\"_blank\">루트 디렉터리에 웹 서버 쓰기 권한</a>을 주면 해결됩니다.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "%s루트 디렉터리에 웹 서버 쓰기 권한%s을 주면 해결됩니다.", "Setting locale to %s failed" : "로캘을 %s(으)로 설정할 수 없음", "Please install one of these locales on your system and restart your webserver." : "다음 중 하나 이상의 로캘을 시스템에 설치하고 웹 서버를 다시 시작하십시오.", "Please ask your server administrator to install the module." : "서버 관리자에게 모듈 설치를 요청하십시오.", diff --git a/lib/l10n/ku_IQ.js b/lib/l10n/ku_IQ.js index eea2d55138e..d618f2f1fa0 100644 --- a/lib/l10n/ku_IQ.js +++ b/lib/l10n/ku_IQ.js @@ -2,7 +2,6 @@ OC.L10N.register( "lib", { "Help" : "یارمەتی", - "Settings" : "دهستكاری", "Users" : "بهكارهێنهر", "Admin" : "بهڕێوهبهری سهرهكی", "_%n day ago_::_%n days ago_" : ["",""], diff --git a/lib/l10n/ku_IQ.json b/lib/l10n/ku_IQ.json index b2ab2dc219d..08ec5ba660d 100644 --- a/lib/l10n/ku_IQ.json +++ b/lib/l10n/ku_IQ.json @@ -1,6 +1,5 @@ { "translations": { "Help" : "یارمەتی", - "Settings" : "دهستكاری", "Users" : "بهكارهێنهر", "Admin" : "بهڕێوهبهری سهرهكی", "_%n day ago_::_%n days ago_" : ["",""], diff --git a/lib/l10n/lb.js b/lib/l10n/lb.js index 470652f4017..94a3d4639f5 100644 --- a/lib/l10n/lb.js +++ b/lib/l10n/lb.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Hëllef", "Personal" : "Perséinlech", - "Settings" : "Astellungen", "Users" : "Benotzer", "Admin" : "Admin", "Unknown filetype" : "Onbekannten Fichier Typ", diff --git a/lib/l10n/lb.json b/lib/l10n/lb.json index 2f63f042538..e83729d0f92 100644 --- a/lib/l10n/lb.json +++ b/lib/l10n/lb.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Hëllef", "Personal" : "Perséinlech", - "Settings" : "Astellungen", "Users" : "Benotzer", "Admin" : "Admin", "Unknown filetype" : "Onbekannten Fichier Typ", diff --git a/lib/l10n/lt_LT.js b/lib/l10n/lt_LT.js index 1f05855b77e..a17e3d26ceb 100644 --- a/lib/l10n/lt_LT.js +++ b/lib/l10n/lt_LT.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Pagalba", "Personal" : "Asmeniniai", - "Settings" : "Nustatymai", "Users" : "Vartotojai", "Admin" : "Administravimas", "No app name specified" : "Nenurodytas programos pavadinimas", diff --git a/lib/l10n/lt_LT.json b/lib/l10n/lt_LT.json index a3a53baf010..ea389f40c1b 100644 --- a/lib/l10n/lt_LT.json +++ b/lib/l10n/lt_LT.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Pagalba", "Personal" : "Asmeniniai", - "Settings" : "Nustatymai", "Users" : "Vartotojai", "Admin" : "Administravimas", "No app name specified" : "Nenurodytas programos pavadinimas", diff --git a/lib/l10n/lv.js b/lib/l10n/lv.js index 1f381ecb9bf..f3ecf0a94fc 100644 --- a/lib/l10n/lv.js +++ b/lib/l10n/lv.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Palīdzība", "Personal" : "Personīgi", - "Settings" : "Iestatījumi", "Users" : "Lietotāji", "Admin" : "Administratori", "Recommended" : "Rekomendēts", diff --git a/lib/l10n/lv.json b/lib/l10n/lv.json index a729e3a40b9..c7a556ab665 100644 --- a/lib/l10n/lv.json +++ b/lib/l10n/lv.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Palīdzība", "Personal" : "Personīgi", - "Settings" : "Iestatījumi", "Users" : "Lietotāji", "Admin" : "Administratori", "Recommended" : "Rekomendēts", diff --git a/lib/l10n/mk.js b/lib/l10n/mk.js index 5ab596f4c95..760a1286172 100644 --- a/lib/l10n/mk.js +++ b/lib/l10n/mk.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Помош", "Personal" : "Лично", - "Settings" : "Подесувања", "Users" : "Корисници", "Admin" : "Админ", "No app name specified" : "Не е специфицирано име на апликацијата", diff --git a/lib/l10n/mk.json b/lib/l10n/mk.json index de9fff6b1a1..d58784f6c1d 100644 --- a/lib/l10n/mk.json +++ b/lib/l10n/mk.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Помош", "Personal" : "Лично", - "Settings" : "Подесувања", "Users" : "Корисници", "Admin" : "Админ", "No app name specified" : "Не е специфицирано име на апликацијата", diff --git a/lib/l10n/mn.js b/lib/l10n/mn.js index 3d8b52309d6..d84aa82c14e 100644 --- a/lib/l10n/mn.js +++ b/lib/l10n/mn.js @@ -1,7 +1,6 @@ OC.L10N.register( "lib", { - "Settings" : "Тохиргоо", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/mn.json b/lib/l10n/mn.json index 8b0f4650d50..82cdad16805 100644 --- a/lib/l10n/mn.json +++ b/lib/l10n/mn.json @@ -1,5 +1,4 @@ { "translations": { - "Settings" : "Тохиргоо", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/mr.js b/lib/l10n/mr.js new file mode 100644 index 00000000000..a12702211c2 --- /dev/null +++ b/lib/l10n/mr.js @@ -0,0 +1,10 @@ +OC.L10N.register( + "lib", + { + "_%n day ago_::_%n days ago_" : ["",""], + "_%n month ago_::_%n months ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["",""], + "_%n hour ago_::_%n hours ago_" : ["",""], + "_%n minute ago_::_%n minutes ago_" : ["",""] +}, +"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/mr.json b/lib/l10n/mr.json new file mode 100644 index 00000000000..b994fa289eb --- /dev/null +++ b/lib/l10n/mr.json @@ -0,0 +1,8 @@ +{ "translations": { + "_%n day ago_::_%n days ago_" : ["",""], + "_%n month ago_::_%n months ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["",""], + "_%n hour ago_::_%n hours ago_" : ["",""], + "_%n minute ago_::_%n minutes ago_" : ["",""] +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/lib/l10n/ms_MY.js b/lib/l10n/ms_MY.js index a501399af5c..0e4d4becc84 100644 --- a/lib/l10n/ms_MY.js +++ b/lib/l10n/ms_MY.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Bantuan", "Personal" : "Peribadi", - "Settings" : "Tetapan", "Users" : "Pengguna", "Admin" : "Admin", "_%n day ago_::_%n days ago_" : [""], diff --git a/lib/l10n/ms_MY.json b/lib/l10n/ms_MY.json index 8c2a83136ee..c4b0b5d0569 100644 --- a/lib/l10n/ms_MY.json +++ b/lib/l10n/ms_MY.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Bantuan", "Personal" : "Peribadi", - "Settings" : "Tetapan", "Users" : "Pengguna", "Admin" : "Admin", "_%n day ago_::_%n days ago_" : [""], diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js index 22f50896cf8..62f9e45a8f0 100644 --- a/lib/l10n/nb_NO.js +++ b/lib/l10n/nb_NO.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud med en versjon lavere enn %s kreves.", "Help" : "Hjelp", "Personal" : "Personlig", - "Settings" : "Innstillinger", "Users" : "Brukere", "Admin" : "Admin", "Recommended" : "Anbefalt", @@ -108,17 +107,19 @@ OC.L10N.register( "A valid password must be provided" : "Oppgi et gyldig passord", "The username is already being used" : "Brukernavnet er allerede i bruk", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.", "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.", "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette kan vanligvis ordnes ved <a href=\"%s\" target=\"_blank\">gi web-serveren skrivetilgang til rotmappen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.", "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.", "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.", "PHP module %s not installed." : "PHP-modul %s er ikke installert.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP er konfigurert til å fylle \"raw post data\". Fra og med PHP 5.6 vil dette føre til at PHP utsteder notiser for fullstendig gyldig kode.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "For å fikse dette problemet, sett <code>always_populate_raw_post_data</code> til <code>-1</code> i php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?", diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json index 201dfeeea69..d432aba266a 100644 --- a/lib/l10n/nb_NO.json +++ b/lib/l10n/nb_NO.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud med en versjon lavere enn %s kreves.", "Help" : "Hjelp", "Personal" : "Personlig", - "Settings" : "Innstillinger", "Users" : "Brukere", "Admin" : "Admin", "Recommended" : "Anbefalt", @@ -106,17 +105,19 @@ "A valid password must be provided" : "Oppgi et gyldig passord", "The username is already being used" : "Brukernavnet er allerede i bruk", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.", "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.", "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette kan vanligvis ordnes ved <a href=\"%s\" target=\"_blank\">gi web-serveren skrivetilgang til rotmappen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.", "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.", "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.", "PHP module %s not installed." : "PHP-modul %s er ikke installert.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "PHP er konfigurert til å fylle \"raw post data\". Fra og med PHP 5.6 vil dette føre til at PHP utsteder notiser for fullstendig gyldig kode.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "For å fikse dette problemet, sett <code>always_populate_raw_post_data</code> til <code>-1</code> i php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?", diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index b44fd91d594..1235e233b78 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud met een versie lager dan %s is vereist.", "Help" : "Help", "Personal" : "Persoonlijk", - "Settings" : "Instellingen", "Users" : "Gebruikers", "Admin" : "Beheerder", "Recommended" : "Aanbevolen", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven", "The username is already being used" : "De gebruikersnaam bestaat al", "No database drivers (sqlite, mysql, or postgresql) installed." : "Geen database drivers (sqlite, mysql of postgres) geïnstalleerd.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Cannot write into \"config\" directory" : "Kan niet schrijven naar de \"config\" directory", "Cannot write into \"apps\" directory" : "Kan niet schrijven naar de \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de appsdirectory %s of door de appstore te deactiveren in het configbestand.", "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\"> de webserver schrijfrechten te geven tot de hoofddirectory</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Setting locale to %s failed" : "Instellen taal op %s mislukte", "Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.", "Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index e453aa0f6a0..5a076e4b0ba 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud met een versie lager dan %s is vereist.", "Help" : "Help", "Personal" : "Persoonlijk", - "Settings" : "Instellingen", "Users" : "Gebruikers", "Admin" : "Beheerder", "Recommended" : "Aanbevolen", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven", "The username is already being used" : "De gebruikersnaam bestaat al", "No database drivers (sqlite, mysql, or postgresql) installed." : "Geen database drivers (sqlite, mysql of postgres) geïnstalleerd.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Cannot write into \"config\" directory" : "Kan niet schrijven naar de \"config\" directory", "Cannot write into \"apps\" directory" : "Kan niet schrijven naar de \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de appsdirectory %s of door de appstore te deactiveren in het configbestand.", "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\"> de webserver schrijfrechten te geven tot de hoofddirectory</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %s geven op de hoofddirectory %s.", "Setting locale to %s failed" : "Instellen taal op %s mislukte", "Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.", "Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.", diff --git a/lib/l10n/nn_NO.js b/lib/l10n/nn_NO.js index b16dd54cc18..79a9c335980 100644 --- a/lib/l10n/nn_NO.js +++ b/lib/l10n/nn_NO.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Hjelp", "Personal" : "Personleg", - "Settings" : "Innstillingar", "Users" : "Brukarar", "Admin" : "Administrer", "Unknown filetype" : "Ukjend filtype", diff --git a/lib/l10n/nn_NO.json b/lib/l10n/nn_NO.json index 6dad7797027..a465496723b 100644 --- a/lib/l10n/nn_NO.json +++ b/lib/l10n/nn_NO.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Hjelp", "Personal" : "Personleg", - "Settings" : "Innstillingar", "Users" : "Brukarar", "Admin" : "Administrer", "Unknown filetype" : "Ukjend filtype", diff --git a/lib/l10n/oc.js b/lib/l10n/oc.js index 4c16d7ec821..f4cb27ec628 100644 --- a/lib/l10n/oc.js +++ b/lib/l10n/oc.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Ajuda", "Personal" : "Personal", - "Settings" : "Configuracion", "Users" : "Usancièrs", "Admin" : "Admin", "today" : "uèi", diff --git a/lib/l10n/oc.json b/lib/l10n/oc.json index 9ebedb6f913..097e5553718 100644 --- a/lib/l10n/oc.json +++ b/lib/l10n/oc.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Ajuda", "Personal" : "Personal", - "Settings" : "Configuracion", "Users" : "Usancièrs", "Admin" : "Admin", "today" : "uèi", diff --git a/lib/l10n/pa.js b/lib/l10n/pa.js index 5b3f0a80f6a..13e4ed1fde8 100644 --- a/lib/l10n/pa.js +++ b/lib/l10n/pa.js @@ -1,7 +1,6 @@ OC.L10N.register( "lib", { - "Settings" : "ਸੈਟਿੰਗ", "today" : "ਅੱਜ", "yesterday" : "ਕੱਲ੍ਹ", "_%n day ago_::_%n days ago_" : ["",""], diff --git a/lib/l10n/pa.json b/lib/l10n/pa.json index 254909bc8b4..d42044e460f 100644 --- a/lib/l10n/pa.json +++ b/lib/l10n/pa.json @@ -1,5 +1,4 @@ { "translations": { - "Settings" : "ਸੈਟਿੰਗ", "today" : "ਅੱਜ", "yesterday" : "ਕੱਲ੍ਹ", "_%n day ago_::_%n days ago_" : ["",""], diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js index 9663e705324..b706afeb282 100644 --- a/lib/l10n/pl.js +++ b/lib/l10n/pl.js @@ -13,7 +13,6 @@ OC.L10N.register( "Following platforms are supported: %s" : "Obsługiwane są następujące platformy: %s", "Help" : "Pomoc", "Personal" : "Osobiste", - "Settings" : "Ustawienia", "Users" : "Użytkownicy", "Admin" : "Administrator", "Recommended" : "Polecane", @@ -99,12 +98,12 @@ OC.L10N.register( "A valid password must be provided" : "Należy podać prawidłowe hasło", "The username is already being used" : "Ta nazwa użytkownika jest już używana", "No database drivers (sqlite, mysql, or postgresql) installed." : "Brak sterowników bazy danych (sqlite, mysql or postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Cannot write into \"config\" directory" : "Nie można zapisać do katalogu \"config\"", "Cannot write into \"apps\" directory" : "Nie można zapisać do katalogu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu apps%s lub wyłączenie appstore w pliku konfiguracyjnym.", "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Można to zwykle rozwiązać przez <a href=\"%s\" target=\"_blank\">dodanie serwerowi www uprawnień zapisu do katalogu głównego</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Setting locale to %s failed" : "Nie udało się zmienić języka na %s", "Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.", "Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.", diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json index 575f0fddf31..52a0508475c 100644 --- a/lib/l10n/pl.json +++ b/lib/l10n/pl.json @@ -11,7 +11,6 @@ "Following platforms are supported: %s" : "Obsługiwane są następujące platformy: %s", "Help" : "Pomoc", "Personal" : "Osobiste", - "Settings" : "Ustawienia", "Users" : "Użytkownicy", "Admin" : "Administrator", "Recommended" : "Polecane", @@ -97,12 +96,12 @@ "A valid password must be provided" : "Należy podać prawidłowe hasło", "The username is already being used" : "Ta nazwa użytkownika jest już używana", "No database drivers (sqlite, mysql, or postgresql) installed." : "Brak sterowników bazy danych (sqlite, mysql or postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Cannot write into \"config\" directory" : "Nie można zapisać do katalogu \"config\"", "Cannot write into \"apps\" directory" : "Nie można zapisać do katalogu \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu apps%s lub wyłączenie appstore w pliku konfiguracyjnym.", "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Można to zwykle rozwiązać przez <a href=\"%s\" target=\"_blank\">dodanie serwerowi www uprawnień zapisu do katalogu głównego</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Problemy z uprawnieniami można zwykle naprawić przez %sdodanie serwerowi www uprawnień zapisu do katalogu głównego%s.", "Setting locale to %s failed" : "Nie udało się zmienić języka na %s", "Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.", "Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index f3d765fa0a9..517f746d84e 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "É necessário um ownCloud com uma versão menor que %s.", "Help" : "Ajuda", "Personal" : "Pessoal", - "Settings" : "Configurações", "Users" : "Usuários", "Admin" : "Admin", "Recommended" : "Recomendado", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Forneça uma senha válida", "The username is already being used" : "Este nome de usuário já está sendo usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s", "Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"", "Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido dando ao webserver permissão de escrita %sgiving para o diretório apps directory%s ou desabilitando o appstore no arquivo de configuração.", "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isto pode ser corrigido por <a href=\"%s\" target=\"_blank\">dando ao webserver permissão de escrita ao diretório raiz</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s", "Setting locale to %s failed" : "Falha ao configurar localidade para %s", "Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.", "Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index e2f27123d3f..990579539c0 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "É necessário um ownCloud com uma versão menor que %s.", "Help" : "Ajuda", "Personal" : "Pessoal", - "Settings" : "Configurações", "Users" : "Usuários", "Admin" : "Admin", "Recommended" : "Recomendado", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Forneça uma senha válida", "The username is already being used" : "Este nome de usuário já está sendo usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s", "Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"", "Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido dando ao webserver permissão de escrita %sgiving para o diretório apps directory%s ou desabilitando o appstore no arquivo de configuração.", "Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isto pode ser corrigido por <a href=\"%s\" target=\"_blank\">dando ao webserver permissão de escrita ao diretório raiz</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s", "Setting locale to %s failed" : "Falha ao configurar localidade para %s", "Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.", "Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.", diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js index 05bda3ed595..de189883eca 100644 --- a/lib/l10n/pt_PT.js +++ b/lib/l10n/pt_PT.js @@ -8,23 +8,32 @@ OC.L10N.register( "Sample configuration detected" : "Exemplo de configuração detectada", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php", "PHP %s or higher is required." : "Necessário PHP %s ou maior.", + "PHP with a version lower than %s is required." : "É necessário um PHP com uma versão inferir a %s.", + "Following databases are supported: %s" : "As seguintes bases de dados são suportadas: %s", + "The command line tool %s could not be found" : "A ferramenta de linha de comento %s não foi encontrada", + "The library %s is not available." : "A biblioteca %s não está disponível.", + "Library %s with a version higher than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão superior a %s - versão disponível: %s.", + "Library %s with a version lower than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão inferior a %s - versão disponível: %s.", + "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", + "ownCloud %s or higher is required." : "É necessário ownCloud %s ou superior.", + "ownCloud with a version lower than %s is required." : "É necessário uma versão do ownCloud inferior a %s.", "Help" : "Ajuda", "Personal" : "Pessoal", - "Settings" : "Configurações", "Users" : "Utilizadores", "Admin" : "Admin", "Recommended" : "Recomendado", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "A Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do owncloud.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "A aplicação \\\"%s\\\" não pode ser instalada porque as seguintes dependências não podem ser realizadas: %s", "No app name specified" : "O nome da aplicação não foi especificado", "Unknown filetype" : "Ficheiro desconhecido", "Invalid image" : "Imagem inválida", "today" : "hoje", "yesterday" : "ontem", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"], "last month" : "ultímo mês", "_%n month ago_::_%n months ago_" : ["","%n meses atrás"], "last year" : "ano passado", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"], "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"], "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"], "seconds ago" : "Minutos atrás", @@ -67,6 +76,7 @@ OC.L10N.register( "Set an admin password." : "Definiar uma password de administrador", "Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s", "%s shared »%s« with you" : "%s partilhado »%s« consigo", + "Sharing %s failed, because the backend does not allow shares from type %i" : "A partilha de %s falhou porque não são autorizadas partilhas do tipo %i", "Sharing %s failed, because the file does not exist" : "A partilha de %s falhou, porque o ficheiro não existe", "You are not allowed to share %s" : "Não está autorizado a partilhar %s", "Sharing %s failed, because the user %s is the item owner" : "A partilha %s falhou, porque o utilizador %s é o proprietário", @@ -77,6 +87,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "A partilha %s falhou, porque o utilizador %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Necessita de fornecer a senha para criar um link publico, só são permitidos links protegidos", "Sharing %s failed, because sharing with links is not allowed" : "A partilha de %s falhou, porque partilhar com links não é permitido", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "A partilha de %s falhou, não foi possível encontrar %s. É possível que o servidor esteja inacessível.", "Share type %s is not valid for %s" : "O tipo de partilha %s não é válido para %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s", "Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado", @@ -96,17 +107,19 @@ OC.L10N.register( "A valid password must be provided" : "Uma password válida deve ser fornecida", "The username is already being used" : "O nome de utilizador já está a ser usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhuma base de dados de drivers (sqlite, mysql, or postgresql) instaladas.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "As autorizações podem ser resolvidas normalmente %sdando ao servidor web direito de escrita para o directório root%s.", "Cannot write into \"config\" directory" : "Não é possível escrever na directoria \"configurar\"", "Cannot write into \"apps\" directory" : "Não é possivel escrever na directoria \"aplicações\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser normalmente resolvido %sdando ao servidor web direito de escrita para o directório de aplicação%s ou desactivando a loja de aplicações no ficheiro de configuração.", "Cannot create \"data\" directory (%s)" : "Não é possivel criar a directoria \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isto pode ser normalmente resolvido <a href=\"%s\" target=\"_blank\">dando ao servidor web direito de escrita para o directório do root</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "As autorizações podem ser resolvidas normalmente %sdando ao servidor web direito de escrita para o directório root%s.", "Setting locale to %s failed" : "Definindo local para %s falhado", "Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.", "Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.", "PHP module %s not installed." : "O modulo %s PHP não está instalado.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "O PHP está configurado para popular dados raw post. Desde o PHP 5.6 isto levará a que o PHP mostre avisos sobre código perfeitamente válido.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para corrigir este problema altere <code>always_populate_raw_post_data</code> para <code>-1</code> no seu php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.", "PHP modules have been installed, but they are still listed as missing?" : "Os módulos PHP foram instalados, mas eles ainda estão listados como desaparecidos?", diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json index e61ca5e06fa..dcf1a893f82 100644 --- a/lib/l10n/pt_PT.json +++ b/lib/l10n/pt_PT.json @@ -6,23 +6,32 @@ "Sample configuration detected" : "Exemplo de configuração detectada", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php", "PHP %s or higher is required." : "Necessário PHP %s ou maior.", + "PHP with a version lower than %s is required." : "É necessário um PHP com uma versão inferir a %s.", + "Following databases are supported: %s" : "As seguintes bases de dados são suportadas: %s", + "The command line tool %s could not be found" : "A ferramenta de linha de comento %s não foi encontrada", + "The library %s is not available." : "A biblioteca %s não está disponível.", + "Library %s with a version higher than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão superior a %s - versão disponível: %s.", + "Library %s with a version lower than %s is required - available version %s." : "É necessário que a biblioteca %s tenha uma versão inferior a %s - versão disponível: %s.", + "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", + "ownCloud %s or higher is required." : "É necessário ownCloud %s ou superior.", + "ownCloud with a version lower than %s is required." : "É necessário uma versão do ownCloud inferior a %s.", "Help" : "Ajuda", "Personal" : "Pessoal", - "Settings" : "Configurações", "Users" : "Utilizadores", "Admin" : "Admin", "Recommended" : "Recomendado", "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "A Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do owncloud.", + "App \\\"%s\\\" cannot be installed because the following dependencies are not fulfilled: %s" : "A aplicação \\\"%s\\\" não pode ser instalada porque as seguintes dependências não podem ser realizadas: %s", "No app name specified" : "O nome da aplicação não foi especificado", "Unknown filetype" : "Ficheiro desconhecido", "Invalid image" : "Imagem inválida", "today" : "hoje", "yesterday" : "ontem", - "_%n day ago_::_%n days ago_" : ["",""], + "_%n day ago_::_%n days ago_" : ["%n dia atrás","%n dias atrás"], "last month" : "ultímo mês", "_%n month ago_::_%n months ago_" : ["","%n meses atrás"], "last year" : "ano passado", - "_%n year ago_::_%n years ago_" : ["",""], + "_%n year ago_::_%n years ago_" : ["%n ano atrás","%n anos atrás"], "_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"], "_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"], "seconds ago" : "Minutos atrás", @@ -65,6 +74,7 @@ "Set an admin password." : "Definiar uma password de administrador", "Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s", "%s shared »%s« with you" : "%s partilhado »%s« consigo", + "Sharing %s failed, because the backend does not allow shares from type %i" : "A partilha de %s falhou porque não são autorizadas partilhas do tipo %i", "Sharing %s failed, because the file does not exist" : "A partilha de %s falhou, porque o ficheiro não existe", "You are not allowed to share %s" : "Não está autorizado a partilhar %s", "Sharing %s failed, because the user %s is the item owner" : "A partilha %s falhou, porque o utilizador %s é o proprietário", @@ -75,6 +85,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "A partilha %s falhou, porque o utilizador %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Necessita de fornecer a senha para criar um link publico, só são permitidos links protegidos", "Sharing %s failed, because sharing with links is not allowed" : "A partilha de %s falhou, porque partilhar com links não é permitido", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "A partilha de %s falhou, não foi possível encontrar %s. É possível que o servidor esteja inacessível.", "Share type %s is not valid for %s" : "O tipo de partilha %s não é válido para %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s", "Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado", @@ -94,17 +105,19 @@ "A valid password must be provided" : "Uma password válida deve ser fornecida", "The username is already being used" : "O nome de utilizador já está a ser usado", "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhuma base de dados de drivers (sqlite, mysql, or postgresql) instaladas.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "As autorizações podem ser resolvidas normalmente %sdando ao servidor web direito de escrita para o directório root%s.", "Cannot write into \"config\" directory" : "Não é possível escrever na directoria \"configurar\"", "Cannot write into \"apps\" directory" : "Não é possivel escrever na directoria \"aplicações\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser normalmente resolvido %sdando ao servidor web direito de escrita para o directório de aplicação%s ou desactivando a loja de aplicações no ficheiro de configuração.", "Cannot create \"data\" directory (%s)" : "Não é possivel criar a directoria \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isto pode ser normalmente resolvido <a href=\"%s\" target=\"_blank\">dando ao servidor web direito de escrita para o directório do root</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "As autorizações podem ser resolvidas normalmente %sdando ao servidor web direito de escrita para o directório root%s.", "Setting locale to %s failed" : "Definindo local para %s falhado", "Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.", "Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.", "PHP module %s not installed." : "O modulo %s PHP não está instalado.", "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.", + "PHP is configured to populate raw post data. Since PHP 5.6 this will lead to PHP throwing notices for perfectly valid code." : "O PHP está configurado para popular dados raw post. Desde o PHP 5.6 isto levará a que o PHP mostre avisos sobre código perfeitamente válido.", + "To fix this issue set <code>always_populate_raw_post_data</code> to <code>-1</code> in your php.ini" : "Para corrigir este problema altere <code>always_populate_raw_post_data</code> para <code>-1</code> no seu php.ini", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.", "PHP modules have been installed, but they are still listed as missing?" : "Os módulos PHP foram instalados, mas eles ainda estão listados como desaparecidos?", diff --git a/lib/l10n/ro.js b/lib/l10n/ro.js index 08d5d9bb5b4..b06836c7fc3 100644 --- a/lib/l10n/ro.js +++ b/lib/l10n/ro.js @@ -6,7 +6,6 @@ OC.L10N.register( "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.", "Help" : "Ajutor", "Personal" : "Personal", - "Settings" : "Setări", "Users" : "Utilizatori", "Admin" : "Admin", "Recommended" : "Recomandat", diff --git a/lib/l10n/ro.json b/lib/l10n/ro.json index 9a0a316a57d..20b71834e23 100644 --- a/lib/l10n/ro.json +++ b/lib/l10n/ro.json @@ -4,7 +4,6 @@ "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.", "Help" : "Ajutor", "Personal" : "Personal", - "Settings" : "Setări", "Users" : "Utilizatori", "Admin" : "Admin", "Recommended" : "Recomandat", diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js index 79a53ab3302..6ee348d2fa1 100644 --- a/lib/l10n/ru.js +++ b/lib/l10n/ru.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Требуется версия ownCloud ниже %s.", "Help" : "Помощь", "Personal" : "Личное", - "Settings" : "Настройки", "Users" : "Пользователи", "Admin" : "Администрирование", "Recommended" : "Рекомендовано", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Укажите правильный пароль", "The username is already being used" : "Имя пользователя уже используется", "No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна", "Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталог приложений%s или отключив хранилище программ в файле конфигурации.", "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневом каталоге.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Setting locale to %s failed" : "Установка локали %s не удалась", "Please install one of these locales on your system and restart your webserver." : "Установите один из этих языковых пакетов на вашу систему и перезапустите веб-сервер.", "Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.", diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json index 8863fe4c0a9..124b68038bd 100644 --- a/lib/l10n/ru.json +++ b/lib/l10n/ru.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Требуется версия ownCloud ниже %s.", "Help" : "Помощь", "Personal" : "Личное", - "Settings" : "Настройки", "Users" : "Пользователи", "Admin" : "Администрирование", "Recommended" : "Рекомендовано", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Укажите правильный пароль", "The username is already being used" : "Имя пользователя уже используется", "No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Cannot write into \"config\" directory" : "Запись в каталог \"config\" невозможна", "Cannot write into \"apps\" directory" : "Запись в каталог \"app\" невозможна", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в каталог приложений%s или отключив хранилище программ в файле конфигурации.", "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневом каталоге.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в корневой каталог%s.", "Setting locale to %s failed" : "Установка локали %s не удалась", "Please install one of these locales on your system and restart your webserver." : "Установите один из этих языковых пакетов на вашу систему и перезапустите веб-сервер.", "Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.", diff --git a/lib/l10n/si_LK.js b/lib/l10n/si_LK.js index 09d5d0c84da..e3eea5e0b9b 100644 --- a/lib/l10n/si_LK.js +++ b/lib/l10n/si_LK.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "උදව්", "Personal" : "පෞද්ගලික", - "Settings" : "සිටුවම්", "Users" : "පරිශීලකයන්", "Admin" : "පරිපාලක", "today" : "අද", diff --git a/lib/l10n/si_LK.json b/lib/l10n/si_LK.json index 6c65802af2e..f1ac256a740 100644 --- a/lib/l10n/si_LK.json +++ b/lib/l10n/si_LK.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "උදව්", "Personal" : "පෞද්ගලික", - "Settings" : "සිටුවම්", "Users" : "පරිශීලකයන්", "Admin" : "පරිපාලක", "today" : "අද", diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js index 47b404ff4a1..ef1a55d444e 100644 --- a/lib/l10n/sk_SK.js +++ b/lib/l10n/sk_SK.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud je vyžadovaný v nižšej verzii ako %s.", "Help" : "Pomoc", "Personal" : "Osobné", - "Settings" : "Nastavenia", "Users" : "Používatelia", "Admin" : "Administrátor", "Recommended" : "Odporúčané", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Musíte zadať platné heslo", "The username is already being used" : "Meno používateľa je už použité", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ovládače databázy (sqlite, mysql, alebo postgresql) nie sú nainštalované.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"", "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.", "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto je zvyčajne možné opraviť tým, že <a href=\"%s\" target=\"_blank\">udelíte webovému serveru oprávnenie na zápis do koreňového adresára</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo", "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.", "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.", diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json index 6d9768f569a..4a16e934053 100644 --- a/lib/l10n/sk_SK.json +++ b/lib/l10n/sk_SK.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud je vyžadovaný v nižšej verzii ako %s.", "Help" : "Pomoc", "Personal" : "Osobné", - "Settings" : "Nastavenia", "Users" : "Používatelia", "Admin" : "Administrátor", "Recommended" : "Odporúčané", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Musíte zadať platné heslo", "The username is already being used" : "Meno používateľa je už použité", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ovládače databázy (sqlite, mysql, alebo postgresql) nie sú nainštalované.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"", "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.", "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto je zvyčajne možné opraviť tým, že <a href=\"%s\" target=\"_blank\">udelíte webovému serveru oprávnenie na zápis do koreňového adresára</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.", "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo", "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.", "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.", diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js index 91efdf6d6eb..70224c5e391 100644 --- a/lib/l10n/sl.js +++ b/lib/l10n/sl.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "Zahtevana je različica ownCloud %s ali nižja.", "Help" : "Pomoč", "Personal" : "Osebno", - "Settings" : "Nastavitve", "Users" : "Uporabniki", "Admin" : "Skrbništvo", "Recommended" : "Priporočljivo", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Navedeno mora biti veljavno geslo", "The username is already being used" : "Vpisano uporabniško ime je že v uporabi", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ni nameščenih programnikov podatkovnih zbirk (sqlite, mysql, ali postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dovoljenja je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje korensko mapo%s.", "Cannot write into \"config\" directory" : "Mapa 'config' nima nastavljenih ustreznih dovoljenj za pisanje!", "Cannot write into \"apps\" directory" : "Mapa \"apps\" nima nastavljenih ustreznih dovoljenj za pisanje!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Napako je mogoče odpraviti z dodelitvijo dovoljenja spletnemu strežniku %s za pisanje v mapo programov %s, ali pa z onemogočanjem nameščanja programov v nastavitveni datoteki.", "Cannot create \"data\" directory (%s)" : "Ni mogoče ustvariti\"podatkovne\" mape (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Napako je mogoče odpraviti z <a href=\"%s\" target=\"_blank\">dodelitvijo dovoljenja spletnemu strežniku za pisanje v korensko mapo</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dovoljenja je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje korensko mapo%s.", "Setting locale to %s failed" : "Nastavljanje jezikovnih določil na %s je spodletelo.", "Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.", "Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.", diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json index 3c70d01bc66..3556e9f70f4 100644 --- a/lib/l10n/sl.json +++ b/lib/l10n/sl.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "Zahtevana je različica ownCloud %s ali nižja.", "Help" : "Pomoč", "Personal" : "Osebno", - "Settings" : "Nastavitve", "Users" : "Uporabniki", "Admin" : "Skrbništvo", "Recommended" : "Priporočljivo", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Navedeno mora biti veljavno geslo", "The username is already being used" : "Vpisano uporabniško ime je že v uporabi", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ni nameščenih programnikov podatkovnih zbirk (sqlite, mysql, ali postgresql).", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dovoljenja je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje korensko mapo%s.", "Cannot write into \"config\" directory" : "Mapa 'config' nima nastavljenih ustreznih dovoljenj za pisanje!", "Cannot write into \"apps\" directory" : "Mapa \"apps\" nima nastavljenih ustreznih dovoljenj za pisanje!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Napako je mogoče odpraviti z dodelitvijo dovoljenja spletnemu strežniku %s za pisanje v mapo programov %s, ali pa z onemogočanjem nameščanja programov v nastavitveni datoteki.", "Cannot create \"data\" directory (%s)" : "Ni mogoče ustvariti\"podatkovne\" mape (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Napako je mogoče odpraviti z <a href=\"%s\" target=\"_blank\">dodelitvijo dovoljenja spletnemu strežniku za pisanje v korensko mapo</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Dovoljenja je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje korensko mapo%s.", "Setting locale to %s failed" : "Nastavljanje jezikovnih določil na %s je spodletelo.", "Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.", "Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.", diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js index a92d868f116..3c89e0cbbad 100644 --- a/lib/l10n/sq.js +++ b/lib/l10n/sq.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Ndihmë", "Personal" : "Personale", - "Settings" : "Parametra", "Users" : "Përdoruesit", "Admin" : "Admin", "Recommended" : "E rekomanduar", diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json index 4903e1be195..1af0e50c65b 100644 --- a/lib/l10n/sq.json +++ b/lib/l10n/sq.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Ndihmë", "Personal" : "Personale", - "Settings" : "Parametra", "Users" : "Përdoruesit", "Admin" : "Admin", "Recommended" : "E rekomanduar", diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js index 4b2b401c127..8d71871cae2 100644 --- a/lib/l10n/sr.js +++ b/lib/l10n/sr.js @@ -3,14 +3,14 @@ OC.L10N.register( { "Help" : "Помоћ", "Personal" : "Лично", - "Settings" : "Поставке", "Users" : "Корисници", "Admin" : "Администратор", + "Recommended" : "Препоручено", "today" : "данас", "yesterday" : "јуче", - "_%n day ago_::_%n days ago_" : ["","",""], + "_%n day ago_::_%n days ago_" : ["пре %n дан","пре %n дана","пре %n дана"], "last month" : "прошлог месеца", - "_%n month ago_::_%n months ago_" : ["","",""], + "_%n month ago_::_%n months ago_" : ["пре %n месец","пре %n месеца","пре %n месеци"], "last year" : "прошле године", "_%n year ago_::_%n years ago_" : ["","",""], "_%n hour ago_::_%n hours ago_" : ["","",""], diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json index a9d28c1ea5a..9188b980665 100644 --- a/lib/l10n/sr.json +++ b/lib/l10n/sr.json @@ -1,14 +1,14 @@ { "translations": { "Help" : "Помоћ", "Personal" : "Лично", - "Settings" : "Поставке", "Users" : "Корисници", "Admin" : "Администратор", + "Recommended" : "Препоручено", "today" : "данас", "yesterday" : "јуче", - "_%n day ago_::_%n days ago_" : ["","",""], + "_%n day ago_::_%n days ago_" : ["пре %n дан","пре %n дана","пре %n дана"], "last month" : "прошлог месеца", - "_%n month ago_::_%n months ago_" : ["","",""], + "_%n month ago_::_%n months ago_" : ["пре %n месец","пре %n месеца","пре %n месеци"], "last year" : "прошле године", "_%n year ago_::_%n years ago_" : ["","",""], "_%n hour ago_::_%n hours ago_" : ["","",""], diff --git a/lib/l10n/sr@latin.js b/lib/l10n/sr@latin.js index be1a41c85ff..263365f9e35 100644 --- a/lib/l10n/sr@latin.js +++ b/lib/l10n/sr@latin.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Pomoć", "Personal" : "Lično", - "Settings" : "Podešavanja", "Users" : "Korisnici", "Admin" : "Adninistracija", "Unknown filetype" : "Nepoznat tip fajla", diff --git a/lib/l10n/sr@latin.json b/lib/l10n/sr@latin.json index b6aeff717c0..753466c538d 100644 --- a/lib/l10n/sr@latin.json +++ b/lib/l10n/sr@latin.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Pomoć", "Personal" : "Lično", - "Settings" : "Podešavanja", "Users" : "Korisnici", "Admin" : "Adninistracija", "Unknown filetype" : "Nepoznat tip fajla", diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js index b4c471592b5..cd714ba567f 100644 --- a/lib/l10n/sv.js +++ b/lib/l10n/sv.js @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud med version lägre än %s krävs.", "Help" : "Hjälp", "Personal" : "Personligt", - "Settings" : "Inställningar", "Users" : "Användare", "Admin" : "Admin", "Recommended" : "Rekomenderad", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Ett giltigt lösenord måste anges", "The username is already being used" : "Användarnamnet används redan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,", "Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.", diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json index c9af123467b..2af4aec4a71 100644 --- a/lib/l10n/sv.json +++ b/lib/l10n/sv.json @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud med version lägre än %s krävs.", "Help" : "Hjälp", "Personal" : "Personligt", - "Settings" : "Inställningar", "Users" : "Användare", "Admin" : "Admin", "Recommended" : "Rekomenderad", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Ett giltigt lösenord måste anges", "The username is already being used" : "Användarnamnet används redan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,", "Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.", diff --git a/lib/l10n/ta_IN.js b/lib/l10n/ta_IN.js index 27a3f155da1..a12702211c2 100644 --- a/lib/l10n/ta_IN.js +++ b/lib/l10n/ta_IN.js @@ -1,7 +1,6 @@ OC.L10N.register( "lib", { - "Settings" : "அமைப்புகள்", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/ta_IN.json b/lib/l10n/ta_IN.json index 937923e8068..b994fa289eb 100644 --- a/lib/l10n/ta_IN.json +++ b/lib/l10n/ta_IN.json @@ -1,5 +1,4 @@ { "translations": { - "Settings" : "அமைப்புகள்", "_%n day ago_::_%n days ago_" : ["",""], "_%n month ago_::_%n months ago_" : ["",""], "_%n year ago_::_%n years ago_" : ["",""], diff --git a/lib/l10n/ta_LK.js b/lib/l10n/ta_LK.js index 758ad47a78d..fbf1b5c9e70 100644 --- a/lib/l10n/ta_LK.js +++ b/lib/l10n/ta_LK.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "உதவி", "Personal" : "தனிப்பட்ட", - "Settings" : "அமைப்புகள்", "Users" : "பயனாளர்", "Admin" : "நிர்வாகம்", "today" : "இன்று", diff --git a/lib/l10n/ta_LK.json b/lib/l10n/ta_LK.json index 378f926337e..89928821e59 100644 --- a/lib/l10n/ta_LK.json +++ b/lib/l10n/ta_LK.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "உதவி", "Personal" : "தனிப்பட்ட", - "Settings" : "அமைப்புகள்", "Users" : "பயனாளர்", "Admin" : "நிர்வாகம்", "today" : "இன்று", diff --git a/lib/l10n/te.js b/lib/l10n/te.js index 615c6bd68ca..2a3f206338a 100644 --- a/lib/l10n/te.js +++ b/lib/l10n/te.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "సహాయం", "Personal" : "వ్యక్తిగతం", - "Settings" : "అమరికలు", "Users" : "వాడుకరులు", "today" : "ఈరోజు", "yesterday" : "నిన్న", diff --git a/lib/l10n/te.json b/lib/l10n/te.json index 4b243366da1..1f9d621fdc0 100644 --- a/lib/l10n/te.json +++ b/lib/l10n/te.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "సహాయం", "Personal" : "వ్యక్తిగతం", - "Settings" : "అమరికలు", "Users" : "వాడుకరులు", "today" : "ఈరోజు", "yesterday" : "నిన్న", diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js index 9ab8b29e5a0..536b6f52ce2 100644 --- a/lib/l10n/th_TH.js +++ b/lib/l10n/th_TH.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "ช่วยเหลือ", "Personal" : "ส่วนตัว", - "Settings" : "ตั้งค่า", "Users" : "ผู้ใช้งาน", "Admin" : "ผู้ดูแล", "today" : "วันนี้", diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json index 13452ec720a..21b2cf74d6a 100644 --- a/lib/l10n/th_TH.json +++ b/lib/l10n/th_TH.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "ช่วยเหลือ", "Personal" : "ส่วนตัว", - "Settings" : "ตั้งค่า", "Users" : "ผู้ใช้งาน", "Admin" : "ผู้ดูแล", "today" : "วันนี้", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index 0819c2b40f6..2a53c0606b5 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -11,7 +11,7 @@ OC.L10N.register( "PHP with a version lower than %s is required." : "PHP'nin %s sürümü öncesi gerekli.", "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s", "The command line tool %s could not be found" : "Komut satırı aracı %s bulunamadı", - "The library %s is not available." : "%s kütüphanesi kullanılamıyor.", + "The library %s is not available." : "%s kütüphanesi mevcut değil.", "Library %s with a version higher than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha yüksek sürümü gerekli - kullanılabilir sürüm %s.", "Library %s with a version lower than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha düşük sürümü gerekli - kullanılabilir sürüm %s.", "Following platforms are supported: %s" : "Aşağıdaki platformlar destekleniyor: %s", @@ -19,7 +19,6 @@ OC.L10N.register( "ownCloud with a version lower than %s is required." : "ownCloud %s sürümünden daha öncesi gerekli.", "Help" : "Yardım", "Personal" : "Kişisel", - "Settings" : "Ayarlar", "Users" : "Kullanıcılar", "Admin" : "Yönetici", "Recommended" : "Önerilen", @@ -108,12 +107,12 @@ OC.L10N.register( "A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı", "The username is already being used" : "Bu kullanıcı adı zaten kullanımda", "No database drivers (sqlite, mysql, or postgresql) installed." : "Yüklü veritabanı sürücüsü (sqlite, mysql veya postgresql) yok.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök dizinine yazma erişimi verilerek%s çözülebilir", "Cannot write into \"config\" directory" : "\"config\" dizinine yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" dizinine yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu genellikle, %sweb sunucusuna apps dizinine yazma erişimi verilerek%s veya yapılandırma dosyasında appstore (uygulama mağazası) devre dışı bırakılarak çözülebilir.", "Cannot create \"data\" directory (%s)" : "\"Veri\" dizini oluşturulamıyor (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "İzinler genellikle, <a href=\"%s\" target=\"_blank\">web sunucusuna kök dizinine yazma erişimi verilerek</a> çözülebilir.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök dizinine yazma erişimi verilerek%s çözülebilir", "Setting locale to %s failed" : "Dili %s olarak ayarlama başarısız", "Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.", "Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index adbf8b1b94f..93c2a7b98c5 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -9,7 +9,7 @@ "PHP with a version lower than %s is required." : "PHP'nin %s sürümü öncesi gerekli.", "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s", "The command line tool %s could not be found" : "Komut satırı aracı %s bulunamadı", - "The library %s is not available." : "%s kütüphanesi kullanılamıyor.", + "The library %s is not available." : "%s kütüphanesi mevcut değil.", "Library %s with a version higher than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha yüksek sürümü gerekli - kullanılabilir sürüm %s.", "Library %s with a version lower than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha düşük sürümü gerekli - kullanılabilir sürüm %s.", "Following platforms are supported: %s" : "Aşağıdaki platformlar destekleniyor: %s", @@ -17,7 +17,6 @@ "ownCloud with a version lower than %s is required." : "ownCloud %s sürümünden daha öncesi gerekli.", "Help" : "Yardım", "Personal" : "Kişisel", - "Settings" : "Ayarlar", "Users" : "Kullanıcılar", "Admin" : "Yönetici", "Recommended" : "Önerilen", @@ -106,12 +105,12 @@ "A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı", "The username is already being used" : "Bu kullanıcı adı zaten kullanımda", "No database drivers (sqlite, mysql, or postgresql) installed." : "Yüklü veritabanı sürücüsü (sqlite, mysql veya postgresql) yok.", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök dizinine yazma erişimi verilerek%s çözülebilir", "Cannot write into \"config\" directory" : "\"config\" dizinine yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" dizinine yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu genellikle, %sweb sunucusuna apps dizinine yazma erişimi verilerek%s veya yapılandırma dosyasında appstore (uygulama mağazası) devre dışı bırakılarak çözülebilir.", "Cannot create \"data\" directory (%s)" : "\"Veri\" dizini oluşturulamıyor (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "İzinler genellikle, <a href=\"%s\" target=\"_blank\">web sunucusuna kök dizinine yazma erişimi verilerek</a> çözülebilir.", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök dizinine yazma erişimi verilerek%s çözülebilir", "Setting locale to %s failed" : "Dili %s olarak ayarlama başarısız", "Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.", "Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.", diff --git a/lib/l10n/ug.js b/lib/l10n/ug.js index 5ee6ccadd82..03369e132d3 100644 --- a/lib/l10n/ug.js +++ b/lib/l10n/ug.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "ياردەم", "Personal" : "شەخسىي", - "Settings" : "تەڭشەكلەر", "Users" : "ئىشلەتكۈچىلەر", "today" : "بۈگۈن", "yesterday" : "تۈنۈگۈن", diff --git a/lib/l10n/ug.json b/lib/l10n/ug.json index b73fb7e1b35..824bb116a40 100644 --- a/lib/l10n/ug.json +++ b/lib/l10n/ug.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "ياردەم", "Personal" : "شەخسىي", - "Settings" : "تەڭشەكلەر", "Users" : "ئىشلەتكۈچىلەر", "today" : "بۈگۈن", "yesterday" : "تۈنۈگۈن", diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js index b2cd33fed40..cca57d41549 100644 --- a/lib/l10n/uk.js +++ b/lib/l10n/uk.js @@ -7,9 +7,9 @@ OC.L10N.register( "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Зазвичай це можна виправити, %sнадавши веб-серверу права на запис в теці конфігурації%s.", "Sample configuration detected" : "Виявлено приклад конфігурації", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Була виявлена конфігурація з прикладу. Це може нашкодити вашій системі та не підтримується. Будь ласка, зверніться до документації перед внесенням змін в файл config.php", + "PHP %s or higher is required." : "Необхідно PHP %s або вище", "Help" : "Допомога", "Personal" : "Особисте", - "Settings" : "Налаштування", "Users" : "Користувачі", "Admin" : "Адмін", "Recommended" : "Рекомендуємо", diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json index 1a9c42d7d4e..bc4d2ac5890 100644 --- a/lib/l10n/uk.json +++ b/lib/l10n/uk.json @@ -5,9 +5,9 @@ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Зазвичай це можна виправити, %sнадавши веб-серверу права на запис в теці конфігурації%s.", "Sample configuration detected" : "Виявлено приклад конфігурації", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Була виявлена конфігурація з прикладу. Це може нашкодити вашій системі та не підтримується. Будь ласка, зверніться до документації перед внесенням змін в файл config.php", + "PHP %s or higher is required." : "Необхідно PHP %s або вище", "Help" : "Допомога", "Personal" : "Особисте", - "Settings" : "Налаштування", "Users" : "Користувачі", "Admin" : "Адмін", "Recommended" : "Рекомендуємо", diff --git a/lib/l10n/ur_PK.js b/lib/l10n/ur_PK.js index d02b480fd13..e4fcea7f162 100644 --- a/lib/l10n/ur_PK.js +++ b/lib/l10n/ur_PK.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "مدد", "Personal" : "ذاتی", - "Settings" : "سیٹینگز", "Users" : "یوزرز", "Admin" : "ایڈمن", "Unknown filetype" : "غیر معرروف قسم کی فائل", diff --git a/lib/l10n/ur_PK.json b/lib/l10n/ur_PK.json index bbe6e221b2a..605653eddcf 100644 --- a/lib/l10n/ur_PK.json +++ b/lib/l10n/ur_PK.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "مدد", "Personal" : "ذاتی", - "Settings" : "سیٹینگز", "Users" : "یوزرز", "Admin" : "ایڈمن", "Unknown filetype" : "غیر معرروف قسم کی فائل", diff --git a/lib/l10n/vi.js b/lib/l10n/vi.js index a7e68528166..bab0698ef76 100644 --- a/lib/l10n/vi.js +++ b/lib/l10n/vi.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "Giúp đỡ", "Personal" : "Cá nhân", - "Settings" : "Cài đặt", "Users" : "Người dùng", "Admin" : "Quản trị", "Unknown filetype" : "Không biết kiểu tập tin", diff --git a/lib/l10n/vi.json b/lib/l10n/vi.json index a7a29de350a..6f6aa42f7c9 100644 --- a/lib/l10n/vi.json +++ b/lib/l10n/vi.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "Giúp đỡ", "Personal" : "Cá nhân", - "Settings" : "Cài đặt", "Users" : "Người dùng", "Admin" : "Quản trị", "Unknown filetype" : "Không biết kiểu tập tin", diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index 75f97fc6879..6079f2a42e8 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -6,7 +6,6 @@ OC.L10N.register( "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。", "Help" : "帮助", "Personal" : "个人", - "Settings" : "设置", "Users" : "用户", "Admin" : "管理", "No app name specified" : "没有指定的 App 名称", diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 46e10f91993..a26f75ee226 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -4,7 +4,6 @@ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。", "Help" : "帮助", "Personal" : "个人", - "Settings" : "设置", "Users" : "用户", "Admin" : "管理", "No app name specified" : "没有指定的 App 名称", diff --git a/lib/l10n/zh_HK.js b/lib/l10n/zh_HK.js index 1fa04277511..734c1679fac 100644 --- a/lib/l10n/zh_HK.js +++ b/lib/l10n/zh_HK.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Help" : "幫助", "Personal" : "個人", - "Settings" : "設定", "Users" : "用戶", "Admin" : "管理", "Recommended" : "建議", diff --git a/lib/l10n/zh_HK.json b/lib/l10n/zh_HK.json index 3ad83045700..e8226d3936b 100644 --- a/lib/l10n/zh_HK.json +++ b/lib/l10n/zh_HK.json @@ -1,7 +1,6 @@ { "translations": { "Help" : "幫助", "Personal" : "個人", - "Settings" : "設定", "Users" : "用戶", "Admin" : "管理", "Recommended" : "建議", diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js index 477fa6bda3a..195cee01757 100644 --- a/lib/l10n/zh_TW.js +++ b/lib/l10n/zh_TW.js @@ -10,7 +10,6 @@ OC.L10N.register( "PHP %s or higher is required." : "需要 PHP %s 或更高版本", "Help" : "說明", "Personal" : "個人", - "Settings" : "設定", "Users" : "使用者", "Admin" : "管理", "Recommended" : "建議", @@ -94,12 +93,12 @@ OC.L10N.register( "A valid password must be provided" : "一定要提供一個有效的密碼", "The username is already being used" : "這個使用者名稱已經有人使用了", "No database drivers (sqlite, mysql, or postgresql) installed." : "沒有安裝資料庫驅動程式 (sqlite, mysql, 或 postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "通常藉由<a href=\"%s\" target=\"_blank\">開放網頁伺服器對根目錄的權限</a>就可以修正權限問題", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", "Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器", "Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組", diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json index 685214cbc06..cbfd15b060f 100644 --- a/lib/l10n/zh_TW.json +++ b/lib/l10n/zh_TW.json @@ -8,7 +8,6 @@ "PHP %s or higher is required." : "需要 PHP %s 或更高版本", "Help" : "說明", "Personal" : "個人", - "Settings" : "設定", "Users" : "使用者", "Admin" : "管理", "Recommended" : "建議", @@ -92,12 +91,12 @@ "A valid password must be provided" : "一定要提供一個有效的密碼", "The username is already being used" : "這個使用者名稱已經有人使用了", "No database drivers (sqlite, mysql, or postgresql) installed." : "沒有安裝資料庫驅動程式 (sqlite, mysql, 或 postgresql)", - "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "通常藉由<a href=\"%s\" target=\"_blank\">開放網頁伺服器對根目錄的權限</a>就可以修正權限問題", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", "Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器", "Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組", diff --git a/lib/private/app.php b/lib/private/app.php index 3a1f731d621..1af2c36e19f 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -34,13 +34,12 @@ use OC\App\Platform; * upgrading and removing apps. */ class OC_App { - static private $settingsForms = array(); + static private $appVersion = []; static private $adminForms = array(); static private $personalForms = array(); static private $appInfo = array(); static private $appTypes = array(); static private $loadedApps = array(); - static private $checkedApps = array(); static private $altLogin = array(); /** @@ -319,8 +318,12 @@ class OC_App { /** * This function set an app as disabled in appconfig. * @param string $app app + * @throws Exception */ public static function disable($app) { + if($app === 'files') { + throw new \Exception("files can't be disabled."); + } self::$enabledAppsCache = array(); // flush // check if app is a shipped app or not. if not delete \OC_Hook::emit('OC_App', 'pre_disable', array('app' => $app)); @@ -427,18 +430,6 @@ class OC_App { "icon" => OC_Helper::imagePath("settings", "personal.svg") ); - // if there are some settings forms - if (!empty(self::$settingsForms)) { - // settings menu - $settings[] = array( - "id" => "settings", - "order" => 1000, - "href" => OC_Helper::linkToRoute("settings_settings"), - "name" => $l->t("Settings"), - "icon" => OC_Helper::imagePath("settings", "settings.svg") - ); - } - //SubAdmins are also allowed to access user management if (OC_SubAdmin::isSubAdmin(OC_User::getUser())) { // admin users menu @@ -451,7 +442,6 @@ class OC_App { ); } - // if the user is an admin if (OC_User::isAdminUser(OC_User::getUser())) { // admin settings @@ -489,7 +479,7 @@ class OC_App { /** * Get the path where to install apps * - * @return string + * @return string|false */ public static function getInstallPath() { if (OC_Config::getValue('appstoreenabled', true) == false) { @@ -600,8 +590,11 @@ class OC_App { * @return string */ public static function getAppVersion($appId) { - $file = self::getAppPath($appId); - return ($file !== false) ? self::getAppVersionByPath($file) : '0'; + if (!isset(self::$appVersion[$appId])) { + $file = self::getAppPath($appId); + self::$appVersion[$appId] = ($file !== false) ? self::getAppVersionByPath($file) : '0'; + } + return self::$appVersion[$appId]; } /** @@ -672,10 +665,11 @@ class OC_App { * @return string */ public static function getCurrentApp() { - $script = substr(OC_Request::scriptName(), strlen(OC::$WEBROOT) + 1); + $request = \OC::$server->getRequest(); + $script = substr($request->getScriptName(), strlen(OC::$WEBROOT) + 1); $topFolder = substr($script, 0, strpos($script, '/')); if (empty($topFolder)) { - $path_info = OC_Request::getPathInfo(); + $path_info = $request->getPathInfo(); if ($path_info) { $topFolder = substr($path_info, 1, strpos($path_info, '/', 1) - 1); } @@ -689,14 +683,12 @@ class OC_App { } /** - * get the forms for either settings, admin or personal + * @param string $type + * @return array */ public static function getForms($type) { $forms = array(); switch ($type) { - case 'settings': - $source = self::$settingsForms; - break; case 'admin': $source = self::$adminForms; break; @@ -713,13 +705,6 @@ class OC_App { } /** - * register a settings form to be shown - */ - public static function registerSettings($app, $page) { - self::$settingsForms[] = $app . '/' . $page . '.php'; - } - - /** * register an admin form to be shown * * @param string $app @@ -736,10 +721,16 @@ class OC_App { self::$personalForms[] = $app . '/' . $page . '.php'; } - public static function registerLogIn($entry) { + /** + * @param array $entry + */ + public static function registerLogIn(array $entry) { self::$altLogin[] = $entry; } + /** + * @return array + */ public static function getAlternativeLogIns() { return self::$altLogin; } @@ -895,7 +886,7 @@ class OC_App { /** * get a list of all apps on apps.owncloud.com - * @return array, multi-dimensional array of apps. + * @return array|false multi-dimensional array of apps. * Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description */ public static function getAppstoreApps($filter = 'approved', $category = null) { @@ -1155,6 +1146,7 @@ class OC_App { if (file_exists(self::getAppPath($appId) . '/appinfo/database.xml')) { OC_DB::updateDbFromStructure(self::getAppPath($appId) . '/appinfo/database.xml'); } + unset(self::$appVersion[$appId]); if (!self::isEnabled($appId)) { return false; } @@ -1185,7 +1177,7 @@ class OC_App { /** * @param string $appId - * @return \OC\Files\View + * @return \OC\Files\View|false */ public static function getStorage($appId) { if (OC_App::isEnabled($appId)) { //sanity check diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php index 6d9aa0bfe37..20a765e3434 100644 --- a/lib/private/app/appmanager.php +++ b/lib/private/app/appmanager.php @@ -131,8 +131,12 @@ class AppManager implements IAppManager { * Disable an app for every user * * @param string $appId + * @throws \Exception if app can't be disabled */ public function disableApp($appId) { + if($appId === 'files') { + throw new \Exception("files can't be disabled."); + } $this->appConfig->setValue($appId, 'enabled', 'no'); } } diff --git a/lib/private/app/codechecker.php b/lib/private/app/codechecker.php new file mode 100644 index 00000000000..dbec53579a8 --- /dev/null +++ b/lib/private/app/codechecker.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright (c) 2015 Thomas Müller <deepdiver@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\App; + +use OC\Hooks\BasicEmitter; +use PhpParser\Lexer; +use PhpParser\Node; +use PhpParser\Node\Name; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; +use PhpParser\Parser; +use RecursiveCallbackFilterIterator; +use RecursiveDirectoryIterator; +use RecursiveIteratorIterator; +use RegexIterator; +use SplFileInfo; + +class CodeChecker extends BasicEmitter { + + const CLASS_EXTENDS_NOT_ALLOWED = 1000; + const CLASS_IMPLEMENTS_NOT_ALLOWED = 1001; + const STATIC_CALL_NOT_ALLOWED = 1002; + const CLASS_CONST_FETCH_NOT_ALLOWED = 1003; + const CLASS_NEW_FETCH_NOT_ALLOWED = 1004; + + /** @var Parser */ + private $parser; + + /** @var string[] */ + private $blackListedClassNames; + + public function __construct() { + $this->parser = new Parser(new Lexer); + $this->blackListedClassNames = [ + // classes replaced by the public api + 'OC_API', + 'OC_App', + 'OC_AppConfig', + 'OC_Avatar', + 'OC_BackgroundJob', + 'OC_Config', + 'OC_DB', + 'OC_Files', + 'OC_Helper', + 'OC_Hook', + 'OC_Image', + 'OC_JSON', + 'OC_L10N', + 'OC_Log', + 'OC_Mail', + 'OC_Preferences', + 'OC_Request', + 'OC_Response', + 'OC_Template', + 'OC_User', + 'OC_Util', + ]; + } + + /** + * @param string $appId + * @return array + */ + public function analyse($appId) { + $appPath = \OC_App::getAppPath($appId); + if ($appPath === false) { + throw new \RuntimeException("No app with given id <$appId> known."); + } + + return $this->analyseFolder($appPath); + } + + /** + * @param string $folder + * @return array + */ + public function analyseFolder($folder) { + $errors = []; + + $excludes = array_map(function($item) use ($folder) { + return $folder . '/' . $item; + }, ['vendor', '3rdparty', '.git', 'l10n']); + + $iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS); + $iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){ + /** @var SplFileInfo $item */ + foreach($excludes as $exclude) { + if (substr($item->getPath(), 0, strlen($exclude)) === $exclude) { + return false; + } + } + return true; + }); + $iterator = new RecursiveIteratorIterator($iterator); + $iterator = new RegexIterator($iterator, '/^.+\.php$/i'); + + foreach ($iterator as $file) { + /** @var SplFileInfo $file */ + $this->emit('CodeChecker', 'analyseFileBegin', [$file->getPathname()]); + $errors = array_merge($this->analyseFile($file), $errors); + $this->emit('CodeChecker', 'analyseFileFinished', [$errors]); + } + + return $errors; + } + + + /** + * @param string $file + * @return array + */ + public function analyseFile($file) { + $code = file_get_contents($file); + $statements = $this->parser->parse($code); + + $visitor = new CodeCheckVisitor($this->blackListedClassNames); + $traverser = new NodeTraverser; + $traverser->addVisitor($visitor); + + $traverser->traverse($statements); + + return $visitor->errors; + } +} diff --git a/lib/private/app/codecheckvisitor.php b/lib/private/app/codecheckvisitor.php new file mode 100644 index 00000000000..939c905bcf6 --- /dev/null +++ b/lib/private/app/codecheckvisitor.php @@ -0,0 +1,111 @@ +<?php +/** + * Copyright (c) 2015 Thomas Müller <deepdiver@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\App; + +use OC\Hooks\BasicEmitter; +use PhpParser\Lexer; +use PhpParser\Node; +use PhpParser\Node\Name; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; +use PhpParser\Parser; +use RecursiveCallbackFilterIterator; +use RecursiveDirectoryIterator; +use RecursiveIteratorIterator; +use RegexIterator; +use SplFileInfo; + +class CodeCheckVisitor extends NodeVisitorAbstract { + + public function __construct($blackListedClassNames) { + $this->blackListedClassNames = array_map('strtolower', $blackListedClassNames); + } + + public $errors = []; + + public function enterNode(Node $node) { + if ($node instanceof Node\Stmt\Class_) { + if (!is_null($node->extends)) { + $this->checkBlackList($node->extends->toString(), CodeChecker::CLASS_EXTENDS_NOT_ALLOWED, $node); + } + foreach ($node->implements as $implements) { + $this->checkBlackList($implements->toString(), CodeChecker::CLASS_IMPLEMENTS_NOT_ALLOWED, $node); + } + } + if ($node instanceof Node\Expr\StaticCall) { + if (!is_null($node->class)) { + if ($node->class instanceof Name) { + $this->checkBlackList($node->class->toString(), CodeChecker::STATIC_CALL_NOT_ALLOWED, $node); + } + if ($node->class instanceof Node\Expr\Variable) { + /** + * TODO: find a way to detect something like this: + * $c = "OC_API"; + * $n = $i::call(); + */ + } + } + } + if ($node instanceof Node\Expr\ClassConstFetch) { + if (!is_null($node->class)) { + if ($node->class instanceof Name) { + $this->checkBlackList($node->class->toString(), CodeChecker::CLASS_CONST_FETCH_NOT_ALLOWED, $node); + } + if ($node->class instanceof Node\Expr\Variable) { + /** + * TODO: find a way to detect something like this: + * $c = "OC_API"; + * $n = $i::ADMIN_AUTH; + */ + } + } + } + if ($node instanceof Node\Expr\New_) { + if (!is_null($node->class)) { + if ($node->class instanceof Name) { + $this->checkBlackList($node->class->toString(), CodeChecker::CLASS_NEW_FETCH_NOT_ALLOWED, $node); + } + if ($node->class instanceof Node\Expr\Variable) { + /** + * TODO: find a way to detect something like this: + * $c = "OC_API"; + * $n = new $i; + */ + } + } + } + } + + private function checkBlackList($name, $errorCode, Node $node) { + if (in_array(strtolower($name), $this->blackListedClassNames)) { + $this->errors[]= [ + 'disallowedToken' => $name, + 'errorCode' => $errorCode, + 'line' => $node->getLine(), + 'reason' => $this->buildReason($name, $errorCode) + ]; + } + } + + private function buildReason($name, $errorCode) { + static $errorMessages= [ + CodeChecker::CLASS_EXTENDS_NOT_ALLOWED => "used as base class", + CodeChecker::CLASS_IMPLEMENTS_NOT_ALLOWED => "used as interface", + CodeChecker::STATIC_CALL_NOT_ALLOWED => "static method call on private class", + CodeChecker::CLASS_CONST_FETCH_NOT_ALLOWED => "used to fetch a const from", + CodeChecker::CLASS_NEW_FETCH_NOT_ALLOWED => "is instanciated", + ]; + + if (isset($errorMessages[$errorCode])) { + return $errorMessages[$errorCode]; + } + + return "$name usage not allowed - error: $errorCode"; + } +} diff --git a/lib/private/app/platformrepository.php b/lib/private/app/platformrepository.php index 96d04ec2e42..be825e74ca3 100644 --- a/lib/private/app/platformrepository.php +++ b/lib/private/app/platformrepository.php @@ -28,13 +28,10 @@ class PlatformRepository { $ext = new \ReflectionExtension($name); try { $prettyVersion = $ext->getVersion(); + $prettyVersion = $this->normalizeVersion($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; - } - try { $prettyVersion = $this->normalizeVersion($prettyVersion); - } catch (\UnexpectedValueException $e) { - continue; } $packages[$this->buildPackageName($name)] = $prettyVersion; diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index 1874d9f2b19..cd27f91bf01 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -245,7 +245,7 @@ class AppConfig implements \OCP\IAppConfig { * * @param string|false $app * @param string|false $key - * @return array + * @return array|false */ public function getValues($app, $key) { if (($app !== false) == ($key !== false)) { diff --git a/lib/private/appframework/core/api.php b/lib/private/appframework/core/api.php index 2f01015bb15..ab66c54c921 100644 --- a/lib/private/appframework/core/api.php +++ b/lib/private/appframework/core/api.php @@ -136,7 +136,7 @@ class API implements IApi{ * @param string $slotName name of slot, in another word, this is the * name of the method that will be called when registered * signal is emitted. - * @return bool, always true + * @return bool always true */ public function connectHook($signalClass, $signalName, $slotClass, $slotName) { return \OCP\Util::connectHook($signalClass, $signalName, $slotClass, $slotName); @@ -148,7 +148,7 @@ class API implements IApi{ * @param string $signalClass class name of emitter * @param string $signalName name of signal * @param array $params default: array() array with additional data - * @return bool, true if slots exists or false if not + * @return bool true if slots exists or false if not */ public function emitHook($signalClass, $signalName, $params = array()) { return \OCP\Util::emitHook($signalClass, $signalName, $params); diff --git a/lib/private/appframework/http/request.php b/lib/private/appframework/http/request.php index 6012033fe52..d85bfd4f30a 100644 --- a/lib/private/appframework/http/request.php +++ b/lib/private/appframework/http/request.php @@ -24,15 +24,23 @@ namespace OC\AppFramework\Http; +use OC\Security\TrustedDomainHelper; +use OCP\IConfig; use OCP\IRequest; +use OCP\Security\ISecureRandom; /** * Class for accessing variables in the request. * This class provides an immutable object with request variables. */ - class Request implements \ArrayAccess, \Countable, IRequest { + const USER_AGENT_IE = '/MSIE/'; + // Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent + const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#'; + const USER_AGENT_FREEBOX = '#^Mozilla/5\.0$#'; + const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)$/'; + protected $inputStream; protected $content; protected $items = array(); @@ -48,24 +56,37 @@ class Request implements \ArrayAccess, \Countable, IRequest { 'method', 'requesttoken', ); + /** @var ISecureRandom */ + protected $secureRandom; + /** @var IConfig */ + protected $config; + /** @var string */ + protected $requestId = ''; /** * @param array $vars An associative array with the following optional values: - * @param array 'urlParams' the parameters which were matched from the URL - * @param array 'get' the $_GET array - * @param array|string 'post' the $_POST array or JSON string - * @param array 'files' the $_FILES array - * @param array 'server' the $_SERVER array - * @param array 'env' the $_ENV array - * @param array 'cookies' the $_COOKIE array - * @param string 'method' the request method (GET, POST etc) - * @param string|false 'requesttoken' the requesttoken or false when not available + * - array 'urlParams' the parameters which were matched from the URL + * - array 'get' the $_GET array + * - array|string 'post' the $_POST array or JSON string + * - array 'files' the $_FILES array + * - array 'server' the $_SERVER array + * - array 'env' the $_ENV array + * - array 'cookies' the $_COOKIE array + * - string 'method' the request method (GET, POST etc) + * - string|false 'requesttoken' the requesttoken or false when not available + * @param ISecureRandom $secureRandom + * @param IConfig $config + * @param string $stream * @see http://www.php.net/manual/en/reserved.variables.php */ - public function __construct(array $vars=array(), $stream='php://input') { - + public function __construct(array $vars=array(), + ISecureRandom $secureRandom = null, + IConfig $config, + $stream='php://input') { $this->inputStream = $stream; $this->items['params'] = array(); + $this->secureRandom = $secureRandom; + $this->config = $config; if(!array_key_exists('method', $vars)) { $vars['method'] = 'GET'; @@ -106,8 +127,10 @@ class Request implements \ArrayAccess, \Countable, IRequest { ); } - - public function setUrlParameters($parameters) { + /** + * @param array $parameters + */ + public function setUrlParameters(array $parameters) { $this->items['urlParams'] = $parameters; $this->items['parameters'] = array_merge( $this->items['parameters'], @@ -115,7 +138,10 @@ class Request implements \ArrayAccess, \Countable, IRequest { ); } - // Countable method. + /** + * Countable method + * @return int + */ public function count() { return count(array_keys($this->items['parameters'])); } @@ -167,7 +193,11 @@ class Request implements \ArrayAccess, \Countable, IRequest { throw new \RuntimeException('You cannot change the contents of the request object'); } - // Magic property accessors + /** + * Magic property accessors + * @param string $name + * @param mixed $value + */ public function __set($name, $value) { throw new \RuntimeException('You cannot change the contents of the request object'); } @@ -222,12 +252,17 @@ class Request implements \ArrayAccess, \Countable, IRequest { } } - + /** + * @param string $name + * @return bool + */ public function __isset($name) { return isset($this->items['parameters'][$name]); } - + /** + * @param string $id + */ public function __unset($id) { throw new \RunTimeException('You cannot change the contents of the request object'); } @@ -384,4 +419,273 @@ class Request implements \ArrayAccess, \Countable, IRequest { // Valid token return true; } - }} + } + + /** + * Returns an ID for the request, value is not guaranteed to be unique and is mostly meant for logging + * If `mod_unique_id` is installed this value will be taken. + * @return string + */ + public function getId() { + if(isset($this->server['UNIQUE_ID'])) { + return $this->server['UNIQUE_ID']; + } + + if(empty($this->requestId)) { + $this->requestId = $this->secureRandom->getLowStrengthGenerator()->generate(20); + } + + return $this->requestId; + } + + /** + * Returns the remote address, if the connection came from a trusted proxy + * and `forwarded_for_headers` has been configured then the IP address + * specified in this header will be returned instead. + * Do always use this instead of $_SERVER['REMOTE_ADDR'] + * @return string IP address + */ + public function getRemoteAddress() { + $remoteAddress = isset($this->server['REMOTE_ADDR']) ? $this->server['REMOTE_ADDR'] : ''; + $trustedProxies = $this->config->getSystemValue('trusted_proxies', []); + + if(is_array($trustedProxies) && in_array($remoteAddress, $trustedProxies)) { + $forwardedForHeaders = $this->config->getSystemValue('forwarded_for_headers', []); + + foreach($forwardedForHeaders as $header) { + if(isset($this->server[$header])) { + foreach(explode(',', $this->server[$header]) as $IP) { + $IP = trim($IP); + if (filter_var($IP, FILTER_VALIDATE_IP) !== false) { + return $IP; + } + } + } + } + } + + return $remoteAddress; + } + + /** + * Check overwrite condition + * @param string $type + * @return bool + */ + private function isOverwriteCondition($type = '') { + $regex = '/' . $this->config->getSystemValue('overwritecondaddr', '') . '/'; + return $regex === '//' || preg_match($regex, $this->server['REMOTE_ADDR']) === 1 + || ($type !== 'protocol' && $this->config->getSystemValue('forcessl', false)); + } + + /** + * Returns the server protocol. It respects reverse proxy servers and load + * balancers. + * @return string Server protocol (http or https) + */ + public function getServerProtocol() { + if($this->config->getSystemValue('overwriteprotocol') !== '' + && $this->isOverwriteCondition('protocol')) { + return $this->config->getSystemValue('overwriteprotocol'); + } + + if (isset($this->server['HTTP_X_FORWARDED_PROTO'])) { + $proto = strtolower($this->server['HTTP_X_FORWARDED_PROTO']); + // Verify that the protocol is always HTTP or HTTPS + // default to http if an invalid value is provided + return $proto === 'https' ? 'https' : 'http'; + } + + if (isset($this->server['HTTPS']) + && $this->server['HTTPS'] !== null + && $this->server['HTTPS'] !== 'off') { + return 'https'; + } + + return 'http'; + } + + /** + * Returns the request uri, even if the website uses one or more + * reverse proxies + * @return string + */ + public function getRequestUri() { + $uri = isset($this->server['REQUEST_URI']) ? $this->server['REQUEST_URI'] : ''; + if($this->config->getSystemValue('overwritewebroot') !== '' && $this->isOverwriteCondition()) { + $uri = $this->getScriptName() . substr($uri, strlen($this->server['SCRIPT_NAME'])); + } + return $uri; + } + + /** + * Get raw PathInfo from request (not urldecoded) + * @throws \Exception + * @return string Path info + */ + public function getRawPathInfo() { + $requestUri = isset($this->server['REQUEST_URI']) ? $this->server['REQUEST_URI'] : ''; + // remove too many leading slashes - can be caused by reverse proxy configuration + if (strpos($requestUri, '/') === 0) { + $requestUri = '/' . ltrim($requestUri, '/'); + } + + $requestUri = preg_replace('%/{2,}%', '/', $requestUri); + + // Remove the query string from REQUEST_URI + if ($pos = strpos($requestUri, '?')) { + $requestUri = substr($requestUri, 0, $pos); + } + + $scriptName = $this->server['SCRIPT_NAME']; + $pathInfo = $requestUri; + + // strip off the script name's dir and file name + // FIXME: Sabre does not really belong here + list($path, $name) = \Sabre\DAV\URLUtil::splitPath($scriptName); + if (!empty($path)) { + if($path === $pathInfo || strpos($pathInfo, $path.'/') === 0) { + $pathInfo = substr($pathInfo, strlen($path)); + } else { + throw new \Exception("The requested uri($requestUri) cannot be processed by the script '$scriptName')"); + } + } + if (strpos($pathInfo, '/'.$name) === 0) { + $pathInfo = substr($pathInfo, strlen($name) + 1); + } + if (strpos($pathInfo, $name) === 0) { + $pathInfo = substr($pathInfo, strlen($name)); + } + if($pathInfo === '/'){ + return ''; + } else { + return $pathInfo; + } + } + + /** + * Get PathInfo from request + * @throws \Exception + * @return string|false Path info or false when not found + */ + public function getPathInfo() { + if(isset($this->server['PATH_INFO'])) { + return $this->server['PATH_INFO']; + } + + $pathInfo = $this->getRawPathInfo(); + // following is taken from \Sabre\DAV\URLUtil::decodePathSegment + $pathInfo = rawurldecode($pathInfo); + $encoding = mb_detect_encoding($pathInfo, ['UTF-8', 'ISO-8859-1']); + + switch($encoding) { + case 'ISO-8859-1' : + $pathInfo = utf8_encode($pathInfo); + } + // end copy + + return $pathInfo; + } + + /** + * Returns the script name, even if the website uses one or more + * reverse proxies + * @return string the script name + */ + public function getScriptName() { + $name = $this->server['SCRIPT_NAME']; + $overwriteWebRoot = $this->config->getSystemValue('overwritewebroot'); + if ($overwriteWebRoot !== '' && $this->isOverwriteCondition()) { + // FIXME: This code is untestable due to __DIR__, also that hardcoded path is really dangerous + $serverRoot = str_replace('\\', '/', substr(__DIR__, 0, -strlen('lib/private/appframework/http/'))); + $suburi = str_replace('\\', '/', substr(realpath($this->server['SCRIPT_FILENAME']), strlen($serverRoot))); + $name = '/' . ltrim($overwriteWebRoot . $suburi, '/'); + } + return $name; + } + + /** + * Checks whether the user agent matches a given regex + * @param array $agent array of agent names + * @return bool true if at least one of the given agent matches, false otherwise + */ + public function isUserAgent(array $agent) { + foreach ($agent as $regex) { + if (preg_match($regex, $this->server['HTTP_USER_AGENT'])) { + return true; + } + } + return false; + } + + /** + * Returns the unverified server host from the headers without checking + * whether it is a trusted domain + * @return string Server host + */ + public function getInsecureServerHost() { + $host = null; + if (isset($this->server['HTTP_X_FORWARDED_HOST'])) { + if (strpos($this->server['HTTP_X_FORWARDED_HOST'], ',') !== false) { + $parts = explode(',', $this->server['HTTP_X_FORWARDED_HOST']); + $host = trim(current($parts)); + } else { + $host = $this->server['HTTP_X_FORWARDED_HOST']; + } + } else { + if (isset($this->server['HTTP_HOST'])) { + $host = $this->server['HTTP_HOST']; + } else if (isset($this->server['SERVER_NAME'])) { + $host = $this->server['SERVER_NAME']; + } + } + return $host; + } + + + /** + * Returns the server host from the headers, or the first configured + * trusted domain if the host isn't in the trusted list + * @return string Server host + */ + public function getServerHost() { + // FIXME: Ugly workaround that we need to get rid of + if (\OC::$CLI && defined('PHPUNIT_RUN')) { + return 'localhost'; + } + + // overwritehost is always trusted + $host = $this->getOverwriteHost(); + if ($host !== null) { + return $host; + } + + // get the host from the headers + $host = $this->getInsecureServerHost(); + + // Verify that the host is a trusted domain if the trusted domains + // are defined + // If no trusted domain is provided the first trusted domain is returned + $trustedDomainHelper = new TrustedDomainHelper($this->config); + if ($trustedDomainHelper->isTrustedDomain($host)) { + return $host; + } else { + $trustedList = $this->config->getSystemValue('trusted_domains', []); + return $trustedList[0]; + } + } + + /** + * Returns the overwritehost setting from the config if set and + * if the overwrite condition is met + * @return string|null overwritehost value or null if not defined or the defined condition + * isn't met + */ + private function getOverwriteHost() { + if($this->config->getSystemValue('overwritehost') !== '' && $this->isOverwriteCondition()) { + return $this->config->getSystemValue('overwritehost'); + } + return null; + } + +} diff --git a/lib/private/avatar.php b/lib/private/avatar.php index a9d9346d50a..5e234d77bb2 100644 --- a/lib/private/avatar.php +++ b/lib/private/avatar.php @@ -43,6 +43,15 @@ class OC_Avatar implements \OCP\IAvatar { } /** + * Check if an avatar exists for the user + * + * @return bool + */ + public function exists() { + return $this->view->file_exists('avatar.jpg') || $this->view->file_exists('avatar.png'); + } + + /** * sets the users avatar * @param \OC_Image|resource|string $data OC_Image, imagedata or path to set a new avatar * @throws Exception if the provided file is not a jpg or png image diff --git a/lib/private/cache/file.php b/lib/private/cache/file.php index 4e7c065678e..3b500c4e45b 100644 --- a/lib/private/cache/file.php +++ b/lib/private/cache/file.php @@ -83,7 +83,7 @@ class File { public function hasKey($key) { $storage = $this->getStorage(); - if ($storage && $storage->is_file($key)) { + if ($storage && $storage->is_file($key) && $storage->isReadable($key)) { return true; } return false; diff --git a/lib/private/cache/fileglobal.php b/lib/private/cache/fileglobal.php index d9e0fd46d37..8406adabd75 100644 --- a/lib/private/cache/fileglobal.php +++ b/lib/private/cache/fileglobal.php @@ -52,7 +52,7 @@ class FileGlobal { public function hasKey($key) { $key = $this->fixKey($key); $cache_dir = self::getCacheDir(); - if ($cache_dir && is_file($cache_dir.$key)) { + if ($cache_dir && is_file($cache_dir.$key) && is_readable($cache_dir.$key)) { $mtime = filemtime($cache_dir.$key); if ($mtime < time()) { unlink($cache_dir.$key); diff --git a/lib/private/config.php b/lib/private/config.php index 31e536221dd..5c8cc89f0f0 100644 --- a/lib/private/config.php +++ b/lib/private/config.php @@ -236,8 +236,11 @@ class Config { flock($filePointer, LOCK_UN); fclose($filePointer); - // Clear the opcode cache - \OC_Util::clearOpcodeCache(); + // Try invalidating the opcache just for the file we wrote... + if (!\OC_Util::deleteFromOpcodeCache($this->configFilePath)) { + // But if that doesn't work, clear the whole cache. + \OC_Util::clearOpcodeCache(); + } } } diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php index c878e5ee4b4..7c35bfa1791 100644 --- a/lib/private/connector/sabre/directory.php +++ b/lib/private/connector/sabre/directory.php @@ -20,7 +20,6 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ - class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota { @@ -32,6 +31,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node private $dirContent; /** + * Cached quota info + * + * @var array + */ + private $quotaInfo; + + /** * Creates a new file in the directory * * Data will either be supplied as a stream resource, or in certain cases @@ -66,7 +72,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node // exit if we can't create a new file and we don't updatable existing file $info = OC_FileChunking::decodeName($name); if (!$this->fileView->isCreatable($this->path) && - !$this->fileView->isUpdatable($this->path . '/' . $info['name'])) { + !$this->fileView->isUpdatable($this->path . '/' . $info['name']) + ) { throw new \Sabre\DAV\Exception\Forbidden(); } @@ -101,8 +108,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node } $newPath = $this->path . '/' . $name; - if(!$this->fileView->mkdir($newPath)) { - throw new \Sabre\DAV\Exception\Forbidden('Could not create directory '.$newPath); + if (!$this->fileView->mkdir($newPath)) { + throw new \Sabre\DAV\Exception\Forbidden('Could not create directory ' . $newPath); } } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); @@ -152,14 +159,14 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node $properties = array(); $paths = array(); - foreach($folderContent as $info) { + foreach ($folderContent as $info) { $name = $info->getName(); $paths[] = $this->path . '/' . $name; - $properties[$this->path.'/' . $name][self::GETETAG_PROPERTYNAME] = '"' . $info->getEtag() . '"'; + $properties[$this->path . '/' . $name][self::GETETAG_PROPERTYNAME] = '"' . $info->getEtag() . '"'; } // TODO: move this to a beforeGetPropertiesForPath event to pre-cache properties // TODO: only fetch the requested properties - if(count($paths)>0) { + if (count($paths) > 0) { // // the number of arguments within IN conditions are limited in most databases // we chunk $paths into arrays of 200 items each to meet this criteria @@ -167,15 +174,15 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node $chunks = array_chunk($paths, 200, false); foreach ($chunks as $pack) { $placeholders = join(',', array_fill(0, count($pack), '?')); - $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties`' - .' WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' ); + $query = OC_DB::prepare('SELECT * FROM `*PREFIX*properties`' + . ' WHERE `userid` = ?' . ' AND `propertypath` IN (' . $placeholders . ')'); array_unshift($pack, OC_User::getUser()); // prepend userid - $result = $query->execute( $pack ); - while($row = $result->fetchRow()) { + $result = $query->execute($pack); + while ($row = $result->fetchRow()) { $propertypath = $row['propertypath']; $propertyname = $row['propertyname']; $propertyvalue = $row['propertyvalue']; - if($propertyname !== self::GETETAG_PROPERTYNAME) { + if ($propertyname !== self::GETETAG_PROPERTYNAME) { $properties[$propertypath][$propertyname] = $propertyvalue; } } @@ -183,7 +190,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node } $nodes = array(); - foreach($folderContent as $info) { + foreach ($folderContent as $info) { $node = $this->getChild($info->getName(), $info); $node->setPropertyCache($properties[$this->path . '/' . $info->getName()]); $nodes[] = $node; @@ -230,15 +237,17 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node * @return array */ public function getQuotaInfo() { + if ($this->quotaInfo) { + return $this->quotaInfo; + } try { - $path = \OC\Files\Filesystem::getView()->getRelativePath($this->info->getPath()); - $storageInfo = OC_Helper::getStorageInfo($path); - return array( + $storageInfo = OC_Helper::getStorageInfo($this->info->getPath(), $this->info); + $this->quotaInfo = array( $storageInfo['used'], $storageInfo['free'] ); - } - catch (\OCP\Files\StorageNotAvailableException $e) { + return $this->quotaInfo; + } catch (\OCP\Files\StorageNotAvailableException $e) { return array(0, 0); } } diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index 12ce633838f..bb672696f2b 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -149,9 +149,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ } // allow sync clients to send the mtime along in a header - $mtime = OC_Request::hasModificationTime(); - if ($mtime !== false) { - if($this->fileView->touch($this->path, $mtime)) { + $request = \OC::$server->getRequest(); + if (isset($request->server['HTTP_X_OC_MTIME'])) { + if($this->fileView->touch($this->path, $request->server['HTTP_X_OC_MTIME'])) { header('X-OC-MTime: accepted'); } } @@ -165,8 +165,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ /** * Returns the data - * * @return string|resource + * @throws \Sabre\DAV\Exception\Forbidden + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function get() { @@ -187,9 +188,8 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ /** * Delete the current file - * - * @return void * @throws \Sabre\DAV\Exception\Forbidden + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function delete() { if (!$this->info->isDeletable()) { @@ -220,6 +220,21 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ } /** + * Returns the ETag for a file + * + * An ETag is a unique identifier representing the current version of the + * file. If the file changes, the ETag MUST change. The ETag is an + * arbitrary string, but MUST be surrounded by double-quotes. + * + * Return null if the ETag can not effectively be determined + * + * @return mixed + */ + public function getETag() { + return '"' . $this->info->getEtag() . '"'; + } + + /** * Returns the mime-type for a file * * If null is returned, we'll assume application/octet-stream @@ -236,6 +251,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ return \OC_Helper::getSecureMimeType($mimeType); } + /** + * @return array|false + */ public function getDirectDownload() { if (\OCP\App::isEnabled('encryption')) { return []; @@ -252,6 +270,10 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ /** * @param resource $data * @return null|string + * @throws \Sabre\DAV\Exception + * @throws \Sabre\DAV\Exception\BadRequest + * @throws \Sabre\DAV\Exception\NotImplemented + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ private function createFileChunked($data) { @@ -304,9 +326,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ } // allow sync clients to send the mtime along in a header - $mtime = OC_Request::hasModificationTime(); - if ($mtime !== false) { - if($this->fileView->touch($targetPath, $mtime)) { + $request = \OC::$server->getRequest(); + if (isset($request->server['HTTP_X_OC_MTIME'])) { + if($this->fileView->touch($targetPath, $request->server['HTTP_X_OC_MTIME'])) { header('X-OC-MTime: accepted'); } } @@ -325,9 +347,8 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\ * Returns whether a part file is needed for the given storage * or whether the file can be assembled/uploaded directly on the * target storage. - * - * @param \OCP\Files\Storage $storage storage to check - * @param bool true if the storage needs part file handling + * @param \OCP\Files\Storage $storage + * @return bool true if the storage needs part file handling */ private function needsPartFile($storage) { // TODO: in the future use ChunkHandler provided by storage diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index ff5a6cc8b4b..f6f0fac878b 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -123,10 +123,6 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin if (!is_null($fileId)) { $this->server->httpResponse->setHeader('OC-FileId', $fileId); } - $eTag = $node->getETag(); - if (!is_null($eTag)) { - $this->server->httpResponse->setHeader('OC-ETag', $eTag); - } } } diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php index 3173ab8a30f..adc37849286 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -281,20 +281,4 @@ abstract class OC_Connector_Sabre_Node implements \Sabre\DAV\INode, \Sabre\DAV\I } return $p; } - - /** - * Returns the ETag for a file - * - * An ETag is a unique identifier representing the current version of the - * file. If the file changes, the ETag MUST change. The ETag is an - * arbitrary string, but MUST be surrounded by double-quotes. - * - * Return null if the ETag can not effectively be determined - * - * @return mixed - */ - public function getETag() { - return '"' . $this->info->getEtag() . '"'; - } - } diff --git a/lib/private/connector/sabre/request.php b/lib/private/connector/sabre/request.php index c98b28c4d74..2ce753d916f 100644 --- a/lib/private/connector/sabre/request.php +++ b/lib/private/connector/sabre/request.php @@ -28,7 +28,7 @@ class OC_Connector_Sabre_Request extends \Sabre\HTTP\Request { * @return string */ public function getUri() { - return OC_Request::requestUri(); + return \OC::$server->getRequest()->getRequestUri(); } /** diff --git a/lib/private/db/sqlitemigrator.php b/lib/private/db/sqlitemigrator.php index 42b65634645..739bb242810 100644 --- a/lib/private/db/sqlitemigrator.php +++ b/lib/private/db/sqlitemigrator.php @@ -58,6 +58,7 @@ class SQLiteMigrator extends Migrator { $platform = $connection->getDatabasePlatform(); $platform->registerDoctrineTypeMapping('tinyint unsigned', 'integer'); $platform->registerDoctrineTypeMapping('smallint unsigned', 'integer'); + $platform->registerDoctrineTypeMapping('varchar ', 'string'); return parent::getDiff($targetSchema, $connection); } diff --git a/lib/private/defaults.php b/lib/private/defaults.php index c16ebdbe24c..a3902ee80de 100644 --- a/lib/private/defaults.php +++ b/lib/private/defaults.php @@ -1,9 +1,5 @@ <?php -if (file_exists(OC::$SERVERROOT . '/themes/' . OC_Util::getTheme() . '/defaults.php')) { - require_once 'themes/' . OC_Util::getTheme() . '/defaults.php'; -} - /** * Default strings and values which differ between the enterprise and the * community edition. Use the get methods to always get the right strings. @@ -45,8 +41,15 @@ class OC_Defaults { $this->defaultLogoClaim = ''; $this->defaultMailHeaderColor = '#1d2d44'; /* header color of mail notifications */ - if (class_exists('OC_Theme')) { - $this->theme = new OC_Theme(); + $themePath = OC::$SERVERROOT . '/themes/' . OC_Util::getTheme() . '/defaults.php'; + if (file_exists($themePath)) { + // prevent defaults.php from printing output + ob_start(); + require_once $themePath; + ob_end_clean(); + if (class_exists('OC_Theme')) { + $this->theme = new OC_Theme(); + } } } @@ -212,7 +215,8 @@ class OC_Defaults { if ($this->themeExist('getShortFooter')) { $footer = $this->theme->getShortFooter(); } else { - $footer = '<a href="'. $this->getBaseUrl() . '" target="_blank">' .$this->getEntity() . '</a>'. + $footer = '<a href="'. $this->getBaseUrl() . '" target="_blank"' . + ' rel="noreferrer">' .$this->getEntity() . '</a>'. ' – ' . $this->getSlogan(); } diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index 3c097a34962..1f30382e101 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -197,6 +197,9 @@ class Cache { $file['size'] = $file['unencrypted_size']; } $file['permissions'] = (int)$file['permissions']; + $file['mtime'] = (int)$file['mtime']; + $file['storage_mtime'] = (int)$file['storage_mtime']; + $file['size'] = 0 + $file['size']; } return $files; } else { @@ -412,12 +415,14 @@ class Cache { $result = \OC_DB::executeAudited($sql, array($this->getNumericStorageId(), $source . '/%')); $childEntries = $result->fetchAll(); $sourceLength = strlen($source); + \OC_DB::beginTransaction(); $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?'); foreach ($childEntries as $child) { $targetPath = $target . substr($child['path'], $sourceLength); \OC_DB::executeAudited($query, array($targetPath, md5($targetPath), $child['fileid'])); } + \OC_DB::commit(); } $sql = 'UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `name` = ?, `parent` =? WHERE `fileid` = ?'; @@ -438,7 +443,7 @@ class Cache { /** * @param string $file * - * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE + * @return int Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE */ public function getStatus($file) { // normalize file @@ -691,7 +696,7 @@ class Cache { * instead does a global search in the cache table * * @param int $id - * @return array, first element holding the storage id, second the path + * @return array first element holding the storage id, second the path */ static public function getById($id) { $sql = 'SELECT `storage`, `path` FROM `*PREFIX*filecache` WHERE `fileid` = ?'; diff --git a/lib/private/files/cache/changepropagator.php b/lib/private/files/cache/changepropagator.php index 2967c8f6259..36fc6e80144 100644 --- a/lib/private/files/cache/changepropagator.php +++ b/lib/private/files/cache/changepropagator.php @@ -59,8 +59,8 @@ class ChangePropagator { list($storage, $internalPath) = $this->view->resolvePath($parent); if ($storage) { $cache = $storage->getCache(); - $id = $cache->getId($internalPath); - $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath))); + $entry = $cache->get($internalPath); + $cache->update($entry['fileid'], array('mtime' => max($time, $entry['mtime']), 'etag' => $storage->getETag($internalPath))); } } } diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php index 4778a6803ba..d369398af1c 100644 --- a/lib/private/files/cache/scanner.php +++ b/lib/private/files/cache/scanner.php @@ -80,7 +80,8 @@ class Scanner extends BasicEmitter { * @return array an array of metadata of the file */ public function getData($path) { - if (!$this->storage->isReadable($path)) { + $permissions = $this->storage->getPermissions($path); + if (!$permissions & \OCP\PERMISSION_READ) { //cant read, nothing we can do \OCP\Util::writeLog('OC\Files\Cache\Scanner', "!!! Path '$path' is not accessible or present !!!", \OCP\Util::DEBUG); return null; @@ -95,7 +96,7 @@ class Scanner extends BasicEmitter { } $data['etag'] = $this->storage->getETag($path); $data['storage_mtime'] = $data['mtime']; - $data['permissions'] = $this->storage->getPermissions($path); + $data['permissions'] = $permissions; return $data; } @@ -104,9 +105,11 @@ class Scanner extends BasicEmitter { * * @param string $file * @param int $reuseExisting + * @param int $parentId + * @param array | null $cacheData existing data in the cache for the file to be scanned * @return array an array of metadata of the scanned file */ - public function scanFile($file, $reuseExisting = 0) { + public function scanFile($file, $reuseExisting = 0, $parentId = -1, $cacheData = null) { if (!self::isPartialFile($file) and !Filesystem::isFileBlacklisted($file) ) { @@ -118,7 +121,9 @@ class Scanner extends BasicEmitter { if ($parent === '.' or $parent === '/') { $parent = ''; } - $parentId = $this->cache->getId($parent); + if ($parentId === -1) { + $parentId = $this->cache->getId($parent); + } // scan the parent if it's not in the cache (id -1) and the current file is not the root folder if ($file and $parentId === -1) { @@ -128,14 +133,18 @@ class Scanner extends BasicEmitter { if ($parent) { $data['parent'] = $parentId; } - $cacheData = $this->cache->get($file); - if ($cacheData and $reuseExisting) { + if (is_null($cacheData)) { + $cacheData = $this->cache->get($file); + } + if ($cacheData and $reuseExisting and isset($cacheData['fileid'])) { // prevent empty etag if (empty($cacheData['etag'])) { $etag = $data['etag']; } else { $etag = $cacheData['etag']; } + $fileId = $cacheData['fileid']; + $data['fileid'] = $fileId; // only reuse data if the file hasn't explicitly changed if (isset($data['storage_mtime']) && isset($cacheData['storage_mtime']) && $data['storage_mtime'] === $cacheData['storage_mtime']) { $data['mtime'] = $cacheData['mtime']; @@ -150,9 +159,10 @@ class Scanner extends BasicEmitter { $newData = array_diff_assoc($data, $cacheData); } else { $newData = $data; + $fileId = -1; } if (!empty($newData)) { - $data['fileid'] = $this->addToCache($file, $newData); + $data['fileid'] = $this->addToCache($file, $newData, $fileId); $this->emit('\OC\Files\Cache\Scanner', 'postScanFile', array($file, $this->storageId)); \OC_Hook::emit('\OC\Files\Cache\Scanner', 'post_scan_file', array('path' => $file, 'storage' => $this->storageId)); } @@ -175,13 +185,19 @@ class Scanner extends BasicEmitter { /** * @param string $path * @param array $data + * @param int $fileId * @return int the id of the added file */ - protected function addToCache($path, $data) { + protected function addToCache($path, $data, $fileId = -1) { \OC_Hook::emit('Scanner', 'addToCache', array('file' => $path, 'data' => $data)); $this->emit('\OC\Files\Cache\Scanner', 'addToCache', array($path, $this->storageId, $data)); if ($this->cacheActive) { - return $this->cache->put($path, $data); + if ($fileId !== -1) { + $this->cache->update($fileId, $data); + return $fileId; + } else { + return $this->cache->put($path, $data); + } } else { return -1; } @@ -190,12 +206,17 @@ class Scanner extends BasicEmitter { /** * @param string $path * @param array $data + * @param int $fileId */ - protected function updateCache($path, $data) { + protected function updateCache($path, $data, $fileId = -1) { \OC_Hook::emit('Scanner', 'addToCache', array('file' => $path, 'data' => $data)); $this->emit('\OC\Files\Cache\Scanner', 'updateCache', array($path, $this->storageId, $data)); if ($this->cacheActive) { - $this->cache->put($path, $data); + if ($fileId !== -1) { + $this->cache->update($fileId, $data); + } else { + $this->cache->put($path, $data); + } } } @@ -212,97 +233,124 @@ class Scanner extends BasicEmitter { $reuse = ($recursive === self::SCAN_SHALLOW) ? self::REUSE_ETAG | self::REUSE_SIZE : self::REUSE_ETAG; } $data = $this->scanFile($path, $reuse); - if ($data !== null) { - $size = $this->scanChildren($path, $recursive, $reuse); + if ($data and $data['mimetype'] === 'httpd/unix-directory') { + $size = $this->scanChildren($path, $recursive, $reuse, $data); $data['size'] = $size; } return $data; } - protected function getExistingChildren($path) { + /** + * Get the children currently in the cache + * + * @param int $folderId + * @return array[] + */ + protected function getExistingChildren($folderId) { $existingChildren = array(); - if ($this->cache->inCache($path)) { - $children = $this->cache->getFolderContents($path); - foreach ($children as $child) { - $existingChildren[] = $child['name']; - } + $children = $this->cache->getFolderContentsById($folderId); + foreach ($children as $child) { + $existingChildren[$child['name']] = $child; } return $existingChildren; } /** + * Get the children from the storage + * + * @param string $folder + * @return string[] + */ + protected function getNewChildren($folder) { + $children = array(); + if ($dh = $this->storage->opendir($folder)) { + if (is_resource($dh)) { + while (($file = readdir($dh)) !== false) { + if (!Filesystem::isIgnoredDir($file)) { + $children[] = $file; + } + } + } + } + return $children; + } + + /** * scan all the files and folders in a folder * * @param string $path * @param bool $recursive * @param int $reuse + * @param array $folderData existing cache data for the folder to be scanned * @return int the size of the scanned folder or -1 if the size is unknown at this stage */ - public function scanChildren($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1) { + protected function scanChildren($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1, $folderData = null) { if ($reuse === -1) { $reuse = ($recursive === self::SCAN_SHALLOW) ? self::REUSE_ETAG | self::REUSE_SIZE : self::REUSE_ETAG; } $this->emit('\OC\Files\Cache\Scanner', 'scanFolder', array($path, $this->storageId)); $size = 0; $childQueue = array(); - $existingChildren = $this->getExistingChildren($path); - $newChildren = array(); - if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) { - $exceptionOccurred = false; - if ($this->useTransactions) { - \OC_DB::beginTransaction(); - } - if (is_resource($dh)) { - while (($file = readdir($dh)) !== false) { - $child = ($path) ? $path . '/' . $file : $file; - if (!Filesystem::isIgnoredDir($file)) { - $newChildren[] = $file; - try { - $data = $this->scanFile($child, $reuse); - if ($data) { - if ($data['mimetype'] === 'httpd/unix-directory' and $recursive === self::SCAN_RECURSIVE) { - $childQueue[] = $child; - } else if ($data['size'] === -1) { - $size = -1; - } else if ($size !== -1) { - $size += $data['size']; - } - } - } catch (\Doctrine\DBAL\DBALException $ex) { - // might happen if inserting duplicate while a scanning - // process is running in parallel - // log and ignore - \OC_Log::write('core', 'Exception while scanning file "' . $child . '": ' . $ex->getMessage(), \OC_Log::DEBUG); - $exceptionOccurred = true; - } + if (is_array($folderData) and isset($folderData['fileid'])) { + $folderId = $folderData['fileid']; + } else { + $folderId = $this->cache->getId($path); + } + $existingChildren = $this->getExistingChildren($folderId); + $newChildren = $this->getNewChildren($path); + + if ($this->useTransactions) { + \OC_DB::beginTransaction(); + } + $exceptionOccurred = false; + foreach ($newChildren as $file) { + $child = ($path) ? $path . '/' . $file : $file; + try { + $existingData = isset($existingChildren[$file]) ? $existingChildren[$file] : null; + $data = $this->scanFile($child, $reuse, $folderId, $existingData); + if ($data) { + if ($data['mimetype'] === 'httpd/unix-directory' and $recursive === self::SCAN_RECURSIVE) { + $childQueue[$child] = $data; + } else if ($data['size'] === -1) { + $size = -1; + } else if ($size !== -1) { + $size += $data['size']; } } + } catch (\Doctrine\DBAL\DBALException $ex) { + // might happen if inserting duplicate while a scanning + // process is running in parallel + // log and ignore + \OC_Log::write('core', 'Exception while scanning file "' . $child . '": ' . $ex->getMessage(), \OC_Log::DEBUG); + $exceptionOccurred = true; } - $removedChildren = \array_diff($existingChildren, $newChildren); - foreach ($removedChildren as $childName) { - $child = ($path) ? $path . '/' . $childName : $childName; - $this->removeFromCache($child); - } - if ($this->useTransactions) { - \OC_DB::commit(); - } - if ($exceptionOccurred) { - // It might happen that the parallel scan process has already - // inserted mimetypes but those weren't available yet inside the transaction - // To make sure to have the updated mime types in such cases, - // we reload them here - $this->cache->loadMimetypes(); - } + } + $removedChildren = \array_diff(array_keys($existingChildren), $newChildren); + foreach ($removedChildren as $childName) { + $child = ($path) ? $path . '/' . $childName : $childName; + $this->removeFromCache($child); + } + if ($this->useTransactions) { + \OC_DB::commit(); + } + if ($exceptionOccurred) { + // It might happen that the parallel scan process has already + // inserted mimetypes but those weren't available yet inside the transaction + // To make sure to have the updated mime types in such cases, + // we reload them here + $this->cache->loadMimetypes(); + } - foreach ($childQueue as $child) { - $childSize = $this->scanChildren($child, self::SCAN_RECURSIVE, $reuse); - if ($childSize === -1) { - $size = -1; - } else if ($size !== -1) { - $size += $childSize; - } + foreach ($childQueue as $child => $childData) { + $childSize = $this->scanChildren($child, self::SCAN_RECURSIVE, $reuse, $childData); + if ($childSize === -1) { + $size = -1; + } else if ($size !== -1) { + $size += $childSize; } - $this->updateCache($path, array('size' => $size)); + } + if (!is_array($folderData) or !isset($folderData['size']) or $folderData['size'] !== $size) { + $this->updateCache($path, array('size' => $size), $folderId); } $this->emit('\OC\Files\Cache\Scanner', 'postScanFolder', array($path, $this->storageId)); return $size; diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php index 31a4a7c21e7..9f4cbfeff8c 100644 --- a/lib/private/files/cache/updater.php +++ b/lib/private/files/cache/updater.php @@ -31,6 +31,9 @@ class Updater { } public function propagate($path, $time = null) { + if (Scanner::isPartialFile($path)) { + return; + } $this->propagator->addChange($path); $this->propagator->propagateChanges($time); } @@ -42,6 +45,9 @@ class Updater { * @param int $time */ public function update($path, $time = null) { + if(Scanner::isPartialFile($path)) { + return; + } /** * @var \OC\Files\Storage\Storage $storage * @var string $internalPath @@ -64,6 +70,9 @@ class Updater { * @param string $path */ public function remove($path) { + if (Scanner::isPartialFile($path)) { + return; + } /** * @var \OC\Files\Storage\Storage $storage * @var string $internalPath @@ -88,6 +97,9 @@ class Updater { * @param string $target */ public function rename($source, $target) { + if (Scanner::isPartialFile($source) or Scanner::isPartialFile($target)) { + return; + } /** * @var \OC\Files\Storage\Storage $sourceStorage * @var \OC\Files\Storage\Storage $targetStorage diff --git a/lib/private/files/cache/wrapper/cachejail.php b/lib/private/files/cache/wrapper/cachejail.php index 3f7ea66ea1b..bb065643cf7 100644 --- a/lib/private/files/cache/wrapper/cachejail.php +++ b/lib/private/files/cache/wrapper/cachejail.php @@ -163,7 +163,7 @@ class CacheJail extends CacheWrapper { /** * @param string $file * - * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE + * @return int Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE */ public function getStatus($file) { return $this->cache->getStatus($this->getSourcePath($file)); diff --git a/lib/private/files/cache/wrapper/cachewrapper.php b/lib/private/files/cache/wrapper/cachewrapper.php index 83811520e4b..a5997edb307 100644 --- a/lib/private/files/cache/wrapper/cachewrapper.php +++ b/lib/private/files/cache/wrapper/cachewrapper.php @@ -152,7 +152,7 @@ class CacheWrapper extends Cache { /** * @param string $file * - * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE + * @return int Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE */ public function getStatus($file) { return $this->cache->getStatus($file); @@ -260,7 +260,7 @@ class CacheWrapper extends Cache { * instead does a global search in the cache table * * @param int $id - * @return array, first element holding the storage id, second the path + * @return array first element holding the storage id, second the path */ static public function getById($id) { return parent::getById($id); diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php index e4a397dcca2..1acb62033dd 100644 --- a/lib/private/files/fileinfo.php +++ b/lib/private/files/fileinfo.php @@ -159,11 +159,10 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { * @return \OCP\Files\FileInfo::TYPE_FILE|\OCP\Files\FileInfo::TYPE_FOLDER */ public function getType() { - if (isset($this->data['type'])) { - return $this->data['type']; - } else { - return $this->getMimetype() === 'httpd/unix-directory' ? self::TYPE_FOLDER : self::TYPE_FILE; + if (!isset($this->data['type'])) { + $this->data['type'] = ($this->getMimetype() === 'httpd/unix-directory') ? self::TYPE_FOLDER : self::TYPE_FILE; } + return $this->data['type']; } public function getData() { diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php index 140d892652f..04f82d88cd1 100644 --- a/lib/private/files/filesystem.php +++ b/lib/private/files/filesystem.php @@ -543,9 +543,11 @@ class Filesystem { * @return bool */ static public function isFileBlacklisted($filename) { + $filename = self::normalizePath($filename); + $blacklist = \OC_Config::getValue('blacklisted_files', array('.htaccess')); $filename = strtolower(basename($filename)); - return (in_array($filename, $blacklist)); + return in_array($filename, $blacklist); } /** @@ -721,9 +723,18 @@ class Filesystem { * Fix common problems with a file path * @param string $path * @param bool $stripTrailingSlash + * @param bool $isAbsolutePath * @return string */ public static function normalizePath($path, $stripTrailingSlash = true, $isAbsolutePath = false) { + /** + * FIXME: This is a workaround for existing classes and files which call + * this function with another type than a valid string. This + * conversion should get removed as soon as all existing + * function calls have been fixed. + */ + $path = (string)$path; + $cacheKey = json_encode([$path, $stripTrailingSlash, $isAbsolutePath]); if(isset(self::$normalizedPathCache[$cacheKey])) { @@ -734,6 +745,9 @@ class Filesystem { return '/'; } + //normalize unicode if possible + $path = \OC_Util::normalizeUnicode($path); + //no windows style slashes $path = str_replace('\\', '/', $path); @@ -770,9 +784,6 @@ class Filesystem { $path = substr($path, 0, -2); } - //normalize unicode if possible - $path = \OC_Util::normalizeUnicode($path); - $normalizedPath = $windows_drive_letter . $path; self::$normalizedPathCache[$cacheKey] = $normalizedPath; diff --git a/lib/private/files/mapper.php b/lib/private/files/mapper.php index 5e78ef03dd0..86c23c62e4b 100644 --- a/lib/private/files/mapper.php +++ b/lib/private/files/mapper.php @@ -115,6 +115,8 @@ class Mapper /** * @param string $logicPath + * @return null + * @throws \OC\DatabaseException */ private function resolveLogicPath($logicPath) { $logicPath = $this->resolveRelativePath($logicPath); @@ -162,7 +164,8 @@ class Mapper /** * @param string $logicPath - * @param boolean $store + * @param bool $store + * @return string */ private function create($logicPath, $store) { $logicPath = $this->resolveRelativePath($logicPath); @@ -191,7 +194,9 @@ class Mapper } /** - * @param integer $index + * @param string $path + * @param int $index + * @return string */ public function slugifyPath($path, $index = null) { $path = $this->stripRootFolder($path, $this->unchangedPhysicalRoot); @@ -205,7 +210,7 @@ class Mapper continue; } - $sluggedElements[] = self::slugify($pathElement); + $sluggedElements[] = $this->slugify($pathElement); } // apply index to file name @@ -253,13 +258,18 @@ class Mapper // trim ending dots (for security reasons and win compatibility) $text = preg_replace('~\.+$~', '', $text); - if (empty($text)) { + if (empty($text) || \OC\Files\Filesystem::isFileBlacklisted($text)) { /** * Item slug would be empty. Previously we used uniqid() here. * However this means that the behaviour is not reproducible, so * when uploading files into a "empty" folder, the folders name is * different. * + * The other case is, that the slugified name would be a blacklisted + * filename. In this case we just use the same workaround by + * returning the secure md5 hash of the original name. + * + * * If there would be a md5() hash collision, the deduplicate check * will spot this and append an index later, so this should not be * a problem. diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index b2bf41f751c..9c233e447a6 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -343,7 +343,7 @@ abstract class Common implements \OC\Files\Storage\Storage { * get the owner of a path * * @param string $path The path to get the owner - * @return string uid or false + * @return string|false uid or false */ public function getOwner($path) { return \OC_User::getUser(); @@ -353,7 +353,7 @@ abstract class Common implements \OC\Files\Storage\Storage { * get the ETag for a file or folder * * @param string $path - * @return string + * @return string|false */ public function getETag($path) { $ETagFunction = \OC_Connector_Sabre_Node::$ETagFunction; @@ -400,7 +400,7 @@ abstract class Common implements \OC\Files\Storage\Storage { * get the free space in the storage * * @param string $path - * @return int + * @return int|false */ public function free_space($path) { return \OCP\Files\FileInfo::SPACE_UNKNOWN; @@ -445,7 +445,7 @@ abstract class Common implements \OC\Files\Storage\Storage { * For now the returned array can hold the parameter url - in future more attributes might follow. * * @param string $path - * @return array + * @return array|false */ public function getDirectDownload($path) { return []; diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php index 2d4916df08a..4f7b3ff8940 100644 --- a/lib/private/files/storage/dav.php +++ b/lib/private/files/storage/dav.php @@ -128,6 +128,7 @@ class DAV extends \OC\Files\Storage\Common { return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -149,6 +150,7 @@ class DAV extends \OC\Files\Storage\Common { return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -166,6 +168,7 @@ class DAV extends \OC\Files\Storage\Common { return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -284,6 +287,7 @@ class DAV extends \OC\Files\Storage\Common { return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -337,6 +341,7 @@ class DAV extends \OC\Files\Storage\Common { return true; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -354,6 +359,7 @@ class DAV extends \OC\Files\Storage\Common { return true; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -374,6 +380,7 @@ class DAV extends \OC\Files\Storage\Common { return array(); } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -398,8 +405,11 @@ class DAV extends \OC\Files\Storage\Common { } else { return false; } + } catch (Exception\NotFound $e) { + return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -440,8 +450,16 @@ class DAV extends \OC\Files\Storage\Common { try { $response = $this->client->request($method, $this->encodePath($path), $body); return $response['statusCode'] == $expected; + } catch (Exception\NotFound $e) { + if ($method === 'DELETE') { + return false; + } + + $this->convertSabreException($e); + return false; } catch (\Sabre\DAV\Exception $e) { $this->convertSabreException($e); + return false; } catch (\Exception $e) { // TODO: log for now, but in the future need to wrap/rethrow exception \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR); @@ -549,6 +567,7 @@ class DAV extends \OC\Files\Storage\Common { return false; } catch (Exception $e) { $this->convertSabreException($e); + return false; } } @@ -567,6 +586,9 @@ class DAV extends \OC\Files\Storage\Common { if ($e instanceof \Sabre\DAV\Exception\NotAuthenticated) { // either password was changed or was invalid all along throw new StorageInvalidException(get_class($e).': '.$e->getMessage()); + } else if ($e instanceof \Sabre\DAV\Exception\MethodNotAllowed) { + // ignore exception, false will be returned + return; } throw new StorageNotAvailableException(get_class($e).': '.$e->getMessage()); diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 6c720a6f5c0..de1e6e17e30 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -6,6 +6,12 @@ * See the COPYING-README file. */ + +namespace OC\Files; + +use OC\Files\Cache\Updater; +use OC\Files\Mount\MoveableMount; + /** * Class to provide access to ownCloud filesystem via a "view", and methods for * working with files within that view (e.g. read, write, delete, etc.). Each @@ -22,12 +28,6 @@ * Filesystem functions are not called directly; they are passed to the correct * \OC\Files\Storage\Storage object */ - -namespace OC\Files; - -use OC\Files\Cache\Updater; -use OC\Files\Mount\MoveableMount; - class View { private $fakeRoot = ''; @@ -36,7 +36,15 @@ class View { */ protected $updater; + /** + * @param string $root + * @throws \Exception If $root contains an invalid path + */ public function __construct($root = '') { + if(!Filesystem::isValidPath($root)) { + throw new \Exception(); + } + $this->fakeRoot = $root; $this->updater = new Updater($this); } @@ -87,6 +95,11 @@ class View { if ($this->fakeRoot == '') { return $path; } + + if (rtrim($path,'/') === rtrim($this->fakeRoot, '/')) { + return '/'; + } + if (strpos($path, $this->fakeRoot) !== 0) { return null; } else { @@ -237,11 +250,19 @@ class View { return $this->basicOperation('opendir', $path, array('read')); } + /** + * @param $handle + * @return mixed + */ public function readdir($handle) { $fsLocal = new Storage\Local(array('datadir' => '/')); return $fsLocal->readdir($handle); } + /** + * @param string $path + * @return bool|mixed + */ public function is_dir($path) { if ($path == '/') { return true; @@ -249,6 +270,10 @@ class View { return $this->basicOperation('is_dir', $path); } + /** + * @param string $path + * @return bool|mixed + */ public function is_file($path) { if ($path == '/') { return false; @@ -256,18 +281,35 @@ class View { return $this->basicOperation('is_file', $path); } + /** + * @param string $path + * @return mixed + */ public function stat($path) { return $this->basicOperation('stat', $path); } + /** + * @param string $path + * @return mixed + */ public function filetype($path) { return $this->basicOperation('filetype', $path); } + /** + * @param string $path + * @return mixed + */ public function filesize($path) { return $this->basicOperation('filesize', $path); } + /** + * @param string $path + * @return bool|mixed + * @throws \OCP\Files\InvalidPathException + */ public function readfile($path) { $this->assertPathLength($path); @ob_end_clean(); @@ -284,18 +326,34 @@ class View { return false; } + /** + * @param string $path + * @return mixed + */ public function isCreatable($path) { return $this->basicOperation('isCreatable', $path); } + /** + * @param string $path + * @return mixed + */ public function isReadable($path) { return $this->basicOperation('isReadable', $path); } + /** + * @param string $path + * @return mixed + */ public function isUpdatable($path) { return $this->basicOperation('isUpdatable', $path); } + /** + * @param string $path + * @return bool|mixed + */ public function isDeletable($path) { $absolutePath = $this->getAbsolutePath($path); $mount = Filesystem::getMountManager()->find($absolutePath); @@ -305,10 +363,18 @@ class View { return $this->basicOperation('isDeletable', $path); } + /** + * @param string $path + * @return mixed + */ public function isSharable($path) { return $this->basicOperation('isSharable', $path); } + /** + * @param string $path + * @return bool|mixed + */ public function file_exists($path) { if ($path == '/') { return true; @@ -316,10 +382,19 @@ class View { return $this->basicOperation('file_exists', $path); } + /** + * @param string $path + * @return mixed + */ public function filemtime($path) { return $this->basicOperation('filemtime', $path); } + /** + * @param string $path + * @param int|string $mtime + * @return bool + */ public function touch($path, $mtime = null) { if (!is_null($mtime) and !is_numeric($mtime)) { $mtime = strtotime($mtime); @@ -347,10 +422,19 @@ class View { return true; } + /** + * @param string $path + * @return mixed + */ public function file_get_contents($path) { return $this->basicOperation('file_get_contents', $path, array('read')); } + /** + * @param bool $exists + * @param string $path + * @param bool $run + */ protected function emit_file_hooks_pre($exists, $path, &$run) { if (!$exists) { \OC_Hook::emit(Filesystem::CLASSNAME, Filesystem::signal_create, array( @@ -369,6 +453,10 @@ class View { )); } + /** + * @param bool $exists + * @param string $path + */ protected function emit_file_hooks_post($exists, $path) { if (!$exists) { \OC_Hook::emit(Filesystem::CLASSNAME, Filesystem::signal_post_create, array( @@ -384,6 +472,11 @@ class View { )); } + /** + * @param string $path + * @param mixed $data + * @return bool|mixed + */ public function file_put_contents($path, $data) { if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); @@ -423,6 +516,10 @@ class View { } } + /** + * @param string $path + * @return bool|mixed + */ public function unlink($path) { if ($path === '' || $path === '/') { // do not allow deleting the root @@ -559,6 +656,12 @@ class View { } } + /** + * @param string $path1 + * @param string $path2 + * @param bool $preserveMtime + * @return bool|mixed + */ public function copy($path1, $path2, $preserveMtime = false) { $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : ''; $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : ''; @@ -684,6 +787,11 @@ class View { return $this->basicOperation('fopen', $path, $hooks, $mode); } + /** + * @param string $path + * @return bool|string + * @throws \OCP\Files\InvalidPathException + */ public function toTmpFile($path) { $this->assertPathLength($path); if (Filesystem::isValidPath($path)) { @@ -701,6 +809,12 @@ class View { } } + /** + * @param string $tmpFile + * @param string $path + * @return bool|mixed + * @throws \OCP\Files\InvalidPathException + */ public function fromTmpFile($tmpFile, $path) { $this->assertPathLength($path); if (Filesystem::isValidPath($path)) { @@ -732,11 +846,23 @@ class View { } } + + /** + * @param string $path + * @return mixed + * @throws \OCP\Files\InvalidPathException + */ public function getMimeType($path) { $this->assertPathLength($path); return $this->basicOperation('getMimeType', $path); } + /** + * @param string $type + * @param string $path + * @param bool $raw + * @return bool|null|string + */ public function hash($type, $path, $raw = false) { $postFix = (substr($path, -1, 1) === '/') ? '/' : ''; $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); @@ -762,6 +888,11 @@ class View { return null; } + /** + * @param string $path + * @return mixed + * @throws \OCP\Files\InvalidPathException + */ public function free_space($path = '/') { $this->assertPathLength($path); return $this->basicOperation('free_space', $path); @@ -806,7 +937,7 @@ class View { if (in_array('delete', $hooks) and $result) { $this->updater->remove($path); } - if (in_array('write', $hooks)) { + if (in_array('write', $hooks) and $operation !== 'fopen') { $this->updater->update($path); } if (in_array('touch', $hooks)) { diff --git a/lib/private/helper.php b/lib/private/helper.php index 6268bd3d42e..887c3f33402 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -40,7 +40,8 @@ class OC_Helper { 'application/x-gimp' => 'image', 'application/x-photoshop' => 'image', - 'application/x-font-ttf' => 'font', + 'application/font-sfnt' => 'font', + 'application/x-font' => 'font', 'application/font-woff' => 'font', 'application/vnd.ms-fontobject' => 'font', @@ -288,12 +289,7 @@ class OC_Helper { **/ public static function userAvatarSet($user) { $avatar = new \OC_Avatar($user); - $image = $avatar->get(1); - if ($image instanceof \OC_Image) { - return true; - } else { - return false; - } + return $avatar->exists(); } /** diff --git a/lib/private/hook.php b/lib/private/hook.php index c9ca58f779e..00fb4cb0ff5 100644 --- a/lib/private/hook.php +++ b/lib/private/hook.php @@ -52,7 +52,7 @@ class OC_Hook{ * @param string $signalclass class name of emitter * @param string $signalname name of signal * @param mixed $params default: array() array with additional data - * @return bool, true if slots exists or false if not + * @return bool true if slots exists or false if not * * Emits a signal. To get data from the slot use references! * diff --git a/lib/private/httphelper.php b/lib/private/httphelper.php index 1f3482b3514..08c35e4ae08 100644 --- a/lib/private/httphelper.php +++ b/lib/private/httphelper.php @@ -214,7 +214,8 @@ class HTTPHelper { curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, count($fields)); - curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsString); + curl_setopt($ch, CURLOPT_POSTFIELDS, (string)$fieldsString); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); if (is_readable($certBundle)) { curl_setopt($ch, CURLOPT_CAINFO, $certBundle); } diff --git a/lib/private/image.php b/lib/private/image.php index f5f9a04facc..317b6fde160 100644 --- a/lib/private/image.php +++ b/lib/private/image.php @@ -391,7 +391,7 @@ class OC_Image { $rotate = 90; break; } - if($flip) { + if($flip && function_exists('imageflip')) { imageflip($this->resource, IMG_FLIP_HORIZONTAL); } if ($rotate) { diff --git a/lib/private/installer.php b/lib/private/installer.php index 4f4a498b739..8ed15a3a5d8 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -241,7 +241,7 @@ class OC_Installer{ if(!isset($data['href'])) { throw new \Exception($l->t("No href specified when installing app from http")); } - copy($data['href'], $path); + file_put_contents($path, \OC_Util::getUrlContent($data['href'])); }else{ if(!isset($data['path'])) { throw new \Exception($l->t("No path specified when installing app from local file")); @@ -308,7 +308,7 @@ class OC_Installer{ } $info=OC_App::getAppInfo($extractDir.'/appinfo/info.xml', true); // check the code for not allowed calls - if(!$isShipped && !OC_Installer::checkCode($info['id'], $extractDir)) { + if(!$isShipped && !OC_Installer::checkCode($extractDir)) { OC_Helper::rmdirr($extractDir); throw new \Exception($l->t("App can't be installed because of not allowed code in the App")); } @@ -511,7 +511,7 @@ class OC_Installer{ OC_Appconfig::setValue($app, 'ocsid', $info['ocsid']); } - //set remote/public handelers + //set remote/public handlers foreach($info['remote'] as $name=>$path) { OCP\CONFIG::setAppValue('core', 'remote_'.$name, $app.'/'.$path); } @@ -529,59 +529,15 @@ class OC_Installer{ * @param string $folder the folder of the app to check * @return boolean true for app is o.k. and false for app is not o.k. */ - public static function checkCode($appname, $folder) { - $blacklist=array( - // classes replaced by the public api - 'OC_API::', - 'OC_App::', - 'OC_AppConfig::', - 'OC_Avatar', - 'OC_BackgroundJob::', - 'OC_Config::', - 'OC_DB::', - 'OC_Files::', - 'OC_Helper::', - 'OC_Hook::', - 'OC_Image::', - 'OC_JSON::', - 'OC_L10N::', - 'OC_Log::', - 'OC_Mail::', - 'OC_Preferences::', - 'OC_Request::', - 'OC_Response::', - 'OC_Template::', - 'OC_User::', - 'OC_Util::', - ); - + public static function checkCode($folder) { // is the code checker enabled? - if(OC_Config::getValue('appcodechecker', false)) { - // check if grep is installed - $grep = \OC_Helper::findBinaryPath('grep'); - if (!$grep) { - OC_Log::write('core', - 'grep not installed. So checking the code of the app "'.$appname.'" was not possible', - OC_Log::ERROR); - return true; - } - - // iterate the bad patterns - foreach($blacklist as $bl) { - $cmd = 'grep --include \\*.php -ri '.escapeshellarg($bl).' '.$folder.''; - $result = exec($cmd); - // bad pattern found - if($result<>'') { - OC_Log::write('core', - 'App "'.$appname.'" is using a not allowed call "'.$bl.'". Installation refused.', - OC_Log::ERROR); - return false; - } - } - return true; - - }else{ + if(!OC_Config::getValue('appcodechecker', false)) { return true; } + + $codeChecker = new \OC\App\CodeChecker(); + $errors = $codeChecker->analyseFolder($folder); + + return empty($errors); } } diff --git a/lib/private/json.php b/lib/private/json.php index f2719dd2bc7..9117abf7fb9 100644 --- a/lib/private/json.php +++ b/lib/private/json.php @@ -6,10 +6,15 @@ * See the COPYING-README file. */ +/** + * Class OC_JSON + * @deprecated Use a AppFramework JSONResponse instead + */ class OC_JSON{ static protected $send_content_type_header = false; /** * set Content-Type header to jsonrequest + * @deprecated Use a AppFramework JSONResponse instead */ public static function setContentTypeHeader($type='application/json') { if (!self::$send_content_type_header) { @@ -20,9 +25,10 @@ class OC_JSON{ } /** - * Check if the app is enabled, send json error msg if not - * @param string $app - */ + * Check if the app is enabled, send json error msg if not + * @param string $app + * @deprecated Use the AppFramework instead. It will automatically check if the app is enabled. + */ public static function checkAppEnabled($app) { if( !OC_App::isEnabled($app)) { $l = \OC::$server->getL10N('lib'); @@ -32,8 +38,9 @@ class OC_JSON{ } /** - * Check if the user is logged in, send json error msg if not - */ + * Check if the user is logged in, send json error msg if not + * @deprecated Use annotation based ACLs from the AppFramework instead + */ public static function checkLoggedIn() { if( !OC_User::isLoggedIn()) { $l = \OC::$server->getL10N('lib'); @@ -44,6 +51,7 @@ class OC_JSON{ /** * Check an ajax get/post call if the request token is valid, send json error msg if not. + * @deprecated Use annotation based CSRF checks from the AppFramework instead */ public static function callCheck() { if( !OC_Util::isCallRegistered()) { @@ -54,8 +62,9 @@ class OC_JSON{ } /** - * Check if the user is a admin, send json error msg if not. - */ + * Check if the user is a admin, send json error msg if not. + * @deprecated Use annotation based ACLs from the AppFramework instead + */ public static function checkAdminUser() { if( !OC_User::isAdminUser(OC_User::getUser())) { $l = \OC::$server->getL10N('lib'); @@ -67,6 +76,7 @@ class OC_JSON{ /** * Check is a given user exists - send json error msg if not * @param string $user + * @deprecated Use a AppFramework JSONResponse instead */ public static function checkUserExists($user) { if (!OCP\User::userExists($user)) { @@ -77,10 +87,10 @@ class OC_JSON{ } - /** - * Check if the user is a subadmin, send json error msg if not - */ + * Check if the user is a subadmin, send json error msg if not + * @deprecated Use annotation based ACLs from the AppFramework instead + */ public static function checkSubAdminUser() { if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) { $l = \OC::$server->getL10N('lib'); @@ -90,16 +100,18 @@ class OC_JSON{ } /** - * Send json error msg - */ + * Send json error msg + * @deprecated Use a AppFramework JSONResponse instead + */ public static function error($data = array()) { $data['status'] = 'error'; self::encodedPrint($data); } /** - * Send json success msg - */ + * Send json success msg + * @deprecated Use a AppFramework JSONResponse instead + */ public static function success($data = array()) { $data['status'] = 'success'; self::encodedPrint($data); @@ -115,8 +127,9 @@ class OC_JSON{ } /** - * Encode and print $data in json format - */ + * Encode and print $data in json format + * @deprecated Use a AppFramework JSONResponse instead + */ public static function encodedPrint($data, $setContentType=true) { if($setContentType) { self::setContentTypeHeader(); @@ -126,6 +139,7 @@ class OC_JSON{ /** * Encode JSON + * @deprecated Use a AppFramework JSONResponse instead */ public static function encode($data) { if (is_array($data)) { diff --git a/lib/private/legacy/preferences.php b/lib/private/legacy/preferences.php deleted file mode 100644 index 907aafbc915..00000000000 --- a/lib/private/legacy/preferences.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php -/** - * ownCloud - * - * @author Frank Karlitschek - * @author Jakob Sack - * @copyright 2012 Frank Karlitschek frank@owncloud.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - -/** - * This class provides an easy way for storing user preferences. - * @deprecated use \OCP\IConfig methods instead - */ -class OC_Preferences{ - /** - * Get the available keys for an app - * @param string $user user - * @param string $app the app we are looking for - * @return array an array of key names - * @deprecated use getUserKeys of \OCP\IConfig instead - * - * This function gets all keys of an app of an user. Please note that the - * values are not returned. - */ - public static function getKeys( $user, $app ) { - return \OC::$server->getConfig()->getUserKeys($user, $app); - } - - /** - * Gets the preference - * @param string $user user - * @param string $app app - * @param string $key key - * @param string $default = null, default value if the key does not exist - * @return string the value or $default - * @deprecated use getUserValue of \OCP\IConfig instead - * - * This function gets a value from the preferences table. If the key does - * not exist the default value will be returned - */ - public static function getValue( $user, $app, $key, $default = null ) { - return \OC::$server->getConfig()->getUserValue($user, $app, $key, $default); - } - - /** - * sets a value in the preferences - * @param string $user user - * @param string $app app - * @param string $key key - * @param string $value value - * @param string $preCondition only set value if the key had a specific value before - * @return bool true if value was set, otherwise false - * @deprecated use setUserValue of \OCP\IConfig instead - * - * Adds a value to the preferences. If the key did not exist before, it - * will be added automagically. - */ - public static function setValue( $user, $app, $key, $value, $preCondition = null ) { - try { - \OC::$server->getConfig()->setUserValue($user, $app, $key, $value, $preCondition); - return true; - } catch(\OCP\PreConditionNotMetException $e) { - return false; - } - } - - /** - * Deletes a key - * @param string $user user - * @param string $app app - * @param string $key key - * @return bool true - * @deprecated use deleteUserValue of \OCP\IConfig instead - * - * Deletes a key. - */ - public static function deleteKey( $user, $app, $key ) { - \OC::$server->getConfig()->deleteUserValue($user, $app, $key); - return true; - } - - /** - * Remove user from preferences - * @param string $user user - * @return bool - * @deprecated use deleteUser of \OCP\IConfig instead - * - * Removes all keys in preferences belonging to the user. - */ - public static function deleteUser( $user ) { - \OC::$server->getConfig()->deleteAllUserValues($user); - return true; - } - - /** - * Remove app from all users - * @param string $app app - * @return bool - * @deprecated use deleteAppFromAllUsers of \OCP\IConfig instead - * - * Removes all keys in preferences belonging to the app. - */ - public static function deleteAppFromAllUsers( $app ) { - \OC::$server->getConfig()->deleteAppFromAllUsers($app); - return true; - } -} diff --git a/lib/private/log/owncloud.php b/lib/private/log/owncloud.php index c8ae61032aa..62c2da6febe 100644 --- a/lib/private/log/owncloud.php +++ b/lib/private/log/owncloud.php @@ -68,8 +68,9 @@ class OC_Log_Owncloud { $timezone = new DateTimeZone('UTC'); } $time = new DateTime(null, $timezone); - $reqId = \OC_Request::getRequestID(); - $remoteAddr = \OC_Request::getRemoteAddress(); + $request = \OC::$server->getRequest(); + $reqId = $request->getId(); + $remoteAddr = $request->getRemoteAddress(); // remove username/passwords from URLs before writing the to the log file $time = $time->format($format); if($minLevel == OC_Log::DEBUG) { diff --git a/lib/private/memcache/apcu.php b/lib/private/memcache/apcu.php index 7f780f32718..1043690a361 100644 --- a/lib/private/memcache/apcu.php +++ b/lib/private/memcache/apcu.php @@ -14,6 +14,8 @@ class APCu extends APC { return false; } elseif (!ini_get('apc.enable_cli') && \OC::$CLI) { return false; + } elseif (version_compare(phpversion('apc'), '4.0.6') === -1) { + return false; } else { return true; } diff --git a/lib/private/memcache/arraycache.php b/lib/private/memcache/arraycache.php new file mode 100644 index 00000000000..9456c0f80c6 --- /dev/null +++ b/lib/private/memcache/arraycache.php @@ -0,0 +1,71 @@ +<?php +/** + * Copyright (c) 2015 Joas Schilling <nickvergessen@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Memcache; + +class ArrayCache extends Cache { + /** @var array Array with the cached data */ + protected $cachedData = array(); + + /** + * {@inheritDoc} + */ + public function get($key) { + if ($this->hasKey($key)) { + return $this->cachedData[$key]; + } + return null; + } + + /** + * {@inheritDoc} + */ + public function set($key, $value, $ttl = 0) { + $this->cachedData[$key] = $value; + return true; + } + + /** + * {@inheritDoc} + */ + public function hasKey($key) { + return isset($this->cachedData[$key]); + } + + /** + * {@inheritDoc} + */ + public function remove($key) { + unset($this->cachedData[$key]); + return true; + } + + /** + * {@inheritDoc} + */ + public function clear($prefix = '') { + if ($prefix === '') { + $this->cachedData = []; + return true; + } + + foreach ($this->cachedData as $key => $value) { + if (strpos($key, $prefix) === 0) { + $this->remove($key); + } + } + return true; + } + + /** + * {@inheritDoc} + */ + static public function isAvailable() { + return true; + } +} diff --git a/lib/private/memcache/factory.php b/lib/private/memcache/factory.php index 1e663eecfe1..e8a91c52269 100644 --- a/lib/private/memcache/factory.php +++ b/lib/private/memcache/factory.php @@ -42,7 +42,7 @@ class Factory implements ICacheFactory { } elseif (Memcached::isAvailable()) { return new Memcached($prefix); } else { - return new Null($prefix); + return new ArrayCache($prefix); } } diff --git a/lib/private/mimetypes.list.php b/lib/private/mimetypes.list.php index 4f11829859a..265fffa7db3 100644 --- a/lib/private/mimetypes.list.php +++ b/lib/private/mimetypes.list.php @@ -104,9 +104,10 @@ return array( 'oga' => array('audio/ogg', null), 'ogg' => array('audio/ogg', null), 'ogv' => array('video/ogg', null), - 'otf' => array('font/opentype', null), + 'otf' => array('application/font-sfnt', null), 'pages' => array('application/x-iwork-pages-sffpages', null), 'pdf' => array('application/pdf', null), + 'pfb' => array('application/x-font', null), 'php' => array('application/x-php', null), 'pl' => array('application/x-perl', null), 'png' => array('image/png', null), @@ -137,7 +138,7 @@ return array( 'tgz' => array('application/x-compressed', null), 'tiff' => array('image/tiff', null), 'tif' => array('image/tiff', null), - 'ttf' => array('application/x-font-ttf', null), + 'ttf' => array('application/font-sfnt', null), 'txt' => array('text/plain', null), 'vcard' => array('text/vcard', null), 'vcf' => array('text/vcard', null), diff --git a/lib/private/naturalsort.php b/lib/private/naturalsort.php index 6e259630f79..d511bfa3f66 100644 --- a/lib/private/naturalsort.php +++ b/lib/private/naturalsort.php @@ -12,6 +12,7 @@ namespace OC; class NaturalSort { private static $instance; private $collator; + private $cache = array(); /** * Split the given string in chunks of numbers and strings @@ -21,13 +22,15 @@ class NaturalSort { private function naturalSortChunkify($t) { // Adapted and ported to PHP from // http://my.opera.com/GreyWyvern/blog/show.dml/1671288 + if (isset($this->cache[$t])) { + return $this->cache[$t]; + } $tz = array(); $x = 0; $y = -1; $n = null; - $length = strlen($t); - while ($x < $length) { + while (isset($t[$x])) { $c = $t[$x]; // only include the dot in strings $m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9')); @@ -40,6 +43,7 @@ class NaturalSort { $tz[$y] .= $c; $x++; } + $this->cache[$t] = $tz; return $tz; } @@ -75,14 +79,13 @@ class NaturalSort { // instead of ["test.txt", "test (2).txt"] $aa = self::naturalSortChunkify($a); $bb = self::naturalSortChunkify($b); - $alen = count($aa); - $blen = count($bb); - for ($x = 0; $x < $alen && $x < $blen; $x++) { + for ($x = 0; isset($aa[$x]) && isset($bb[$x]); $x++) { $aChunk = $aa[$x]; $bChunk = $bb[$x]; if ($aChunk !== $bChunk) { - if (is_numeric($aChunk) && is_numeric($bChunk)) { + // test first character (character comparison, not number comparison) + if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') { $aNum = (int)$aChunk; $bNum = (int)$bChunk; return $aNum - $bNum; @@ -90,7 +93,7 @@ class NaturalSort { return self::getCollator()->compare($aChunk, $bChunk); } } - return $alen - $blen; + return count($aa) - count($bb); } /** diff --git a/lib/private/ocs.php b/lib/private/ocs.php index 214b28fa22c..bbe642a247d 100644 --- a/lib/private/ocs.php +++ b/lib/private/ocs.php @@ -121,7 +121,7 @@ class OC_OCS { * @param int|string $itemsperpage * @return string xml/json */ - private static function generateXml($format, $status, $statuscode, + public static function generateXml($format, $status, $statuscode, $message, $data=array(), $tag='', $tagattribute='', $dimension=-1, $itemscount='', $itemsperpage='') { if($format=='json') { $json=array(); diff --git a/lib/private/preferences.php b/lib/private/preferences.php deleted file mode 100644 index cd4a9fd1c19..00000000000 --- a/lib/private/preferences.php +++ /dev/null @@ -1,181 +0,0 @@ -<?php -/** - * ownCloud - * - * @author Frank Karlitschek - * @author Jakob Sack - * @copyright 2012 Frank Karlitschek frank@owncloud.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ -/* - * - * The following SQL statement is just a help for developers and will not be - * executed! - * - * CREATE TABLE `preferences` ( - * `userid` VARCHAR( 255 ) NOT NULL , - * `appid` VARCHAR( 255 ) NOT NULL , - * `configkey` VARCHAR( 255 ) NOT NULL , - * `configvalue` VARCHAR( 255 ) NOT NULL - * ) - * - */ - -namespace OC; - -use OCP\IDBConnection; -use OCP\PreConditionNotMetException; - - -/** - * This class provides an easy way for storing user preferences. - * @deprecated use \OCP\IConfig methods instead - */ -class Preferences { - - /** - * 3 dimensional array with the following structure: - * [ $userId => - * [ $appId => - * [ $key => $value ] - * ] - * ] - * - * @var array $cache - */ - protected $cache = array(); - - /** @var \OCP\IConfig */ - protected $config; - - /** - * @param \OCP\IDBConnection $conn - */ - public function __construct(IDBConnection $conn) { - $this->config = \OC::$server->getConfig(); - } - - /** - * Get the available keys for an app - * @param string $user user - * @param string $app the app we are looking for - * @return array an array of key names - * @deprecated use getUserKeys of \OCP\IConfig instead - * - * This function gets all keys of an app of an user. Please note that the - * values are not returned. - */ - public function getKeys($user, $app) { - return $this->config->getUserKeys($user, $app); - } - - /** - * Gets the preference - * @param string $user user - * @param string $app app - * @param string $key key - * @param string $default = null, default value if the key does not exist - * @return string the value or $default - * @deprecated use getUserValue of \OCP\IConfig instead - * - * This function gets a value from the preferences table. If the key does - * not exist the default value will be returned - */ - public function getValue($user, $app, $key, $default = null) { - return $this->config->getUserValue($user, $app, $key, $default); - } - - /** - * sets a value in the preferences - * @param string $user user - * @param string $app app - * @param string $key key - * @param string $value value - * @param string $preCondition only set value if the key had a specific value before - * @return bool true if value was set, otherwise false - * @deprecated use setUserValue of \OCP\IConfig instead - * - * Adds a value to the preferences. If the key did not exist before, it - * will be added automagically. - */ - public function setValue($user, $app, $key, $value, $preCondition = null) { - try { - $this->config->setUserValue($user, $app, $key, $value, $preCondition); - return true; - } catch(PreConditionNotMetException $e) { - return false; - } - } - - /** - * Gets the preference for an array of users - * @param string $app - * @param string $key - * @param array $users - * @return array Mapped values: userid => value - * @deprecated use getUserValueForUsers of \OCP\IConfig instead - */ - public function getValueForUsers($app, $key, $users) { - return $this->config->getUserValueForUsers($app, $key, $users); - } - - /** - * Gets the users for a preference - * @param string $app - * @param string $key - * @param string $value - * @return array - * @deprecated use getUsersForUserValue of \OCP\IConfig instead - */ - public function getUsersForValue($app, $key, $value) { - return $this->config->getUsersForUserValue($app, $key, $value); - } - - /** - * Deletes a key - * @param string $user user - * @param string $app app - * @param string $key key - * @deprecated use deleteUserValue of \OCP\IConfig instead - * - * Deletes a key. - */ - public function deleteKey($user, $app, $key) { - $this->config->deleteUserValue($user, $app, $key); - } - - /** - * Remove user from preferences - * @param string $user user - * @deprecated use deleteAllUserValues of \OCP\IConfig instead - * - * Removes all keys in preferences belonging to the user. - */ - public function deleteUser($user) { - $this->config->deleteAllUserValues($user); - } - - /** - * Remove app from all users - * @param string $app app - * @deprecated use deleteAppFromAllUsers of \OCP\IConfig instead - * - * Removes all keys in preferences belonging to the app. - */ - public function deleteAppFromAllUsers($app) { - $this->config->deleteAppFromAllUsers($app); - } -} diff --git a/lib/private/request.php b/lib/private/request.php deleted file mode 100644 index 3bf7d94d9cf..00000000000 --- a/lib/private/request.php +++ /dev/null @@ -1,342 +0,0 @@ -<?php -/** - * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -class OC_Request { - - const USER_AGENT_IE = '/MSIE/'; - // Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent - const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#'; - const USER_AGENT_FREEBOX = '#^Mozilla/5\.0$#'; - const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)$/'; - static protected $reqId; - - /** - * Returns the remote address, if the connection came from a trusted proxy and `forwarded_for_headers` has been configured - * then the IP address specified in this header will be returned instead. - * Do always use this instead of $_SERVER['REMOTE_ADDR'] - * @return string IP address - */ - public static function getRemoteAddress() { - $remoteAddress = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - $trustedProxies = \OC::$server->getConfig()->getSystemValue('trusted_proxies', array()); - - if(is_array($trustedProxies) && in_array($remoteAddress, $trustedProxies)) { - $forwardedForHeaders = \OC::$server->getConfig()->getSystemValue('forwarded_for_headers', array()); - - foreach($forwardedForHeaders as $header) { - if (array_key_exists($header, $_SERVER) === true) { - foreach (explode(',', $_SERVER[$header]) as $IP) { - $IP = trim($IP); - if (filter_var($IP, FILTER_VALIDATE_IP) !== false) { - return $IP; - } - } - } - } - } - - return $remoteAddress; - } - - /** - * Returns an ID for the request, value is not guaranteed to be unique and is mostly meant for logging - * @return string - */ - public static function getRequestID() { - if(self::$reqId === null) { - self::$reqId = hash('md5', microtime().\OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(20)); - } - return self::$reqId; - } - - /** - * Check overwrite condition - * @param string $type - * @return bool - */ - private static function isOverwriteCondition($type = '') { - $regex = '/' . OC_Config::getValue('overwritecondaddr', '') . '/'; - return $regex === '//' or preg_match($regex, $_SERVER['REMOTE_ADDR']) === 1 - or ($type !== 'protocol' and OC_Config::getValue('forcessl', false)); - } - - /** - * Strips a potential port from a domain (in format domain:port) - * @param $host - * @return string $host without appended port - */ - public static function getDomainWithoutPort($host) { - $pos = strrpos($host, ':'); - if ($pos !== false) { - $port = substr($host, $pos + 1); - if (is_numeric($port)) { - $host = substr($host, 0, $pos); - } - } - return $host; - } - - /** - * Checks whether a domain is considered as trusted from the list - * of trusted domains. If no trusted domains have been configured, returns - * true. - * This is used to prevent Host Header Poisoning. - * @param string $domainWithPort - * @return bool true if the given domain is trusted or if no trusted domains - * have been configured - */ - public static function isTrustedDomain($domainWithPort) { - // Extract port from domain if needed - $domain = self::getDomainWithoutPort($domainWithPort); - - // FIXME: Empty config array defaults to true for now. - Deprecate this behaviour with ownCloud 8. - $trustedList = \OC::$server->getConfig()->getSystemValue('trusted_domains', array()); - if (empty($trustedList)) { - return true; - } - - // FIXME: Workaround for older instances still with port applied. Remove for ownCloud 9. - if(in_array($domainWithPort, $trustedList)) { - return true; - } - - // Always allow access from localhost - if (preg_match(self::REGEX_LOCALHOST, $domain) === 1) { - return true; - } - - return in_array($domain, $trustedList); - } - - /** - * Returns the unverified server host from the headers without checking - * whether it is a trusted domain - * @return string the server host - * - * Returns the server host, even if the website uses one or more - * reverse proxies - */ - public static function insecureServerHost() { - $host = null; - if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { - if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) { - $parts = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']); - $host = trim(current($parts)); - } else { - $host = $_SERVER['HTTP_X_FORWARDED_HOST']; - } - } else { - if (isset($_SERVER['HTTP_HOST'])) { - $host = $_SERVER['HTTP_HOST']; - } else if (isset($_SERVER['SERVER_NAME'])) { - $host = $_SERVER['SERVER_NAME']; - } - } - return $host; - } - - /** - * Returns the overwritehost setting from the config if set and - * if the overwrite condition is met - * @return string|null overwritehost value or null if not defined or the defined condition - * isn't met - */ - public static function getOverwriteHost() { - if(OC_Config::getValue('overwritehost', '') !== '' and self::isOverwriteCondition()) { - return OC_Config::getValue('overwritehost'); - } - return null; - } - - /** - * Returns the server host from the headers, or the first configured - * trusted domain if the host isn't in the trusted list - * @return string the server host - * - * Returns the server host, even if the website uses one or more - * reverse proxies - */ - public static function serverHost() { - if (OC::$CLI && defined('PHPUNIT_RUN')) { - return 'localhost'; - } - - // overwritehost is always trusted - $host = self::getOverwriteHost(); - if ($host !== null) { - return $host; - } - - // get the host from the headers - $host = self::insecureServerHost(); - - // Verify that the host is a trusted domain if the trusted domains - // are defined - // If no trusted domain is provided the first trusted domain is returned - if (self::isTrustedDomain($host)) { - return $host; - } else { - $trustedList = \OC_Config::getValue('trusted_domains', array('')); - return $trustedList[0]; - } - } - - /** - * Returns the server protocol - * @return string the server protocol - * - * Returns the server protocol. It respects reverse proxy servers and load balancers - */ - public static function serverProtocol() { - if(OC_Config::getValue('overwriteprotocol', '') !== '' and self::isOverwriteCondition('protocol')) { - return OC_Config::getValue('overwriteprotocol'); - } - if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { - $proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']); - // Verify that the protocol is always HTTP or HTTPS - // default to http if an invalid value is provided - return $proto === 'https' ? 'https' : 'http'; - } - if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') { - return 'https'; - } - return 'http'; - } - - /** - * Returns the request uri - * @return string the request uri - * - * Returns the request uri, even if the website uses one or more - * reverse proxies - * @return string - */ - public static function requestUri() { - $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; - if (OC_Config::getValue('overwritewebroot', '') !== '' and self::isOverwriteCondition()) { - $uri = self::scriptName() . substr($uri, strlen($_SERVER['SCRIPT_NAME'])); - } - return $uri; - } - - /** - * Returns the script name - * @return string the script name - * - * Returns the script name, even if the website uses one or more - * reverse proxies - */ - public static function scriptName() { - $name = $_SERVER['SCRIPT_NAME']; - $overwriteWebRoot = OC_Config::getValue('overwritewebroot', ''); - if ($overwriteWebRoot !== '' and self::isOverwriteCondition()) { - $serverroot = str_replace("\\", '/', substr(__DIR__, 0, -strlen('lib/private/'))); - $suburi = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen($serverroot))); - $name = '/' . ltrim($overwriteWebRoot . $suburi, '/'); - } - return $name; - } - - /** - * get Path info from request - * @return string Path info or false when not found - */ - public static function getPathInfo() { - if (array_key_exists('PATH_INFO', $_SERVER)) { - $path_info = $_SERVER['PATH_INFO']; - }else{ - $path_info = self::getRawPathInfo(); - // following is taken from \Sabre\DAV\URLUtil::decodePathSegment - $path_info = rawurldecode($path_info); - $encoding = mb_detect_encoding($path_info, array('UTF-8', 'ISO-8859-1')); - - switch($encoding) { - - case 'ISO-8859-1' : - $path_info = utf8_encode($path_info); - - } - // end copy - } - return $path_info; - } - - /** - * get Path info from request, not urldecoded - * @throws Exception - * @return string Path info or false when not found - */ - public static function getRawPathInfo() { - $requestUri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; - // remove too many leading slashes - can be caused by reverse proxy configuration - if (strpos($requestUri, '/') === 0) { - $requestUri = '/' . ltrim($requestUri, '/'); - } - - $requestUri = preg_replace('%/{2,}%', '/', $requestUri); - - // Remove the query string from REQUEST_URI - if ($pos = strpos($requestUri, '?')) { - $requestUri = substr($requestUri, 0, $pos); - } - - $scriptName = $_SERVER['SCRIPT_NAME']; - $path_info = $requestUri; - - // strip off the script name's dir and file name - list($path, $name) = \Sabre\DAV\URLUtil::splitPath($scriptName); - if (!empty($path)) { - if( $path === $path_info || strpos($path_info, $path.'/') === 0) { - $path_info = substr($path_info, strlen($path)); - } else { - throw new Exception("The requested uri($requestUri) cannot be processed by the script '$scriptName')"); - } - } - if (strpos($path_info, '/'.$name) === 0) { - $path_info = substr($path_info, strlen($name) + 1); - } - if (strpos($path_info, $name) === 0) { - $path_info = substr($path_info, strlen($name)); - } - if($path_info === '/'){ - return ''; - } else { - return $path_info; - } - } - - /** - * Check if the requester sent along an mtime - * @return false or an mtime - */ - static public function hasModificationTime () { - if (isset($_SERVER['HTTP_X_OC_MTIME'])) { - return $_SERVER['HTTP_X_OC_MTIME']; - } else { - return false; - } - } - - /** - * Checks whether the user agent matches a given regex - * @param string|array $agent agent name or array of agent names - * @return boolean true if at least one of the given agent matches, - * false otherwise - */ - static public function isUserAgent($agent) { - if (!is_array($agent)) { - $agent = array($agent); - } - foreach ($agent as $regex) { - if (preg_match($regex, $_SERVER['HTTP_USER_AGENT'])) { - return true; - } - } - return false; - } -} diff --git a/lib/private/response.php b/lib/private/response.php index cf18115111a..600b702810c 100644 --- a/lib/private/response.php +++ b/lib/private/response.php @@ -158,11 +158,12 @@ class OC_Response { * @param string $type disposition type, either 'attachment' or 'inline' */ static public function setContentDispositionHeader( $filename, $type = 'attachment' ) { - if (OC_Request::isUserAgent(array( - OC_Request::USER_AGENT_IE, - OC_Request::USER_AGENT_ANDROID_MOBILE_CHROME, - OC_Request::USER_AGENT_FREEBOX - ))) { + if (\OC::$server->getRequest()->isUserAgent( + [ + \OC\AppFramework\Http\Request::USER_AGENT_IE, + \OC\AppFramework\Http\Request::USER_AGENT_ANDROID_MOBILE_CHROME, + \OC\AppFramework\Http\Request::USER_AGENT_FREEBOX, + ])) { header( 'Content-Disposition: ' . rawurlencode($type) . '; filename="' . rawurlencode( $filename ) . '"' ); } else { header( 'Content-Disposition: ' . rawurlencode($type) . '; filename*=UTF-8\'\'' . rawurlencode( $filename ) @@ -188,7 +189,7 @@ class OC_Response { } } - /* + /** * This function adds some security related headers to all requests served via base.php * The implementation of this function has to happen here to ensure that all third-party * components (e.g. SabreDAV) also benefit from this headers. @@ -203,17 +204,20 @@ class OC_Response { header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains } - // Content Security Policy - // If you change the standard policy, please also change it in config.sample.php - $policy = OC_Config::getValue('custom_csp_policy', - 'default-src \'self\'; ' + /** + * FIXME: Content Security Policy for legacy ownCloud components. This + * can be removed once \OCP\AppFramework\Http\Response from the AppFramework + * is used everywhere. + * @see \OCP\AppFramework\Http\Response::getHeaders + */ + $policy = 'default-src \'self\'; ' . 'script-src \'self\' \'unsafe-eval\'; ' . 'style-src \'self\' \'unsafe-inline\'; ' . 'frame-src *; ' . 'img-src *; ' . 'font-src \'self\' data:; ' . 'media-src *; ' - . 'connect-src *'); + . 'connect-src *'; header('Content-Security-Policy:' . $policy); // https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag diff --git a/lib/private/route/router.php b/lib/private/route/router.php index 3559b841926..25e897123d1 100644 --- a/lib/private/route/router.php +++ b/lib/private/route/router.php @@ -63,8 +63,9 @@ class Router implements IRouter { } else { $method = 'GET'; } - $host = \OC_Request::serverHost(); - $schema = \OC_Request::serverProtocol(); + $request = \OC::$server->getRequest(); + $host = $request->getServerHost(); + $schema = $request->getServerProtocol(); $this->context = new RequestContext($baseUrl, $method, $host, $schema); // TODO cache $this->root = $this->getCollection('root'); diff --git a/lib/private/security/securerandom.php b/lib/private/security/securerandom.php index 2402e863fb0..b1169bff289 100644 --- a/lib/private/security/securerandom.php +++ b/lib/private/security/securerandom.php @@ -64,8 +64,7 @@ class SecureRandom implements ISecureRandom { * Generate a random string of specified length. * @param string $length The length of the generated string * @param string $characters An optional list of characters to use if no characterlist is - * specified 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./ - * is used. + * specified all valid base64 characters are used. * @return string * @throws \Exception If the generator is not initialized. */ diff --git a/lib/private/security/trusteddomainhelper.php b/lib/private/security/trusteddomainhelper.php new file mode 100644 index 00000000000..da5e0ff0a12 --- /dev/null +++ b/lib/private/security/trusteddomainhelper.php @@ -0,0 +1,75 @@ +<?php +/** + * Copyright (c) 2015 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Security; +use OC\AppFramework\Http\Request; +use OCP\IConfig; + +/** + * Class TrustedDomain + * + * @package OC\Security + */ +class TrustedDomainHelper { + /** @var IConfig */ + private $config; + + /** + * @param IConfig $config + */ + function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * Strips a potential port from a domain (in format domain:port) + * @param string $host + * @return string $host without appended port + */ + private function getDomainWithoutPort($host) { + $pos = strrpos($host, ':'); + if ($pos !== false) { + $port = substr($host, $pos + 1); + if (is_numeric($port)) { + $host = substr($host, 0, $pos); + } + } + return $host; + } + + /** + * Checks whether a domain is considered as trusted from the list + * of trusted domains. If no trusted domains have been configured, returns + * true. + * This is used to prevent Host Header Poisoning. + * @param string $domainWithPort + * @return bool true if the given domain is trusted or if no trusted domains + * have been configured + */ + public function isTrustedDomain($domainWithPort) { + $domain = $this->getDomainWithoutPort($domainWithPort); + + // Read trusted domains from config + $trustedList = $this->config->getSystemValue('trusted_domains', []); + if(!is_array($trustedList)) { + return false; + } + + // TODO: Workaround for older instances still with port applied. Remove for ownCloud 9. + if(in_array($domainWithPort, $trustedList)) { + return true; + } + + // Always allow access from localhost + if (preg_match(Request::REGEX_LOCALHOST, $domain) === 1) { + return true; + } + return in_array($domain, $trustedList); + } + +} diff --git a/lib/private/server.php b/lib/private/server.php index 15c33e1905f..5eaecc00932 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -10,7 +10,6 @@ use OC\Cache\UserCache; use OC\Diagnostics\NullQueryLogger; use OC\Diagnostics\EventLogger; use OC\Diagnostics\QueryLogger; -use OC\Files\Config\StorageManager; use OC\Security\CertificateManager; use OC\Files\Node\Root; use OC\Files\View; @@ -18,6 +17,7 @@ use OC\Security\Crypto; use OC\Security\Hasher; use OC\Security\SecureRandom; use OC\Diagnostics\NullEventLogger; +use OC\Security\TrustedDomainHelper; use OCP\IServerContainer; use OCP\ISession; use OC\Tagging\TagMapper; @@ -42,43 +42,6 @@ class Server extends SimpleContainer implements IServerContainer { $this->registerService('ContactsManager', function ($c) { return new ContactsManager(); }); - $this->registerService('Request', function (Server $c) { - if (isset($c['urlParams'])) { - $urlParams = $c['urlParams']; - } else { - $urlParams = array(); - } - - if ($c->getSession()->exists('requesttoken')) { - $requestToken = $c->getSession()->get('requesttoken'); - } else { - $requestToken = false; - } - - if (defined('PHPUNIT_RUN') && PHPUNIT_RUN - && in_array('fakeinput', stream_get_wrappers()) - ) { - $stream = 'fakeinput://data'; - } else { - $stream = 'php://input'; - } - - return new Request( - array( - 'get' => $_GET, - 'post' => $_POST, - 'files' => $_FILES, - 'server' => $_SERVER, - 'env' => $_ENV, - 'cookies' => $_COOKIE, - 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) - ? $_SERVER['REQUEST_METHOD'] - : null, - 'urlParams' => $urlParams, - 'requesttoken' => $requestToken, - ), $stream - ); - }); $this->registerService('PreviewManager', function ($c) { return new PreviewManager(); }); @@ -297,6 +260,9 @@ class Server extends SimpleContainer implements IServerContainer { $this->registerService('IniWrapper', function ($c) { return new IniGetWrapper(); }); + $this->registerService('TrustedDomainHelper', function ($c) { + return new TrustedDomainHelper($this->getConfig()); + }); } /** @@ -311,10 +277,54 @@ class Server extends SimpleContainer implements IServerContainer { * currently being processed is returned from this method. * In case the current execution was not initiated by a web request null is returned * + * FIXME: This should be queried as well. However, due to our totally awesome + * static code a lot of tests do stuff like $_SERVER['foo'] which obviously + * will not work with that approach. We even have some integration tests in our + * unit tests which setup a complete webserver. Once the code is all non-static + * or we don't have such mixed integration/unit tests setup anymore this can + * get moved out again. + * * @return \OCP\IRequest|null */ function getRequest() { - return $this->query('Request'); + if (isset($this['urlParams'])) { + $urlParams = $this['urlParams']; + } else { + $urlParams = array(); + } + + if ($this->getSession()->exists('requesttoken')) { + $requestToken = $this->getSession()->get('requesttoken'); + } else { + $requestToken = false; + } + + if (defined('PHPUNIT_RUN') && PHPUNIT_RUN + && in_array('fakeinput', stream_get_wrappers()) + ) { + $stream = 'fakeinput://data'; + } else { + $stream = 'php://input'; + } + + return new Request( + [ + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'server' => $_SERVER, + 'env' => $_ENV, + 'cookies' => $_COOKIE, + 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) + ? $_SERVER['REQUEST_METHOD'] + : null, + 'urlParams' => $urlParams, + 'requesttoken' => $requestToken, + ], + $this->getSecureRandom(), + $this->getConfig(), + $stream + ); } /** @@ -735,4 +745,13 @@ class Server extends SimpleContainer implements IServerContainer { public function getIniWrapper() { return $this->query('IniWrapper'); } + + /** + * Get the trusted domain helper + * + * @return TrustedDomainHelper + */ + public function getTrustedDomainHelper() { + return $this->query('TrustedDomainHelper'); + } } diff --git a/lib/private/setup.php b/lib/private/setup.php index e3a29b6469d..e8a2cce552d 100644 --- a/lib/private/setup.php +++ b/lib/private/setup.php @@ -157,12 +157,14 @@ class OC_Setup { return $error; } + $request = \OC::$server->getRequest(); + //no errors, good if(isset($options['trusted_domains']) && is_array($options['trusted_domains'])) { $trustedDomains = $options['trusted_domains']; } else { - $trustedDomains = array(\OC_Request::getDomainWithoutPort(\OC_Request::serverHost())); + $trustedDomains = [$request->getInsecureServerHost()]; } if (OC_Util::runningOnWindows()) { @@ -185,7 +187,7 @@ class OC_Setup { 'secret' => $secret, 'trusted_domains' => $trustedDomains, 'datadirectory' => $dataDir, - 'overwrite.cli.url' => \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . OC::$WEBROOT, + 'overwrite.cli.url' => $request->getServerProtocol() . '://' . $request->getInsecureServerHost() . OC::$WEBROOT, 'dbtype' => $dbType, 'version' => implode('.', OC_Util::getVersion()), ]); @@ -293,6 +295,7 @@ class OC_Setup { $content.= "# line below if for Apache 2.2\n"; $content.= "<ifModule !mod_authz_core.c>\n"; $content.= "deny from all\n"; + $content.= "Satisfy All\n"; $content.= "</ifModule>\n\n"; $content.= "# section for Apache 2.2 and 2.4\n"; $content.= "IndexIgnore *\n"; diff --git a/lib/private/share/share.php b/lib/private/share/share.php index bd21bdd4b3a..4753f6ecbfa 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -1166,13 +1166,20 @@ class Share extends \OC\Share\Constants { * @return null */ protected static function unshareItem(array $item, $newParent = null) { + + $shareType = (int)$item['share_type']; + $shareWith = null; + if ($shareType !== \OCP\Share::SHARE_TYPE_LINK) { + $shareWith = $item['share_with']; + } + // Pass all the vars we have for now, they may be useful $hookParams = array( 'id' => $item['id'], 'itemType' => $item['item_type'], 'itemSource' => $item['item_source'], - 'shareType' => (int)$item['share_type'], - 'shareWith' => $item['share_with'], + 'shareType' => $shareType, + 'shareWith' => $shareWith, 'itemParent' => $item['parent'], 'uidOwner' => $item['uid_owner'], ); @@ -1850,7 +1857,7 @@ class Share extends \OC\Share\Constants { $sourceId = ($itemType === 'file' || $itemType === 'folder') ? $fileSource : $itemSource; $sourceExists = self::getItemSharedWithBySource($itemType, $sourceId, self::FORMAT_NONE, null, true, $user); - $shareType = ($isGroupShare) ? self::$shareTypeGroupUserUnique : $shareType; + $userShareType = ($isGroupShare) ? self::$shareTypeGroupUserUnique : $shareType; if ($sourceExists) { $fileTarget = $sourceExists['file_target']; @@ -1863,12 +1870,12 @@ class Share extends \OC\Share\Constants { } elseif(!$sourceExists && !$isGroupShare) { - $itemTarget = Helper::generateTarget($itemType, $itemSource, $shareType, $user, + $itemTarget = Helper::generateTarget($itemType, $itemSource, $userShareType, $user, $uidOwner, $suggestedItemTarget, $parent); if (isset($fileSource)) { if ($parentFolder) { if ($parentFolder === true) { - $fileTarget = Helper::generateTarget('file', $filePath, $shareType, $user, + $fileTarget = Helper::generateTarget('file', $filePath, $userShareType, $user, $uidOwner, $suggestedFileTarget, $parent); if ($fileTarget != $groupFileTarget) { $parentFolders[$user]['folder'] = $fileTarget; @@ -1878,7 +1885,7 @@ class Share extends \OC\Share\Constants { $parent = $parentFolder[$user]['id']; } } else { - $fileTarget = Helper::generateTarget('file', $filePath, $shareType, + $fileTarget = Helper::generateTarget('file', $filePath, $userShareType, $user, $uidOwner, $suggestedFileTarget, $parent); } } else { @@ -1909,7 +1916,7 @@ class Share extends \OC\Share\Constants { 'itemType' => $itemType, 'itemSource' => $itemSource, 'itemTarget' => $itemTarget, - 'shareType' => $shareType, + 'shareType' => $userShareType, 'shareWith' => $user, 'uidOwner' => $uidOwner, 'permissions' => $permissions, diff --git a/lib/private/tags.php b/lib/private/tags.php index 4d737e47e07..200ec8c2771 100644 --- a/lib/private/tags.php +++ b/lib/private/tags.php @@ -247,7 +247,7 @@ class Tags implements \OCP\ITags { * Throws an exception if the tag could not be found. * * @param string $tag Tag id or name. - * @return array An array of object ids or false on error. + * @return array|false An array of object ids or false on error. */ public function getIdsForTag($tag) { $result = null; @@ -337,7 +337,7 @@ class Tags implements \OCP\ITags { * Add a new tag. * * @param string $name A string with a name of the tag - * @return false|string the id of the added tag or false on error. + * @return false|int the id of the added tag or false on error. */ public function add($name) { $name = trim($name); @@ -575,7 +575,7 @@ class Tags implements \OCP\ITags { /** * Get favorites for an object type * - * @return array An array of object ids. + * @return array|false An array of object ids. */ public function getFavorites() { try { diff --git a/lib/private/template.php b/lib/private/template.php index d407eb8384c..b0d212c6f53 100644 --- a/lib/private/template.php +++ b/lib/private/template.php @@ -215,6 +215,7 @@ class OC_Template extends \OC\Template\Base { * @param Exception $exception */ public static function printExceptionErrorPage(Exception $exception) { + $request = \OC::$server->getRequest(); $content = new \OC_Template('', 'exception', 'error', false); $content->assign('errorMsg', $exception->getMessage()); $content->assign('errorCode', $exception->getCode()); @@ -222,8 +223,8 @@ class OC_Template extends \OC\Template\Base { $content->assign('line', $exception->getLine()); $content->assign('trace', $exception->getTraceAsString()); $content->assign('debugMode', defined('DEBUG') && DEBUG === true); - $content->assign('remoteAddr', OC_Request::getRemoteAddress()); - $content->assign('requestID', OC_Request::getRequestID()); + $content->assign('remoteAddr', $request->getRemoteAddress()); + $content->assign('requestID', $request->getId()); $content->printPage(); die(); } diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php index 44a8cd3a803..1678795f524 100644 --- a/lib/private/templatelayout.php +++ b/lib/private/templatelayout.php @@ -34,9 +34,9 @@ class OC_TemplateLayout extends OC_Template { $this->config = \OC::$server->getConfig(); // Decide which page we show - if( $renderAs == 'user' ) { + if($renderAs == 'user') { parent::__construct( 'core', 'layout.user' ); - if(in_array(OC_APP::getCurrentApp(), array('settings','admin', 'help'))!==false) { + if(in_array(OC_App::getCurrentApp(), ['settings','admin', 'help']) !== false) { $this->assign('bodyid', 'body-settings'); }else{ $this->assign('bodyid', 'body-user'); @@ -72,9 +72,9 @@ class OC_TemplateLayout extends OC_Template { } } $userDisplayName = OC_User::getDisplayName(); - $this->assign( 'user_displayname', $userDisplayName ); - $this->assign( 'user_uid', OC_User::getUser() ); - $this->assign( 'appsmanagement_active', strpos(OC_Request::requestUri(), OC_Helper::linkToRoute('settings_apps')) === 0 ); + $this->assign('user_displayname', $userDisplayName); + $this->assign('user_uid', OC_User::getUser()); + $this->assign('appsmanagement_active', strpos(\OC::$server->getRequest()->getRequestUri(), OC_Helper::linkToRoute('settings_apps')) === 0 ); $this->assign('enableAvatars', $this->config->getSystemValue('enable_avatars', true)); $this->assign('userAvatarSet', \OC_Helper::userAvatarSet(OC_User::getUser())); } else if ($renderAs == 'error') { @@ -92,7 +92,9 @@ class OC_TemplateLayout extends OC_Template { if(empty(self::$versionHash)) { - self::$versionHash = md5(implode(',', OC_App::getAppVersions())); + $v = OC_App::getAppVersions(); + $v['core'] = implode('.', \OC_Util::getVersion()); + self::$versionHash = md5(implode(',', $v)); } $useAssetPipeline = self::isAssetPipelineEnabled(); @@ -214,7 +216,7 @@ class OC_TemplateLayout extends OC_Template { } /** - * Converts the absolute filepath to a relative path from \OC::$SERVERROOT + * Converts the absolute file path to a relative path from \OC::$SERVERROOT * @param string $filePath Absolute path * @return string Relative path * @throws Exception If $filePath is not under \OC::$SERVERROOT diff --git a/lib/private/tempmanager.php b/lib/private/tempmanager.php index a3bb07f9d63..60b9c9dc0d4 100644 --- a/lib/private/tempmanager.php +++ b/lib/private/tempmanager.php @@ -132,12 +132,14 @@ class TempManager implements ITempManager { $cutOfTime = time() - 3600; $files = array(); $dh = opendir($this->tmpBaseDir); - while (($file = readdir($dh)) !== false) { - if (substr($file, 0, 7) === 'oc_tmp_') { - $path = $this->tmpBaseDir . '/' . $file; - $mtime = filemtime($path); - if ($mtime < $cutOfTime) { - $files[] = $path; + if ($dh) { + while (($file = readdir($dh)) !== false) { + if (substr($file, 0, 7) === 'oc_tmp_') { + $path = $this->tmpBaseDir . '/' . $file; + $mtime = filemtime($path); + if ($mtime < $cutOfTime) { + $files[] = $path; + } } } } diff --git a/lib/private/updater.php b/lib/private/updater.php index fb41e2d36f0..c120d55b6f7 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -291,13 +291,47 @@ class Updater extends BasicEmitter { include \OC_App::getAppPath($appId) . '/appinfo/preupdate.php'; } + + /** + * upgrades all apps within a major ownCloud upgrade. Also loads "priority" + * (types authentication, filesystem, logging, in that order) afterwards. + * + * @throws NeedsUpdateException + */ protected function doAppUpgrade() { $apps = \OC_App::getEnabledApps(); + $priorityTypes = array('authentication', 'filesystem', 'logging'); + $pseudoOtherType = 'other'; + $stacks = array($pseudoOtherType => array()); foreach ($apps as $appId) { - if (\OC_App::shouldUpgrade($appId)) { - \OC_App::updateApp($appId); - $this->emit('\OC\Updater', 'appUpgrade', array($appId, \OC_App::getAppVersion($appId))); + $priorityType = false; + foreach ($priorityTypes as $type) { + if(!isset($stacks[$type])) { + $stacks[$type] = array(); + } + if (\OC_App::isType($appId, $type)) { + $stacks[$type][] = $appId; + $priorityType = true; + break; + } + } + if (!$priorityType) { + $stacks[$pseudoOtherType][] = $appId; + } + } + foreach ($stacks as $type => $stack) { + foreach ($stack as $appId) { + if (\OC_App::shouldUpgrade($appId)) { + \OC_App::updateApp($appId); + $this->emit('\OC\Updater', 'appUpgrade', array($appId, \OC_App::getAppVersion($appId))); + } + if($type !== $pseudoOtherType) { + // load authentication, filesystem and logging apps after + // upgrading them. Other apps my need to rely on modifying + // user and/or filesystem aspects. + \OC_App::loadApp($appId, false); + } } } } diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php index d263d25aeef..e87a6c354fb 100644 --- a/lib/private/urlgenerator.php +++ b/lib/private/urlgenerator.php @@ -32,8 +32,7 @@ class URLGenerator implements IURLGenerator { /** * Creates an url using a defined route * @param string $route - * @param array $parameters - * @internal param array $args with param=>value, will be appended to the returned url + * @param array $parameters args with param=>value, will be appended to the returned url * @return string the url * * Returns a url to the given route. @@ -45,9 +44,8 @@ class URLGenerator implements IURLGenerator { /** * Creates an absolute url using a defined route - * @param string $route - * @param array $parameters - * @internal param array $args with param=>value, will be appended to the returned url + * @param string $routeName + * @param array $arguments args with param=>value, will be appended to the returned url * @return string the url * * Returns an absolute url to the given route. @@ -172,7 +170,8 @@ class URLGenerator implements IURLGenerator { ? '' : \OC::$WEBROOT; - return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). $webRoot . $separator . $url; + $request = \OC::$server->getRequest(); + return $request->getServerProtocol() . '://' . $request->getServerHost() . $webRoot . $separator . $url; } /** diff --git a/lib/private/user.php b/lib/private/user.php index d1fedffcaaf..10457c224f2 100644 --- a/lib/private/user.php +++ b/lib/private/user.php @@ -366,7 +366,7 @@ class OC_User { return $backend->getLogoutAttribute(); } - return 'href="' . link_to('', 'index.php') . '?logout=true&requesttoken=' . OC_Util::callRegister() . '"'; + return 'href="' . link_to('', 'index.php') . '?logout=true&requesttoken=' . urlencode(OC_Util::callRegister()) . '"'; } /** diff --git a/lib/private/util.php b/lib/private/util.php index c08cff81469..1993a7c9a98 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -504,11 +504,6 @@ class OC_Util { $webServerRestart = true; } - //common hint for all file permissions error messages - $permissionsHint = $l->t('Permissions can usually be fixed by ' - . '%sgiving the webserver write access to the root directory%s.', - array('<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>')); - // Check if config folder is writable. if (!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) { $errors[] = array( @@ -549,6 +544,10 @@ class OC_Util { ); } } else if (!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) { + //common hint for all file permissions error messages + $permissionsHint = $l->t('Permissions can usually be fixed by ' + . '%sgiving the webserver write access to the root directory%s.', + array('<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>')); $errors[] = array( 'error' => 'Data directory (' . $CONFIG_DATADIRECTORY . ') not writable by ownCloud', 'hint' => $permissionsHint @@ -818,8 +817,7 @@ class OC_Util { $parameters['user_autofocus'] = true; } if (isset($_REQUEST['redirect_url'])) { - $redirectUrl = $_REQUEST['redirect_url']; - $parameters['redirect_url'] = urlencode($redirectUrl); + $parameters['redirect_url'] = $_REQUEST['redirect_url']; } $parameters['alt_login'] = OC_App::getAlternativeLogIns(); @@ -851,8 +849,11 @@ class OC_Util { // Check if we are a user if (!OC_User::isLoggedIn()) { header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php', - array('redirect_url' => OC_Request::requestUri()) - )); + [ + 'redirect_url' => \OC::$server->getRequest()->getRequestUri() + ] + ) + ); exit(); } } @@ -1273,6 +1274,32 @@ class OC_Util { } /** + * Clear a single file from the opcode cache + * This is useful for writing to the config file + * in case the opcode cache does not re-validate files + * Returns true if successful, false if unsuccessful: + * caller should fall back on clearing the entire cache + * with clearOpcodeCache() if unsuccessful + * + * @param string $path the path of the file to clear from the cache + * @return bool true if underlying function returns true, otherwise false + */ + public static function deleteFromOpcodeCache($path) { + $ret = false; + if ($path) { + // APC >= 3.1.1 + if (function_exists('apc_delete_file')) { + $ret = @apc_delete_file($path); + } + // Zend OpCache >= 7.0.0, PHP >= 5.5.0 + if (function_exists('opcache_invalidate')) { + $ret = opcache_invalidate($path); + } + } + return $ret; + } + + /** * Clear the opcode cache if one exists * This is necessary for writing to the config file * in case the opcode cache does not re-validate files @@ -1400,10 +1427,12 @@ class OC_Util { } /** + * Check if PhpCharset config is UTF-8 + * * @return string */ public static function isPhpCharSetUtf8() { - return ini_get('default_charset') === 'UTF-8'; + return strtoupper(ini_get('default_charset')) === 'UTF-8'; } } diff --git a/lib/public/activity/iextension.php b/lib/public/activity/iextension.php index 1b405ad8d3d..6f30f4eb9c2 100644 --- a/lib/public/activity/iextension.php +++ b/lib/public/activity/iextension.php @@ -90,7 +90,7 @@ interface IExtension { * @param string $text * @return array|false */ - function getSpecialParameterList($app, $text); + public function getSpecialParameterList($app, $text); /** * A string naming the css class for the icon to be used can be returned. diff --git a/lib/public/appframework/apicontroller.php b/lib/public/appframework/apicontroller.php index 5272f3ed529..b62e352c319 100644 --- a/lib/public/appframework/apicontroller.php +++ b/lib/public/appframework/apicontroller.php @@ -3,7 +3,7 @@ * ownCloud - App Framework * * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com + * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -44,17 +44,17 @@ abstract class ApiController extends Controller { * constructor of the controller * @param string $appName the name of the app * @param IRequest $request an instance of the request - * @param string $corsMethods: comma seperated string of HTTP verbs which + * @param string $corsMethods: comma seperated string of HTTP verbs which * should be allowed for websites or webapps when calling your API, defaults to * 'PUT, POST, GET, DELETE, PATCH' * @param string $corsAllowedHeaders: comma seperated string of HTTP headers - * which should be allowed for websites or webapps when calling your API, + * which should be allowed for websites or webapps when calling your API, * defaults to 'Authorization, Content-Type, Accept' * @param int $corsMaxAge number in seconds how long a preflighted OPTIONS * request should be cached, defaults to 1728000 seconds */ - public function __construct($appName, - IRequest $request, + public function __construct($appName, + IRequest $request, $corsMethods='PUT, POST, GET, DELETE, PATCH', $corsAllowedHeaders='Authorization, Content-Type, Accept', $corsMaxAge=1728000){ diff --git a/lib/public/appframework/http/contentsecuritypolicy.php b/lib/public/appframework/http/contentsecuritypolicy.php new file mode 100644 index 00000000000..cb9a241d8af --- /dev/null +++ b/lib/public/appframework/http/contentsecuritypolicy.php @@ -0,0 +1,241 @@ +<?php +/** + * Copyright (c) 2015 Lukas Reschke lukas@owncloud.com + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCP\AppFramework\Http; + +use OCP\AppFramework\Http; + +/** + * Class ContentSecurityPolicy is a simple helper which allows applications to + * modify the Content-Security-Policy sent by ownCloud. Per default only JavaScript, + * stylesheets, images, fonts, media and connections from the same domain + * ('self') are allowed. + * + * Even if a value gets modified above defaults will still get appended. Please + * notice that ownCloud ships already with sensible defaults and those policies + * should require no modification at all for most use-cases. + * + * @package OCP\AppFramework\Http + */ +class ContentSecurityPolicy { + /** @var bool Whether inline JS snippets are allowed */ + private $inlineScriptAllowed = false; + /** + * @var bool Whether eval in JS scripts is allowed + * TODO: Disallow per default + * @link https://github.com/owncloud/core/issues/11925 + */ + private $evalScriptAllowed = true; + /** @var array Domains from which scripts can get loaded */ + private $allowedScriptDomains = [ + '\'self\'', + ]; + /** + * @var bool Whether inline CSS is allowed + * TODO: Disallow per default + * @link https://github.com/owncloud/core/issues/13458 + */ + private $inlineStyleAllowed = true; + /** @var array Domains from which CSS can get loaded */ + private $allowedStyleDomains = [ + '\'self\'', + ]; + /** @var array Domains from which images can get loaded */ + private $allowedImageDomains = [ + '\'self\'', + ]; + /** @var array Domains to which connections can be done */ + private $allowedConnectDomains = [ + '\'self\'', + ]; + /** @var array Domains from which media elements can be loaded */ + private $allowedMediaDomains = [ + '\'self\'', + ]; + /** @var array Domains from which object elements can be loaded */ + private $allowedObjectDomains = []; + /** @var array Domains from which iframes can be loaded */ + private $allowedFrameDomains = []; + /** @var array Domains from which fonts can be loaded */ + private $allowedFontDomains = [ + '\'self\'', + ]; + + /** + * Whether inline JavaScript snippets are allowed or forbidden + * @param bool $state + * @return $this + */ + public function allowInlineScript($state = false) { + $this->inlineScriptAllowed = $state; + return $this; + } + + /** + * Whether eval in JavaScript is allowed or forbidden + * @param bool $state + * @return $this + */ + public function allowEvalScript($state = true) { + $this->evalScriptAllowed= $state; + return $this; + } + + /** + * Allows to execute JavaScript files from a specific domain. Use * to + * allow JavaScript from all domains. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedScriptDomain($domain) { + $this->allowedScriptDomains[] = $domain; + return $this; + } + + /** + * Whether inline CSS snippets are allowed or forbidden + * @param bool $state + * @return $this + */ + public function allowInlineStyle($state = true) { + $this->inlineStyleAllowed = $state; + return $this; + } + + /** + * Allows to execute CSS files from a specific domain. Use * to allow + * CSS from all domains. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedStyleDomain($domain) { + $this->allowedStyleDomains[] = $domain; + return $this; + } + + /** + * Allows using fonts from a specific domain. Use * to allow + * fonts from all domains. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedFontDomain($domain) { + $this->allowedFontDomains[] = $domain; + return $this; + } + + /** + * Allows embedding images from a specific domain. Use * to allow + * images from all domains. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedImageDomain($domain) { + $this->allowedImageDomains[] = $domain; + return $this; + } + + /** + * To which remote domains the JS connect to. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedConnectDomain($domain) { + $this->allowedConnectDomains[] = $domain; + return $this; + } + + /** + * From whoch domains media elements can be embedded. + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedMediaDomain($domain) { + $this->allowedMediaDomains[] = $domain; + return $this; + } + + /** + * From which domains objects such as <object>, <embed> or <applet> are executed + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedObjectDomain($domain) { + $this->allowedObjectDomains[] = $domain; + return $this; + } + + /** + * Which domains can be embedded in an iframe + * @param string $domain Domain to whitelist. Any passed value needs to be properly sanitized. + * @return $this + */ + public function addAllowedFrameDomain($domain) { + $this->allowedFrameDomains[] = $domain; + return $this; + } + + /** + * Get the generated Content-Security-Policy as a string + * @return string + */ + public function buildPolicy() { + $policy = "default-src 'none';"; + + if(!empty($this->allowedScriptDomains)) { + $policy .= 'script-src ' . implode(' ', $this->allowedScriptDomains); + if($this->inlineScriptAllowed) { + $policy .= ' \'unsafe-inline\''; + } + if($this->evalScriptAllowed) { + $policy .= ' \'unsafe-eval\''; + } + $policy .= ';'; + } + + if(!empty($this->allowedStyleDomains)) { + $policy .= 'style-src ' . implode(' ', $this->allowedStyleDomains); + if($this->inlineStyleAllowed) { + $policy .= ' \'unsafe-inline\''; + } + $policy .= ';'; + } + + if(!empty($this->allowedImageDomains)) { + $policy .= 'img-src ' . implode(' ', $this->allowedImageDomains); + $policy .= ';'; + } + + if(!empty($this->allowedFontDomains)) { + $policy .= 'font-src ' . implode(' ', $this->allowedFontDomains); + $policy .= ';'; + } + + if(!empty($this->allowedConnectDomains)) { + $policy .= 'connect-src ' . implode(' ', $this->allowedConnectDomains); + $policy .= ';'; + } + + if(!empty($this->allowedMediaDomains)) { + $policy .= 'media-src ' . implode(' ', $this->allowedMediaDomains); + $policy .= ';'; + } + + if(!empty($this->allowedObjectDomains)) { + $policy .= 'object-src ' . implode(' ', $this->allowedObjectDomains); + $policy .= ';'; + } + + if(!empty($this->allowedFrameDomains)) { + $policy .= 'frame-src ' . implode(' ', $this->allowedFrameDomains); + $policy .= ';'; + } + + return rtrim($policy, ';'); + } +} diff --git a/lib/public/appframework/http/ocsresponse.php b/lib/public/appframework/http/ocsresponse.php new file mode 100644 index 00000000000..590a256fe28 --- /dev/null +++ b/lib/public/appframework/http/ocsresponse.php @@ -0,0 +1,99 @@ +<?php +/** + * ownCloud - App Framework + * + * @author Bernhard Posselt + * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * Public interface of ownCloud for apps to use. + * AppFramework\HTTP\JSONResponse class + */ + +namespace OCP\AppFramework\Http; + +use OCP\AppFramework\Http; + +use OC_OCS; + +/** + * A renderer for OCS responses + */ +class OCSResponse extends Response { + + private $data; + private $format; + private $statuscode; + private $message; + private $tag; + private $tagattribute; + private $dimension; + private $itemscount; + private $itemsperpage; + + /** + * generates the xml or json response for the API call from an multidimenional data array. + * @param string $format + * @param string $status + * @param string $statuscode + * @param string $message + * @param array $data + * @param string $tag + * @param string $tagattribute + * @param int $dimension + * @param int|string $itemscount + * @param int|string $itemsperpage + */ + public function __construct($format, $status, $statuscode, $message, + $data=[], $tag='', $tagattribute='', + $dimension=-1, $itemscount='', + $itemsperpage='') { + $this->format = $format; + $this->status = $status; + $this->statuscode = $statuscode; + $this->message = $message; + $this->data = $data; + $this->tag = $tag; + $this->tagattribute = $tagattribute; + $this->dimension = $dimension; + $this->itemscount = $itemscount; + $this->itemsperpage = $itemsperpage; + + // set the correct header based on the format parameter + if ($format === 'json') { + $this->addHeader( + 'Content-Type', 'application/json; charset=utf-8' + ); + } else { + $this->addHeader( + 'Content-Type', 'application/xml; charset=utf-8' + ); + } + } + + + public function render() { + return OC_OCS::generateXml( + $this->format, $this->status, $this->statuscode, $this->message, + $this->data, $this->tag, $this->tagattribute, $this->dimension, + $this->itemscount, $this->itemsperpage + ); + } + + +}
\ No newline at end of file diff --git a/lib/public/appframework/http/response.php b/lib/public/appframework/http/response.php index 67e72cff6d9..751c48b4ca9 100644 --- a/lib/public/appframework/http/response.php +++ b/lib/public/appframework/http/response.php @@ -72,6 +72,9 @@ class Response { */ private $ETag; + /** @var ContentSecurityPolicy|null Used Content-Security-Policy */ + private $contentSecurityPolicy = null; + /** * Caches the response @@ -186,13 +189,19 @@ class Response { * @return array the headers */ public function getHeaders() { - $mergeWith = array(); + $mergeWith = []; if($this->lastModified) { $mergeWith['Last-Modified'] = $this->lastModified->format(\DateTime::RFC2822); } + // Build Content-Security-Policy and use default if none has been specified + if(is_null($this->contentSecurityPolicy)) { + $this->setContentSecurityPolicy(new ContentSecurityPolicy()); + } + $this->headers['Content-Security-Policy'] = $this->contentSecurityPolicy->buildPolicy(); + if($this->ETag) { $mergeWith['ETag'] = '"' . $this->ETag . '"'; } @@ -221,6 +230,25 @@ class Response { return $this; } + /** + * Set a Content-Security-Policy + * @param ContentSecurityPolicy $csp Policy to set for the response object + * @return $this + */ + public function setContentSecurityPolicy(ContentSecurityPolicy $csp) { + $this->contentSecurityPolicy = $csp; + return $this; + } + + /** + * Get the currently used Content-Security-Policy + * @return ContentSecurityPolicy|null Used Content-Security-Policy or null if + * none specified. + */ + public function getContentSecurityPolicy() { + return $this->contentSecurityPolicy; + } + /** * Get response status diff --git a/lib/public/appframework/ocscontroller.php b/lib/public/appframework/ocscontroller.php new file mode 100644 index 00000000000..3e9907666bb --- /dev/null +++ b/lib/public/appframework/ocscontroller.php @@ -0,0 +1,103 @@ +<?php +/** + * ownCloud - App Framework + * + * @author Bernhard Posselt + * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * Public interface of ownCloud for apps to use. + * AppFramework\Controller class + */ + +namespace OCP\AppFramework; + +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Http\OCSResponse; +use OCP\IRequest; + + +/** + * Base class to inherit your controllers from that are used for RESTful APIs + */ +abstract class OCSController extends ApiController { + + /** + * constructor of the controller + * @param string $appName the name of the app + * @param IRequest $request an instance of the request + * @param string $corsMethods: comma seperated string of HTTP verbs which + * should be allowed for websites or webapps when calling your API, defaults to + * 'PUT, POST, GET, DELETE, PATCH' + * @param string $corsAllowedHeaders: comma seperated string of HTTP headers + * which should be allowed for websites or webapps when calling your API, + * defaults to 'Authorization, Content-Type, Accept' + * @param int $corsMaxAge number in seconds how long a preflighted OPTIONS + * request should be cached, defaults to 1728000 seconds + */ + public function __construct($appName, + IRequest $request, + $corsMethods='PUT, POST, GET, DELETE, PATCH', + $corsAllowedHeaders='Authorization, Content-Type, Accept', + $corsMaxAge=1728000){ + parent::__construct($appName, $request, $corsMethods, + $corsAllowedHeaders, $corsMaxAge); + $this->registerResponder('json', function ($data) { + return $this->buildOCSResponse('json', $data); + }); + $this->registerResponder('xml', function ($data) { + return $this->buildOCSResponse('xml', $data); + }); + } + + + /** + * Unwrap data and build ocs response + * @param string $format json or xml + * @param array|DataResponse $data the data which should be transformed + */ + private function buildOCSResponse($format, $data) { + if ($data instanceof DataResponse) { + $data = $data->getData(); + } + + $params = [ + 'status' => 'OK', + 'statuscode' => 100, + 'message' => 'OK', + 'data' => [], + 'tag' => '', + 'tagattribute' => '', + 'dimension' => 'dynamic', + 'itemscount' => '', + 'itemsperpage' => '' + ]; + + foreach ($data as $key => $value) { + $params[$key] = $value; + } + + return new OCSResponse( + $format, $params['status'], $params['statuscode'], + $params['message'], $params['data'], $params['tag'], + $params['tagattribute'], $params['dimension'], + $params['itemscount'], $params['itemsperpage'] + ); + } + +} diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php index 36d5b800df6..3e6559c28f7 100644 --- a/lib/public/files/storage.php +++ b/lib/public/files/storage.php @@ -72,7 +72,7 @@ interface Storage { * see http://php.net/manual/en/function.opendir.php * * @param string $path - * @return resource + * @return resource|false */ public function opendir($path); @@ -97,7 +97,7 @@ interface Storage { * only the following keys are required in the result: size and mtime * * @param string $path - * @return array + * @return array|false */ public function stat($path); @@ -105,7 +105,7 @@ interface Storage { * see http://php.net/manual/en/function.filetype.php * * @param string $path - * @return bool + * @return string|false */ public function filetype($path); @@ -114,7 +114,7 @@ interface Storage { * The result for filesize when called on a folder is required to be 0 * * @param string $path - * @return int + * @return int|false */ public function filesize($path); @@ -179,7 +179,7 @@ interface Storage { * see http://php.net/manual/en/function.filemtime.php * * @param string $path - * @return int + * @return int|false */ public function filemtime($path); @@ -187,7 +187,7 @@ interface Storage { * see http://php.net/manual/en/function.file_get_contents.php * * @param string $path - * @return string + * @return string|false */ public function file_get_contents($path); @@ -231,7 +231,7 @@ interface Storage { * * @param string $path * @param string $mode - * @return resource + * @return resource|false */ public function fopen($path, $mode); @@ -240,7 +240,7 @@ interface Storage { * The mimetype for a folder is required to be "httpd/unix-directory" * * @param string $path - * @return string + * @return string|false */ public function getMimeType($path); @@ -250,7 +250,7 @@ interface Storage { * @param string $type * @param string $path * @param bool $raw - * @return string + * @return string|false */ public function hash($type, $path, $raw = false); @@ -258,7 +258,7 @@ interface Storage { * see http://php.net/manual/en/function.free_space.php * * @param string $path - * @return int + * @return int|false */ public function free_space($path); @@ -266,7 +266,7 @@ interface Storage { * search for occurrences of $query in file names * * @param string $query - * @return array + * @return array|false */ public function search($query); @@ -285,7 +285,7 @@ interface Storage { * The local version of the file can be temporary and doesn't have to be persistent across requests * * @param string $path - * @return string + * @return string|false */ public function getLocalFile($path); @@ -294,7 +294,7 @@ interface Storage { * The local version of the folder can be temporary and doesn't have to be persistent across requests * * @param string $path - * @return string + * @return string|false */ public function getLocalFolder($path); /** @@ -313,7 +313,7 @@ interface Storage { * get the ETag for a file or folder * * @param string $path - * @return string + * @return string|false */ public function getETag($path); @@ -342,7 +342,7 @@ interface Storage { * For now the returned array can hold the parameter url - in future more attributes might follow. * * @param string $path - * @return array + * @return array|false */ public function getDirectDownload($path); } diff --git a/lib/public/iappconfig.php b/lib/public/iappconfig.php index cbd1a7e0573..3a976b4a263 100644 --- a/lib/public/iappconfig.php +++ b/lib/public/iappconfig.php @@ -58,7 +58,7 @@ interface IAppConfig { * * @param string|false $key * @param string|false $app - * @return array + * @return array|false */ public function getValues($app, $key); diff --git a/lib/public/iavatar.php b/lib/public/iavatar.php index 213d2e6cef5..fdb044f9e5c 100644 --- a/lib/public/iavatar.php +++ b/lib/public/iavatar.php @@ -21,6 +21,13 @@ interface IAvatar { function get($size = 64); /** + * Check if an avatar exists for the user + * + * @return bool + */ + public function exists(); + + /** * sets the users avatar * @param Image $data mixed imagedata or path to set a new avatar * @throws \Exception if the provided file is not a jpg or png image diff --git a/lib/public/irequest.php b/lib/public/irequest.php index 988b3aebd7b..025c8367d41 100644 --- a/lib/public/irequest.php +++ b/lib/public/irequest.php @@ -127,4 +127,76 @@ interface IRequest { * @return bool true if CSRF check passed */ public function passesCSRFCheck(); + + /** + * Returns an ID for the request, value is not guaranteed to be unique and is mostly meant for logging + * If `mod_unique_id` is installed this value will be taken. + * @return string + */ + public function getId(); + + /** + * Returns the remote address, if the connection came from a trusted proxy + * and `forwarded_for_headers` has been configured then the IP address + * specified in this header will be returned instead. + * Do always use this instead of $_SERVER['REMOTE_ADDR'] + * @return string IP address + */ + public function getRemoteAddress(); + + /** + * Returns the server protocol. It respects reverse proxy servers and load + * balancers. + * @return string Server protocol (http or https) + */ + public function getServerProtocol(); + + /** + * Returns the request uri, even if the website uses one or more + * reverse proxies + * @return string + */ + public function getRequestUri(); + + /** + * Get raw PathInfo from request (not urldecoded) + * @throws \Exception + * @return string Path info + */ + public function getRawPathInfo(); + + /** + * Get PathInfo from request + * @throws \Exception + * @return string|false Path info or false when not found + */ + public function getPathInfo(); + + /** + * Returns the script name, even if the website uses one or more + * reverse proxies + * @return string the script name + */ + public function getScriptName(); + + /** + * Checks whether the user agent matches a given regex + * @param array $agent array of agent names + * @return bool true if at least one of the given agent matches, false otherwise + */ + public function isUserAgent(array $agent); + + /** + * Returns the unverified server host from the headers without checking + * whether it is a trusted domain + * @return string Server host + */ + public function getInsecureServerHost(); + + /** + * Returns the server host from the headers, or the first configured + * trusted domain if the host isn't in the trusted list + * @return string Server host + */ + public function getServerHost(); } diff --git a/lib/public/itags.php b/lib/public/itags.php index 238b12c6424..ec6da9eb512 100644 --- a/lib/public/itags.php +++ b/lib/public/itags.php @@ -97,7 +97,7 @@ interface ITags { * Throws an exception if the tag could not be found. * * @param string|integer $tag Tag id or name. - * @return array An array of object ids or false on error. + * @return array|false An array of object ids or false on error. */ public function getIdsForTag($tag); @@ -123,7 +123,7 @@ interface ITags { * Add a new tag. * * @param string $name A string with a name of the tag - * @return int the id of the added tag or false if it already exists. + * @return int|false the id of the added tag or false if it already exists. */ public function add($name); @@ -158,7 +158,7 @@ interface ITags { /** * Get favorites for an object type * - * @return array An array of object ids. + * @return array|false An array of object ids. */ public function getFavorites(); diff --git a/lib/public/json.php b/lib/public/json.php index e7371ad63f3..5d9675e5ba4 100644 --- a/lib/public/json.php +++ b/lib/public/json.php @@ -23,7 +23,6 @@ /** * Public interface of ownCloud for apps to use. * JSON Class - * */ // use OCP namespace for all classes that are considered public. @@ -31,141 +30,142 @@ namespace OCP; /** - * This class provides convinient functions to generate and send JSON data. Usefull for Ajax calls + * This class provides convenient functions to generate and send JSON data. Useful for Ajax calls + * @deprecated Use a AppFramework JSONResponse instead */ class JSON { /** - * Encode and print $data in JSON format - * @param array $data The data to use - * @param string $setContentType the optional content type - * @return string json formatted string. - */ + * Encode and print $data in JSON format + * @param array $data The data to use + * @param bool $setContentType the optional content type + * @deprecated Use a AppFramework JSONResponse instead + */ public static function encodedPrint( $data, $setContentType=true ) { - return(\OC_JSON::encodedPrint( $data, $setContentType )); + \OC_JSON::encodedPrint($data, $setContentType); } /** - * Check if the user is logged in, send json error msg if not. - * - * This method checks if a user is logged in. If not, a json error - * response will be return and the method will exit from execution - * of the script. - * The returned json will be in the format: - * - * {"status":"error","data":{"message":"Authentication error."}} - * - * Add this call to the start of all ajax method files that requires - * an authenticated user. - * - * @return string json formatted error string if not authenticated. - */ + * Check if the user is logged in, send json error msg if not. + * + * This method checks if a user is logged in. If not, a json error + * response will be return and the method will exit from execution + * of the script. + * The returned json will be in the format: + * + * {"status":"error","data":{"message":"Authentication error."}} + * + * Add this call to the start of all ajax method files that requires + * an authenticated user. + * @deprecated Use annotation based ACLs from the AppFramework instead + */ public static function checkLoggedIn() { - return(\OC_JSON::checkLoggedIn()); + \OC_JSON::checkLoggedIn(); } /** - * Check an ajax get/post call if the request token is valid. - * - * This method checks for a valid variable 'requesttoken' in $_GET, - * $_POST and $_SERVER. If a valid token is not found, a json error - * response will be return and the method will exit from execution - * of the script. - * The returned json will be in the format: - * - * {"status":"error","data":{"message":"Token expired. Please reload page."}} - * - * Add this call to the start of all ajax method files that creates, - * updates or deletes anything. - * In cases where you e.g. use an ajax call to load a dialog containing - * a submittable form, you will need to add the requesttoken first as a - * parameter to the ajax call, then assign it to the template and finally - * add a hidden input field also named 'requesttoken' containing the value. - * - * @return \json|null json formatted error string if not valid. - */ + * Check an ajax get/post call if the request token is valid. + * + * This method checks for a valid variable 'requesttoken' in $_GET, + * $_POST and $_SERVER. If a valid token is not found, a json error + * response will be return and the method will exit from execution + * of the script. + * The returned json will be in the format: + * + * {"status":"error","data":{"message":"Token expired. Please reload page."}} + * + * Add this call to the start of all ajax method files that creates, + * updates or deletes anything. + * In cases where you e.g. use an ajax call to load a dialog containing + * a submittable form, you will need to add the requesttoken first as a + * parameter to the ajax call, then assign it to the template and finally + * add a hidden input field also named 'requesttoken' containing the value. + * @deprecated Use annotation based CSRF checks from the AppFramework instead + */ public static function callCheck() { - return(\OC_JSON::callCheck()); + \OC_JSON::callCheck(); } /** - * Send json success msg - * - * Return a json success message with optional extra data. - * @see OCP\JSON::error() for the format to use. - * - * @param array $data The data to use - * @return string json formatted string. - */ + * Send json success msg + * + * Return a json success message with optional extra data. + * @see OCP\JSON::error() for the format to use. + * + * @param array $data The data to use + * @return string json formatted string. + * @deprecated Use a AppFramework JSONResponse instead + */ public static function success( $data = array() ) { - return(\OC_JSON::success( $data )); + \OC_JSON::success($data); } /** - * Send json error msg - * - * Return a json error message with optional extra data for - * error message or app specific data. - * - * Example use: - * - * $id = [some value] - * OCP\JSON::error(array('data':array('message':'An error happened', 'id': $id))); - * - * Will return the json formatted string: - * - * {"status":"error","data":{"message":"An error happened", "id":[some value]}} - * - * @param array $data The data to use - * @return string json formatted error string. - */ + * Send json error msg + * + * Return a json error message with optional extra data for + * error message or app specific data. + * + * Example use: + * + * $id = [some value] + * OCP\JSON::error(array('data':array('message':'An error happened', 'id': $id))); + * + * Will return the json formatted string: + * + * {"status":"error","data":{"message":"An error happened", "id":[some value]}} + * + * @param array $data The data to use + * @return string json formatted error string. + * @deprecated Use a AppFramework JSONResponse instead + */ public static function error( $data = array() ) { - return(\OC_JSON::error( $data )); + \OC_JSON::error( $data ); } /** - * Set Content-Type header to jsonrequest - * @param array $type The contwnt type header - * @return string json formatted string. - */ + * Set Content-Type header to jsonrequest + * @param string $type The content type header + * @deprecated Use a AppFramework JSONResponse instead + */ public static function setContentTypeHeader( $type='application/json' ) { - return(\OC_JSON::setContentTypeHeader( $type )); + \OC_JSON::setContentTypeHeader($type); } /** - * Check if the App is enabled and send JSON error message instead - * - * This method checks if a specific app is enabled. If not, a json error - * response will be return and the method will exit from execution - * of the script. - * The returned json will be in the format: - * - * {"status":"error","data":{"message":"Application is not enabled."}} - * - * Add this call to the start of all ajax method files that requires - * a specific app to be enabled. - * - * @param string $app The app to check - * @return string json formatted string if not enabled. - */ + * Check if the App is enabled and send JSON error message instead + * + * This method checks if a specific app is enabled. If not, a json error + * response will be return and the method will exit from execution + * of the script. + * The returned json will be in the format: + * + * {"status":"error","data":{"message":"Application is not enabled."}} + * + * Add this call to the start of all ajax method files that requires + * a specific app to be enabled. + * + * @param string $app The app to check + * @deprecated Use the AppFramework instead. It will automatically check if the app is enabled. + */ public static function checkAppEnabled( $app ) { - return(\OC_JSON::checkAppEnabled( $app )); + \OC_JSON::checkAppEnabled($app); } /** - * Check if the user is a admin, send json error msg if not - * - * This method checks if the current user has admin rights. If not, a json error - * response will be return and the method will exit from execution - * of the script. - * The returned json will be in the format: - * - * {"status":"error","data":{"message":"Authentication error."}} - * - * Add this call to the start of all ajax method files that requires - * administrative rights. - * - * @return string json formatted string if not admin user. - */ + * Check if the user is a admin, send json error msg if not + * + * This method checks if the current user has admin rights. If not, a json error + * response will be return and the method will exit from execution + * of the script. + * The returned json will be in the format: + * + * {"status":"error","data":{"message":"Authentication error."}} + * + * Add this call to the start of all ajax method files that requires + * administrative rights. + * + * @deprecated Use annotation based ACLs from the AppFramework instead + */ public static function checkAdminUser() { \OC_JSON::checkAdminUser(); } @@ -173,14 +173,17 @@ class JSON { /** * Encode JSON * @param array $data + * @return string + * @deprecated Use a AppFramework JSONResponse instead */ public static function encode($data) { - return(\OC_JSON::encode($data)); + return \OC_JSON::encode($data); } /** * Check is a given user exists - send json error msg if not * @param string $user + * @deprecated Use a AppFramework JSONResponse instead */ public static function checkUserExists($user) { \OC_JSON::checkUserExists($user); diff --git a/lib/public/security/isecurerandom.php b/lib/public/security/isecurerandom.php index 3de60f8d717..b4c488b7f37 100644 --- a/lib/public/security/isecurerandom.php +++ b/lib/public/security/isecurerandom.php @@ -53,9 +53,10 @@ interface ISecureRandom { /** * Generate a random string of specified length. * @param string $length The length of the generated string - * @param string $characters An optional list of characters to use + * @param string $characters An optional list of characters to use if no characterlist is + * specified all valid base64 characters are used. * @return string - * @throws \Exception + * @throws \Exception If the generator is not initialized. */ public function generate($length, $characters = ''); } diff --git a/lib/public/share_backend.php b/lib/public/share_backend.php index 1ae63d4c1db..0062648d82c 100644 --- a/lib/public/share_backend.php +++ b/lib/public/share_backend.php @@ -46,7 +46,7 @@ interface Share_Backend { * Converts the shared item sources back into the item in the specified format * @param array $items Shared items * @param int $format - * @return TODO + * @return array * * The items array is a 3-dimensional array with the item_source as the * first key and the share id as the second key to an array with the share diff --git a/lib/public/util.php b/lib/public/util.php index 7f1974a421d..e6e14a26e01 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -234,9 +234,10 @@ class Util { /** * Returns the server host, even if the website uses one or more reverse proxy * @return string the server host + * @deprecated Use \OCP\IRequest::getServerHost */ public static function getServerHost() { - return(\OC_Request::serverHost()); + return \OC::$server->getRequest()->getServerHost(); } /** @@ -285,25 +286,28 @@ class Util { /** * Returns the server protocol. It respects reverse proxy servers and load balancers * @return string the server protocol + * @deprecated Use \OCP\IRequest::getServerProtocol */ public static function getServerProtocol() { - return(\OC_Request::serverProtocol()); + return \OC::$server->getRequest()->getServerProtocol(); } /** * Returns the request uri, even if the website uses one or more reverse proxies * @return string the request uri + * @deprecated Use \OCP\IRequest::getRequestUri */ public static function getRequestUri() { - return(\OC_Request::requestUri()); + return \OC::$server->getRequest()->getRequestUri(); } /** * Returns the script name, even if the website uses one or more reverse proxies * @return string the script name + * @deprecated Use \OCP\IRequest::getScriptName */ public static function getScriptName() { - return(\OC_Request::scriptName()); + return \OC::$server->getRequest()->getScriptName(); } /** diff --git a/lib/repair/repairmimetypes.php b/lib/repair/repairmimetypes.php index e3f4402cfd5..06cd144bff4 100644 --- a/lib/repair/repairmimetypes.php +++ b/lib/repair/repairmimetypes.php @@ -2,6 +2,7 @@ /** * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> * Copyright (c) 2014 Jörn Dreyer jfd@owncloud.com + * Copyright (c) 2014 Olivier Paroz owncloud@oparoz.com * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. @@ -16,32 +17,32 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep { public function getName() { return 'Repair mime types'; } - - private function fixOfficeMimeTypes() { - // update wrong mimetypes - $wrongMimetypes = array( - 'application/mspowerpoint' => 'application/vnd.ms-powerpoint', - 'application/msexcel' => 'application/vnd.ms-excel', - ); - - $existsStmt = \OC_DB::prepare(' + + private static function existsStmt() { + return \OC_DB::prepare(' SELECT count(`mimetype`) FROM `*PREFIX*mimetypes` WHERE `mimetype` = ? '); + } - $getIdStmt = \OC_DB::prepare(' + private static function getIdStmt() { + return \OC_DB::prepare(' SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ? '); + } - $insertStmt = \OC_DB::prepare(' + private static function insertStmt() { + return \OC_DB::prepare(' INSERT INTO `*PREFIX*mimetypes` ( `mimetype` ) VALUES ( ? ) '); + } - $updateWrongStmt = \OC_DB::prepare(' + private static function updateWrongStmt() { + return \OC_DB::prepare(' UPDATE `*PREFIX*filecache` SET `mimetype` = ( SELECT `id` @@ -49,106 +50,125 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep { WHERE `mimetype` = ? ) WHERE `mimetype` = ? '); - - $deleteStmt = \OC_DB::prepare(' + } + + private static function deleteStmt() { + return \OC_DB::prepare(' DELETE FROM `*PREFIX*mimetypes` WHERE `id` = ? '); - + } + + private static function updateByNameStmt() { + return \OC_DB::prepare(' + UPDATE `*PREFIX*filecache` + SET `mimetype` = ( + SELECT `id` + FROM `*PREFIX*mimetypes` + WHERE `mimetype` = ? + ) WHERE `name` LIKE ? + '); + } + + private function repairMimetypes($wrongMimetypes) { foreach ($wrongMimetypes as $wrong => $correct) { - - // do we need to remove a wrong mimetype? - $result = \OC_DB::executeAudited($getIdStmt, array($wrong)); + $result = \OC_DB::executeAudited(self::getIdStmt(), array($wrong)); $wrongId = $result->fetchOne(); if ($wrongId !== false) { - // do we need to insert the correct mimetype? - $result = \OC_DB::executeAudited($existsStmt, array($correct)); + $result = \OC_DB::executeAudited(self::existsStmt(), array($correct)); $exists = $result->fetchOne(); - if ( ! $exists ) { - // insert mimetype - \OC_DB::executeAudited($insertStmt, array($correct)); - } - - // change wrong mimetype to correct mimetype in filecache - \OC_DB::executeAudited($updateWrongStmt, array($correct, $wrongId)); + if ( ! is_null($correct) ) { + if ( ! $exists ) { + // insert mimetype + \OC_DB::executeAudited(self::insertStmt(), array($correct)); + } + // change wrong mimetype to correct mimetype in filecache + \OC_DB::executeAudited(self::updateWrongStmt(), array($correct, $wrongId)); + } + // delete wrong mimetype - \OC_DB::executeAudited($deleteStmt, array($wrongId)); + \OC_DB::executeAudited(self::deleteStmt(), array($wrongId)); } - } - - $updatedMimetypes = array( - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - ); - - $updateByNameStmt = \OC_DB::prepare(' - UPDATE `*PREFIX*filecache` - SET `mimetype` = ( - SELECT `id` - FROM `*PREFIX*mimetypes` - WHERE `mimetype` = ? - ) WHERE `name` LIKE ? - '); - - // separate doc from docx etc + } + + private function updateMimetypes($updatedMimetypes) { + foreach ($updatedMimetypes as $extension => $mimetype ) { - $result = \OC_DB::executeAudited($existsStmt, array($mimetype)); + $result = \OC_DB::executeAudited(self::existsStmt(), array($mimetype)); $exists = $result->fetchOne(); if ( ! $exists ) { // insert mimetype - \OC_DB::executeAudited($insertStmt, array($mimetype)); + \OC_DB::executeAudited(self::insertStmt(), array($mimetype)); } // change mimetype for files with x extension - \OC_DB::executeAudited($updateByNameStmt, array($mimetype, '%.'.$extension)); + \OC_DB::executeAudited(self::updateByNameStmt(), array($mimetype, '%.'.$extension)); } } - private function fixAPKMimeType() { - $existsStmt = \OC_DB::prepare(' - SELECT count(`mimetype`) - FROM `*PREFIX*mimetypes` - WHERE `mimetype` = ? - '); + private function fixOfficeMimeTypes() { + // update wrong mimetypes + $wrongMimetypes = array( + 'application/mspowerpoint' => 'application/vnd.ms-powerpoint', + 'application/msexcel' => 'application/vnd.ms-excel', + ); - $insertStmt = \OC_DB::prepare(' - INSERT INTO `*PREFIX*mimetypes` ( `mimetype` ) - VALUES ( ? ) - '); + self::repairMimetypes($wrongMimetypes); + $updatedMimetypes = array( + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + ); - $updateByNameStmt = \OC_DB::prepare(' - UPDATE `*PREFIX*filecache` - SET `mimetype` = ( - SELECT `id` - FROM `*PREFIX*mimetypes` - WHERE `mimetype` = ? - ) WHERE `name` LIKE ? - '); + // separate doc from docx etc + self::updateMimetypes($updatedMimetypes); + + } + + private function fixApkMimeType() { + $updatedMimetypes = array( + 'apk' => 'application/vnd.android.package-archive', + ); - $mimeTypeExtension = 'apk'; - $mimeTypeName = 'application/vnd.android.package-archive'; + self::updateMimetypes($updatedMimetypes); + } + + private function fixFontsMimeTypes() { + // update wrong mimetypes + $wrongMimetypes = array( + 'font' => null, + 'font/opentype' => 'application/font-sfnt', + 'application/x-font-ttf' => 'application/font-sfnt', + ); - $result = \OC_DB::executeAudited($existsStmt, array($mimeTypeName)); - $exists = $result->fetchOne(); + self::repairMimetypes($wrongMimetypes); + + $updatedMimetypes = array( + 'ttf' => 'application/font-sfnt', + 'otf' => 'application/font-sfnt', + 'pfb' => 'application/x-font', + ); - if ( ! $exists ) { - // insert mimetype - \OC_DB::executeAudited($insertStmt, array($mimeTypeName)); - } + self::updateMimetypes($updatedMimetypes); + } + + private function fixPostscriptMimeType() { + $updatedMimetypes = array( + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + ); - // change mimetype for files with x extension - \OC_DB::executeAudited($updateByNameStmt, array($mimeTypeName, '%.'.$mimeTypeExtension)); + self::updateMimetypes($updatedMimetypes); } /** @@ -158,10 +178,17 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep { if ($this->fixOfficeMimeTypes()) { $this->emit('\OC\Repair', 'info', array('Fixed office mime types')); } - - if ($this->fixAPKMimeType()) { + + if ($this->fixApkMimeType()) { $this->emit('\OC\Repair', 'info', array('Fixed APK mime type')); } + + if ($this->fixFontsMimeTypes()) { + $this->emit('\OC\Repair', 'info', array('Fixed fonts mime types')); + } + + if ($this->fixPostscriptMimeType()) { + $this->emit('\OC\Repair', 'info', array('Fixed Postscript mime types')); + } } -} - +}
\ No newline at end of file |