summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/base.php5
-rw-r--r--lib/composer/composer/autoload_classmap.php38
-rw-r--r--lib/composer/composer/autoload_static.php38
-rw-r--r--lib/l10n/bg.js177
-rw-r--r--lib/l10n/bg.json175
-rw-r--r--lib/l10n/ca.js178
-rw-r--r--lib/l10n/ca.json176
-rw-r--r--lib/l10n/cs.js50
-rw-r--r--lib/l10n/cs.json50
-rw-r--r--lib/l10n/de.js59
-rw-r--r--lib/l10n/de.json59
-rw-r--r--lib/l10n/de_DE.js59
-rw-r--r--lib/l10n/de_DE.json59
-rw-r--r--lib/l10n/el.js42
-rw-r--r--lib/l10n/el.json42
-rw-r--r--lib/l10n/es.js57
-rw-r--r--lib/l10n/es.json57
-rw-r--r--lib/l10n/es_MX.js222
-rw-r--r--lib/l10n/es_MX.json220
-rw-r--r--lib/l10n/eu.js38
-rw-r--r--lib/l10n/eu.json38
-rw-r--r--lib/l10n/fi.js61
-rw-r--r--lib/l10n/fi.json61
-rw-r--r--lib/l10n/fr.js59
-rw-r--r--lib/l10n/fr.json59
-rw-r--r--lib/l10n/he.js46
-rw-r--r--lib/l10n/he.json46
-rw-r--r--lib/l10n/hu.js51
-rw-r--r--lib/l10n/hu.json51
-rw-r--r--lib/l10n/is.js44
-rw-r--r--lib/l10n/is.json44
-rw-r--r--lib/l10n/it.js59
-rw-r--r--lib/l10n/it.json59
-rw-r--r--lib/l10n/ja.js54
-rw-r--r--lib/l10n/ja.json54
-rw-r--r--lib/l10n/nb.js106
-rw-r--r--lib/l10n/nb.json106
-rw-r--r--lib/l10n/nl.js63
-rw-r--r--lib/l10n/nl.json63
-rw-r--r--lib/l10n/pl.js59
-rw-r--r--lib/l10n/pl.json59
-rw-r--r--lib/l10n/pt_BR.js213
-rw-r--r--lib/l10n/pt_BR.json213
-rw-r--r--lib/l10n/ru.js59
-rw-r--r--lib/l10n/ru.json59
-rw-r--r--lib/l10n/sk.js46
-rw-r--r--lib/l10n/sk.json46
-rw-r--r--lib/l10n/sq.js49
-rw-r--r--lib/l10n/sq.json49
-rw-r--r--lib/l10n/sv.js49
-rw-r--r--lib/l10n/sv.json49
-rw-r--r--lib/l10n/tr.js71
-rw-r--r--lib/l10n/tr.json71
-rw-r--r--lib/l10n/zh_CN.js51
-rw-r--r--lib/l10n/zh_CN.json51
-rw-r--r--lib/l10n/zh_TW.js49
-rw-r--r--lib/l10n/zh_TW.json49
-rw-r--r--lib/private/Accounts/AccountManager.php2
-rw-r--r--lib/private/Activity/EventMerger.php8
-rw-r--r--lib/private/App/CodeChecker/CodeChecker.php2
-rw-r--r--lib/private/App/Platform.php1
-rw-r--r--lib/private/AppFramework/App.php1
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php32
-rw-r--r--lib/private/AppFramework/Http/Request.php5
-rw-r--r--lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php83
-rw-r--r--lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php133
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php15
-rw-r--r--lib/private/AppFramework/Utility/ControllerMethodReflector.php55
-rw-r--r--lib/private/BackgroundJob/JobList.php15
-rw-r--r--lib/private/Cache/CappedMemoryCache.php6
-rw-r--r--lib/private/Comments/Manager.php211
-rw-r--r--lib/private/Config.php14
-rw-r--r--lib/private/Console/Application.php1
-rw-r--r--lib/private/Contacts/ContactsMenu/ActionFactory.php57
-rw-r--r--lib/private/Contacts/ContactsMenu/ActionProviderStore.php114
-rw-r--r--lib/private/Contacts/ContactsMenu/Actions/LinkAction.php103
-rw-r--r--lib/private/Contacts/ContactsMenu/ContactsStore.php95
-rw-r--r--lib/private/Contacts/ContactsMenu/Entry.php169
-rw-r--r--lib/private/Contacts/ContactsMenu/Manager.php96
-rw-r--r--lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php60
-rw-r--r--lib/private/DB/AdapterOCI8.php1
-rw-r--r--lib/private/DB/AdapterSqlite.php1
-rw-r--r--lib/private/DB/ConnectionFactory.php58
-rw-r--r--lib/private/DB/MDB2SchemaReader.php2
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php7
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php32
-rw-r--r--lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php60
-rw-r--r--lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php30
-rw-r--r--lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php30
-rw-r--r--lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php30
-rw-r--r--lib/private/DB/QueryBuilder/QueryBuilder.php36
-rw-r--r--lib/private/DB/QueryBuilder/QuoteHelper.php2
-rw-r--r--lib/private/DB/SQLiteSessionInit.php3
-rw-r--r--lib/private/Encryption/File.php35
-rw-r--r--lib/private/Encryption/Manager.php11
-rw-r--r--lib/private/Encryption/Util.php1
-rw-r--r--lib/private/Files/Cache/Cache.php51
-rw-r--r--lib/private/Files/Cache/QuerySearchHelper.php4
-rw-r--r--lib/private/Files/Cache/Scanner.php1
-rw-r--r--lib/private/Files/Cache/StorageGlobal.php1
-rw-r--r--lib/private/Files/Config/LazyStorageMountInfo.php3
-rw-r--r--lib/private/Files/Config/UserMountCache.php15
-rw-r--r--lib/private/Files/FileInfo.php2
-rw-r--r--lib/private/Files/Filesystem.php1
-rw-r--r--lib/private/Files/Node/Folder.php9
-rw-r--r--lib/private/Files/Node/LazyRoot.php2
-rw-r--r--lib/private/Files/ObjectStore/Swift.php136
-rw-r--r--lib/private/Files/Storage/DAV.php2
-rw-r--r--lib/private/Files/Storage/Local.php14
-rw-r--r--lib/private/Files/Storage/Wrapper/Encryption.php6
-rw-r--r--lib/private/Files/Storage/Wrapper/Jail.php80
-rw-r--r--lib/private/Files/Storage/Wrapper/PermissionsMask.php4
-rw-r--r--lib/private/Files/Type/Loader.php1
-rw-r--r--lib/private/Files/Utils/Scanner.php5
-rw-r--r--lib/private/Files/View.php4
-rw-r--r--lib/private/Installer.php1
-rw-r--r--lib/private/L10N/Factory.php18
-rw-r--r--lib/private/Lockdown/Filesystem/NullCache.php1
-rw-r--r--lib/private/Lockdown/LockdownManager.php41
-rw-r--r--lib/private/Log.php2
-rw-r--r--lib/private/Log/File.php12
-rw-r--r--lib/private/Mail/EMailTemplate.php513
-rw-r--r--lib/private/Mail/Mailer.php31
-rw-r--r--lib/private/NavigationManager.php190
-rw-r--r--lib/private/OCS/DiscoveryService.php125
-rw-r--r--lib/private/Repair/CleanTags.php2
-rw-r--r--lib/private/Repair/RepairInvalidShares.php1
-rw-r--r--lib/private/Repair/RepairMimeTypes.php13
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php135
-rw-r--r--lib/private/Security/CredentialsManager.php1
-rw-r--r--lib/private/Security/Normalizer/IpAddress.php106
-rw-r--r--lib/private/Security/RateLimiting/Backend/IBackend.php54
-rw-r--r--lib/private/Security/RateLimiting/Backend/MemoryCache.php116
-rw-r--r--lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php31
-rw-r--r--lib/private/Security/RateLimiting/Limiter.php106
-rw-r--r--lib/private/Security/SecureRandom.php2
-rw-r--r--lib/private/Server.php98
-rw-r--r--lib/private/ServerContainer.php9
-rw-r--r--lib/private/Session/CryptoSessionData.php11
-rw-r--r--lib/private/Session/Internal.php2
-rw-r--r--lib/private/Settings/Admin/Additional.php12
-rw-r--r--lib/private/Settings/Admin/ServerDevNotice.php9
-rw-r--r--lib/private/Settings/Admin/Sharing.php1
-rw-r--r--lib/private/Settings/Manager.php1
-rw-r--r--lib/private/Setup.php12
-rw-r--r--lib/private/Setup/AbstractDatabase.php1
-rw-r--r--lib/private/Setup/OCI.php4
-rw-r--r--lib/private/Setup/PostgreSQL.php2
-rw-r--r--lib/private/Share/MailNotifications.php158
-rw-r--r--lib/private/Share/Share.php9
-rw-r--r--lib/private/Share20/DefaultShareProvider.php131
-rw-r--r--lib/private/Share20/Manager.php269
-rw-r--r--lib/private/Share20/ProviderFactory.php20
-rw-r--r--lib/private/Share20/ShareHelper.php217
-rw-r--r--lib/private/SystemTag/SystemTagManager.php1
-rw-r--r--lib/private/Template/Base.php6
-rw-r--r--lib/private/Template/JSCombiner.php9
-rw-r--r--lib/private/Template/JSConfigHelper.php11
-rw-r--r--lib/private/Template/SCSSCacher.php80
-rw-r--r--lib/private/TemplateLayout.php30
-rw-r--r--lib/private/Updater/VersionCheck.php22
-rw-r--r--lib/private/User/Database.php3
-rw-r--r--lib/private/User/Manager.php27
-rw-r--r--lib/private/User/Session.php140
-rw-r--r--lib/private/User/User.php13
-rw-r--r--lib/private/legacy/app.php143
-rw-r--r--lib/private/legacy/defaults.php42
-rw-r--r--lib/private/legacy/response.php6
-rw-r--r--lib/private/legacy/template.php4
-rw-r--r--lib/private/legacy/util.php36
-rw-r--r--lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php3
-rw-r--r--lib/public/AppFramework/Http/NotFoundResponse.php1
-rw-r--r--lib/public/AppFramework/Http/RedirectResponse.php1
-rw-r--r--lib/public/AppFramework/Http/Response.php19
-rw-r--r--lib/public/AppFramework/IAppContainer.php1
-rw-r--r--lib/public/AppFramework/Middleware.php1
-rw-r--r--lib/public/AppFramework/OCSController.php1
-rw-r--r--lib/public/Comments/ICommentsManager.php12
-rw-r--r--lib/public/Contacts/ContactsMenu/IAction.php65
-rw-r--r--lib/public/Contacts/ContactsMenu/IActionFactory.php54
-rw-r--r--lib/public/Contacts/ContactsMenu/IEntry.php66
-rw-r--r--lib/public/Contacts/ContactsMenu/ILinkAction.php43
-rw-r--r--lib/public/Contacts/ContactsMenu/IProvider.php38
-rw-r--r--lib/public/DB/QueryBuilder/IFunctionBuilder.php72
-rw-r--r--lib/public/DB/QueryBuilder/IQueryBuilder.php19
-rw-r--r--lib/public/Defaults.php45
-rw-r--r--lib/public/Files/Cache/ICache.php1
-rw-r--r--lib/public/Files/Config/IMountProviderCollection.php1
-rw-r--r--lib/public/Files/Config/IUserMountCache.php6
-rw-r--r--lib/public/L10N/IFactory.php8
-rw-r--r--lib/public/Mail/IEMailTemplate.php135
-rw-r--r--lib/public/Mail/IMailer.php8
-rw-r--r--lib/public/OCS/IDiscoveryService.php48
-rw-r--r--lib/public/Share/IManager.php47
-rw-r--r--lib/public/Share/IShare.php2
-rw-r--r--lib/public/Share/IShareHelper.php41
-rw-r--r--lib/public/Share/IShareProvider.php12
-rw-r--r--lib/public/SystemTag/ISystemTagManager.php1
198 files changed, 6389 insertions, 3577 deletions
diff --git a/lib/base.php b/lib/base.php
index a6601a2dd67..1db6b84c5fb 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -727,6 +727,9 @@ class OC {
self::registerAccountHooks();
self::registerSettingsHooks();
+ $settings = new \OC\Settings\Application();
+ $settings->register();
+
//make sure temporary files are cleaned up
$tmpManager = \OC::$server->getTempManager();
register_shutdown_function(array($tmpManager, 'clean'));
@@ -912,7 +915,7 @@ class OC {
if (!$systemConfig->getValue('installed', false)) {
\OC::$server->getSession()->clear();
$setupHelper = new OC\Setup(\OC::$server->getSystemConfig(), \OC::$server->getIniWrapper(),
- \OC::$server->getL10N('lib'), \OC::$server->getThemingDefaults(), \OC::$server->getLogger(),
+ \OC::$server->getL10N('lib'), \OC::$server->query(\OCP\Defaults::class), \OC::$server->getLogger(),
\OC::$server->getSecureRandom());
$controller = new OC\Core\Controller\SetupController($setupHelper);
$controller->run($_POST);
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index f009c0be203..9dea4d10fb2 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -80,10 +80,16 @@ return array(
'OCP\\Console\\ConsoleEvent' => $baseDir . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Constants' => $baseDir . '/lib/public/Constants.php',
'OCP\\Contacts' => $baseDir . '/lib/public/Contacts.php',
+ 'OCP\\Contacts\\ContactsMenu\\IAction' => $baseDir . '/lib/public/Contacts/ContactsMenu/IAction.php',
+ 'OCP\\Contacts\\ContactsMenu\\IActionFactory' => $baseDir . '/lib/public/Contacts/ContactsMenu/IActionFactory.php',
+ 'OCP\\Contacts\\ContactsMenu\\IEntry' => $baseDir . '/lib/public/Contacts/ContactsMenu/IEntry.php',
+ 'OCP\\Contacts\\ContactsMenu\\ILinkAction' => $baseDir . '/lib/public/Contacts/ContactsMenu/ILinkAction.php',
+ 'OCP\\Contacts\\ContactsMenu\\IProvider' => $baseDir . '/lib/public/Contacts/ContactsMenu/IProvider.php',
'OCP\\Contacts\\IManager' => $baseDir . '/lib/public/Contacts/IManager.php',
'OCP\\DB' => $baseDir . '/lib/public/DB.php',
'OCP\\DB\\QueryBuilder\\ICompositeExpression' => $baseDir . '/lib/public/DB/QueryBuilder/ICompositeExpression.php',
'OCP\\DB\\QueryBuilder\\IExpressionBuilder' => $baseDir . '/lib/public/DB/QueryBuilder/IExpressionBuilder.php',
+ 'OCP\\DB\\QueryBuilder\\IFunctionBuilder' => $baseDir . '/lib/public/DB/QueryBuilder/IFunctionBuilder.php',
'OCP\\DB\\QueryBuilder\\ILiteral' => $baseDir . '/lib/public/DB/QueryBuilder/ILiteral.php',
'OCP\\DB\\QueryBuilder\\IParameter' => $baseDir . '/lib/public/DB/QueryBuilder/IParameter.php',
'OCP\\DB\\QueryBuilder\\IQueryBuilder' => $baseDir . '/lib/public/DB/QueryBuilder/IQueryBuilder.php',
@@ -210,6 +216,7 @@ return array(
'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php',
'OCP\\Migration\\IOutput' => $baseDir . '/lib/public/Migration/IOutput.php',
'OCP\\Migration\\IRepairStep' => $baseDir . '/lib/public/Migration/IRepairStep.php',
@@ -218,6 +225,7 @@ return array(
'OCP\\Notification\\IManager' => $baseDir . '/lib/public/Notification/IManager.php',
'OCP\\Notification\\INotification' => $baseDir . '/lib/public/Notification/INotification.php',
'OCP\\Notification\\INotifier' => $baseDir . '/lib/public/Notification/INotifier.php',
+ 'OCP\\OCS\\IDiscoveryService' => $baseDir . '/lib/public/OCS/IDiscoveryService.php',
'OCP\\PreConditionNotMetException' => $baseDir . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => $baseDir . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => $baseDir . '/lib/public/Response.php',
@@ -249,6 +257,7 @@ return array(
'OCP\\Share\\IManager' => $baseDir . '/lib/public/Share/IManager.php',
'OCP\\Share\\IProviderFactory' => $baseDir . '/lib/public/Share/IProviderFactory.php',
'OCP\\Share\\IShare' => $baseDir . '/lib/public/Share/IShare.php',
+ 'OCP\\Share\\IShareHelper' => $baseDir . '/lib/public/Share/IShareHelper.php',
'OCP\\Share\\IShareProvider' => $baseDir . '/lib/public/Share/IShareProvider.php',
'OCP\\Share_Backend' => $baseDir . '/lib/public/Share_Backend.php',
'OCP\\Share_Backend_Collection' => $baseDir . '/lib/public/Share_Backend_Collection.php',
@@ -287,6 +296,7 @@ return array(
'OC\\AppFramework\\Http\\Request' => $baseDir . '/lib/private/AppFramework/Http/Request.php',
'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => $baseDir . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php',
'OC\\AppFramework\\Middleware\\OCSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/OCSMiddleware.php',
+ 'OC\\AppFramework\\Middleware\\Security\\BruteForceMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php',
@@ -295,6 +305,7 @@ return array(
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php',
+ 'OC\\AppFramework\\Middleware\\Security\\RateLimitingMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php',
'OC\\AppFramework\\Middleware\\SessionMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/SessionMiddleware.php',
'OC\\AppFramework\\OCS\\BaseResponse' => $baseDir . '/lib/private/AppFramework/OCS/BaseResponse.php',
@@ -367,6 +378,13 @@ return array(
'OC\\Console\\Application' => $baseDir . '/lib/private/Console/Application.php',
'OC\\Console\\TimestampFormatter' => $baseDir . '/lib/private/Console/TimestampFormatter.php',
'OC\\ContactsManager' => $baseDir . '/lib/private/ContactsManager.php',
+ 'OC\\Contacts\\ContactsMenu\\ActionFactory' => $baseDir . '/lib/private/Contacts/ContactsMenu/ActionFactory.php',
+ 'OC\\Contacts\\ContactsMenu\\ActionProviderStore' => $baseDir . '/lib/private/Contacts/ContactsMenu/ActionProviderStore.php',
+ 'OC\\Contacts\\ContactsMenu\\Actions\\LinkAction' => $baseDir . '/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php',
+ 'OC\\Contacts\\ContactsMenu\\ContactsStore' => $baseDir . '/lib/private/Contacts/ContactsMenu/ContactsStore.php',
+ 'OC\\Contacts\\ContactsMenu\\Entry' => $baseDir . '/lib/private/Contacts/ContactsMenu/Entry.php',
+ 'OC\\Contacts\\ContactsMenu\\Manager' => $baseDir . '/lib/private/Contacts/ContactsMenu/Manager.php',
+ 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php',
'OC\\Core\\Application' => $baseDir . '/core/Application.php',
'OC\\Core\\Command\\App\\CheckCode' => $baseDir . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => $baseDir . '/core/Command/App/Disable.php',
@@ -438,6 +456,8 @@ return array(
'OC\\Core\\Command\\User\\ResetPassword' => $baseDir . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => $baseDir . '/core/Command/User/Setting.php',
'OC\\Core\\Controller\\AvatarController' => $baseDir . '/core/Controller/AvatarController.php',
+ 'OC\\Core\\Controller\\ClientFlowLoginController' => $baseDir . '/core/Controller/ClientFlowLoginController.php',
+ 'OC\\Core\\Controller\\ContactsMenuController' => $baseDir . '/core/Controller/ContactsMenuController.php',
'OC\\Core\\Controller\\CssController' => $baseDir . '/core/Controller/CssController.php',
'OC\\Core\\Controller\\JsController' => $baseDir . '/core/Controller/JsController.php',
'OC\\Core\\Controller\\LoginController' => $baseDir . '/core/Controller/LoginController.php',
@@ -473,6 +493,11 @@ return array(
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\MySqlExpressionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php',
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\OCIExpressionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php',
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\PgSqlExpressionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\ExpressionBuilder\\SqliteExpressionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\FunctionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\OCIFunctionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\PgSqlFunctionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\SqliteFunctionBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php',
'OC\\DB\\QueryBuilder\\Literal' => $baseDir . '/lib/private/DB/QueryBuilder/Literal.php',
'OC\\DB\\QueryBuilder\\Parameter' => $baseDir . '/lib/private/DB/QueryBuilder/Parameter.php',
'OC\\DB\\QueryBuilder\\QueryBuilder' => $baseDir . '/lib/private/DB/QueryBuilder/QueryBuilder.php',
@@ -631,6 +656,7 @@ return array(
'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\EMailTemplate' => $baseDir . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php',
'OC\\Memcache\\APCu' => $baseDir . '/lib/private/Memcache/APCu.php',
@@ -654,6 +680,7 @@ return array(
'OC\\Notification\\Manager' => $baseDir . '/lib/private/Notification/Manager.php',
'OC\\Notification\\Notification' => $baseDir . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => $baseDir . '/lib/private/OCS/CoreCapabilities.php',
+ 'OC\\OCS\\DiscoveryService' => $baseDir . '/lib/private/OCS/DiscoveryService.php',
'OC\\OCS\\Exception' => $baseDir . '/lib/private/OCS/Exception.php',
'OC\\OCS\\PrivateData' => $baseDir . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => $baseDir . '/lib/private/OCS/Provider.php',
@@ -732,6 +759,11 @@ return array(
'OC\\Security\\IdentityProof\\Key' => $baseDir . '/lib/private/Security/IdentityProof/Key.php',
'OC\\Security\\IdentityProof\\Manager' => $baseDir . '/lib/private/Security/IdentityProof/Manager.php',
'OC\\Security\\IdentityProof\\Signer' => $baseDir . '/lib/private/Security/IdentityProof/Signer.php',
+ 'OC\\Security\\Normalizer\\IpAddress' => $baseDir . '/lib/private/Security/Normalizer/IpAddress.php',
+ 'OC\\Security\\RateLimiting\\Backend\\IBackend' => $baseDir . '/lib/private/Security/RateLimiting/Backend/IBackend.php',
+ 'OC\\Security\\RateLimiting\\Backend\\MemoryCache' => $baseDir . '/lib/private/Security/RateLimiting/Backend/MemoryCache.php',
+ 'OC\\Security\\RateLimiting\\Exception\\RateLimitExceededException' => $baseDir . '/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php',
+ 'OC\\Security\\RateLimiting\\Limiter' => $baseDir . '/lib/private/Security/RateLimiting/Limiter.php',
'OC\\Security\\SecureRandom' => $baseDir . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => $baseDir . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => $baseDir . '/lib/private/Server.php',
@@ -743,6 +775,8 @@ return array(
'OC\\Session\\Internal' => $baseDir . '/lib/private/Session/Internal.php',
'OC\\Session\\Memory' => $baseDir . '/lib/private/Session/Memory.php',
'OC\\Session\\Session' => $baseDir . '/lib/private/Session/Session.php',
+ 'OC\\Settings\\Activity\\Provider' => $baseDir . '/settings/Activity/Provider.php',
+ 'OC\\Settings\\Activity\\Setting' => $baseDir . '/settings/Activity/Setting.php',
'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
@@ -763,6 +797,8 @@ return array(
'OC\\Settings\\Controller\\PersonalController' => $baseDir . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => $baseDir . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => $baseDir . '/settings/Controller/UsersController.php',
+ 'OC\\Settings\\Hooks' => $baseDir . '/settings/Hooks.php',
+ 'OC\\Settings\\Mailer\\NewUserMailHelper' => $baseDir . '/settings/Mailer/NewUserMailHelper.php',
'OC\\Settings\\Manager' => $baseDir . '/lib/private/Settings/Manager.php',
'OC\\Settings\\Mapper' => $baseDir . '/lib/private/Settings/Mapper.php',
'OC\\Settings\\Middleware\\SubadminMiddleware' => $baseDir . '/settings/Middleware/SubadminMiddleware.php',
@@ -783,9 +819,9 @@ return array(
'OC\\Share20\\Manager' => $baseDir . '/lib/private/Share20/Manager.php',
'OC\\Share20\\ProviderFactory' => $baseDir . '/lib/private/Share20/ProviderFactory.php',
'OC\\Share20\\Share' => $baseDir . '/lib/private/Share20/Share.php',
+ 'OC\\Share20\\ShareHelper' => $baseDir . '/lib/private/Share20/ShareHelper.php',
'OC\\Share\\Constants' => $baseDir . '/lib/private/Share/Constants.php',
'OC\\Share\\Helper' => $baseDir . '/lib/private/Share/Helper.php',
- 'OC\\Share\\MailNotifications' => $baseDir . '/lib/private/Share/MailNotifications.php',
'OC\\Share\\SearchResultSorter' => $baseDir . '/lib/private/Share/SearchResultSorter.php',
'OC\\Share\\Share' => $baseDir . '/lib/private/Share/Share.php',
'OC\\Streamer' => $baseDir . '/lib/private/Streamer.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 9a6a41d8a37..11d949de34a 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -110,10 +110,16 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Console\\ConsoleEvent' => __DIR__ . '/../../..' . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Constants' => __DIR__ . '/../../..' . '/lib/public/Constants.php',
'OCP\\Contacts' => __DIR__ . '/../../..' . '/lib/public/Contacts.php',
+ 'OCP\\Contacts\\ContactsMenu\\IAction' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/IAction.php',
+ 'OCP\\Contacts\\ContactsMenu\\IActionFactory' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/IActionFactory.php',
+ 'OCP\\Contacts\\ContactsMenu\\IEntry' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/IEntry.php',
+ 'OCP\\Contacts\\ContactsMenu\\ILinkAction' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/ILinkAction.php',
+ 'OCP\\Contacts\\ContactsMenu\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/IProvider.php',
'OCP\\Contacts\\IManager' => __DIR__ . '/../../..' . '/lib/public/Contacts/IManager.php',
'OCP\\DB' => __DIR__ . '/../../..' . '/lib/public/DB.php',
'OCP\\DB\\QueryBuilder\\ICompositeExpression' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/ICompositeExpression.php',
'OCP\\DB\\QueryBuilder\\IExpressionBuilder' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/IExpressionBuilder.php',
+ 'OCP\\DB\\QueryBuilder\\IFunctionBuilder' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/IFunctionBuilder.php',
'OCP\\DB\\QueryBuilder\\ILiteral' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/ILiteral.php',
'OCP\\DB\\QueryBuilder\\IParameter' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/IParameter.php',
'OCP\\DB\\QueryBuilder\\IQueryBuilder' => __DIR__ . '/../../..' . '/lib/public/DB/QueryBuilder/IQueryBuilder.php',
@@ -240,6 +246,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php',
'OCP\\Migration\\IOutput' => __DIR__ . '/../../..' . '/lib/public/Migration/IOutput.php',
'OCP\\Migration\\IRepairStep' => __DIR__ . '/../../..' . '/lib/public/Migration/IRepairStep.php',
@@ -248,6 +255,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Notification\\IManager' => __DIR__ . '/../../..' . '/lib/public/Notification/IManager.php',
'OCP\\Notification\\INotification' => __DIR__ . '/../../..' . '/lib/public/Notification/INotification.php',
'OCP\\Notification\\INotifier' => __DIR__ . '/../../..' . '/lib/public/Notification/INotifier.php',
+ 'OCP\\OCS\\IDiscoveryService' => __DIR__ . '/../../..' . '/lib/public/OCS/IDiscoveryService.php',
'OCP\\PreConditionNotMetException' => __DIR__ . '/../../..' . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => __DIR__ . '/../../..' . '/lib/public/Response.php',
@@ -279,6 +287,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Share\\IManager' => __DIR__ . '/../../..' . '/lib/public/Share/IManager.php',
'OCP\\Share\\IProviderFactory' => __DIR__ . '/../../..' . '/lib/public/Share/IProviderFactory.php',
'OCP\\Share\\IShare' => __DIR__ . '/../../..' . '/lib/public/Share/IShare.php',
+ 'OCP\\Share\\IShareHelper' => __DIR__ . '/../../..' . '/lib/public/Share/IShareHelper.php',
'OCP\\Share\\IShareProvider' => __DIR__ . '/../../..' . '/lib/public/Share/IShareProvider.php',
'OCP\\Share_Backend' => __DIR__ . '/../../..' . '/lib/public/Share_Backend.php',
'OCP\\Share_Backend_Collection' => __DIR__ . '/../../..' . '/lib/public/Share_Backend_Collection.php',
@@ -317,6 +326,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\AppFramework\\Http\\Request' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Request.php',
'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php',
'OC\\AppFramework\\Middleware\\OCSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/OCSMiddleware.php',
+ 'OC\\AppFramework\\Middleware\\Security\\BruteForceMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php',
@@ -325,6 +335,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php',
+ 'OC\\AppFramework\\Middleware\\Security\\RateLimitingMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php',
'OC\\AppFramework\\Middleware\\SessionMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/SessionMiddleware.php',
'OC\\AppFramework\\OCS\\BaseResponse' => __DIR__ . '/../../..' . '/lib/private/AppFramework/OCS/BaseResponse.php',
@@ -397,6 +408,13 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Console\\Application' => __DIR__ . '/../../..' . '/lib/private/Console/Application.php',
'OC\\Console\\TimestampFormatter' => __DIR__ . '/../../..' . '/lib/private/Console/TimestampFormatter.php',
'OC\\ContactsManager' => __DIR__ . '/../../..' . '/lib/private/ContactsManager.php',
+ 'OC\\Contacts\\ContactsMenu\\ActionFactory' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/ActionFactory.php',
+ 'OC\\Contacts\\ContactsMenu\\ActionProviderStore' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/ActionProviderStore.php',
+ 'OC\\Contacts\\ContactsMenu\\Actions\\LinkAction' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php',
+ 'OC\\Contacts\\ContactsMenu\\ContactsStore' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/ContactsStore.php',
+ 'OC\\Contacts\\ContactsMenu\\Entry' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Entry.php',
+ 'OC\\Contacts\\ContactsMenu\\Manager' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Manager.php',
+ 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php',
'OC\\Core\\Application' => __DIR__ . '/../../..' . '/core/Application.php',
'OC\\Core\\Command\\App\\CheckCode' => __DIR__ . '/../../..' . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => __DIR__ . '/../../..' . '/core/Command/App/Disable.php',
@@ -468,6 +486,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Core\\Command\\User\\ResetPassword' => __DIR__ . '/../../..' . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => __DIR__ . '/../../..' . '/core/Command/User/Setting.php',
'OC\\Core\\Controller\\AvatarController' => __DIR__ . '/../../..' . '/core/Controller/AvatarController.php',
+ 'OC\\Core\\Controller\\ClientFlowLoginController' => __DIR__ . '/../../..' . '/core/Controller/ClientFlowLoginController.php',
+ 'OC\\Core\\Controller\\ContactsMenuController' => __DIR__ . '/../../..' . '/core/Controller/ContactsMenuController.php',
'OC\\Core\\Controller\\CssController' => __DIR__ . '/../../..' . '/core/Controller/CssController.php',
'OC\\Core\\Controller\\JsController' => __DIR__ . '/../../..' . '/core/Controller/JsController.php',
'OC\\Core\\Controller\\LoginController' => __DIR__ . '/../../..' . '/core/Controller/LoginController.php',
@@ -503,6 +523,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\MySqlExpressionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php',
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\OCIExpressionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php',
'OC\\DB\\QueryBuilder\\ExpressionBuilder\\PgSqlExpressionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\ExpressionBuilder\\SqliteExpressionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\FunctionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\OCIFunctionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\PgSqlFunctionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php',
+ 'OC\\DB\\QueryBuilder\\FunctionBuilder\\SqliteFunctionBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php',
'OC\\DB\\QueryBuilder\\Literal' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/Literal.php',
'OC\\DB\\QueryBuilder\\Parameter' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/Parameter.php',
'OC\\DB\\QueryBuilder\\QueryBuilder' => __DIR__ . '/../../..' . '/lib/private/DB/QueryBuilder/QueryBuilder.php',
@@ -661,6 +686,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\EMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php',
'OC\\Memcache\\APCu' => __DIR__ . '/../../..' . '/lib/private/Memcache/APCu.php',
@@ -684,6 +710,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Notification\\Manager' => __DIR__ . '/../../..' . '/lib/private/Notification/Manager.php',
'OC\\Notification\\Notification' => __DIR__ . '/../../..' . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => __DIR__ . '/../../..' . '/lib/private/OCS/CoreCapabilities.php',
+ 'OC\\OCS\\DiscoveryService' => __DIR__ . '/../../..' . '/lib/private/OCS/DiscoveryService.php',
'OC\\OCS\\Exception' => __DIR__ . '/../../..' . '/lib/private/OCS/Exception.php',
'OC\\OCS\\PrivateData' => __DIR__ . '/../../..' . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => __DIR__ . '/../../..' . '/lib/private/OCS/Provider.php',
@@ -762,6 +789,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Security\\IdentityProof\\Key' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Key.php',
'OC\\Security\\IdentityProof\\Manager' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Manager.php',
'OC\\Security\\IdentityProof\\Signer' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Signer.php',
+ 'OC\\Security\\Normalizer\\IpAddress' => __DIR__ . '/../../..' . '/lib/private/Security/Normalizer/IpAddress.php',
+ 'OC\\Security\\RateLimiting\\Backend\\IBackend' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Backend/IBackend.php',
+ 'OC\\Security\\RateLimiting\\Backend\\MemoryCache' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Backend/MemoryCache.php',
+ 'OC\\Security\\RateLimiting\\Exception\\RateLimitExceededException' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php',
+ 'OC\\Security\\RateLimiting\\Limiter' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Limiter.php',
'OC\\Security\\SecureRandom' => __DIR__ . '/../../..' . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => __DIR__ . '/../../..' . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => __DIR__ . '/../../..' . '/lib/private/Server.php',
@@ -773,6 +805,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Session\\Internal' => __DIR__ . '/../../..' . '/lib/private/Session/Internal.php',
'OC\\Session\\Memory' => __DIR__ . '/../../..' . '/lib/private/Session/Memory.php',
'OC\\Session\\Session' => __DIR__ . '/../../..' . '/lib/private/Session/Session.php',
+ 'OC\\Settings\\Activity\\Provider' => __DIR__ . '/../../..' . '/settings/Activity/Provider.php',
+ 'OC\\Settings\\Activity\\Setting' => __DIR__ . '/../../..' . '/settings/Activity/Setting.php',
'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
@@ -793,6 +827,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Settings\\Controller\\PersonalController' => __DIR__ . '/../../..' . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => __DIR__ . '/../../..' . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => __DIR__ . '/../../..' . '/settings/Controller/UsersController.php',
+ 'OC\\Settings\\Hooks' => __DIR__ . '/../../..' . '/settings/Hooks.php',
+ 'OC\\Settings\\Mailer\\NewUserMailHelper' => __DIR__ . '/../../..' . '/settings/Mailer/NewUserMailHelper.php',
'OC\\Settings\\Manager' => __DIR__ . '/../../..' . '/lib/private/Settings/Manager.php',
'OC\\Settings\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Settings/Mapper.php',
'OC\\Settings\\Middleware\\SubadminMiddleware' => __DIR__ . '/../../..' . '/settings/Middleware/SubadminMiddleware.php',
@@ -813,9 +849,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Share20\\Manager' => __DIR__ . '/../../..' . '/lib/private/Share20/Manager.php',
'OC\\Share20\\ProviderFactory' => __DIR__ . '/../../..' . '/lib/private/Share20/ProviderFactory.php',
'OC\\Share20\\Share' => __DIR__ . '/../../..' . '/lib/private/Share20/Share.php',
+ 'OC\\Share20\\ShareHelper' => __DIR__ . '/../../..' . '/lib/private/Share20/ShareHelper.php',
'OC\\Share\\Constants' => __DIR__ . '/../../..' . '/lib/private/Share/Constants.php',
'OC\\Share\\Helper' => __DIR__ . '/../../..' . '/lib/private/Share/Helper.php',
- 'OC\\Share\\MailNotifications' => __DIR__ . '/../../..' . '/lib/private/Share/MailNotifications.php',
'OC\\Share\\SearchResultSorter' => __DIR__ . '/../../..' . '/lib/private/Share/SearchResultSorter.php',
'OC\\Share\\Share' => __DIR__ . '/../../..' . '/lib/private/Share/Share.php',
'OC\\Streamer' => __DIR__ . '/../../..' . '/lib/private/Streamer.php',
diff --git a/lib/l10n/bg.js b/lib/l10n/bg.js
deleted file mode 100644
index 2692a983790..00000000000
--- a/lib/l10n/bg.js
+++ /dev/null
@@ -1,177 +0,0 @@
-OC.L10N.register(
- "lib",
- {
- "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.",
- "See %s" : "Вижте %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %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",
- "%1$s and %2$s" : "%1$s и %2$s",
- "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
- "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",
- "Unknown filetype" : "Непознат тип файл",
- "Invalid image" : "Невалидно изображение.",
- "today" : "днес",
- "yesterday" : "вчера",
- "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"],
- "last month" : "миналия месец",
- "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"],
- "last year" : "миналата година",
- "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"],
- "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"],
- "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"],
- "seconds ago" : "преди секунди",
- "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ",
- "File name is too long" : "Името на файла е твърде дълго",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Server settings" : "Настройки на сървъра",
- "Sharing" : "Споделяне",
- "Additional settings" : "Допълнителни настройки",
- "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
- "%s enter the database username." : "%s въведете потребител за базата данни.",
- "%s enter the database name." : "%s въведи име на базата данни.",
- "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.",
- "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.",
- "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".",
- "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".",
- "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.",
- "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.",
- "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.",
- "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
- "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
- "Set an admin username." : "Задайте потребителско име за администратор.",
- "Set an admin password." : "Задай парола за администратор.",
- "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
- "%s shared »%s« with you" : "%s сподели »%s« с теб",
- "%s via %s" : "%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 does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.",
- "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.",
- "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.",
- "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, защото съдържанието не е открито.",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени",
- "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.",
- "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.",
- "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.",
- "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.",
- "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.",
- "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".",
- "Sunday" : "неделя",
- "Monday" : "понеделник",
- "Tuesday" : "вторник",
- "Wednesday" : "сряда",
- "Thursday" : "четвъртък",
- "Friday" : "петък",
- "Saturday" : "събота",
- "Sun." : "нед",
- "Mon." : "пон",
- "Tue." : "вт",
- "Wed." : "ср",
- "Thu." : "чет",
- "Fri." : "пет",
- "Sat." : "съб",
- "Su" : "нд",
- "Mo" : "пн",
- "We" : "ср",
- "Th" : "чт",
- "Fr" : "пт",
- "Sa" : "сб",
- "January" : "януари",
- "February" : "февруару",
- "March" : "март",
- "April" : "април",
- "May" : "май",
- "June" : "юни",
- "July" : "юли",
- "August" : "август",
- "September" : "септември",
- "October" : "октомври",
- "November" : "ноември",
- "December" : "декември",
- "Jan." : "яну",
- "Feb." : "фев",
- "Mar." : "мар",
- "Apr." : "апр",
- "May." : "май",
- "Jun." : "юни",
- "Jul." : "юли",
- "Aug." : "авг",
- "Sep." : "сеп",
- "Oct." : "окт",
- "Nov." : "ное",
- "Dec." : "дек",
- "Apps" : "Приложения",
- "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
- "A valid username must be provided" : "Трябва да въведете валидно потребителско.",
- "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.",
- "A valid password must be provided" : "Трябва да въведете валидна парола.",
- "The username is already being used" : "Потребителското име е вече заето.",
- "Help" : "Помощ",
- "Personal" : "Лични",
- "Users" : "Потребители",
- "Admin" : "Админ",
- "No app name specified" : "Не е зададено име на преложението",
- "a safe home for all your data" : "безопасен дом за всички ваши данни",
- "Can't read file" : "Файлът не може да бъде прочетен",
- "Application is not enabled" : "Приложението не е включено",
- "Authentication error" : "Проблем с идентификацията",
- "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.",
- "Unknown user" : "Непознат потребител",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).",
- "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.",
- "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." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.",
- "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).",
- "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 не е инсталиран.",
- "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 модулите са инсталирани, но все още се обявяват като липсващи?",
- "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.",
- "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9",
- "Please upgrade your database version" : "Моля, обнови базата данни.",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.",
- "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители",
- "Data directory (%s) is invalid" : "Data папката (%s) e невалидна",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.",
- "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
- "App directory already exists" : "Папката на приложението вече съществува.",
- "Can't create app folder. Please fix permissions. %s" : "Папката не може да бъде създадена. Моля, коригирайте правата. %s",
- "No source specified when installing app" : "Не е посочен източник при инсталацията на приложението.",
- "No href specified when installing app from http" : "Липсва съдържанието на връзката за инсталиране на приложението",
- "No path specified when installing app from local file" : "Не е зададен пътя до локалния файл за инсталиране на приложението.",
- "Archives of type %s are not supported" : "Архиви от тип %s не се подържат",
- "Failed to open archive when installing app" : "Неуспешно отваряне на архив по време на инсталацията на приложението.",
- "App does not provide an info.xml file" : "Приложенението не съдържа файла info.xml",
- "App can't be installed because of not allowed code in the App" : "Приложението няма да бъде инсталирано, защото съдържа неразрешен код.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложението няма да бъде инсталирано, защото съдържа етикета <shipped>true</shipped>, който не е разрешен за не shiped приложения.",
- "Recommended" : "Препоръчано",
- "Storage not available" : "Хранилището не е налично"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/bg.json b/lib/l10n/bg.json
deleted file mode 100644
index 279f13f1bc3..00000000000
--- a/lib/l10n/bg.json
+++ /dev/null
@@ -1,175 +0,0 @@
-{ "translations": {
- "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.",
- "See %s" : "Вижте %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %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",
- "%1$s and %2$s" : "%1$s и %2$s",
- "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
- "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",
- "Unknown filetype" : "Непознат тип файл",
- "Invalid image" : "Невалидно изображение.",
- "today" : "днес",
- "yesterday" : "вчера",
- "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"],
- "last month" : "миналия месец",
- "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"],
- "last year" : "миналата година",
- "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"],
- "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"],
- "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"],
- "seconds ago" : "преди секунди",
- "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ",
- "File name is too long" : "Името на файла е твърде дълго",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Server settings" : "Настройки на сървъра",
- "Sharing" : "Споделяне",
- "Additional settings" : "Допълнителни настройки",
- "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
- "%s enter the database username." : "%s въведете потребител за базата данни.",
- "%s enter the database name." : "%s въведи име на базата данни.",
- "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.",
- "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.",
- "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".",
- "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".",
- "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.",
- "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.",
- "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.",
- "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
- "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
- "Set an admin username." : "Задайте потребителско име за администратор.",
- "Set an admin password." : "Задай парола за администратор.",
- "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
- "%s shared »%s« with you" : "%s сподели »%s« с теб",
- "%s via %s" : "%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 does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.",
- "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.",
- "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.",
- "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, защото съдържанието не е открито.",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени",
- "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.",
- "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.",
- "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.",
- "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.",
- "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.",
- "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".",
- "Sunday" : "неделя",
- "Monday" : "понеделник",
- "Tuesday" : "вторник",
- "Wednesday" : "сряда",
- "Thursday" : "четвъртък",
- "Friday" : "петък",
- "Saturday" : "събота",
- "Sun." : "нед",
- "Mon." : "пон",
- "Tue." : "вт",
- "Wed." : "ср",
- "Thu." : "чет",
- "Fri." : "пет",
- "Sat." : "съб",
- "Su" : "нд",
- "Mo" : "пн",
- "We" : "ср",
- "Th" : "чт",
- "Fr" : "пт",
- "Sa" : "сб",
- "January" : "януари",
- "February" : "февруару",
- "March" : "март",
- "April" : "април",
- "May" : "май",
- "June" : "юни",
- "July" : "юли",
- "August" : "август",
- "September" : "септември",
- "October" : "октомври",
- "November" : "ноември",
- "December" : "декември",
- "Jan." : "яну",
- "Feb." : "фев",
- "Mar." : "мар",
- "Apr." : "апр",
- "May." : "май",
- "Jun." : "юни",
- "Jul." : "юли",
- "Aug." : "авг",
- "Sep." : "сеп",
- "Oct." : "окт",
- "Nov." : "ное",
- "Dec." : "дек",
- "Apps" : "Приложения",
- "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
- "A valid username must be provided" : "Трябва да въведете валидно потребителско.",
- "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.",
- "A valid password must be provided" : "Трябва да въведете валидна парола.",
- "The username is already being used" : "Потребителското име е вече заето.",
- "Help" : "Помощ",
- "Personal" : "Лични",
- "Users" : "Потребители",
- "Admin" : "Админ",
- "No app name specified" : "Не е зададено име на преложението",
- "a safe home for all your data" : "безопасен дом за всички ваши данни",
- "Can't read file" : "Файлът не може да бъде прочетен",
- "Application is not enabled" : "Приложението не е включено",
- "Authentication error" : "Проблем с идентификацията",
- "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.",
- "Unknown user" : "Непознат потребител",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).",
- "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.",
- "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." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.",
- "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).",
- "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 не е инсталиран.",
- "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 модулите са инсталирани, но все още се обявяват като липсващи?",
- "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.",
- "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9",
- "Please upgrade your database version" : "Моля, обнови базата данни.",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.",
- "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители",
- "Data directory (%s) is invalid" : "Data папката (%s) e невалидна",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.",
- "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
- "App directory already exists" : "Папката на приложението вече съществува.",
- "Can't create app folder. Please fix permissions. %s" : "Папката не може да бъде създадена. Моля, коригирайте правата. %s",
- "No source specified when installing app" : "Не е посочен източник при инсталацията на приложението.",
- "No href specified when installing app from http" : "Липсва съдържанието на връзката за инсталиране на приложението",
- "No path specified when installing app from local file" : "Не е зададен пътя до локалния файл за инсталиране на приложението.",
- "Archives of type %s are not supported" : "Архиви от тип %s не се подържат",
- "Failed to open archive when installing app" : "Неуспешно отваряне на архив по време на инсталацията на приложението.",
- "App does not provide an info.xml file" : "Приложенението не съдържа файла info.xml",
- "App can't be installed because of not allowed code in the App" : "Приложението няма да бъде инсталирано, защото съдържа неразрешен код.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложението няма да бъде инсталирано, защото съдържа етикета <shipped>true</shipped>, който не е разрешен за не shiped приложения.",
- "Recommended" : "Препоръчано",
- "Storage not available" : "Хранилището не е налично"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js
deleted file mode 100644
index fbbf8fdd543..00000000000
--- a/lib/l10n/ca.js
+++ /dev/null
@@ -1,178 +0,0 @@
-OC.L10N.register(
- "lib",
- {
- "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració",
- "See %s" : "Comproveu %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
- "Sample configuration detected" : "Configuració d'exemple 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" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
- "%1$s and %2$s" : "%1$s i %2$s",
- "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
- "%sbit or higher PHP required." : "Es requereix PHP %s o superior.",
- "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior",
- "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior",
- "Unknown filetype" : "Tipus de fitxer desconegut",
- "Invalid image" : "Imatge no vàlida",
- "Avatar image is not square" : "La imatge de perfil no és quadrada",
- "today" : "avui",
- "yesterday" : "ahir",
- "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"],
- "last month" : "el mes passat",
- "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"],
- "last year" : "l'any passat",
- "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"],
- "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
- "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
- "seconds ago" : "segons enrere",
- "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid",
- "File name is too long" : "el nom del fitxer es massa gran",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Server settings" : "Configuració del Servidor",
- "Sharing" : "Compartir",
- "Encryption" : "Xifrat",
- "Additional settings" : "Configuració adicional",
- "Tips & tricks" : "Consells i trucs",
- "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.",
- "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.",
- "%s enter the database name." : "%s escriviu el nom de la base de dades.",
- "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades",
- "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle",
- "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids",
- "DB Error: \"%s\"" : "Error DB: \"%s\"",
- "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.",
- "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s",
- "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids",
- "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
- "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
- "Set an admin username." : "Establiu un nom d'usuari per l'administrador.",
- "Set an admin password." : "Establiu una contrasenya per l'administrador.",
- "Invalid Federated Cloud ID" : "ID de núvol federat invàlid",
- "%s shared »%s« with you" : "%s ha compartit »%s« amb tu",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix",
- "You are not allowed to share %s" : "No se us permet compartir %s",
- "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre",
- "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s",
- "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix",
- "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s",
- "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.",
- "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços",
- "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.",
- "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s",
- "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s",
- "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.",
- "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend",
- "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat",
- "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s",
- "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font",
- "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau",
- "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"",
- "Sunday" : "Diumenge",
- "Monday" : "Dilluns",
- "Tuesday" : "Dimarts",
- "Wednesday" : "Dimecres",
- "Thursday" : "Dijous",
- "Friday" : "Divendres",
- "Saturday" : "Dissabte",
- "Sun." : "Dg.",
- "Mon." : "Mon.",
- "Tue." : "Dm.",
- "Wed." : "Dc.",
- "Thu." : "Dj.",
- "Fri." : "Dv.",
- "Sat." : "Ds.",
- "Su" : "Dg",
- "Mo" : "Dl",
- "Tu" : "Dm",
- "We" : "Dc",
- "Th" : "Dj",
- "Fr" : "Dv",
- "Sa" : "Ds",
- "January" : "Gener",
- "February" : "Febrer",
- "March" : "Març",
- "April" : "Abril",
- "May" : "Maig",
- "June" : "Juny",
- "July" : "Juliol",
- "August" : "Agost",
- "September" : "Setembre",
- "October" : "Octubre",
- "November" : "Novembre",
- "December" : "Desembre",
- "Jan." : "Gen.",
- "Feb." : "Febr.",
- "Mar." : "Març",
- "Apr." : "Abr",
- "May." : "Maig",
- "Jun." : "Juny",
- "Jul." : "Jul.",
- "Aug." : "Ag.",
- "Sep." : "Set",
- "Oct." : "Oct.",
- "Nov." : "Nov.",
- "Dec." : "Des.",
- "Apps" : "Aplicacions",
- "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
- "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",
- "Login canceled by app" : "Accés cancel·lat per l'App",
- "User disabled" : "Usuari desactivat",
- "Help" : "Ajuda",
- "Personal" : "Personal",
- "Users" : "Usuaris",
- "Admin" : "Administració",
- "No app name specified" : "No heu especificat cap nom d'aplicació",
- "Can't read file" : "No es pot llegir el fitxer",
- "Application is not enabled" : "L'aplicació no està habilitada",
- "Authentication error" : "Error d'autenticació",
- "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.",
- "Unknown user" : "Usuari desconegut",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).",
- "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)",
- "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.",
- "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?",
- "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.",
- "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9",
- "Please upgrade your database version" : "Actualitzeu la versió de la base de dades",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.",
- "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris",
- "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.",
- "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
- "App directory already exists" : "La carpeta de l'aplicació ja existeix",
- "Can't create app folder. Please fix permissions. %s" : "No es pot crear la carpeta de l'aplicació. Arregleu els permisos. %s",
- "No source specified when installing app" : "No heu especificat la font en instal·lar l'aplicació",
- "No href specified when installing app from http" : "No heu especificat href en instal·lar l'aplicació des de http",
- "No path specified when installing app from local file" : "No heu seleccionat el camí en instal·lar una aplicació des d'un fitxer local",
- "Archives of type %s are not supported" : "Els fitxers del tipus %s no són compatibles",
- "Failed to open archive when installing app" : "Ha fallat l'obertura del fitxer en instal·lar l'aplicació",
- "App does not provide an info.xml file" : "L'aplicació no proporciona un fitxer info.xml",
- "App can't be installed because of not allowed code in the App" : "L'aplicació no es pot instal·lar perquè hi ha codi no autoritzat en l'aplicació",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'aplicació no es pot instal·lar perquè conté l'etiqueta <shipped>vertader</shipped> que no es permet per aplicacions no enviades",
- "Logging" : "Iniciant",
- "Recommended" : "Recomanat",
- "Microsoft Windows Platform is not supported" : "La plataforma de Microsoft Windows no està soportat!",
- "Storage not available" : "Emmagatzemament no disponible"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json
deleted file mode 100644
index 13358e42a4f..00000000000
--- a/lib/l10n/ca.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{ "translations": {
- "Cannot write into \"config\" directory!" : "No es pot escriure a la carpeta \"config\"!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Això normalment es pot solucionar donant al servidor web permís d'escriptura a la carpeta de configuració",
- "See %s" : "Comproveu %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
- "Sample configuration detected" : "Configuració d'exemple 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" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
- "%1$s and %2$s" : "%1$s i %2$s",
- "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
- "%sbit or higher PHP required." : "Es requereix PHP %s o superior.",
- "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior",
- "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior",
- "Unknown filetype" : "Tipus de fitxer desconegut",
- "Invalid image" : "Imatge no vàlida",
- "Avatar image is not square" : "La imatge de perfil no és quadrada",
- "today" : "avui",
- "yesterday" : "ahir",
- "_%n day ago_::_%n days ago_" : ["fa %n dia","fa %n dies"],
- "last month" : "el mes passat",
- "_%n month ago_::_%n months ago_" : ["fa %n mes","fa %n mesos"],
- "last year" : "l'any passat",
- "_%n year ago_::_%n years ago_" : ["fa %n any","fa %n anys"],
- "_%n hour ago_::_%n hours ago_" : ["fa %n hora","fa %n hores"],
- "_%n minute ago_::_%n minutes ago_" : ["fa %n minut","fa %n minuts"],
- "seconds ago" : "segons enrere",
- "File name contains at least one invalid character" : "El nom del fitxer conté al menys un caràcter invàlid",
- "File name is too long" : "el nom del fitxer es massa gran",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Server settings" : "Configuració del Servidor",
- "Sharing" : "Compartir",
- "Encryption" : "Xifrat",
- "Additional settings" : "Configuració adicional",
- "Tips & tricks" : "Consells i trucs",
- "%s enter the database username and name." : "%s escriviu el nom d'usuari i el nom de la base de dades.",
- "%s enter the database username." : "%s escriviu el nom d'usuari de la base de dades.",
- "%s enter the database name." : "%s escriviu el nom de la base de dades.",
- "%s you may not use dots in the database name" : "%s no podeu usar punts en el nom de la base de dades",
- "Oracle connection could not be established" : "No s'ha pogut establir la connexió Oracle",
- "Oracle username and/or password not valid" : "Nom d'usuari i/o contrasenya Oracle no vàlids",
- "DB Error: \"%s\"" : "Error DB: \"%s\"",
- "Offending command was: \"%s\"" : "L'ordre en conflicte és: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Heu d'escriure un compte existent o el d'administrador.",
- "Offending command was: \"%s\", name: %s, password: %s" : "L'ordre en conflicte és: \"%s\", nom: %s, contrasenya: %s",
- "PostgreSQL username and/or password not valid" : "Nom d'usuari i/o contrasenya PostgreSQL no vàlids",
- "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
- "For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
- "Set an admin username." : "Establiu un nom d'usuari per l'administrador.",
- "Set an admin password." : "Establiu una contrasenya per l'administrador.",
- "Invalid Federated Cloud ID" : "ID de núvol federat invàlid",
- "%s shared »%s« with you" : "%s ha compartit »%s« amb tu",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the file does not exist" : "Ha fallat en compartir %s, perquè el fitxer no existeix",
- "You are not allowed to share %s" : "No se us permet compartir %s",
- "Sharing %s failed, because the user %s does not exist" : "Ha fallat en compartir %s, perquè l'usuari %s no existeix",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ha fallat en compartir %s, perquè l'usuari %s no és membre de cap grup dels que %s és membre",
- "Sharing %s failed, because this item is already shared with %s" : "Ha fallat en compartir %s, perquè l'element ja està compartit amb %s",
- "Sharing %s failed, because the group %s does not exist" : "Ha fallat en compartir %s, perquè el grup %s no existeix",
- "Sharing %s failed, because %s is not a member of the group %s" : "Ha fallat en compartir %s, perquè %s no és membre del grup %s",
- "You need to provide a password to create a public link, only protected links are allowed" : "Heu de proporcionar una contrasenya per crear un enllaç públic. Només es permeten enllaços segurs.",
- "Sharing %s failed, because sharing with links is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir amb enllaços",
- "Not allowed to create a federated share with the same user" : "No està permés crear una compartició federada amb el mateix usuari",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La compartició de %s ha fallat, no es pot trobar %s, potser el servidor està actualment innacessible.",
- "Share type %s is not valid for %s" : "La compartició tipus %s no és vàlida per %s",
- "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en establir els permisos per %s perquè aquests excedeixen els permesos per a %s",
- "Setting permissions for %s failed, because the item was not found" : "Ha fallat en establir els permisos per %s, perquè no s'ha trobat l'element",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No es pot guardar la data d'expiració. Els fitxers o carpetes compartits no poden expirar més tard de %s després d'haver-se compratit.",
- "Cannot set expiration date. Expiration date is in the past" : "No es pot guardar la data d'expiració. La data d'expiració ja ha passat.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El rerefons de compartició %s ha d'implementar la interfície OCP\\Share_Backend",
- "Sharing backend %s not found" : "El rerefons de compartició %s no s'ha trobat",
- "Sharing backend for %s not found" : "El rerefons de compartició per a %s no s'ha trobat",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ha fallat en compartir %s perquè els permisos excedeixen els permesos per a %s",
- "Sharing %s failed, because resharing is not allowed" : "Ha fallat en compartir %s, perquè no es permet compartir de nou",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ha fallat en compartir %s, perquè el rerefons de compartir per %s no pot trobar la seva font",
- "Sharing %s failed, because the file could not be found in the file cache" : "Ha fallat en compartir %s, perquè el fitxer no s'ha trobat en el fitxer cau",
- "Could not find category \"%s\"" : "No s'ha trobat la categoria \"%s\"",
- "Sunday" : "Diumenge",
- "Monday" : "Dilluns",
- "Tuesday" : "Dimarts",
- "Wednesday" : "Dimecres",
- "Thursday" : "Dijous",
- "Friday" : "Divendres",
- "Saturday" : "Dissabte",
- "Sun." : "Dg.",
- "Mon." : "Mon.",
- "Tue." : "Dm.",
- "Wed." : "Dc.",
- "Thu." : "Dj.",
- "Fri." : "Dv.",
- "Sat." : "Ds.",
- "Su" : "Dg",
- "Mo" : "Dl",
- "Tu" : "Dm",
- "We" : "Dc",
- "Th" : "Dj",
- "Fr" : "Dv",
- "Sa" : "Ds",
- "January" : "Gener",
- "February" : "Febrer",
- "March" : "Març",
- "April" : "Abril",
- "May" : "Maig",
- "June" : "Juny",
- "July" : "Juliol",
- "August" : "Agost",
- "September" : "Setembre",
- "October" : "Octubre",
- "November" : "Novembre",
- "December" : "Desembre",
- "Jan." : "Gen.",
- "Feb." : "Febr.",
- "Mar." : "Març",
- "Apr." : "Abr",
- "May." : "Maig",
- "Jun." : "Juny",
- "Jul." : "Jul.",
- "Aug." : "Ag.",
- "Sep." : "Set",
- "Oct." : "Oct.",
- "Nov." : "Nov.",
- "Dec." : "Des.",
- "Apps" : "Aplicacions",
- "A valid username must be provided" : "Heu de facilitar un nom d'usuari vàlid",
- "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",
- "Login canceled by app" : "Accés cancel·lat per l'App",
- "User disabled" : "Usuari desactivat",
- "Help" : "Ajuda",
- "Personal" : "Personal",
- "Users" : "Usuaris",
- "Admin" : "Administració",
- "No app name specified" : "No heu especificat cap nom d'aplicació",
- "Can't read file" : "No es pot llegir el fitxer",
- "Application is not enabled" : "L'aplicació no està habilitada",
- "Authentication error" : "Error d'autenticació",
- "Token expired. Please reload page." : "El testimoni ha expirat. Torneu a carregar la pàgina.",
- "Unknown user" : "Usuari desconegut",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "No hi ha instal·lats controladors de bases de dades (sqlite, mysql o postgresql).",
- "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)",
- "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.",
- "PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Això probablement està provocat per una cau/accelerador com Zend OPcache o eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "S'han instal·lat mòduls PHP, però encara es llisten com una mancança?",
- "Please ask your server administrator to restart the web server." : "Demaneu a l'administrador que reinici el servidor web.",
- "PostgreSQL >= 9 required" : "Es requereix PostgreSQL >= 9",
- "Please upgrade your database version" : "Actualitzeu la versió de la base de dades",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Canvieu els permisos a 0770 per tal que la carpeta no es pugui llistar per altres usuaris.",
- "Data directory (%s) is readable by other users" : "La carpeta de dades (%s) és llegible per altres usuaris",
- "Data directory (%s) is invalid" : "La carpeta de dades (%s) no és vàlida",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Comproveu que la carpeta de dades contingui un fitxer \".ocdata\" a la seva arrel.",
- "Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
- "App directory already exists" : "La carpeta de l'aplicació ja existeix",
- "Can't create app folder. Please fix permissions. %s" : "No es pot crear la carpeta de l'aplicació. Arregleu els permisos. %s",
- "No source specified when installing app" : "No heu especificat la font en instal·lar l'aplicació",
- "No href specified when installing app from http" : "No heu especificat href en instal·lar l'aplicació des de http",
- "No path specified when installing app from local file" : "No heu seleccionat el camí en instal·lar una aplicació des d'un fitxer local",
- "Archives of type %s are not supported" : "Els fitxers del tipus %s no són compatibles",
- "Failed to open archive when installing app" : "Ha fallat l'obertura del fitxer en instal·lar l'aplicació",
- "App does not provide an info.xml file" : "L'aplicació no proporciona un fitxer info.xml",
- "App can't be installed because of not allowed code in the App" : "L'aplicació no es pot instal·lar perquè hi ha codi no autoritzat en l'aplicació",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'aplicació no es pot instal·lar perquè conté l'etiqueta <shipped>vertader</shipped> que no es permet per aplicacions no enviades",
- "Logging" : "Iniciant",
- "Recommended" : "Recomanat",
- "Microsoft Windows Platform is not supported" : "La plataforma de Microsoft Windows no està soportat!",
- "Storage not available" : "Emmagatzemament no disponible"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index ff0b5705cea..3907cb3f150 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -36,12 +36,17 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
"seconds ago" : "před pár sekundami",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.",
"File name is a reserved word" : "Jméno souboru je rezervované slovo",
"File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak",
"File name is too long" : "Jméno souboru je moc dlouhé",
"Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena",
"Empty filename is not allowed" : "Prázdné jméno souboru není povoleno",
+ "Help" : "Nápověda",
+ "Apps" : "Aplikace",
+ "Personal" : "Osobní",
+ "Log out" : "Odhlásit se",
+ "Users" : "Uživatelé",
+ "Admin" : "Administrace",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Nastavení serveru",
@@ -57,7 +62,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Uživatelské jméno či heslo Oracle není platné",
"DB Error: \"%s\"" : "Chyba databáze: \"%s\"",
"Offending command was: \"%s\"" : "Příslušný příkaz byl: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.",
"Offending command was: \"%s\", name: %s, password: %s" : "Příslušný příkaz byl: \"%s\", jméno: %s, heslo: %s",
"PostgreSQL username and/or password not valid" : "Uživatelské jméno či heslo PostgreSQL není platné",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
@@ -68,8 +72,6 @@ OC.L10N.register(
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
"Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID",
- "%s shared »%s« with you" : "%s s vámi sdílí »%s«",
- "%s via %s" : "%s pomocí %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i",
"Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje",
"You are not allowed to share %s" : "Nemáte povoleno sdílet %s",
@@ -149,18 +151,13 @@ OC.L10N.register(
"Oct." : "říjen",
"Nov." : "listopad",
"Dec." : "prosinec",
- "Apps" : "Aplikace",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Pouze následující znaky jsou povoleny pro uživatelské jméno: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci",
"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",
- "Login canceled by app" : "Přihlášení zrušeno aplikací",
"User disabled" : "Uživatel zakázán",
- "Help" : "Nápověda",
- "Personal" : "Osobní",
- "Users" : "Uživatelé",
- "Admin" : "Administrace",
+ "Login canceled by app" : "Přihlášení zrušeno aplikací",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikace \"%s\" nemůže být nainstalována protože soubor appinfo nelze přečíst.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"No app name specified" : "Nebyl zadan název aplikace",
@@ -177,7 +174,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis 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",
@@ -197,10 +193,7 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.",
- "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli",
- "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně",
"Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci",
- "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".",
"Storage unauthorized. %s" : "Úložiště neověřeno. %s",
@@ -208,26 +201,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Chyba připojení úložiště. %s",
"Storage is temporarily not available" : "Úložiště je dočasně nedostupné",
"Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s",
- "4-byte characters are not supported in file names" : "4-bytové znaky nejsou podporovány ve jménech souborů",
- "App directory already exists" : "Adresář aplikace již existuje",
- "Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit adresář aplikace. Opravte práva souborů. %s",
- "Archive does not contain a directory named %s" : "Archiv neobsahuje adresář pojmenovaný %s",
- "No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace",
- "No href specified when installing app from http" : "Nebyl zadán odkaz pro instalaci aplikace z HTTP",
- "No path specified when installing app from local file" : "Nebyla zadána cesta pro instalaci aplikace z místního souboru",
- "Archives of type %s are not supported" : "Archivy typu %s nejsou podporovány",
- "Failed to open archive when installing app" : "Chyba při otevírání archivu během instalace aplikace",
- "App does not provide an info.xml file" : "Aplikace neposkytuje soubor info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikaci nelze nainstalovat, soubor appinfo nelze číst.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Podpis nelze ověřit. Kontaktujte prosím vývojáře aplikace a zkontrolujte obrazovku administrace.",
- "App can't be installed because of not allowed code in the App" : "Aplikace nemůže být nainstalována, protože obsahuje nepovolený kód",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikace nemůže být nainstalována, protože obsahuje značku\n<shipped>\n\ntrue\n</shipped>\n\ncož není povoleno pro nedodávané aplikace",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml nesouhlasí s verzí oznámenou z úložiště aplikací.",
- "Logging" : "Logování",
- "Recommended" : "Doporučené",
- "Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
- "Storage not available" : "Úložiště není dostupné"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.",
+ "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.",
+ "%s shared »%s« with you" : "%s s vámi sdílí »%s«",
+ "%s via %s" : "%s pomocí %s",
+ "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli",
+ "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně",
+ "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index ae66663d49c..2eb2789a501 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -34,12 +34,17 @@
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
"seconds ago" : "před pár sekundami",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.",
"File name is a reserved word" : "Jméno souboru je rezervované slovo",
"File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak",
"File name is too long" : "Jméno souboru je moc dlouhé",
"Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena",
"Empty filename is not allowed" : "Prázdné jméno souboru není povoleno",
+ "Help" : "Nápověda",
+ "Apps" : "Aplikace",
+ "Personal" : "Osobní",
+ "Log out" : "Odhlásit se",
+ "Users" : "Uživatelé",
+ "Admin" : "Administrace",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Nastavení serveru",
@@ -55,7 +60,6 @@
"Oracle username and/or password not valid" : "Uživatelské jméno či heslo Oracle není platné",
"DB Error: \"%s\"" : "Chyba databáze: \"%s\"",
"Offending command was: \"%s\"" : "Příslušný příkaz byl: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.",
"Offending command was: \"%s\", name: %s, password: %s" : "Příslušný příkaz byl: \"%s\", jméno: %s, heslo: %s",
"PostgreSQL username and/or password not valid" : "Uživatelské jméno či heslo PostgreSQL není platné",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
@@ -66,8 +70,6 @@
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
"Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID",
- "%s shared »%s« with you" : "%s s vámi sdílí »%s«",
- "%s via %s" : "%s pomocí %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i",
"Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje",
"You are not allowed to share %s" : "Nemáte povoleno sdílet %s",
@@ -147,18 +149,13 @@
"Oct." : "říjen",
"Nov." : "listopad",
"Dec." : "prosinec",
- "Apps" : "Aplikace",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Pouze následující znaky jsou povoleny pro uživatelské jméno: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadat platné uživatelské jméno",
"Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci",
"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",
- "Login canceled by app" : "Přihlášení zrušeno aplikací",
"User disabled" : "Uživatel zakázán",
- "Help" : "Nápověda",
- "Personal" : "Osobní",
- "Users" : "Uživatelé",
- "Admin" : "Administrace",
+ "Login canceled by app" : "Přihlášení zrušeno aplikací",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikace \"%s\" nemůže být nainstalována protože soubor appinfo nelze přečíst.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"No app name specified" : "Nebyl zadan název aplikace",
@@ -175,7 +172,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis 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",
@@ -195,10 +191,7 @@
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.",
- "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli",
- "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně",
"Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci",
- "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".",
"Storage unauthorized. %s" : "Úložiště neověřeno. %s",
@@ -206,26 +199,13 @@
"Storage connection error. %s" : "Chyba připojení úložiště. %s",
"Storage is temporarily not available" : "Úložiště je dočasně nedostupné",
"Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s",
- "4-byte characters are not supported in file names" : "4-bytové znaky nejsou podporovány ve jménech souborů",
- "App directory already exists" : "Adresář aplikace již existuje",
- "Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit adresář aplikace. Opravte práva souborů. %s",
- "Archive does not contain a directory named %s" : "Archiv neobsahuje adresář pojmenovaný %s",
- "No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace",
- "No href specified when installing app from http" : "Nebyl zadán odkaz pro instalaci aplikace z HTTP",
- "No path specified when installing app from local file" : "Nebyla zadána cesta pro instalaci aplikace z místního souboru",
- "Archives of type %s are not supported" : "Archivy typu %s nejsou podporovány",
- "Failed to open archive when installing app" : "Chyba při otevírání archivu během instalace aplikace",
- "App does not provide an info.xml file" : "Aplikace neposkytuje soubor info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikaci nelze nainstalovat, soubor appinfo nelze číst.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Podpis nelze ověřit. Kontaktujte prosím vývojáře aplikace a zkontrolujte obrazovku administrace.",
- "App can't be installed because of not allowed code in the App" : "Aplikace nemůže být nainstalována, protože obsahuje nepovolený kód",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikace nemůže být nainstalována, protože obsahuje značku\n<shipped>\n\ntrue\n</shipped>\n\ncož není povoleno pro nedodávané aplikace",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml nesouhlasí s verzí oznámenou z úložiště aplikací.",
- "Logging" : "Logování",
- "Recommended" : "Doporučené",
- "Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
- "Storage not available" : "Úložiště není dostupné"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.",
+ "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.",
+ "%s shared »%s« with you" : "%s s vámi sdílí »%s«",
+ "%s via %s" : "%s pomocí %s",
+ "Cannot create \"data\" directory (%s)" : "Nelze vytvořit adresář \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Datový adresář (%s) je čitelný i ostatními uživateli",
+ "Data directory (%s) must be an absolute path" : "Cesta k datovému adresáři (%s) musí být uvedena absolutně",
+ "Data directory (%s) is invalid" : "Datový adresář (%s) je neplatný"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 79a8ee25510..a4c9547373a 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die App in den App-Einstellungen aktivieren oder den Administrator kontaktieren.",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
"File name is too long" : "Dateiname ist zu lang",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
+ "This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
+ "Help" : "Hilfe",
+ "Apps" : "Apps",
+ "Personal" : "Persönlich",
+ "Log out" : "Abmelden",
+ "Users" : "Benutzer",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
+ "Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
- "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.",
+ "You need to enter details of an existing account." : "Du mußt Daten eines existierenden Kontos angeben.",
"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",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X wird nicht unterstützt und %s wird auf dieser Plattform nicht richtig funktionieren. Die Benutzung erfolgt auf eigene Gefahr!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"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.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
- "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
- "%s via %s" : "%s via %s",
"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",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Apps",
"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",
"Username contains whitespace at the beginning or at the end" : "Der Benutzername enthält Leerzeichen am Anfang oder am Ende",
+ "Username must not consist of dots only" : "Benutzername darf nicht nur aus Punkten bestehen",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
"The username is already being used" : "Dieser Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
- "Help" : "Hilfe",
- "Personal" : "Persönlich",
- "Users" : "Benutzer",
- "Admin" : "Administration",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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 behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> 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",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
"Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion",
"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) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden",
+ "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben",
"Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration",
- "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig",
+ "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig",
"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.",
"Storage unauthorized. %s" : "Speichern nicht erlaubt. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s",
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
- "4-byte characters are not supported in file names" : "4-Byte Zeichen sind in Dateinamen nicht erlaubt",
- "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",
- "Archive does not contain a directory named %s" : "Das Archiv enthält kein Verzeichnis mit dem Namen %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" : "Für die Installation der Applikation über http wurde keine Quelle (href) angegeben",
- "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 cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Die Signatur konnte nicht überprüft werden. Bitte kontaktiere die App-Entwickler und überprüfe deinen Admin-Bildschirm.",
- "App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
- "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.",
- "Logging" : "Protokollierung",
- "Recommended" : "Empfohlen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.",
+ "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.",
+ "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar",
+ "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index 180680c2b97..7b2051ab3bf 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die App in den App-Einstellungen aktivieren oder den Administrator kontaktieren.",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
"File name is too long" : "Dateiname ist zu lang",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
+ "This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
+ "Help" : "Hilfe",
+ "Apps" : "Apps",
+ "Personal" : "Persönlich",
+ "Log out" : "Abmelden",
+ "Users" : "Benutzer",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
+ "Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
- "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.",
+ "You need to enter details of an existing account." : "Du mußt Daten eines existierenden Kontos angeben.",
"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",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X wird nicht unterstützt und %s wird auf dieser Plattform nicht richtig funktionieren. Die Benutzung erfolgt auf eigene Gefahr!",
@@ -66,8 +74,6 @@
"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.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
- "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
- "%s via %s" : "%s via %s",
"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",
@@ -147,18 +153,14 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Apps",
"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",
"Username contains whitespace at the beginning or at the end" : "Der Benutzername enthält Leerzeichen am Anfang oder am Ende",
+ "Username must not consist of dots only" : "Benutzername darf nicht nur aus Punkten bestehen",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
"The username is already being used" : "Dieser Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
- "Help" : "Hilfe",
- "Personal" : "Persönlich",
- "Users" : "Benutzer",
- "Admin" : "Administration",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
@@ -175,7 +177,7 @@
"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 behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> 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",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
"Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion",
"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) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden",
+ "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben",
"Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration",
- "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig",
+ "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig",
"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.",
"Storage unauthorized. %s" : "Speichern nicht erlaubt. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s",
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
- "4-byte characters are not supported in file names" : "4-Byte Zeichen sind in Dateinamen nicht erlaubt",
- "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",
- "Archive does not contain a directory named %s" : "Das Archiv enthält kein Verzeichnis mit dem Namen %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" : "Für die Installation der Applikation über http wurde keine Quelle (href) angegeben",
- "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 cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Die Signatur konnte nicht überprüft werden. Bitte kontaktiere die App-Entwickler und überprüfe deinen Admin-Bildschirm.",
- "App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
- "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.",
- "Logging" : "Protokollierung",
- "Recommended" : "Empfohlen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.",
+ "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.",
+ "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar",
+ "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 917181377a5..c8c8bcf1086 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul mit ID: 1 %s existiert nicht. Bitte aktiviere es in deinen Einstellungen oder kontaktiere deinen Administrator.",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
"File name is too long" : "Dateiname ist zu lang",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
+ "This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versendete EMail, bitte nicht antworten.",
+ "Help" : "Hilfe",
+ "Apps" : "Apps",
+ "Personal" : "Persönlich",
+ "Log out" : "Abmelden",
+ "Users" : "Benutzer",
+ "Admin" : "Administrator",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
+ "Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
- "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.",
+ "You need to enter details of an existing account." : "Du musst Details von einem existierenden Benutzer einfügen.",
"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",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X wird nicht unterstützt und %s wird auf dieser Plattform nicht richtig funktionieren. Die Benutzung erfolgt auf eigene Gefahr!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"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.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
- "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
- "%s via %s" : "%s via %s",
"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",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Apps",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Nur die folgenden Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“, and „_.@-'“",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Username contains whitespace at the beginning or at the end" : "Benutzername enthält Leerzeichen am Anfang oder Ende",
+ "Username must not consist of dots only" : "Benutzername darf nicht nur aus Punkten bestehen",
"A valid password must be provided" : "Es muss ein gültiges Passwort eingegeben werden",
"The username is already being used" : "Der Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
- "Help" : "Hilfe",
- "Personal" : "Persönlich",
- "Users" : "Benutzer",
- "Admin" : "Administrator",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
@@ -177,7 +179,7 @@ OC.L10N.register(
"Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich",
"Cannot write into \"apps\" directory" : "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 behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
"Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion",
"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) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden",
+ "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben",
"Check the value of \"datadirectory\" in your configuration" : "Überprüfen Sie bitte die Angabe unter „datadirectory“ in Ihrer Konfiguration",
- "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig",
+ "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig.",
"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.",
"Storage unauthorized. %s" : "Speicher ungültig. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Speicher-Verbindungsfehler. %s",
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s",
- "4-byte characters are not supported in file names" : "4-Byte-Zeichen werden in Dateinamen nicht unterstützt",
- "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",
- "Archive does not contain a directory named %s" : "Das Archiv enthält kein Verzeichnis mit dem Namen %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",
- "Archives of type %s are not supported" : "Archive des Typs %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 Anwendung enthält keine info.xml Datei",
- "App cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur konnte nicht überprüft werden. Bitte kontaktieren Sie den App Entwickler und überprüfen Sie Ihren Administrationsbereich.",
- "App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
- "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.",
- "Logging" : "Protokollierung",
- "Recommended" : "Empfohlen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.",
+ "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.",
+ "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar",
+ "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 4be23402b18..1e3a96b7808 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul mit ID: 1 %s existiert nicht. Bitte aktiviere es in deinen Einstellungen oder kontaktiere deinen Administrator.",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
"File name is too long" : "Dateiname ist zu lang",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
+ "This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versendete EMail, bitte nicht antworten.",
+ "Help" : "Hilfe",
+ "Apps" : "Apps",
+ "Personal" : "Persönlich",
+ "Log out" : "Abmelden",
+ "Users" : "Benutzer",
+ "Admin" : "Administrator",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
+ "Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
- "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.",
+ "You need to enter details of an existing account." : "Du musst Details von einem existierenden Benutzer einfügen.",
"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",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X wird nicht unterstützt und %s wird auf dieser Plattform nicht richtig funktionieren. Die Benutzung erfolgt auf eigene Gefahr!",
@@ -66,8 +74,6 @@
"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.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
- "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
- "%s via %s" : "%s via %s",
"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",
@@ -147,18 +153,14 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Apps",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Nur die folgenden Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“, and „_.@-'“",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"Username contains whitespace at the beginning or at the end" : "Benutzername enthält Leerzeichen am Anfang oder Ende",
+ "Username must not consist of dots only" : "Benutzername darf nicht nur aus Punkten bestehen",
"A valid password must be provided" : "Es muss ein gültiges Passwort eingegeben werden",
"The username is already being used" : "Der Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
- "Help" : "Hilfe",
- "Personal" : "Persönlich",
- "Users" : "Benutzer",
- "Admin" : "Administrator",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
@@ -175,7 +177,7 @@
"Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich",
"Cannot write into \"apps\" directory" : "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 behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory" : "Kann das \"Daten\"-Verzeichnis nicht erstellen",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt",
"Please upgrade your database version" : "Bitte aktualisieren Sie Ihre Datenbankversion",
"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) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Your data directory is readable by other users" : "Dein Datenverzeichnis kann von anderen Benutzern gelesen werden",
+ "Your data directory must be an absolute path" : "Dein Datenverzeichnis muss einen eindeutigen Pfad haben",
"Check the value of \"datadirectory\" in your configuration" : "Überprüfen Sie bitte die Angabe unter „datadirectory“ in Ihrer Konfiguration",
- "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig",
+ "Your data directory is invalid" : "Dein Datenverzeichnis ist ungültig.",
"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.",
"Storage unauthorized. %s" : "Speicher ungültig. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Speicher-Verbindungsfehler. %s",
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s",
- "4-byte characters are not supported in file names" : "4-Byte-Zeichen werden in Dateinamen nicht unterstützt",
- "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",
- "Archive does not contain a directory named %s" : "Das Archiv enthält kein Verzeichnis mit dem Namen %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",
- "Archives of type %s are not supported" : "Archive des Typs %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 Anwendung enthält keine info.xml Datei",
- "App cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur konnte nicht überprüft werden. Bitte kontaktieren Sie den App Entwickler und überprüfen Sie Ihren Administrationsbereich.",
- "App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
- "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.",
- "Logging" : "Protokollierung",
- "Recommended" : "Empfohlen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.",
+ "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.",
+ "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Benutzern lesbar",
+ "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein",
+ "Data directory (%s) is invalid" : "Daten-Verzeichnis (%s) ist ungültig"
},"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 2e8fc517c18..eca3d48a22c 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -32,12 +32,17 @@ OC.L10N.register(
"last year" : "τελευταίο χρόνο",
"_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.",
"File name is a reserved word" : "Το όνομα αρχείου είναι λέξη που έχει δεσμευτεί",
"File name contains at least one invalid character" : "Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα",
"File name is too long" : "Το όνομα αρχείου είνια πολύ μεγάλο",
"Dot files are not allowed" : "Δεν επιτρέπονται αρχεία που ξεκινούν από τελεία - Dot ",
"Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
+ "Help" : "Βοήθεια",
+ "Apps" : "Εφαρμογές",
+ "Personal" : "Προσωπικά",
+ "Log out" : "Έξοδος",
+ "Users" : "Χρήστες",
+ "Admin" : "Διαχείριση",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Ρυθμίσεις διακομιστή",
@@ -51,7 +56,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Μη έγκυρος χρήστης και/ή συνθηματικό της Oracle",
"DB Error: \"%s\"" : "Σφάλμα Βάσης Δεδομένων: \"%s\"",
"Offending command was: \"%s\"" : "Η εντολη παραβατικοτητας ηταν: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.",
"Offending command was: \"%s\", name: %s, password: %s" : "Η εντολη παραβατικοτητας ηταν: \"%s\", ονομα: %s, κωδικος: %s",
"PostgreSQL username and/or password not valid" : "Μη έγκυρος χρήστης και/ή συνθηματικό της PostgreSQL",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
@@ -62,8 +66,6 @@ OC.L10N.register(
"Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
"Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
"Invalid Federated Cloud ID" : "Μη έγκυρο Federated Cloud ID",
- "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«",
- "%s via %s" : "%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",
@@ -137,14 +139,9 @@ OC.L10N.register(
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
- "Apps" : "Εφαρμογές",
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
"The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
- "Help" : "Βοήθεια",
- "Personal" : "Προσωπικά",
- "Users" : "Χρήστες",
- "Admin" : "Διαχείριση",
"No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
"App '%s' could not be installed!" : "Δεν μπορεί να εγκατασταθεί η εφαρμογή '%s'!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Αυτή η εφαρμογή %s δεν μπορεί να εγκατασταθεί διότι δεν πληρούνται οι ακόλουθες εξαρτήσεις: %s",
@@ -158,7 +155,6 @@ OC.L10N.register(
"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)",
"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." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.",
@@ -175,26 +171,16 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Απαιτείται PostgreSQL >= 9",
"Please upgrade your database version" : "Παρακαλώ αναβαθμίστε την έκδοση της βάσης δεδομένων σας",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Παρακαλώ αλλάξτε τις ρυθμίσεις σε 0770 έτσι ώστε ο κατάλογος να μην μπορεί να προβάλλεται από άλλους χρήστες.",
- "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες",
- "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή",
"Check the value of \"datadirectory\" in your configuration" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας",
- "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
"Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
- "4-byte characters are not supported in file names" : "Χαρακτήρες 4-byte δεν υποστηρίζονται σε ονόματα αρχείων",
- "App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
- "Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s",
- "Archive does not contain a directory named %s" : "Το αρχείο δεν περιέχει κατάλογο με το όνομα %s",
- "No source specified when installing app" : "Δεν προσδιορίστηκε πηγή κατά την εγκατάσταση της εφαρμογής",
- "No href specified when installing app from http" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω http ",
- "No path specified when installing app from local file" : "Δεν προσδιορίστηκε μονοπάτι κατά την εγκατάσταση εφαρμογής από τοπικό αρχείο",
- "Archives of type %s are not supported" : "Συλλογές αρχείων τύπου %s δεν υποστηρίζονται",
- "Failed to open archive when installing app" : "Αποτυχία ανοίγματος συλλογής αρχείων κατά την εγκατάσταση εφαρμογής",
- "App does not provide an info.xml file" : "Η εφαρμογή δεν παρέχει αρχείο info.xml",
- "App can't be installed because of not allowed code in the App" : "Η εφαρμογή δεν μπορεί να εγκατασταθεί λόγω μη-επιτρεπόμενου κώδικα μέσα στην Εφαρμογή",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Η εφαρμογή δεν μπορεί να εγκατασταθεί επειδή περιέχει την ετικέτα <shipped>σωστή</shipped> που δεν επιτρέπεται για μη-ενσωματωμένες εφαρμογές",
- "Recommended" : "Προτείνεται",
- "Microsoft Windows Platform is not supported" : "Η Πλατφόρμα Microsoft Windows δεν υποστηρίζεται",
- "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.",
+ "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.",
+ "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«",
+ "%s via %s" : "%s μέσω %s",
+ "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες",
+ "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή",
+ "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index 807a97f3b01..d1f0b3bd491 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -30,12 +30,17 @@
"last year" : "τελευταίο χρόνο",
"_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.",
"File name is a reserved word" : "Το όνομα αρχείου είναι λέξη που έχει δεσμευτεί",
"File name contains at least one invalid character" : "Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα",
"File name is too long" : "Το όνομα αρχείου είνια πολύ μεγάλο",
"Dot files are not allowed" : "Δεν επιτρέπονται αρχεία που ξεκινούν από τελεία - Dot ",
"Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
+ "Help" : "Βοήθεια",
+ "Apps" : "Εφαρμογές",
+ "Personal" : "Προσωπικά",
+ "Log out" : "Έξοδος",
+ "Users" : "Χρήστες",
+ "Admin" : "Διαχείριση",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Ρυθμίσεις διακομιστή",
@@ -49,7 +54,6 @@
"Oracle username and/or password not valid" : "Μη έγκυρος χρήστης και/ή συνθηματικό της Oracle",
"DB Error: \"%s\"" : "Σφάλμα Βάσης Δεδομένων: \"%s\"",
"Offending command was: \"%s\"" : "Η εντολη παραβατικοτητας ηταν: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.",
"Offending command was: \"%s\", name: %s, password: %s" : "Η εντολη παραβατικοτητας ηταν: \"%s\", ονομα: %s, κωδικος: %s",
"PostgreSQL username and/or password not valid" : "Μη έγκυρος χρήστης και/ή συνθηματικό της PostgreSQL",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
@@ -60,8 +64,6 @@
"Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
"Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
"Invalid Federated Cloud ID" : "Μη έγκυρο Federated Cloud ID",
- "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«",
- "%s via %s" : "%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",
@@ -135,14 +137,9 @@
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
- "Apps" : "Εφαρμογές",
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
"The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
- "Help" : "Βοήθεια",
- "Personal" : "Προσωπικά",
- "Users" : "Χρήστες",
- "Admin" : "Διαχείριση",
"No app name specified" : "Δεν προδιορίστηκε όνομα εφαρμογής",
"App '%s' could not be installed!" : "Δεν μπορεί να εγκατασταθεί η εφαρμογή '%s'!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Αυτή η εφαρμογή %s δεν μπορεί να εγκατασταθεί διότι δεν πληρούνται οι ακόλουθες εξαρτήσεις: %s",
@@ -156,7 +153,6 @@
"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)",
"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." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.",
@@ -173,26 +169,16 @@
"PostgreSQL >= 9 required" : "Απαιτείται PostgreSQL >= 9",
"Please upgrade your database version" : "Παρακαλώ αναβαθμίστε την έκδοση της βάσης δεδομένων σας",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Παρακαλώ αλλάξτε τις ρυθμίσεις σε 0770 έτσι ώστε ο κατάλογος να μην μπορεί να προβάλλεται από άλλους χρήστες.",
- "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες",
- "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή",
"Check the value of \"datadirectory\" in your configuration" : "Ελέγξτε την τιμή του \"Φάκελος Δεδομένων\" στις ρυθμίσεις σας",
- "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
"Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
- "4-byte characters are not supported in file names" : "Χαρακτήρες 4-byte δεν υποστηρίζονται σε ονόματα αρχείων",
- "App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
- "Can't create app folder. Please fix permissions. %s" : "Δεν είναι δυνατόν να δημιουργηθεί ο φάκελος εφαρμογής. Παρακαλώ διορθώστε τις άδειες πρόσβασης. %s",
- "Archive does not contain a directory named %s" : "Το αρχείο δεν περιέχει κατάλογο με το όνομα %s",
- "No source specified when installing app" : "Δεν προσδιορίστηκε πηγή κατά την εγκατάσταση της εφαρμογής",
- "No href specified when installing app from http" : "Δεν προσδιορίστηκε href κατά την εγκατάσταση της εφαρμογής μέσω http ",
- "No path specified when installing app from local file" : "Δεν προσδιορίστηκε μονοπάτι κατά την εγκατάσταση εφαρμογής από τοπικό αρχείο",
- "Archives of type %s are not supported" : "Συλλογές αρχείων τύπου %s δεν υποστηρίζονται",
- "Failed to open archive when installing app" : "Αποτυχία ανοίγματος συλλογής αρχείων κατά την εγκατάσταση εφαρμογής",
- "App does not provide an info.xml file" : "Η εφαρμογή δεν παρέχει αρχείο info.xml",
- "App can't be installed because of not allowed code in the App" : "Η εφαρμογή δεν μπορεί να εγκατασταθεί λόγω μη-επιτρεπόμενου κώδικα μέσα στην Εφαρμογή",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Η εφαρμογή δεν μπορεί να εγκατασταθεί επειδή περιέχει την ετικέτα <shipped>σωστή</shipped> που δεν επιτρέπεται για μη-ενσωματωμένες εφαρμογές",
- "Recommended" : "Προτείνεται",
- "Microsoft Windows Platform is not supported" : "Η Πλατφόρμα Microsoft Windows δεν υποστηρίζεται",
- "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.",
+ "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.",
+ "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«",
+ "%s via %s" : "%s μέσω %s",
+ "Cannot create \"data\" directory (%s)" : "Αδυναμία δημιουργίας του καταλόγου \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Ο κατάλογος δεδομένων (%s) είναι διαθέσιμος προς ανάγνωση για άλλους χρήστες",
+ "Data directory (%s) must be an absolute path" : "Κατάλογος δεδομένων (%s) πρεπει να είναι απόλυτη η διαδρομή",
+ "Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 80756b58b5c..52132180ca8 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -36,16 +36,23 @@ OC.L10N.register(
"_%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",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
"File name contains at least one invalid character" : "El nombre del archivo contiene al menos un carácter inválido",
"File name is too long" : "El nombre del archivo es demasiado largo",
"Dot files are not allowed" : "Los archivos Dot no están permitidos",
"Empty filename is not allowed" : "No se puede dejar el nombre en blanco.",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no responda.",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Desconectar",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Configuración del servidor",
"Sharing" : "Compartir",
+ "Security" : "Seguridad",
"Encryption" : "Cifrado",
"Additional settings" : "Configuración adicional",
"Tips & tricks" : "Sugerencias y trucos",
@@ -57,7 +64,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle no válidos",
"DB Error: \"%s\"" : "Error BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "You need to enter details of an existing account." : "Necesita ingresar detalles de una cuenta existente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
"PostgreSQL username and/or password not valid" : "Usuario y/o contraseña de PostgreSQL no válidos",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no está soportado y %s no funcionará bien en esta plataforma. ¡Úsela bajo su propio riesgo! ",
@@ -68,8 +75,6 @@ OC.L10N.register(
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
"Invalid Federated Cloud ID" : "ID Nube federada inválida",
- "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
- "%s via %s" : "%s vía %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "No se pudo compartir %s porque el repositorio no permite recursos compartidos del tipo %i",
"Sharing %s failed, because the file does not exist" : "No se pudo compartir %s porque el archivo no existe",
"You are not allowed to share %s" : "Usted no está autorizado para compartir %s",
@@ -149,18 +154,13 @@ OC.L10N.register(
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dic.",
- "Apps" : "Aplicaciones",
"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",
"Username contains whitespace at the beginning or at the end" : "El nombre de usuario contiene espacios en blanco al principio o al final",
"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",
- "Login canceled by app" : "Login cancelado por la app",
"User disabled" : "Usuario deshabilitado",
- "Help" : "Ayuda",
- "Personal" : "Personal",
- "Users" : "Usuarios",
- "Admin" : "Administración",
+ "Login canceled by app" : "Login cancelado por la app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La app \"%s\" no puede ser instalada debido a que no se puede leer la información de la app.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.",
"No app name specified" : "No se ha especificado nombre de la aplicación",
@@ -177,7 +177,7 @@ OC.L10N.register(
"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)",
+ "Cannot create \"data\" directory" : "No es posible crear el directorio \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Normalmente esto se puede solucionar <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dándole al servidor web permisos de escritura en todo el directorio o el directorio 'root'</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 ",
@@ -197,10 +197,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.",
"Please upgrade your database version" : "Actualice su versión de base de datos.",
"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" : "El directorio de datos (%s) se puede leer por otros usuarios.",
- "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Your data directory is readable by other users" : "Su directorio data es leible por otros usuarios",
+ "Your data directory must be an absolute path" : "Su directorio data debe ser una ruta absoluta",
"Check the value of \"datadirectory\" in your configuration" : "Compruebe el valor de \"datadirectory\" en su configuración.",
- "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido",
+ "Your data directory is invalid" : "Su directorio de datos es invá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\".",
"Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
@@ -208,26 +208,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Error de conexión de almacenamiento. %s",
"Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente",
"Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s",
- "4-byte characters are not supported in file names" : " No están permitidos caractéres de 4-bytes",
- "App directory already exists" : "El directorio de la aplicación ya existe",
- "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
- "Archive does not contain a directory named %s" : "El archivo no contiene un directorio llamado %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" : "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 cannot be installed because appinfo file cannot be read." : "La app no puede ser instalada debido a que no se puede leer la información de la app.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La firma no pudo ser evaluada. Por favor, contacte con el desarrollador de la aplicación y compruebe su pantalla de administración.",
- "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 the server" : "La aplicación no se puede instalar porque no es compatible con esta versión del servidor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "La aplicación no se puede instalar porque contiene la etiqueta\n<shipped>\ntrue\n</shipped>\nque no está permitida para aplicaciones no distribuidas",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión reportada por la App Store.",
- "Logging" : "Inicio de sesión",
- "Recommended" : "Recomendado",
- "Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
- "Storage not available" : "Almacenamiento no disponible"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.",
+ "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s via %s" : "%s vía %s",
+ "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 2ea8a94e8dd..61827ee6aa6 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -34,16 +34,23 @@
"_%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",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
"File name contains at least one invalid character" : "El nombre del archivo contiene al menos un carácter inválido",
"File name is too long" : "El nombre del archivo es demasiado largo",
"Dot files are not allowed" : "Los archivos Dot no están permitidos",
"Empty filename is not allowed" : "No se puede dejar el nombre en blanco.",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no responda.",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Desconectar",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Configuración del servidor",
"Sharing" : "Compartir",
+ "Security" : "Seguridad",
"Encryption" : "Cifrado",
"Additional settings" : "Configuración adicional",
"Tips & tricks" : "Sugerencias y trucos",
@@ -55,7 +62,7 @@
"Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle no válidos",
"DB Error: \"%s\"" : "Error BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "You need to enter details of an existing account." : "Necesita ingresar detalles de una cuenta existente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
"PostgreSQL username and/or password not valid" : "Usuario y/o contraseña de PostgreSQL no válidos",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no está soportado y %s no funcionará bien en esta plataforma. ¡Úsela bajo su propio riesgo! ",
@@ -66,8 +73,6 @@
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
"Invalid Federated Cloud ID" : "ID Nube federada inválida",
- "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
- "%s via %s" : "%s vía %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "No se pudo compartir %s porque el repositorio no permite recursos compartidos del tipo %i",
"Sharing %s failed, because the file does not exist" : "No se pudo compartir %s porque el archivo no existe",
"You are not allowed to share %s" : "Usted no está autorizado para compartir %s",
@@ -147,18 +152,13 @@
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dic.",
- "Apps" : "Aplicaciones",
"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",
"Username contains whitespace at the beginning or at the end" : "El nombre de usuario contiene espacios en blanco al principio o al final",
"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",
- "Login canceled by app" : "Login cancelado por la app",
"User disabled" : "Usuario deshabilitado",
- "Help" : "Ayuda",
- "Personal" : "Personal",
- "Users" : "Usuarios",
- "Admin" : "Administración",
+ "Login canceled by app" : "Login cancelado por la app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La app \"%s\" no puede ser instalada debido a que no se puede leer la información de la app.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.",
"No app name specified" : "No se ha especificado nombre de la aplicación",
@@ -175,7 +175,7 @@
"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)",
+ "Cannot create \"data\" directory" : "No es posible crear el directorio \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Normalmente esto se puede solucionar <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dándole al servidor web permisos de escritura en todo el directorio o el directorio 'root'</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 ",
@@ -195,10 +195,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL 9 o superior requerido.",
"Please upgrade your database version" : "Actualice su versión de base de datos.",
"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" : "El directorio de datos (%s) se puede leer por otros usuarios.",
- "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Your data directory is readable by other users" : "Su directorio data es leible por otros usuarios",
+ "Your data directory must be an absolute path" : "Su directorio data debe ser una ruta absoluta",
"Check the value of \"datadirectory\" in your configuration" : "Compruebe el valor de \"datadirectory\" en su configuración.",
- "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido",
+ "Your data directory is invalid" : "Su directorio de datos es invá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\".",
"Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
@@ -206,26 +206,13 @@
"Storage connection error. %s" : "Error de conexión de almacenamiento. %s",
"Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente",
"Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s",
- "4-byte characters are not supported in file names" : " No están permitidos caractéres de 4-bytes",
- "App directory already exists" : "El directorio de la aplicación ya existe",
- "Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
- "Archive does not contain a directory named %s" : "El archivo no contiene un directorio llamado %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" : "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 cannot be installed because appinfo file cannot be read." : "La app no puede ser instalada debido a que no se puede leer la información de la app.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La firma no pudo ser evaluada. Por favor, contacte con el desarrollador de la aplicación y compruebe su pantalla de administración.",
- "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 the server" : "La aplicación no se puede instalar porque no es compatible con esta versión del servidor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "La aplicación no se puede instalar porque contiene la etiqueta\n<shipped>\ntrue\n</shipped>\nque no está permitida para aplicaciones no distribuidas",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión reportada por la App Store.",
- "Logging" : "Inicio de sesión",
- "Recommended" : "Recomendado",
- "Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
- "Storage not available" : "Almacenamiento no disponible"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.",
+ "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s via %s" : "%s vía %s",
+ "Cannot create \"data\" directory (%s)" : "No puedo crear del directorio \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) se puede leer por otros usuarios.",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js
new file mode 100644
index 00000000000..d25ade5160d
--- /dev/null
+++ b/lib/l10n/es_MX.js
@@ -0,0 +1,222 @@
+OC.L10N.register(
+ "lib",
+ {
+ "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 generalmente se soluciona dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Favor de asegurarse de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "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" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede descomponer su instalacón y no está soportado. Favor de leer la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "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." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%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 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",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, favor de no contestarlo. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Salir de la sesión",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ajustes del servidor",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Ajustes adicionales",
+ "Tips & tricks" : "Consejos y trucos",
+ "%s enter the database username and name." : "%s ingrese el nombre del usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresar el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puede utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "El nombre de usuario y/o contraseña de Oracle inválidos",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
+ "You need to enter details of an existing account." : "Necesita ingresar los detalles de una cuenta existente.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
+ "PostgreSQL username and/or password not valid" : "El nombre de usuario y/o contraseña de PostgreSQL inválidos",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Uselo bajo su propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, favor de cosiderar usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Favor de eliminar el ajuste open_basedir de su archivo php.ini o cambie a PHP de 64 bits. ",
+ "Set an admin username." : "Configurar un nombre de usuario del administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Invalid Federated Cloud ID" : "ID de Nube Federada Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tiene permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presento una falla al compartir %s, porque no puede compartir con usted mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s proque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Usted necesita proporcionar una contraseña para crear una liga pública, sólo las ligas protegidas están permitidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido federado con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se persentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presento una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración ya ha pasado",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el nombre de usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El nombre de usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese nombre de usuario ya está en uso",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no puede ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, favor de intentarlo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Favor de recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuenta con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el 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." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Favor de instalar uno de las siguientes configuraciones locales en su sistema y reinicie su servidor web",
+ "Please ask your server administrator to install the module." : "Favor de solicitar a su adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establezca <code>mbstring.func_overload</code> a <code>0</code> en su archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s esta instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, favor de actualizar la versión de su libxml2 y reinicie su servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Favor de solicitar al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Su direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Su direcctorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración",
+ "Your data directory is invalid" : "Su directorio de datos es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "You need to enter either an existing account or the administrator." : "Necesita ingresar una cuenta ya sea existente o la del administrador.",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s via %s" : "%s por %s",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json
new file mode 100644
index 00000000000..73719fc715d
--- /dev/null
+++ b/lib/l10n/es_MX.json
@@ -0,0 +1,220 @@
+{ "translations": {
+ "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 generalmente se soluciona dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Favor de asegurarse de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "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" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede descomponer su instalacón y no está soportado. Favor de leer la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "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." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%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 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",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, favor de no contestarlo. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Salir de la sesión",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ajustes del servidor",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Ajustes adicionales",
+ "Tips & tricks" : "Consejos y trucos",
+ "%s enter the database username and name." : "%s ingrese el nombre del usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresar el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puede utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "El nombre de usuario y/o contraseña de Oracle inválidos",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
+ "You need to enter details of an existing account." : "Necesita ingresar los detalles de una cuenta existente.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
+ "PostgreSQL username and/or password not valid" : "El nombre de usuario y/o contraseña de PostgreSQL inválidos",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Uselo bajo su propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, favor de cosiderar usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Favor de eliminar el ajuste open_basedir de su archivo php.ini o cambie a PHP de 64 bits. ",
+ "Set an admin username." : "Configurar un nombre de usuario del administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Invalid Federated Cloud ID" : "ID de Nube Federada Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tiene permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presento una falla al compartir %s, porque no puede compartir con usted mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s proque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Usted necesita proporcionar una contraseña para crear una liga pública, sólo las ligas protegidas están permitidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido federado con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se persentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presento una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración ya ha pasado",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el nombre de usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El nombre de usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese nombre de usuario ya está en uso",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no puede ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, favor de intentarlo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Favor de recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuenta con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el 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." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Favor de instalar uno de las siguientes configuraciones locales en su sistema y reinicie su servidor web",
+ "Please ask your server administrator to install the module." : "Favor de solicitar a su adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establezca <code>mbstring.func_overload</code> a <code>0</code> en su archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s esta instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, favor de actualizar la versión de su libxml2 y reinicie su servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Favor de solicitar al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Su direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Su direcctorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración",
+ "Your data directory is invalid" : "Su directorio de datos es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "You need to enter either an existing account or the administrator." : "Necesita ingresar una cuenta ya sea existente o la del administrador.",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s via %s" : "%s por %s",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index 9fd865bc5af..c2b10b4f462 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -32,12 +32,16 @@ OC.L10N.register(
"_%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" : "duela segundu batzuk",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.",
"File name is a reserved word" : "Fitxategi izena hitz erreserbatua da",
"File name contains at least one invalid character" : "Fitxategi izenak behintzat baliogabeko karaktere bat du",
"File name is too long" : "Fitxategi-izena luzeegia da",
"Dot files are not allowed" : "Dot fitxategiak ez dira onartzen",
"Empty filename is not allowed" : "Fitxategiaren izena izin da hutsa izan",
+ "Help" : "Laguntza",
+ "Apps" : "Aplikazioak",
+ "Personal" : "Pertsonala",
+ "Users" : "Erabiltzaileak",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Zerbitzariaren ezarpenak",
@@ -53,7 +57,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle erabiltzaile edota pasahitza ez dira egokiak.",
"DB Error: \"%s\"" : "DB errorea: \"%s\"",
"Offending command was: \"%s\"" : "Errorea komando honek sortu du: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.",
"Offending command was: \"%s\", name: %s, password: %s" : "Errorea komando honek sortu du: \"%s\", izena: %s, pasahitza: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL erabiltzaile edota pasahitza ez dira egokiak.",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
@@ -62,7 +65,6 @@ OC.L10N.register(
"Set an admin username." : "Ezarri administraziorako erabiltzaile izena.",
"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",
@@ -132,16 +134,11 @@ OC.L10N.register(
"Oct." : "Urr.",
"Nov." : "Aza.",
"Dec." : "Abe.",
- "Apps" : "Aplikazioak",
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da",
- "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"User disabled" : "Erabiltzaile desgaituta",
- "Help" : "Laguntza",
- "Personal" : "Pertsonala",
- "Users" : "Erabiltzaileak",
- "Admin" : "Admin",
+ "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Application is not enabled" : "Aplikazioa ez dago gaituta",
"Authentication error" : "Autentifikazio errorea",
@@ -151,7 +148,6 @@ OC.L10N.register(
"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)",
"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.",
@@ -163,23 +159,13 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da",
"Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.",
- "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete",
- "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.",
"Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.",
- "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",
- "No source specified when installing app" : "Ez da jatorririk zehaztu aplikazioa instalatzerakoan",
- "No href specified when installing app from http" : "Ez da href parametrorik zehaztu http bidez aplikazioa instalatzerakoan",
- "No path specified when installing app from local file" : "Ez da kokalekurik zehaztu fitxategi lokal moduan aplikazioa instalatzerakoan",
- "Archives of type %s are not supported" : "%s motako fitxategiak ez dira onartzen",
- "Failed to open archive when installing app" : "Fitxategia irekitzeak huts egin du aplikazioa instalatzerakoan",
- "App does not provide an info.xml file" : "Aplikazioak ez du info.xml fitxategia",
- "App can't be installed because of not allowed code in the App" : "Aplikazioa ezin da instalatu bertan duen baimendu gabeko kodea dela eta",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikazioa ezin da instalatu <shipped>true</shipped> etiketa duelako eta etiketa hau ez da onartzen banaketan ez datozen aplikazioetan",
- "Logging" : "Erregistroa",
- "Recommended" : "Aholkatuta",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform ez da jasaten",
- "Storage not available" : "Biltegia ez dago eskuragarri"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.",
+ "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.",
+ "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du",
+ "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)",
+ "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete",
+ "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index ea50d2fd0b7..6e9f1bfe5be 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -30,12 +30,16 @@
"_%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" : "duela segundu batzuk",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.",
"File name is a reserved word" : "Fitxategi izena hitz erreserbatua da",
"File name contains at least one invalid character" : "Fitxategi izenak behintzat baliogabeko karaktere bat du",
"File name is too long" : "Fitxategi-izena luzeegia da",
"Dot files are not allowed" : "Dot fitxategiak ez dira onartzen",
"Empty filename is not allowed" : "Fitxategiaren izena izin da hutsa izan",
+ "Help" : "Laguntza",
+ "Apps" : "Aplikazioak",
+ "Personal" : "Pertsonala",
+ "Users" : "Erabiltzaileak",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Zerbitzariaren ezarpenak",
@@ -51,7 +55,6 @@
"Oracle username and/or password not valid" : "Oracle erabiltzaile edota pasahitza ez dira egokiak.",
"DB Error: \"%s\"" : "DB errorea: \"%s\"",
"Offending command was: \"%s\"" : "Errorea komando honek sortu du: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.",
"Offending command was: \"%s\", name: %s, password: %s" : "Errorea komando honek sortu du: \"%s\", izena: %s, pasahitza: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL erabiltzaile edota pasahitza ez dira egokiak.",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
@@ -60,7 +63,6 @@
"Set an admin username." : "Ezarri administraziorako erabiltzaile izena.",
"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",
@@ -130,16 +132,11 @@
"Oct." : "Urr.",
"Nov." : "Aza.",
"Dec." : "Abe.",
- "Apps" : "Aplikazioak",
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da",
- "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"User disabled" : "Erabiltzaile desgaituta",
- "Help" : "Laguntza",
- "Personal" : "Pertsonala",
- "Users" : "Erabiltzaileak",
- "Admin" : "Admin",
+ "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Application is not enabled" : "Aplikazioa ez dago gaituta",
"Authentication error" : "Autentifikazio errorea",
@@ -149,7 +146,6 @@
"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)",
"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.",
@@ -161,23 +157,13 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da",
"Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.",
- "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete",
- "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.",
"Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.",
- "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",
- "No source specified when installing app" : "Ez da jatorririk zehaztu aplikazioa instalatzerakoan",
- "No href specified when installing app from http" : "Ez da href parametrorik zehaztu http bidez aplikazioa instalatzerakoan",
- "No path specified when installing app from local file" : "Ez da kokalekurik zehaztu fitxategi lokal moduan aplikazioa instalatzerakoan",
- "Archives of type %s are not supported" : "%s motako fitxategiak ez dira onartzen",
- "Failed to open archive when installing app" : "Fitxategia irekitzeak huts egin du aplikazioa instalatzerakoan",
- "App does not provide an info.xml file" : "Aplikazioak ez du info.xml fitxategia",
- "App can't be installed because of not allowed code in the App" : "Aplikazioa ezin da instalatu bertan duen baimendu gabeko kodea dela eta",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikazioa ezin da instalatu <shipped>true</shipped> etiketa duelako eta etiketa hau ez da onartzen banaketan ez datozen aplikazioetan",
- "Logging" : "Erregistroa",
- "Recommended" : "Aholkatuta",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform ez da jasaten",
- "Storage not available" : "Biltegia ez dago eskuragarri"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.",
+ "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.",
+ "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du",
+ "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)",
+ "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete",
+ "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js
index 65732ed842d..6f8a597f1bd 100644
--- a/lib/l10n/fi.js
+++ b/lib/l10n/fi.js
@@ -25,7 +25,7 @@ OC.L10N.register(
"Server version %s or lower is required." : "Palvelinversio %s tai alhaisempi vaaditaan.",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
- "Avatar image is not square" : "Avatar kuva ei ole neliö",
+ "Avatar image is not square" : "Avatar-kuva ei ole neliö",
"today" : "tänään",
"yesterday" : "eilen",
"_%n day ago_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
@@ -36,16 +36,23 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
"seconds ago" : "sekunteja sitten",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.",
"File name is a reserved word" : "Tiedoston nimi on varattu sana",
"File name contains at least one invalid character" : "Tiedoston nimi sisältää ainakin yhden virheellisen merkin",
"File name is too long" : "Tiedoston nimi on liian pitkä",
"Dot files are not allowed" : "Pistetiedostot eivät ole sallittuja",
"Empty filename is not allowed" : "Tiedostonimi ei voi olla tyhjä",
+ "This is an automatically sent email, please do not reply." : "Tämä on automaattisesti lähetetty viesti. Älä vastaa tähän viestiin.",
+ "Help" : "Ohje",
+ "Apps" : "Sovellukset",
+ "Personal" : "Henkilökohtainen",
+ "Log out" : "Kirjaudu ulos",
+ "Users" : "Käyttäjät",
+ "Admin" : "Ylläpito",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Palvelimen asetukset",
"Sharing" : "Jakaminen",
+ "Security" : "Turvallisuus",
"Encryption" : "Salaus",
"Additional settings" : "Lisäasetukset",
"Tips & tricks" : "Vinkkejä",
@@ -57,7 +64,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oraclen käyttäjätunnus ja/tai salasana on väärin",
"DB Error: \"%s\"" : "Tietokantavirhe: \"%s\"",
"Offending command was: \"%s\"" : "Loukkaava komento oli: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.",
+ "You need to enter details of an existing account." : "Anna olemassa olevan tilin tiedot.",
"Offending command was: \"%s\", name: %s, password: %s" : "Loukkaava komento oli: \"%s\", nimi: %s, salasana: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL:n käyttäjätunnus ja/tai salasana on väärin",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
@@ -66,9 +73,8 @@ OC.L10N.register(
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP:hen.",
"Set an admin username." : "Aseta ylläpitäjän käyttäjätunnus.",
"Set an admin password." : "Aseta ylläpitäjän salasana.",
- "Can't create or write into the data directory %s" : "Ei voi luoda tai kirjoittaa data -hakemistoon %s",
+ "Can't create or write into the data directory %s" : "Ei voi luoda tai kirjoittaa data-hakemistoon %s",
"Invalid Federated Cloud ID" : "Virheellinen federoidun pilven tunniste",
- "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Kohteen %s jakaminen epäonnistui, koska tietovarasto ei salli %i tyyppisiä jakoja",
"Sharing %s failed, because the file does not exist" : "Kohteen %s jakaminen epäonnistui, koska tiedostoa ei ole olemassa",
"You are not allowed to share %s" : "Oikeutesi eivät riitä kohteen %s jakamiseen.",
@@ -142,18 +148,14 @@ OC.L10N.register(
"Oct." : "Loka",
"Nov." : "Marras",
"Dec." : "Joulu",
- "Apps" : "Sovellukset",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Vain seuraavat merkit ovat sallittuja käyttäjätunnuksessa: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-'\"",
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"Username contains whitespace at the beginning or at the end" : "Käyttäjätunnus sisältää tyhjätilaa joko alussa tai lopussa",
+ "Username must not consist of dots only" : "Käyttäjänimi ei voi koostua vain pisteistä",
"A valid password must be provided" : "Anna kelvollinen salasana",
"The username is already being used" : "Käyttäjätunnus on jo käytössä",
- "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"User disabled" : "Käyttäjä poistettu käytöstä",
- "Help" : "Ohje",
- "Personal" : "Henkilökohtainen",
- "Users" : "Käyttäjät",
- "Admin" : "Ylläpito",
+ "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Sovellusta \"%s\" ei voi asentaa, koska appinfo-tiedostoa ei voi loi lukea.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
"No app name specified" : "Sovelluksen nimeä ei määritelty",
@@ -170,7 +172,7 @@ OC.L10N.register(
"Cannot write into \"config\" directory" : "Hakemistoon \"config\" kirjoittaminen ei onnistu",
"Cannot write into \"apps\" directory" : "Hakemistoon \"apps\" kirjoittaminen ei onnistu",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tämä on yleensä mahdollista korjata %santamalla HTTP-palvelimelle kirjoitusoikeus sovellushakemistoon%s tai poistamalla sovelluskauppa pois käytöstä asetustiedostoa käyttäen.",
- "Cannot create \"data\" directory (%s)" : "Kansion \"data\" luominen ei onnistu (%s)",
+ "Cannot create \"data\" directory" : "Hakemiston \"data\" luominen ei onnistu",
"Setting locale to %s failed" : "Maa-asetuksen %s asettaminen epäonnistui",
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
@@ -185,36 +187,23 @@ OC.L10N.register(
"Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan",
"Please upgrade your database version" : "Päivitä tietokantasi versio",
- "Data directory (%s) is readable by other users" : "Datakansio (%s) on muiden käyttäjien luettavissa",
- "Data directory (%s) must be an absolute path" : "Datahakemiston (%s) tulee olla absoluuttinen polku",
+ "Your data directory is readable by other users" : "Data-hakemisto on muiden käyttäjien luettavissa",
+ "Your data directory must be an absolute path" : "Data-hakemiston tulee olla absoluuttinen polku",
"Check the value of \"datadirectory\" in your configuration" : "Tarkista \"datadirectory\"-arvo asetuksistasi",
- "Data directory (%s) is invalid" : "Datakansio (%s) on virheellinen",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että datakansion juuressa on tiedosto \".ocdata\".",
+ "Your data directory is invalid" : "Datahakemistosi on virheellinen",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että data-hakemiston juuressa on tiedosto \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Lukitustapaa %d ei saatu kohteelle \"%s\".",
"Storage unauthorized. %s" : "Tallennustila ei ole valtuutettu. %s",
"Storage incomplete configuration. %s" : "Tallennustilan puutteellinen määritys. %s",
"Storage connection error. %s" : "Tallennustilan yhteysvirhe. %s",
"Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä",
"Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s",
- "4-byte characters are not supported in file names" : "4 tavun merkit eivät ole tuettuja tiedostojen nimissä",
- "App directory already exists" : "Sovelluskansio on jo olemassa",
- "Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
- "Archive does not contain a directory named %s" : "Arkisto ei sisällä kansiota nimeltä %s",
- "No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa",
- "No href specified when installing app from http" : "Href-määritettä ei asetettu asennettaessa sovellusta http:n yli",
- "No path specified when installing app from local file" : "Polkua ei määritelty sovellusta asennettaessa paikallisesta tiedostosta",
- "Archives of type %s are not supported" : "Tyypin %s arkistot eivät ole tuettuja",
- "Failed to open archive when installing app" : "Pakettitiedoston avaaminen epäonnistui sovellusta asennettaessa",
- "App does not provide an info.xml file" : "Sovellus ei sisällä info.xml-tiedostoa",
- "App cannot be installed because appinfo file cannot be read." : "Sovellusta ei voi asentaa, koska appinfo-tiedostoa ei voi lukea.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Allekirjoituksen tarkistaminen ei onnistunut. Ota yhteys sovelluskehittäjään ja tarkista ylläpitonäkymä.",
- "App can't be installed because of not allowed code in the App" : "Sovellusta ei voi asentaa, koska sovellus sisältää kiellettyä koodia",
- "App can't be installed because it is not compatible with this version of the server" : "Sovelluksen asennus ei onnistu, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Sovelluksen asennus ei onnistu, koska se sisältää <shipped>true</shipped> tunnisteen, jota ei sallita sovelluksille, joita ei toimiteta Nextcloudin mukana.",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Sovelluksen asennus ei onnistu, koska sen info.xml:ssä ilmoitettu versio ei ole sama kuin sovelluskaupassa ilmoitettu versio",
- "Logging" : "Loki",
- "Recommended" : "Suositeltu",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows -alusta ei ole tuettu",
- "Storage not available" : "Tallennustila ei ole käytettävissä"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.",
+ "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.",
+ "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
+ "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)",
+ "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa",
+ "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku",
+ "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json
index 13dceee1c69..d5b93713860 100644
--- a/lib/l10n/fi.json
+++ b/lib/l10n/fi.json
@@ -23,7 +23,7 @@
"Server version %s or lower is required." : "Palvelinversio %s tai alhaisempi vaaditaan.",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
- "Avatar image is not square" : "Avatar kuva ei ole neliö",
+ "Avatar image is not square" : "Avatar-kuva ei ole neliö",
"today" : "tänään",
"yesterday" : "eilen",
"_%n day ago_::_%n days ago_" : ["%n päivä sitten","%n päivää sitten"],
@@ -34,16 +34,23 @@
"_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
"seconds ago" : "sekunteja sitten",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.",
"File name is a reserved word" : "Tiedoston nimi on varattu sana",
"File name contains at least one invalid character" : "Tiedoston nimi sisältää ainakin yhden virheellisen merkin",
"File name is too long" : "Tiedoston nimi on liian pitkä",
"Dot files are not allowed" : "Pistetiedostot eivät ole sallittuja",
"Empty filename is not allowed" : "Tiedostonimi ei voi olla tyhjä",
+ "This is an automatically sent email, please do not reply." : "Tämä on automaattisesti lähetetty viesti. Älä vastaa tähän viestiin.",
+ "Help" : "Ohje",
+ "Apps" : "Sovellukset",
+ "Personal" : "Henkilökohtainen",
+ "Log out" : "Kirjaudu ulos",
+ "Users" : "Käyttäjät",
+ "Admin" : "Ylläpito",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Palvelimen asetukset",
"Sharing" : "Jakaminen",
+ "Security" : "Turvallisuus",
"Encryption" : "Salaus",
"Additional settings" : "Lisäasetukset",
"Tips & tricks" : "Vinkkejä",
@@ -55,7 +62,7 @@
"Oracle username and/or password not valid" : "Oraclen käyttäjätunnus ja/tai salasana on väärin",
"DB Error: \"%s\"" : "Tietokantavirhe: \"%s\"",
"Offending command was: \"%s\"" : "Loukkaava komento oli: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.",
+ "You need to enter details of an existing account." : "Anna olemassa olevan tilin tiedot.",
"Offending command was: \"%s\", name: %s, password: %s" : "Loukkaava komento oli: \"%s\", nimi: %s, salasana: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL:n käyttäjätunnus ja/tai salasana on väärin",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
@@ -64,9 +71,8 @@
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP:hen.",
"Set an admin username." : "Aseta ylläpitäjän käyttäjätunnus.",
"Set an admin password." : "Aseta ylläpitäjän salasana.",
- "Can't create or write into the data directory %s" : "Ei voi luoda tai kirjoittaa data -hakemistoon %s",
+ "Can't create or write into the data directory %s" : "Ei voi luoda tai kirjoittaa data-hakemistoon %s",
"Invalid Federated Cloud ID" : "Virheellinen federoidun pilven tunniste",
- "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Kohteen %s jakaminen epäonnistui, koska tietovarasto ei salli %i tyyppisiä jakoja",
"Sharing %s failed, because the file does not exist" : "Kohteen %s jakaminen epäonnistui, koska tiedostoa ei ole olemassa",
"You are not allowed to share %s" : "Oikeutesi eivät riitä kohteen %s jakamiseen.",
@@ -140,18 +146,14 @@
"Oct." : "Loka",
"Nov." : "Marras",
"Dec." : "Joulu",
- "Apps" : "Sovellukset",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Vain seuraavat merkit ovat sallittuja käyttäjätunnuksessa: \"a-z\", \"A-Z\", \"0-9\" ja \"_.@-'\"",
"A valid username must be provided" : "Anna kelvollinen käyttäjätunnus",
"Username contains whitespace at the beginning or at the end" : "Käyttäjätunnus sisältää tyhjätilaa joko alussa tai lopussa",
+ "Username must not consist of dots only" : "Käyttäjänimi ei voi koostua vain pisteistä",
"A valid password must be provided" : "Anna kelvollinen salasana",
"The username is already being used" : "Käyttäjätunnus on jo käytössä",
- "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"User disabled" : "Käyttäjä poistettu käytöstä",
- "Help" : "Ohje",
- "Personal" : "Henkilökohtainen",
- "Users" : "Käyttäjät",
- "Admin" : "Ylläpito",
+ "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Sovellusta \"%s\" ei voi asentaa, koska appinfo-tiedostoa ei voi loi lukea.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
"No app name specified" : "Sovelluksen nimeä ei määritelty",
@@ -168,7 +170,7 @@
"Cannot write into \"config\" directory" : "Hakemistoon \"config\" kirjoittaminen ei onnistu",
"Cannot write into \"apps\" directory" : "Hakemistoon \"apps\" kirjoittaminen ei onnistu",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Tämä on yleensä mahdollista korjata %santamalla HTTP-palvelimelle kirjoitusoikeus sovellushakemistoon%s tai poistamalla sovelluskauppa pois käytöstä asetustiedostoa käyttäen.",
- "Cannot create \"data\" directory (%s)" : "Kansion \"data\" luominen ei onnistu (%s)",
+ "Cannot create \"data\" directory" : "Hakemiston \"data\" luominen ei onnistu",
"Setting locale to %s failed" : "Maa-asetuksen %s asettaminen epäonnistui",
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
@@ -183,36 +185,23 @@
"Please ask your server administrator to restart the web server." : "Pyydä palvelimen ylläpitäjää käynnistämään web-palvelin uudelleen.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vaaditaan",
"Please upgrade your database version" : "Päivitä tietokantasi versio",
- "Data directory (%s) is readable by other users" : "Datakansio (%s) on muiden käyttäjien luettavissa",
- "Data directory (%s) must be an absolute path" : "Datahakemiston (%s) tulee olla absoluuttinen polku",
+ "Your data directory is readable by other users" : "Data-hakemisto on muiden käyttäjien luettavissa",
+ "Your data directory must be an absolute path" : "Data-hakemiston tulee olla absoluuttinen polku",
"Check the value of \"datadirectory\" in your configuration" : "Tarkista \"datadirectory\"-arvo asetuksistasi",
- "Data directory (%s) is invalid" : "Datakansio (%s) on virheellinen",
- "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että datakansion juuressa on tiedosto \".ocdata\".",
+ "Your data directory is invalid" : "Datahakemistosi on virheellinen",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Varmista, että data-hakemiston juuressa on tiedosto \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Lukitustapaa %d ei saatu kohteelle \"%s\".",
"Storage unauthorized. %s" : "Tallennustila ei ole valtuutettu. %s",
"Storage incomplete configuration. %s" : "Tallennustilan puutteellinen määritys. %s",
"Storage connection error. %s" : "Tallennustilan yhteysvirhe. %s",
"Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä",
"Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s",
- "4-byte characters are not supported in file names" : "4 tavun merkit eivät ole tuettuja tiedostojen nimissä",
- "App directory already exists" : "Sovelluskansio on jo olemassa",
- "Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
- "Archive does not contain a directory named %s" : "Arkisto ei sisällä kansiota nimeltä %s",
- "No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa",
- "No href specified when installing app from http" : "Href-määritettä ei asetettu asennettaessa sovellusta http:n yli",
- "No path specified when installing app from local file" : "Polkua ei määritelty sovellusta asennettaessa paikallisesta tiedostosta",
- "Archives of type %s are not supported" : "Tyypin %s arkistot eivät ole tuettuja",
- "Failed to open archive when installing app" : "Pakettitiedoston avaaminen epäonnistui sovellusta asennettaessa",
- "App does not provide an info.xml file" : "Sovellus ei sisällä info.xml-tiedostoa",
- "App cannot be installed because appinfo file cannot be read." : "Sovellusta ei voi asentaa, koska appinfo-tiedostoa ei voi lukea.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Allekirjoituksen tarkistaminen ei onnistunut. Ota yhteys sovelluskehittäjään ja tarkista ylläpitonäkymä.",
- "App can't be installed because of not allowed code in the App" : "Sovellusta ei voi asentaa, koska sovellus sisältää kiellettyä koodia",
- "App can't be installed because it is not compatible with this version of the server" : "Sovelluksen asennus ei onnistu, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Sovelluksen asennus ei onnistu, koska se sisältää <shipped>true</shipped> tunnisteen, jota ei sallita sovelluksille, joita ei toimiteta Nextcloudin mukana.",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Sovelluksen asennus ei onnistu, koska sen info.xml:ssä ilmoitettu versio ei ole sama kuin sovelluskaupassa ilmoitettu versio",
- "Logging" : "Loki",
- "Recommended" : "Suositeltu",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows -alusta ei ole tuettu",
- "Storage not available" : "Tallennustila ei ole käytettävissä"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.",
+ "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.",
+ "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
+ "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)",
+ "Data directory (%s) is readable by other users" : "Data-hakemisto (%s) on muiden käyttäjien luettavissa",
+ "Data directory (%s) must be an absolute path" : "Data-hakemiston (%s) tulee olla absoluuttinen polku",
+ "Data directory (%s) is invalid" : "Data-hakemisto (%s) on virheellinen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 96d77556deb..86a8fb3f84a 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Il y a %n heure","Il y a %n heures"],
"_%n minute ago_::_%n minutes ago_" : ["il y a %n minute","il y a %n minutes"],
"seconds ago" : "il y a quelques secondes",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'ID: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
"File name is a reserved word" : "Ce nom de fichier est un mot réservé",
"File name contains at least one invalid character" : "Le nom de fichier contient un (des) caractère(s) non valide(s)",
"File name is too long" : "Nom de fichier trop long",
"Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point",
"Empty filename is not allowed" : "Le nom de fichier ne peut pas être vide",
+ "This is an automatically sent email, please do not reply." : "Ceci est un e-mail envoyé automatiquement, veuillez ne pas y répondre.",
+ "Help" : "Aide",
+ "Apps" : "Applications",
+ "Personal" : "Personnel",
+ "Log out" : "Se déconnecter",
+ "Users" : "Utilisateurs",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
"Sharing" : "Partage",
+ "Security" : "Sécurité",
"Encryption" : "Chiffrement",
"Additional settings" : "Paramètres supplémentaires",
"Tips & tricks" : "Trucs et astuces",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base Oracle non valide(s)",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
+ "You need to enter details of an existing account." : "Vous devez indiquer les détails d'un compte existant.",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
"PostgreSQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base PostgreSQL non valide(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Spécifiez un mot de passe pour l'administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer, ou d'écrire dans, le répertoire des données %s",
"Invalid Federated Cloud ID" : "ID Federated Cloud incorrect",
- "%s shared »%s« with you" : "%s a partagé «%s» avec vous",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i",
"Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas",
"You are not allowed to share %s" : "Vous n'êtes pas autorisé à partager %s",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Déc.",
- "Apps" : "Applications",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", \"_@-\" et \".\" (le point)",
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"Username contains whitespace at the beginning or at the end" : "Le nom d'utilisateur contient des espaces au début ou à la fin",
+ "Username must not consist of dots only" : "Le nom d'utilisateur ne doit pas être composé uniquement de points",
"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é",
- "Login canceled by app" : "L'authentification a été annulé par l'application",
"User disabled" : "Utilisateur désactivé",
- "Help" : "Aide",
- "Personal" : "Personnel",
- "Users" : "Utilisateurs",
- "Admin" : "Administration",
+ "Login canceled by app" : "L'authentification a été annulé par l'application",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'application \"%s\" ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"No app name specified" : "Aucun nom d'application spécifié",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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)",
+ "Cannot create \"data\" directory" : "Impossible de créer le dossier \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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." : "Le problème de permissions peut généralement être résolu %sen donnant au serveur web un accès en écriture au répertoire racine%s",
"Setting locale to %s failed" : "Echec de la spécification des paramètres régionaux à %s",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis",
"Please upgrade your database version" : "Veuillez mettre à jour votre gestionnaire de base de données",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.",
- "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs",
- "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu",
+ "Your data directory is readable by other users" : "Votre répertoire est lisible par les autres utilisateurs",
+ "Your data directory must be an absolute path" : "Le chemin de votre répertoire doit être un lien absolu",
"Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration",
- "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide",
+ "Your data directory is invalid" : "Votre répertoire n'est pas valide",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Veuillez vérifier que le répertoire de données contient un fichier \".ocdata\" à sa racine.",
"Could not obtain lock type %d on \"%s\"." : "Impossible d'obtenir le verrouillage de type %d sur \"%s\".",
"Storage unauthorized. %s" : "Espace de stockage non autorisé. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Erreur de connexion à l'espace stockage. %s",
"Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
"Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s",
- "4-byte characters are not supported in file names" : "Les caractères sur 4 octets ne sont pas pris en charge dans les noms de fichiers",
- "App directory already exists" : "Le dossier de l'application existe déjà",
- "Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
- "Archive does not contain a directory named %s" : "Le fichier archive ne contient pas de répertoire %s",
- "No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
- "No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http",
- "No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local",
- "Archives of type %s are not supported" : "Les archives de type %s ne sont pas prises en charge",
- "Failed to open archive when installing app" : "Échec de l'ouverture de l'archive lors de l'installation de l'application",
- "App does not provide an info.xml file" : "L'application ne fournit pas de fichier info.xml",
- "App cannot be installed because appinfo file cannot be read." : "L'application ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La signature n'a pas pu être vérifiée. Merci de contacter le développeur de l'application et de vérifier votre page d'administration.",
- "App can't be installed because of not allowed code in the App" : "L'application ne peut être installée car elle contient du code non-autorisé",
- "App can't be installed because it is not compatible with this version of the server" : "L'application ne peut être installée car elle n'est pas compatible avec cette version du serveur",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'application ne peut être installée car elle contient la balise <shipped>true</shipped> qui n'est pas autorisée pour les applications non incluses par défaut",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'App ne peut pas être installé car la version dans info.xml diffère de la version signalée par l' app store",
- "Logging" : "Connexion",
- "Recommended" : "Recommandée",
- "Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
- "Storage not available" : "Support de stockage non disponible"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
+ "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
+ "%s shared »%s« with you" : "%s a partagé «%s» avec vous",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs",
+ "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu",
+ "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index a9b89108b70..8a3037cfd24 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["Il y a %n heure","Il y a %n heures"],
"_%n minute ago_::_%n minutes ago_" : ["il y a %n minute","il y a %n minutes"],
"seconds ago" : "il y a quelques secondes",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'ID: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
"File name is a reserved word" : "Ce nom de fichier est un mot réservé",
"File name contains at least one invalid character" : "Le nom de fichier contient un (des) caractère(s) non valide(s)",
"File name is too long" : "Nom de fichier trop long",
"Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point",
"Empty filename is not allowed" : "Le nom de fichier ne peut pas être vide",
+ "This is an automatically sent email, please do not reply." : "Ceci est un e-mail envoyé automatiquement, veuillez ne pas y répondre.",
+ "Help" : "Aide",
+ "Apps" : "Applications",
+ "Personal" : "Personnel",
+ "Log out" : "Se déconnecter",
+ "Users" : "Utilisateurs",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
"Sharing" : "Partage",
+ "Security" : "Sécurité",
"Encryption" : "Chiffrement",
"Additional settings" : "Paramètres supplémentaires",
"Tips & tricks" : "Trucs et astuces",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base Oracle non valide(s)",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
+ "You need to enter details of an existing account." : "Vous devez indiquer les détails d'un compte existant.",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
"PostgreSQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base PostgreSQL non valide(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
@@ -66,8 +74,6 @@
"Set an admin password." : "Spécifiez un mot de passe pour l'administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer, ou d'écrire dans, le répertoire des données %s",
"Invalid Federated Cloud ID" : "ID Federated Cloud incorrect",
- "%s shared »%s« with you" : "%s a partagé «%s» avec vous",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i",
"Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas",
"You are not allowed to share %s" : "Vous n'êtes pas autorisé à partager %s",
@@ -147,18 +153,14 @@
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Déc.",
- "Apps" : "Applications",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", \"_@-\" et \".\" (le point)",
"A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi",
"Username contains whitespace at the beginning or at the end" : "Le nom d'utilisateur contient des espaces au début ou à la fin",
+ "Username must not consist of dots only" : "Le nom d'utilisateur ne doit pas être composé uniquement de points",
"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é",
- "Login canceled by app" : "L'authentification a été annulé par l'application",
"User disabled" : "Utilisateur désactivé",
- "Help" : "Aide",
- "Personal" : "Personnel",
- "Users" : "Utilisateurs",
- "Admin" : "Administration",
+ "Login canceled by app" : "L'authentification a été annulé par l'application",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'application \"%s\" ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"No app name specified" : "Aucun nom d'application spécifié",
@@ -175,7 +177,7 @@
"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)",
+ "Cannot create \"data\" directory" : "Impossible de créer le dossier \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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." : "Le problème de permissions peut généralement être résolu %sen donnant au serveur web un accès en écriture au répertoire racine%s",
"Setting locale to %s failed" : "Echec de la spécification des paramètres régionaux à %s",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis",
"Please upgrade your database version" : "Veuillez mettre à jour votre gestionnaire de base de données",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.",
- "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs",
- "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu",
+ "Your data directory is readable by other users" : "Votre répertoire est lisible par les autres utilisateurs",
+ "Your data directory must be an absolute path" : "Le chemin de votre répertoire doit être un lien absolu",
"Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration",
- "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide",
+ "Your data directory is invalid" : "Votre répertoire n'est pas valide",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Veuillez vérifier que le répertoire de données contient un fichier \".ocdata\" à sa racine.",
"Could not obtain lock type %d on \"%s\"." : "Impossible d'obtenir le verrouillage de type %d sur \"%s\".",
"Storage unauthorized. %s" : "Espace de stockage non autorisé. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Erreur de connexion à l'espace stockage. %s",
"Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
"Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s",
- "4-byte characters are not supported in file names" : "Les caractères sur 4 octets ne sont pas pris en charge dans les noms de fichiers",
- "App directory already exists" : "Le dossier de l'application existe déjà",
- "Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
- "Archive does not contain a directory named %s" : "Le fichier archive ne contient pas de répertoire %s",
- "No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
- "No href specified when installing app from http" : "Aucun href spécifié pour installer l'application par http",
- "No path specified when installing app from local file" : "Aucun chemin spécifié pour installer l'application depuis un fichier local",
- "Archives of type %s are not supported" : "Les archives de type %s ne sont pas prises en charge",
- "Failed to open archive when installing app" : "Échec de l'ouverture de l'archive lors de l'installation de l'application",
- "App does not provide an info.xml file" : "L'application ne fournit pas de fichier info.xml",
- "App cannot be installed because appinfo file cannot be read." : "L'application ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La signature n'a pas pu être vérifiée. Merci de contacter le développeur de l'application et de vérifier votre page d'administration.",
- "App can't be installed because of not allowed code in the App" : "L'application ne peut être installée car elle contient du code non-autorisé",
- "App can't be installed because it is not compatible with this version of the server" : "L'application ne peut être installée car elle n'est pas compatible avec cette version du serveur",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'application ne peut être installée car elle contient la balise <shipped>true</shipped> qui n'est pas autorisée pour les applications non incluses par défaut",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'App ne peut pas être installé car la version dans info.xml diffère de la version signalée par l' app store",
- "Logging" : "Connexion",
- "Recommended" : "Recommandée",
- "Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
- "Storage not available" : "Support de stockage non disponible"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.",
+ "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
+ "%s shared »%s« with you" : "%s a partagé «%s» avec vous",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Le répertoire de données (%s) est lisible par les autres utilisateurs",
+ "Data directory (%s) must be an absolute path" : "Le chemin du dossier de données (%s) doit être absolu",
+ "Data directory (%s) is invalid" : "Le répertoire (%s) n'est pas valide"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/he.js b/lib/l10n/he.js
index 209214a7862..872acb2e0c5 100644
--- a/lib/l10n/he.js
+++ b/lib/l10n/he.js
@@ -25,12 +25,16 @@ OC.L10N.register(
"last year" : "שנה שעברה",
"_%n year ago_::_%n years ago_" : ["לפני %n שנה","לפני %n שנים"],
"seconds ago" : "שניות",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.",
"File name is a reserved word" : "שם קובץ הנו מילה שמורה",
"File name contains at least one invalid character" : "שם קובץ כולל לפחות תו אחד לא חוקי",
"File name is too long" : "שם קובץ ארוך מדי",
"Dot files are not allowed" : "קבצי Dot אינם מותרים",
"Empty filename is not allowed" : "שם קובץ ריק אינו מאושר",
+ "Help" : "עזרה",
+ "Apps" : "יישומים",
+ "Personal" : "אישי",
+ "Users" : "משתמשים",
+ "Admin" : "מנהל",
"Server settings" : "הגדרות שרת",
"Sharing" : "שיתוף",
"Tips & tricks" : "טיפים וטריקים",
@@ -42,7 +46,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "שם משתמש ו/או סיסמת Oracle אינם תקפים",
"DB Error: \"%s\"" : "שגיאת מסד נתונים: \"%s\"",
"Offending command was: \"%s\"" : "הפקודה המזיקה הייתה: \"%s\"",
- "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.",
"Offending command was: \"%s\", name: %s, password: %s" : "הפקודה המזיקה הייתה: \"%s\", שם: %s, סיסמא: %s",
"PostgreSQL username and/or password not valid" : "שם משתמש ו/או סיסמת PostgreSQL אינם תקפים",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X אינו נתמך ו- %s לא יעבוד כשורה בפלטפורמה זו. ניתן לקחת סיכון ולהשתמש באחריותך! ",
@@ -53,8 +56,6 @@ OC.L10N.register(
"Set an admin password." : "קביעת סיסמת מנהל",
"Can't create or write into the data directory %s" : "לא ניתן ליצור או לכתוב לתוך תיקיית הנתונים %s",
"Invalid Federated Cloud ID" : "זיהוי ענן מאוגד לא חוקי",
- "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
- "%s via %s" : "%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",
@@ -134,18 +135,13 @@ OC.L10N.register(
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
- "Apps" : "יישומים",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "רק התווים הבאים מאושרים לשם משתמש: \"a-z\", \"A-Z\", \"0-9\", וגם \"_.@-'\"",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
"Username contains whitespace at the beginning or at the end" : "שם המשתמש מכיל רווח בתחילתו או בסופו",
"A valid password must be provided" : "יש לספק ססמה תקנית",
"The username is already being used" : "השם משתמש כבר בשימוש",
- "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"User disabled" : "משתמש מנוטרל",
- "Help" : "עזרה",
- "Personal" : "אישי",
- "Users" : "משתמשים",
- "Admin" : "מנהל",
+ "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "יישום \"%s\" לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
"No app name specified" : "לא הוגדר שם יישום",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "היישום \"%s\" לא ניתן להתקנה כיוון שיחסי התלות הבאים אינם מתקיימים: %s",
@@ -160,7 +156,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "זה בדרך כלל ניתן לתיקון על ידי <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">מתן הרשאות כתיבה בשרת לתיקיית הבסיס directory</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 נכשלה",
@@ -179,33 +174,20 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "נדרש PostgreSQL >= 9",
"Please upgrade your database version" : "יש לשדרג את גרסת מסד הנתונים שלך",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "יש לשנות את ההרשאות ל- 0770 כך שהתיקייה לא תרשם על ידי משתמשים אחרים.",
- "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים",
- "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי",
"Check the value of \"datadirectory\" in your configuration" : "יש לבדוק את הערך \"datadirectory\" בהגדרות התצורה שלך",
- "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית",
"Please check that the data directory contains a file \".ocdata\" in its root." : "יש לוודא שתיקיית המידע כוללת קובץ \".ocdata\" בנתיב הבסיס שלה",
"Could not obtain lock type %d on \"%s\"." : "לא ניתן היה להשיג סוג נעילה %d ב- \"%s\".",
"Storage unauthorized. %s" : "אחסון לא מורשה. %s",
"Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s",
"Storage connection error. %s" : "שגיאת חיבור אחסון. %s",
"Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s",
- "4-byte characters are not supported in file names" : "תווי 4-byte אינם נתמכים בשמות קבצים",
- "App directory already exists" : "תיקיית יישום כבר קיימת",
- "Can't create app folder. Please fix permissions. %s" : "לא ניתן ליצור תיקיית יישום. יש לתקן הרשאות. %s",
- "Archive does not contain a directory named %s" : "הארכיב לא כולל שם תיקייה %s",
- "No source specified when installing app" : "לא נקבע מקור בתהליך התקנת היישום",
- "No href specified when installing app from http" : "לא נקבע href בתהליך התקנת היישום מהאינטרנט",
- "No path specified when installing app from local file" : "לא נקבע נתיב בתהליך התקנת היישום מקובץ מקומי",
- "Archives of type %s are not supported" : "ארכיבים מסוג %s אינם נתמכים",
- "Failed to open archive when installing app" : "פתיחת ארכיב נכשלה בתהליך התקנת היישום",
- "App does not provide an info.xml file" : "היישום לא סיפק קובץ info.xml",
- "App cannot be installed because appinfo file cannot be read." : "היישום לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "חתימה לא ניתנת לבדיקה. יש ליצור קשר עם מפתח היישום ולבדוק את מסך הניהול.",
- "App can't be installed because of not allowed code in the App" : "היישום לא ניתן להתקנה בשל קוד אסור ביישום",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "יישום לא ניתן להתקנה כייון שכולל תווית <shipped>אמת</shipped> tag שאינו מאושר ליישומים שאינם נשלחים",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "לא ניתן להתקין את היישום כיוון שהגרסה בקובץ info.xml אינה תואמת לגרסה שמתקבלת מחנות היישומים",
- "Recommended" : "מומלץ",
- "Microsoft Windows Platform is not supported" : "מערכת הפעלה חלונות אינה נתמכת",
- "Storage not available" : "אחסון לא זמין"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.",
+ "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.",
+ "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
+ "%s via %s" : "%s על בסיס %s",
+ "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים",
+ "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי",
+ "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/he.json b/lib/l10n/he.json
index 7d156e37d3c..dda00e54f90 100644
--- a/lib/l10n/he.json
+++ b/lib/l10n/he.json
@@ -23,12 +23,16 @@
"last year" : "שנה שעברה",
"_%n year ago_::_%n years ago_" : ["לפני %n שנה","לפני %n שנים"],
"seconds ago" : "שניות",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.",
"File name is a reserved word" : "שם קובץ הנו מילה שמורה",
"File name contains at least one invalid character" : "שם קובץ כולל לפחות תו אחד לא חוקי",
"File name is too long" : "שם קובץ ארוך מדי",
"Dot files are not allowed" : "קבצי Dot אינם מותרים",
"Empty filename is not allowed" : "שם קובץ ריק אינו מאושר",
+ "Help" : "עזרה",
+ "Apps" : "יישומים",
+ "Personal" : "אישי",
+ "Users" : "משתמשים",
+ "Admin" : "מנהל",
"Server settings" : "הגדרות שרת",
"Sharing" : "שיתוף",
"Tips & tricks" : "טיפים וטריקים",
@@ -40,7 +44,6 @@
"Oracle username and/or password not valid" : "שם משתמש ו/או סיסמת Oracle אינם תקפים",
"DB Error: \"%s\"" : "שגיאת מסד נתונים: \"%s\"",
"Offending command was: \"%s\"" : "הפקודה המזיקה הייתה: \"%s\"",
- "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.",
"Offending command was: \"%s\", name: %s, password: %s" : "הפקודה המזיקה הייתה: \"%s\", שם: %s, סיסמא: %s",
"PostgreSQL username and/or password not valid" : "שם משתמש ו/או סיסמת PostgreSQL אינם תקפים",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X אינו נתמך ו- %s לא יעבוד כשורה בפלטפורמה זו. ניתן לקחת סיכון ולהשתמש באחריותך! ",
@@ -51,8 +54,6 @@
"Set an admin password." : "קביעת סיסמת מנהל",
"Can't create or write into the data directory %s" : "לא ניתן ליצור או לכתוב לתוך תיקיית הנתונים %s",
"Invalid Federated Cloud ID" : "זיהוי ענן מאוגד לא חוקי",
- "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
- "%s via %s" : "%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",
@@ -132,18 +133,13 @@
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
- "Apps" : "יישומים",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "רק התווים הבאים מאושרים לשם משתמש: \"a-z\", \"A-Z\", \"0-9\", וגם \"_.@-'\"",
"A valid username must be provided" : "יש לספק שם משתמש תקני",
"Username contains whitespace at the beginning or at the end" : "שם המשתמש מכיל רווח בתחילתו או בסופו",
"A valid password must be provided" : "יש לספק ססמה תקנית",
"The username is already being used" : "השם משתמש כבר בשימוש",
- "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"User disabled" : "משתמש מנוטרל",
- "Help" : "עזרה",
- "Personal" : "אישי",
- "Users" : "משתמשים",
- "Admin" : "מנהל",
+ "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "יישום \"%s\" לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
"No app name specified" : "לא הוגדר שם יישום",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "היישום \"%s\" לא ניתן להתקנה כיוון שיחסי התלות הבאים אינם מתקיימים: %s",
@@ -158,7 +154,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "זה בדרך כלל ניתן לתיקון על ידי <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">מתן הרשאות כתיבה בשרת לתיקיית הבסיס directory</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 נכשלה",
@@ -177,33 +172,20 @@
"PostgreSQL >= 9 required" : "נדרש PostgreSQL >= 9",
"Please upgrade your database version" : "יש לשדרג את גרסת מסד הנתונים שלך",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "יש לשנות את ההרשאות ל- 0770 כך שהתיקייה לא תרשם על ידי משתמשים אחרים.",
- "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים",
- "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי",
"Check the value of \"datadirectory\" in your configuration" : "יש לבדוק את הערך \"datadirectory\" בהגדרות התצורה שלך",
- "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית",
"Please check that the data directory contains a file \".ocdata\" in its root." : "יש לוודא שתיקיית המידע כוללת קובץ \".ocdata\" בנתיב הבסיס שלה",
"Could not obtain lock type %d on \"%s\"." : "לא ניתן היה להשיג סוג נעילה %d ב- \"%s\".",
"Storage unauthorized. %s" : "אחסון לא מורשה. %s",
"Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s",
"Storage connection error. %s" : "שגיאת חיבור אחסון. %s",
"Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s",
- "4-byte characters are not supported in file names" : "תווי 4-byte אינם נתמכים בשמות קבצים",
- "App directory already exists" : "תיקיית יישום כבר קיימת",
- "Can't create app folder. Please fix permissions. %s" : "לא ניתן ליצור תיקיית יישום. יש לתקן הרשאות. %s",
- "Archive does not contain a directory named %s" : "הארכיב לא כולל שם תיקייה %s",
- "No source specified when installing app" : "לא נקבע מקור בתהליך התקנת היישום",
- "No href specified when installing app from http" : "לא נקבע href בתהליך התקנת היישום מהאינטרנט",
- "No path specified when installing app from local file" : "לא נקבע נתיב בתהליך התקנת היישום מקובץ מקומי",
- "Archives of type %s are not supported" : "ארכיבים מסוג %s אינם נתמכים",
- "Failed to open archive when installing app" : "פתיחת ארכיב נכשלה בתהליך התקנת היישום",
- "App does not provide an info.xml file" : "היישום לא סיפק קובץ info.xml",
- "App cannot be installed because appinfo file cannot be read." : "היישום לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "חתימה לא ניתנת לבדיקה. יש ליצור קשר עם מפתח היישום ולבדוק את מסך הניהול.",
- "App can't be installed because of not allowed code in the App" : "היישום לא ניתן להתקנה בשל קוד אסור ביישום",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "יישום לא ניתן להתקנה כייון שכולל תווית <shipped>אמת</shipped> tag שאינו מאושר ליישומים שאינם נשלחים",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "לא ניתן להתקין את היישום כיוון שהגרסה בקובץ info.xml אינה תואמת לגרסה שמתקבלת מחנות היישומים",
- "Recommended" : "מומלץ",
- "Microsoft Windows Platform is not supported" : "מערכת הפעלה חלונות אינה נתמכת",
- "Storage not available" : "אחסון לא זמין"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.",
+ "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.",
+ "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«",
+ "%s via %s" : "%s על בסיס %s",
+ "Cannot create \"data\" directory (%s)" : "לא ניתן ליצור תיקיית \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "תיקיית המידע (%s) ניתנת לקריאה על ידי משתמשים אחרים",
+ "Data directory (%s) must be an absolute path" : "תיקיית המידע (%s) חייבת להיות כנתיב אבסולוטי",
+ "Data directory (%s) is invalid" : "תיקיית מידע (%s) אינה חוקית"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js
index 1ca8068cf77..5abc96d98c5 100644
--- a/lib/l10n/hu.js
+++ b/lib/l10n/hu.js
@@ -36,16 +36,22 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n órája","%n órája"],
"_%n minute ago_::_%n minutes ago_" : ["%n perce","%n perce"],
"seconds ago" : "pár másodperce",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.",
"File name is a reserved word" : "A fajl neve egy rezervált szó",
"File name contains at least one invalid character" : "A fájlnév legalább egy érvénytelen karaktert tartalmaz!",
"File name is too long" : "A fájlnév túl hosszú!",
"Dot files are not allowed" : "Pontozott fájlok nem engedétlyezettek",
"Empty filename is not allowed" : "Üres fájlnév nem engedétlyezett",
+ "Help" : "Súgó",
+ "Apps" : "Alkalmazások",
+ "Personal" : "Személyes",
+ "Log out" : "Kijelentkezés",
+ "Users" : "Felhasználók",
+ "Admin" : "Adminisztrátor",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
+ "Security" : "Biztonság",
"Encryption" : "Titkosítás",
"Additional settings" : "További beállítások",
"Tips & tricks" : "Tippek és trükkök",
@@ -57,7 +63,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Az Oracle felhasználói név és/vagy jelszó érvénytelen",
"DB Error: \"%s\"" : "Adatbázis hiba: \"%s\"",
"Offending command was: \"%s\"" : "A hibát ez a parancs okozta: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia",
"Offending command was: \"%s\", name: %s, password: %s" : "A hibát okozó parancs ez volt: \"%s\", login név: %s, jelszó: %s",
"PostgreSQL username and/or password not valid" : "A PostgreSQL felhasználói név és/vagy jelszó érvénytelen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
@@ -68,8 +73,6 @@ OC.L10N.register(
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
"Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s",
"Invalid Federated Cloud ID" : "Érvénytelen Egyesített Felhő Azonosító",
- "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«",
- "%s via %s" : "%s - %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "%s megosztása sikertelen, mert a megosztási alrendszer nem engedi a %l típus megosztását",
"Sharing %s failed, because the file does not exist" : "%s megosztása sikertelen, mert a fájl nem létezik",
"You are not allowed to share %s" : "Nincs jogosultságod %s megosztására",
@@ -149,18 +152,13 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Alkalmazások",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "A felhasználónévben csak a következő karakterek engedélyezettek: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-'\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"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",
- "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"User disabled" : "Felhasználó letiltva",
- "Help" : "Súgó",
- "Personal" : "Személyes",
- "Users" : "Felhasználók",
- "Admin" : "Adminisztrátor",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
"No app name specified" : "Nincs az alkalmazás név megadva.",
@@ -177,7 +175,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root kö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",
@@ -197,10 +194,7 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges",
"Please upgrade your database version" : "Kérem frissítse az adatbázis-szoftvert!",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!",
- "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
- "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
"Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban",
- "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!",
"Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".",
"Storage unauthorized. %s" : "A tároló jogosulatlan. %s",
@@ -208,26 +202,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Tároló kapcsolódási hiba. %s",
"Storage is temporarily not available" : "A tároló átmenetileg nem érthető el",
"Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
- "4-byte characters are not supported in file names" : "4-byte karakterek nem támogatottak a fájl nevekben.",
- "App directory already exists" : "Az alkalmazás könyvtára már létezik",
- "Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s",
- "Archive does not contain a directory named %s" : "Az archívum nem tartalmazza ezt a könyvtárt: %s",
- "No source specified when installing app" : "Az alkalmazás telepítéséhez nincs forrás megadva",
- "No href specified when installing app from http" : "Az alkalmazás http-n keresztül történő telepítéséhez nincs href hivetkozás megadva",
- "No path specified when installing app from local file" : "Az alkalmazás helyi telepítéséhez nincs útvonal (mappa) megadva",
- "Archives of type %s are not supported" : "A(z) %s típusú tömörített fájl nem támogatott",
- "Failed to open archive when installing app" : "Nem sikerült megnyitni a tömörített fájlt a telepítés során",
- "App does not provide an info.xml file" : "Az alkalmazás nem szolgáltatott info.xml file-t",
- "App cannot be installed because appinfo file cannot be read." : "Az alkalmazás nem telepíthető, mert az appinfo fájl nem olvasható.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Az aláírás nem ellenőrizhető. Kérlek lépj kapcsolatba az alkalmazás fejlesztőjével és ellenőrizd az adminisztrátori képernyőt.",
- "App can't be installed because of not allowed code in the App" : "Az alkalmazást nem lehet telepíteni, mert abban nem engedélyezett programkód szerepel",
- "App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
- "Logging" : "Naplózás",
- "Recommended" : "Ajánlott",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
- "Storage not available" : "A tároló elérhetetlen."
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.",
+ "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia",
+ "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«",
+ "%s via %s" : "%s - %s",
+ "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)",
+ "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
+ "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
+ "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) "
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json
index a3f22bc7d5b..b8f24a4f0fa 100644
--- a/lib/l10n/hu.json
+++ b/lib/l10n/hu.json
@@ -34,16 +34,22 @@
"_%n hour ago_::_%n hours ago_" : ["%n órája","%n órája"],
"_%n minute ago_::_%n minutes ago_" : ["%n perce","%n perce"],
"seconds ago" : "pár másodperce",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.",
"File name is a reserved word" : "A fajl neve egy rezervált szó",
"File name contains at least one invalid character" : "A fájlnév legalább egy érvénytelen karaktert tartalmaz!",
"File name is too long" : "A fájlnév túl hosszú!",
"Dot files are not allowed" : "Pontozott fájlok nem engedétlyezettek",
"Empty filename is not allowed" : "Üres fájlnév nem engedétlyezett",
+ "Help" : "Súgó",
+ "Apps" : "Alkalmazások",
+ "Personal" : "Személyes",
+ "Log out" : "Kijelentkezés",
+ "Users" : "Felhasználók",
+ "Admin" : "Adminisztrátor",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
+ "Security" : "Biztonság",
"Encryption" : "Titkosítás",
"Additional settings" : "További beállítások",
"Tips & tricks" : "Tippek és trükkök",
@@ -55,7 +61,6 @@
"Oracle username and/or password not valid" : "Az Oracle felhasználói név és/vagy jelszó érvénytelen",
"DB Error: \"%s\"" : "Adatbázis hiba: \"%s\"",
"Offending command was: \"%s\"" : "A hibát ez a parancs okozta: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia",
"Offending command was: \"%s\", name: %s, password: %s" : "A hibát okozó parancs ez volt: \"%s\", login név: %s, jelszó: %s",
"PostgreSQL username and/or password not valid" : "A PostgreSQL felhasználói név és/vagy jelszó érvénytelen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
@@ -66,8 +71,6 @@
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
"Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s",
"Invalid Federated Cloud ID" : "Érvénytelen Egyesített Felhő Azonosító",
- "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«",
- "%s via %s" : "%s - %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "%s megosztása sikertelen, mert a megosztási alrendszer nem engedi a %l típus megosztását",
"Sharing %s failed, because the file does not exist" : "%s megosztása sikertelen, mert a fájl nem létezik",
"You are not allowed to share %s" : "Nincs jogosultságod %s megosztására",
@@ -147,18 +150,13 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Alkalmazások",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "A felhasználónévben csak a következő karakterek engedélyezettek: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-'\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
"Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"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",
- "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"User disabled" : "Felhasználó letiltva",
- "Help" : "Súgó",
- "Personal" : "Személyes",
- "Users" : "Felhasználók",
- "Admin" : "Adminisztrátor",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
"No app name specified" : "Nincs az alkalmazás név megadva.",
@@ -175,7 +173,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root kö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",
@@ -195,10 +192,7 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 szükséges",
"Please upgrade your database version" : "Kérem frissítse az adatbázis-szoftvert!",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!",
- "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
- "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
"Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban",
- "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!",
"Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".",
"Storage unauthorized. %s" : "A tároló jogosulatlan. %s",
@@ -206,26 +200,13 @@
"Storage connection error. %s" : "Tároló kapcsolódási hiba. %s",
"Storage is temporarily not available" : "A tároló átmenetileg nem érthető el",
"Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
- "4-byte characters are not supported in file names" : "4-byte karakterek nem támogatottak a fájl nevekben.",
- "App directory already exists" : "Az alkalmazás könyvtára már létezik",
- "Can't create app folder. Please fix permissions. %s" : "Nem lehetett létrehozni az alkalmazás mappáját. Kérem ellenőrizze a jogosultságokat. %s",
- "Archive does not contain a directory named %s" : "Az archívum nem tartalmazza ezt a könyvtárt: %s",
- "No source specified when installing app" : "Az alkalmazás telepítéséhez nincs forrás megadva",
- "No href specified when installing app from http" : "Az alkalmazás http-n keresztül történő telepítéséhez nincs href hivetkozás megadva",
- "No path specified when installing app from local file" : "Az alkalmazás helyi telepítéséhez nincs útvonal (mappa) megadva",
- "Archives of type %s are not supported" : "A(z) %s típusú tömörített fájl nem támogatott",
- "Failed to open archive when installing app" : "Nem sikerült megnyitni a tömörített fájlt a telepítés során",
- "App does not provide an info.xml file" : "Az alkalmazás nem szolgáltatott info.xml file-t",
- "App cannot be installed because appinfo file cannot be read." : "Az alkalmazás nem telepíthető, mert az appinfo fájl nem olvasható.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Az aláírás nem ellenőrizhető. Kérlek lépj kapcsolatba az alkalmazás fejlesztőjével és ellenőrizd az adminisztrátori képernyőt.",
- "App can't be installed because of not allowed code in the App" : "Az alkalmazást nem lehet telepíteni, mert abban nem engedélyezett programkód szerepel",
- "App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
- "Logging" : "Naplózás",
- "Recommended" : "Ajánlott",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
- "Storage not available" : "A tároló elérhetetlen."
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.",
+ "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia",
+ "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«",
+ "%s via %s" : "%s - %s",
+ "Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)",
+ "Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
+ "Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
+ "Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/is.js b/lib/l10n/is.js
index 6294dbfeaf4..92eb574cc00 100644
--- a/lib/l10n/is.js
+++ b/lib/l10n/is.js
@@ -35,6 +35,12 @@ OC.L10N.register(
"File name is too long" : "Skráarheiti er of langt",
"Dot files are not allowed" : "Skrár með punkti eru ekki leyfðar",
"Empty filename is not allowed" : "Autt skráarheiti er ekki leyft.",
+ "Help" : "Hjálp",
+ "Apps" : "Forrit",
+ "Personal" : "Einka",
+ "Log out" : "Skrá út",
+ "Users" : "Notendur",
+ "Admin" : "Stjórnun",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Stillingar þjóns",
@@ -58,8 +64,6 @@ OC.L10N.register(
"Set an admin password." : "Stilltu lykilorð kerfisstjóra.",
"Can't create or write into the data directory %s" : "Gat ekki búið til eða skrifað í gagnamöppuna %s",
"Invalid Federated Cloud ID" : "Ógilt skýjasambandsauðkenni (Federated Cloud ID)",
- "%s shared »%s« with you" : "%s deildi »%s« með þér",
- "%s via %s" : "%s með %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %i",
"Sharing %s failed, because the file does not exist" : "Deiling %s mistókst, því skráin er ekki til",
"You are not allowed to share %s" : "Þú hefur ekki heimild til að deila %s",
@@ -129,18 +133,13 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nóv.",
"Dec." : "Des.",
- "Apps" : "Forrit",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Einungis eru leyfilegir eftirfarandi stafir í notandanafni: \"a-z\", \"A-Z\", \"0-9\", og \"_.@-'\"",
"A valid username must be provided" : "Skráðu inn gilt notandanafn",
"Username contains whitespace at the beginning or at the end" : "Notandanafnið inniheldur orðabil í upphafi eða enda",
"A valid password must be provided" : "Skráðu inn gilt lykilorð",
"The username is already being used" : "Notandanafnið er þegar í notkun",
- "Login canceled by app" : "Forrit hætti við innskráningu",
"User disabled" : "Notandi óvirkur",
- "Help" : "Hjálp",
- "Personal" : "Einka",
- "Users" : "Notendur",
- "Admin" : "Stjórnun",
+ "Login canceled by app" : "Forrit hætti við innskráningu",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Ekki var hægt að setja upp forritið \"%s\" vegna þess að það er ekki samhæft þessari útgáfu vefþjónsins.",
"No app name specified" : "Ekkert heiti forrits tilgreint",
@@ -156,35 +155,32 @@ OC.L10N.register(
"No database drivers (sqlite, mysql, or postgresql) installed." : "Engir reklar fyrir gagnagrunn eru uppsettir (sqlite, mysql eða postgresql).",
"Cannot write into \"config\" directory" : "Get ekki skrifað í \"config\" möppuna",
"Cannot write into \"apps\" directory" : "Get ekki skrifað í \"apps\" möppuna",
- "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)",
"Setting locale to %s failed" : "Mistókst að setja upp staðfærsluna %s",
+ "Please install one of these locales on your system and restart your webserver." : "Settu upp eina af þessum staðfærslum og endurræstu vefþjóninn.",
"Please ask your server administrator to install the module." : "Biddu kerfisstjórann þinn um að setja eininguna upp.",
"PHP module %s not installed." : "PHP-einingin %s er ekki uppsett.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-stillingin \"%s\" er ekki sett á \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Ef þessi stilling er löguð í php.ini mun Nextcloud keyra aftur",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er stillt á \"%s\" í stað gildisins \"0\" eins og vænst var",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Til að laga þetta vandamál ættirðu að setja <code>mbstring.func_overload</code> sem <code>0</code> í php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krafist er libxml2 2.7.0 hið minnsta. Núna er %s uppsett.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Til að laga þetta vandamál ættirðu að uppfæra útgáfu þína af libxml2 og endurræsa vefþjóninn.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP virðist vera sett upp to fjarlægja innantextablokkir (inline doc blocks). Þetta mun gera ýmis kjarnaforrit óaðgengileg.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Þessu veldur væntanlega biðminni/hraðall á borð við Zend OPcache eða eAccelerator.",
"Please ask your server administrator to restart the web server." : "Biddu kerfisstjórann þinn um að endurræsa vefþjóninn.",
"PostgreSQL >= 9 required" : "Krefst PostgreSQL >= 9",
"Please upgrade your database version" : "Uppfærðu útgáfu gagnagrunnsins",
- "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur",
- "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð",
"Check the value of \"datadirectory\" in your configuration" : "Athugaðu gildi \"datadirectory\" í uppsetningunni þinni",
- "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild",
"Storage unauthorized. %s" : "Gagnageymsla ekki auðkennd. %s",
"Storage incomplete configuration. %s" : "Ófullgerð uppsetning gagnageymslu. %s",
"Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s",
"Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu",
"Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s",
- "4-byte characters are not supported in file names" : "4-bæta stafir eru ekki leyfilegir í skráaheitum",
- "App directory already exists" : "Forritsmappan er þegar til",
- "Can't create app folder. Please fix permissions. %s" : "Gat ekki búið til forritsmöppu. Lagaðu aðgangsheimildir. %s",
- "Archive does not contain a directory named %s" : "Safnskráin inniheldur ekki möppu með heitinu %s",
- "No source specified when installing app" : "Enginn uppruni tilgreindur þegar forrit var sett upp",
- "No href specified when installing app from http" : "Ekkert href tilgreint þegar forrit var sett upp í gegnum http",
- "No path specified when installing app from local file" : "Engin slóð tilgreind þegar forrit var sett upp úr staðværri skrá",
- "Logging" : "Skráning annáls",
- "Recommended" : "Mælt með",
- "Microsoft Windows Platform is not supported" : "Ekki er stuðningur við Microsoft Windows stýrikerfið",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ekki er stuðningur við að keyra Nextcloud-þjón á Microsoft Windows stýrikerfinu. Við stingum upp á því að þú notir Linux-þjón í sýndarvél, ef þú hefur ekki kost á að yfirfæra sjálfan þjóninn í Linux.",
- "Storage not available" : "Gagnageymsla ekki tiltæk"
+ "%s shared »%s« with you" : "%s deildi »%s« með þér",
+ "%s via %s" : "%s með %s",
+ "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)",
+ "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur",
+ "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð",
+ "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/lib/l10n/is.json b/lib/l10n/is.json
index 48e91de5e47..04cb5bc5709 100644
--- a/lib/l10n/is.json
+++ b/lib/l10n/is.json
@@ -33,6 +33,12 @@
"File name is too long" : "Skráarheiti er of langt",
"Dot files are not allowed" : "Skrár með punkti eru ekki leyfðar",
"Empty filename is not allowed" : "Autt skráarheiti er ekki leyft.",
+ "Help" : "Hjálp",
+ "Apps" : "Forrit",
+ "Personal" : "Einka",
+ "Log out" : "Skrá út",
+ "Users" : "Notendur",
+ "Admin" : "Stjórnun",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Stillingar þjóns",
@@ -56,8 +62,6 @@
"Set an admin password." : "Stilltu lykilorð kerfisstjóra.",
"Can't create or write into the data directory %s" : "Gat ekki búið til eða skrifað í gagnamöppuna %s",
"Invalid Federated Cloud ID" : "Ógilt skýjasambandsauðkenni (Federated Cloud ID)",
- "%s shared »%s« with you" : "%s deildi »%s« með þér",
- "%s via %s" : "%s með %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %i",
"Sharing %s failed, because the file does not exist" : "Deiling %s mistókst, því skráin er ekki til",
"You are not allowed to share %s" : "Þú hefur ekki heimild til að deila %s",
@@ -127,18 +131,13 @@
"Oct." : "Okt.",
"Nov." : "Nóv.",
"Dec." : "Des.",
- "Apps" : "Forrit",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Einungis eru leyfilegir eftirfarandi stafir í notandanafni: \"a-z\", \"A-Z\", \"0-9\", og \"_.@-'\"",
"A valid username must be provided" : "Skráðu inn gilt notandanafn",
"Username contains whitespace at the beginning or at the end" : "Notandanafnið inniheldur orðabil í upphafi eða enda",
"A valid password must be provided" : "Skráðu inn gilt lykilorð",
"The username is already being used" : "Notandanafnið er þegar í notkun",
- "Login canceled by app" : "Forrit hætti við innskráningu",
"User disabled" : "Notandi óvirkur",
- "Help" : "Hjálp",
- "Personal" : "Einka",
- "Users" : "Notendur",
- "Admin" : "Stjórnun",
+ "Login canceled by app" : "Forrit hætti við innskráningu",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Ekki var hægt að setja upp forritið \"%s\" vegna þess að það er ekki samhæft þessari útgáfu vefþjónsins.",
"No app name specified" : "Ekkert heiti forrits tilgreint",
@@ -154,35 +153,32 @@
"No database drivers (sqlite, mysql, or postgresql) installed." : "Engir reklar fyrir gagnagrunn eru uppsettir (sqlite, mysql eða postgresql).",
"Cannot write into \"config\" directory" : "Get ekki skrifað í \"config\" möppuna",
"Cannot write into \"apps\" directory" : "Get ekki skrifað í \"apps\" möppuna",
- "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)",
"Setting locale to %s failed" : "Mistókst að setja upp staðfærsluna %s",
+ "Please install one of these locales on your system and restart your webserver." : "Settu upp eina af þessum staðfærslum og endurræstu vefþjóninn.",
"Please ask your server administrator to install the module." : "Biddu kerfisstjórann þinn um að setja eininguna upp.",
"PHP module %s not installed." : "PHP-einingin %s er ekki uppsett.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-stillingin \"%s\" er ekki sett á \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Ef þessi stilling er löguð í php.ini mun Nextcloud keyra aftur",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er stillt á \"%s\" í stað gildisins \"0\" eins og vænst var",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Til að laga þetta vandamál ættirðu að setja <code>mbstring.func_overload</code> sem <code>0</code> í php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krafist er libxml2 2.7.0 hið minnsta. Núna er %s uppsett.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Til að laga þetta vandamál ættirðu að uppfæra útgáfu þína af libxml2 og endurræsa vefþjóninn.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP virðist vera sett upp to fjarlægja innantextablokkir (inline doc blocks). Þetta mun gera ýmis kjarnaforrit óaðgengileg.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Þessu veldur væntanlega biðminni/hraðall á borð við Zend OPcache eða eAccelerator.",
"Please ask your server administrator to restart the web server." : "Biddu kerfisstjórann þinn um að endurræsa vefþjóninn.",
"PostgreSQL >= 9 required" : "Krefst PostgreSQL >= 9",
"Please upgrade your database version" : "Uppfærðu útgáfu gagnagrunnsins",
- "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur",
- "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð",
"Check the value of \"datadirectory\" in your configuration" : "Athugaðu gildi \"datadirectory\" í uppsetningunni þinni",
- "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild",
"Storage unauthorized. %s" : "Gagnageymsla ekki auðkennd. %s",
"Storage incomplete configuration. %s" : "Ófullgerð uppsetning gagnageymslu. %s",
"Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s",
"Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu",
"Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s",
- "4-byte characters are not supported in file names" : "4-bæta stafir eru ekki leyfilegir í skráaheitum",
- "App directory already exists" : "Forritsmappan er þegar til",
- "Can't create app folder. Please fix permissions. %s" : "Gat ekki búið til forritsmöppu. Lagaðu aðgangsheimildir. %s",
- "Archive does not contain a directory named %s" : "Safnskráin inniheldur ekki möppu með heitinu %s",
- "No source specified when installing app" : "Enginn uppruni tilgreindur þegar forrit var sett upp",
- "No href specified when installing app from http" : "Ekkert href tilgreint þegar forrit var sett upp í gegnum http",
- "No path specified when installing app from local file" : "Engin slóð tilgreind þegar forrit var sett upp úr staðværri skrá",
- "Logging" : "Skráning annáls",
- "Recommended" : "Mælt með",
- "Microsoft Windows Platform is not supported" : "Ekki er stuðningur við Microsoft Windows stýrikerfið",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ekki er stuðningur við að keyra Nextcloud-þjón á Microsoft Windows stýrikerfinu. Við stingum upp á því að þú notir Linux-þjón í sýndarvél, ef þú hefur ekki kost á að yfirfæra sjálfan þjóninn í Linux.",
- "Storage not available" : "Gagnageymsla ekki tiltæk"
+ "%s shared »%s« with you" : "%s deildi »%s« með þér",
+ "%s via %s" : "%s með %s",
+ "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)",
+ "Data directory (%s) is readable by other users" : "Gagnamappa (%s) er lesanleg fyrir aðra notendur",
+ "Data directory (%s) must be an absolute path" : "Gagnamappan (%s) verður að vera algild slóð",
+ "Data directory (%s) is invalid" : "Gagnamappa (%s) er ógild"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index d061ef50683..21a5bb20d7b 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
"seconds ago" : "secondi fa",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con ID: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
"File name is a reserved word" : "Il nome del file è una parola riservata",
"File name contains at least one invalid character" : "Il nome del file contiene almeno un carattere non valido",
"File name is too long" : "Il nome del file è troppo lungo",
"Dot files are not allowed" : "I file con un punto iniziale non sono consentiti",
"Empty filename is not allowed" : "Un nome di file vuoto non è consentito",
+ "This is an automatically sent email, please do not reply." : "Questo è un messaggio di posta inviato automaticamente, non rispondere.",
+ "Help" : "Aiuto",
+ "Apps" : "Applicazioni",
+ "Personal" : "Personale",
+ "Log out" : "Esci",
+ "Users" : "Utenti",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Impostazioni server",
"Sharing" : "Condivisione",
+ "Security" : "Sicurezza",
"Encryption" : "Cifratura",
"Additional settings" : "Impostazioni aggiuntive",
"Tips & tricks" : "Suggerimenti e trucchi",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Nome utente e/o password di Oracle non validi",
"DB Error: \"%s\"" : "Errore DB: \"%s\"",
"Offending command was: \"%s\"" : "Il comando non consentito era: \"%s\"",
- "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.",
+ "You need to enter details of an existing account." : "Devi inserire i dettagli di un account esistente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Il comando non consentito era: \"%s\", nome: %s, password: %s",
"PostgreSQL username and/or password not valid" : "Nome utente e/o password di PostgreSQL non validi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
"Invalid Federated Cloud ID" : "ID di cloud federata non valido",
- "%s shared »%s« with you" : "%s ha condiviso «%s» con te",
- "%s via %s" : "%s tramite %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Condivisione di %s non riuscita, poiché il motore non consente condivisioni del tipo %i",
"Sharing %s failed, because the file does not exist" : "Condivisione di %s non riuscita, poiché il file non esiste",
"You are not allowed to share %s" : "Non ti è consentito condividere %s",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Ott.",
"Nov." : "Nov.",
"Dec." : "Dic.",
- "Apps" : "Applicazioni",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Solo i seguenti caratteri sono consentiti in un nome utente: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Username contains whitespace at the beginning or at the end" : "Il nome utente contiene spazi all'inizio o alla fine",
+ "Username must not consist of dots only" : "Il nome utente non può consistere di soli punti",
"A valid password must be provided" : "Deve essere fornita una password valida",
"The username is already being used" : "Il nome utente è già utilizzato",
- "Login canceled by app" : "Accesso annullato dall'applicazione",
"User disabled" : "Utente disabilitato",
- "Help" : "Aiuto",
- "Personal" : "Personale",
- "Users" : "Utenti",
- "Admin" : "Admin",
+ "Login canceled by app" : "Accesso annullato dall'applicazione",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'applicazione \"%s\" non può essere installata poiché il file appinfo non può essere letto.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.",
"No app name specified" : "Il nome dell'applicazione non è specificato",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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)",
+ "Cannot create \"data\" directory" : "Impossibile creare la cartella \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9",
"Please upgrade your database version" : "Aggiorna la versione del tuo database",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Modifica i permessi in 0770 in modo tale che la cartella non sia leggibile dagli altri utenti.",
- "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti",
- "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto",
+ "Your data directory is readable by other users" : "La cartella dei dati è leggibile dagli altri utenti",
+ "Your data directory must be an absolute path" : "La cartella dei dati deve essere un percorso assoluto",
"Check the value of \"datadirectory\" in your configuration" : "Controlla il valore di \"datadirectory\" nella tua configurazione",
- "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida",
+ "Your data directory is invalid" : "La cartella dei dati non è valida",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifica che la cartella dei dati contenga un file \".ocdata\" nella sua radice.",
"Could not obtain lock type %d on \"%s\"." : "Impossibile ottenere il blocco di tipo %d su \"%s\".",
"Storage unauthorized. %s" : "Archiviazione non autorizzata. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Errore di connessione all'archiviazione. %s",
"Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile",
"Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s",
- "4-byte characters are not supported in file names" : "I caratteri di 4 byte non sono supportati nei nomi dei file",
- "App directory already exists" : "La cartella dell'applicazione esiste già",
- "Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
- "Archive does not contain a directory named %s" : "L'archivio non contiene una cartella con nome %s",
- "No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione",
- "No href specified when installing app from http" : "Nessun href specificato durante l'installazione dell'applicazione da http",
- "No path specified when installing app from local file" : "Nessun percorso specificato durante l'installazione dell'applicazione da file locale",
- "Archives of type %s are not supported" : "Gli archivi di tipo %s non sono supportati",
- "Failed to open archive when installing app" : "Apertura archivio non riuscita durante l'installazione dell'applicazione",
- "App does not provide an info.xml file" : "L'applicazione non fornisce un file info.xml",
- "App cannot be installed because appinfo file cannot be read." : "L'applicazione non può essere installata poiché il file appinfo non può essere letto.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La firma non può essere verificata. Contatta lo sviluppatore dell'applicazione e controlla la schermata di amministrazione.",
- "App can't be installed because of not allowed code in the App" : "L'applicazione non può essere installata a causa di codice non consentito al suo interno",
- "App can't be installed because it is not compatible with this version of the server" : "L'applicazione non può essere installata perché non è compatibile con questa versione del server",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'applicazione non può essere installata poiché contiene l'etichetta <shipped>true<shipped> che è consentita per le applicazioni native",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml non è la stessa riportata dall'app store",
- "Logging" : "Accesso",
- "Recommended" : "Consigliata",
- "Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
- "Storage not available" : "Archiviazione non disponibile"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
+ "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.",
+ "%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "%s via %s" : "%s tramite %s",
+ "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti",
+ "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto",
+ "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 2ed1ebfe337..53d5a764d37 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
"seconds ago" : "secondi fa",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con ID: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
"File name is a reserved word" : "Il nome del file è una parola riservata",
"File name contains at least one invalid character" : "Il nome del file contiene almeno un carattere non valido",
"File name is too long" : "Il nome del file è troppo lungo",
"Dot files are not allowed" : "I file con un punto iniziale non sono consentiti",
"Empty filename is not allowed" : "Un nome di file vuoto non è consentito",
+ "This is an automatically sent email, please do not reply." : "Questo è un messaggio di posta inviato automaticamente, non rispondere.",
+ "Help" : "Aiuto",
+ "Apps" : "Applicazioni",
+ "Personal" : "Personale",
+ "Log out" : "Esci",
+ "Users" : "Utenti",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Impostazioni server",
"Sharing" : "Condivisione",
+ "Security" : "Sicurezza",
"Encryption" : "Cifratura",
"Additional settings" : "Impostazioni aggiuntive",
"Tips & tricks" : "Suggerimenti e trucchi",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Nome utente e/o password di Oracle non validi",
"DB Error: \"%s\"" : "Errore DB: \"%s\"",
"Offending command was: \"%s\"" : "Il comando non consentito era: \"%s\"",
- "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.",
+ "You need to enter details of an existing account." : "Devi inserire i dettagli di un account esistente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Il comando non consentito era: \"%s\", nome: %s, password: %s",
"PostgreSQL username and/or password not valid" : "Nome utente e/o password di PostgreSQL non validi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
@@ -66,8 +74,6 @@
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
"Invalid Federated Cloud ID" : "ID di cloud federata non valido",
- "%s shared »%s« with you" : "%s ha condiviso «%s» con te",
- "%s via %s" : "%s tramite %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Condivisione di %s non riuscita, poiché il motore non consente condivisioni del tipo %i",
"Sharing %s failed, because the file does not exist" : "Condivisione di %s non riuscita, poiché il file non esiste",
"You are not allowed to share %s" : "Non ti è consentito condividere %s",
@@ -147,18 +153,14 @@
"Oct." : "Ott.",
"Nov." : "Nov.",
"Dec." : "Dic.",
- "Apps" : "Applicazioni",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Solo i seguenti caratteri sono consentiti in un nome utente: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Username contains whitespace at the beginning or at the end" : "Il nome utente contiene spazi all'inizio o alla fine",
+ "Username must not consist of dots only" : "Il nome utente non può consistere di soli punti",
"A valid password must be provided" : "Deve essere fornita una password valida",
"The username is already being used" : "Il nome utente è già utilizzato",
- "Login canceled by app" : "Accesso annullato dall'applicazione",
"User disabled" : "Utente disabilitato",
- "Help" : "Aiuto",
- "Personal" : "Personale",
- "Users" : "Utenti",
- "Admin" : "Admin",
+ "Login canceled by app" : "Accesso annullato dall'applicazione",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'applicazione \"%s\" non può essere installata poiché il file appinfo non può essere letto.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.",
"No app name specified" : "Il nome dell'applicazione non è specificato",
@@ -175,7 +177,7 @@
"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)",
+ "Cannot create \"data\" directory" : "Impossibile creare la cartella \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "Richiesto PostgreSQL >= 9",
"Please upgrade your database version" : "Aggiorna la versione del tuo database",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Modifica i permessi in 0770 in modo tale che la cartella non sia leggibile dagli altri utenti.",
- "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti",
- "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto",
+ "Your data directory is readable by other users" : "La cartella dei dati è leggibile dagli altri utenti",
+ "Your data directory must be an absolute path" : "La cartella dei dati deve essere un percorso assoluto",
"Check the value of \"datadirectory\" in your configuration" : "Controlla il valore di \"datadirectory\" nella tua configurazione",
- "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida",
+ "Your data directory is invalid" : "La cartella dei dati non è valida",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifica che la cartella dei dati contenga un file \".ocdata\" nella sua radice.",
"Could not obtain lock type %d on \"%s\"." : "Impossibile ottenere il blocco di tipo %d su \"%s\".",
"Storage unauthorized. %s" : "Archiviazione non autorizzata. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Errore di connessione all'archiviazione. %s",
"Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile",
"Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s",
- "4-byte characters are not supported in file names" : "I caratteri di 4 byte non sono supportati nei nomi dei file",
- "App directory already exists" : "La cartella dell'applicazione esiste già",
- "Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
- "Archive does not contain a directory named %s" : "L'archivio non contiene una cartella con nome %s",
- "No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione",
- "No href specified when installing app from http" : "Nessun href specificato durante l'installazione dell'applicazione da http",
- "No path specified when installing app from local file" : "Nessun percorso specificato durante l'installazione dell'applicazione da file locale",
- "Archives of type %s are not supported" : "Gli archivi di tipo %s non sono supportati",
- "Failed to open archive when installing app" : "Apertura archivio non riuscita durante l'installazione dell'applicazione",
- "App does not provide an info.xml file" : "L'applicazione non fornisce un file info.xml",
- "App cannot be installed because appinfo file cannot be read." : "L'applicazione non può essere installata poiché il file appinfo non può essere letto.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "La firma non può essere verificata. Contatta lo sviluppatore dell'applicazione e controlla la schermata di amministrazione.",
- "App can't be installed because of not allowed code in the App" : "L'applicazione non può essere installata a causa di codice non consentito al suo interno",
- "App can't be installed because it is not compatible with this version of the server" : "L'applicazione non può essere installata perché non è compatibile con questa versione del server",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'applicazione non può essere installata poiché contiene l'etichetta <shipped>true<shipped> che è consentita per le applicazioni native",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml non è la stessa riportata dall'app store",
- "Logging" : "Accesso",
- "Recommended" : "Consigliata",
- "Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
- "Storage not available" : "Archiviazione non disponibile"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.",
+ "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.",
+ "%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "%s via %s" : "%s tramite %s",
+ "Cannot create \"data\" directory (%s)" : "Impossibile creare la cartella \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "La cartella dei dati (%s) è leggibile dagli altri utenti",
+ "Data directory (%s) must be an absolute path" : "La cartella dei dati (%s) deve essere un percorso assoluto",
+ "Data directory (%s) is invalid" : "La cartella dei dati (%s) non è valida"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 229bf13aed5..8b32c162c23 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -36,16 +36,22 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
"seconds ago" : "数秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。",
"File name is a reserved word" : "ファイル名が予約された単語です",
"File name contains at least one invalid character" : "ファイル名に1文字以上の無効な文字が含まれています",
"File name is too long" : "ファイル名が長すぎます",
"Dot files are not allowed" : "ドットファイルは許可されていません",
"Empty filename is not allowed" : "空のファイル名は許可されていません",
+ "Help" : "ヘルプ",
+ "Apps" : "アプリ",
+ "Personal" : "個人",
+ "Log out" : "ログアウト",
+ "Users" : "ユーザー",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "サーバー設定",
"Sharing" : "共有",
+ "Security" : "セキュリティ",
"Encryption" : "暗号化",
"Additional settings" : "追加設定",
"Tips & tricks" : "ヒントとコツ",
@@ -57,7 +63,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracleのユーザー名もしくはパスワードは有効ではありません",
"DB Error: \"%s\"" : "DBエラー: \"%s\"",
"Offending command was: \"%s\"" : "違反コマンド: \"%s\"",
- "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。",
"Offending command was: \"%s\", name: %s, password: %s" : "違反コマンド: \"%s\"、名前: %s、パスワード: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名もしくはパスワードは有効ではありません",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
@@ -68,8 +73,6 @@ OC.L10N.register(
"Set an admin password." : "管理者のパスワードを設定",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
"Invalid Federated Cloud ID" : "無効な統合されたクラウドID",
- "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
- "%s via %s" : "%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 を共有することを許可されていません。",
@@ -149,18 +152,13 @@ OC.L10N.register(
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
- "Apps" : "アプリ",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "ユーザー名で利用できる文字列は、次のものです: \"a-z\", \"A-Z\", \"0-9\", \"_.@-\"",
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"Username contains whitespace at the beginning or at the end" : "ユーザー名の最初か最後に空白が含まれています",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"The username is already being used" : "ユーザー名はすでに使われています",
- "Login canceled by app" : "アプリによりログインが中止されました",
"User disabled" : "ユーザーは無効です",
- "Help" : "ヘルプ",
- "Personal" : "個人",
- "Users" : "ユーザー",
- "Admin" : "管理",
+ "Login canceled by app" : "アプリによりログインが中止されました",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリ名 \"%s\" がインストールできません。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"No app name specified" : "アプリ名が未指定",
@@ -177,7 +175,7 @@ OC.L10N.register(
"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) を作成できません",
+ "Cannot create \"data\" directory" : "\"data\" ディレクトリを作成できません",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "通常、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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 に設定できませんでした",
@@ -197,10 +195,9 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL 9以上が必要です",
"Please upgrade your database version" : "新しいバージョンのデータベースにアップグレードしてください",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "ディレクトリが他のユーザーから見えないように、パーミッションを 0770 に変更してください。",
- "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます",
- "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。",
+ "Your data directory is readable by other users" : "データディレクトリは、他のユーザーから読み取り専用です",
+ "Your data directory must be an absolute path" : "データディレクトリは、絶対パスにする必要があります",
"Check the value of \"datadirectory\" in your configuration" : "設定ファイル内の \"datadirectory\" の値を確認してください。",
- "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です",
"Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。",
"Storage unauthorized. %s" : "権限のないストレージです。 %s",
@@ -208,26 +205,13 @@ OC.L10N.register(
"Storage connection error. %s" : "ストレージへの接続エラー。 %s",
"Storage is temporarily not available" : "ストレージは一時的に利用できません",
"Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s",
- "4-byte characters are not supported in file names" : "ファイル名に4バイト文字を使用するのはサポートされていません",
- "App directory already exists" : "アプリディレクトリはすでに存在します",
- "Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
- "Archive does not contain a directory named %s" : "%s という名前のディレクトリは、アーカイブに含まれていません",
- "No source specified when installing app" : "アプリインストール時のソースが未指定",
- "No href specified when installing app from http" : "アプリインストール時のhttpの URL が未指定",
- "No path specified when installing app from local file" : "アプリインストール時のローカルファイルのパスが未指定",
- "Archives of type %s are not supported" : "\"%s\"タイプのアーカイブ形式は未サポート",
- "Failed to open archive when installing app" : "アプリをインストール中にアーカイブファイルを開けませんでした。",
- "App does not provide an info.xml file" : "アプリにinfo.xmlファイルが入っていません",
- "App cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリがインストールできません。",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "署名が確認できませんでした。このアプリの開発者へ連絡し、管理画面を確認してください。",
- "App can't be installed because of not allowed code in the App" : "アプリで許可されないコードが入っているのが原因でアプリがインストールできません",
- "App can't be installed because it is not compatible with this version of the server" : "アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "info.xmlのバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
- "Logging" : "ログ",
- "Recommended" : "おすすめ",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
- "Storage not available" : "ストレージが利用できません"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。",
+ "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。",
+ "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
+ "%s via %s" : "%s に %s から",
+ "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません",
+ "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます",
+ "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。",
+ "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 008b4ef1fd4..6b0fb7194cc 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -34,16 +34,22 @@
"_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
"seconds ago" : "数秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。",
"File name is a reserved word" : "ファイル名が予約された単語です",
"File name contains at least one invalid character" : "ファイル名に1文字以上の無効な文字が含まれています",
"File name is too long" : "ファイル名が長すぎます",
"Dot files are not allowed" : "ドットファイルは許可されていません",
"Empty filename is not allowed" : "空のファイル名は許可されていません",
+ "Help" : "ヘルプ",
+ "Apps" : "アプリ",
+ "Personal" : "個人",
+ "Log out" : "ログアウト",
+ "Users" : "ユーザー",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "サーバー設定",
"Sharing" : "共有",
+ "Security" : "セキュリティ",
"Encryption" : "暗号化",
"Additional settings" : "追加設定",
"Tips & tricks" : "ヒントとコツ",
@@ -55,7 +61,6 @@
"Oracle username and/or password not valid" : "Oracleのユーザー名もしくはパスワードは有効ではありません",
"DB Error: \"%s\"" : "DBエラー: \"%s\"",
"Offending command was: \"%s\"" : "違反コマンド: \"%s\"",
- "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。",
"Offending command was: \"%s\", name: %s, password: %s" : "違反コマンド: \"%s\"、名前: %s、パスワード: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名もしくはパスワードは有効ではありません",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
@@ -66,8 +71,6 @@
"Set an admin password." : "管理者のパスワードを設定",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
"Invalid Federated Cloud ID" : "無効な統合されたクラウドID",
- "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
- "%s via %s" : "%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 を共有することを許可されていません。",
@@ -147,18 +150,13 @@
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
- "Apps" : "アプリ",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "ユーザー名で利用できる文字列は、次のものです: \"a-z\", \"A-Z\", \"0-9\", \"_.@-\"",
"A valid username must be provided" : "有効なユーザー名を指定する必要があります",
"Username contains whitespace at the beginning or at the end" : "ユーザー名の最初か最後に空白が含まれています",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"The username is already being used" : "ユーザー名はすでに使われています",
- "Login canceled by app" : "アプリによりログインが中止されました",
"User disabled" : "ユーザーは無効です",
- "Help" : "ヘルプ",
- "Personal" : "個人",
- "Users" : "ユーザー",
- "Admin" : "管理",
+ "Login canceled by app" : "アプリによりログインが中止されました",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリ名 \"%s\" がインストールできません。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"No app name specified" : "アプリ名が未指定",
@@ -175,7 +173,7 @@
"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) を作成できません",
+ "Cannot create \"data\" directory" : "\"data\" ディレクトリを作成できません",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "通常、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">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 に設定できませんでした",
@@ -195,10 +193,9 @@
"PostgreSQL >= 9 required" : "PostgreSQL 9以上が必要です",
"Please upgrade your database version" : "新しいバージョンのデータベースにアップグレードしてください",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "ディレクトリが他のユーザーから見えないように、パーミッションを 0770 に変更してください。",
- "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます",
- "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。",
+ "Your data directory is readable by other users" : "データディレクトリは、他のユーザーから読み取り専用です",
+ "Your data directory must be an absolute path" : "データディレクトリは、絶対パスにする必要があります",
"Check the value of \"datadirectory\" in your configuration" : "設定ファイル内の \"datadirectory\" の値を確認してください。",
- "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です",
"Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。",
"Storage unauthorized. %s" : "権限のないストレージです。 %s",
@@ -206,26 +203,13 @@
"Storage connection error. %s" : "ストレージへの接続エラー。 %s",
"Storage is temporarily not available" : "ストレージは一時的に利用できません",
"Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s",
- "4-byte characters are not supported in file names" : "ファイル名に4バイト文字を使用するのはサポートされていません",
- "App directory already exists" : "アプリディレクトリはすでに存在します",
- "Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
- "Archive does not contain a directory named %s" : "%s という名前のディレクトリは、アーカイブに含まれていません",
- "No source specified when installing app" : "アプリインストール時のソースが未指定",
- "No href specified when installing app from http" : "アプリインストール時のhttpの URL が未指定",
- "No path specified when installing app from local file" : "アプリインストール時のローカルファイルのパスが未指定",
- "Archives of type %s are not supported" : "\"%s\"タイプのアーカイブ形式は未サポート",
- "Failed to open archive when installing app" : "アプリをインストール中にアーカイブファイルを開けませんでした。",
- "App does not provide an info.xml file" : "アプリにinfo.xmlファイルが入っていません",
- "App cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリがインストールできません。",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "署名が確認できませんでした。このアプリの開発者へ連絡し、管理画面を確認してください。",
- "App can't be installed because of not allowed code in the App" : "アプリで許可されないコードが入っているのが原因でアプリがインストールできません",
- "App can't be installed because it is not compatible with this version of the server" : "アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "info.xmlのバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
- "Logging" : "ログ",
- "Recommended" : "おすすめ",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
- "Storage not available" : "ストレージが利用できません"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。",
+ "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。",
+ "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました",
+ "%s via %s" : "%s に %s から",
+ "Cannot create \"data\" directory (%s)" : "\"data\" ディレクトリ (%s) を作成できません",
+ "Data directory (%s) is readable by other users" : "データディレクトリ (%s) は他のユーザーも閲覧することができます",
+ "Data directory (%s) must be an absolute path" : "データディレクトリ (%s) は、絶対パスである必要があります。",
+ "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js
index 0fcaa03b246..3e824b6376e 100644
--- a/lib/l10n/nb.js
+++ b/lib/l10n/nb.js
@@ -2,12 +2,12 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til oppsettsmappen%s.",
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.",
- "Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
- "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" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "Sample configuration detected" : "Eksempeloppsett oppdaget",
+ "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" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
"%1$s and %2$s" : "%1$s og %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s",
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med id: %s eksisterer ikke. Aktiver den i app-innstillingene eller kontakt en administrator.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
"File name is a reserved word" : "Filnavnet er et reservert ord",
"File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn",
"File name is too long" : "Filnavnet er for langt",
"Dot files are not allowed" : "Punktum-filer er ikke tillatt",
"Empty filename is not allowed" : "Tomt filnavn er ikke tillatt",
+ "This is an automatically sent email, please do not reply." : "Dette er en automatisk sendt e-post, ikke svar.",
+ "Help" : "Hjelp",
+ "Apps" : "Programmer",
+ "Personal" : "Personlig",
+ "Log out" : "Logg ut",
+ "Users" : "Brukere",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Tjenerinnstillinger",
"Sharing" : "Deling",
+ "Security" : "Sikkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Flere innstillinger",
"Tips & tricks" : "Tips og triks",
@@ -57,20 +65,18 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle-brukernavn og/eller passord er ikke gyldig",
"DB Error: \"%s\"" : "Databasefeil: \"%s\"",
"Offending command was: \"%s\"" : "Kommandoen som feilet: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.",
+ "You need to enter details of an existing account." : "Du må legge in detaljene til en eksisterende konto.",
"Offending command was: \"%s\", name: %s, password: %s" : "Kommando som feilet: \"%s\", navn: %s, passord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
- "%s shared »%s« with you" : "%s delte »%s« med deg",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi tjeneren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because you can not share with yourself" : "Deling av %s feilet fordi du ikke kan dele med deg selv",
@@ -82,7 +88,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
- "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
+ "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
@@ -91,17 +97,17 @@ OC.L10N.register(
"Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid",
"Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend",
- "Sharing backend %s not found" : "Delings-server %s ikke funnet",
- "Sharing backend for %s not found" : "Delings-server for %s ikke funnet",
+ "Sharing backend %s not found" : "Delings-tjener %s ikke funnet",
+ "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet",
"Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s feilet, fordi tillatelsene går utover tillatelsene som er gitt til %s",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s",
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-bakenden for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
"Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
"Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
- "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Expiration date is in the past" : "Utløpsdato er i fortid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Sunday" : "Søndag",
@@ -149,39 +155,34 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
- "Apps" : "Apper",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-'\"",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
- "Login canceled by app" : "Innlogging avbrutt av app",
"User disabled" : "Brukeren er deaktivert",
- "Help" : "Hjelp",
- "Personal" : "Personlig",
- "Users" : "Brukere",
- "Admin" : "Admin",
+ "Login canceled by app" : "Innlogging avbrutt av app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"No app name specified" : "Intet app-navn spesifisert",
"App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
"Authentication error" : "Autentikasjonsfeil",
- "Token expired. Please reload page." : "Symbol utløpt. Vennligst last inn siden på nytt.",
+ "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.",
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"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-tjeneren 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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren 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 webtjeneren 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 webtjeneren på nytt.",
+ "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 vev-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "Cannot create \"data\" directory" : "Kan ikke opprette \"data\"-mappe",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi vevtjeneren 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 vevtjeneren skrivetilgang til rotmappen%s.",
+ "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.",
+ "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 vevtjeneren på nytt.",
"Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
@@ -189,18 +190,18 @@ OC.L10N.register(
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
- "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.",
"PHP is apparently set up 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?",
- "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
- "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
+ "Please upgrade your database version" : "Oppgrader databaseversjonen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
- "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere",
- "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti",
- "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din",
- "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig",
+ "Your data directory is readable by other users" : "Din datamappe kan leses av andre brukere",
+ "Your data directory must be an absolute path" : "Din datamappe må være en absolutt sti",
+ "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i oppsettet ditt",
+ "Your data directory is invalid" : "Din datamappe er ugyldig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.",
"Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".",
"Storage unauthorized. %s" : "Lager uautorisert: %s",
@@ -208,26 +209,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Tilkoblingsfeil for lager. %s",
"Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig",
"Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
- "4-byte characters are not supported in file names" : "4-byte tegn er ikke tillatt i filnavn",
- "App directory already exists" : "App-mappe finnes allerede",
- "Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
- "Archive does not contain a directory named %s" : "Arkivet inneholder ikke en mappe med navn %s",
- "No source specified when installing app" : "Ingen kilde spesifisert ved installering av app",
- "No href specified when installing app from http" : "Ingen href spesifisert ved installering av app fra http",
- "No path specified when installing app from local file" : "Ingen sti spesifisert ved installering av app fra lokal fil",
- "Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
- "Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
- "App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
- "App cannot be installed because appinfo file cannot be read." : "App kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
- "App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
- "App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
- "Logging" : "Logging",
- "Recommended" : "Anbefalt",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
- "Storage not available" : "Lagringsplass ikke tilgjengelig"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
+ "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.",
+ "%s shared »%s« with you" : "%s delte »%s« med deg",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)",
+ "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere",
+ "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti",
+ "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json
index 5e745167303..246bea1e256 100644
--- a/lib/l10n/nb.json
+++ b/lib/l10n/nb.json
@@ -1,11 +1,11 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til oppsettsmappen%s.",
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.",
- "Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
- "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" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "Sample configuration detected" : "Eksempeloppsett oppdaget",
+ "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" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
"%1$s and %2$s" : "%1$s og %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s",
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med id: %s eksisterer ikke. Aktiver den i app-innstillingene eller kontakt en administrator.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
"File name is a reserved word" : "Filnavnet er et reservert ord",
"File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn",
"File name is too long" : "Filnavnet er for langt",
"Dot files are not allowed" : "Punktum-filer er ikke tillatt",
"Empty filename is not allowed" : "Tomt filnavn er ikke tillatt",
+ "This is an automatically sent email, please do not reply." : "Dette er en automatisk sendt e-post, ikke svar.",
+ "Help" : "Hjelp",
+ "Apps" : "Programmer",
+ "Personal" : "Personlig",
+ "Log out" : "Logg ut",
+ "Users" : "Brukere",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Tjenerinnstillinger",
"Sharing" : "Deling",
+ "Security" : "Sikkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Flere innstillinger",
"Tips & tricks" : "Tips og triks",
@@ -55,20 +63,18 @@
"Oracle username and/or password not valid" : "Oracle-brukernavn og/eller passord er ikke gyldig",
"DB Error: \"%s\"" : "Databasefeil: \"%s\"",
"Offending command was: \"%s\"" : "Kommandoen som feilet: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.",
+ "You need to enter details of an existing account." : "Du må legge in detaljene til en eksisterende konto.",
"Offending command was: \"%s\", name: %s, password: %s" : "Kommando som feilet: \"%s\", navn: %s, passord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
- "%s shared »%s« with you" : "%s delte »%s« med deg",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi tjeneren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because you can not share with yourself" : "Deling av %s feilet fordi du ikke kan dele med deg selv",
@@ -80,7 +86,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
- "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
+ "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
@@ -89,17 +95,17 @@
"Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid",
"Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend",
- "Sharing backend %s not found" : "Delings-server %s ikke funnet",
- "Sharing backend for %s not found" : "Delings-server for %s ikke funnet",
+ "Sharing backend %s not found" : "Delings-tjener %s ikke funnet",
+ "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet",
"Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s feilet, fordi tillatelsene går utover tillatelsene som er gitt til %s",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s",
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-bakenden for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
"Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
"Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
- "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Expiration date is in the past" : "Utløpsdato er i fortid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Sunday" : "Søndag",
@@ -147,39 +153,34 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
- "Apps" : "Apper",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-'\"",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
- "Login canceled by app" : "Innlogging avbrutt av app",
"User disabled" : "Brukeren er deaktivert",
- "Help" : "Hjelp",
- "Personal" : "Personlig",
- "Users" : "Brukere",
- "Admin" : "Admin",
+ "Login canceled by app" : "Innlogging avbrutt av app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"No app name specified" : "Intet app-navn spesifisert",
"App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
"Authentication error" : "Autentikasjonsfeil",
- "Token expired. Please reload page." : "Symbol utløpt. Vennligst last inn siden på nytt.",
+ "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.",
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"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-tjeneren 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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren 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 webtjeneren 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 webtjeneren på nytt.",
+ "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 vev-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "Cannot create \"data\" directory" : "Kan ikke opprette \"data\"-mappe",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi vevtjeneren 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 vevtjeneren skrivetilgang til rotmappen%s.",
+ "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.",
+ "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 vevtjeneren på nytt.",
"Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
@@ -187,18 +188,18 @@
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
- "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.",
"PHP is apparently set up 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?",
- "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
- "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
+ "Please upgrade your database version" : "Oppgrader databaseversjonen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
- "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere",
- "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti",
- "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din",
- "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig",
+ "Your data directory is readable by other users" : "Din datamappe kan leses av andre brukere",
+ "Your data directory must be an absolute path" : "Din datamappe må være en absolutt sti",
+ "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i oppsettet ditt",
+ "Your data directory is invalid" : "Din datamappe er ugyldig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.",
"Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".",
"Storage unauthorized. %s" : "Lager uautorisert: %s",
@@ -206,26 +207,13 @@
"Storage connection error. %s" : "Tilkoblingsfeil for lager. %s",
"Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig",
"Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
- "4-byte characters are not supported in file names" : "4-byte tegn er ikke tillatt i filnavn",
- "App directory already exists" : "App-mappe finnes allerede",
- "Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
- "Archive does not contain a directory named %s" : "Arkivet inneholder ikke en mappe med navn %s",
- "No source specified when installing app" : "Ingen kilde spesifisert ved installering av app",
- "No href specified when installing app from http" : "Ingen href spesifisert ved installering av app fra http",
- "No path specified when installing app from local file" : "Ingen sti spesifisert ved installering av app fra lokal fil",
- "Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
- "Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
- "App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
- "App cannot be installed because appinfo file cannot be read." : "App kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
- "App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
- "App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
- "Logging" : "Logging",
- "Recommended" : "Anbefalt",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
- "Storage not available" : "Lagringsplass ikke tilgjengelig"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
+ "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.",
+ "%s shared »%s« with you" : "%s delte »%s« med deg",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)",
+ "Data directory (%s) is readable by other users" : "Data-mappen (%s) kan leses av andre brukere",
+ "Data directory (%s) must be an absolute path" : "Datamappen (%s) må være en absolutt sti",
+ "Data directory (%s) is invalid" : "Data-mappe (%s) er ugyldig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 07569958fe6..dbefb2155d9 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
"seconds ago" : "seconden geleden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met ID: %s bestaat niet. Schakel die in binnen de app-instellingen of neem contact op met je beheerder.",
"File name is a reserved word" : "Bestandsnaam is een gereserveerd woord",
"File name contains at least one invalid character" : "De bestandsnaam bevat in ieder geval één verboden teken",
"File name is too long" : "De bestandsnaam is te lang",
"Dot files are not allowed" : "Punt bestanden zijn niet toegestaan",
"Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan",
+ "This is an automatically sent email, please do not reply." : "Dit is een automatisch gegenereerde e-mail, dus niet reageren.",
+ "Help" : "Help",
+ "Apps" : "Apps",
+ "Personal" : "Persoonlijk",
+ "Log out" : "Uitloggen",
+ "Users" : "Gebruikers",
+ "Admin" : "Beheerder",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Serverinstellingen",
"Sharing" : "Delen",
+ "Security" : "Beveiliging",
"Encryption" : "Versleuteling",
"Additional settings" : "Aanvullende instellingen",
"Tips & tricks" : "Tips & trucs",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle gebruikersnaam en/of wachtwoord ongeldig",
"DB Error: \"%s\"" : "DB Fout: \"%s\"",
"Offending command was: \"%s\"" : "Onjuiste commande was: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.",
+ "You need to enter details of an existing account." : "Geef de details van een bestaand account op.",
"Offending command was: \"%s\", name: %s, password: %s" : "Onjuiste commando was: \"%s\", naam: %s, wachtwoord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL gebruikersnaam en/of wachtwoord ongeldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op je eigen risico!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
"Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID",
- "%s shared »%s« with you" : "%s deelde »%s« met jou",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen",
"Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat",
"You are not allowed to share %s" : "Je bent niet bevoegd om %s te delen",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Apps",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Alleen de volgende tekens zijn toegestaan in een gebruikersnaam: \"a-z\", \"A-Z\", \"0-9\", en \"_.@-\"",
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"Username contains whitespace at the beginning or at the end" : "De gebruikersnaam bevat spaties aan het begin of eind",
+ "Username must not consist of dots only" : "De gebruikersnaam mag niet uit alleen puntjes bestaan",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
"The username is already being used" : "De gebruikersnaam bestaat al",
+ "User disabled" : "Gebruiker geblokkeerd",
"Login canceled by app" : "Inloggen geannuleerd door app",
- "User disabled" : "Gebruiker gedeactiveerd",
- "Help" : "Help",
- "Personal" : "Persoonlijk",
- "Users" : "Gebruikers",
- "Admin" : "Beheerder",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "App \"%s\" kan niet worden geïnstalleerd, omdat het appinfo bestand niet gelezen kan worden.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van de server.",
"No app name specified" : "Geen app naam opgegeven.",
@@ -169,7 +171,7 @@ OC.L10N.register(
"a safe home for all your data" : "een veilige plek voor al je gegevens",
"File is currently busy, please try again later" : "Bestandsverwerking bezig, probeer het later opnieuw",
"Can't read file" : "Kan bestand niet lezen",
- "Application is not enabled" : "De applicatie is niet actief",
+ "Application is not enabled" : "De applicatie is niet ingeschakeld",
"Authentication error" : "Authenticatie fout",
"Token expired. Please reload page." : "Token verlopen. Herlaad de pagina.",
"Unknown user" : "Onbekende gebruiker",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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",
+ "Cannot create \"data\" directory" : "\"data\" map kan niet worden aangemaakt",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> 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",
@@ -187,7 +189,7 @@ OC.L10N.register(
"PHP setting \"%s\" is not set to \"%s\"." : "PHP instelling \"%s\" staat niet op \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Het aanpassen van deze instelling in php.ini zorgt ervoor dat Nextcloud weer start",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload is ingesteld op \"%s\" in plaats van op de verwachte waarde \"0\"",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel <code>mbstring.func_overload</code> in op <code>0</code> in uw php.ini",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel je in php.ini <code>mbstring.func_overload</code> in op <code>0</code>",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "De laagste toegestane libxml2 versie is 2.7.0. Momenteel is %s is geïnstalleerd.",
"To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet je de libxml2 versie bijwerken en je webserver herstarten.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist",
"Please upgrade your database version" : "Werk je databaseversie bij",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.",
- "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers",
- "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben",
+ "Your data directory is readable by other users" : "Je data map is leesbaar voor andere gebruikers",
+ "Your data directory must be an absolute path" : "Je data map moet een absoluut pad hebben",
"Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie",
- "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig",
+ "Your data directory is invalid" : "Je datamap is ongeldig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.",
"Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".",
"Storage unauthorized. %s" : "Opslag niet toegestaan. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Opslagverbindingsfout. %s",
"Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar",
"Storage connection timeout. %s" : "Opslagverbinding time-out. %s",
- "4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund",
- "App directory already exists" : "App directory bestaat al",
- "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
- "Archive does not contain a directory named %s" : "Archief bevat geen directory genaamd %s",
- "No source specified when installing app" : "Geen bron opgegeven bij installatie van de app",
- "No href specified when installing app from http" : "Geen href opgegeven bij installeren van de app vanaf http",
- "No path specified when installing app from local file" : "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand",
- "Archives of type %s are not supported" : "Archiefbestanden van type %s niet ondersteund",
- "Failed to open archive when installing app" : "Kon archiefbestand bij installatie van de app niet openen",
- "App does not provide an info.xml file" : "De app heeft geen info.xml bestand",
- "App cannot be installed because appinfo file cannot be read." : "App kan niet worden geïnstalleerd, omdat appinfo bestand niet gelezen kan worden.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Handtekening kon niet worden geverifieerd. Nee contact op met de ontwikkelaar van de app en check je beheerscherm.",
- "App can't be installed because of not allowed code in the App" : "De app kan niet worden geïnstalleerd wegens onjuiste code in de app",
- "App can't be installed because it is not compatible with this version of the server" : "De app kan niet worden geïnstalleerd, omdat die niet compatible is met deze versie van de server",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstalleerd, omdat het de <shipped>true</shipped> markering bevat die niet is toegestaan voor niet gepubliceerde apps",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml niet dezelfde is als de versie zoals die in de app store staat vermeld",
- "Logging" : "Logging",
- "Recommended" : "Aanbevolen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
- "Storage not available" : "Opslag niet beschikbaar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.",
+ "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.",
+ "%s shared »%s« with you" : "%s deelde »%s« met jou",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken",
+ "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers",
+ "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben",
+ "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 3478dcdfa98..96716d0cea9 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
"seconds ago" : "seconden geleden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met ID: %s bestaat niet. Schakel die in binnen de app-instellingen of neem contact op met je beheerder.",
"File name is a reserved word" : "Bestandsnaam is een gereserveerd woord",
"File name contains at least one invalid character" : "De bestandsnaam bevat in ieder geval één verboden teken",
"File name is too long" : "De bestandsnaam is te lang",
"Dot files are not allowed" : "Punt bestanden zijn niet toegestaan",
"Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan",
+ "This is an automatically sent email, please do not reply." : "Dit is een automatisch gegenereerde e-mail, dus niet reageren.",
+ "Help" : "Help",
+ "Apps" : "Apps",
+ "Personal" : "Persoonlijk",
+ "Log out" : "Uitloggen",
+ "Users" : "Gebruikers",
+ "Admin" : "Beheerder",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Serverinstellingen",
"Sharing" : "Delen",
+ "Security" : "Beveiliging",
"Encryption" : "Versleuteling",
"Additional settings" : "Aanvullende instellingen",
"Tips & tricks" : "Tips & trucs",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Oracle gebruikersnaam en/of wachtwoord ongeldig",
"DB Error: \"%s\"" : "DB Fout: \"%s\"",
"Offending command was: \"%s\"" : "Onjuiste commande was: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.",
+ "You need to enter details of an existing account." : "Geef de details van een bestaand account op.",
"Offending command was: \"%s\", name: %s, password: %s" : "Onjuiste commando was: \"%s\", naam: %s, wachtwoord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL gebruikersnaam en/of wachtwoord ongeldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op je eigen risico!",
@@ -66,8 +74,6 @@
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
"Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID",
- "%s shared »%s« with you" : "%s deelde »%s« met jou",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen",
"Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat",
"You are not allowed to share %s" : "Je bent niet bevoegd om %s te delen",
@@ -147,18 +153,14 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Apps",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Alleen de volgende tekens zijn toegestaan in een gebruikersnaam: \"a-z\", \"A-Z\", \"0-9\", en \"_.@-\"",
"A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven",
"Username contains whitespace at the beginning or at the end" : "De gebruikersnaam bevat spaties aan het begin of eind",
+ "Username must not consist of dots only" : "De gebruikersnaam mag niet uit alleen puntjes bestaan",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
"The username is already being used" : "De gebruikersnaam bestaat al",
+ "User disabled" : "Gebruiker geblokkeerd",
"Login canceled by app" : "Inloggen geannuleerd door app",
- "User disabled" : "Gebruiker gedeactiveerd",
- "Help" : "Help",
- "Personal" : "Persoonlijk",
- "Users" : "Gebruikers",
- "Admin" : "Beheerder",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "App \"%s\" kan niet worden geïnstalleerd, omdat het appinfo bestand niet gelezen kan worden.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van de server.",
"No app name specified" : "Geen app naam opgegeven.",
@@ -167,7 +169,7 @@
"a safe home for all your data" : "een veilige plek voor al je gegevens",
"File is currently busy, please try again later" : "Bestandsverwerking bezig, probeer het later opnieuw",
"Can't read file" : "Kan bestand niet lezen",
- "Application is not enabled" : "De applicatie is niet actief",
+ "Application is not enabled" : "De applicatie is niet ingeschakeld",
"Authentication error" : "Authenticatie fout",
"Token expired. Please reload page." : "Token verlopen. Herlaad de pagina.",
"Unknown user" : "Onbekende gebruiker",
@@ -175,7 +177,7 @@
"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",
+ "Cannot create \"data\" directory" : "\"data\" map kan niet worden aangemaakt",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dit kan worden hersteld door <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> 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",
@@ -185,7 +187,7 @@
"PHP setting \"%s\" is not set to \"%s\"." : "PHP instelling \"%s\" staat niet op \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Het aanpassen van deze instelling in php.ini zorgt ervoor dat Nextcloud weer start",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload is ingesteld op \"%s\" in plaats van op de verwachte waarde \"0\"",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel <code>mbstring.func_overload</code> in op <code>0</code> in uw php.ini",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel je in php.ini <code>mbstring.func_overload</code> in op <code>0</code>",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "De laagste toegestane libxml2 versie is 2.7.0. Momenteel is %s is geïnstalleerd.",
"To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet je de libxml2 versie bijwerken en je webserver herstarten.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist",
"Please upgrade your database version" : "Werk je databaseversie bij",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.",
- "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers",
- "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben",
+ "Your data directory is readable by other users" : "Je data map is leesbaar voor andere gebruikers",
+ "Your data directory must be an absolute path" : "Je data map moet een absoluut pad hebben",
"Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie",
- "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig",
+ "Your data directory is invalid" : "Je datamap is ongeldig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.",
"Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".",
"Storage unauthorized. %s" : "Opslag niet toegestaan. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Opslagverbindingsfout. %s",
"Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar",
"Storage connection timeout. %s" : "Opslagverbinding time-out. %s",
- "4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund",
- "App directory already exists" : "App directory bestaat al",
- "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
- "Archive does not contain a directory named %s" : "Archief bevat geen directory genaamd %s",
- "No source specified when installing app" : "Geen bron opgegeven bij installatie van de app",
- "No href specified when installing app from http" : "Geen href opgegeven bij installeren van de app vanaf http",
- "No path specified when installing app from local file" : "Geen pad opgegeven bij installeren van de app vanaf een lokaal bestand",
- "Archives of type %s are not supported" : "Archiefbestanden van type %s niet ondersteund",
- "Failed to open archive when installing app" : "Kon archiefbestand bij installatie van de app niet openen",
- "App does not provide an info.xml file" : "De app heeft geen info.xml bestand",
- "App cannot be installed because appinfo file cannot be read." : "App kan niet worden geïnstalleerd, omdat appinfo bestand niet gelezen kan worden.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Handtekening kon niet worden geverifieerd. Nee contact op met de ontwikkelaar van de app en check je beheerscherm.",
- "App can't be installed because of not allowed code in the App" : "De app kan niet worden geïnstalleerd wegens onjuiste code in de app",
- "App can't be installed because it is not compatible with this version of the server" : "De app kan niet worden geïnstalleerd, omdat die niet compatible is met deze versie van de server",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstalleerd, omdat het de <shipped>true</shipped> markering bevat die niet is toegestaan voor niet gepubliceerde apps",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml niet dezelfde is als de versie zoals die in de app store staat vermeld",
- "Logging" : "Logging",
- "Recommended" : "Aanbevolen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
- "Storage not available" : "Opslag niet beschikbaar"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.",
+ "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.",
+ "%s shared »%s« with you" : "%s deelde »%s« met jou",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan de \"data\" directory (%s) niet aanmaken",
+ "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers",
+ "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben",
+ "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index b7bd5ab745d..d690d655d60 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu","%n godzin temu"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł o ID: %s nie istnieje. Proszę włącz go w ustawieniach aplikacji lub skontaktuj się z administratorem.",
"File name is a reserved word" : "Nazwa pliku jest zarezerwowana",
"File name contains at least one invalid character" : "Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak",
"File name is too long" : "Nazwa pliku zbyt długa",
"Dot files are not allowed" : "Pliki z kropką są nie dozwolone",
"Empty filename is not allowed" : "Pusta nazwa nie jest dozwolona.",
+ "This is an automatically sent email, please do not reply." : "To jest automatycznie wysłany e-mail, proszę nie odpowiadać na niego.",
+ "Help" : "Pomoc",
+ "Apps" : "Aplikacje",
+ "Personal" : "Osobiste",
+ "Log out" : "Wyloguj",
+ "Users" : "Użytkownicy",
+ "Admin" : "Administracja",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Ustawienia serwera",
"Sharing" : "Udostępnianie",
+ "Security" : "Bepieczeństwo",
"Encryption" : "Szyfrowanie",
"Additional settings" : "Ustawienia dodatkowe",
"Tips & tricks" : "Porady i wskazówki",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle: Nazwa użytkownika i/lub hasło jest niepoprawne",
"DB Error: \"%s\"" : "Błąd DB: \"%s\"",
"Offending command was: \"%s\"" : "Niepoprawna komenda: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.",
+ "You need to enter details of an existing account." : "Musisz wprowadzić szczegóły istniejącego konta.",
"Offending command was: \"%s\", name: %s, password: %s" : "Niepoprawne polecania: \"%s\", nazwa: %s, hasło: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL: Nazwa użytkownika i/lub hasło jest niepoprawne",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Ustaw hasło administratora.",
"Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s",
"Invalid Federated Cloud ID" : "Nieprawidłowy ID Stowarzyszonej Chmury",
- "%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
- "%s via %s" : "%s przez %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Współdzielenie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.",
"Sharing %s failed, because the file does not exist" : "Wspóldzielenie %s nie powiodło się. ponieważ plik nie istnieje",
"You are not allowed to share %s" : "Nie masz uprawnień aby udostępnić %s",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Paź.",
"Nov." : "Lis.",
"Dec." : "Gru.",
- "Apps" : "Aplikacje",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "W nazwie użytkownika dozwolone są tylko następujące znaki : \"a-z\", \"A-Z\", \"0-9\" i \"_.@-'\"",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Username contains whitespace at the beginning or at the end" : "Nazwa użytkownika zawiera spację na początku albo na końcu",
+ "Username must not consist of dots only" : "Nazwa użytkownika nie może się składać tylko z kropek",
"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",
- "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"User disabled" : "Użytkownik zablokowany",
- "Help" : "Pomoc",
- "Personal" : "Osobiste",
- "Users" : "Użytkownicy",
- "Admin" : "Administracja",
+ "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ plik informacyjny nie może zostać odczytany.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ jest niekompatybilna z obecną wersją serwera.",
"No app name specified" : "Nie określono nazwy aplikacji",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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)",
+ "Cannot create \"data\" directory" : "Nie mozna utworzyć katalogu \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Z reguły to może zostać naprawione <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">poprzez danie serwerowi web praw zapisu do katalogu domowego aplikacji</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",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9",
"Please upgrade your database version" : "Uaktualnij wersję bazy danych",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Zmień uprawnienia na 0770, żeby ukryć zawartość katalogu przed innymi użytkownikami.",
- "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników",
- "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną",
+ "Your data directory is readable by other users" : "Twój katalog z danymi mogą czytać inni użytkownicy",
+ "Your data directory must be an absolute path" : "Twój katalog z danymi musi być ścieżką absolutną",
"Check the value of \"datadirectory\" in your configuration" : "Sprawdź wartość \"datadirectory\" w swojej konfiguracji",
- "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy",
+ "Your data directory is invalid" : "Twój katalog z danymi jest nieprawidłowy",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sprawdź, czy katalog danych zawiera plik \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nie można uzyskać blokady typu %d na \"%s\".",
"Storage unauthorized. %s" : "Magazyn nieautoryzowany. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Błąd połączenia magazynu. %s",
"Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny",
"Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s",
- "4-byte characters are not supported in file names" : "Znaki 4-bajtowe są niedozwolone w nazwach plików",
- "App directory already exists" : "Katalog aplikacji już isnieje",
- "Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
- "Archive does not contain a directory named %s" : "Archiwum nie zawiera ścieżki o nazwie %s",
- "No source specified when installing app" : "Nie określono źródła podczas instalacji aplikacji",
- "No href specified when installing app from http" : "Nie określono linku skąd aplikacja ma być zainstalowana",
- "No path specified when installing app from local file" : "Nie określono lokalnego pliku z którego miała być instalowana aplikacja",
- "Archives of type %s are not supported" : "Typ archiwum %s nie jest obsługiwany",
- "Failed to open archive when installing app" : "Nie udało się otworzyć archiwum podczas instalacji aplikacji",
- "App does not provide an info.xml file" : "Aplikacja nie posiada pliku info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikacja nie może zostać zainstalowana, ponieważ plik z informacjami o aplikacji nie może zostać odczytany.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Sygnatura nie mogła zostać sprawdzona. Proszę o skontaktowanie się z twórcą aplikacji i sprawdzenie panelu administratora.",
- "App can't be installed because of not allowed code in the App" : "Aplikacja nie może być zainstalowany ponieważ nie dopuszcza kod w aplikacji",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikacja nie może zostać zainstalowane, ponieważ jest niekompatybilna z tą wersją serwera",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacja nie może być zainstalowana ponieważ true tag nie jest <shipped>true</shipped> , co nie jest dozwolone dla aplikacji nie wysłanych",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacja nie może zostać zainstalowana, ponieważ wersja w info.xml nie jest taka sama jak wersja raportowana ze sklepu aplikacji",
- "Logging" : "Logowanie",
- "Recommended" : "Polecane",
- "Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Uruchomienie serwera Nextcloud na platformie Microsoft Windows nie jest wspierane. Jeśli nie masz możliwości migracji samego systemu sugerujemy, żebyś użył wirtualnego serwera z Linuksem.",
- "Storage not available" : "Pamięć nie dostępna"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
+ "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.",
+ "%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
+ "%s via %s" : "%s przez %s",
+ "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników",
+ "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną",
+ "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index a2c5545dd2f..a46ec2da2cf 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu","%n godzin temu"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł o ID: %s nie istnieje. Proszę włącz go w ustawieniach aplikacji lub skontaktuj się z administratorem.",
"File name is a reserved word" : "Nazwa pliku jest zarezerwowana",
"File name contains at least one invalid character" : "Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak",
"File name is too long" : "Nazwa pliku zbyt długa",
"Dot files are not allowed" : "Pliki z kropką są nie dozwolone",
"Empty filename is not allowed" : "Pusta nazwa nie jest dozwolona.",
+ "This is an automatically sent email, please do not reply." : "To jest automatycznie wysłany e-mail, proszę nie odpowiadać na niego.",
+ "Help" : "Pomoc",
+ "Apps" : "Aplikacje",
+ "Personal" : "Osobiste",
+ "Log out" : "Wyloguj",
+ "Users" : "Użytkownicy",
+ "Admin" : "Administracja",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Ustawienia serwera",
"Sharing" : "Udostępnianie",
+ "Security" : "Bepieczeństwo",
"Encryption" : "Szyfrowanie",
"Additional settings" : "Ustawienia dodatkowe",
"Tips & tricks" : "Porady i wskazówki",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Oracle: Nazwa użytkownika i/lub hasło jest niepoprawne",
"DB Error: \"%s\"" : "Błąd DB: \"%s\"",
"Offending command was: \"%s\"" : "Niepoprawna komenda: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.",
+ "You need to enter details of an existing account." : "Musisz wprowadzić szczegóły istniejącego konta.",
"Offending command was: \"%s\", name: %s, password: %s" : "Niepoprawne polecania: \"%s\", nazwa: %s, hasło: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL: Nazwa użytkownika i/lub hasło jest niepoprawne",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
@@ -66,8 +74,6 @@
"Set an admin password." : "Ustaw hasło administratora.",
"Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s",
"Invalid Federated Cloud ID" : "Nieprawidłowy ID Stowarzyszonej Chmury",
- "%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
- "%s via %s" : "%s przez %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Współdzielenie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.",
"Sharing %s failed, because the file does not exist" : "Wspóldzielenie %s nie powiodło się. ponieważ plik nie istnieje",
"You are not allowed to share %s" : "Nie masz uprawnień aby udostępnić %s",
@@ -147,18 +153,14 @@
"Oct." : "Paź.",
"Nov." : "Lis.",
"Dec." : "Gru.",
- "Apps" : "Aplikacje",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "W nazwie użytkownika dozwolone są tylko następujące znaki : \"a-z\", \"A-Z\", \"0-9\" i \"_.@-'\"",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Username contains whitespace at the beginning or at the end" : "Nazwa użytkownika zawiera spację na początku albo na końcu",
+ "Username must not consist of dots only" : "Nazwa użytkownika nie może się składać tylko z kropek",
"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",
- "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"User disabled" : "Użytkownik zablokowany",
- "Help" : "Pomoc",
- "Personal" : "Osobiste",
- "Users" : "Użytkownicy",
- "Admin" : "Administracja",
+ "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ plik informacyjny nie może zostać odczytany.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ jest niekompatybilna z obecną wersją serwera.",
"No app name specified" : "Nie określono nazwy aplikacji",
@@ -175,7 +177,7 @@
"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)",
+ "Cannot create \"data\" directory" : "Nie mozna utworzyć katalogu \"data\"",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Z reguły to może zostać naprawione <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">poprzez danie serwerowi web praw zapisu do katalogu domowego aplikacji</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",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "Wymagany PostgreSQL >= 9",
"Please upgrade your database version" : "Uaktualnij wersję bazy danych",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Zmień uprawnienia na 0770, żeby ukryć zawartość katalogu przed innymi użytkownikami.",
- "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników",
- "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną",
+ "Your data directory is readable by other users" : "Twój katalog z danymi mogą czytać inni użytkownicy",
+ "Your data directory must be an absolute path" : "Twój katalog z danymi musi być ścieżką absolutną",
"Check the value of \"datadirectory\" in your configuration" : "Sprawdź wartość \"datadirectory\" w swojej konfiguracji",
- "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy",
+ "Your data directory is invalid" : "Twój katalog z danymi jest nieprawidłowy",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sprawdź, czy katalog danych zawiera plik \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nie można uzyskać blokady typu %d na \"%s\".",
"Storage unauthorized. %s" : "Magazyn nieautoryzowany. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Błąd połączenia magazynu. %s",
"Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny",
"Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s",
- "4-byte characters are not supported in file names" : "Znaki 4-bajtowe są niedozwolone w nazwach plików",
- "App directory already exists" : "Katalog aplikacji już isnieje",
- "Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
- "Archive does not contain a directory named %s" : "Archiwum nie zawiera ścieżki o nazwie %s",
- "No source specified when installing app" : "Nie określono źródła podczas instalacji aplikacji",
- "No href specified when installing app from http" : "Nie określono linku skąd aplikacja ma być zainstalowana",
- "No path specified when installing app from local file" : "Nie określono lokalnego pliku z którego miała być instalowana aplikacja",
- "Archives of type %s are not supported" : "Typ archiwum %s nie jest obsługiwany",
- "Failed to open archive when installing app" : "Nie udało się otworzyć archiwum podczas instalacji aplikacji",
- "App does not provide an info.xml file" : "Aplikacja nie posiada pliku info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikacja nie może zostać zainstalowana, ponieważ plik z informacjami o aplikacji nie może zostać odczytany.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Sygnatura nie mogła zostać sprawdzona. Proszę o skontaktowanie się z twórcą aplikacji i sprawdzenie panelu administratora.",
- "App can't be installed because of not allowed code in the App" : "Aplikacja nie może być zainstalowany ponieważ nie dopuszcza kod w aplikacji",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikacja nie może zostać zainstalowane, ponieważ jest niekompatybilna z tą wersją serwera",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacja nie może być zainstalowana ponieważ true tag nie jest <shipped>true</shipped> , co nie jest dozwolone dla aplikacji nie wysłanych",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacja nie może zostać zainstalowana, ponieważ wersja w info.xml nie jest taka sama jak wersja raportowana ze sklepu aplikacji",
- "Logging" : "Logowanie",
- "Recommended" : "Polecane",
- "Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Uruchomienie serwera Nextcloud na platformie Microsoft Windows nie jest wspierane. Jeśli nie masz możliwości migracji samego systemu sugerujemy, żebyś użył wirtualnego serwera z Linuksem.",
- "Storage not available" : "Pamięć nie dostępna"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
+ "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.",
+ "%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
+ "%s via %s" : "%s przez %s",
+ "Cannot create \"data\" directory (%s)" : "Nie można utworzyć katalogu \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Katalog danych (%s) jest możliwy do odczytania przez innych użytkowników",
+ "Data directory (%s) must be an absolute path" : "Katalog danych (%s) musi być ścieżką absolutną",
+ "Data directory (%s) is invalid" : "Katalog danych (%s) jest nieprawidłowy"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 5a55bd7a02b..4f2dd051538 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -4,25 +4,25 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Não é possível gravar no diretório \"config\"!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Isso geralmente pode ser corrigido dando o acesso de gravação ao webserver para o diretório de configuração",
"See %s" : "Ver %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
- "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do app %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
- "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 exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido por %s dar a permissão de gravação ao servidor web para o diretório de configuração %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do aplicativo %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
+ "Sample configuration detected" : "Configuração de exemplo 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 exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor leia a documentação antes de realizar mudanças no config.php",
"%1$s and %2$s" : "%1$s e %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP %s or higher is required." : "PHP %s ou superior é requerido.",
"PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
"%sbit or higher PHP required." : "%sbit ou maior é requerido.",
- "Following databases are supported: %s" : "Following databases are supported: %s",
- "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
+ "Following databases are supported: %s" : "Os seguintes bancos de dados são suportados: %s",
+ "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pôde ser 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." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
"Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
"Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
- "Server version %s or higher is required." : "É requerido um Servidor da versão %s ou superior.",
- "Server version %s or lower is required." : "É requerido um Servidor da versão %s ou anterior.",
+ "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.",
+ "Server version %s or lower is required." : "É requerido um servidor da versão %s ou abaixo.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"Avatar image is not square" : "A imagem do avatar não é quadrada",
@@ -36,81 +36,87 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["há %n hora atrás","há %n horas atrás"],
"_%n minute ago_::_%n minutes ago_" : ["há %n minuto atrás","há %n minutos atrás"],
"seconds ago" : "segundos atrás",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo com id: %s não existe. Ative-o em suas configurações de aplicativos ou contate o administrador.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com a ID: %s não existe. Por favor, habilite-o nas configurações de seu aplicativo ou contacte o administrador.",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
- "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caracter inválido",
"File name is too long" : "O nome do arquivo é muito longo",
- "Dot files are not allowed" : "Dot arquivos não são permitidos",
- "Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
+ "Dot files are not allowed" : "Arquivos Dot não são permitidos",
+ "Empty filename is not allowed" : "Nome vazio para arquivo não é permitido.",
+ "This is an automatically sent email, please do not reply." : "Este é um email enviado automaticamente. Por favor, não responda.",
+ "Help" : "Ajuda",
+ "Apps" : "Aplicativos",
+ "Personal" : "Pessoal",
+ "Log out" : "Saída",
+ "Users" : "Usuários",
+ "Admin" : "Admininistrador",
"APCu" : "APCu",
"Redis" : "Redis",
- "Server settings" : "Configurações de servidor",
+ "Server settings" : "Configurações do servidor",
"Sharing" : "Compartilhamento",
+ "Security" : "Segurança",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dias & truques",
+ "Tips & tricks" : "Dicas & truques",
"%s enter the database username and name." : "%s insira o nome de usuário e o nome do banco de dados.",
"%s enter the database username." : "%s insira o nome de usuário do banco de dados.",
"%s enter the database name." : "%s insira o nome do banco de dados.",
"%s you may not use dots in the database name" : "%s você não pode usar pontos no nome do banco de dados",
- "Oracle connection could not be established" : "Conexão Oracle não pode ser estabelecida",
- "Oracle username and/or password not valid" : "Nome de usuário e/ou senha Oracle inválido(s)",
+ "Oracle connection could not be established" : "Conexão Oracle não pôde ser estabelecida",
+ "Oracle username and/or password not valid" : "Nome de usuário e/ou senha Oracle inválidos",
"DB Error: \"%s\"" : "Erro no BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando ofensivo era: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.",
+ "You need to enter details of an existing account." : "Você necessita entrar detalhes de uma conta existente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando ofensivo era: \"%s\", nome: %s, senha: %s",
- "PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválido(s)",
+ "PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválidos",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
- "For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para obter melhores resultados, por favor considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32 bits e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
"Set an admin username." : "Defina um nome do usuário administrador.",
- "Set an admin password." : "Defina uma senha de administrador.",
+ "Set an admin password." : "Defina uma senha para o administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
- "Invalid Federated Cloud ID" : "Associação Inválida de Nuvem ID",
- "%s shared »%s« with you" : "%s compartilhou »%s« com você",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
- "Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou, porque o arquivo não existe",
+ "Invalid Federated Cloud ID" : "ID inválida de Nuvem Federada",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou pois o processo interno não permite ações de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou pois o arquivo não existe",
"You are not allowed to share %s" : "Você não tem permissão para compartilhar %s",
- "Sharing %s failed, because you can not share with yourself" : "O compartilhamento %s falhou, porque você não pode compartilhar com você mesmo",
- "Sharing %s failed, because the user %s does not exist" : "Compartilhamento %s falhou, porque o usuário %s não existe",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartilhamento %s falhou, porque o usuário %s não é membro de nenhum grupo que o usuário %s pertença",
- "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este ítem já está compartilhado com %s",
- "Sharing %s failed, because this item is already shared with user %s" : "Compartilhamento de %s falhou, porque esse item já é compartilhada com o usuário %s",
- "Sharing %s failed, because the group %s does not exist" : "Compartilhamento %s falhou, porque o grupo %s não existe",
- "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
+ "Sharing %s failed, because you can not share with yourself" : "O compartilhamento %s falhou pois você não pode compartilhar com você mesmo",
+ "Sharing %s failed, because the user %s does not exist" : "O compartilhamento %s falhou pois o usuário %s não existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "O compartilhamento %s falhou pois o usuário %s não é membro de nenhum grupo que o usuário %s pertença",
+ "Sharing %s failed, because this item is already shared with %s" : "O compartilhamento %s falhou pois este ítem já está compartilhado com %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "O compartilhamento de %s falhou pois esse item já é compartilhada com o usuário %s",
+ "Sharing %s failed, because the group %s does not exist" : "O compartilhamento %s falhou pois o grupo %s não existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "O compartilhamento %s falhou, pois %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
- "Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Sharing %s failed, because sharing with links is not allowed" : "O compartilhamento %s falhou pois compartilhamento com links não é permitido",
"Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
- "Share type %s is not valid for %s" : "Tipo de compartilhamento %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",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
- "Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de validade. Data de expiração está no passado",
- "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Ações são obrigados a ter uma data de expiração.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhando backend %s deve implementar a interface OCP\\Share_Backend",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou pois não foi possível encontrar %s. Talvez o servidor esteja inacessível.",
+ "Share type %s is not valid for %s" : "O tipo de compartilhamento %s não é válido para %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "A definição de permissões para %s falhou pois as permissões excedem as permissões concedidas a %s",
+ "Setting permissions for %s failed, because the item was not found" : "A definição de permissões para %s falhou pois o item não foi encontrado",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Os compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
+ "Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de expiração pois ela está no passado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Compartilhamentos devem ter uma data de expiração.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhamento backend %s deve implementar a interface OCP\\Share_Backend",
"Sharing backend %s not found" : "Compartilhamento backend %s não encontrado",
- "Sharing backend for %s not found" : "Compartilhamento backend para %s não encontrado",
- "Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou, porque o usuário %s é o compartilhador original",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou, porque as permissões excedem as permissões concedidas a %s",
- "Sharing %s failed, because resharing is not allowed" : "Compartilhamento %s falhou, porque recompartilhamentos não são permitidos",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
+ "Sharing backend for %s not found" : "Compartilhamento backend para %s não foi encontrado",
+ "Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou pois o usuário %s é o compartilhador original",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou pois as permissões excedem as permissões concedidas a %s",
+ "Sharing %s failed, because resharing is not allowed" : "O compartilhamento %s falhou pois recompartilhamentos não são permitidos",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "O compartilhamento %s falhou, pois a infraestrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
+ "Sharing %s failed, because the file could not be found in the file cache" : "O compartilhamento %s falhou pois o arquivo não pôde ser encontrado no cache de arquivos",
"Cannot increase permissions of %s" : "Não é possível aumentar as permissões de %s",
"Files can't be shared with delete permissions" : "Os arquivos não podem ser compartilhadas com permissões de exclusão",
"Files can't be shared with create permissions" : "Os arquivos não podem ser compartilhados com permissões de criação",
- "Expiration date is in the past" : "Data de validade está ultrapassada",
- "Cannot set expiration date more than %s days in the future" : "Não é possível definir a data de validade mais de %s dias no futuro",
- "Could not find category \"%s\"" : "Impossível localizar categoria \"%s\"",
+ "Expiration date is in the past" : "Data de expiração está no passado",
+ "Cannot set expiration date more than %s days in the future" : "Não é possível definir a data de expiração para mais que %s dias no futuro",
+ "Could not find category \"%s\"" : "Impossível localizar a categoria \"%s\"",
"Sunday" : "Domingo",
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
"Wednesday" : "Quarta-feira",
- "Thursday" : "Quita-feira",
+ "Thursday" : "Quinta-feira",
"Friday" : "Sexta-feira",
- "Saturday" : "Sabado",
+ "Saturday" : "Sábado",
"Sun." : "Dom.",
"Mon." : "Seg.",
"Tue." : "Ter.",
@@ -149,85 +155,68 @@ OC.L10N.register(
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Aplicações",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Somente os seguintes caracteres são permitidos em um nome de usuário: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
- "A valid username must be provided" : "Forneça um nome de usuário válido",
+ "A valid username must be provided" : "Um nome de usuário válido deve ser fornecido",
"Username contains whitespace at the beginning or at the end" : "O nome de usuário contém espaço em branco no início ou no fim",
- "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",
- "Login canceled by app" : "Login cancelado pelo aplicativo",
+ "Username must not consist of dots only" : "Nome do usuário não pode consistir de pontos somente",
+ "A valid password must be provided" : "Uma senha válida deve ser fornecida",
+ "The username is already being used" : "Este nome de usuário já está em uso",
"User disabled" : "Usuário desativado",
- "Help" : "Ajuda",
- "Personal" : "Pessoal",
- "Users" : "Usuários",
- "Admin" : "Admin",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "O App \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
+ "Login canceled by app" : "Login cancelado pelo aplicativo",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado pois o arquivo appinfo não pôde ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
- "App '%s' could not be installed!" : "O aplicativo '%s' pode não estar instalado!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
+ "App '%s' could not be installed!" : "O aplicativo '%s' não pôde ser instalado!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "O aplicativo \"%s\" não pode ser instalado pois as seguintes dependências não foram cumpridas: %s",
"a safe home for all your data" : "um local seguro para todos os seus dados",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
"Can't read file" : "Não é possível ler arquivo",
- "Application is not enabled" : "Aplicação não está habilitada",
+ "Application is not enabled" : "O aplicativo não está habilitado",
"Authentication error" : "Erro de autenticação",
- "Token expired. Please reload page." : "Token expirou. Por favor recarregue a página.",
+ "Token expired. Please reload page." : "O token expirou. Por favor recarregue a página.",
"Unknown user" : "Usuário desconhecido",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql ou postgresql) instalado.",
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esta geralmente pode ser fixado por <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dando permissão de gravação ao diretório raiz do servidor</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",
+ "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 por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.",
+ "Cannot create \"data\" directory" : "Não foi possível criar o diretório de dados",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no 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 por %sdando permissão de escrita ao servidor web para o diretório raiz %s",
+ "Setting locale to %s failed" : "Falha ao configurar localização 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.",
+ "Please ask your server administrator to install the module." : "Por favor, peça ao administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Configurações \"%s\" PHP não está configurado para \"%s\".",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
- "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" em vez do valor esperado \"0\"",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" ao invés do valor esperado \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corrigir esse problema defina <code>mbstring.func_overload</code> para <code>0</code> em seu php.ini",
- "libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a mínima versão requerida. Atualmente a versão %s está instalada.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a versão mínima requerida. Atualmente a versão %s está instalada.",
"To fix this issue update your libxml2 version and restart your web server." : "Para corrigir este problema, atualize a versão da sua libxml2 e reinicie seu servidor web.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está, aparentemente, configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
- "Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor peça ao administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
- "Please upgrade your database version" : "Por favor, atualize sua versão do banco de dados",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor, altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
- "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
- "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
- "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração",
- "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido",
+ "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser lido por outros usuários.",
+ "Your data directory is readable by other users" : "O diretório de dados está legível para outros usuários",
+ "Your data directory must be an absolute path" : "O diretório de dados deve ser um caminho absoluto",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"datadirectory\" na sua configuração",
+ "Your data directory is invalid" : "Seu diretório de dados é inválido",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor, verifique se o diretório de dados contém um arquivo \".ocdata\" em sua raiz.",
"Could not obtain lock type %d on \"%s\"." : "Não foi possível obter tipo de bloqueio %d em \"%s\".",
"Storage unauthorized. %s" : "Armazenamento não autorizado. %s",
- "Storage incomplete configuration. %s" : "Incompleta configuração de armazenamento. %s",
+ "Storage incomplete configuration. %s" : "Configuração incompleta do armazenamento. %s",
"Storage connection error. %s" : "Erro na conexão de armazenamento. %s",
- "Storage is temporarily not available" : "Storage temporariamente indisponível",
- "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s",
- "4-byte characters are not supported in file names" : "Caracteres de 4-bytes não são suportados em nomes de arquivos",
- "App directory already exists" : "Diretório App já existe",
- "Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
- "Archive does not contain a directory named %s" : "O arquivo não contém um diretório chamado %s",
- "No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo",
- "No href specified when installing app from http" : "Nenhuma href foi especificada enquanto instalava o aplicativo de http",
- "No path specified when installing app from local file" : "Nenhum caminho foi especificado enquanto instalava o aplicativo do arquivo local",
- "Archives of type %s are not supported" : "Arquivos do tipo %s não são suportados",
- "Failed to open archive when installing app" : "Falha para abrir o arquivo enquanto instalava o aplicativo",
- "App does not provide an info.xml file" : "O aplicativo não fornece um arquivo info.xml",
- "App cannot be installed because appinfo file cannot be read." : "O App não pode ser instalado porque o arquivo appinfo não pode ser lido.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "A assinatura não pode ser verificada. Por favor entre em contato com o desenvolvedor do aplicativo e verificar sua tela de administração.",
- "App can't be installed because of not allowed code in the App" : "O aplicativo não pode ser instalado por causa do código não permitido no Aplivativo",
- "App can't be installed because it is not compatible with this version of the server" : "O aplicativo não pode ser instalado pois não é compativel com a versão do servidor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "O aplicativo não pode ser instalado porque ele contém a marca <shipped>verdadeiro</shipped> que não é permitido para aplicações não embarcadas",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "O aplicativo não pode ser instalado porque a versão em info.xml não é o mesmo que a versão relatada na App Store",
- "Logging" : "Logando",
- "Recommended" : "Recomendado",
- "Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows não é suportada",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "O Servidor Nextcloud não possui suporte para execução na plataforma Microsoft Windows. Sugerimos que use um servidor Linux em uma máquina virtual, caso não seja possível migrar o servidor.",
- "Storage not available" : "Armazanamento não disponível"
+ "Storage is temporarily not available" : "Armazenamento temporariamente indisponível",
+ "Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com ID: %s não existe. Ative-o em suas configurações de aplicativos ou contacte o administrador.",
+ "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.",
+ "%s shared »%s« with you" : "%s compartilhou »%s« com você",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Não pôde ser criado o diretório \"dados\" (%s)",
+ "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
+ "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
+ "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 2e9db1e93bc..5a965bd867b 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -2,25 +2,25 @@
"Cannot write into \"config\" directory!" : "Não é possível gravar no diretório \"config\"!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Isso geralmente pode ser corrigido dando o acesso de gravação ao webserver para o diretório de configuração",
"See %s" : "Ver %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
- "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do app %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
- "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 exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido por %s dar a permissão de gravação ao servidor web para o diretório de configuração %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do aplicativo %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
+ "Sample configuration detected" : "Configuração de exemplo 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 exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor leia a documentação antes de realizar mudanças no config.php",
"%1$s and %2$s" : "%1$s e %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP %s or higher is required." : "PHP %s ou superior é requerido.",
"PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
"%sbit or higher PHP required." : "%sbit ou maior é requerido.",
- "Following databases are supported: %s" : "Following databases are supported: %s",
- "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
+ "Following databases are supported: %s" : "Os seguintes bancos de dados são suportados: %s",
+ "The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pôde ser 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." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
"Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
"Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
- "Server version %s or higher is required." : "É requerido um Servidor da versão %s ou superior.",
- "Server version %s or lower is required." : "É requerido um Servidor da versão %s ou anterior.",
+ "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.",
+ "Server version %s or lower is required." : "É requerido um servidor da versão %s ou abaixo.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"Avatar image is not square" : "A imagem do avatar não é quadrada",
@@ -34,81 +34,87 @@
"_%n hour ago_::_%n hours ago_" : ["há %n hora atrás","há %n horas atrás"],
"_%n minute ago_::_%n minutes ago_" : ["há %n minuto atrás","há %n minutos atrás"],
"seconds ago" : "segundos atrás",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo com id: %s não existe. Ative-o em suas configurações de aplicativos ou contate o administrador.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com a ID: %s não existe. Por favor, habilite-o nas configurações de seu aplicativo ou contacte o administrador.",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
- "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caracter inválido",
"File name is too long" : "O nome do arquivo é muito longo",
- "Dot files are not allowed" : "Dot arquivos não são permitidos",
- "Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
+ "Dot files are not allowed" : "Arquivos Dot não são permitidos",
+ "Empty filename is not allowed" : "Nome vazio para arquivo não é permitido.",
+ "This is an automatically sent email, please do not reply." : "Este é um email enviado automaticamente. Por favor, não responda.",
+ "Help" : "Ajuda",
+ "Apps" : "Aplicativos",
+ "Personal" : "Pessoal",
+ "Log out" : "Saída",
+ "Users" : "Usuários",
+ "Admin" : "Admininistrador",
"APCu" : "APCu",
"Redis" : "Redis",
- "Server settings" : "Configurações de servidor",
+ "Server settings" : "Configurações do servidor",
"Sharing" : "Compartilhamento",
+ "Security" : "Segurança",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dias & truques",
+ "Tips & tricks" : "Dicas & truques",
"%s enter the database username and name." : "%s insira o nome de usuário e o nome do banco de dados.",
"%s enter the database username." : "%s insira o nome de usuário do banco de dados.",
"%s enter the database name." : "%s insira o nome do banco de dados.",
"%s you may not use dots in the database name" : "%s você não pode usar pontos no nome do banco de dados",
- "Oracle connection could not be established" : "Conexão Oracle não pode ser estabelecida",
- "Oracle username and/or password not valid" : "Nome de usuário e/ou senha Oracle inválido(s)",
+ "Oracle connection could not be established" : "Conexão Oracle não pôde ser estabelecida",
+ "Oracle username and/or password not valid" : "Nome de usuário e/ou senha Oracle inválidos",
"DB Error: \"%s\"" : "Erro no BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando ofensivo era: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.",
+ "You need to enter details of an existing account." : "Você necessita entrar detalhes de uma conta existente.",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando ofensivo era: \"%s\", nome: %s, senha: %s",
- "PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválido(s)",
+ "PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválidos",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
- "For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para obter melhores resultados, por favor considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32 bits e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
"Set an admin username." : "Defina um nome do usuário administrador.",
- "Set an admin password." : "Defina uma senha de administrador.",
+ "Set an admin password." : "Defina uma senha para o administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
- "Invalid Federated Cloud ID" : "Associação Inválida de Nuvem ID",
- "%s shared »%s« with you" : "%s compartilhou »%s« com você",
- "%s via %s" : "%s via %s",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
- "Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou, porque o arquivo não existe",
+ "Invalid Federated Cloud ID" : "ID inválida de Nuvem Federada",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou pois o processo interno não permite ações de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Compartilhamento %s falhou pois o arquivo não existe",
"You are not allowed to share %s" : "Você não tem permissão para compartilhar %s",
- "Sharing %s failed, because you can not share with yourself" : "O compartilhamento %s falhou, porque você não pode compartilhar com você mesmo",
- "Sharing %s failed, because the user %s does not exist" : "Compartilhamento %s falhou, porque o usuário %s não existe",
- "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartilhamento %s falhou, porque o usuário %s não é membro de nenhum grupo que o usuário %s pertença",
- "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este ítem já está compartilhado com %s",
- "Sharing %s failed, because this item is already shared with user %s" : "Compartilhamento de %s falhou, porque esse item já é compartilhada com o usuário %s",
- "Sharing %s failed, because the group %s does not exist" : "Compartilhamento %s falhou, porque o grupo %s não existe",
- "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s",
+ "Sharing %s failed, because you can not share with yourself" : "O compartilhamento %s falhou pois você não pode compartilhar com você mesmo",
+ "Sharing %s failed, because the user %s does not exist" : "O compartilhamento %s falhou pois o usuário %s não existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "O compartilhamento %s falhou pois o usuário %s não é membro de nenhum grupo que o usuário %s pertença",
+ "Sharing %s failed, because this item is already shared with %s" : "O compartilhamento %s falhou pois este ítem já está compartilhado com %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "O compartilhamento de %s falhou pois esse item já é compartilhada com o usuário %s",
+ "Sharing %s failed, because the group %s does not exist" : "O compartilhamento %s falhou pois o grupo %s não existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "O compartilhamento %s falhou, pois %s não é membro do grupo %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
- "Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
+ "Sharing %s failed, because sharing with links is not allowed" : "O compartilhamento %s falhou pois compartilhamento com links não é permitido",
"Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
- "Share type %s is not valid for %s" : "Tipo de compartilhamento %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",
- "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
- "Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de validade. Data de expiração está no passado",
- "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Ações são obrigados a ter uma data de expiração.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhando backend %s deve implementar a interface OCP\\Share_Backend",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou pois não foi possível encontrar %s. Talvez o servidor esteja inacessível.",
+ "Share type %s is not valid for %s" : "O tipo de compartilhamento %s não é válido para %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "A definição de permissões para %s falhou pois as permissões excedem as permissões concedidas a %s",
+ "Setting permissions for %s failed, because the item was not found" : "A definição de permissões para %s falhou pois o item não foi encontrado",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Os compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
+ "Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de expiração pois ela está no passado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Compartilhamentos devem ter uma data de expiração.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhamento backend %s deve implementar a interface OCP\\Share_Backend",
"Sharing backend %s not found" : "Compartilhamento backend %s não encontrado",
- "Sharing backend for %s not found" : "Compartilhamento backend para %s não encontrado",
- "Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou, porque o usuário %s é o compartilhador original",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou, porque as permissões excedem as permissões concedidas a %s",
- "Sharing %s failed, because resharing is not allowed" : "Compartilhamento %s falhou, porque recompartilhamentos não são permitidos",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
+ "Sharing backend for %s not found" : "Compartilhamento backend para %s não foi encontrado",
+ "Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou pois o usuário %s é o compartilhador original",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou pois as permissões excedem as permissões concedidas a %s",
+ "Sharing %s failed, because resharing is not allowed" : "O compartilhamento %s falhou pois recompartilhamentos não são permitidos",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "O compartilhamento %s falhou, pois a infraestrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
+ "Sharing %s failed, because the file could not be found in the file cache" : "O compartilhamento %s falhou pois o arquivo não pôde ser encontrado no cache de arquivos",
"Cannot increase permissions of %s" : "Não é possível aumentar as permissões de %s",
"Files can't be shared with delete permissions" : "Os arquivos não podem ser compartilhadas com permissões de exclusão",
"Files can't be shared with create permissions" : "Os arquivos não podem ser compartilhados com permissões de criação",
- "Expiration date is in the past" : "Data de validade está ultrapassada",
- "Cannot set expiration date more than %s days in the future" : "Não é possível definir a data de validade mais de %s dias no futuro",
- "Could not find category \"%s\"" : "Impossível localizar categoria \"%s\"",
+ "Expiration date is in the past" : "Data de expiração está no passado",
+ "Cannot set expiration date more than %s days in the future" : "Não é possível definir a data de expiração para mais que %s dias no futuro",
+ "Could not find category \"%s\"" : "Impossível localizar a categoria \"%s\"",
"Sunday" : "Domingo",
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
"Wednesday" : "Quarta-feira",
- "Thursday" : "Quita-feira",
+ "Thursday" : "Quinta-feira",
"Friday" : "Sexta-feira",
- "Saturday" : "Sabado",
+ "Saturday" : "Sábado",
"Sun." : "Dom.",
"Mon." : "Seg.",
"Tue." : "Ter.",
@@ -147,85 +153,68 @@
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
- "Apps" : "Aplicações",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Somente os seguintes caracteres são permitidos em um nome de usuário: \"a-z\", \"A-Z\", \"0-9\", e \"_.@-'\"",
- "A valid username must be provided" : "Forneça um nome de usuário válido",
+ "A valid username must be provided" : "Um nome de usuário válido deve ser fornecido",
"Username contains whitespace at the beginning or at the end" : "O nome de usuário contém espaço em branco no início ou no fim",
- "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",
- "Login canceled by app" : "Login cancelado pelo aplicativo",
+ "Username must not consist of dots only" : "Nome do usuário não pode consistir de pontos somente",
+ "A valid password must be provided" : "Uma senha válida deve ser fornecida",
+ "The username is already being used" : "Este nome de usuário já está em uso",
"User disabled" : "Usuário desativado",
- "Help" : "Ajuda",
- "Personal" : "Pessoal",
- "Users" : "Usuários",
- "Admin" : "Admin",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "O App \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
+ "Login canceled by app" : "Login cancelado pelo aplicativo",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado pois o arquivo appinfo não pôde ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
- "App '%s' could not be installed!" : "O aplicativo '%s' pode não estar instalado!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
+ "App '%s' could not be installed!" : "O aplicativo '%s' não pôde ser instalado!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "O aplicativo \"%s\" não pode ser instalado pois as seguintes dependências não foram cumpridas: %s",
"a safe home for all your data" : "um local seguro para todos os seus dados",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
"Can't read file" : "Não é possível ler arquivo",
- "Application is not enabled" : "Aplicação não está habilitada",
+ "Application is not enabled" : "O aplicativo não está habilitado",
"Authentication error" : "Erro de autenticação",
- "Token expired. Please reload page." : "Token expirou. Por favor recarregue a página.",
+ "Token expired. Please reload page." : "O token expirou. Por favor recarregue a página.",
"Unknown user" : "Usuário desconhecido",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql ou postgresql) instalado.",
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esta geralmente pode ser fixado por <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dando permissão de gravação ao diretório raiz do servidor</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",
+ "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 por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.",
+ "Cannot create \"data\" directory" : "Não foi possível criar o diretório de dados",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no 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 por %sdando permissão de escrita ao servidor web para o diretório raiz %s",
+ "Setting locale to %s failed" : "Falha ao configurar localização 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.",
+ "Please ask your server administrator to install the module." : "Por favor, peça ao administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Configurações \"%s\" PHP não está configurado para \"%s\".",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
- "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" em vez do valor esperado \"0\"",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" ao invés do valor esperado \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corrigir esse problema defina <code>mbstring.func_overload</code> para <code>0</code> em seu php.ini",
- "libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a mínima versão requerida. Atualmente a versão %s está instalada.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a versão mínima requerida. Atualmente a versão %s está instalada.",
"To fix this issue update your libxml2 version and restart your web server." : "Para corrigir este problema, atualize a versão da sua libxml2 e reinicie seu servidor web.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está, aparentemente, configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
- "Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor peça ao administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
- "Please upgrade your database version" : "Por favor, atualize sua versão do banco de dados",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor, altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
- "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
- "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
- "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração",
- "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido",
+ "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser lido por outros usuários.",
+ "Your data directory is readable by other users" : "O diretório de dados está legível para outros usuários",
+ "Your data directory must be an absolute path" : "O diretório de dados deve ser um caminho absoluto",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"datadirectory\" na sua configuração",
+ "Your data directory is invalid" : "Seu diretório de dados é inválido",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor, verifique se o diretório de dados contém um arquivo \".ocdata\" em sua raiz.",
"Could not obtain lock type %d on \"%s\"." : "Não foi possível obter tipo de bloqueio %d em \"%s\".",
"Storage unauthorized. %s" : "Armazenamento não autorizado. %s",
- "Storage incomplete configuration. %s" : "Incompleta configuração de armazenamento. %s",
+ "Storage incomplete configuration. %s" : "Configuração incompleta do armazenamento. %s",
"Storage connection error. %s" : "Erro na conexão de armazenamento. %s",
- "Storage is temporarily not available" : "Storage temporariamente indisponível",
- "Storage connection timeout. %s" : "Tempo limite de conexão de armazenamento. %s",
- "4-byte characters are not supported in file names" : "Caracteres de 4-bytes não são suportados em nomes de arquivos",
- "App directory already exists" : "Diretório App já existe",
- "Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
- "Archive does not contain a directory named %s" : "O arquivo não contém um diretório chamado %s",
- "No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo",
- "No href specified when installing app from http" : "Nenhuma href foi especificada enquanto instalava o aplicativo de http",
- "No path specified when installing app from local file" : "Nenhum caminho foi especificado enquanto instalava o aplicativo do arquivo local",
- "Archives of type %s are not supported" : "Arquivos do tipo %s não são suportados",
- "Failed to open archive when installing app" : "Falha para abrir o arquivo enquanto instalava o aplicativo",
- "App does not provide an info.xml file" : "O aplicativo não fornece um arquivo info.xml",
- "App cannot be installed because appinfo file cannot be read." : "O App não pode ser instalado porque o arquivo appinfo não pode ser lido.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "A assinatura não pode ser verificada. Por favor entre em contato com o desenvolvedor do aplicativo e verificar sua tela de administração.",
- "App can't be installed because of not allowed code in the App" : "O aplicativo não pode ser instalado por causa do código não permitido no Aplivativo",
- "App can't be installed because it is not compatible with this version of the server" : "O aplicativo não pode ser instalado pois não é compativel com a versão do servidor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "O aplicativo não pode ser instalado porque ele contém a marca <shipped>verdadeiro</shipped> que não é permitido para aplicações não embarcadas",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "O aplicativo não pode ser instalado porque a versão em info.xml não é o mesmo que a versão relatada na App Store",
- "Logging" : "Logando",
- "Recommended" : "Recomendado",
- "Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows não é suportada",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "O Servidor Nextcloud não possui suporte para execução na plataforma Microsoft Windows. Sugerimos que use um servidor Linux em uma máquina virtual, caso não seja possível migrar o servidor.",
- "Storage not available" : "Armazanamento não disponível"
+ "Storage is temporarily not available" : "Armazenamento temporariamente indisponível",
+ "Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com ID: %s não existe. Ative-o em suas configurações de aplicativos ou contacte o administrador.",
+ "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.",
+ "%s shared »%s« with you" : "%s compartilhou »%s« com você",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Não pôde ser criado o diretório \"dados\" (%s)",
+ "Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
+ "Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
+ "Data directory (%s) is invalid" : "Diretório de dados (%s) é inválido"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index e3b9fcb52bc..27864e2ec10 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад","%n часов назад"],
"_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад","%n минут назад"],
"seconds ago" : "менее минуты",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID «%s» не существует. Включите его в настройках приложений или обратитесь к администратору.",
"File name is a reserved word" : "Имя файла является зарезервированным словом",
"File name contains at least one invalid character" : "Имя файла содержит по крайней мере один некорректный символ",
"File name is too long" : "Имя файла слишком длинное.",
"Dot files are not allowed" : "Файлы начинающиеся с точки не допускаются",
"Empty filename is not allowed" : "Пустое имя файла не допускается",
+ "This is an automatically sent email, please do not reply." : "Это соощение отправлено автоматически, пожалуйста, не отвечайте на него.",
+ "Help" : "Помощь",
+ "Apps" : "Приложения",
+ "Personal" : "Личное",
+ "Log out" : "Выйти",
+ "Users" : "Пользователи",
+ "Admin" : "Администрирование",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Настройки сервера",
"Sharing" : "Общий доступ",
+ "Security" : "Безопасность",
"Encryption" : "Шифрование",
"Additional settings" : "Дополнительные настройки",
"Tips & tricks" : "Советы и трюки",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Неверное имя пользователя и/или пароль Oracle",
"DB Error: \"%s\"" : "Ошибка БД: \"%s\"",
"Offending command was: \"%s\"" : "Вызываемая команда была: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.",
+ "You need to enter details of an existing account." : "Необходимо уточнить данные существующего акаунта.",
"Offending command was: \"%s\", name: %s, password: %s" : "Вызываемая команда была: \"%s\", имя: %s, пароль: %s",
"PostgreSQL username and/or password not valid" : "Неверное имя пользователя и/или пароль PostgreSQL",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s может работать некорректно на данной платформе. Используйте на свой страх и риск!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
"Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.",
- "%s shared »%s« with you" : "%s поделился »%s« с вами",
- "%s via %s" : "%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",
@@ -149,18 +155,14 @@ OC.L10N.register(
"Oct." : "Окт.",
"Nov." : "Нояб.",
"Dec." : "Дек.",
- "Apps" : "Приложения",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "В составе имени пользователя допускаются следующие символы: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
"A valid username must be provided" : "Укажите допустимое имя пользователя",
"Username contains whitespace at the beginning or at the end" : "Имя пользователя содержит пробел в начале или в конце",
+ "Username must not consist of dots only" : "Имя пользователя должно состоять не только из точек",
"A valid password must be provided" : "Укажите допустимый пароль",
"The username is already being used" : "Имя пользователя уже используется",
- "Login canceled by app" : "Вход отменен приложением",
"User disabled" : "Пользователь отключен",
- "Help" : "Помощь",
- "Personal" : "Личное",
- "Users" : "Пользователи",
- "Admin" : "Администрирование",
+ "Login canceled by app" : "Вход отменен приложением",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Приложение \"%s\" не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера",
"No app name specified" : "Не указано имя приложения",
@@ -177,7 +179,7 @@ OC.L10N.register(
"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)",
+ "Cannot create \"data\" directory" : "Невозможно создать каталог «data»",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">предоставив веб-серверу права на запись в корневом каталоге</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 не удалась",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9",
"Please upgrade your database version" : "Обновите базу данных",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.",
- "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям",
- "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём",
+ "Your data directory is readable by other users" : "Каталог данных доступен для чтения другим пользователям",
+ "Your data directory must be an absolute path" : "Каталог данных должен быть указан в виде абсолютного пути",
"Check the value of \"datadirectory\" in your configuration" : "Проверьте значение \"datadirectory\" в настройках.",
- "Data directory (%s) is invalid" : "Каталог данных (%s) не верен",
+ "Your data directory is invalid" : "Каталог данных не верен",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Убедитесь, что файл \".ocdata\" присутствует в корне каталога данных.",
"Could not obtain lock type %d on \"%s\"." : "Не удалось получить блокировку типа %d для \"%s\"",
"Storage unauthorized. %s" : "Хранилище неавторизовано. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Ошибка подключения к хранилищу. %s",
"Storage is temporarily not available" : "Хранилище временно недоступно",
"Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s",
- "4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
- "App directory already exists" : "Каталог приложения уже существует",
- "Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог приложения. Исправьте права доступа. %s",
- "Archive does not contain a directory named %s" : "Архив не содержит каталога с именем %s",
- "No source specified when installing app" : "Не указан источник при установке приложения",
- "No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
- "No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
- "Archives of type %s are not supported" : "Архивы %s не поддерживаются",
- "Failed to open archive when installing app" : "Ошибка открытия архива при установке приложения",
- "App does not provide an info.xml file" : "Приложение не имеет файла info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Приложение не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Подпись не может быть проверена. Пожалуйста, свяжитесь с разработчиком приложения и проверьте свою страницу администратора.",
- "App can't be installed because of not allowed code in the App" : "Приложение невозможно установить. В нем содержится запрещенный код.",
- "App can't be installed because it is not compatible with this version of the server" : "Приложение не может быть установлено, потому что оно несовместимо с этой версией сервера",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку.",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Приложение невозможно установить. Версия в файле info.xml не совпадает с версией заявленной в магазине приложений",
- "Logging" : "Журнал",
- "Recommended" : "Рекомендовано",
- "Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
- "Storage not available" : "Хранилище недоступно"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.",
+ "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.",
+ "%s shared »%s« with you" : "%s поделился »%s« с вами",
+ "%s via %s" : "%s через %s",
+ "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям",
+ "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём",
+ "Data directory (%s) is invalid" : "Каталог данных (%s) не верен"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index 7ac544fd9fe..cdd827031ee 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад","%n часов назад"],
"_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад","%n минут назад"],
"seconds ago" : "менее минуты",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID «%s» не существует. Включите его в настройках приложений или обратитесь к администратору.",
"File name is a reserved word" : "Имя файла является зарезервированным словом",
"File name contains at least one invalid character" : "Имя файла содержит по крайней мере один некорректный символ",
"File name is too long" : "Имя файла слишком длинное.",
"Dot files are not allowed" : "Файлы начинающиеся с точки не допускаются",
"Empty filename is not allowed" : "Пустое имя файла не допускается",
+ "This is an automatically sent email, please do not reply." : "Это соощение отправлено автоматически, пожалуйста, не отвечайте на него.",
+ "Help" : "Помощь",
+ "Apps" : "Приложения",
+ "Personal" : "Личное",
+ "Log out" : "Выйти",
+ "Users" : "Пользователи",
+ "Admin" : "Администрирование",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Настройки сервера",
"Sharing" : "Общий доступ",
+ "Security" : "Безопасность",
"Encryption" : "Шифрование",
"Additional settings" : "Дополнительные настройки",
"Tips & tricks" : "Советы и трюки",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Неверное имя пользователя и/или пароль Oracle",
"DB Error: \"%s\"" : "Ошибка БД: \"%s\"",
"Offending command was: \"%s\"" : "Вызываемая команда была: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.",
+ "You need to enter details of an existing account." : "Необходимо уточнить данные существующего акаунта.",
"Offending command was: \"%s\", name: %s, password: %s" : "Вызываемая команда была: \"%s\", имя: %s, пароль: %s",
"PostgreSQL username and/or password not valid" : "Неверное имя пользователя и/или пароль PostgreSQL",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s может работать некорректно на данной платформе. Используйте на свой страх и риск!",
@@ -66,8 +74,6 @@
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
"Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.",
- "%s shared »%s« with you" : "%s поделился »%s« с вами",
- "%s via %s" : "%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",
@@ -147,18 +153,14 @@
"Oct." : "Окт.",
"Nov." : "Нояб.",
"Dec." : "Дек.",
- "Apps" : "Приложения",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "В составе имени пользователя допускаются следующие символы: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
"A valid username must be provided" : "Укажите допустимое имя пользователя",
"Username contains whitespace at the beginning or at the end" : "Имя пользователя содержит пробел в начале или в конце",
+ "Username must not consist of dots only" : "Имя пользователя должно состоять не только из точек",
"A valid password must be provided" : "Укажите допустимый пароль",
"The username is already being used" : "Имя пользователя уже используется",
- "Login canceled by app" : "Вход отменен приложением",
"User disabled" : "Пользователь отключен",
- "Help" : "Помощь",
- "Personal" : "Личное",
- "Users" : "Пользователи",
- "Admin" : "Администрирование",
+ "Login canceled by app" : "Вход отменен приложением",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Приложение \"%s\" не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера",
"No app name specified" : "Не указано имя приложения",
@@ -175,7 +177,7 @@
"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)",
+ "Cannot create \"data\" directory" : "Невозможно создать каталог «data»",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Обычно это можно исправить <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">предоставив веб-серверу права на запись в корневом каталоге</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 не удалась",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "Требуется PostgreSQL >= 9",
"Please upgrade your database version" : "Обновите базу данных",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.",
- "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям",
- "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём",
+ "Your data directory is readable by other users" : "Каталог данных доступен для чтения другим пользователям",
+ "Your data directory must be an absolute path" : "Каталог данных должен быть указан в виде абсолютного пути",
"Check the value of \"datadirectory\" in your configuration" : "Проверьте значение \"datadirectory\" в настройках.",
- "Data directory (%s) is invalid" : "Каталог данных (%s) не верен",
+ "Your data directory is invalid" : "Каталог данных не верен",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Убедитесь, что файл \".ocdata\" присутствует в корне каталога данных.",
"Could not obtain lock type %d on \"%s\"." : "Не удалось получить блокировку типа %d для \"%s\"",
"Storage unauthorized. %s" : "Хранилище неавторизовано. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Ошибка подключения к хранилищу. %s",
"Storage is temporarily not available" : "Хранилище временно недоступно",
"Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s",
- "4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
- "App directory already exists" : "Каталог приложения уже существует",
- "Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог приложения. Исправьте права доступа. %s",
- "Archive does not contain a directory named %s" : "Архив не содержит каталога с именем %s",
- "No source specified when installing app" : "Не указан источник при установке приложения",
- "No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
- "No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
- "Archives of type %s are not supported" : "Архивы %s не поддерживаются",
- "Failed to open archive when installing app" : "Ошибка открытия архива при установке приложения",
- "App does not provide an info.xml file" : "Приложение не имеет файла info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Приложение не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Подпись не может быть проверена. Пожалуйста, свяжитесь с разработчиком приложения и проверьте свою страницу администратора.",
- "App can't be installed because of not allowed code in the App" : "Приложение невозможно установить. В нем содержится запрещенный код.",
- "App can't be installed because it is not compatible with this version of the server" : "Приложение не может быть установлено, потому что оно несовместимо с этой версией сервера",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку.",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Приложение невозможно установить. Версия в файле info.xml не совпадает с версией заявленной в магазине приложений",
- "Logging" : "Журнал",
- "Recommended" : "Рекомендовано",
- "Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
- "Storage not available" : "Хранилище недоступно"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.",
+ "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.",
+ "%s shared »%s« with you" : "%s поделился »%s« с вами",
+ "%s via %s" : "%s через %s",
+ "Cannot create \"data\" directory (%s)" : "Невозможно создать каталог \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Каталог данных (%s) доступен для чтения другим пользователям",
+ "Data directory (%s) must be an absolute path" : "Каталог данных (%s) должен быть абсолютным путём",
+ "Data directory (%s) is invalid" : "Каталог данных (%s) не верен"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js
index e723baebea4..9bb667d1d44 100644
--- a/lib/l10n/sk.js
+++ b/lib/l10n/sk.js
@@ -36,12 +36,16 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
"File name is a reserved word" : "Názov súboru je rezervované slovo.",
"File name contains at least one invalid character" : "Názov súboru obsahuje nepovolené znaky.",
"File name is too long" : "Meno súboru je veľmi dlhé.",
"Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
"Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "Help" : "Pomoc",
+ "Apps" : "Aplikácie",
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Admin" : "Administrátor",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Nastavenia servera",
@@ -56,7 +60,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Používateľské meno a/alebo heslo pre Oracle databázu je neplatné",
"DB Error: \"%s\"" : "Chyba DB: \"%s\"",
"Offending command was: \"%s\"" : "Podozrivý príkaz bol: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
"Offending command was: \"%s\", name: %s, password: %s" : "Podozrivý príkaz bol: \"%s\", meno: %s, heslo: %s",
"PostgreSQL username and/or password not valid" : "Používateľské meno a/alebo heslo pre PostgreSQL databázu je neplatné",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
@@ -67,8 +70,6 @@ OC.L10N.register(
"Set an admin password." : "Zadajte heslo administrátora.",
"Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
"Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
- "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
- "%s via %s" : "%s cez %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
"Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
"You are not allowed to share %s" : "Nemôžete sprístupniť %s",
@@ -145,18 +146,13 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Aplikácie",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"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é",
- "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"User disabled" : "Používateľ zakázaný",
- "Help" : "Pomoc",
- "Personal" : "Osobné",
- "Users" : "Používatelia",
- "Admin" : "Administrátor",
+ "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
@@ -173,7 +169,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</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",
@@ -193,31 +188,18 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
"Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.",
- "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
- "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
"Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii",
- "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.",
"Storage connection error. %s" : "Chyba pripojenia k úložisku. %s",
"Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
- "4-byte characters are not supported in file names" : "V názve súbou nie sú podporované 4-bajtové znaky.",
- "App directory already exists" : "Aplikačný priečinok už existuje",
- "Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
- "Archive does not contain a directory named %s" : "Archív neobsahuje priečinok zvaný %s",
- "No source specified when installing app" : "Nešpecifikovaný zdroj pri inštalácii aplikácie",
- "No href specified when installing app from http" : "Nešpecifikovaný atribút \"href\" pri inštalácii aplikácie pomocou protokolu \"http\"",
- "No path specified when installing app from local file" : "Nešpecifikovaná cesta pri inštalácii aplikácie z lokálneho súboru",
- "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
- "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
- "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
- "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
- "Recommended" : "Odporúčané",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows platforma nieje podporovaná",
- "Storage not available" : "Úložisko nie je dostupné"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
+ "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
+ "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
+ "%s via %s" : "%s cez %s",
+ "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
+ "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
+ "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json
index 7deb8eb8ad8..3f011aaa3d4 100644
--- a/lib/l10n/sk.json
+++ b/lib/l10n/sk.json
@@ -34,12 +34,16 @@
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
"File name is a reserved word" : "Názov súboru je rezervované slovo.",
"File name contains at least one invalid character" : "Názov súboru obsahuje nepovolené znaky.",
"File name is too long" : "Meno súboru je veľmi dlhé.",
"Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
"Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "Help" : "Pomoc",
+ "Apps" : "Aplikácie",
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Admin" : "Administrátor",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Nastavenia servera",
@@ -54,7 +58,6 @@
"Oracle username and/or password not valid" : "Používateľské meno a/alebo heslo pre Oracle databázu je neplatné",
"DB Error: \"%s\"" : "Chyba DB: \"%s\"",
"Offending command was: \"%s\"" : "Podozrivý príkaz bol: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
"Offending command was: \"%s\", name: %s, password: %s" : "Podozrivý príkaz bol: \"%s\", meno: %s, heslo: %s",
"PostgreSQL username and/or password not valid" : "Používateľské meno a/alebo heslo pre PostgreSQL databázu je neplatné",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
@@ -65,8 +68,6 @@
"Set an admin password." : "Zadajte heslo administrátora.",
"Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
"Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
- "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
- "%s via %s" : "%s cez %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
"Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
"You are not allowed to share %s" : "Nemôžete sprístupniť %s",
@@ -143,18 +144,13 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Aplikácie",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"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é",
- "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"User disabled" : "Používateľ zakázaný",
- "Help" : "Pomoc",
- "Personal" : "Osobné",
- "Users" : "Používatelia",
- "Admin" : "Administrátor",
+ "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
@@ -171,7 +167,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</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",
@@ -191,31 +186,18 @@
"PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
"Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.",
- "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
- "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
"Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii",
- "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.",
"Storage connection error. %s" : "Chyba pripojenia k úložisku. %s",
"Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
- "4-byte characters are not supported in file names" : "V názve súbou nie sú podporované 4-bajtové znaky.",
- "App directory already exists" : "Aplikačný priečinok už existuje",
- "Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
- "Archive does not contain a directory named %s" : "Archív neobsahuje priečinok zvaný %s",
- "No source specified when installing app" : "Nešpecifikovaný zdroj pri inštalácii aplikácie",
- "No href specified when installing app from http" : "Nešpecifikovaný atribút \"href\" pri inštalácii aplikácie pomocou protokolu \"http\"",
- "No path specified when installing app from local file" : "Nešpecifikovaná cesta pri inštalácii aplikácie z lokálneho súboru",
- "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
- "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
- "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
- "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
- "Recommended" : "Odporúčané",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows platforma nieje podporovaná",
- "Storage not available" : "Úložisko nie je dostupné"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
+ "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
+ "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
+ "%s via %s" : "%s cez %s",
+ "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
+ "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
+ "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
index 97f60522df5..7bca9e30da0 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -36,12 +36,16 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n orë më parë","%n orë më parë"],
"_%n minute ago_::_%n minutes ago_" : ["%n minutë më parë","%n minuta më parë"],
"seconds ago" : "sekonda më parë",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
"File name is a reserved word" : "Emri i kartelës është një emër i rezervuar",
"File name contains at least one invalid character" : "Emri i kartelës përmban të paktën një shenjë të pavlefshme",
"File name is too long" : "Emri i kartelës është shumë i gjatë",
"Dot files are not allowed" : "Nuk lejohen kartela të fshehura",
"Empty filename is not allowed" : "Nuk lejohen emra të zbrazët kartelash",
+ "Help" : "Ndihmë",
+ "Apps" : "Aplikacione",
+ "Personal" : "Personale",
+ "Users" : "Përdorues",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Konfigurimi i serverit",
@@ -57,7 +61,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim Oracle-i i pavlefshëm",
"DB Error: \"%s\"" : "Gabim DB-je: \"%s\"",
"Offending command was: \"%s\"" : "Urdhri shkaktar qe: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
"Offending command was: \"%s\", name: %s, password: %s" : "Urdhri shkaktar qe: \"%s\", emër: %s, fjalëkalim: %s",
"PostgreSQL username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim PostgreSQL jo të vlefshëm",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk mbulohet dhe %s s’do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj! ",
@@ -68,8 +71,6 @@ OC.L10N.register(
"Set an admin password." : "Caktoni një fjalëkalim për përgjegjësin.",
"Can't create or write into the data directory %s" : "S’e krijon ose s’shkruan dot te drejtoria e të dhënave %s",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
- "%s shared »%s« with you" : "%s ndau me ju »%s«",
- "%s via %s" : "%s përmes %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Ndarja e %s dështoi, ngaqë pjesa përgjegjëse e shërbyesit nuk lejon ndarje prej llojit %i",
"Sharing %s failed, because the file does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’ekziston",
"You are not allowed to share %s" : "Nuk ju lejohet ta ndani %s me të tjerët",
@@ -149,18 +150,13 @@ OC.L10N.register(
"Oct." : "Tet.",
"Nov." : "Nën.",
"Dec." : "Dhj.",
- "Apps" : "Aplikacione",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Në një emër përdoruesi lejohen vetëm shenjat vijuese: \"a-z\", \"A-Z\", \"0-9\", dhe \"_.@-\"",
"A valid username must be provided" : "Duhet dhënë një emër i vlefshëm përdoruesi",
"Username contains whitespace at the beginning or at the end" : "Emri i përdoruesit përmban hapësirë në fillim ose në fund",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"The username is already being used" : "Emri i përdoruesit është tashmë i përdorur",
- "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"User disabled" : "Përdorues i çaktivizuar",
- "Help" : "Ndihmë",
- "Personal" : "Personale",
- "Users" : "Përdorues",
- "Admin" : "Admin",
+ "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacioni \"%s\" s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacioni \"%s\" nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
"No app name specified" : "S’u dha emër aplikacioni",
@@ -177,7 +173,6 @@ OC.L10N.register(
"Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"",
"Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"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." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.",
- "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.",
"Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi",
@@ -197,10 +192,7 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9",
"Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.",
- "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
- "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
"Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj",
- "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".",
"Storage unauthorized. %s" : "Depozitë e paautorizuar. %s",
@@ -208,26 +200,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Gabim lidhje te depozita. %s",
"Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht",
"Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s",
- "4-byte characters are not supported in file names" : "Shenjat 4-bajtshe nuk mbulohet në emra kartelash",
- "App directory already exists" : "Drejtoria e aplikacionit ekziston tashmë",
- "Can't create app folder. Please fix permissions. %s" : "S’krijohet dot dosje aplikacioni. Ju lutemi, ndreqni lejet. %s",
- "Archive does not contain a directory named %s" : "Arkivi s’përmban një drejtori të quajtur %s",
- "No source specified when installing app" : "S’u dha burim gjatë instalimit të aplikacionit",
- "No href specified when installing app from http" : "S’u tregua href gjatë instalimit të aplikacionit nga http",
- "No path specified when installing app from local file" : "S’u caktua shteg gjatë instalimit të aplikacionit prej kartele vendore",
- "Archives of type %s are not supported" : "Nuk mbulohen arkivat e llojit %s",
- "Failed to open archive when installing app" : "Dështoi në hapje arkivi teksa instalohej aplikacioni",
- "App does not provide an info.xml file" : "Aplikacioni s’ofron kartele të vlefshme .xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikacioni s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nënshkrimi s’u kontrollua dot. Ju lutemi, lidhuni me zhvilluesin e aplikacionit dhe kontrolloni te skena juaj e përgjegjësit.",
- "App can't be installed because of not allowed code in the App" : "Aplikacioni s’mund të instalohet, për shkak kodi të palejuar te Aplikacioni",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikacioni nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacioni s’mund të instalohet, ngaqë përmban etiketën <shipped>true</shipped> e cila nuk lejohet për aplikacione që s’janë hedhur në qarkullim",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacioni s’mund të instalohet, ngaqë versioni te info.xml s’është i njëjti me versionin e treguar nga shitorja e aplikacioneve",
- "Logging" : "Duke u lidhur",
- "Recommended" : "E rekomanduar",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform nuk mbulohet",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Përdorimi i Serverit Nextcloud në një platformë Microsoft Windows nuk mbështetet. Ne ju sugjerojmë të përdorni një server Linux në një makinë virtuale nëse nuk e keni mundësinë që të migroni vetë serverin.",
- "Storage not available" : "Pa depozitë gati"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
+ "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
+ "%s shared »%s« with you" : "%s ndau me ju »%s«",
+ "%s via %s" : "%s përmes %s",
+ "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
+ "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
+ "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index 2adce922b41..cbdf4334a4d 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -34,12 +34,16 @@
"_%n hour ago_::_%n hours ago_" : ["%n orë më parë","%n orë më parë"],
"_%n minute ago_::_%n minutes ago_" : ["%n minutë më parë","%n minuta më parë"],
"seconds ago" : "sekonda më parë",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
"File name is a reserved word" : "Emri i kartelës është një emër i rezervuar",
"File name contains at least one invalid character" : "Emri i kartelës përmban të paktën një shenjë të pavlefshme",
"File name is too long" : "Emri i kartelës është shumë i gjatë",
"Dot files are not allowed" : "Nuk lejohen kartela të fshehura",
"Empty filename is not allowed" : "Nuk lejohen emra të zbrazët kartelash",
+ "Help" : "Ndihmë",
+ "Apps" : "Aplikacione",
+ "Personal" : "Personale",
+ "Users" : "Përdorues",
+ "Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Konfigurimi i serverit",
@@ -55,7 +59,6 @@
"Oracle username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim Oracle-i i pavlefshëm",
"DB Error: \"%s\"" : "Gabim DB-je: \"%s\"",
"Offending command was: \"%s\"" : "Urdhri shkaktar qe: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
"Offending command was: \"%s\", name: %s, password: %s" : "Urdhri shkaktar qe: \"%s\", emër: %s, fjalëkalim: %s",
"PostgreSQL username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim PostgreSQL jo të vlefshëm",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk mbulohet dhe %s s’do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj! ",
@@ -66,8 +69,6 @@
"Set an admin password." : "Caktoni një fjalëkalim për përgjegjësin.",
"Can't create or write into the data directory %s" : "S’e krijon ose s’shkruan dot te drejtoria e të dhënave %s",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
- "%s shared »%s« with you" : "%s ndau me ju »%s«",
- "%s via %s" : "%s përmes %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Ndarja e %s dështoi, ngaqë pjesa përgjegjëse e shërbyesit nuk lejon ndarje prej llojit %i",
"Sharing %s failed, because the file does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’ekziston",
"You are not allowed to share %s" : "Nuk ju lejohet ta ndani %s me të tjerët",
@@ -147,18 +148,13 @@
"Oct." : "Tet.",
"Nov." : "Nën.",
"Dec." : "Dhj.",
- "Apps" : "Aplikacione",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Në një emër përdoruesi lejohen vetëm shenjat vijuese: \"a-z\", \"A-Z\", \"0-9\", dhe \"_.@-\"",
"A valid username must be provided" : "Duhet dhënë një emër i vlefshëm përdoruesi",
"Username contains whitespace at the beginning or at the end" : "Emri i përdoruesit përmban hapësirë në fillim ose në fund",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"The username is already being used" : "Emri i përdoruesit është tashmë i përdorur",
- "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"User disabled" : "Përdorues i çaktivizuar",
- "Help" : "Ndihmë",
- "Personal" : "Personale",
- "Users" : "Përdorues",
- "Admin" : "Admin",
+ "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacioni \"%s\" s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacioni \"%s\" nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
"No app name specified" : "S’u dha emër aplikacioni",
@@ -175,7 +171,6 @@
"Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"",
"Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"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." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.",
- "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.",
"Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi",
@@ -195,10 +190,7 @@
"PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9",
"Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.",
- "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
- "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
"Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj",
- "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".",
"Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".",
"Storage unauthorized. %s" : "Depozitë e paautorizuar. %s",
@@ -206,26 +198,13 @@
"Storage connection error. %s" : "Gabim lidhje te depozita. %s",
"Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht",
"Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s",
- "4-byte characters are not supported in file names" : "Shenjat 4-bajtshe nuk mbulohet në emra kartelash",
- "App directory already exists" : "Drejtoria e aplikacionit ekziston tashmë",
- "Can't create app folder. Please fix permissions. %s" : "S’krijohet dot dosje aplikacioni. Ju lutemi, ndreqni lejet. %s",
- "Archive does not contain a directory named %s" : "Arkivi s’përmban një drejtori të quajtur %s",
- "No source specified when installing app" : "S’u dha burim gjatë instalimit të aplikacionit",
- "No href specified when installing app from http" : "S’u tregua href gjatë instalimit të aplikacionit nga http",
- "No path specified when installing app from local file" : "S’u caktua shteg gjatë instalimit të aplikacionit prej kartele vendore",
- "Archives of type %s are not supported" : "Nuk mbulohen arkivat e llojit %s",
- "Failed to open archive when installing app" : "Dështoi në hapje arkivi teksa instalohej aplikacioni",
- "App does not provide an info.xml file" : "Aplikacioni s’ofron kartele të vlefshme .xml",
- "App cannot be installed because appinfo file cannot be read." : "Aplikacioni s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nënshkrimi s’u kontrollua dot. Ju lutemi, lidhuni me zhvilluesin e aplikacionit dhe kontrolloni te skena juaj e përgjegjësit.",
- "App can't be installed because of not allowed code in the App" : "Aplikacioni s’mund të instalohet, për shkak kodi të palejuar te Aplikacioni",
- "App can't be installed because it is not compatible with this version of the server" : "Aplikacioni nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacioni s’mund të instalohet, ngaqë përmban etiketën <shipped>true</shipped> e cila nuk lejohet për aplikacione që s’janë hedhur në qarkullim",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacioni s’mund të instalohet, ngaqë versioni te info.xml s’është i njëjti me versionin e treguar nga shitorja e aplikacioneve",
- "Logging" : "Duke u lidhur",
- "Recommended" : "E rekomanduar",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform nuk mbulohet",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Përdorimi i Serverit Nextcloud në një platformë Microsoft Windows nuk mbështetet. Ne ju sugjerojmë të përdorni një server Linux në një makinë virtuale nëse nuk e keni mundësinë që të migroni vetë serverin.",
- "Storage not available" : "Pa depozitë gati"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
+ "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
+ "%s shared »%s« with you" : "%s ndau me ju »%s«",
+ "%s via %s" : "%s përmes %s",
+ "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
+ "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
+ "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
+ "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index af52142692c..23179ba9048 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -36,12 +36,16 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
"seconds ago" : "sekunder sedan",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
"File name is a reserved word" : "Filnamnet är ett reserverat ord",
"File name contains at least one invalid character" : "Filnamnet innehåller minst ett ogiltigt tecken",
"File name is too long" : "Filnamnet är för långt",
"Dot files are not allowed" : "Dot filer är inte tillåtna",
"Empty filename is not allowed" : "Tomma filnamn är inte tillåtna",
+ "Help" : "Hjälp",
+ "Apps" : "Applikationer",
+ "Personal" : "Personliga Inställningar",
+ "Users" : "Användare",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Serverinställningar",
@@ -57,7 +61,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt",
"DB Error: \"%s\"" : "DB fel: \"%s\"",
"Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
"Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
@@ -68,8 +71,6 @@ OC.L10N.register(
"Set an admin password." : "Ange ett administratörslösenord.",
"Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
"Invalid Federated Cloud ID" : "Ogiltigt Federarat Moln-ID",
- "%s shared »%s« with you" : "%s delade »%s« med dig",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
"Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
"You are not allowed to share %s" : "Du har inte rätt att dela %s",
@@ -149,18 +150,13 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Applikationer",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
- "Login canceled by app" : "Inloggningen avbruten av appen",
"User disabled" : "Användare inaktiverad",
- "Help" : "Hjälp",
- "Personal" : "Personliga Inställningar",
- "Users" : "Användare",
- "Admin" : "Administration",
+ "Login canceled by app" : "Inloggningen avbruten av appen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Applikationen \"%s\" kan ej installeras eftersom informationen från appen ej kunde läsas.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Applikationen \"%s\" kan ej installeras eftersom den inte är kompatibel med denna serverversion.",
"No app name specified" : "Inget appnamn angivet",
@@ -177,7 +173,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </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",
@@ -197,10 +192,7 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
"Please upgrade your database version" : "Vänligen uppgradera din databas-version",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.",
- "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
- "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
"Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration",
- "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.",
"Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".",
"Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s",
@@ -208,26 +200,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s",
"Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt",
"Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s",
- "4-byte characters are not supported in file names" : "4-bitars tecken är inte tillåtet i filnamn",
- "App directory already exists" : "Appens mapp finns redan",
- "Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
- "Archive does not contain a directory named %s" : "Arkivet innehåller inte en mapp vid namn %s",
- "No source specified when installing app" : "Ingen källa angiven vid installation av app ",
- "No href specified when installing app from http" : "Ingen href angiven vid installation av app från http",
- "No path specified when installing app from local file" : "Ingen sökväg angiven vid installation av app från lokal fil",
- "Archives of type %s are not supported" : "Arkiv av typen %s stöds ej",
- "Failed to open archive when installing app" : "Kunde inte öppna arkivet när appen skulle installeras",
- "App does not provide an info.xml file" : "Appen har ingen info.xml fil",
- "App cannot be installed because appinfo file cannot be read." : "Appen kan inte installeras eftersom app-informationen inte kan läsas i filen.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signaturen kunde inte kontrolleras. Vänligen kontakta appens utvecklare och kontrollera administratörsinställningarna.",
- "App can't be installed because of not allowed code in the App" : "Appen kan inte installeras eftersom att den innehåller otillåten kod",
- "App can't be installed because it is not compatible with this version of the server" : "Appen kan inte installeras eftersom den inte är förenlig med den här versionen av servern",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan inte installeras eftersom att den innehåller etiketten <shipped>true</shipped> vilket inte är tillåtet för icke inkluderade appar",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Appen kan inte installeras eftersom det är fel version på info.xml och stämmer inte överens med versionen från \"App Store\"",
- "Logging" : "Loggning",
- "Recommended" : "Rekomenderad",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattformen stöds inte",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Att köra en Nextcloud-Server på Microsoft Windows-plattformen stöds inte. Vi föreslår att du använder en Linux-server i en virtuell maskin om du inte har möjlighet att migrera själva servern.",
- "Storage not available" : "Lagringsutrymme ej tillgängligt"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
+ "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
+ "%s shared »%s« with you" : "%s delade »%s« med dig",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
+ "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
+ "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
+ "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index ac8d56e125f..72899843297 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -34,12 +34,16 @@
"_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
"seconds ago" : "sekunder sedan",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
"File name is a reserved word" : "Filnamnet är ett reserverat ord",
"File name contains at least one invalid character" : "Filnamnet innehåller minst ett ogiltigt tecken",
"File name is too long" : "Filnamnet är för långt",
"Dot files are not allowed" : "Dot filer är inte tillåtna",
"Empty filename is not allowed" : "Tomma filnamn är inte tillåtna",
+ "Help" : "Hjälp",
+ "Apps" : "Applikationer",
+ "Personal" : "Personliga Inställningar",
+ "Users" : "Användare",
+ "Admin" : "Administration",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Serverinställningar",
@@ -55,7 +59,6 @@
"Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt",
"DB Error: \"%s\"" : "DB fel: \"%s\"",
"Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
"Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
@@ -66,8 +69,6 @@
"Set an admin password." : "Ange ett administratörslösenord.",
"Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
"Invalid Federated Cloud ID" : "Ogiltigt Federarat Moln-ID",
- "%s shared »%s« with you" : "%s delade »%s« med dig",
- "%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
"Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
"You are not allowed to share %s" : "Du har inte rätt att dela %s",
@@ -147,18 +148,13 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
- "Apps" : "Applikationer",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
- "Login canceled by app" : "Inloggningen avbruten av appen",
"User disabled" : "Användare inaktiverad",
- "Help" : "Hjälp",
- "Personal" : "Personliga Inställningar",
- "Users" : "Användare",
- "Admin" : "Administration",
+ "Login canceled by app" : "Inloggningen avbruten av appen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Applikationen \"%s\" kan ej installeras eftersom informationen från appen ej kunde läsas.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Applikationen \"%s\" kan ej installeras eftersom den inte är kompatibel med denna serverversion.",
"No app name specified" : "Inget appnamn angivet",
@@ -175,7 +171,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </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",
@@ -195,10 +190,7 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
"Please upgrade your database version" : "Vänligen uppgradera din databas-version",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.",
- "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
- "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
"Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration",
- "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.",
"Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".",
"Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s",
@@ -206,26 +198,13 @@
"Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s",
"Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt",
"Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s",
- "4-byte characters are not supported in file names" : "4-bitars tecken är inte tillåtet i filnamn",
- "App directory already exists" : "Appens mapp finns redan",
- "Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
- "Archive does not contain a directory named %s" : "Arkivet innehåller inte en mapp vid namn %s",
- "No source specified when installing app" : "Ingen källa angiven vid installation av app ",
- "No href specified when installing app from http" : "Ingen href angiven vid installation av app från http",
- "No path specified when installing app from local file" : "Ingen sökväg angiven vid installation av app från lokal fil",
- "Archives of type %s are not supported" : "Arkiv av typen %s stöds ej",
- "Failed to open archive when installing app" : "Kunde inte öppna arkivet när appen skulle installeras",
- "App does not provide an info.xml file" : "Appen har ingen info.xml fil",
- "App cannot be installed because appinfo file cannot be read." : "Appen kan inte installeras eftersom app-informationen inte kan läsas i filen.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signaturen kunde inte kontrolleras. Vänligen kontakta appens utvecklare och kontrollera administratörsinställningarna.",
- "App can't be installed because of not allowed code in the App" : "Appen kan inte installeras eftersom att den innehåller otillåten kod",
- "App can't be installed because it is not compatible with this version of the server" : "Appen kan inte installeras eftersom den inte är förenlig med den här versionen av servern",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan inte installeras eftersom att den innehåller etiketten <shipped>true</shipped> vilket inte är tillåtet för icke inkluderade appar",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Appen kan inte installeras eftersom det är fel version på info.xml och stämmer inte överens med versionen från \"App Store\"",
- "Logging" : "Loggning",
- "Recommended" : "Rekomenderad",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattformen stöds inte",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Att köra en Nextcloud-Server på Microsoft Windows-plattformen stöds inte. Vi föreslår att du använder en Linux-server i en virtuell maskin om du inte har möjlighet att migrera själva servern.",
- "Storage not available" : "Lagringsutrymme ej tillgängligt"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
+ "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
+ "%s shared »%s« with you" : "%s delade »%s« med dig",
+ "%s via %s" : "%s via %s",
+ "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
+ "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
+ "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
+ "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 1bbef43458c..676e62f3cab 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -36,16 +36,24 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n saat önce","%n saat önce"],
"_%n minute ago_::_%n minutes ago_" : ["%n dakika önce","%n dakika önce"],
"seconds ago" : "saniye önce",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
"File name is a reserved word" : "Bu dosya adı sistem kullanıma ayrılmıştır",
"File name contains at least one invalid character" : "Dosya adında en az bir geçersiz karakter var",
"File name is too long" : "Dosya adı çok uzun",
"Dot files are not allowed" : "Nokta dosyalarına izin verilmiyor",
"Empty filename is not allowed" : "Boş dosya adına izin verilmiyor",
+ "This is an automatically sent email, please do not reply." : "Bu ileti otomatik olarak gönderildiğinden lütfen yanıtlamayın.",
+ "Help" : "Yardım",
+ "Apps" : "Uygulamalar",
+ "Personal" : "Kişisel",
+ "Log out" : "Oturumu Kapat",
+ "Users" : "Kullanıcılar",
+ "Admin" : "Yönetici",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Sunucu ayarları",
"Sharing" : "Paylaşım",
+ "Security" : "Güvenlik",
"Encryption" : "Şifreleme",
"Additional settings" : "Ek ayarlar",
"Tips & tricks" : "İpucu ve kolaylıklar",
@@ -57,7 +65,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle kullanıcı adı ya da parolası geçersiz",
"DB Error: \"%s\"" : "Veritabanı Hatası: \"%s\"",
"Offending command was: \"%s\"" : "Saldırgan komut: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.",
+ "You need to enter details of an existing account." : "Varolan bir hesabın bilgilerini yazmalısınız.",
"Offending command was: \"%s\", name: %s, password: %s" : "Saldırgan komut: \"%s\", kullanıcı adı: %s, parola: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL kullanıcı adı ya da parolası geçersiz",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kullanmaktan doğacak riskler size aittir!",
@@ -68,8 +76,6 @@ OC.L10N.register(
"Set an admin password." : "Bir yönetici parolası yazın.",
"Can't create or write into the data directory %s" : "%s veri klasörü oluşturulamadı ya da içine yazılamadı",
"Invalid Federated Cloud ID" : "Birleşmiş Bulut Kimliği Geçersiz",
- "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
- "%s via %s" : "%s, %s aracılığıyla",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşılamadı",
"Sharing %s failed, because the file does not exist" : "Dosya bulunamadığından %s paylaşılamadı",
"You are not allowed to share %s" : "%s ögesini paylaşma izniniz yok",
@@ -149,23 +155,19 @@ OC.L10N.register(
"Oct." : "Eki",
"Nov." : "Kas",
"Dec." : "Ara",
- "Apps" : "Uygulamalar",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Kullanıcı adında yalnız şu karakterler kullanılabilir: \"a-z\", \"A-Z\", \"0-9\", ve \"_.@-'\"",
"A valid username must be provided" : "Geçerli bir kullanıcı adı yazmalısınız",
"Username contains whitespace at the beginning or at the end" : "Kullanıcı adının başı ya da sonunda boşluk var",
+ "Username must not consist of dots only" : "Kullanıcı adı yalnız noktalardan oluşamaz",
"A valid password must be provided" : "Geçerli bir parola yazmalısınız",
"The username is already being used" : "Bu kullanıcı adı zaten var",
- "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
- "Help" : "Yardım",
- "Personal" : "Kişisel",
- "Users" : "Kullanıcılar",
- "Admin" : "Yönetici",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması yüklenemez.",
- "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından yüklenemez.",
+ "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
"App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için yüklenemiyor: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için kurulamıyor: %s",
"a safe home for all your data" : "verileriniz için güvenli bir barınak",
"File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin",
"Can't read file" : "Dosya okunamadı",
@@ -173,17 +175,17 @@ OC.L10N.register(
"Authentication error" : "Kimlik doğrulama hatası",
"Token expired. Please reload page." : "Kodun süresi dolmuş. Lütfen sayfayı yenileyin.",
"Unknown user" : "Kullanıcı bilinmiyor",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) yüklü değil.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) kurulmamış.",
"Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor",
"Cannot write into \"apps\" directory" : "\"apps\" klasörüne 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 sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.",
- "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)",
+ "Cannot create \"data\" directory" : "\"data\" klasörü oluşturulamadı",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni 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 klasöre yazma izni verilerek%s düzeltilebilir.",
"Setting locale to %s failed" : "Dil %s olarak ayarlanamadı",
- "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
+ "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize kurun ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülü kurması için sunucu yöneticinizle görüşün.",
- "PHP module %s not installed." : "PHP %s modülü yüklü değil.",
+ "PHP module %s not installed." : "PHP %s modülü kurulmamış.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ayarı \"%s\" olarak ayarlanmamış.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "php.ini dosyasında bu ayar yapıldığında Nextcloud yeniden çalışır",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değeri yerine \"%s\" olarak ayarlanmış",
@@ -197,10 +199,10 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli",
"Please upgrade your database version" : "Lütfen veritabanı sürümünüzü yükseltin",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Lütfen izinleri 0770 olarak ayarlayarak diğer kullanıcıların klasörü görebilmesini sağlayın.",
- "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir",
- "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır",
+ "Your data directory is readable by other users" : "Veri klasörünüz diğer kullanıcılar tarafından okunabilir",
+ "Your data directory must be an absolute path" : "Veri klasörünüz mutlak bir yol olmalıdır",
"Check the value of \"datadirectory\" in your configuration" : "Yapılandırmanızdaki \"datadirectory\" seçeneğini denetleyin",
- "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz",
+ "Your data directory is invalid" : "Veri klasörünüz geçersiz",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Lütfen veri klasörünün kökünde \".ocdata\" dosyasının bulunduğunu denetleyin.",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" için %d kilit türü alınamadı.",
"Storage unauthorized. %s" : "Depolamaya erişim izni yok. %s",
@@ -208,26 +210,13 @@ OC.L10N.register(
"Storage connection error. %s" : "Depolama bağlantısı sorunu. %s",
"Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor",
"Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s",
- "4-byte characters are not supported in file names" : "Dosya adlarında 4 bayt karakterler desteklenmiyor",
- "App directory already exists" : "Uygulama klasörü zaten var",
- "Can't create app folder. Please fix permissions. %s" : "Uygulama klasörü oluşturulamadı. Lütfen izinleri düzeltin. %s",
- "Archive does not contain a directory named %s" : "Arşivde %s adında bir klasör yok",
- "No source specified when installing app" : "Uygulamanın kurulması için bir kaynak belirtilmemiş",
- "No href specified when installing app from http" : "Uygulamanın http üzerinden kurulması için href belirtilmemiş",
- "No path specified when installing app from local file" : "Uygulamanın yerel dosyadan kurulması için bir dosya yolu belirtilmemiş",
- "Archives of type %s are not supported" : "%s arşiv türü desteklenmiyor",
- "Failed to open archive when installing app" : "Uygulamanın kurulması için arşiv dosyası açılamadı",
- "App does not provide an info.xml file" : "Uygulamanın info.xml dosyası yok",
- "App cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından uygulama kurulamıyor.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "İmza doğrulanamadı. Lütfen uygulama geliştiricisi ile görüşün ve yönetici sayfanıza bakın.",
- "App can't be installed because of not allowed code in the App" : "İçinde izin verilmeyen kodlar bulunduğundan uygulama kurulamıyor",
- "App can't be installed because it is not compatible with this version of the server" : "Sunucu sürümüyle uyumlu olmadığından uygulama kurulamıyor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Uygulama, çekirdek kodu ile birlikte dağıtılmayan bir uygulama olmasına rağmen <shipped>true</shipped> etiketini içerdiği için kurulamıyor",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Uygulama, info.xml dosyasında belirtilen sürüm ile uygulama mağazasında belirtilen sürüm aynı olmadığından kurulamıyor",
- "Logging" : "Günlükleme",
- "Recommended" : "Önerilen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platformu desteklenmiyor",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Nextcloud sunucusunun Microsoft Windows platformunda çalıştırılması desteklenmiyor. Sunucuyu değiştiremiyorsanız bu sunucu üzerine sanal bir Linux sunucusu kurmanız önerilir.",
- "Storage not available" : "Depolama kullanılamıyor"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
+ "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.",
+ "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
+ "%s via %s" : "%s, %s aracılığıyla",
+ "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)",
+ "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir",
+ "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır",
+ "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index e8d32e80b93..02b2d17cc50 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -34,16 +34,24 @@
"_%n hour ago_::_%n hours ago_" : ["%n saat önce","%n saat önce"],
"_%n minute ago_::_%n minutes ago_" : ["%n dakika önce","%n dakika önce"],
"seconds ago" : "saniye önce",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
"File name is a reserved word" : "Bu dosya adı sistem kullanıma ayrılmıştır",
"File name contains at least one invalid character" : "Dosya adında en az bir geçersiz karakter var",
"File name is too long" : "Dosya adı çok uzun",
"Dot files are not allowed" : "Nokta dosyalarına izin verilmiyor",
"Empty filename is not allowed" : "Boş dosya adına izin verilmiyor",
+ "This is an automatically sent email, please do not reply." : "Bu ileti otomatik olarak gönderildiğinden lütfen yanıtlamayın.",
+ "Help" : "Yardım",
+ "Apps" : "Uygulamalar",
+ "Personal" : "Kişisel",
+ "Log out" : "Oturumu Kapat",
+ "Users" : "Kullanıcılar",
+ "Admin" : "Yönetici",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Sunucu ayarları",
"Sharing" : "Paylaşım",
+ "Security" : "Güvenlik",
"Encryption" : "Şifreleme",
"Additional settings" : "Ek ayarlar",
"Tips & tricks" : "İpucu ve kolaylıklar",
@@ -55,7 +63,7 @@
"Oracle username and/or password not valid" : "Oracle kullanıcı adı ya da parolası geçersiz",
"DB Error: \"%s\"" : "Veritabanı Hatası: \"%s\"",
"Offending command was: \"%s\"" : "Saldırgan komut: \"%s\"",
- "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.",
+ "You need to enter details of an existing account." : "Varolan bir hesabın bilgilerini yazmalısınız.",
"Offending command was: \"%s\", name: %s, password: %s" : "Saldırgan komut: \"%s\", kullanıcı adı: %s, parola: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL kullanıcı adı ya da parolası geçersiz",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kullanmaktan doğacak riskler size aittir!",
@@ -66,8 +74,6 @@
"Set an admin password." : "Bir yönetici parolası yazın.",
"Can't create or write into the data directory %s" : "%s veri klasörü oluşturulamadı ya da içine yazılamadı",
"Invalid Federated Cloud ID" : "Birleşmiş Bulut Kimliği Geçersiz",
- "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
- "%s via %s" : "%s, %s aracılığıyla",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşılamadı",
"Sharing %s failed, because the file does not exist" : "Dosya bulunamadığından %s paylaşılamadı",
"You are not allowed to share %s" : "%s ögesini paylaşma izniniz yok",
@@ -147,23 +153,19 @@
"Oct." : "Eki",
"Nov." : "Kas",
"Dec." : "Ara",
- "Apps" : "Uygulamalar",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Kullanıcı adında yalnız şu karakterler kullanılabilir: \"a-z\", \"A-Z\", \"0-9\", ve \"_.@-'\"",
"A valid username must be provided" : "Geçerli bir kullanıcı adı yazmalısınız",
"Username contains whitespace at the beginning or at the end" : "Kullanıcı adının başı ya da sonunda boşluk var",
+ "Username must not consist of dots only" : "Kullanıcı adı yalnız noktalardan oluşamaz",
"A valid password must be provided" : "Geçerli bir parola yazmalısınız",
"The username is already being used" : "Bu kullanıcı adı zaten var",
- "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
- "Help" : "Yardım",
- "Personal" : "Kişisel",
- "Users" : "Kullanıcılar",
- "Admin" : "Yönetici",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması yüklenemez.",
- "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından yüklenemez.",
+ "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
"App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için yüklenemiyor: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için kurulamıyor: %s",
"a safe home for all your data" : "verileriniz için güvenli bir barınak",
"File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin",
"Can't read file" : "Dosya okunamadı",
@@ -171,17 +173,17 @@
"Authentication error" : "Kimlik doğrulama hatası",
"Token expired. Please reload page." : "Kodun süresi dolmuş. Lütfen sayfayı yenileyin.",
"Unknown user" : "Kullanıcı bilinmiyor",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) yüklü değil.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) kurulmamış.",
"Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor",
"Cannot write into \"apps\" directory" : "\"apps\" klasörüne 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 sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.",
- "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)",
+ "Cannot create \"data\" directory" : "\"data\" klasörü oluşturulamadı",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni 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 klasöre yazma izni verilerek%s düzeltilebilir.",
"Setting locale to %s failed" : "Dil %s olarak ayarlanamadı",
- "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
+ "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize kurun ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülü kurması için sunucu yöneticinizle görüşün.",
- "PHP module %s not installed." : "PHP %s modülü yüklü değil.",
+ "PHP module %s not installed." : "PHP %s modülü kurulmamış.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ayarı \"%s\" olarak ayarlanmamış.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "php.ini dosyasında bu ayar yapıldığında Nextcloud yeniden çalışır",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değeri yerine \"%s\" olarak ayarlanmış",
@@ -195,10 +197,10 @@
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 gerekli",
"Please upgrade your database version" : "Lütfen veritabanı sürümünüzü yükseltin",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Lütfen izinleri 0770 olarak ayarlayarak diğer kullanıcıların klasörü görebilmesini sağlayın.",
- "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir",
- "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır",
+ "Your data directory is readable by other users" : "Veri klasörünüz diğer kullanıcılar tarafından okunabilir",
+ "Your data directory must be an absolute path" : "Veri klasörünüz mutlak bir yol olmalıdır",
"Check the value of \"datadirectory\" in your configuration" : "Yapılandırmanızdaki \"datadirectory\" seçeneğini denetleyin",
- "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz",
+ "Your data directory is invalid" : "Veri klasörünüz geçersiz",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Lütfen veri klasörünün kökünde \".ocdata\" dosyasının bulunduğunu denetleyin.",
"Could not obtain lock type %d on \"%s\"." : "\"%s\" için %d kilit türü alınamadı.",
"Storage unauthorized. %s" : "Depolamaya erişim izni yok. %s",
@@ -206,26 +208,13 @@
"Storage connection error. %s" : "Depolama bağlantısı sorunu. %s",
"Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor",
"Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s",
- "4-byte characters are not supported in file names" : "Dosya adlarında 4 bayt karakterler desteklenmiyor",
- "App directory already exists" : "Uygulama klasörü zaten var",
- "Can't create app folder. Please fix permissions. %s" : "Uygulama klasörü oluşturulamadı. Lütfen izinleri düzeltin. %s",
- "Archive does not contain a directory named %s" : "Arşivde %s adında bir klasör yok",
- "No source specified when installing app" : "Uygulamanın kurulması için bir kaynak belirtilmemiş",
- "No href specified when installing app from http" : "Uygulamanın http üzerinden kurulması için href belirtilmemiş",
- "No path specified when installing app from local file" : "Uygulamanın yerel dosyadan kurulması için bir dosya yolu belirtilmemiş",
- "Archives of type %s are not supported" : "%s arşiv türü desteklenmiyor",
- "Failed to open archive when installing app" : "Uygulamanın kurulması için arşiv dosyası açılamadı",
- "App does not provide an info.xml file" : "Uygulamanın info.xml dosyası yok",
- "App cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından uygulama kurulamıyor.",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "İmza doğrulanamadı. Lütfen uygulama geliştiricisi ile görüşün ve yönetici sayfanıza bakın.",
- "App can't be installed because of not allowed code in the App" : "İçinde izin verilmeyen kodlar bulunduğundan uygulama kurulamıyor",
- "App can't be installed because it is not compatible with this version of the server" : "Sunucu sürümüyle uyumlu olmadığından uygulama kurulamıyor",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Uygulama, çekirdek kodu ile birlikte dağıtılmayan bir uygulama olmasına rağmen <shipped>true</shipped> etiketini içerdiği için kurulamıyor",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Uygulama, info.xml dosyasında belirtilen sürüm ile uygulama mağazasında belirtilen sürüm aynı olmadığından kurulamıyor",
- "Logging" : "Günlükleme",
- "Recommended" : "Önerilen",
- "Microsoft Windows Platform is not supported" : "Microsoft Windows Platformu desteklenmiyor",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Nextcloud sunucusunun Microsoft Windows platformunda çalıştırılması desteklenmiyor. Sunucuyu değiştiremiyorsanız bu sunucu üzerine sanal bir Linux sunucusu kurmanız önerilir.",
- "Storage not available" : "Depolama kullanılamıyor"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.",
+ "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.",
+ "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
+ "%s via %s" : "%s, %s aracılığıyla",
+ "Cannot create \"data\" directory (%s)" : "\"Veri\" klasörü oluşturulamadı (%s)",
+ "Data directory (%s) is readable by other users" : "Veri klasörü (%s) diğer kullanıcılar tarafından okunabilir",
+ "Data directory (%s) must be an absolute path" : "Veri klasörü (%s) mutlak bir yol olmalıdır",
+ "Data directory (%s) is invalid" : "Veri klasörü (%s) geçersiz"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index e2c683b68bb..06a00a8ce11 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -36,16 +36,22 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
"seconds ago" : "秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
"File name is a reserved word" : "文件名包含敏感字符",
"File name contains at least one invalid character" : "文件名中存在至少一个非法字符",
"File name is too long" : "文件名过长",
"Dot files are not allowed" : ".文件 不被允许",
"Empty filename is not allowed" : "不允许使用空名称。",
+ "Help" : "帮助",
+ "Apps" : "应用",
+ "Personal" : "个人",
+ "Log out" : "注销",
+ "Users" : "用户",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "服务器设置",
"Sharing" : "分享",
+ "Security" : "安全",
"Encryption" : "加密",
"Additional settings" : "其他设置",
"Tips & tricks" : "小提示",
@@ -57,7 +63,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle 数据库用户名和/或密码无效",
"DB Error: \"%s\"" : "数据库错误:\"%s\"",
"Offending command was: \"%s\"" : "冲突命令为:\"%s\"",
- "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
"Offending command was: \"%s\", name: %s, password: %s" : "冲突命令为:\"%s\",名称:%s,密码:%s",
"PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
@@ -68,8 +73,6 @@ OC.L10N.register(
"Set an admin password." : "请设置一个管理员密码。",
"Can't create or write into the data directory %s" : "无法创建或写入数据目录 %s",
"Invalid Federated Cloud ID" : "无效的联合云ID",
- "%s shared »%s« with you" : "%s 向您分享了 »%s«",
- "%s via %s" : "%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",
@@ -149,18 +152,13 @@ OC.L10N.register(
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Apps" : "应用",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”,“A-Z”,“0-9”和\"_.@-'\"",
"A valid username must be provided" : "必须提供合法的用户名",
"Username contains whitespace at the beginning or at the end" : "用户名在开头或结尾处包含空格",
"A valid password must be provided" : "必须提供合法的密码",
"The username is already being used" : "用户名已被使用",
- "Login canceled by app" : "已通过应用取消登录",
"User disabled" : "用户已禁用",
- "Help" : "帮助",
- "Personal" : "个人",
- "Users" : "用户",
- "Admin" : "管理",
+ "Login canceled by app" : "已通过应用取消登录",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "无法安装应用\"%s\",因为无法读取appinfo文件.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "应用程式 \"%s\" 无法安装,因为它与这个版本的服务器不兼容.",
"No app name specified" : "没有指定的 App 名称",
@@ -177,7 +175,6 @@ OC.L10N.register(
"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 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.",
- "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 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 失败",
@@ -197,10 +194,7 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9",
"Please upgrade your database version" : "请升级您的数据库版本",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.",
- "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
- "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
"Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值",
- "Data directory (%s) is invalid" : "数据目录 (%s) 无效",
"Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.",
"Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.",
"Storage unauthorized. %s" : "存储认证失败. %s",
@@ -208,26 +202,13 @@ OC.L10N.register(
"Storage connection error. %s" : "存储连接错误. %s",
"Storage is temporarily not available" : "存储暂时不可用",
"Storage connection timeout. %s" : "存储连接超时. %s",
- "4-byte characters are not supported in file names" : "文件名中不支持 4 字节字符",
- "App directory already exists" : "应用目录已经存在",
- "Can't create app folder. Please fix permissions. %s" : "无法创建应用文件夹. 请修改权限. %s",
- "Archive does not contain a directory named %s" : "压缩文件中不包含目录 %s",
- "No source specified when installing app" : "安装应用时未指定来源",
- "No href specified when installing app from http" : "从 http 安装应用时未指定链接",
- "No path specified when installing app from local file" : "从本地文件安装应用时未指定路径",
- "Archives of type %s are not supported" : "不支持 %s 的压缩格式",
- "Failed to open archive when installing app" : "安装应用时打开文件失败",
- "App does not provide an info.xml file" : "应用未提供 info.xml 文件",
- "App cannot be installed because appinfo file cannot be read." : "无法安装应用, 因为无法读取应用信息文件",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "签名检查失败. 请联系应用开发者并检查您的管理界面",
- "App can't be installed because of not allowed code in the App" : "无法安装应用, 因为应用中包含不允许的代码",
- "App can't be installed because it is not compatible with this version of the server" : "无法安装应用, 因为应用不兼容当前服务器的版本",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "无法安装应用, 因为应用包含 <shipped>true</shipped> 标签",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "无法安装应用, 因为 info.xml 中的版本与应用市场中的版本不同",
- "Logging" : "日志",
- "Recommended" : "推荐",
- "Microsoft Windows Platform is not supported" : "不支持 Microsoft Windows 平台",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "不支持在 Microsoft Windows 平台运行 Nextcloud 服务器. 如果您没有迁移服务器的计划, 我们建议您在虚拟机中使用 Linux 服务器.",
- "Storage not available" : "存储空间不可用"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
+ "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
+ "%s shared »%s« with you" : "%s 向您分享了 »%s«",
+ "%s via %s" : "%s 通过 %s",
+ "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
+ "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
+ "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
+ "Data directory (%s) is invalid" : "数据目录 (%s) 无效"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index f5b88f87ad9..1094380ae5b 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -34,16 +34,22 @@
"_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
"seconds ago" : "秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
"File name is a reserved word" : "文件名包含敏感字符",
"File name contains at least one invalid character" : "文件名中存在至少一个非法字符",
"File name is too long" : "文件名过长",
"Dot files are not allowed" : ".文件 不被允许",
"Empty filename is not allowed" : "不允许使用空名称。",
+ "Help" : "帮助",
+ "Apps" : "应用",
+ "Personal" : "个人",
+ "Log out" : "注销",
+ "Users" : "用户",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "服务器设置",
"Sharing" : "分享",
+ "Security" : "安全",
"Encryption" : "加密",
"Additional settings" : "其他设置",
"Tips & tricks" : "小提示",
@@ -55,7 +61,6 @@
"Oracle username and/or password not valid" : "Oracle 数据库用户名和/或密码无效",
"DB Error: \"%s\"" : "数据库错误:\"%s\"",
"Offending command was: \"%s\"" : "冲突命令为:\"%s\"",
- "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
"Offending command was: \"%s\", name: %s, password: %s" : "冲突命令为:\"%s\",名称:%s,密码:%s",
"PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
@@ -66,8 +71,6 @@
"Set an admin password." : "请设置一个管理员密码。",
"Can't create or write into the data directory %s" : "无法创建或写入数据目录 %s",
"Invalid Federated Cloud ID" : "无效的联合云ID",
- "%s shared »%s« with you" : "%s 向您分享了 »%s«",
- "%s via %s" : "%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",
@@ -147,18 +150,13 @@
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Apps" : "应用",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”,“A-Z”,“0-9”和\"_.@-'\"",
"A valid username must be provided" : "必须提供合法的用户名",
"Username contains whitespace at the beginning or at the end" : "用户名在开头或结尾处包含空格",
"A valid password must be provided" : "必须提供合法的密码",
"The username is already being used" : "用户名已被使用",
- "Login canceled by app" : "已通过应用取消登录",
"User disabled" : "用户已禁用",
- "Help" : "帮助",
- "Personal" : "个人",
- "Users" : "用户",
- "Admin" : "管理",
+ "Login canceled by app" : "已通过应用取消登录",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "无法安装应用\"%s\",因为无法读取appinfo文件.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "应用程式 \"%s\" 无法安装,因为它与这个版本的服务器不兼容.",
"No app name specified" : "没有指定的 App 名称",
@@ -175,7 +173,6 @@
"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 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.",
- "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 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 失败",
@@ -195,10 +192,7 @@
"PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9",
"Please upgrade your database version" : "请升级您的数据库版本",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.",
- "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
- "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
"Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值",
- "Data directory (%s) is invalid" : "数据目录 (%s) 无效",
"Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.",
"Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.",
"Storage unauthorized. %s" : "存储认证失败. %s",
@@ -206,26 +200,13 @@
"Storage connection error. %s" : "存储连接错误. %s",
"Storage is temporarily not available" : "存储暂时不可用",
"Storage connection timeout. %s" : "存储连接超时. %s",
- "4-byte characters are not supported in file names" : "文件名中不支持 4 字节字符",
- "App directory already exists" : "应用目录已经存在",
- "Can't create app folder. Please fix permissions. %s" : "无法创建应用文件夹. 请修改权限. %s",
- "Archive does not contain a directory named %s" : "压缩文件中不包含目录 %s",
- "No source specified when installing app" : "安装应用时未指定来源",
- "No href specified when installing app from http" : "从 http 安装应用时未指定链接",
- "No path specified when installing app from local file" : "从本地文件安装应用时未指定路径",
- "Archives of type %s are not supported" : "不支持 %s 的压缩格式",
- "Failed to open archive when installing app" : "安装应用时打开文件失败",
- "App does not provide an info.xml file" : "应用未提供 info.xml 文件",
- "App cannot be installed because appinfo file cannot be read." : "无法安装应用, 因为无法读取应用信息文件",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "签名检查失败. 请联系应用开发者并检查您的管理界面",
- "App can't be installed because of not allowed code in the App" : "无法安装应用, 因为应用中包含不允许的代码",
- "App can't be installed because it is not compatible with this version of the server" : "无法安装应用, 因为应用不兼容当前服务器的版本",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "无法安装应用, 因为应用包含 <shipped>true</shipped> 标签",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "无法安装应用, 因为 info.xml 中的版本与应用市场中的版本不同",
- "Logging" : "日志",
- "Recommended" : "推荐",
- "Microsoft Windows Platform is not supported" : "不支持 Microsoft Windows 平台",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "不支持在 Microsoft Windows 平台运行 Nextcloud 服务器. 如果您没有迁移服务器的计划, 我们建议您在虚拟机中使用 Linux 服务器.",
- "Storage not available" : "存储空间不可用"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
+ "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
+ "%s shared »%s« with you" : "%s 向您分享了 »%s«",
+ "%s via %s" : "%s 通过 %s",
+ "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
+ "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
+ "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
+ "Data directory (%s) is invalid" : "数据目录 (%s) 无效"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index f03e9849cb9..504287aeac7 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -30,12 +30,16 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
"seconds ago" : "幾秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員",
"File name is a reserved word" : "檔案名稱是預設保留字",
"File name contains at least one invalid character" : "檔案名稱含有不合法的字元",
"File name is too long" : "檔案名稱太長",
"Dot files are not allowed" : "不允許小數點開頭的檔案",
"Empty filename is not allowed" : "不允許空白的檔名",
+ "Help" : "說明",
+ "Apps" : "應用程式",
+ "Personal" : "個人",
+ "Users" : "使用者",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "伺服器設定",
@@ -51,7 +55,6 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Oracle 用戶名和/或密碼無效",
"DB Error: \"%s\"" : "資料庫錯誤:\"%s\"",
"Offending command was: \"%s\"" : "有問題的指令是:\"%s\"",
- "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。",
"Offending command was: \"%s\", name: %s, password: %s" : "有問題的指令是:\"%s\" ,使用者:\"%s\",密碼:\"%s\"",
"PostgreSQL username and/or password not valid" : "PostgreSQL 用戶名和/或密碼無效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "不支援 Mac OS X 而且 %s 在這個平台上面無法正常運作,請自行衡量風險!",
@@ -62,8 +65,6 @@ OC.L10N.register(
"Set an admin password." : "設定管理員密碼。",
"Can't create or write into the data directory %s" : "無法建立或寫入資料目錄 %s",
"Invalid Federated Cloud ID" : "無效的雲端聯盟ID:",
- "%s shared »%s« with you" : "%s 與您分享了 %s",
- "%s via %s" : "%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",
@@ -143,18 +144,13 @@ OC.L10N.register(
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Apps" : "應用程式",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "使用者名稱當中只能包含下列字元:\"a-z\", \"A-Z\", \"0-9\", 和 \"_.@-'\"",
"A valid username must be provided" : "必須提供一個有效的用戶名",
"Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白",
"A valid password must be provided" : "一定要提供一個有效的密碼",
"The username is already being used" : "這個使用者名稱已經有人使用了",
- "Login canceled by app" : "程式取消登入",
"User disabled" : "使用者取消",
- "Help" : "說明",
- "Personal" : "個人",
- "Users" : "使用者",
- "Admin" : "管理",
+ "Login canceled by app" : "程式取消登入",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。",
"No app name specified" : "沒有指定應用程式名稱",
@@ -171,7 +167,6 @@ OC.L10N.register(
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題",
"Setting locale to %s failed" : "設定語系為 %s 失敗",
@@ -191,36 +186,20 @@ OC.L10N.register(
"PostgreSQL >= 9 required" : "需要 PostgreSQL 版本 >= 9",
"Please upgrade your database version" : "請升級您的資料庫版本",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "請將該目錄權限設定為 0770 ,以免其他使用者讀取",
- "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取",
- "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑",
"Check the value of \"datadirectory\" in your configuration" : "請檢查您的設定檔中 \"datadirectory\" 的值",
- "Data directory (%s) is invalid" : "資料目錄 (%s) 無效",
"Please check that the data directory contains a file \".ocdata\" in its root." : "請確保資料目錄當中包含一個 .ocdata 的檔案",
"Could not obtain lock type %d on \"%s\"." : "無法取得鎖定:類型 %d ,檔案 %s",
"Storage unauthorized. %s" : "儲存空間未經授權。%s",
"Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s",
"Storage connection error. %s" : "儲存空間連線錯誤。%s",
"Storage connection timeout. %s" : "儲存空間連線逾時。%s",
- "4-byte characters are not supported in file names" : "檔案名稱不支援4位元的字元",
- "App directory already exists" : "應用程式目錄已經存在",
- "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s",
- "Archive does not contain a directory named %s" : "檔案文件未包含目錄名稱 %s",
- "No source specified when installing app" : "沒有指定應用程式安裝來源",
- "No href specified when installing app from http" : "從 http 安裝應用程式,找不到 href 屬性",
- "No path specified when installing app from local file" : "從本地檔案安裝應用程式時沒有指定路徑",
- "Archives of type %s are not supported" : "不支援 %s 格式的壓縮檔",
- "Failed to open archive when installing app" : "安裝應用程式時無法開啓壓縮檔",
- "App does not provide an info.xml file" : "應用程式沒有提供 info.xml 檔案",
- "App cannot be installed because appinfo file cannot be read." : "程式無法安裝,因為無法讀取appinfo檔案。",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "無法驗證數位簽章,請聯絡 app 開發者,並檢查您的管理頁面",
- "App can't be installed because of not allowed code in the App" : "無法安裝應用程式因為在當中找到危險的代碼",
- "App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
- "Logging" : "記錄",
- "Recommended" : "建議",
- "Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
- "Storage not available" : "無法存取儲存空間"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員",
+ "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。",
+ "%s shared »%s« with you" : "%s 與您分享了 %s",
+ "%s via %s" : "%s 經由 %s",
+ "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)",
+ "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取",
+ "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑",
+ "Data directory (%s) is invalid" : "資料目錄 (%s) 無效"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 7857eb4a7ea..08771fb6633 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -28,12 +28,16 @@
"_%n hour ago_::_%n hours ago_" : ["%n 小時前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分鐘前"],
"seconds ago" : "幾秒前",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員",
"File name is a reserved word" : "檔案名稱是預設保留字",
"File name contains at least one invalid character" : "檔案名稱含有不合法的字元",
"File name is too long" : "檔案名稱太長",
"Dot files are not allowed" : "不允許小數點開頭的檔案",
"Empty filename is not allowed" : "不允許空白的檔名",
+ "Help" : "說明",
+ "Apps" : "應用程式",
+ "Personal" : "個人",
+ "Users" : "使用者",
+ "Admin" : "管理",
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "伺服器設定",
@@ -49,7 +53,6 @@
"Oracle username and/or password not valid" : "Oracle 用戶名和/或密碼無效",
"DB Error: \"%s\"" : "資料庫錯誤:\"%s\"",
"Offending command was: \"%s\"" : "有問題的指令是:\"%s\"",
- "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。",
"Offending command was: \"%s\", name: %s, password: %s" : "有問題的指令是:\"%s\" ,使用者:\"%s\",密碼:\"%s\"",
"PostgreSQL username and/or password not valid" : "PostgreSQL 用戶名和/或密碼無效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "不支援 Mac OS X 而且 %s 在這個平台上面無法正常運作,請自行衡量風險!",
@@ -60,8 +63,6 @@
"Set an admin password." : "設定管理員密碼。",
"Can't create or write into the data directory %s" : "無法建立或寫入資料目錄 %s",
"Invalid Federated Cloud ID" : "無效的雲端聯盟ID:",
- "%s shared »%s« with you" : "%s 與您分享了 %s",
- "%s via %s" : "%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",
@@ -141,18 +142,13 @@
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Apps" : "應用程式",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "使用者名稱當中只能包含下列字元:\"a-z\", \"A-Z\", \"0-9\", 和 \"_.@-'\"",
"A valid username must be provided" : "必須提供一個有效的用戶名",
"Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白",
"A valid password must be provided" : "一定要提供一個有效的密碼",
"The username is already being used" : "這個使用者名稱已經有人使用了",
- "Login canceled by app" : "程式取消登入",
"User disabled" : "使用者取消",
- "Help" : "說明",
- "Personal" : "個人",
- "Users" : "使用者",
- "Admin" : "管理",
+ "Login canceled by app" : "程式取消登入",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。",
"No app name specified" : "沒有指定應用程式名稱",
@@ -169,7 +165,6 @@
"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\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題",
"Setting locale to %s failed" : "設定語系為 %s 失敗",
@@ -189,36 +184,20 @@
"PostgreSQL >= 9 required" : "需要 PostgreSQL 版本 >= 9",
"Please upgrade your database version" : "請升級您的資料庫版本",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "請將該目錄權限設定為 0770 ,以免其他使用者讀取",
- "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取",
- "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑",
"Check the value of \"datadirectory\" in your configuration" : "請檢查您的設定檔中 \"datadirectory\" 的值",
- "Data directory (%s) is invalid" : "資料目錄 (%s) 無效",
"Please check that the data directory contains a file \".ocdata\" in its root." : "請確保資料目錄當中包含一個 .ocdata 的檔案",
"Could not obtain lock type %d on \"%s\"." : "無法取得鎖定:類型 %d ,檔案 %s",
"Storage unauthorized. %s" : "儲存空間未經授權。%s",
"Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s",
"Storage connection error. %s" : "儲存空間連線錯誤。%s",
"Storage connection timeout. %s" : "儲存空間連線逾時。%s",
- "4-byte characters are not supported in file names" : "檔案名稱不支援4位元的字元",
- "App directory already exists" : "應用程式目錄已經存在",
- "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s",
- "Archive does not contain a directory named %s" : "檔案文件未包含目錄名稱 %s",
- "No source specified when installing app" : "沒有指定應用程式安裝來源",
- "No href specified when installing app from http" : "從 http 安裝應用程式,找不到 href 屬性",
- "No path specified when installing app from local file" : "從本地檔案安裝應用程式時沒有指定路徑",
- "Archives of type %s are not supported" : "不支援 %s 格式的壓縮檔",
- "Failed to open archive when installing app" : "安裝應用程式時無法開啓壓縮檔",
- "App does not provide an info.xml file" : "應用程式沒有提供 info.xml 檔案",
- "App cannot be installed because appinfo file cannot be read." : "程式無法安裝,因為無法讀取appinfo檔案。",
- "Signature could not get checked. Please contact the app developer and check your admin screen." : "無法驗證數位簽章,請聯絡 app 開發者,並檢查您的管理頁面",
- "App can't be installed because of not allowed code in the App" : "無法安裝應用程式因為在當中找到危險的代碼",
- "App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
- "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
- "Logging" : "記錄",
- "Recommended" : "建議",
- "Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
- "Storage not available" : "無法存取儲存空間"
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員",
+ "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。",
+ "%s shared »%s« with you" : "%s 與您分享了 %s",
+ "%s via %s" : "%s 經由 %s",
+ "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)",
+ "Data directory (%s) is readable by other users" : "資料目錄 (%s) 可以被其他使用者讀取",
+ "Data directory (%s) must be an absolute path" : "資料夾目錄(%s) 必須式絕對路徑",
+ "Data directory (%s) is invalid" : "資料目錄 (%s) 無效"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php
index 3701421a20f..2eb518d4f04 100644
--- a/lib/private/Accounts/AccountManager.php
+++ b/lib/private/Accounts/AccountManager.php
@@ -94,7 +94,7 @@ class AccountManager {
if ($updated) {
$this->eventDispatcher->dispatch(
'OC\AccountManager::userUpdated',
- new GenericEvent($user)
+ new GenericEvent($user, $data)
);
}
}
diff --git a/lib/private/Activity/EventMerger.php b/lib/private/Activity/EventMerger.php
index 91e79068665..04aa41b2690 100644
--- a/lib/private/Activity/EventMerger.php
+++ b/lib/private/Activity/EventMerger.php
@@ -201,25 +201,25 @@ class EventMerger implements IEventMerger {
case 2:
$replacement = $this->l10n->t(
'%1$s and %2$s',
- ['{' . $parameter . '1}', '{' . $parameter . '2}']
+ ['{' . $parameter . '2}', '{' . $parameter . '1}']
);
break;
case 3:
$replacement = $this->l10n->t(
'%1$s, %2$s and %3$s',
- ['{' . $parameter . '1}', '{' . $parameter . '2}', '{' . $parameter . '3}']
+ ['{' . $parameter . '3}', '{' . $parameter . '2}', '{' . $parameter . '1}']
);
break;
case 4:
$replacement = $this->l10n->t(
'%1$s, %2$s, %3$s and %4$s',
- ['{' . $parameter . '1}', '{' . $parameter . '2}', '{' . $parameter . '3}', '{' . $parameter . '4}']
+ ['{' . $parameter . '4}', '{' . $parameter . '3}', '{' . $parameter . '2}', '{' . $parameter . '1}']
);
break;
case 5:
$replacement = $this->l10n->t(
'%1$s, %2$s, %3$s, %4$s and %5$s',
- ['{' . $parameter . '1}', '{' . $parameter . '2}', '{' . $parameter . '3}', '{' . $parameter . '4}', '{' . $parameter . '5}']
+ ['{' . $parameter . '5}', '{' . $parameter . '4}', '{' . $parameter . '3}', '{' . $parameter . '2}', '{' . $parameter . '1}']
);
break;
default:
diff --git a/lib/private/App/CodeChecker/CodeChecker.php b/lib/private/App/CodeChecker/CodeChecker.php
index 5a3cc3122cb..291bedee92f 100644
--- a/lib/private/App/CodeChecker/CodeChecker.php
+++ b/lib/private/App/CodeChecker/CodeChecker.php
@@ -26,8 +26,6 @@ namespace OC\App\CodeChecker;
use OC\Hooks\BasicEmitter;
use PhpParser\Lexer;
-use PhpParser\Node;
-use PhpParser\Node\Name;
use PhpParser\NodeTraverser;
use PhpParser\Parser;
use RecursiveCallbackFilterIterator;
diff --git a/lib/private/App/Platform.php b/lib/private/App/Platform.php
index 4959ce7ae4b..344e420b7d3 100644
--- a/lib/private/App/Platform.php
+++ b/lib/private/App/Platform.php
@@ -24,7 +24,6 @@
namespace OC\App;
-use OC_Util;
use OCP\IConfig;
/**
diff --git a/lib/private/AppFramework/App.php b/lib/private/AppFramework/App.php
index 5a7bc8fad43..75b2e983fea 100644
--- a/lib/private/AppFramework/App.php
+++ b/lib/private/AppFramework/App.php
@@ -28,7 +28,6 @@
namespace OC\AppFramework;
use OC\AppFramework\Http\Dispatcher;
-use OC_App;
use OC\AppFramework\DependencyInjection\DIContainer;
use OCP\AppFramework\Http;
use OCP\AppFramework\QueryException;
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 4fb13b09ae0..04747485c13 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -40,6 +40,7 @@ use OC\AppFramework\Http\Output;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
use OC\AppFramework\Middleware\Security\CORSMiddleware;
use OC\AppFramework\Middleware\OCSMiddleware;
+use OC\AppFramework\Middleware\Security\RateLimitingMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
@@ -169,7 +170,6 @@ class DIContainer extends SimpleContainer implements IAppContainer {
);
});
-
/**
* App Framework APIs
*/
@@ -224,12 +224,34 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$app->isAdminUser(),
$server->getContentSecurityPolicyManager(),
$server->getCsrfTokenManager(),
- $server->getContentSecurityPolicyNonceManager(),
- $server->getBruteForceThrottler()
+ $server->getContentSecurityPolicyNonceManager()
);
});
+ $this->registerService('BruteForceMiddleware', function($c) use ($app) {
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
+ return new OC\AppFramework\Middleware\Security\BruteForceMiddleware(
+ $c['ControllerMethodReflector'],
+ $server->getBruteForceThrottler(),
+ $server->getRequest()
+ );
+ });
+
+ $this->registerService('RateLimitingMiddleware', function($c) use ($app) {
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
+ return new RateLimitingMiddleware(
+ $server->getRequest(),
+ $server->getUserSession(),
+ $c['ControllerMethodReflector'],
+ $c->query(OC\Security\RateLimiting\Limiter::class)
+ );
+ });
+
$this->registerService('CORSMiddleware', function($c) {
return new CORSMiddleware(
$c['Request'],
@@ -269,7 +291,9 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$dispatcher->registerMiddleware($c['CORSMiddleware']);
$dispatcher->registerMiddleware($c['OCSMiddleware']);
$dispatcher->registerMiddleware($c['SecurityMiddleware']);
- $dispatcher->registerMiddleWare($c['TwoFactorMiddleware']);
+ $dispatcher->registerMiddleware($c['TwoFactorMiddleware']);
+ $dispatcher->registerMiddleware($c['BruteForceMiddleware']);
+ $dispatcher->registerMiddleware($c['RateLimitingMiddleware']);
foreach($middleWares as $middleWare) {
$dispatcher->registerMiddleware($c[$middleWare]);
diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php
index fd43d468568..b39ae3e8c0c 100644
--- a/lib/private/AppFramework/Http/Request.php
+++ b/lib/private/AppFramework/Http/Request.php
@@ -401,6 +401,8 @@ class Request implements \ArrayAccess, \Countable, IRequest {
protected function getContent() {
// If the content can't be parsed into an array then return a stream resource.
if ($this->method === 'PUT'
+ && $this->getHeader('Content-Length') !== 0
+ && $this->getHeader('Content-Length') !== null
&& strpos($this->getHeader('Content-Type'), 'application/x-www-form-urlencoded') === false
&& strpos($this->getHeader('Content-Type'), 'application/json') === false
) {
@@ -576,7 +578,8 @@ class Request implements \ArrayAccess, \Countable, IRequest {
}
if(empty($this->requestId)) {
- $this->requestId = $this->secureRandom->generate(20);
+ $validChars = ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS;
+ $this->requestId = $this->secureRandom->generate(20, $validChars);
}
return $this->requestId;
diff --git a/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php b/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php
new file mode 100644
index 00000000000..b361f453bdb
--- /dev/null
+++ b/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\Bruteforce\Throttler;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Middleware;
+use OCP\IRequest;
+
+/**
+ * Class BruteForceMiddleware performs the bruteforce protection for controllers
+ * that are annotated with @BruteForceProtection(action=$action) whereas $action
+ * is the action that should be logged within the database.
+ *
+ * @package OC\AppFramework\Middleware\Security
+ */
+class BruteForceMiddleware extends Middleware {
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Throttler */
+ private $throttler;
+ /** @var IRequest */
+ private $request;
+
+ /**
+ * @param ControllerMethodReflector $controllerMethodReflector
+ * @param Throttler $throttler
+ * @param IRequest $request
+ */
+ public function __construct(ControllerMethodReflector $controllerMethodReflector,
+ Throttler $throttler,
+ IRequest $request) {
+ $this->reflector = $controllerMethodReflector;
+ $this->throttler = $throttler;
+ $this->request = $request;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function beforeController($controller, $methodName) {
+ parent::beforeController($controller, $methodName);
+
+ if($this->reflector->hasAnnotation('BruteForceProtection')) {
+ $action = $this->reflector->getAnnotationParameter('BruteForceProtection', 'action');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), $action);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function afterController($controller, $methodName, Response $response) {
+ if($this->reflector->hasAnnotation('BruteForceProtection') && $response->isThrottled()) {
+ $action = $this->reflector->getAnnotationParameter('BruteForceProtection', 'action');
+ $ip = $this->request->getRemoteAddress();
+ $this->throttler->sleepDelay($ip, $action);
+ $this->throttler->registerAttempt($action, $ip);
+ }
+
+ return parent::afterController($controller, $methodName, $response);
+ }
+}
diff --git a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php
new file mode 100644
index 00000000000..e9fcc1fdea5
--- /dev/null
+++ b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\RateLimiting\Exception\RateLimitExceededException;
+use OC\Security\RateLimiting\Limiter;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Middleware;
+use OCP\IRequest;
+use OCP\IUserSession;
+
+/**
+ * Class RateLimitingMiddleware is the middleware responsible for implementing the
+ * ratelimiting in Nextcloud.
+ *
+ * It parses annotations such as:
+ *
+ * @UserRateThrottle(limit=5, period=100)
+ * @AnonRateThrottle(limit=1, period=100)
+ *
+ * Those annotations above would mean that logged-in users can access the page 5
+ * times within 100 seconds, and anonymous users 1 time within 100 seconds. If
+ * only an AnonRateThrottle is specified that one will also be applied to logged-in
+ * users.
+ *
+ * @package OC\AppFramework\Middleware\Security
+ */
+class RateLimitingMiddleware extends Middleware {
+ /** @var IRequest $request */
+ private $request;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Limiter */
+ private $limiter;
+
+ /**
+ * @param IRequest $request
+ * @param IUserSession $userSession
+ * @param ControllerMethodReflector $reflector
+ * @param Limiter $limiter
+ */
+ public function __construct(IRequest $request,
+ IUserSession $userSession,
+ ControllerMethodReflector $reflector,
+ Limiter $limiter) {
+ $this->request = $request;
+ $this->userSession = $userSession;
+ $this->reflector = $reflector;
+ $this->limiter = $limiter;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @throws RateLimitExceededException
+ */
+ public function beforeController($controller, $methodName) {
+ parent::beforeController($controller, $methodName);
+
+ $anonLimit = $this->reflector->getAnnotationParameter('AnonRateThrottle', 'limit');
+ $anonPeriod = $this->reflector->getAnnotationParameter('AnonRateThrottle', 'period');
+ $userLimit = $this->reflector->getAnnotationParameter('UserRateThrottle', 'limit');
+ $userPeriod = $this->reflector->getAnnotationParameter('UserRateThrottle', 'period');
+ $rateLimitIdentifier = get_class($controller) . '::' . $methodName;
+ if($userLimit !== '' && $userPeriod !== '' && $this->userSession->isLoggedIn()) {
+ $this->limiter->registerUserRequest(
+ $rateLimitIdentifier,
+ $userLimit,
+ $userPeriod,
+ $this->userSession->getUser()
+ );
+ } elseif ($anonLimit !== '' && $anonPeriod !== '') {
+ $this->limiter->registerAnonRequest(
+ $rateLimitIdentifier,
+ $anonLimit,
+ $anonPeriod,
+ $this->request->getRemoteAddress()
+ );
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function afterException($controller, $methodName, \Exception $exception) {
+ if($exception instanceof RateLimitExceededException) {
+ if (stripos($this->request->getHeader('Accept'),'html') === false) {
+ $response = new JSONResponse(
+ [
+ 'message' => $exception->getMessage(),
+ ],
+ $exception->getCode()
+ );
+ } else {
+ $response = new TemplateResponse(
+ 'core',
+ '403',
+ [
+ 'file' => $exception->getMessage()
+ ],
+ 'guest'
+ );
+ $response->setStatus($exception->getCode());
+ }
+
+ return $response;
+ }
+
+ throw $exception;
+ }
+}
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index edba6a3e759..e420a9dacc0 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -36,7 +36,6 @@ use OC\AppFramework\Middleware\Security\Exceptions\NotConfirmedException;
use OC\AppFramework\Middleware\Security\Exceptions\NotLoggedInException;
use OC\AppFramework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Utility\ControllerMethodReflector;
-use OC\Security\Bruteforce\Throttler;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
use OC\Security\CSRF\CsrfTokenManager;
@@ -88,8 +87,6 @@ class SecurityMiddleware extends Middleware {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager */
private $cspNonceManager;
- /** @var Throttler */
- private $throttler;
/**
* @param IRequest $request
@@ -104,7 +101,6 @@ class SecurityMiddleware extends Middleware {
* @param ContentSecurityPolicyManager $contentSecurityPolicyManager
* @param CSRFTokenManager $csrfTokenManager
* @param ContentSecurityPolicyNonceManager $cspNonceManager
- * @param Throttler $throttler
*/
public function __construct(IRequest $request,
ControllerMethodReflector $reflector,
@@ -117,8 +113,7 @@ class SecurityMiddleware extends Middleware {
$isAdminUser,
ContentSecurityPolicyManager $contentSecurityPolicyManager,
CsrfTokenManager $csrfTokenManager,
- ContentSecurityPolicyNonceManager $cspNonceManager,
- Throttler $throttler) {
+ ContentSecurityPolicyNonceManager $cspNonceManager) {
$this->navigationManager = $navigationManager;
$this->request = $request;
$this->reflector = $reflector;
@@ -131,10 +126,8 @@ class SecurityMiddleware extends Middleware {
$this->contentSecurityPolicyManager = $contentSecurityPolicyManager;
$this->csrfTokenManager = $csrfTokenManager;
$this->cspNonceManager = $cspNonceManager;
- $this->throttler = $throttler;
}
-
/**
* This runs all the security checks before a method call. The
* security checks are determined by inspecting the controller method
@@ -191,12 +184,6 @@ class SecurityMiddleware extends Middleware {
}
}
- if($this->reflector->hasAnnotation('BruteForceProtection')) {
- $action = $this->reflector->getAnnotationParameter('BruteForceProtection');
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), $action);
- $this->throttler->registerAttempt($action, $this->request->getRemoteAddress());
- }
-
/**
* FIXME: Use DI once available
* Checks if app is enabled (also includes a check whether user is allowed to access the resource)
diff --git a/lib/private/AppFramework/Utility/ControllerMethodReflector.php b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
index 034fc3a1759..d6a9b596127 100644
--- a/lib/private/AppFramework/Utility/ControllerMethodReflector.php
+++ b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
@@ -24,27 +24,17 @@
*
*/
-
namespace OC\AppFramework\Utility;
use \OCP\AppFramework\Utility\IControllerMethodReflector;
-
/**
* Reads and parses annotations from doc comments
*/
-class ControllerMethodReflector implements IControllerMethodReflector{
-
- private $annotations;
- private $types;
- private $parameters;
-
- public function __construct() {
- $this->types = array();
- $this->parameters = array();
- $this->annotations = array();
- }
-
+class ControllerMethodReflector implements IControllerMethodReflector {
+ public $annotations = [];
+ private $types = [];
+ private $parameters = [];
/**
* @param object $object an object or classname
@@ -55,9 +45,21 @@ class ControllerMethodReflector implements IControllerMethodReflector{
$docs = $reflection->getDocComment();
// extract everything prefixed by @ and first letter uppercase
- preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)(\h+(?P<parameter>\w+))?$/m', $docs, $matches);
+ preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)((?P<parameter>.*))?$/m', $docs, $matches);
foreach($matches['annotation'] as $key => $annontation) {
- $this->annotations[$annontation] = $matches['parameter'][$key];
+ $annotationValue = $matches['parameter'][$key];
+ if(isset($annotationValue[0]) && $annotationValue[0] === '(' && $annotationValue[strlen($annotationValue) - 1] === ')') {
+ $cutString = substr($annotationValue, 1, -1);
+ $cutString = str_replace(' ', '', $cutString);
+ $splittedArray = explode(',', $cutString);
+ foreach($splittedArray as $annotationValues) {
+ list($key, $value) = explode('=', $annotationValues);
+ $this->annotations[$annontation][$key] = $value;
+ }
+ continue;
+ }
+
+ $this->annotations[$annontation] = [$annotationValue];
}
// extract type parameter information
@@ -83,7 +85,6 @@ class ControllerMethodReflector implements IControllerMethodReflector{
}
}
-
/**
* Inspects the PHPDoc parameters for types
* @param string $parameter the parameter whose type comments should be
@@ -99,7 +100,6 @@ class ControllerMethodReflector implements IControllerMethodReflector{
}
}
-
/**
* @return array the arguments of the method with key => default value
*/
@@ -107,30 +107,27 @@ class ControllerMethodReflector implements IControllerMethodReflector{
return $this->parameters;
}
-
/**
* Check if a method contains an annotation
* @param string $name the name of the annotation
* @return bool true if the annotation is found
*/
- public function hasAnnotation($name){
+ public function hasAnnotation($name) {
return array_key_exists($name, $this->annotations);
}
-
/**
- * Get optional annotation parameter
+ * Get optional annotation parameter by key
+ *
* @param string $name the name of the annotation
+ * @param string $key the string of the annotation
* @return string
*/
- public function getAnnotationParameter($name){
- $parameter = '';
- if($this->hasAnnotation($name)) {
- $parameter = $this->annotations[$name];
+ public function getAnnotationParameter($name, $key) {
+ if(isset($this->annotations[$name][$key])) {
+ return $this->annotations[$name][$key];
}
- return $parameter;
+ return '';
}
-
-
}
diff --git a/lib/private/BackgroundJob/JobList.php b/lib/private/BackgroundJob/JobList.php
index b6a235e9e40..0de5dfecc8b 100644
--- a/lib/private/BackgroundJob/JobList.php
+++ b/lib/private/BackgroundJob/JobList.php
@@ -187,18 +187,24 @@ class JobList implements IJobList {
$update->update('jobs')
->set('reserved_at', $update->createNamedParameter($this->timeFactory->getTime()))
->set('last_checked', $update->createNamedParameter($this->timeFactory->getTime()))
- ->where($update->expr()->eq('id', $update->createParameter('jobid')));
+ ->where($update->expr()->eq('id', $update->createParameter('jobid')))
+ ->andWhere($update->expr()->eq('reserved_at', $update->createParameter('reserved_at')))
+ ->andWhere($update->expr()->eq('last_checked', $update->createParameter('last_checked')));
- $this->connection->lockTable('jobs');
$result = $query->execute();
$row = $result->fetch();
$result->closeCursor();
if ($row) {
$update->setParameter('jobid', $row['id']);
- $update->execute();
- $this->connection->unlockTable();
+ $update->setParameter('reserved_at', $row['reserved_at']);
+ $update->setParameter('last_checked', $row['last_checked']);
+ $count = $update->execute();
+ if ($count === 0) {
+ // Background job already executed elsewhere, try again.
+ return $this->getNext();
+ }
$job = $this->buildJob($row);
if ($job === null) {
@@ -208,7 +214,6 @@ class JobList implements IJobList {
return $job;
} else {
- $this->connection->unlockTable();
return null;
}
}
diff --git a/lib/private/Cache/CappedMemoryCache.php b/lib/private/Cache/CappedMemoryCache.php
index c6b45c49c1c..2e180cfb013 100644
--- a/lib/private/Cache/CappedMemoryCache.php
+++ b/lib/private/Cache/CappedMemoryCache.php
@@ -47,7 +47,11 @@ class CappedMemoryCache implements ICache, \ArrayAccess {
}
public function set($key, $value, $ttl = 0) {
- $this->cache[$key] = $value;
+ if (is_null($key)) {
+ $this->cache[] = $value;
+ } else {
+ $this->cache[$key] = $value;
+ }
$this->garbageCollect();
}
diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php
index 1467fef727b..f1c5b7dca50 100644
--- a/lib/private/Comments/Manager.php
+++ b/lib/private/Comments/Manager.php
@@ -21,6 +21,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
+
namespace OC\Comments;
use Doctrine\DBAL\Exception\DriverException;
@@ -46,7 +47,7 @@ class Manager implements ICommentsManager {
/** @var IConfig */
protected $config;
- /** @var IComment[] */
+ /** @var IComment[] */
protected $commentsCache = [];
/** @var \Closure[] */
@@ -104,7 +105,7 @@ class Manager implements ICommentsManager {
* @throws \UnexpectedValueException
*/
protected function prepareCommentForDatabaseWrite(IComment $comment) {
- if( !$comment->getActorType()
+ if (!$comment->getActorType()
|| !$comment->getActorId()
|| !$comment->getObjectType()
|| !$comment->getObjectId()
@@ -113,17 +114,17 @@ class Manager implements ICommentsManager {
throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving');
}
- if($comment->getId() === '') {
+ if ($comment->getId() === '') {
$comment->setChildrenCount(0);
$comment->setLatestChildDateTime(new \DateTime('0000-00-00 00:00:00', new \DateTimeZone('UTC')));
$comment->setLatestChildDateTime(null);
}
- if(is_null($comment->getCreationDateTime())) {
+ if (is_null($comment->getCreationDateTime())) {
$comment->setCreationDateTime(new \DateTime());
}
- if($comment->getParentId() !== '0') {
+ if ($comment->getParentId() !== '0') {
$comment->setTopmostParentId($this->determineTopmostParentId($comment->getParentId()));
} else {
$comment->setTopmostParentId('0');
@@ -143,7 +144,7 @@ class Manager implements ICommentsManager {
*/
protected function determineTopmostParentId($id) {
$comment = $this->get($id);
- if($comment->getParentId() === '0') {
+ if ($comment->getParentId() === '0') {
return $comment->getId();
} else {
return $this->determineTopmostParentId($comment->getId());
@@ -153,16 +154,16 @@ class Manager implements ICommentsManager {
/**
* updates child information of a comment
*
- * @param string $id
- * @param \DateTime $cDateTime the date time of the most recent child
+ * @param string $id
+ * @param \DateTime $cDateTime the date time of the most recent child
* @throws NotFoundException
*/
protected function updateChildrenInformation($id, \DateTime $cDateTime) {
$qb = $this->dbConn->getQueryBuilder();
$query = $qb->select($qb->createFunction('COUNT(`id`)'))
- ->from('comments')
- ->where($qb->expr()->eq('parent_id', $qb->createParameter('id')))
- ->setParameter('id', $id);
+ ->from('comments')
+ ->where($qb->expr()->eq('parent_id', $qb->createParameter('id')))
+ ->setParameter('id', $id);
$resultStatement = $query->execute();
$data = $resultStatement->fetch(\PDO::FETCH_NUM);
@@ -185,8 +186,8 @@ class Manager implements ICommentsManager {
* @throws \InvalidArgumentException
*/
protected function checkRoleParameters($role, $type, $id) {
- if(
- !is_string($type) || empty($type)
+ if (
+ !is_string($type) || empty($type)
|| !is_string($id) || empty($id)
) {
throw new \InvalidArgumentException($role . ' parameters must be string and not empty');
@@ -200,7 +201,7 @@ class Manager implements ICommentsManager {
*/
protected function cache(IComment $comment) {
$id = $comment->getId();
- if(empty($id)) {
+ if (empty($id)) {
return;
}
$this->commentsCache[strval($id)] = $comment;
@@ -228,11 +229,11 @@ class Manager implements ICommentsManager {
* @since 9.0.0
*/
public function get($id) {
- if(intval($id) === 0) {
+ if (intval($id) === 0) {
throw new \InvalidArgumentException('IDs must be translatable to a number in this implementation.');
}
- if(isset($this->commentsCache[$id])) {
+ if (isset($this->commentsCache[$id])) {
return $this->commentsCache[$id];
}
@@ -245,7 +246,7 @@ class Manager implements ICommentsManager {
$data = $resultStatement->fetch();
$resultStatement->closeCursor();
- if(!$data) {
+ if (!$data) {
throw new NotFoundException();
}
@@ -290,20 +291,20 @@ class Manager implements ICommentsManager {
$qb = $this->dbConn->getQueryBuilder();
$query = $qb->select('*')
- ->from('comments')
- ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id')))
- ->orderBy('creation_timestamp', 'DESC')
- ->setParameter('id', $id);
+ ->from('comments')
+ ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id')))
+ ->orderBy('creation_timestamp', 'DESC')
+ ->setParameter('id', $id);
- if($limit > 0) {
+ if ($limit > 0) {
$query->setMaxResults($limit);
}
- if($offset > 0) {
+ if ($offset > 0) {
$query->setFirstResult($offset);
}
$resultStatement = $query->execute();
- while($data = $resultStatement->fetch()) {
+ while ($data = $resultStatement->fetch()) {
$comment = new Comment($this->normalizeDatabaseData($data));
$this->cache($comment);
$tree['replies'][] = [
@@ -332,37 +333,37 @@ class Manager implements ICommentsManager {
* @since 9.0.0
*/
public function getForObject(
- $objectType,
- $objectId,
- $limit = 0,
- $offset = 0,
- \DateTime $notOlderThan = null
+ $objectType,
+ $objectId,
+ $limit = 0,
+ $offset = 0,
+ \DateTime $notOlderThan = null
) {
$comments = [];
$qb = $this->dbConn->getQueryBuilder();
$query = $qb->select('*')
- ->from('comments')
- ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
- ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
- ->orderBy('creation_timestamp', 'DESC')
- ->setParameter('type', $objectType)
- ->setParameter('id', $objectId);
-
- if($limit > 0) {
+ ->from('comments')
+ ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
+ ->orderBy('creation_timestamp', 'DESC')
+ ->setParameter('type', $objectType)
+ ->setParameter('id', $objectId);
+
+ if ($limit > 0) {
$query->setMaxResults($limit);
}
- if($offset > 0) {
+ if ($offset > 0) {
$query->setFirstResult($offset);
}
- if(!is_null($notOlderThan)) {
+ if (!is_null($notOlderThan)) {
$query
->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan')))
->setParameter('notOlderThan', $notOlderThan, 'datetime');
}
$resultStatement = $query->execute();
- while($data = $resultStatement->fetch()) {
+ while ($data = $resultStatement->fetch()) {
$comment = new Comment($this->normalizeDatabaseData($data));
$this->cache($comment);
$comments[] = $comment;
@@ -383,13 +384,13 @@ class Manager implements ICommentsManager {
public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $notOlderThan = null) {
$qb = $this->dbConn->getQueryBuilder();
$query = $qb->select($qb->createFunction('COUNT(`id`)'))
- ->from('comments')
- ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
- ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
- ->setParameter('type', $objectType)
- ->setParameter('id', $objectId);
+ ->from('comments')
+ ->where($qb->expr()->eq('object_type', $qb->createParameter('type')))
+ ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id')))
+ ->setParameter('type', $objectType)
+ ->setParameter('id', $objectId);
- if(!is_null($notOlderThan)) {
+ if (!is_null($notOlderThan)) {
$query
->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan')))
->setParameter('notOlderThan', $notOlderThan, 'datetime');
@@ -402,6 +403,40 @@ class Manager implements ICommentsManager {
}
/**
+ * Get the number of unread comments for all files in a folder
+ *
+ * @param int $folderId
+ * @param IUser $user
+ * @return array [$fileId => $unreadCount]
+ */
+ public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {
+ $qb = $this->dbConn->getQueryBuilder();
+ $query = $qb->select('fileid', $qb->createFunction(
+ 'COUNT(' . $qb->getColumnName('c.id') . ')')
+ )->from('comments', 'c')
+ ->innerJoin('c', 'filecache', 'f', $qb->expr()->andX(
+ $qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
+ $qb->expr()->eq('f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT))
+ ))
+ ->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->andX(
+ $qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')),
+ $qb->expr()->eq('m.object_id', 'c.object_id'),
+ $qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID()))
+ ))
+ ->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId)))
+ ->andWhere($qb->expr()->orX(
+ $qb->expr()->gt('c.creation_timestamp', 'marker_datetime'),
+ $qb->expr()->isNull('marker_datetime')
+ ))
+ ->groupBy('f.fileid');
+
+ $resultStatement = $query->execute();
+ return array_map(function ($count) {
+ return (int)$count;
+ }, $resultStatement->fetchAll(\PDO::FETCH_KEY_PAIR));
+ }
+
+ /**
* creates a new comment and returns it. At this point of time, it is not
* saved in the used data storage. Use save() after setting other fields
* of the comment (e.g. message or verb).
@@ -433,7 +468,7 @@ class Manager implements ICommentsManager {
* @since 9.0.0
*/
public function delete($id) {
- if(!is_string($id)) {
+ if (!is_string($id)) {
throw new \InvalidArgumentException('Parameter must be string');
}
@@ -481,16 +516,16 @@ class Manager implements ICommentsManager {
* @since 9.0.0
*/
public function save(IComment $comment) {
- if($this->prepareCommentForDatabaseWrite($comment)->getId() === '') {
+ if ($this->prepareCommentForDatabaseWrite($comment)->getId() === '') {
$result = $this->insert($comment);
} else {
$result = $this->update($comment);
}
- if($result && !!$comment->getParentId()) {
+ if ($result && !!$comment->getParentId()) {
$this->updateChildrenInformation(
- $comment->getParentId(),
- $comment->getCreationDateTime()
+ $comment->getParentId(),
+ $comment->getCreationDateTime()
);
$this->cache($comment);
}
@@ -509,17 +544,17 @@ class Manager implements ICommentsManager {
$affectedRows = $qb
->insert('comments')
->values([
- 'parent_id' => $qb->createNamedParameter($comment->getParentId()),
- 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()),
- 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()),
- 'actor_type' => $qb->createNamedParameter($comment->getActorType()),
- 'actor_id' => $qb->createNamedParameter($comment->getActorId()),
- 'message' => $qb->createNamedParameter($comment->getMessage()),
- 'verb' => $qb->createNamedParameter($comment->getVerb()),
- 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'),
- 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'),
- 'object_type' => $qb->createNamedParameter($comment->getObjectType()),
- 'object_id' => $qb->createNamedParameter($comment->getObjectId()),
+ 'parent_id' => $qb->createNamedParameter($comment->getParentId()),
+ 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()),
+ 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()),
+ 'actor_type' => $qb->createNamedParameter($comment->getActorType()),
+ 'actor_id' => $qb->createNamedParameter($comment->getActorId()),
+ 'message' => $qb->createNamedParameter($comment->getMessage()),
+ 'verb' => $qb->createNamedParameter($comment->getVerb()),
+ 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'),
+ 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'),
+ 'object_type' => $qb->createNamedParameter($comment->getObjectType()),
+ 'object_id' => $qb->createNamedParameter($comment->getObjectId()),
])
->execute();
@@ -548,22 +583,22 @@ class Manager implements ICommentsManager {
$qb = $this->dbConn->getQueryBuilder();
$affectedRows = $qb
->update('comments')
- ->set('parent_id', $qb->createNamedParameter($comment->getParentId()))
- ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId()))
- ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount()))
- ->set('actor_type', $qb->createNamedParameter($comment->getActorType()))
- ->set('actor_id', $qb->createNamedParameter($comment->getActorId()))
- ->set('message', $qb->createNamedParameter($comment->getMessage()))
- ->set('verb', $qb->createNamedParameter($comment->getVerb()))
- ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'))
- ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'))
- ->set('object_type', $qb->createNamedParameter($comment->getObjectType()))
- ->set('object_id', $qb->createNamedParameter($comment->getObjectId()))
+ ->set('parent_id', $qb->createNamedParameter($comment->getParentId()))
+ ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId()))
+ ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount()))
+ ->set('actor_type', $qb->createNamedParameter($comment->getActorType()))
+ ->set('actor_id', $qb->createNamedParameter($comment->getActorId()))
+ ->set('message', $qb->createNamedParameter($comment->getMessage()))
+ ->set('verb', $qb->createNamedParameter($comment->getVerb()))
+ ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'))
+ ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'))
+ ->set('object_type', $qb->createNamedParameter($comment->getObjectType()))
+ ->set('object_id', $qb->createNamedParameter($comment->getObjectId()))
->where($qb->expr()->eq('id', $qb->createParameter('id')))
->setParameter('id', $comment->getId())
->execute();
- if($affectedRows === 0) {
+ if ($affectedRows === 0) {
throw new NotFoundException('Comment to update does ceased to exist');
}
@@ -587,8 +622,8 @@ class Manager implements ICommentsManager {
$qb = $this->dbConn->getQueryBuilder();
$affectedRows = $qb
->update('comments')
- ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
- ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
+ ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
+ ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER))
->where($qb->expr()->eq('actor_type', $qb->createParameter('type')))
->andWhere($qb->expr()->eq('actor_id', $qb->createParameter('id')))
->setParameter('type', $actorType)
@@ -662,19 +697,19 @@ class Manager implements ICommentsManager {
$qb = $this->dbConn->getQueryBuilder();
$values = [
- 'user_id' => $qb->createNamedParameter($user->getUID()),
+ 'user_id' => $qb->createNamedParameter($user->getUID()),
'marker_datetime' => $qb->createNamedParameter($dateTime, 'datetime'),
- 'object_type' => $qb->createNamedParameter($objectType),
- 'object_id' => $qb->createNamedParameter($objectId),
+ 'object_type' => $qb->createNamedParameter($objectType),
+ 'object_id' => $qb->createNamedParameter($objectId),
];
// Strategy: try to update, if this does not return affected rows, do an insert.
$affectedRows = $qb
->update('comments_read_markers')
- ->set('user_id', $values['user_id'])
+ ->set('user_id', $values['user_id'])
->set('marker_datetime', $values['marker_datetime'])
- ->set('object_type', $values['object_type'])
- ->set('object_id', $values['object_id'])
+ ->set('object_type', $values['object_type'])
+ ->set('object_id', $values['object_id'])
->where($qb->expr()->eq('user_id', $qb->createParameter('user_id')))
->andWhere($qb->expr()->eq('object_type', $qb->createParameter('object_type')))
->andWhere($qb->expr()->eq('object_id', $qb->createParameter('object_id')))
@@ -717,7 +752,7 @@ class Manager implements ICommentsManager {
$data = $resultStatement->fetch();
$resultStatement->closeCursor();
- if(!$data || is_null($data['marker_datetime'])) {
+ if (!$data || is_null($data['marker_datetime'])) {
return null;
}
@@ -774,10 +809,10 @@ class Manager implements ICommentsManager {
* \OutOfBoundsException has to thrown.
*/
public function registerDisplayNameResolver($type, \Closure $closure) {
- if(!is_string($type)) {
+ if (!is_string($type)) {
throw new \InvalidArgumentException('String expected.');
}
- if(isset($this->displayNameResolvers[$type])) {
+ if (isset($this->displayNameResolvers[$type])) {
throw new \OutOfBoundsException('Displayname resolver for this type already registered');
}
$this->displayNameResolvers[$type] = $closure;
@@ -797,10 +832,10 @@ class Manager implements ICommentsManager {
* provided ID is unknown. It must be ensured that a string is returned.
*/
public function resolveDisplayName($type, $id) {
- if(!is_string($type)) {
+ if (!is_string($type)) {
throw new \InvalidArgumentException('String expected.');
}
- if(!isset($this->displayNameResolvers[$type])) {
+ if (!isset($this->displayNameResolvers[$type])) {
throw new \OutOfBoundsException('No Displayname resolver for this type registered');
}
return (string)$this->displayNameResolvers[$type]($id);
@@ -812,7 +847,7 @@ class Manager implements ICommentsManager {
* @return \OCP\Comments\ICommentsEventHandler[]
*/
private function getEventHandlers() {
- if(!empty($this->eventHandlers)) {
+ if (!empty($this->eventHandlers)) {
return $this->eventHandlers;
}
diff --git a/lib/private/Config.php b/lib/private/Config.php
index e6a27a76b2e..f15854b6113 100644
--- a/lib/private/Config.php
+++ b/lib/private/Config.php
@@ -39,6 +39,9 @@ namespace OC;
* configuration file of ownCloud.
*/
class Config {
+
+ const ENV_PREFIX = 'NC_';
+
/** @var array Associative array ($key => $value) */
protected $cache = array();
/** @var string */
@@ -71,15 +74,22 @@ class Config {
}
/**
- * Gets a value from config.php
+ * Returns a config value
*
- * If it does not exist, $default will be returned.
+ * gets its value from an `NC_` prefixed environment variable
+ * if it doesn't exist from config.php
+ * if this doesn't exist either, it will return the given `$default`
*
* @param string $key key
* @param mixed $default = null default value
* @return mixed the value or $default
*/
public function getValue($key, $default = null) {
+ $envValue = getenv(self::ENV_PREFIX . $key);
+ if ($envValue !== false) {
+ return $envValue;
+ }
+
if (isset($this->cache[$key])) {
return $this->cache[$key];
}
diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php
index 693381ea2b4..69cb94c7a92 100644
--- a/lib/private/Console/Application.php
+++ b/lib/private/Console/Application.php
@@ -37,7 +37,6 @@ use Symfony\Component\Console\Application as SymfonyApplication;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Output\ConsoleOutputInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class Application {
diff --git a/lib/private/Contacts/ContactsMenu/ActionFactory.php b/lib/private/Contacts/ContactsMenu/ActionFactory.php
new file mode 100644
index 00000000000..1d2a69c904d
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/ActionFactory.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu;
+
+use OC\Contacts\ContactsMenu\Actions\LinkAction;
+use OCP\Contacts\ContactsMenu\IActionFactory;
+use OCP\Contacts\ContactsMenu\ILinkAction;
+
+class ActionFactory implements IActionFactory {
+
+ /**
+ * @param string $icon
+ * @param string $name
+ * @param string $href
+ * @return ILinkAction
+ */
+ public function newLinkAction($icon, $name, $href) {
+ $action = new LinkAction();
+ $action->setName($name);
+ $action->setIcon($icon);
+ $action->setHref($href);
+ return $action;
+ }
+
+ /**
+ * @param string $icon
+ * @param string $name
+ * @param string $email
+ * @return ILinkAction
+ */
+ public function newEMailAction($icon, $name, $email) {
+ return $this->newLinkAction($icon, $name, 'mailto:' . urlencode($email));
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/ActionProviderStore.php b/lib/private/Contacts/ContactsMenu/ActionProviderStore.php
new file mode 100644
index 00000000000..ae6436095d8
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/ActionProviderStore.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu;
+
+use Exception;
+use OC\App\AppManager;
+use OC\Contacts\ContactsMenu\Providers\EMailProvider;
+use OCP\AppFramework\QueryException;
+use OCP\Contacts\ContactsMenu\IProvider;
+use OCP\ILogger;
+use OCP\IServerContainer;
+use OCP\IUser;
+
+class ActionProviderStore {
+
+ /** @var IServerContainer */
+ private $serverContainer;
+
+ /** @var AppManager */
+ private $appManager;
+
+ /** @var ILogger */
+ private $logger;
+
+ /**
+ * @param IServerContainer $serverContainer
+ * @param AppManager $appManager
+ * @param ILogger $logger
+ */
+ public function __construct(IServerContainer $serverContainer, AppManager $appManager, ILogger $logger) {
+ $this->serverContainer = $serverContainer;
+ $this->appManager = $appManager;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @param IUser $user
+ * @return IProvider[]
+ * @throws Exception
+ */
+ public function getProviders(IUser $user) {
+ $appClasses = $this->getAppProviderClasses($user);
+ $providerClasses = $this->getServerProviderClasses();
+ $allClasses = array_merge($providerClasses, $appClasses);
+ $providers = [];
+
+ foreach ($allClasses as $class) {
+ try {
+ $providers[] = $this->serverContainer->query($class);
+ } catch (QueryException $ex) {
+ $this->logger->logException($ex, [
+ 'message' => "Could not load contacts menu action provider $class",
+ 'app' => 'core',
+ ]);
+ throw new Exception("Could not load contacts menu action provider");
+ }
+ }
+
+ return $providers;
+ }
+
+ /**
+ * @return string[]
+ */
+ private function getServerProviderClasses() {
+ return [
+ EMailProvider::class,
+ ];
+ }
+
+ /**
+ * @param IUser $user
+ * @return string[]
+ */
+ private function getAppProviderClasses(IUser $user) {
+ return array_reduce($this->appManager->getEnabledAppsForUser($user), function($all, $appId) {
+ $info = $this->appManager->getAppInfo($appId);
+
+ if (!isset($info['contactsmenu']) || !isset($info['contactsmenu'])) {
+ // Nothing to add
+ return $all;
+ }
+
+ $providers = array_reduce($info['contactsmenu'], function($all, $provider) {
+ return array_merge($all, [$provider]);
+ }, []);
+
+ return array_merge($all, $providers);
+ }, []);
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php b/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php
new file mode 100644
index 00000000000..5b8b0524a21
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu\Actions;
+
+use OCP\Contacts\ContactsMenu\ILinkAction;
+
+class LinkAction implements ILinkAction {
+
+ /** @var string */
+ private $icon;
+
+ /** @var string */
+ private $name;
+
+ /** @var string */
+ private $href;
+
+ /** @var int */
+ private $priority = 10;
+
+ /**
+ * @param string $icon absolute URI to an icon
+ */
+ public function setIcon($icon) {
+ $this->icon = $icon;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function setName($name) {
+ $this->name = $name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return $this->name;
+ }
+
+ /**
+ * @param int $priority
+ */
+ public function setPriority($priority) {
+ $this->priority = $priority;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPriority() {
+ return $this->priority;
+ }
+
+ /**
+ * @param string $href
+ */
+ public function setHref($href) {
+ $this->href = $href;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHref() {
+ return $this->href;
+ }
+
+ /**
+ * @return array
+ */
+ public function jsonSerialize() {
+ return [
+ 'title' => $this->name,
+ 'icon' => $this->icon,
+ 'hyperlink' => $this->href,
+ ];
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php
new file mode 100644
index 00000000000..1cdb5d6fc5f
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php
@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu;
+
+use OCP\Contacts\ContactsMenu\IEntry;
+use OCP\Contacts\IManager;
+use OCP\IUser;
+
+class ContactsStore {
+
+ /** @var IManager */
+ private $contactsManager;
+
+ /**
+ * @param IManager $contactsManager
+ */
+ public function __construct(IManager $contactsManager) {
+ $this->contactsManager = $contactsManager;
+ }
+
+ /**
+ * @param IUser $user
+ * @param string|null $filter
+ * @return IEntry[]
+ */
+ public function getContacts(IUser $user, $filter) {
+ $allContacts = $this->contactsManager->search($filter ?: '', [
+ 'FN',
+ ]);
+
+ $self = $user->getUID();
+ $entries = array_map(function(array $contact) {
+ return $this->contactArrayToEntry($contact);
+ }, $allContacts);
+ return array_filter($entries, function(IEntry $entry) use ($self) {
+ return $entry->getProperty('UID') !== $self;
+ });
+ }
+
+ /**
+ * @param array $contact
+ * @return Entry
+ */
+ private function contactArrayToEntry(array $contact) {
+ $entry = new Entry();
+
+ if (isset($contact['id'])) {
+ $entry->setId($contact['id']);
+ }
+
+ if (isset($contact['FN'])) {
+ $entry->setFullName($contact['FN']);
+ }
+
+ $avatarPrefix = "VALUE=uri:";
+ if (isset($contact['PHOTO']) && strpos($contact['PHOTO'], $avatarPrefix) === 0) {
+ $entry->setAvatar(substr($contact['PHOTO'], strlen($avatarPrefix)));
+ }
+
+ if (isset($contact['EMAIL'])) {
+ foreach ($contact['EMAIL'] as $email) {
+ $entry->addEMailAddress($email);
+ }
+ }
+
+ // Attach all other properties to the entry too because some
+ // providers might make use of it.
+ $entry->setProperties($contact);
+
+ return $entry;
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/Entry.php b/lib/private/Contacts/ContactsMenu/Entry.php
new file mode 100644
index 00000000000..9ea0511b9cc
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/Entry.php
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu;
+
+use OCP\Contacts\ContactsMenu\IAction;
+use OCP\Contacts\ContactsMenu\IEntry;
+
+class Entry implements IEntry {
+
+ /** @var string|int|null */
+ private $id = null;
+
+ /** @var string */
+ private $fullName = '';
+
+ /** @var string[] */
+ private $emailAddresses = [];
+
+ /** @var string|null */
+ private $avatar;
+
+ /** @var IAction[] */
+ private $actions = [];
+
+ /** @var array */
+ private $properties = [];
+
+ /**
+ * @param string $id
+ */
+ public function setId($id) {
+ $this->id = $id;
+ }
+
+ /**
+ * @param string $displayName
+ */
+ public function setFullName($displayName) {
+ $this->fullName = $displayName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFullName() {
+ return $this->fullName;
+ }
+
+ /**
+ * @param string $address
+ */
+ public function addEMailAddress($address) {
+ $this->emailAddresses[] = $address;
+ }
+
+ /**
+ * @return string
+ */
+ public function getEMailAddresses() {
+ return $this->emailAddresses;
+ }
+
+ /**
+ * @param string $avatar
+ */
+ public function setAvatar($avatar) {
+ $this->avatar = $avatar;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAvatar() {
+ return $this->avatar;
+ }
+
+ /**
+ * @param IAction $action
+ */
+ public function addAction(IAction $action) {
+ $this->actions[] = $action;
+ $this->sortActions();
+ }
+
+ /**
+ * @return IAction[]
+ */
+ public function getActions() {
+ return $this->actions;
+ }
+
+ /**
+ * sort the actions by priority and name
+ */
+ private function sortActions() {
+ usort($this->actions, function(IAction $action1, IAction $action2) {
+ $prio1 = $action1->getPriority();
+ $prio2 = $action2->getPriority();
+
+ if ($prio1 === $prio2) {
+ // Ascending order for same priority
+ return strcasecmp($action1->getName(), $action2->getName());
+ }
+
+ // Descending order when priority differs
+ return $prio2 - $prio1;
+ });
+ }
+
+ /**
+ * @param array $contact key-value array containing additional properties
+ */
+ public function setProperties(array $contact) {
+ $this->properties = $contact;
+ }
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ public function getProperty($key) {
+ if (!isset($this->properties[$key])) {
+ return null;
+ }
+ return $this->properties[$key];
+ }
+
+ /**
+ * @return array
+ */
+ public function jsonSerialize() {
+ $topAction = !empty($this->actions) ? $this->actions[0]->jsonSerialize() : null;
+ $otherActions = array_map(function(IAction $action) {
+ return $action->jsonSerialize();
+ }, array_slice($this->actions, 1));
+
+ return [
+ 'id' => $this->id,
+ 'fullName' => $this->fullName,
+ 'avatar' => $this->getAvatar(),
+ 'topAction' => $topAction,
+ 'actions' => $otherActions,
+ 'lastMessage' => '',
+ ];
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php
new file mode 100644
index 00000000000..16d77c2df08
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/Manager.php
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu;
+
+use OCP\App\IAppManager;
+use OCP\Contacts\ContactsMenu\IEntry;
+use OCP\IUser;
+
+class Manager {
+
+ /** @var ContactsStore */
+ private $store;
+
+ /** @var ActionProviderStore */
+ private $actionProviderStore;
+
+ /** @var IAppManager */
+ private $appManager;
+
+ /**
+ * @param ContactsStore $store
+ * @param ActionProviderStore $actionProviderStore
+ * @param IAppManager $appManager
+ */
+ public function __construct(ContactsStore $store, ActionProviderStore $actionProviderStore, IAppManager $appManager) {
+ $this->store = $store;
+ $this->actionProviderStore = $actionProviderStore;
+ $this->appManager = $appManager;
+ }
+
+ /**
+ * @param string $user
+ * @param string $filter
+ * @return array
+ */
+ public function getEntries(IUser $user, $filter) {
+ $entries = $this->store->getContacts($user, $filter);
+
+ $sortedEntries = $this->sortEntries($entries);
+ $topEntries = array_slice($sortedEntries, 0, 25);
+ $this->processEntries($topEntries, $user);
+
+ $contactsEnabled = $this->appManager->isEnabledForUser('contacts', $user);
+ return [
+ 'contacts' => $topEntries,
+ 'contactsAppEnabled' => $contactsEnabled,
+ ];
+ }
+
+ /**
+ * @param IEntry[] $entries
+ * @return IEntry[]
+ */
+ private function sortEntries(array $entries) {
+ usort($entries, function(IEntry $entryA, IEntry $entryB) {
+ return strcasecmp($entryA->getFullName(), $entryB->getFullName());
+ });
+ return $entries;
+ }
+
+ /**
+ * @param IEntry[] $entries
+ * @param IUser $user
+ */
+ private function processEntries(array $entries, IUser $user) {
+ $providers = $this->actionProviderStore->getProviders($user);
+ foreach ($entries as $entry) {
+ foreach ($providers as $provider) {
+ $provider->process($entry);
+ }
+ }
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php b/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php
new file mode 100644
index 00000000000..d5630e6420d
--- /dev/null
+++ b/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Contacts\ContactsMenu\Providers;
+
+use OCP\Contacts\ContactsMenu\IActionFactory;
+use OCP\Contacts\ContactsMenu\IEntry;
+use OCP\Contacts\ContactsMenu\IProvider;
+use OCP\IURLGenerator;
+
+class EMailProvider implements IProvider {
+
+ /** @var IActionFactory */
+ private $actionFactory;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /**
+ * @param IActionFactory $actionFactory
+ * @param IURLGenerator $urlGenerator
+ */
+ public function __construct(IActionFactory $actionFactory, IURLGenerator $urlGenerator) {
+ $this->actionFactory = $actionFactory;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ /**
+ * @param IEntry $entry
+ */
+ public function process(IEntry $entry) {
+ $iconUrl = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/mail.svg'));
+ foreach ($entry->getEMailAddresses() as $address) {
+ $action = $this->actionFactory->newEMailAction($iconUrl, $address, $address);
+ $entry->addAction($action);
+ }
+ }
+
+}
diff --git a/lib/private/DB/AdapterOCI8.php b/lib/private/DB/AdapterOCI8.php
index e23f74345ae..359e4ba1b67 100644
--- a/lib/private/DB/AdapterOCI8.php
+++ b/lib/private/DB/AdapterOCI8.php
@@ -41,7 +41,6 @@ class AdapterOCI8 extends Adapter {
const UNIX_TIMESTAMP_REPLACEMENT = "(cast(sys_extract_utc(systimestamp) as date) - date'1970-01-01') * 86400";
public function fixupStatement($statement) {
- $statement = preg_replace('( LIKE \?)', '$0 ESCAPE \'\\\'', $statement);
$statement = preg_replace('/`(\w+)` ILIKE \?/', 'REGEXP_LIKE(`$1`, \'^\' || REPLACE(?, \'%\', \'.*\') || \'$\', \'i\')', $statement);
$statement = str_replace('`', '"', $statement);
$statement = str_ireplace('NOW()', 'CURRENT_TIMESTAMP', $statement);
diff --git a/lib/private/DB/AdapterSqlite.php b/lib/private/DB/AdapterSqlite.php
index 7a69cb7e8c2..5507699c54a 100644
--- a/lib/private/DB/AdapterSqlite.php
+++ b/lib/private/DB/AdapterSqlite.php
@@ -41,7 +41,6 @@ class AdapterSqlite extends Adapter {
}
public function fixupStatement($statement) {
- $statement = preg_replace('( I?LIKE \?)', '$0 ESCAPE \'\\\'', $statement);
$statement = preg_replace('/`(\w+)` ILIKE \?/', 'LOWER($1) LIKE LOWER(?)', $statement);
$statement = str_replace( '`', '"', $statement );
$statement = str_ireplace( 'NOW()', 'datetime(\'now\')', $statement );
diff --git a/lib/private/DB/ConnectionFactory.php b/lib/private/DB/ConnectionFactory.php
index 39f15ff4a63..d90d7737d40 100644
--- a/lib/private/DB/ConnectionFactory.php
+++ b/lib/private/DB/ConnectionFactory.php
@@ -25,6 +25,7 @@
*/
namespace OC\DB;
+
use Doctrine\Common\EventManager;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;
@@ -33,15 +34,15 @@ use Doctrine\DBAL\Event\Listeners\SQLSessionInit;
use OC\SystemConfig;
/**
-* Takes care of creating and configuring Doctrine connections.
-*/
+ * Takes care of creating and configuring Doctrine connections.
+ */
class ConnectionFactory {
/**
- * @var array
- *
- * Array mapping DBMS type to default connection parameters passed to
- * \Doctrine\DBAL\DriverManager::getConnection().
- */
+ * @var array
+ *
+ * Array mapping DBMS type to default connection parameters passed to
+ * \Doctrine\DBAL\DriverManager::getConnection().
+ */
protected $defaultConnectionParams = [
'mysql' => [
'adapter' => '\OC\DB\AdapterMySQL',
@@ -77,17 +78,17 @@ class ConnectionFactory {
*/
public function __construct(SystemConfig $systemConfig) {
$this->config = $systemConfig;
- if($this->config->getValue('mysql.utf8mb4', false)) {
+ if ($this->config->getValue('mysql.utf8mb4', false)) {
$this->defaultConnectionParams['mysql']['charset'] = 'utf8mb4';
}
}
/**
- * @brief Get default connection parameters for a given DBMS.
- * @param string $type DBMS type
- * @throws \InvalidArgumentException If $type is invalid
- * @return array Default connection parameters.
- */
+ * @brief Get default connection parameters for a given DBMS.
+ * @param string $type DBMS type
+ * @throws \InvalidArgumentException If $type is invalid
+ * @return array Default connection parameters.
+ */
public function getDefaultConnectionParams($type) {
$normalizedType = $this->normalizeType($type);
if (!isset($this->defaultConnectionParams[$normalizedType])) {
@@ -105,11 +106,11 @@ class ConnectionFactory {
}
/**
- * @brief Get default connection parameters for a given DBMS.
- * @param string $type DBMS type
- * @param array $additionalConnectionParams Additional connection parameters
- * @return \OC\DB\Connection
- */
+ * @brief Get default connection parameters for a given DBMS.
+ * @param string $type DBMS type
+ * @param array $additionalConnectionParams Additional connection parameters
+ * @return \OC\DB\Connection
+ */
public function getConnection($type, $additionalConnectionParams) {
$normalizedType = $this->normalizeType($type);
$eventManager = new EventManager();
@@ -124,6 +125,17 @@ class ConnectionFactory {
if (isset($additionalConnectionParams['driverOptions'])) {
$additionalConnectionParams = array_merge($additionalConnectionParams, $additionalConnectionParams['driverOptions']);
}
+ $host = $additionalConnectionParams['host'];
+ $port = isset($additionalConnectionParams['port']) ? $additionalConnectionParams['port'] : null;
+ $dbName = $additionalConnectionParams['dbname'];
+
+ // we set the connect string as dbname and unset the host to coerce doctrine into using it as connect string
+ if ($host === '') {
+ $additionalConnectionParams['dbname'] = $dbName; // use dbname as easy connect name
+ } else {
+ $additionalConnectionParams['dbname'] = '//' . $host . (!empty($port) ? ":{$port}" : "") . '/' . $dbName;
+ }
+ unset($additionalConnectionParams['host']);
break;
case 'sqlite3':
$journalMode = $additionalConnectionParams['sqlite.journal_mode'];
@@ -141,10 +153,10 @@ class ConnectionFactory {
}
/**
- * @brief Normalize DBMS type
- * @param string $type DBMS type
- * @return string Normalized DBMS type
- */
+ * @brief Normalize DBMS type
+ * @param string $type DBMS type
+ * @return string Normalized DBMS type
+ */
public function normalizeType($type) {
return $type === 'sqlite' ? 'sqlite3' : $type;
}
@@ -207,7 +219,7 @@ class ConnectionFactory {
'tablePrefix' => $connectionParams['tablePrefix']
];
- if($this->config->getValue('mysql.utf8mb4', false)) {
+ if ($this->config->getValue('mysql.utf8mb4', false)) {
$connectionParams['defaultTableOptions'] = [
'collate' => 'utf8mb4_bin',
'charset' => 'utf8mb4',
diff --git a/lib/private/DB/MDB2SchemaReader.php b/lib/private/DB/MDB2SchemaReader.php
index 9495160b52f..4092485d6a5 100644
--- a/lib/private/DB/MDB2SchemaReader.php
+++ b/lib/private/DB/MDB2SchemaReader.php
@@ -32,8 +32,6 @@
namespace OC\DB;
use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Schema\SchemaConfig;
-use Doctrine\DBAL\Platforms\MySqlPlatform;
use Doctrine\DBAL\Schema\Schema;
use OCP\IConfig;
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
index 69c34947feb..179ce72e8e1 100644
--- a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php
@@ -156,6 +156,13 @@ class OCIExpressionBuilder extends ExpressionBuilder {
/**
* @inheritdoc
*/
+ public function like($x, $y, $type = null) {
+ return parent::like($x, $y, $type) . " ESCAPE '\\'";
+ }
+
+ /**
+ * @inheritdoc
+ */
public function iLike($x, $y, $type = null) {
$x = $this->helper->quoteColumnName($x);
$y = $this->helper->quoteColumnName($y);
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php
new file mode 100644
index 00000000000..b165d8153f5
--- /dev/null
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\DB\QueryBuilder\ExpressionBuilder;
+
+
+class SqliteExpressionBuilder extends ExpressionBuilder {
+ /**
+ * @inheritdoc
+ */
+ public function like($x, $y, $type = null) {
+ return parent::like($x, $y, $type) . " ESCAPE '\\'";
+ }
+}
diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
new file mode 100644
index 00000000000..9ec8a9fd3c4
--- /dev/null
+++ b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\DB\QueryBuilder\FunctionBuilder;
+
+use OC\DB\QueryBuilder\QueryFunction;
+use OC\DB\QueryBuilder\QuoteHelper;
+use OCP\DB\QueryBuilder\IFunctionBuilder;
+
+class FunctionBuilder implements IFunctionBuilder {
+ /** @var QuoteHelper */
+ protected $helper;
+
+ /**
+ * ExpressionBuilder constructor.
+ *
+ * @param QuoteHelper $helper
+ */
+ public function __construct(QuoteHelper $helper) {
+ $this->helper = $helper;
+ }
+
+ public function md5($input) {
+ return new QueryFunction('MD5(' . $this->helper->quoteColumnName($input) . ')');
+ }
+
+ public function concat($x, $y) {
+ return new QueryFunction('CONCAT(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
+ }
+
+ public function substring($input, $start, $length = null) {
+ if ($length) {
+ return new QueryFunction('SUBSTR(' . $this->helper->quoteColumnName($input) . ', ' . $this->helper->quoteColumnName($start) . ', ' . $this->helper->quoteColumnName($length) . ')');
+ } else {
+ return new QueryFunction('SUBSTR(' . $this->helper->quoteColumnName($input) . ', ' . $this->helper->quoteColumnName($start) . ')');
+ }
+ }
+
+ public function sum($field) {
+ return new QueryFunction('SUM(' . $this->helper->quoteColumnName($field) . ')');
+ }
+}
diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php
new file mode 100644
index 00000000000..0f7a7dad236
--- /dev/null
+++ b/lib/private/DB/QueryBuilder/FunctionBuilder/OCIFunctionBuilder.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\DB\QueryBuilder\FunctionBuilder;
+
+use OC\DB\QueryBuilder\QueryFunction;
+
+class OCIFunctionBuilder extends FunctionBuilder {
+ public function md5($input) {
+ return new QueryFunction('LOWER(DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(' . $this->helper->quoteColumnName($input) .')))');
+ }
+}
diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php
new file mode 100644
index 00000000000..27ebf1a04f9
--- /dev/null
+++ b/lib/private/DB/QueryBuilder/FunctionBuilder/PgSqlFunctionBuilder.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\DB\QueryBuilder\FunctionBuilder;
+
+use OC\DB\QueryBuilder\QueryFunction;
+
+class PgSqlFunctionBuilder extends FunctionBuilder {
+ public function concat($x, $y) {
+ return new QueryFunction($this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y));
+ }
+}
diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php
new file mode 100644
index 00000000000..e985b7306a4
--- /dev/null
+++ b/lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\DB\QueryBuilder\FunctionBuilder;
+
+use OC\DB\QueryBuilder\QueryFunction;
+
+class SqliteFunctionBuilder extends FunctionBuilder {
+ public function concat($x, $y) {
+ return new QueryFunction($this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y));
+ }
+}
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php
index d5dd9cf0366..eac13b452ac 100644
--- a/lib/private/DB/QueryBuilder/QueryBuilder.php
+++ b/lib/private/DB/QueryBuilder/QueryBuilder.php
@@ -26,11 +26,17 @@ namespace OC\DB\QueryBuilder;
use Doctrine\DBAL\Platforms\MySqlPlatform;
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
+use Doctrine\DBAL\Platforms\SqlitePlatform;
use OC\DB\OracleConnection;
use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\MySqlExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\OCIExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\PgSqlExpressionBuilder;
+use OC\DB\QueryBuilder\ExpressionBuilder\SqliteExpressionBuilder;
+use OC\DB\QueryBuilder\FunctionBuilder\FunctionBuilder;
+use OC\DB\QueryBuilder\FunctionBuilder\OCIFunctionBuilder;
+use OC\DB\QueryBuilder\FunctionBuilder\PgSqlFunctionBuilder;
+use OC\DB\QueryBuilder\FunctionBuilder\SqliteFunctionBuilder;
use OC\SystemConfig;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\QueryBuilder\IQueryFunction;
@@ -110,12 +116,42 @@ class QueryBuilder implements IQueryBuilder {
return new PgSqlExpressionBuilder($this->connection);
} else if ($this->connection->getDatabasePlatform() instanceof MySqlPlatform) {
return new MySqlExpressionBuilder($this->connection);
+ } else if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
+ return new SqliteExpressionBuilder($this->connection);
} else {
return new ExpressionBuilder($this->connection);
}
}
/**
+ * Gets an FunctionBuilder used for object-oriented construction of query functions.
+ * This producer method is intended for convenient inline usage. Example:
+ *
+ * <code>
+ * $qb = $conn->getQueryBuilder()
+ * ->select('u')
+ * ->from('users', 'u')
+ * ->where($qb->fun()->md5('u.id'));
+ * </code>
+ *
+ * For more complex function construction, consider storing the function
+ * builder object in a local variable.
+ *
+ * @return \OCP\DB\QueryBuilder\IFunctionBuilder
+ */
+ public function func() {
+ if ($this->connection instanceof OracleConnection) {
+ return new OCIFunctionBuilder($this->helper);
+ } else if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
+ return new SqliteFunctionBuilder($this->helper);
+ } else if ($this->connection->getDatabasePlatform() instanceof PostgreSqlPlatform) {
+ return new PgSqlFunctionBuilder($this->helper);
+ } else {
+ return new FunctionBuilder($this->helper);
+ }
+ }
+
+ /**
* Gets the type of the currently built query.
*
* @return integer
diff --git a/lib/private/DB/QueryBuilder/QuoteHelper.php b/lib/private/DB/QueryBuilder/QuoteHelper.php
index 041718bce5a..705c3a89712 100644
--- a/lib/private/DB/QueryBuilder/QuoteHelper.php
+++ b/lib/private/DB/QueryBuilder/QuoteHelper.php
@@ -73,7 +73,7 @@ class QuoteHelper {
return $string;
}
- return $alias . '.`' . $columnName . '`';
+ return '`' . $alias . '`.`' . $columnName . '`';
}
return '`' . $string . '`';
diff --git a/lib/private/DB/SQLiteSessionInit.php b/lib/private/DB/SQLiteSessionInit.php
index f8e6dcef8ad..0e947b9918e 100644
--- a/lib/private/DB/SQLiteSessionInit.php
+++ b/lib/private/DB/SQLiteSessionInit.php
@@ -58,6 +58,9 @@ class SQLiteSessionInit implements EventSubscriber {
$sensitive = ($this->caseSensitiveLike) ? 'true' : 'false';
$args->getConnection()->executeUpdate('PRAGMA case_sensitive_like = ' . $sensitive);
$args->getConnection()->executeUpdate('PRAGMA journal_mode = ' . $this->journalMode);
+ /** @var \PDO $pdo */
+ $pdo = $args->getConnection()->getWrappedConnection();
+ $pdo->sqliteCreateFunction('md5', 'md5', 1);
}
public function getSubscribedEvents() {
diff --git a/lib/private/Encryption/File.php b/lib/private/Encryption/File.php
index 240a8f1ccab..2bc0e014f0c 100644
--- a/lib/private/Encryption/File.php
+++ b/lib/private/Encryption/File.php
@@ -25,12 +25,21 @@
namespace OC\Encryption;
use OC\Cache\CappedMemoryCache;
+use OCP\Files\IRootFolder;
+use OCP\Files\NotFoundException;
+use OCP\Share\IManager;
class File implements \OCP\Encryption\IFile {
/** @var Util */
protected $util;
+ /** @var IRootFolder */
+ private $rootFolder;
+
+ /** @var IManager */
+ private $shareManager;
+
/**
* cache results of already checked folders
*
@@ -38,9 +47,13 @@ class File implements \OCP\Encryption\IFile {
*/
protected $cache;
- public function __construct(Util $util) {
+ public function __construct(Util $util,
+ IRootFolder $rootFolder,
+ IManager $shareManager) {
$this->util = $util;
$this->cache = new CappedMemoryCache();
+ $this->rootFolder = $rootFolder;
+ $this->shareManager = $shareManager;
}
@@ -63,26 +76,34 @@ class File implements \OCP\Encryption\IFile {
}
$ownerPath = substr($ownerPath, strlen('/files'));
+ $userFolder = $this->rootFolder->getUserFolder($owner);
+ try {
+ $file = $userFolder->get($ownerPath);
+ } catch (NotFoundException $e) {
+ $file = null;
+ }
$ownerPath = $this->util->stripPartialFileExtension($ownerPath);
-
// first get the shares for the parent and cache the result so that we don't
// need to check all parents for every file
$parent = dirname($ownerPath);
+ $parentNode = $userFolder->get($parent);
if (isset($this->cache[$parent])) {
$resultForParents = $this->cache[$parent];
} else {
- $resultForParents = \OCP\Share::getUsersSharingFile($parent, $owner);
+ $resultForParents = $this->shareManager->getAccessList($parentNode);
$this->cache[$parent] = $resultForParents;
}
- $userIds = \array_merge($userIds, $resultForParents['users']);
+ $userIds = array_merge($userIds, $resultForParents['users']);
$public = $resultForParents['public'] || $resultForParents['remote'];
// Find out who, if anyone, is sharing the file
- $resultForFile = \OCP\Share::getUsersSharingFile($ownerPath, $owner, false, false, false);
- $userIds = \array_merge($userIds, $resultForFile['users']);
- $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
+ if ($file !== null) {
+ $resultForFile = $this->shareManager->getAccessList($file, false);
+ $userIds = array_merge($userIds, $resultForFile['users']);
+ $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
+ }
// check if it is a group mount
if (\OCP\App::isEnabled("files_external")) {
diff --git a/lib/private/Encryption/Manager.php b/lib/private/Encryption/Manager.php
index 4d40675801e..bfadebd0db0 100644
--- a/lib/private/Encryption/Manager.php
+++ b/lib/private/Encryption/Manager.php
@@ -193,8 +193,8 @@ class Manager implements IManager {
if (isset($this->encryptionModules[$moduleId])) {
return call_user_func($this->encryptionModules[$moduleId]['callback']);
} else {
- $message = "Module with id: $moduleId does not exist.";
- $hint = $this->l->t('Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
+ $message = "Module with ID: $moduleId does not exist.";
+ $hint = $this->l->t('Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
throw new Exceptions\ModuleDoesNotExistsException($message, $hint);
}
} else {
@@ -254,8 +254,11 @@ class Manager implements IManager {
* Add storage wrapper
*/
public function setupStorage() {
- $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
- Filesystem::addStorageWrapper('oc_encryption', array($encryptionWrapper, 'wrapStorage'), 2);
+ // If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
+ if (!empty($this->encryptionModules) || $this->isEnabled()) {
+ $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
+ Filesystem::addStorageWrapper('oc_encryption', array($encryptionWrapper, 'wrapStorage'), 2);
+ }
}
diff --git a/lib/private/Encryption/Util.php b/lib/private/Encryption/Util.php
index 76e1200a1cb..ed91c0fe549 100644
--- a/lib/private/Encryption/Util.php
+++ b/lib/private/Encryption/Util.php
@@ -31,7 +31,6 @@ use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
use OC\Files\Filesystem;
use OC\Files\View;
use OCP\Encryption\IEncryptionModule;
-use OCP\Files\Storage;
use OCP\IConfig;
class Util {
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 9b2cff62627..1f3f2433e45 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -37,6 +37,7 @@
namespace OC\Files\Cache;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use Doctrine\DBAL\Driver\Statement;
use OCP\Files\Cache\ICache;
use OCP\Files\Cache\ICacheEntry;
@@ -130,7 +131,7 @@ class Cache implements ICache {
$where = 'WHERE `fileid` = ?';
$params = array($file);
}
- $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
+ $sql = 'SELECT `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
`storage_mtime`, `encrypted`, `etag`, `permissions`, `checksum`
FROM `*PREFIX*filecache` ' . $where;
$result = $this->connection->executeQuery($sql, $params);
@@ -500,6 +501,7 @@ class Cache implements ICache {
* @param string $sourcePath
* @param string $targetPath
* @throws \OC\DatabaseException
+ * @throws \Exception if the given storages have an invalid id
*/
public function moveFromCache(ICache $sourceCache, $sourcePath, $targetPath) {
if ($sourceCache instanceof Cache) {
@@ -514,27 +516,42 @@ class Cache implements ICache {
list($sourceStorageId, $sourcePath) = $sourceCache->getMoveInfo($sourcePath);
list($targetStorageId, $targetPath) = $this->getMoveInfo($targetPath);
- // sql for final update
- $moveSql = 'UPDATE `*PREFIX*filecache` SET `storage` = ?, `path` = ?, `path_hash` = ?, `name` = ?, `parent` =? WHERE `fileid` = ?';
+ if (is_null($sourceStorageId) || $sourceStorageId === false) {
+ throw new \Exception('Invalid source storage id: ' . $sourceStorageId);
+ }
+ if (is_null($targetStorageId) || $targetStorageId === false) {
+ throw new \Exception('Invalid target storage id: ' . $targetStorageId);
+ }
+ $this->connection->beginTransaction();
if ($sourceData['mimetype'] === 'httpd/unix-directory') {
- //find all child entries
- $sql = 'SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path` LIKE ?';
- $result = $this->connection->executeQuery($sql, [$sourceStorageId, $this->connection->escapeLikeParameter($sourcePath) . '/%']);
- $childEntries = $result->fetchAll();
+ //update all child entries
$sourceLength = strlen($sourcePath);
- $this->connection->beginTransaction();
- $query = $this->connection->prepare('UPDATE `*PREFIX*filecache` SET `storage` = ?, `path` = ?, `path_hash` = ? WHERE `fileid` = ?');
-
- foreach ($childEntries as $child) {
- $newTargetPath = $targetPath . substr($child['path'], $sourceLength);
- $query->execute([$targetStorageId, $newTargetPath, md5($newTargetPath), $child['fileid']]);
+ $query = $this->connection->getQueryBuilder();
+
+ $fun = $query->func();
+ $newPathFunction = $fun->concat(
+ $query->createNamedParameter($targetPath),
+ $fun->substring('path', $query->createNamedParameter($sourceLength + 1, IQueryBuilder::PARAM_INT))// +1 for the leading slash
+ );
+ $query->update('filecache')
+ ->set('storage', $query->createNamedParameter($targetStorageId, IQueryBuilder::PARAM_INT))
+ ->set('path_hash', $fun->md5($newPathFunction))
+ ->set('path', $newPathFunction)
+ ->where($query->expr()->eq('storage', $query->createNamedParameter($sourceStorageId, IQueryBuilder::PARAM_INT)))
+ ->andWhere($query->expr()->like('path', $query->createNamedParameter($this->connection->escapeLikeParameter($sourcePath) . '/%')));
+
+ try {
+ $query->execute();
+ } catch (\OC\DatabaseException $e) {
+ $this->connection->rollBack();
+ throw $e;
}
- $this->connection->executeQuery($moveSql, [$targetStorageId, $targetPath, md5($targetPath), basename($targetPath), $newParentId, $sourceId]);
- $this->connection->commit();
- } else {
- $this->connection->executeQuery($moveSql, [$targetStorageId, $targetPath, md5($targetPath), \OC_Util::basename($targetPath), $newParentId, $sourceId]);
}
+
+ $sql = 'UPDATE `*PREFIX*filecache` SET `storage` = ?, `path` = ?, `path_hash` = ?, `name` = ?, `parent` = ? WHERE `fileid` = ?';
+ $this->connection->executeQuery($sql, array($targetStorageId, $targetPath, md5($targetPath), \OC_Util::basename($targetPath), $newParentId, $sourceId));
+ $this->connection->commit();
} else {
$this->moveFromCacheFallback($sourceCache, $sourcePath, $targetPath);
}
diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php
index 2d20da72f51..6812caabd24 100644
--- a/lib/private/Files/Cache/QuerySearchHelper.php
+++ b/lib/private/Files/Cache/QuerySearchHelper.php
@@ -152,7 +152,8 @@ class QuerySearchHelper {
'name' => 'string',
'size' => 'integer',
'tagname' => 'string',
- 'favorite' => 'boolean'
+ 'favorite' => 'boolean',
+ 'fileid' => 'integer'
];
$comparisons = [
'mimetype' => ['eq', 'like'],
@@ -161,6 +162,7 @@ class QuerySearchHelper {
'size' => ['eq', 'gt', 'lt', 'gte', 'lte'],
'tagname' => ['eq', 'like'],
'favorite' => ['eq'],
+ 'fileid' => ['eq']
];
if (!isset($types[$operator->getField()])) {
diff --git a/lib/private/Files/Cache/Scanner.php b/lib/private/Files/Cache/Scanner.php
index e65c01559f0..fe25da6d09a 100644
--- a/lib/private/Files/Cache/Scanner.php
+++ b/lib/private/Files/Cache/Scanner.php
@@ -40,7 +40,6 @@ use OC\Hooks\BasicEmitter;
use OCP\Config;
use OCP\Files\Cache\IScanner;
use OCP\Files\ForbiddenException;
-use OCP\Files\Storage\ILockingStorage;
use OCP\Lock\ILockingProvider;
/**
diff --git a/lib/private/Files/Cache/StorageGlobal.php b/lib/private/Files/Cache/StorageGlobal.php
index 791835baccc..81cd075cefe 100644
--- a/lib/private/Files/Cache/StorageGlobal.php
+++ b/lib/private/Files/Cache/StorageGlobal.php
@@ -21,7 +21,6 @@
namespace OC\Files\Cache;
use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\Files\Mount\IMountPoint;
use OCP\IDBConnection;
/**
diff --git a/lib/private/Files/Config/LazyStorageMountInfo.php b/lib/private/Files/Config/LazyStorageMountInfo.php
index 40d463c5103..e72eacf330d 100644
--- a/lib/private/Files/Config/LazyStorageMountInfo.php
+++ b/lib/private/Files/Config/LazyStorageMountInfo.php
@@ -22,10 +22,7 @@
namespace OC\Files\Config;
-use OC\Files\Filesystem;
-use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Mount\IMountPoint;
-use OCP\Files\Node;
use OCP\IUser;
class LazyStorageMountInfo extends CachedMountInfo {
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 423eb5c423d..6ec78e4d81c 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -24,14 +24,11 @@
namespace OC\Files\Config;
-use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
-use OC\Files\Filesystem;
use OCA\Files_Sharing\SharedMount;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Config\IUserMountCache;
use OCP\Files\Mount\IMountPoint;
-use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\ICache;
use OCP\IDBConnection;
@@ -220,15 +217,20 @@ class UserMountCache implements IUserMountCache {
/**
* @param int $numericStorageId
+ * @param string|null $user limit the results to a single user
* @return CachedMountInfo[]
*/
- public function getMountsForStorageId($numericStorageId) {
+ public function getMountsForStorageId($numericStorageId, $user = null) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path')
->from('mounts', 'm')
->innerJoin('m', 'filecache', 'f' , $builder->expr()->eq('m.root_id', 'f.fileid'))
->where($builder->expr()->eq('storage_id', $builder->createPositionalParameter($numericStorageId, IQueryBuilder::PARAM_INT)));
+ if ($user) {
+ $query->andWhere($builder->expr()->eq('user_id', $builder->createPositionalParameter($user)));
+ }
+
$rows = $query->execute()->fetchAll();
return array_filter(array_map([$this, 'dbRowToMountInfo'], $rows));
@@ -278,16 +280,17 @@ class UserMountCache implements IUserMountCache {
/**
* @param int $fileId
+ * @param string|null $user optionally restrict the results to a single user
* @return ICachedMountInfo[]
* @since 9.0.0
*/
- public function getMountsForFileId($fileId) {
+ public function getMountsForFileId($fileId, $user = null) {
try {
list($storageId, $internalPath) = $this->getCacheInfoFromFileId($fileId);
} catch (NotFoundException $e) {
return [];
}
- $mountsForStorage = $this->getMountsForStorageId($storageId);
+ $mountsForStorage = $this->getMountsForStorageId($storageId, $user);
// filter mounts that are from the same storage but a different directory
return array_filter($mountsForStorage, function (ICachedMountInfo $mount) use ($internalPath, $fileId) {
diff --git a/lib/private/Files/FileInfo.php b/lib/private/Files/FileInfo.php
index 8e968ca453d..e1b5bf983ce 100644
--- a/lib/private/Files/FileInfo.php
+++ b/lib/private/Files/FileInfo.php
@@ -32,8 +32,6 @@ namespace OC\Files;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Mount\IMountPoint;
-use OCP\Files\Storage\IStorage;
-use OCP\Files\IHomeStorage;
use OCP\IUser;
class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
diff --git a/lib/private/Files/Filesystem.php b/lib/private/Files/Filesystem.php
index 22b14e44074..0ebf23818b4 100644
--- a/lib/private/Files/Filesystem.php
+++ b/lib/private/Files/Filesystem.php
@@ -64,7 +64,6 @@ use OC\Files\Mount\MountPoint;
use OC\Files\Storage\StorageFactory;
use OC\Lockdown\Filesystem\NullStorage;
use OCP\Files\Config\IMountProvider;
-use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
use OCP\IUserManager;
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 45372d0fedf..fcadbe27393 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -280,7 +280,12 @@ class Folder extends Node implements \OCP\Files\Folder {
*/
public function getById($id) {
$mountCache = $this->root->getUserMountCache();
- $mountsContainingFile = $mountCache->getMountsForFileId((int)$id);
+ if (strpos($this->getPath(), '/', 1) > 0) {
+ list(, $user) = explode('/', $this->getPath());
+ } else {
+ $user = null;
+ }
+ $mountsContainingFile = $mountCache->getMountsForFileId((int)$id, $user);
$mounts = $this->root->getMountsIn($this->path);
$mounts[] = $this->root->getMount($this->path);
/** @var IMountPoint[] $folderMounts */
@@ -413,7 +418,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$storage = $mount->getStorage();
if ($storage->instanceOfStorage('\OC\Files\Storage\Wrapper\Jail')) {
/** @var \OC\Files\Storage\Wrapper\Jail $storage */
- $jailRoot = $storage->getSourcePath('');
+ $jailRoot = $storage->getUnjailedPath('');
$rootLength = strlen($jailRoot) + 1;
if ($path === $jailRoot) {
return $mount->getMountPoint();
diff --git a/lib/private/Files/Node/LazyRoot.php b/lib/private/Files/Node/LazyRoot.php
index 1fb3f6448bc..ae7623d0ed9 100644
--- a/lib/private/Files/Node/LazyRoot.php
+++ b/lib/private/Files/Node/LazyRoot.php
@@ -21,9 +21,7 @@
*/
namespace OC\Files\Node;
-use OC\Files\Mount\MountPoint;
use OCP\Files\IRootFolder;
-use OCP\Files\NotPermittedException;
/**
* Class LazyRoot
diff --git a/lib/private/Files/ObjectStore/Swift.php b/lib/private/Files/ObjectStore/Swift.php
index 2ccaad27e88..8b64fd66de0 100644
--- a/lib/private/Files/ObjectStore/Swift.php
+++ b/lib/private/Files/ObjectStore/Swift.php
@@ -26,6 +26,12 @@ namespace OC\Files\ObjectStore;
use Guzzle\Http\Exception\ClientErrorResponseException;
use OCP\Files\ObjectStore\IObjectStore;
+use OCP\Files\StorageAuthException;
+use OCP\Files\StorageNotAvailableException;
+use OpenCloud\Common\Service\Catalog;
+use OpenCloud\Common\Service\CatalogItem;
+use OpenCloud\Identity\Resource\Token;
+use OpenCloud\ObjectStore\Service;
use OpenCloud\OpenStack;
use OpenCloud\Rackspace;
@@ -51,6 +57,8 @@ class Swift implements IObjectStore {
*/
private $container;
+ private $memcache;
+
public function __construct($params) {
if (isset($params['bucket'])) {
$params['container'] = $params['bucket'];
@@ -65,9 +73,15 @@ class Swift implements IObjectStore {
if (isset($params['apiKey'])) {
$this->client = new Rackspace($params['url'], $params);
+ $cacheKey = $this->params['username'] . '@' . $this->params['url'] . '/' . $this->params['bucket'];
} else {
$this->client = new OpenStack($params['url'], $params);
+ $cacheKey = $this->params['username'] . '@' . $this->params['url'] . '/' . $this->params['bucket'];
}
+
+ $cacheFactory = \OC::$server->getMemCacheFactory();
+ $this->memcache = $cacheFactory->create('swift::' . $cacheKey);
+
$this->params = $params;
}
@@ -76,17 +90,56 @@ class Swift implements IObjectStore {
return;
}
- // the OpenCloud client library will default to 'cloudFiles' if $serviceName is null
- $serviceName = null;
+ $this->importToken();
+
+ /** @var Token $token */
+ $token = $this->client->getTokenObject();
+
+ if (!$token || $token->hasExpired()) {
+ try {
+ $this->client->authenticate();
+ $this->exportToken();
+ } catch (ClientErrorResponseException $e) {
+ $statusCode = $e->getResponse()->getStatusCode();
+ if ($statusCode == 412) {
+ throw new StorageAuthException('Precondition failed, verify the keystone url', $e);
+ } else if ($statusCode === 401) {
+ throw new StorageAuthException('Authentication failed, verify the username, password and possibly tenant', $e);
+ } else {
+ throw new StorageAuthException('Unknown error', $e);
+ }
+ }
+ }
+
+
+ /** @var Catalog $catalog */
+ $catalog = $this->client->getCatalog();
+
if (isset($this->params['serviceName'])) {
$serviceName = $this->params['serviceName'];
+ } else {
+ $serviceName = Service::DEFAULT_NAME;
}
- // the OpenCloud client library will default to 'publicURL' if $urlType is null
- $urlType = null;
if (isset($this->params['urlType'])) {
$urlType = $this->params['urlType'];
+ if ($urlType !== 'internalURL' && $urlType !== 'publicURL') {
+ throw new StorageNotAvailableException('Invalid url type');
+ }
+ } else {
+ $urlType = Service::DEFAULT_URL_TYPE;
+ }
+
+ $catalogItem = $this->getCatalogForService($catalog, $serviceName);
+ if (!$catalogItem) {
+ $available = implode(', ', $this->getAvailableServiceNames($catalog));
+ throw new StorageNotAvailableException(
+ "Service $serviceName not found in service catalog, available services: $available"
+ );
+ } else if (isset($this->params['region'])) {
+ $this->validateRegion($catalogItem, $this->params['region']);
}
+
$this->objectStoreService = $this->client->objectStoreService($serviceName, $this->params['region'], $urlType);
try {
@@ -101,6 +154,79 @@ class Swift implements IObjectStore {
}
}
+ private function exportToken() {
+ $export = $this->client->exportCredentials();
+ $export['catalog'] = array_map(function (CatalogItem $item) {
+ return [
+ 'name' => $item->getName(),
+ 'endpoints' => $item->getEndpoints(),
+ 'type' => $item->getType()
+ ];
+ }, $export['catalog']->getItems());
+ $this->memcache->set('token', json_encode($export));
+ }
+
+ private function importToken() {
+ $cachedTokenString = $this->memcache->get('token');
+ if ($cachedTokenString) {
+ $cachedToken = json_decode($cachedTokenString, true);
+ $cachedToken['catalog'] = array_map(function (array $item) {
+ $itemClass = new \stdClass();
+ $itemClass->name = $item['name'];
+ $itemClass->endpoints = array_map(function (array $endpoint) {
+ return (object) $endpoint;
+ }, $item['endpoints']);
+ $itemClass->type = $item['type'];
+
+ return $itemClass;
+ }, $cachedToken['catalog']);
+ try {
+ $this->client->importCredentials($cachedToken);
+ } catch (\Exception $e) {
+ $this->client->setTokenObject(new Token());
+ }
+ }
+ }
+
+ /**
+ * @param Catalog $catalog
+ * @param $name
+ * @return null|CatalogItem
+ */
+ private function getCatalogForService(Catalog $catalog, $name) {
+ foreach ($catalog->getItems() as $item) {
+ /** @var CatalogItem $item */
+ if ($item->hasType(Service::DEFAULT_TYPE) && $item->hasName($name)) {
+ return $item;
+ }
+ }
+
+ return null;
+ }
+
+ private function validateRegion(CatalogItem $item, $region) {
+ $endPoints = $item->getEndpoints();
+ foreach ($endPoints as $endPoint) {
+ if ($endPoint->region === $region) {
+ return;
+ }
+ }
+
+ $availableRegions = implode(', ', array_map(function ($endpoint) {
+ return $endpoint->region;
+ }, $endPoints));
+
+ throw new StorageNotAvailableException("Invalid region '$region', available regions: $availableRegions");
+ }
+
+ private function getAvailableServiceNames(Catalog $catalog) {
+ return array_map(function (CatalogItem $item) {
+ return $item->getName();
+ }, array_filter($catalog->getItems(), function (CatalogItem $item) {
+ return $item->hasType(Service::DEFAULT_TYPE);
+ }));
+ }
+
/**
* @return string the container name where objects are stored
*/
@@ -135,7 +261,7 @@ class Swift implements IObjectStore {
$stream = $objectContent->getStream();
// save the object content in the context of the stream to prevent it being gc'd until the stream is closed
- stream_context_set_option($stream, 'swift','content', $objectContent);
+ stream_context_set_option($stream, 'swift', 'content', $objectContent);
return $stream;
}
diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php
index 73cf137181a..223f270bc45 100644
--- a/lib/private/Files/Storage/DAV.php
+++ b/lib/private/Files/Storage/DAV.php
@@ -38,12 +38,10 @@ use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Message\ResponseInterface;
use Icewind\Streams\CallbackWrapper;
use OC\Files\Filesystem;
-use OC\Files\Stream\Close;
use Icewind\Streams\IteratorDirectory;
use OC\MemCache\ArrayCache;
use OCP\AppFramework\Http;
use OCP\Constants;
-use OCP\Files;
use OCP\Files\FileInfo;
use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException;
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index 80d48680be1..4eb9fb13deb 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -35,6 +35,7 @@
namespace OC\Files\Storage;
+use OC\Files\Storage\Wrapper\Jail;
use OCP\Files\ForbiddenException;
/**
@@ -369,9 +370,10 @@ class Local extends \OC\Files\Storage\Common {
}
if (substr($realPath, 0, $this->dataDirLength) === $this->realDataDir) {
return $fullPath;
- } else {
- throw new ForbiddenException("Following symlinks is not allowed ('$fullPath' -> '$realPath' not inside '{$this->realDataDir}')", false);
}
+
+ \OCP\Util::writeLog('core', "Following symlinks is not allowed ('$fullPath' -> '$realPath' not inside '{$this->realDataDir}')", \OCP\Util::ERROR);
+ throw new ForbiddenException('Following symlinks is not allowed', false);
}
/**
@@ -426,7 +428,13 @@ class Local extends \OC\Files\Storage\Common {
* @return bool
*/
public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
- if ($sourceStorage->instanceOfStorage('\OC\Files\Storage\Local')) {
+ if ($sourceStorage->instanceOfStorage(Local::class)) {
+ if ($sourceStorage->instanceOfStorage(Jail::class)) {
+ /**
+ * @var \OC\Files\Storage\Wrapper\Jail $sourceStorage
+ */
+ $sourceInternalPath = $sourceStorage->getUnjailedPath($sourceInternalPath);
+ }
/**
* @var \OC\Files\Storage\Local $sourceStorage
*/
diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php
index c0ccd22d147..793849914d7 100644
--- a/lib/private/Files/Storage/Wrapper/Encryption.php
+++ b/lib/private/Files/Storage/Wrapper/Encryption.php
@@ -910,7 +910,8 @@ class Encryption extends Wrapper {
*/
protected function getHeader($path) {
$realFile = $this->util->stripPartialFileExtension($path);
- if ($this->storage->file_exists($realFile)) {
+ $exists = $this->storage->file_exists($realFile);
+ if ($exists) {
$path = $realFile;
}
@@ -922,8 +923,9 @@ class Encryption extends Wrapper {
if (!isset($result[Util::HEADER_ENCRYPTION_MODULE_KEY])) {
if (!empty($result)) {
$result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE';
- } else {
+ } else if ($exists) {
// if the header was empty we have to check first if it is a encrypted file at all
+ // We would do query to filecache only if we know that entry in filecache exists
$info = $this->getCache()->get($path);
if (isset($info['encrypted']) && $info['encrypted'] === true) {
$result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE';
diff --git a/lib/private/Files/Storage/Wrapper/Jail.php b/lib/private/Files/Storage/Wrapper/Jail.php
index 013f5ab2344..91e8e5ed3c9 100644
--- a/lib/private/Files/Storage/Wrapper/Jail.php
+++ b/lib/private/Files/Storage/Wrapper/Jail.php
@@ -49,7 +49,7 @@ class Jail extends Wrapper {
$this->rootPath = $arguments['root'];
}
- public function getSourcePath($path) {
+ public function getUnjailedPath($path) {
if ($path === '') {
return $this->rootPath;
} else {
@@ -68,7 +68,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function mkdir($path) {
- return $this->getWrapperStorage()->mkdir($this->getSourcePath($path));
+ return $this->getWrapperStorage()->mkdir($this->getUnjailedPath($path));
}
/**
@@ -78,7 +78,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function rmdir($path) {
- return $this->getWrapperStorage()->rmdir($this->getSourcePath($path));
+ return $this->getWrapperStorage()->rmdir($this->getUnjailedPath($path));
}
/**
@@ -88,7 +88,7 @@ class Jail extends Wrapper {
* @return resource
*/
public function opendir($path) {
- return $this->getWrapperStorage()->opendir($this->getSourcePath($path));
+ return $this->getWrapperStorage()->opendir($this->getUnjailedPath($path));
}
/**
@@ -98,7 +98,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function is_dir($path) {
- return $this->getWrapperStorage()->is_dir($this->getSourcePath($path));
+ return $this->getWrapperStorage()->is_dir($this->getUnjailedPath($path));
}
/**
@@ -108,7 +108,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function is_file($path) {
- return $this->getWrapperStorage()->is_file($this->getSourcePath($path));
+ return $this->getWrapperStorage()->is_file($this->getUnjailedPath($path));
}
/**
@@ -119,7 +119,7 @@ class Jail extends Wrapper {
* @return array
*/
public function stat($path) {
- return $this->getWrapperStorage()->stat($this->getSourcePath($path));
+ return $this->getWrapperStorage()->stat($this->getUnjailedPath($path));
}
/**
@@ -129,7 +129,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function filetype($path) {
- return $this->getWrapperStorage()->filetype($this->getSourcePath($path));
+ return $this->getWrapperStorage()->filetype($this->getUnjailedPath($path));
}
/**
@@ -140,7 +140,7 @@ class Jail extends Wrapper {
* @return int
*/
public function filesize($path) {
- return $this->getWrapperStorage()->filesize($this->getSourcePath($path));
+ return $this->getWrapperStorage()->filesize($this->getUnjailedPath($path));
}
/**
@@ -150,7 +150,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function isCreatable($path) {
- return $this->getWrapperStorage()->isCreatable($this->getSourcePath($path));
+ return $this->getWrapperStorage()->isCreatable($this->getUnjailedPath($path));
}
/**
@@ -160,7 +160,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function isReadable($path) {
- return $this->getWrapperStorage()->isReadable($this->getSourcePath($path));
+ return $this->getWrapperStorage()->isReadable($this->getUnjailedPath($path));
}
/**
@@ -170,7 +170,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function isUpdatable($path) {
- return $this->getWrapperStorage()->isUpdatable($this->getSourcePath($path));
+ return $this->getWrapperStorage()->isUpdatable($this->getUnjailedPath($path));
}
/**
@@ -180,7 +180,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function isDeletable($path) {
- return $this->getWrapperStorage()->isDeletable($this->getSourcePath($path));
+ return $this->getWrapperStorage()->isDeletable($this->getUnjailedPath($path));
}
/**
@@ -190,7 +190,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function isSharable($path) {
- return $this->getWrapperStorage()->isSharable($this->getSourcePath($path));
+ return $this->getWrapperStorage()->isSharable($this->getUnjailedPath($path));
}
/**
@@ -201,7 +201,7 @@ class Jail extends Wrapper {
* @return int
*/
public function getPermissions($path) {
- return $this->getWrapperStorage()->getPermissions($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getPermissions($this->getUnjailedPath($path));
}
/**
@@ -211,7 +211,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function file_exists($path) {
- return $this->getWrapperStorage()->file_exists($this->getSourcePath($path));
+ return $this->getWrapperStorage()->file_exists($this->getUnjailedPath($path));
}
/**
@@ -221,7 +221,7 @@ class Jail extends Wrapper {
* @return int
*/
public function filemtime($path) {
- return $this->getWrapperStorage()->filemtime($this->getSourcePath($path));
+ return $this->getWrapperStorage()->filemtime($this->getUnjailedPath($path));
}
/**
@@ -231,7 +231,7 @@ class Jail extends Wrapper {
* @return string
*/
public function file_get_contents($path) {
- return $this->getWrapperStorage()->file_get_contents($this->getSourcePath($path));
+ return $this->getWrapperStorage()->file_get_contents($this->getUnjailedPath($path));
}
/**
@@ -242,7 +242,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function file_put_contents($path, $data) {
- return $this->getWrapperStorage()->file_put_contents($this->getSourcePath($path), $data);
+ return $this->getWrapperStorage()->file_put_contents($this->getUnjailedPath($path), $data);
}
/**
@@ -252,7 +252,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function unlink($path) {
- return $this->getWrapperStorage()->unlink($this->getSourcePath($path));
+ return $this->getWrapperStorage()->unlink($this->getUnjailedPath($path));
}
/**
@@ -263,7 +263,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function rename($path1, $path2) {
- return $this->getWrapperStorage()->rename($this->getSourcePath($path1), $this->getSourcePath($path2));
+ return $this->getWrapperStorage()->rename($this->getUnjailedPath($path1), $this->getUnjailedPath($path2));
}
/**
@@ -274,7 +274,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function copy($path1, $path2) {
- return $this->getWrapperStorage()->copy($this->getSourcePath($path1), $this->getSourcePath($path2));
+ return $this->getWrapperStorage()->copy($this->getUnjailedPath($path1), $this->getUnjailedPath($path2));
}
/**
@@ -285,7 +285,7 @@ class Jail extends Wrapper {
* @return resource
*/
public function fopen($path, $mode) {
- return $this->getWrapperStorage()->fopen($this->getSourcePath($path), $mode);
+ return $this->getWrapperStorage()->fopen($this->getUnjailedPath($path), $mode);
}
/**
@@ -296,7 +296,7 @@ class Jail extends Wrapper {
* @return string
*/
public function getMimeType($path) {
- return $this->getWrapperStorage()->getMimeType($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getMimeType($this->getUnjailedPath($path));
}
/**
@@ -308,7 +308,7 @@ class Jail extends Wrapper {
* @return string
*/
public function hash($type, $path, $raw = false) {
- return $this->getWrapperStorage()->hash($type, $this->getSourcePath($path), $raw);
+ return $this->getWrapperStorage()->hash($type, $this->getUnjailedPath($path), $raw);
}
/**
@@ -318,7 +318,7 @@ class Jail extends Wrapper {
* @return int
*/
public function free_space($path) {
- return $this->getWrapperStorage()->free_space($this->getSourcePath($path));
+ return $this->getWrapperStorage()->free_space($this->getUnjailedPath($path));
}
/**
@@ -340,7 +340,7 @@ class Jail extends Wrapper {
* @return bool
*/
public function touch($path, $mtime = null) {
- return $this->getWrapperStorage()->touch($this->getSourcePath($path), $mtime);
+ return $this->getWrapperStorage()->touch($this->getUnjailedPath($path), $mtime);
}
/**
@@ -351,7 +351,7 @@ class Jail extends Wrapper {
* @return string
*/
public function getLocalFile($path) {
- return $this->getWrapperStorage()->getLocalFile($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getLocalFile($this->getUnjailedPath($path));
}
/**
@@ -365,7 +365,7 @@ class Jail extends Wrapper {
* returning true for other changes in the folder is optional
*/
public function hasUpdated($path, $time) {
- return $this->getWrapperStorage()->hasUpdated($this->getSourcePath($path), $time);
+ return $this->getWrapperStorage()->hasUpdated($this->getUnjailedPath($path), $time);
}
/**
@@ -379,7 +379,7 @@ class Jail extends Wrapper {
if (!$storage) {
$storage = $this->getWrapperStorage();
}
- $sourceCache = $this->getWrapperStorage()->getCache($this->getSourcePath($path), $storage);
+ $sourceCache = $this->getWrapperStorage()->getCache($this->getUnjailedPath($path), $storage);
return new CacheJail($sourceCache, $this->rootPath);
}
@@ -390,7 +390,7 @@ class Jail extends Wrapper {
* @return string
*/
public function getOwner($path) {
- return $this->getWrapperStorage()->getOwner($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getOwner($this->getUnjailedPath($path));
}
/**
@@ -404,7 +404,7 @@ class Jail extends Wrapper {
if (!$storage) {
$storage = $this;
}
- return $this->getWrapperStorage()->getWatcher($this->getSourcePath($path), $storage);
+ return $this->getWrapperStorage()->getWatcher($this->getUnjailedPath($path), $storage);
}
/**
@@ -414,7 +414,7 @@ class Jail extends Wrapper {
* @return string
*/
public function getETag($path) {
- return $this->getWrapperStorage()->getETag($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getETag($this->getUnjailedPath($path));
}
/**
@@ -422,7 +422,7 @@ class Jail extends Wrapper {
* @return array
*/
public function getMetaData($path) {
- return $this->getWrapperStorage()->getMetaData($this->getSourcePath($path));
+ return $this->getWrapperStorage()->getMetaData($this->getUnjailedPath($path));
}
/**
@@ -432,7 +432,7 @@ class Jail extends Wrapper {
* @throws \OCP\Lock\LockedException
*/
public function acquireLock($path, $type, ILockingProvider $provider) {
- $this->getWrapperStorage()->acquireLock($this->getSourcePath($path), $type, $provider);
+ $this->getWrapperStorage()->acquireLock($this->getUnjailedPath($path), $type, $provider);
}
/**
@@ -441,7 +441,7 @@ class Jail extends Wrapper {
* @param \OCP\Lock\ILockingProvider $provider
*/
public function releaseLock($path, $type, ILockingProvider $provider) {
- $this->getWrapperStorage()->releaseLock($this->getSourcePath($path), $type, $provider);
+ $this->getWrapperStorage()->releaseLock($this->getUnjailedPath($path), $type, $provider);
}
/**
@@ -450,7 +450,7 @@ class Jail extends Wrapper {
* @param \OCP\Lock\ILockingProvider $provider
*/
public function changeLock($path, $type, ILockingProvider $provider) {
- $this->getWrapperStorage()->changeLock($this->getSourcePath($path), $type, $provider);
+ $this->getWrapperStorage()->changeLock($this->getUnjailedPath($path), $type, $provider);
}
/**
@@ -460,7 +460,7 @@ class Jail extends Wrapper {
* @return array
*/
public function resolvePath($path) {
- return [$this->getWrapperStorage(), $this->getSourcePath($path)];
+ return [$this->getWrapperStorage(), $this->getUnjailedPath($path)];
}
/**
@@ -473,7 +473,7 @@ class Jail extends Wrapper {
if ($sourceStorage === $this) {
return $this->copy($sourceInternalPath, $targetInternalPath);
}
- return $this->getWrapperStorage()->copyFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath));
+ return $this->getWrapperStorage()->copyFromStorage($sourceStorage, $sourceInternalPath, $this->getUnjailedPath($targetInternalPath));
}
/**
@@ -486,6 +486,6 @@ class Jail extends Wrapper {
if ($sourceStorage === $this) {
return $this->rename($sourceInternalPath, $targetInternalPath);
}
- return $this->getWrapperStorage()->moveFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath));
+ return $this->getWrapperStorage()->moveFromStorage($sourceStorage, $sourceInternalPath, $this->getUnjailedPath($targetInternalPath));
}
}
diff --git a/lib/private/Files/Storage/Wrapper/PermissionsMask.php b/lib/private/Files/Storage/Wrapper/PermissionsMask.php
index ab0c30a4736..d66390dad49 100644
--- a/lib/private/Files/Storage/Wrapper/PermissionsMask.php
+++ b/lib/private/Files/Storage/Wrapper/PermissionsMask.php
@@ -147,4 +147,8 @@ class PermissionsMask extends Wrapper {
}
return $data;
}
+
+ public function getScanner($path = '', $storage = null) {
+ return parent::getScanner($path, $this->storage);
+ }
}
diff --git a/lib/private/Files/Type/Loader.php b/lib/private/Files/Type/Loader.php
index d1f447d8081..4dd798e7b07 100644
--- a/lib/private/Files/Type/Loader.php
+++ b/lib/private/Files/Type/Loader.php
@@ -24,7 +24,6 @@ namespace OC\Files\Type;
use OCP\Files\IMimeTypeLoader;
use OCP\IDBConnection;
-
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
/**
diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php
index e76f3225c3c..02f355fd4d9 100644
--- a/lib/private/Files/Utils/Scanner.php
+++ b/lib/private/Files/Utils/Scanner.php
@@ -32,6 +32,7 @@ use OC\ForbiddenException;
use OC\Hooks\PublicEmitter;
use OC\Lock\DBLockingProvider;
use OCA\Files_Sharing\SharedStorage;
+use OCP\Files\NotFoundException;
use OCP\Files\Storage\IStorage;
use OCP\Files\StorageNotAvailableException;
use OCP\ILogger;
@@ -161,6 +162,7 @@ class Scanner extends PublicEmitter {
/**
* @param string $dir
* @throws \OC\ForbiddenException
+ * @throws \OCP\Files\NotFoundException
*/
public function scan($dir = '') {
if (!Filesystem::isValidPath($dir)) {
@@ -210,6 +212,9 @@ class Scanner extends PublicEmitter {
$this->triggerPropagator($storage, $path);
});
+ if (!$storage->file_exists($relativePath)) {
+ throw new NotFoundException($dir);
+ }
if (!$isDbLocking) {
$this->db->beginTransaction();
}
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 506128d7fcd..70b74a8242e 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -61,8 +61,6 @@ use OCP\Files\InvalidPathException;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\ReservedWordException;
-use OCP\Files\UnseekableException;
-use OCP\Files\Storage\ILockingStorage;
use OCP\IUser;
use OCP\Lock\ILockingProvider;
use OCP\Lock\LockedException;
@@ -569,7 +567,7 @@ class View {
$mtime = time();
}
//if native touch fails, we emulate it by changing the mtime in the cache
- $this->putFileInfo($path, array('mtime' => $mtime));
+ $this->putFileInfo($path, array('mtime' => floor($mtime)));
}
return true;
}
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index 38d0ce13684..0d6030d5744 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -46,7 +46,6 @@ use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\CodeChecker\CodeChecker;
use OC\App\CodeChecker\EmptyCheck;
use OC\App\CodeChecker\PrivateCheck;
-use OC\Archive\Archive;
use OC\Archive\TAR;
use OC_App;
use OC_DB;
diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php
index 8aad395065c..581ca3fb5d1 100644
--- a/lib/private/L10N/Factory.php
+++ b/lib/private/L10N/Factory.php
@@ -271,24 +271,6 @@ class Factory implements IFactory {
}
/**
- * @param string|null $app App id or null for core
- * @return string
- */
- public function setLanguageFromRequest($app = null) {
-
- try {
- $requestLanguage = $this->getLanguageFromRequest($app);
- } catch (LanguageNotFoundException $e) {
- $requestLanguage = 'en';
- }
-
- if ($app === null && !$this->requestLanguage) {
- $this->requestLanguage = $requestLanguage;
- }
- return $requestLanguage;
- }
-
- /**
* Checks if $sub is a subdirectory of $parent
*
* @param string $sub
diff --git a/lib/private/Lockdown/Filesystem/NullCache.php b/lib/private/Lockdown/Filesystem/NullCache.php
index 9cb8016194b..670a2fadef3 100644
--- a/lib/private/Lockdown/Filesystem/NullCache.php
+++ b/lib/private/Lockdown/Filesystem/NullCache.php
@@ -22,7 +22,6 @@ namespace OC\Lockdown\Filesystem;
use OC\Files\Cache\CacheEntry;
use OCP\Constants;
use OCP\Files\Cache\ICache;
-use OCP\Files\Cache\ICacheEntry;
use OCP\Files\FileInfo;
use OCP\Files\Search\ISearchQuery;
diff --git a/lib/private/Lockdown/LockdownManager.php b/lib/private/Lockdown/LockdownManager.php
index 5ce52a03683..93752dc922f 100644
--- a/lib/private/Lockdown/LockdownManager.php
+++ b/lib/private/Lockdown/LockdownManager.php
@@ -20,27 +20,60 @@
namespace OC\Lockdown;
use OC\Authentication\Token\IToken;
+use OCP\ISession;
use OCP\Lockdown\ILockdownManager;
class LockdownManager implements ILockdownManager {
+ /** @var ISession */
+ private $sessionCallback;
+
private $enabled = false;
/** @var array|null */
private $scope;
+ /**
+ * LockdownManager constructor.
+ *
+ * @param callable $sessionCallback we need to inject the session lazily to avoid dependency loops
+ */
+ public function __construct(callable $sessionCallback) {
+ $this->sessionCallback = $sessionCallback;
+ }
+
+
public function enable() {
$this->enabled = true;
}
+ /**
+ * @return ISession
+ */
+ private function getSession() {
+ $callback = $this->sessionCallback;
+ return $callback();
+ }
+
+ private function getScopeAsArray() {
+ if (!$this->scope) {
+ $session = $this->getSession();
+ $sessionScope = $session->get('token_scope');
+ if ($sessionScope) {
+ $this->scope = $sessionScope;
+ }
+ }
+ return $this->scope;
+ }
+
public function setToken(IToken $token) {
$this->scope = $token->getScopeAsArray();
+ $session = $this->getSession();
+ $session->set('token_scope', $this->scope);
$this->enable();
}
public function canAccessFilesystem() {
- if (!$this->enabled) {
- return true;
- }
- return !$this->scope || $this->scope['filesystem'];
+ $scope = $this->getScopeAsArray();
+ return !$scope || $scope['filesystem'];
}
}
diff --git a/lib/private/Log.php b/lib/private/Log.php
index bcaa788603a..ea20353a0a0 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -34,7 +34,6 @@ namespace OC;
use InterfaSys\LogNormalizer\Normalizer;
use \OCP\ILogger;
-use OCP\Security\StringUtils;
use OCP\Util;
/**
@@ -63,6 +62,7 @@ class Log implements ILogger {
protected $methodsWithSensitiveParameters = [
// Session/User
+ 'completeLogin',
'login',
'checkPassword',
'loginWithPassword',
diff --git a/lib/private/Log/File.php b/lib/private/Log/File.php
index 4c7ef446a05..97ec5012b1f 100644
--- a/lib/private/Log/File.php
+++ b/lib/private/Log/File.php
@@ -106,20 +106,22 @@ class File {
$version = $config->getValue('version', '');
$entry = compact(
'reqId',
- 'remoteAddr',
- 'app',
- 'message',
'level',
'time',
+ 'remoteAddr',
+ 'user',
+ 'app',
'method',
'url',
- 'user',
+ 'message',
'userAgent',
'version'
);
$entry = json_encode($entry);
$handle = @fopen(self::$logFile, 'a');
- @chmod(self::$logFile, 0640);
+ if ((fileperms(self::$logFile) & 0777) != 0640) {
+ @chmod(self::$logFile, 0640);
+ }
if ($handle) {
fwrite($handle, $entry."\n");
fclose($handle);
diff --git a/lib/private/Mail/EMailTemplate.php b/lib/private/Mail/EMailTemplate.php
new file mode 100644
index 00000000000..4e00eb153a3
--- /dev/null
+++ b/lib/private/Mail/EMailTemplate.php
@@ -0,0 +1,513 @@
+<?php
+/**
+ * @copyright 2017, Morris Jobke <hey@morrisjobke.de>
+ * @copyright 2017, Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Mail;
+
+use OCP\Defaults;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\Mail\IEMailTemplate;
+
+/**
+ * Class EMailTemplate
+ *
+ * addBodyText and addBodyButtonGroup automatically opens the body
+ * addFooter, renderHtml, renderText automatically closes the body and the HTML if opened
+ *
+ * @package OC\Mail
+ */
+class EMailTemplate implements IEMailTemplate {
+ /** @var Defaults */
+ protected $themingDefaults;
+ /** @var IURLGenerator */
+ protected $urlGenerator;
+ /** @var IL10N */
+ protected $l10n;
+
+ /** @var string */
+ protected $htmlBody = '';
+ /** @var string */
+ protected $plainBody = '';
+ /** @var bool indicated if the footer is added */
+ protected $headerAdded = false;
+ /** @var bool indicated if the body is already opened */
+ protected $bodyOpened = false;
+ /** @var bool indicated if the footer is added */
+ protected $footerAdded = false;
+
+ protected $head = <<<EOF
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" style="-webkit-font-smoothing:antialiased;background:#f3f3f3!important">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="viewport" content="width=device-width">
+ <title></title>
+ <style type="text/css">@media only screen{html{min-height:100%;background:#F5F5F5}}@media only screen and (max-width:610px){table.body img{width:auto;height:auto}table.body center{min-width:0!important}table.body .container{width:95%!important}table.body .columns{height:auto!important;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:30px!important;padding-right:30px!important}th.small-12{display:inline-block!important;width:100%!important}table.menu{width:100%!important}table.menu td,table.menu th{width:auto!important;display:inline-block!important}table.menu.vertical td,table.menu.vertical th{display:block!important}table.menu[align=center]{width:auto!important}}</style>
+</head>
+<body style="-moz-box-sizing:border-box;-ms-text-size-adjust:100%;-webkit-box-sizing:border-box;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;Margin:0;background:#f3f3f3!important;box-sizing:border-box;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;min-width:100%;padding:0;text-align:left;width:100%!important">
+ <span class="preheader" style="color:#F5F5F5;display:none!important;font-size:1px;line-height:1px;max-height:0;max-width:0;mso-hide:all!important;opacity:0;overflow:hidden;visibility:hidden">
+ </span>
+ <table class="body" style="-webkit-font-smoothing:antialiased;Margin:0;background:#f3f3f3!important;border-collapse:collapse;border-spacing:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;height:100%;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;width:100%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td class="center" align="center" valign="top" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <center data-parsed="" style="min-width:580px;width:100%">
+EOF;
+
+ protected $tail = <<<EOF
+ </center>
+ </td>
+ </tr>
+ </table>
+ <!-- prevent Gmail on iOS font size manipulation -->
+ <div style="display:none;white-space:nowrap;font:15px courier;line-height:0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
+ </body>
+</html>
+EOF;
+
+ protected $header = <<<EOF
+<table align="center" class="wrapper header float-center" style="Margin:0 auto;background:#8a8a8a;background-color:%s;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td class="wrapper-inner" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:20px;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table align="center" class="container" style="Margin:0 auto;background:0 0;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table class="row collapse" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <center data-parsed="" style="min-width:580px;width:100%%">
+ <img class="logo float-center" src="%s" alt="%s" align="center" style="-ms-interpolation-mode:bicubic;Margin:0 auto;clear:both;display:block;float:none;margin:0 auto;max-height:100%%;max-width:100px;outline:0;text-align:center;text-decoration:none;width:auto">
+ </center>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+</table>
+<table class="spacer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="80px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:80px;font-weight:400;hyphens:auto;line-height:80px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+</table>
+EOF;
+
+ protected $heading = <<<EOF
+<table align="center" class="container main-heading float-center" style="Margin:0 auto;background:0 0!important;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:580px">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <h1 class="text-center" style="Margin:0;Margin-bottom:10px;color:inherit;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:24px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:center;word-wrap:normal">%s</h1>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<table class="spacer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="40px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:40px;font-weight:400;hyphens:auto;line-height:40px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+</table>
+EOF;
+
+ protected $bodyBegin = <<<EOF
+<table align="center" class="wrapper content float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td class="wrapper-inner" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table align="center" class="container has-shadow" style="Margin:0 auto;background:#fefefe;border-collapse:collapse;border-spacing:0;box-shadow:0 1px 2px 0 rgba(0,0,0,.2),0 1px 3px 0 rgba(0,0,0,.1);margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table class="spacer" style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="60px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:60px;font-weight:400;hyphens:auto;line-height:60px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+ </table>
+EOF;
+
+ protected $bodyText = <<<EOF
+<table class="row description" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th class="small-12 large-12 columns first last" style="Margin:0 auto;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left">
+ <p class="text-left" style="Margin:0;Margin-bottom:10px;color:#777;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;text-align:left">%s</p>
+ </th>
+ <th class="expander" style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0"></th>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </tbody>
+</table>
+EOF;
+
+ protected $buttonGroup = <<<EOF
+<table class="spacer" style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="50px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:50px;font-weight:400;hyphens:auto;line-height:50px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+</table>
+<table align="center" class="row btn-group" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th class="small-12 large-12 columns first last" style="Margin:0 auto;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left">
+ <center data-parsed="" style="min-width:490px;width:100%%">
+ <table class="button btn default primary float-center" style="Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0 0 30px 0;margin-right:15px;max-height:40px;max-width:200px;padding:0;text-align:center;vertical-align:top;width:auto">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;background:%s;border:0 solid %s;border-collapse:collapse!important;color:#fefefe;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <a href="%s" style="Margin:0;border:0 solid %s;border-radius:2px;color:#fefefe;display:inline-block;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:regular;line-height:1.3;margin:0;padding:10px 25px 10px 25px;text-align:left;text-decoration:none">%s</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <table class="button btn default secondary float-center" style="Margin:0 0 30px 0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0 0 30px 0;max-height:40px;max-width:200px;padding:0;text-align:center;vertical-align:top;width:auto">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;background:#777;border:0 solid #777;border-collapse:collapse!important;color:#fefefe;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <a href="%s" style="Margin:0;background-color:#fff;border:0 solid #777;border-radius:2px;color:#6C6C6C!important;display:inline-block;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:regular;line-height:1.3;margin:0;outline:1px solid #CBCBCB;padding:10px 25px 10px 25px;text-align:left;text-decoration:none">%s</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </center>
+ </th>
+ <th class="expander" style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0"></th>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </tbody>
+</table>
+EOF;
+
+ protected $button = <<<EOF
+<table class="spacer" style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="50px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:50px;font-weight:400;hyphens:auto;line-height:50px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+</table>
+<table align="center" class="row btn-group" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th class="small-12 large-12 columns first last" style="Margin:0 auto;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:30px;padding-left:30px;padding-right:30px;text-align:left;width:550px">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <th style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left">
+ <center data-parsed="" style="min-width:490px;width:100%%">
+ <table class="button btn default primary float-center" style="Margin:0;border-collapse:collapse;border-spacing:0;display:inline-block;float:none;margin:0;max-height:40px;padding:0;text-align:center;vertical-align:top;width:auto">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;background:%s;border:0 solid %s;border-collapse:collapse!important;color:#fefefe;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <a href="%s" style="Margin:0;border:0 solid %s;border-radius:2px;color:#fefefe;display:inline-block;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:regular;line-height:1.3;margin:0;padding:10px 25px 10px 25px;text-align:left;text-decoration:none">%s</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </center>
+ </th>
+ <th class="expander" style="Margin:0;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0!important;text-align:left;visibility:hidden;width:0"></th>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </tbody>
+</table>
+EOF;
+
+ protected $bodyEnd = <<<EOF
+
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+</table>
+EOF;
+
+ protected $footer = <<<EOF
+<table class="spacer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="60px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:60px;font-weight:400;hyphens:auto;line-height:60px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+</table>
+<table align="center" class="wrapper footer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td class="wrapper-inner" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">
+ <center data-parsed="" style="min-width:580px;width:100%%">
+ <table class="spacer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%">
+ <tbody>
+ <tr style="padding:0;text-align:left;vertical-align:top">
+ <td height="15px" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:15px;font-weight:400;hyphens:auto;line-height:15px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word">&#xA0;</td>
+ </tr>
+ </tbody>
+ </table>
+ <p class="text-center float-center" align="center" style="Margin:0;Margin-bottom:10px;color:#C8C8C8;font-family:Lucida Grande,Geneva,Verdana,sans-serif;font-size:12px;font-weight:400;line-height:16px;margin:0;margin-bottom:10px;padding:0;text-align:center">%s</p>
+ </center>
+ </td>
+ </tr>
+</table>
+EOF;
+
+ /**
+ * @param Defaults $themingDefaults
+ * @param IURLGenerator $urlGenerator
+ * @param IL10N $l10n
+ */
+ public function __construct(Defaults $themingDefaults,
+ IURLGenerator $urlGenerator,
+ IL10N $l10n) {
+ $this->themingDefaults = $themingDefaults;
+ $this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
+ $this->htmlBody .= $this->head;
+ }
+
+ /**
+ * Adds a header to the email
+ */
+ public function addHeader() {
+ if ($this->headerAdded) {
+ return;
+ }
+ $this->headerAdded = true;
+
+ $logoUrl = $this->urlGenerator->getAbsoluteURL($this->themingDefaults->getLogo());
+ $this->htmlBody .= vsprintf($this->header, [$this->themingDefaults->getColorPrimary(), $logoUrl, $this->themingDefaults->getName()]);
+ }
+
+ /**
+ * Adds a heading to the email
+ *
+ * @param string $title
+ * @param string $plainTitle|bool Title that is used in the plain text email
+ * if empty the $title is used, if false none will be used
+ */
+ public function addHeading($title, $plainTitle = '') {
+ if ($this->footerAdded) {
+ return;
+ }
+ if ($plainTitle === '') {
+ $plainTitle = $title;
+ }
+
+ $this->htmlBody .= vsprintf($this->heading, [htmlspecialchars($title)]);
+ if ($plainTitle !== false) {
+ $this->plainBody .= $plainTitle . PHP_EOL . PHP_EOL;
+ }
+ }
+
+ /**
+ * Adds a paragraph to the body of the email
+ *
+ * @param string $text
+ * @param string|bool $plainText Text that is used in the plain text email
+ * if empty the $text is used, if false none will be used
+ */
+ public function addBodyText($text, $plainText = '') {
+ if ($this->footerAdded) {
+ return;
+ }
+ if ($plainText === '') {
+ $plainText = $text;
+ }
+
+ if (!$this->bodyOpened) {
+ $this->htmlBody .= $this->bodyBegin;
+ $this->bodyOpened = true;
+ }
+
+ $this->htmlBody .= vsprintf($this->bodyText, [htmlspecialchars($text)]);
+ if ($plainText !== false) {
+ $this->plainBody .= $plainText . PHP_EOL . PHP_EOL;
+ }
+ }
+
+ /**
+ * Adds a button group of two buttons to the body of the email
+ *
+ * @param string $textLeft Text of left button
+ * @param string $urlLeft URL of left button
+ * @param string $textRight Text of right button
+ * @param string $urlRight URL of right button
+ * @param string $plainTextLeft Text of left button that is used in the plain text version - if unset the $textLeft is used
+ * @param string $plainTextRight Text of right button that is used in the plain text version - if unset the $textRight is used
+ */
+ public function addBodyButtonGroup($textLeft,
+ $urlLeft,
+ $textRight,
+ $urlRight,
+ $plainTextLeft = '',
+ $plainTextRight = '') {
+ if ($this->footerAdded) {
+ return;
+ }
+ if ($plainTextLeft === '') {
+ $plainTextLeft = $textLeft;
+ }
+
+ if ($plainTextRight === '') {
+ $plainTextRight = $textRight;
+ }
+
+ if (!$this->bodyOpened) {
+ $this->htmlBody .= $this->bodyBegin;
+ $this->bodyOpened = true;
+ }
+
+ $color = $this->themingDefaults->getColorPrimary();
+
+ $this->htmlBody .= vsprintf($this->buttonGroup, [$color, $color, $urlLeft, $color, htmlspecialchars($textLeft), $urlRight, htmlspecialchars($textRight)]);
+ $this->plainBody .= $plainTextLeft . ': ' . $urlLeft . PHP_EOL;
+ $this->plainBody .= $plainTextRight . ': ' . $urlRight . PHP_EOL . PHP_EOL;
+
+ }
+
+ /**
+ * Adds a button to the body of the email
+ *
+ * @param string $text Text of button
+ * @param string $url URL of button
+ * @param string $plainText Text of button in plain text version
+ * if empty the $text is used, if false none will be used
+ *
+ * @since 12.0.0
+ */
+ public function addBodyButton($text, $url, $plainText = '') {
+ if ($this->footerAdded) {
+ return;
+ }
+
+ if (!$this->bodyOpened) {
+ $this->htmlBody .= $this->bodyBegin;
+ $this->bodyOpened = true;
+ }
+
+ if ($plainText === '') {
+ $plainText = $text;
+ }
+
+ $color = $this->themingDefaults->getColorPrimary();
+ $this->htmlBody .= vsprintf($this->button, [$color, $color, $url, $color, htmlspecialchars($text)]);
+
+ if ($plainText !== false) {
+ $this->plainBody .= $plainText . ': ';
+ }
+
+ $this->plainBody .= $url . PHP_EOL;
+
+ }
+
+ /**
+ * Adds a logo and a text to the footer. <br> in the text will be replaced by new lines in the plain text email
+ *
+ * @param string $text If the text is empty the default "Name - Slogan<br>This is an automatically sent email" will be used
+ */
+ public function addFooter($text = '') {
+ if($text === '') {
+ $text = $this->themingDefaults->getName() . ' - ' . $this->themingDefaults->getSlogan() . '<br>' . $this->l10n->t('This is an automatically sent email, please do not reply.');
+ }
+
+ if ($this->footerAdded) {
+ return;
+ }
+ $this->footerAdded = true;
+
+ if ($this->bodyOpened) {
+ $this->htmlBody .= $this->bodyEnd;
+ $this->bodyOpened = false;
+ }
+
+ $this->htmlBody .= vsprintf($this->footer, [$text]);
+ $this->htmlBody .= $this->tail;
+ $this->plainBody .= PHP_EOL . '-- ' . PHP_EOL;
+ $this->plainBody .= str_replace('<br>', PHP_EOL, $text);
+ }
+
+ /**
+ * Returns the rendered HTML email as string
+ *
+ * @return string
+ */
+ public function renderHtml() {
+ if (!$this->footerAdded) {
+ $this->footerAdded = true;
+ if ($this->bodyOpened) {
+ $this->htmlBody .= $this->bodyEnd;
+ }
+ $this->htmlBody .= $this->tail;
+ }
+ return $this->htmlBody;
+ }
+
+ /**
+ * Returns the rendered plain text email as string
+ *
+ * @return string
+ */
+ public function renderText() {
+ if (!$this->footerAdded) {
+ $this->footerAdded = true;
+ if ($this->bodyOpened) {
+ $this->htmlBody .= $this->bodyEnd;
+ }
+ $this->htmlBody .= $this->tail;
+ }
+ return $this->plainBody;
+ }
+}
diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php
index e704e8e3490..80988d85701 100644
--- a/lib/private/Mail/Mailer.php
+++ b/lib/private/Mail/Mailer.php
@@ -22,7 +22,10 @@
namespace OC\Mail;
+use OCP\Defaults;
use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IURLGenerator;
use OCP\Mail\IMailer;
use OCP\ILogger;
@@ -51,20 +54,30 @@ class Mailer implements IMailer {
private $config;
/** @var ILogger */
private $logger;
- /** @var \OC_Defaults */
+ /** @var Defaults */
private $defaults;
+ /** @var IURLGenerator */
+ private $urlGenerator;
+ /** @var IL10N */
+ private $l10n;
/**
* @param IConfig $config
* @param ILogger $logger
- * @param \OC_Defaults $defaults
+ * @param Defaults $defaults
+ * @param IURLGenerator $urlGenerator
+ * @param IL10N $l10n
*/
- function __construct(IConfig $config,
+ public function __construct(IConfig $config,
ILogger $logger,
- \OC_Defaults $defaults) {
+ Defaults $defaults,
+ IURLGenerator $urlGenerator,
+ IL10N $l10n) {
$this->config = $config;
$this->logger = $logger;
$this->defaults = $defaults;
+ $this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
}
/**
@@ -76,6 +89,14 @@ class Mailer implements IMailer {
return new Message(new \Swift_Message());
}
+ public function createEMailTemplate() {
+ return new EMailTemplate(
+ $this->defaults,
+ $this->urlGenerator,
+ $this->l10n
+ );
+ }
+
/**
* Send the specified message. Also sets the from address to the value defined in config.php
* if no-one has been passed.
@@ -90,7 +111,7 @@ class Mailer implements IMailer {
$debugMode = $this->config->getSystemValue('mail_smtpdebug', false);
if (sizeof($message->getFrom()) === 0) {
- $message->setFrom([\OCP\Util::getDefaultEmailAddress($this->defaults->getName())]);
+ $message->setFrom([\OCP\Util::getDefaultEmailAddress($this->defaults->getName()) => $this->defaults->getName()]);
}
$failedRecipients = [];
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php
index f7bc02943a3..300c24ff940 100644
--- a/lib/private/NavigationManager.php
+++ b/lib/private/NavigationManager.php
@@ -27,7 +27,9 @@
namespace OC;
use OC\App\AppManager;
+use OC\Group\Manager;
use OCP\App\IAppManager;
+use OCP\IConfig;
use OCP\IGroupManager;
use OCP\INavigationManager;
use OCP\IURLGenerator;
@@ -52,19 +54,23 @@ class NavigationManager implements INavigationManager {
private $l10nFac;
/** @var IUserSession */
private $userSession;
- /** @var IGroupManager */
+ /** @var IGroupManager|Manager */
private $groupManager;
+ /** @var IConfig */
+ private $config;
- public function __construct(IAppManager $appManager = null,
- IURLGenerator $urlGenerator = null,
- IFactory $l10nFac = null,
- IUserSession $userSession = null,
- IGroupManager$groupManager = null) {
+ public function __construct(IAppManager $appManager,
+ IURLGenerator $urlGenerator,
+ IFactory $l10nFac,
+ IUserSession $userSession,
+ IGroupManager $groupManager,
+ IConfig $config) {
$this->appManager = $appManager;
$this->urlGenerator = $urlGenerator;
$this->l10nFac = $l10nFac;
$this->userSession = $userSession;
$this->groupManager = $groupManager;
+ $this->config = $config;
}
/**
@@ -85,29 +91,40 @@ class NavigationManager implements INavigationManager {
if(!isset($entry['icon'])) {
$entry['icon'] = '';
}
+ if(!isset($entry['type'])) {
+ $entry['type'] = 'link';
+ }
$this->entries[] = $entry;
}
/**
* returns all the added Menu entries
+ * @param string $type
* @return array an array of the added entries
*/
- public function getAll() {
+ public function getAll($type = 'link') {
$this->init();
foreach ($this->closureEntries as $c) {
$this->add($c());
}
$this->closureEntries = array();
- return $this->entries;
+
+ if ($type === 'all') {
+ return $this->entries;
+ }
+
+ return array_filter($this->entries, function($entry) use ($type) {
+ return $entry['type'] === $type;
+ });
}
/**
* removes all the entries
*/
- public function clear() {
+ public function clear($loadDefaultLinks = true) {
$this->entries = [];
$this->closureEntries = [];
- $this->init = false;
+ $this->init = !$loadDefaultLinks;
}
/**
@@ -134,49 +151,127 @@ class NavigationManager implements INavigationManager {
return;
}
$this->init = true;
- if (is_null($this->appManager)) {
+
+ $l = $this->l10nFac->get('lib');
+ if ($this->config->getSystemValue('knowledgebaseenabled', true)) {
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'help',
+ 'order' => 5,
+ 'href' => $this->urlGenerator->linkToRoute('settings_help'),
+ 'name' => $l->t('Help'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'help.svg'),
+ ]);
+ }
+
+ if ($this->userSession->isLoggedIn()) {
+ if ($this->isAdmin()) {
+ // App management
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'core_apps',
+ 'order' => 3,
+ 'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'),
+ 'name' => $l->t('Apps'),
+ ]);
+ }
+
+ // Personal settings
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'personal',
+ 'order' => 1,
+ 'href' => $this->urlGenerator->linkToRoute('settings_personal'),
+ 'name' => $l->t('Personal'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'personal.svg'),
+ ]);
+
+ // Logout
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'logout',
+ 'order' => 99999,
+ 'href' => $this->urlGenerator->linkToRouteAbsolute(
+ 'core.login.logout',
+ ['requesttoken' => \OCP\Util::callRegister()]
+ ),
+ 'name' => $l->t('Log out'),
+ 'icon' => $this->urlGenerator->imagePath('core', 'actions/logout.svg'),
+ ]);
+
+ if ($this->isSubadmin()) {
+ // User management
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'core_users',
+ 'order' => 4,
+ 'href' => $this->urlGenerator->linkToRoute('settings_users'),
+ 'name' => $l->t('Users'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'users.svg'),
+ ]);
+ }
+
+ if ($this->isAdmin()) {
+ // Admin settings
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'admin',
+ 'order' => 2,
+ 'href' => $this->urlGenerator->linkToRoute('settings.AdminSettings.index'),
+ 'name' => $l->t('Admin'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'),
+ ]);
+ }
+ }
+
+ if ($this->appManager === 'null') {
return;
}
foreach ($this->appManager->getInstalledApps() as $app) {
// load plugins and collections from info.xml
$info = $this->appManager->getAppInfo($app);
- if (!isset($info['navigation'])) {
- continue;
- }
- $nav = $info['navigation'];
- if (!isset($nav['name'])) {
+ if (empty($info['navigations'])) {
continue;
}
- if (!isset($nav['route'])) {
- continue;
- }
- $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
- if ($role === 'admin' && !$this->isAdmin()) {
- continue;
- }
- $l = $this->l10nFac->get($app);
- $order = isset($nav['order']) ? $nav['order'] : 100;
- $route = $this->urlGenerator->linkToRoute($nav['route']);
- $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
- foreach ([$icon, "$app.svg"] as $i) {
- try {
- $icon = $this->urlGenerator->imagePath($app, $i);
- break;
- } catch (\RuntimeException $ex) {
- // no icon? - ignore it then
+ foreach ($info['navigations'] as $nav) {
+ if (!isset($nav['name'])) {
+ continue;
+ }
+ if (!isset($nav['route'])) {
+ continue;
+ }
+ $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
+ if ($role === 'admin' && !$this->isAdmin()) {
+ continue;
+ }
+ $l = $this->l10nFac->get($app);
+ $id = isset($nav['id']) ? $nav['id'] : $app;
+ $order = isset($nav['order']) ? $nav['order'] : 100;
+ $type = isset($nav['type']) ? $nav['type'] : 'link';
+ $route = $this->urlGenerator->linkToRoute($nav['route']);
+ $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
+ foreach ([$icon, "$app.svg"] as $i) {
+ try {
+ $icon = $this->urlGenerator->imagePath($app, $i);
+ break;
+ } catch (\RuntimeException $ex) {
+ // no icon? - ignore it then
+ }
+ }
+ if ($icon === null) {
+ $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
}
- }
- if (is_null($icon)) {
- $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
- }
- $this->add([
- 'id' => $app,
- 'order' => $order,
- 'href' => $route,
- 'icon' => $icon,
- 'name' => $l->t($nav['name']),
- ]);
+ $this->add([
+ 'id' => $id,
+ 'order' => $order,
+ 'href' => $route,
+ 'icon' => $icon,
+ 'type' => $type,
+ 'name' => $l->t($nav['name']),
+ ]);
+ }
}
}
@@ -188,4 +283,11 @@ class NavigationManager implements INavigationManager {
return false;
}
+ private function isSubadmin() {
+ $user = $this->userSession->getUser();
+ if ($user !== null) {
+ return $this->groupManager->getSubAdmin()->isSubAdmin($user);
+ }
+ return false;
+ }
}
diff --git a/lib/private/OCS/DiscoveryService.php b/lib/private/OCS/DiscoveryService.php
new file mode 100644
index 00000000000..5534fb24ef5
--- /dev/null
+++ b/lib/private/OCS/DiscoveryService.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OC\OCS;
+
+use OCP\AppFramework\Http;
+use OCP\Http\Client\IClient;
+use OCP\Http\Client\IClientService;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use OCP\OCS\IDiscoveryService;
+
+class DiscoveryService implements IDiscoveryService {
+
+ /** @var ICache */
+ private $cache;
+
+ /** @var IClient */
+ private $client;
+
+ /**
+ * @param ICacheFactory $cacheFactory
+ * @param IClientService $clientService
+ */
+ public function __construct(ICacheFactory $cacheFactory,
+ IClientService $clientService
+ ) {
+ $this->cache = $cacheFactory->create('ocs-discovery');
+ $this->client = $clientService->newClient();
+ }
+
+
+ /**
+ * Discover OCS end-points
+ *
+ * If no valid discovery data is found the defaults are returned
+ *
+ * @param string $remote
+ * @param string $service the service you want to discover
+ * @return array
+ */
+ public function discover($remote, $service) {
+ // Check the cache first
+ $cacheData = $this->cache->get($remote . '#' . $service);
+ if($cacheData) {
+ return json_decode($cacheData, true);
+ }
+
+ $discoveredServices = [];
+
+ // query the remote server for available services
+ try {
+ $response = $this->client->get($remote . '/ocs-provider/', [
+ 'timeout' => 10,
+ 'connect_timeout' => 10,
+ ]);
+ if($response->getStatusCode() === Http::STATUS_OK) {
+ $decodedServices = json_decode($response->getBody(), true);
+ $discoveredServices = $this->getEndpoints($decodedServices, $service);
+ }
+ } catch (\Exception $e) {
+ // if we couldn't discover the service or any end-points we return a empty array
+ return [];
+ }
+
+ // Write into cache
+ $this->cache->set($remote . '#' . $service, json_encode($discoveredServices));
+ return $discoveredServices;
+ }
+
+ /**
+ * get requested end-points from the requested service
+ *
+ * @param $decodedServices
+ * @param $service
+ * @return array
+ */
+ protected function getEndpoints($decodedServices, $service) {
+
+ $discoveredServices = [];
+
+ if(is_array($decodedServices) &&
+ isset($decodedServices['services'][$service]['endpoints'])
+ ) {
+ foreach ($decodedServices['services'][$service]['endpoints'] as $endpoint => $url) {
+ if($this->isSafeUrl($url)) {
+ $discoveredServices[$endpoint] = $url;
+ }
+ }
+ }
+
+ return $discoveredServices;
+ }
+
+ /**
+ * Returns whether the specified URL includes only safe characters, if not
+ * returns false
+ *
+ * @param string $url
+ * @return bool
+ */
+ protected function isSafeUrl($url) {
+ return (bool)preg_match('/^[\/\.\-A-Za-z0-9]+$/', $url);
+ }
+
+}
diff --git a/lib/private/Repair/CleanTags.php b/lib/private/Repair/CleanTags.php
index 8b62395a501..9b44fb1e671 100644
--- a/lib/private/Repair/CleanTags.php
+++ b/lib/private/Repair/CleanTags.php
@@ -173,7 +173,7 @@ class CleanTags implements IRepairStep {
$qb->select('d.' . $deleteId)
->from($deleteTable, 'd')
- ->leftJoin('d', $sourceTable, 's', $qb->expr()->eq('d.' . $deleteId, ' s.' . $sourceId))
+ ->leftJoin('d', $sourceTable, 's', $qb->expr()->eq('d.' . $deleteId, 's.' . $sourceId))
->where(
$qb->expr()->eq('d.type', $qb->expr()->literal('files'))
)
diff --git a/lib/private/Repair/RepairInvalidShares.php b/lib/private/Repair/RepairInvalidShares.php
index eba66e295c4..78884ca9cde 100644
--- a/lib/private/Repair/RepairInvalidShares.php
+++ b/lib/private/Repair/RepairInvalidShares.php
@@ -27,7 +27,6 @@ namespace OC\Repair;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
-use Doctrine\DBAL\Platforms\OraclePlatform;
/**
* Repairs shares with invalid data
diff --git a/lib/private/Repair/RepairMimeTypes.php b/lib/private/Repair/RepairMimeTypes.php
index 534b5ce2c28..d60b507e932 100644
--- a/lib/private/Repair/RepairMimeTypes.php
+++ b/lib/private/Repair/RepairMimeTypes.php
@@ -110,6 +110,15 @@ class RepairMimeTypes implements IRepairStep {
}
}
+ private function introduceImageTypes() {
+ $updatedMimetypes = array(
+ 'jp2' => 'image/jp2',
+ 'webp' => 'image/webp',
+ );
+
+ $this->updateMimetypes($updatedMimetypes);
+ }
+
private function introduceWindowsProgramTypes() {
$updatedMimetypes = array(
'htaccess' => 'text/plain',
@@ -130,6 +139,10 @@ class RepairMimeTypes implements IRepairStep {
// NOTE TO DEVELOPERS: when adding new mime types, please make sure to
// add a version comparison to avoid doing it every time
+ if (version_compare($ocVersionFromBeforeUpdate, '12.0.0.14', '<') && $this->introduceImageTypes()) {
+ $out->info('Fixed image mime types');
+ }
+
if (version_compare($ocVersionFromBeforeUpdate, '12.0.0.13', '<') && $this->introduceWindowsProgramTypes()) {
$out->info('Fixed windows program mime types');
}
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index 765f109fdb3..b2524b63c63 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -23,6 +23,7 @@
namespace OC\Security\Bruteforce;
+use OC\Security\Normalizer\IpAddress;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -83,67 +84,6 @@ class Throttler {
}
/**
- * Return the given subnet for an IPv4 address and mask bits
- *
- * @param string $ip
- * @param int $maskBits
- * @return string
- */
- private function getIPv4Subnet($ip,
- $maskBits = 32) {
- $binary = \inet_pton($ip);
- for ($i = 32; $i > $maskBits; $i -= 8) {
- $j = \intdiv($i, 8) - 1;
- $k = (int) \min(8, $i - $maskBits);
- $mask = (0xff - ((pow(2, $k)) - 1));
- $int = \unpack('C', $binary[$j]);
- $binary[$j] = \pack('C', $int[1] & $mask);
- }
- return \inet_ntop($binary).'/'.$maskBits;
- }
-
- /**
- * Return the given subnet for an IPv6 address and mask bits
- *
- * @param string $ip
- * @param int $maskBits
- * @return string
- */
- private function getIPv6Subnet($ip, $maskBits = 48) {
- $binary = \inet_pton($ip);
- for ($i = 128; $i > $maskBits; $i -= 8) {
- $j = \intdiv($i, 8) - 1;
- $k = (int) \min(8, $i - $maskBits);
- $mask = (0xff - ((pow(2, $k)) - 1));
- $int = \unpack('C', $binary[$j]);
- $binary[$j] = \pack('C', $int[1] & $mask);
- }
- return \inet_ntop($binary).'/'.$maskBits;
- }
-
- /**
- * Return the given subnet for an IP and the configured mask bits
- *
- * Determine if the IP is an IPv4 or IPv6 address, then pass to the correct
- * method for handling that specific type.
- *
- * @param string $ip
- * @return string
- */
- private function getSubnet($ip) {
- if (\preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $ip)) {
- return $this->getIPv4Subnet(
- $ip,
- 32
- );
- }
- return $this->getIPv6Subnet(
- $ip,
- 128
- );
- }
-
- /**
* Register a failed attempt to bruteforce a security control
*
* @param string $action
@@ -158,11 +98,12 @@ class Throttler {
return;
}
+ $ipAddress = new IpAddress($ip);
$values = [
'action' => $action,
'occurred' => $this->timeFactory->getTime(),
- 'ip' => $ip,
- 'subnet' => $this->getSubnet($ip),
+ 'ip' => (string)$ipAddress,
+ 'subnet' => $ipAddress->getSubnet(),
'metadata' => json_encode($metadata),
];
@@ -186,6 +127,67 @@ class Throttler {
}
/**
+ * Check if the IP is whitelisted
+ *
+ * @param string $ip
+ * @return bool
+ */
+ private function isIPWhitelisted($ip) {
+ $keys = $this->config->getAppKeys('bruteForce');
+ $keys = array_filter($keys, function($key) {
+ $regex = '/^whitelist_/S';
+ return preg_match($regex, $key) === 1;
+ });
+
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+ $type = 4;
+ } else if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $type = 6;
+ } else {
+ return false;
+ }
+
+ $ip = inet_pton($ip);
+
+ foreach ($keys as $key) {
+ $cidr = $this->config->getAppValue('bruteForce', $key, null);
+
+ $cx = explode('/', $cidr);
+ $addr = $cx[0];
+ $mask = (int)$cx[1];
+
+ // Do not compare ipv4 to ipv6
+ if (($type === 4 && !filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) ||
+ ($type === 6 && !filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))) {
+ continue;
+ }
+
+ $addr = inet_pton($addr);
+
+ $valid = true;
+ for($i = 0; $i < $mask; $i++) {
+ $part = ord($addr[(int)($i/8)]);
+ $orig = ord($ip[(int)($i/8)]);
+
+ $part = $part & (15 << (1 - ($i % 2)));
+ $orig = $orig & (15 << (1 - ($i % 2)));
+
+ if ($part !== $orig) {
+ $valid = false;
+ break;
+ }
+ }
+
+ if ($valid === true) {
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
+ /**
* Get the throttling delay (in milliseconds)
*
* @param string $ip
@@ -193,6 +195,11 @@ class Throttler {
* @return int
*/
public function getDelay($ip, $action = '') {
+ $ipAddress = new IpAddress($ip);
+ if ($this->isIPWhitelisted((string)$ipAddress)) {
+ return 0;
+ }
+
$cutoffTime = (new \DateTime())
->sub($this->getCutoff(43200))
->getTimestamp();
@@ -201,7 +208,7 @@ class Throttler {
$qb->select('*')
->from('bruteforce_attempts')
->where($qb->expr()->gt('occurred', $qb->createNamedParameter($cutoffTime)))
- ->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($this->getSubnet($ip))));
+ ->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($ipAddress->getSubnet())));
if ($action !== '') {
$qb->andWhere($qb->expr()->eq('action', $qb->createNamedParameter($action)));
diff --git a/lib/private/Security/CredentialsManager.php b/lib/private/Security/CredentialsManager.php
index 44f3d32ea93..0ac9b30c6ce 100644
--- a/lib/private/Security/CredentialsManager.php
+++ b/lib/private/Security/CredentialsManager.php
@@ -25,7 +25,6 @@ namespace OC\Security;
use OCP\Security\ICrypto;
use OCP\IDBConnection;
use OCP\Security\ICredentialsManager;
-use OCP\IConfig;
/**
* Store and retrieve credentials for external services
diff --git a/lib/private/Security/Normalizer/IpAddress.php b/lib/private/Security/Normalizer/IpAddress.php
new file mode 100644
index 00000000000..c44a5556678
--- /dev/null
+++ b/lib/private/Security/Normalizer/IpAddress.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\Normalizer;
+
+/**
+ * Class IpAddress is used for normalizing IPv4 and IPv6 addresses in security
+ * relevant contexts in Nextcloud.
+ *
+ * @package OC\Security\Normalizer
+ */
+class IpAddress {
+ /** @var string */
+ private $ip;
+
+ /**
+ * @param string $ip IP to normalized
+ */
+ public function __construct($ip) {
+ $this->ip = $ip;
+ }
+
+ /**
+ * Return the given subnet for an IPv4 address and mask bits
+ *
+ * @param string $ip
+ * @param int $maskBits
+ * @return string
+ */
+ private function getIPv4Subnet($ip,
+ $maskBits = 32) {
+ $binary = \inet_pton($ip);
+ for ($i = 32; $i > $maskBits; $i -= 8) {
+ $j = \intdiv($i, 8) - 1;
+ $k = (int) \min(8, $i - $maskBits);
+ $mask = (0xff - ((pow(2, $k)) - 1));
+ $int = \unpack('C', $binary[$j]);
+ $binary[$j] = \pack('C', $int[1] & $mask);
+ }
+ return \inet_ntop($binary).'/'.$maskBits;
+ }
+
+ /**
+ * Return the given subnet for an IPv6 address and mask bits
+ *
+ * @param string $ip
+ * @param int $maskBits
+ * @return string
+ */
+ private function getIPv6Subnet($ip, $maskBits = 48) {
+ $binary = \inet_pton($ip);
+ for ($i = 128; $i > $maskBits; $i -= 8) {
+ $j = \intdiv($i, 8) - 1;
+ $k = (int) \min(8, $i - $maskBits);
+ $mask = (0xff - ((pow(2, $k)) - 1));
+ $int = \unpack('C', $binary[$j]);
+ $binary[$j] = \pack('C', $int[1] & $mask);
+ }
+ return \inet_ntop($binary).'/'.$maskBits;
+ }
+
+ /**
+ * Gets either the /32 (IPv4) or the /128 (IPv6) subnet of an IP address
+ *
+ * @return string
+ */
+ public function getSubnet() {
+ if (\preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $this->ip)) {
+ return $this->getIPv4Subnet(
+ $this->ip,
+ 32
+ );
+ }
+ return $this->getIPv6Subnet(
+ $this->ip,
+ 128
+ );
+ }
+
+ /**
+ * Returns the specified IP address
+ *
+ * @return string
+ */
+ public function __toString() {
+ return $this->ip;
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Backend/IBackend.php b/lib/private/Security/RateLimiting/Backend/IBackend.php
new file mode 100644
index 00000000000..9753eb4997c
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Backend/IBackend.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Backend;
+
+/**
+ * Interface IBackend defines a storage backend for the rate limiting data. It
+ * should be noted that writing and reading rate limiting data is an expensive
+ * operation and one should thus make sure to only use sufficient fast backends.
+ *
+ * @package OC\Security\RateLimiting\Backend
+ */
+interface IBackend {
+ /**
+ * Gets the amount of attempts within the last specified seconds
+ *
+ * @param string $methodIdentifier Identifier for the method
+ * @param string $userIdentifier Identifier for the user
+ * @param int $seconds Seconds to look back at
+ * @return int
+ */
+ public function getAttempts($methodIdentifier,
+ $userIdentifier,
+ $seconds);
+
+ /**
+ * Registers an attempt
+ *
+ * @param string $methodIdentifier Identifier for the method
+ * @param string $userIdentifier Identifier for the user
+ * @param int $period Period in seconds how long this attempt should be stored
+ */
+ public function registerAttempt($methodIdentifier,
+ $userIdentifier,
+ $period);
+}
diff --git a/lib/private/Security/RateLimiting/Backend/MemoryCache.php b/lib/private/Security/RateLimiting/Backend/MemoryCache.php
new file mode 100644
index 00000000000..25595cda4a5
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Backend/MemoryCache.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Backend;
+
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\ICache;
+use OCP\ICacheFactory;
+
+/**
+ * Class MemoryCache uses the configured distributed memory cache for storing
+ * rate limiting data.
+ *
+ * @package OC\Security\RateLimiting\Backend
+ */
+class MemoryCache implements IBackend {
+ /** @var ICache */
+ private $cache;
+ /** @var ITimeFactory */
+ private $timeFactory;
+
+ /**
+ * @param ICacheFactory $cacheFactory
+ * @param ITimeFactory $timeFactory
+ */
+ public function __construct(ICacheFactory $cacheFactory,
+ ITimeFactory $timeFactory) {
+ $this->cache = $cacheFactory->create(__CLASS__);
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @param string $methodIdentifier
+ * @param string $userIdentifier
+ * @return string
+ */
+ private function hash($methodIdentifier,
+ $userIdentifier) {
+ return hash('sha512', $methodIdentifier . $userIdentifier);
+ }
+
+ /**
+ * @param string $identifier
+ * @return array
+ */
+ private function getExistingAttempts($identifier) {
+ $cachedAttempts = json_decode($this->cache->get($identifier), true);
+ if(is_array($cachedAttempts)) {
+ return $cachedAttempts;
+ }
+
+ return [];
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAttempts($methodIdentifier,
+ $userIdentifier,
+ $seconds) {
+ $identifier = $this->hash($methodIdentifier, $userIdentifier);
+ $existingAttempts = $this->getExistingAttempts($identifier);
+
+ $count = 0;
+ $currentTime = $this->timeFactory->getTime();
+ /** @var array $existingAttempts */
+ foreach ($existingAttempts as $attempt) {
+ if(($attempt + $seconds) > $currentTime) {
+ $count++;
+ }
+ }
+
+ return $count;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function registerAttempt($methodIdentifier,
+ $userIdentifier,
+ $period) {
+ $identifier = $this->hash($methodIdentifier, $userIdentifier);
+ $existingAttempts = $this->getExistingAttempts($identifier);
+ $currentTime = $this->timeFactory->getTime();
+
+ // Unset all attempts older than $period
+ foreach ($existingAttempts as $key => $attempt) {
+ if(($attempt + $period) < $currentTime) {
+ unset($existingAttempts[$key]);
+ }
+ }
+ $existingAttempts = array_values($existingAttempts);
+
+ // Store the new attempt
+ $existingAttempts[] = (string)$currentTime;
+ $this->cache->set($identifier, json_encode($existingAttempts));
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php b/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php
new file mode 100644
index 00000000000..34cbec31c73
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Exception;
+
+use OC\AppFramework\Middleware\Security\Exceptions\SecurityException;
+use OCP\AppFramework\Http;
+
+class RateLimitExceededException extends SecurityException {
+ public function __construct() {
+ parent::__construct('Rate limit exceeded', Http::STATUS_TOO_MANY_REQUESTS);
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Limiter.php b/lib/private/Security/RateLimiting/Limiter.php
new file mode 100644
index 00000000000..5c084eb934b
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Limiter.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting;
+
+use OC\Security\Normalizer\IpAddress;
+use OC\Security\RateLimiting\Backend\IBackend;
+use OC\Security\RateLimiting\Exception\RateLimitExceededException;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IRequest;
+use OCP\IUser;
+use OCP\IUserSession;
+
+class Limiter {
+ /** @var IBackend */
+ private $backend;
+ /** @var ITimeFactory */
+ private $timeFactory;
+
+ /**
+ * @param IUserSession $userSession
+ * @param IRequest $request
+ * @param ITimeFactory $timeFactory
+ * @param IBackend $backend
+ */
+ public function __construct(IUserSession $userSession,
+ IRequest $request,
+ ITimeFactory $timeFactory,
+ IBackend $backend) {
+ $this->backend = $backend;
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @param string $methodIdentifier
+ * @param string $userIdentifier
+ * @param int $period
+ * @param int $limit
+ * @throws RateLimitExceededException
+ */
+ private function register($methodIdentifier,
+ $userIdentifier,
+ $period,
+ $limit) {
+ $existingAttempts = $this->backend->getAttempts($methodIdentifier, $userIdentifier, (int)$period);
+ if ($existingAttempts >= (int)$limit) {
+ throw new RateLimitExceededException();
+ }
+
+ $this->backend->registerAttempt($methodIdentifier, $userIdentifier, $this->timeFactory->getTime());
+ }
+
+ /**
+ * Registers attempt for an anonymous request
+ *
+ * @param string $identifier
+ * @param int $anonLimit
+ * @param int $anonPeriod
+ * @param string $ip
+ * @throws RateLimitExceededException
+ */
+ public function registerAnonRequest($identifier,
+ $anonLimit,
+ $anonPeriod,
+ $ip) {
+ $ipSubnet = (new IpAddress($ip))->getSubnet();
+
+ $anonHashIdentifier = hash('sha512', 'anon::' . $identifier . $ipSubnet);
+ $this->register($identifier, $anonHashIdentifier, $anonPeriod, $anonLimit);
+ }
+
+ /**
+ * Registers attempt for an authenticated request
+ *
+ * @param string $identifier
+ * @param int $userLimit
+ * @param int $userPeriod
+ * @param IUser $user
+ * @throws RateLimitExceededException
+ */
+ public function registerUserRequest($identifier,
+ $userLimit,
+ $userPeriod,
+ IUser $user) {
+ $userHashIdentifier = hash('sha512', 'user::' . $identifier . $user->getUID());
+ $this->register($identifier, $userHashIdentifier, $userPeriod, $userLimit);
+ }
+}
diff --git a/lib/private/Security/SecureRandom.php b/lib/private/Security/SecureRandom.php
index 884ee842b9d..5bd909ea002 100644
--- a/lib/private/Security/SecureRandom.php
+++ b/lib/private/Security/SecureRandom.php
@@ -23,8 +23,6 @@
namespace OC\Security;
-use RandomLib;
-use Sabre\DAV\Exception;
use OCP\Security\ISecureRandom;
/**
diff --git a/lib/private/Server.php b/lib/private/Server.php
index c21ff650b24..7724feb551b 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -50,6 +50,7 @@ use OC\AppFramework\Utility\SimpleContainer;
use OC\AppFramework\Utility\TimeFactory;
use OC\Authentication\LoginCredentials\Store;
use OC\Command\AsyncBus;
+use OC\Contacts\ContactsMenu\ActionFactory;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\NullEventLogger;
use OC\Diagnostics\NullQueryLogger;
@@ -77,6 +78,7 @@ use OC\Mail\Mailer;
use OC\Memcache\ArrayCache;
use OC\Memcache\Factory;
use OC\Notification\Manager;
+use OC\OCS\DiscoveryService;
use OC\Repair\NC11\CleanPreviewsBackgroundJob;
use OC\RichObjectStrings\Validator;
use OC\Security\Bruteforce\Throttler;
@@ -92,9 +94,14 @@ use OC\Security\CredentialsManager;
use OC\Security\SecureRandom;
use OC\Security\TrustedDomainHelper;
use OC\Session\CryptoWrapper;
+use OC\Share20\ShareHelper;
use OC\Tagging\TagMapper;
+use OC\Template\SCSSCacher;
use OCA\Theming\ThemingDefaults;
+
use OCP\App\IAppManager;
+use OCP\Defaults;
+use OCA\Theming\Util;
use OCP\Federation\ICloudIdManager;
use OCP\Authentication\LoginCredentials\IStore;
use OCP\ICacheFactory;
@@ -102,8 +109,11 @@ use OCP\IDBConnection;
use OCP\IL10N;
use OCP\IServerContainer;
use OCP\ITempManager;
+use OCP\Contacts\ContactsMenu\IActionFactory;
+use OCP\IURLGenerator;
use OCP\RichObjectStrings\IValidator;
use OCP\Security\IContentSecurityPolicyManager;
+use OCP\Share\IShareHelper;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -126,9 +136,17 @@ class Server extends ServerContainer implements IServerContainer {
parent::__construct();
$this->webRoot = $webRoot;
+ $this->registerService(\OCP\IServerContainer::class, function(IServerContainer $c) {
+ return $c;
+ });
+
$this->registerAlias(\OCP\Contacts\IManager::class, \OC\ContactsManager::class);
$this->registerAlias('ContactsManager', \OCP\Contacts\IManager::class);
+ $this->registerAlias(IActionFactory::class, ActionFactory::class);
+
+
+
$this->registerService(\OCP\IPreview::class, function (Server $c) {
return new PreviewManager(
$c->getConfig(),
@@ -171,7 +189,11 @@ class Server extends ServerContainer implements IServerContainer {
$c->getGroupManager(),
$c->getConfig()
);
- return new Encryption\File($util);
+ return new Encryption\File(
+ $util,
+ $c->getRootFolder(),
+ $c->getShareManager()
+ );
});
$this->registerService('EncryptionKeyStorage', function (Server $c) {
@@ -307,7 +329,7 @@ class Server extends ServerContainer implements IServerContainer {
$defaultTokenProvider = null;
}
- $userSession = new \OC\User\Session($manager, $session, $timeFactory, $defaultTokenProvider, $c->getConfig(), $c->getSecureRandom());
+ $userSession = new \OC\User\Session($manager, $session, $timeFactory, $defaultTokenProvider, $c->getConfig(), $c->getSecureRandom(), $c->getLockdownManager());
$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
});
@@ -341,9 +363,9 @@ class Server extends ServerContainer implements IServerContainer {
$userSession->listen('\OC\User', 'logout', function () {
\OC_Hook::emit('OC_User', 'logout', array());
});
- $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value) {
+ $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value, $oldValue) {
/** @var $user \OC\User\User */
- \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value));
+ \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value, 'old_value' => $oldValue));
});
return $userSession;
});
@@ -353,13 +375,7 @@ class Server extends ServerContainer implements IServerContainer {
return new \OC\Authentication\TwoFactorAuth\Manager($c->getAppManager(), $c->getSession(), $c->getConfig(), $c->getActivityManager(), $c->getLogger());
});
- $this->registerService(\OCP\INavigationManager::class, function (Server $c) {
- return new \OC\NavigationManager($c->getAppManager(),
- $c->getURLGenerator(),
- $c->getL10NFactory(),
- $c->getUserSession(),
- $c->getGroupManager());
- });
+ $this->registerAlias(\OCP\INavigationManager::class, \OC\NavigationManager::class);
$this->registerAlias('NavigationManager', \OCP\INavigationManager::class);
$this->registerService(\OC\AllConfig::class, function (Server $c) {
@@ -520,6 +536,21 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerAlias('Search', \OCP\ISearch::class);
+ $this->registerService(\OC\Security\RateLimiting\Limiter::class, function($c) {
+ return new \OC\Security\RateLimiting\Limiter(
+ $this->getUserSession(),
+ $this->getRequest(),
+ new \OC\AppFramework\Utility\TimeFactory(),
+ $c->query(\OC\Security\RateLimiting\Backend\IBackend::class)
+ );
+ });
+ $this->registerService(\OC\Security\RateLimiting\Backend\IBackend::class, function($c) {
+ return new \OC\Security\RateLimiting\Backend\MemoryCache(
+ $this->getMemCacheFactory(),
+ new \OC\AppFramework\Utility\TimeFactory()
+ );
+ });
+
$this->registerService(\OCP\Security\ISecureRandom::class, function ($c) {
return new SecureRandom();
});
@@ -732,7 +763,9 @@ class Server extends ServerContainer implements IServerContainer {
return new Mailer(
$c->getConfig(),
$c->getLogger(),
- $c->getThemingDefaults()
+ $c->query(Defaults::class),
+ $c->getURLGenerator(),
+ $c->getL10N('lib')
);
});
$this->registerAlias('Mailer', \OCP\Mail\IMailer::class);
@@ -829,12 +862,26 @@ class Server extends ServerContainer implements IServerContainer {
$c->getL10N('theming'),
$c->getURLGenerator(),
new \OC_Defaults(),
- $c->getLazyRootFolder(),
- $c->getMemCacheFactory()
+ $c->getAppDataDir('theming'),
+ $c->getMemCacheFactory(),
+ new Util($c->getConfig(), $this->getRootFolder(), $this->getAppManager())
);
}
return new \OC_Defaults();
});
+ $this->registerService(SCSSCacher::class, function(Server $c) {
+ /** @var Factory $cacheFactory */
+ $cacheFactory = $c->query(Factory::class);
+ return new SCSSCacher(
+ $c->getLogger(),
+ $c->query(\OC\Files\AppData\Factory::class),
+ $c->getURLGenerator(),
+ $c->getConfig(),
+ $c->getThemingDefaults(),
+ \OC::$SERVERROOT,
+ $cacheFactory->createLocal('SCSS')
+ );
+ });
$this->registerService(EventDispatcher::class, function () {
return new EventDispatcher();
});
@@ -936,7 +983,13 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerService('LockdownManager', function (Server $c) {
- return new LockdownManager();
+ return new LockdownManager(function() use ($c) {
+ return $c->getSession();
+ });
+ });
+
+ $this->registerService(\OCP\OCS\IDiscoveryService::class, function (Server $c) {
+ return new DiscoveryService($c->getMemCacheFactory(), $c->getHTTPClientService());
});
$this->registerService(ICloudIdManager::class, function (Server $c) {
@@ -959,9 +1012,22 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerAlias(\OCP\AppFramework\Utility\ITimeFactory::class, \OC\AppFramework\Utility\TimeFactory::class);
$this->registerAlias('TimeFactory', \OCP\AppFramework\Utility\ITimeFactory::class);
+ $this->registerService(Defaults::class, function (Server $c) {
+ return new Defaults(
+ $c->getThemingDefaults()
+ );
+ });
+ $this->registerAlias('Defaults', \OCP\Defaults::class);
+
$this->registerService(\OCP\ISession::class, function(SimpleContainer $c) {
return $c->query(\OCP\IUserSession::class)->getSession();
});
+
+ $this->registerService(IShareHelper::class, function(Server $c) {
+ return new ShareHelper(
+ $c->query(\OCP\Share\IManager::class)
+ );
+ });
}
/**
@@ -1576,7 +1642,7 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
- * @return \OC_Defaults
+ * @return \OCA\Theming\ThemingDefaults
*/
public function getThemingDefaults() {
return $this->query('ThemingDefaults');
diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php
index e7b1ed2dad7..3391dd83a04 100644
--- a/lib/private/ServerContainer.php
+++ b/lib/private/ServerContainer.php
@@ -102,6 +102,15 @@ class ServerContainer extends SimpleContainer {
// Didn't find the service or the respective app container,
// ignore it and fall back to the core container.
}
+ } else if (strpos($name, 'OC\\Settings\\') === 0 && substr_count($name, '\\') >= 3) {
+ $segments = explode('\\', $name);
+ try {
+ $appContainer = $this->getAppContainer(strtolower($segments[1]));
+ return $appContainer->queryNoFallback($name);
+ } catch (QueryException $e) {
+ // Didn't find the service or the respective app container,
+ // ignore it and fall back to the core container.
+ }
}
return parent::query($name);
diff --git a/lib/private/Session/CryptoSessionData.php b/lib/private/Session/CryptoSessionData.php
index 58020edf66d..31fcea4a7a6 100644
--- a/lib/private/Session/CryptoSessionData.php
+++ b/lib/private/Session/CryptoSessionData.php
@@ -64,7 +64,12 @@ class CryptoSessionData implements \ArrayAccess, ISession {
* Close session if class gets destructed
*/
public function __destruct() {
- $this->close();
+ try {
+ $this->close();
+ } catch (SessionNotAvailableException $e){
+ // This exception can occur if session is already closed
+ // So it is safe to ignore it and let the garbage collector to proceed
+ }
}
protected function initializeSession() {
@@ -129,7 +134,11 @@ class CryptoSessionData implements \ArrayAccess, ISession {
* Reset and recreate the session
*/
public function clear() {
+ $requesttoken = $this->get('requesttoken');
$this->sessionValues = [];
+ if ($requesttoken !== null) {
+ $this->set('requesttoken', $requesttoken);
+ }
$this->isModified = true;
$this->session->clear();
}
diff --git a/lib/private/Session/Internal.php b/lib/private/Session/Internal.php
index 22878154c05..72af5727a54 100644
--- a/lib/private/Session/Internal.php
+++ b/lib/private/Session/Internal.php
@@ -151,7 +151,7 @@ class Internal extends Session {
*/
private function validateSession() {
if ($this->sessionClosed) {
- throw new \Exception('Session has been closed - no further changes to the session are allowed');
+ throw new SessionNotAvailableException('Session has been closed - no further changes to the session are allowed');
}
}
}
diff --git a/lib/private/Settings/Admin/Additional.php b/lib/private/Settings/Admin/Additional.php
index d133e4737a7..ffa0de68488 100644
--- a/lib/private/Settings/Admin/Additional.php
+++ b/lib/private/Settings/Admin/Additional.php
@@ -23,16 +23,8 @@
namespace OC\Settings\Admin;
-use Doctrine\DBAL\Connection;
-use Doctrine\DBAL\DBALException;
-use Doctrine\DBAL\Platforms\SqlitePlatform;
-use OC\Lock\DBLockingProvider;
-use OC\Lock\NoopLockingProvider;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
-use OCP\IDBConnection;
-use OCP\IL10N;
-use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
class Additional implements ISettings {
@@ -65,6 +57,10 @@ class Additional implements ISettings {
'mail_smtppassword' => $this->config->getSystemValue('mail_smtppassword', ''),
];
+ if ($parameters['mail_smtppassword'] !== '') {
+ $parameters['mail_smtppassword'] = '********';
+ }
+
return new TemplateResponse('settings', 'admin/additional-mail', $parameters, '');
}
diff --git a/lib/private/Settings/Admin/ServerDevNotice.php b/lib/private/Settings/Admin/ServerDevNotice.php
index 1d7f34f782d..39897d5c612 100644
--- a/lib/private/Settings/Admin/ServerDevNotice.php
+++ b/lib/private/Settings/Admin/ServerDevNotice.php
@@ -22,16 +22,7 @@
*/
namespace OC\Settings\Admin;
-use Doctrine\DBAL\Connection;
-use Doctrine\DBAL\DBALException;
-use Doctrine\DBAL\Platforms\SqlitePlatform;
-use OC\Lock\DBLockingProvider;
-use OC\Lock\NoopLockingProvider;
use OCP\AppFramework\Http\TemplateResponse;
-use OCP\IConfig;
-use OCP\IDBConnection;
-use OCP\IL10N;
-use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
class ServerDevNotice implements ISettings {
diff --git a/lib/private/Settings/Admin/Sharing.php b/lib/private/Settings/Admin/Sharing.php
index 9b17efa8028..8f57f77b20a 100644
--- a/lib/private/Settings/Admin/Sharing.php
+++ b/lib/private/Settings/Admin/Sharing.php
@@ -64,6 +64,7 @@ class Sharing implements ISettings {
'shareExcludeGroups' => $this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false,
'shareExcludedGroupsList' => $excludeGroupsList,
'publicShareDisclaimerText' => $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null),
+ 'enableLinkPasswordByDefault' => $this->config->getAppValue('core', 'shareapi_enable_link_password_by_default', 'no'),
];
return new TemplateResponse('settings', 'admin/sharing', $parameters, '');
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 94df00551d4..080b697b238 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -273,6 +273,7 @@ class Manager implements IManager {
$sections = [
0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
+ 10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index 7a2957b5fb3..e2806efad48 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -41,7 +41,7 @@ namespace OC;
use bantu\IniGetWrapper\IniGetWrapper;
use Exception;
-use OCP\IConfig;
+use OCP\Defaults;
use OCP\IL10N;
use OCP\ILogger;
use OCP\Security\ISecureRandom;
@@ -53,7 +53,7 @@ class Setup {
protected $iniWrapper;
/** @var IL10N */
protected $l10n;
- /** @var \OC_Defaults */
+ /** @var Defaults */
protected $defaults;
/** @var ILogger */
protected $logger;
@@ -63,12 +63,14 @@ class Setup {
/**
* @param SystemConfig $config
* @param IniGetWrapper $iniWrapper
- * @param \OC_Defaults $defaults
+ * @param Defaults $defaults
+ * @param ILogger $logger
+ * @param ISecureRandom $random
*/
function __construct(SystemConfig $config,
IniGetWrapper $iniWrapper,
IL10N $l10n,
- \OC_Defaults $defaults,
+ Defaults $defaults,
ILogger $logger,
ISecureRandom $random
) {
@@ -422,7 +424,7 @@ class Setup {
}
$setupHelper = new \OC\Setup($config, \OC::$server->getIniWrapper(),
- \OC::$server->getL10N('lib'), \OC::$server->getThemingDefaults(), \OC::$server->getLogger(),
+ \OC::$server->getL10N('lib'), \OC::$server->query(Defaults::class), \OC::$server->getLogger(),
\OC::$server->getSecureRandom());
$htaccessContent = file_get_contents($setupHelper->pathToHtaccess());
diff --git a/lib/private/Setup/AbstractDatabase.php b/lib/private/Setup/AbstractDatabase.php
index c554e569a63..d5c34291e60 100644
--- a/lib/private/Setup/AbstractDatabase.php
+++ b/lib/private/Setup/AbstractDatabase.php
@@ -26,7 +26,6 @@
*/
namespace OC\Setup;
-use OC\AllConfig;
use OC\DB\ConnectionFactory;
use OC\SystemConfig;
use OCP\IL10N;
diff --git a/lib/private/Setup/OCI.php b/lib/private/Setup/OCI.php
index 0538b3da98b..1bc6b08117f 100644
--- a/lib/private/Setup/OCI.php
+++ b/lib/private/Setup/OCI.php
@@ -149,12 +149,12 @@ class OCI extends AbstractDatabase {
if ($e_host == '') {
$easy_connect_string = $e_dbname; // use dbname as easy connect name
} else {
- $easy_connect_string = '//'.$e_host.'/'.$e_dbname;
+ $easy_connect_string = '//' . $e_host . (!empty($e_port) ? ":{$e_port}" : "") . '/' . $e_dbname;
}
$connection = @oci_connect($this->dbUser, $this->dbPassword, $easy_connect_string);
if(!$connection) {
throw new \OC\DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
- $this->trans->t('You need to enter either an existing account or the administrator.'));
+ $this->trans->t('You need to enter details of an existing account.'));
}
$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
$stmt = oci_parse($connection, $query);
diff --git a/lib/private/Setup/PostgreSQL.php b/lib/private/Setup/PostgreSQL.php
index be3ac007493..18ed9fcdef6 100644
--- a/lib/private/Setup/PostgreSQL.php
+++ b/lib/private/Setup/PostgreSQL.php
@@ -98,7 +98,7 @@ class PostgreSQL extends AbstractDatabase {
} catch (\Exception $e) {
$this->logger->logException($e);
throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
- $this->trans->t('You need to enter either an existing account or the administrator.'));
+ $this->trans->t('You need to enter details of an existing account.'));
}
diff --git a/lib/private/Share/MailNotifications.php b/lib/private/Share/MailNotifications.php
deleted file mode 100644
index 1bbd365699c..00000000000
--- a/lib/private/Share/MailNotifications.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author scolebrook <scolebrook@mac.com>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OC\Share;
-
-use DateTime;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\IUser;
-use OCP\Mail\IMailer;
-use OCP\ILogger;
-use OCP\Defaults;
-use OCP\Util;
-
-/**
- * Class MailNotifications
- *
- * @package OC\Share
- */
-class MailNotifications {
-
- /** @var IUser sender userId */
- private $user;
- /** @var string sender email address */
- private $replyTo;
- /** @var string */
- private $senderDisplayName;
- /** @var IL10N */
- private $l;
- /** @var IMailer */
- private $mailer;
- /** @var Defaults */
- private $defaults;
- /** @var ILogger */
- private $logger;
- /** @var IURLGenerator */
- private $urlGenerator;
-
- /**
- * @param IUser $user
- * @param IL10N $l10n
- * @param IMailer $mailer
- * @param ILogger $logger
- * @param Defaults $defaults
- * @param IURLGenerator $urlGenerator
- */
- public function __construct(IUser $user,
- IL10N $l10n,
- IMailer $mailer,
- ILogger $logger,
- Defaults $defaults,
- IURLGenerator $urlGenerator) {
- $this->l = $l10n;
- $this->user = $user;
- $this->mailer = $mailer;
- $this->logger = $logger;
- $this->defaults = $defaults;
- $this->urlGenerator = $urlGenerator;
-
- $this->replyTo = $this->user->getEMailAddress();
- $this->senderDisplayName = $this->user->getDisplayName();
- }
-
- /**
- * inform recipient about public link share
- *
- * @param string $recipient recipient email address
- * @param string $filename the shared file
- * @param string $link the public link
- * @param int $expiration expiration date (timestamp)
- * @return string[] $result of failed recipients
- */
- public function sendLinkShareMail($recipient, $filename, $link, $expiration) {
- $subject = (string)$this->l->t('%s shared »%s« with you', [$this->senderDisplayName, $filename]);
- list($htmlBody, $textBody) = $this->createMailBody($filename, $link, $expiration);
-
- $recipient = str_replace([', ', '; ', ',', ';', ' '], ',', $recipient);
- $recipients = explode(',', $recipient);
- try {
- $message = $this->mailer->createMessage();
- $message->setSubject($subject);
- $message->setTo($recipients);
- $message->setHtmlBody($htmlBody);
- $message->setPlainBody($textBody);
- $message->setFrom([
- Util::getDefaultEmailAddress('sharing-noreply') =>
- (string)$this->l->t('%s via %s', [
- $this->senderDisplayName,
- $this->defaults->getName()
- ]),
- ]);
- if(!is_null($this->replyTo)) {
- $message->setReplyTo([$this->replyTo]);
- }
-
- return $this->mailer->send($message);
- } catch (\Exception $e) {
- $this->logger->error("Can't send mail with public link to $recipient: ".$e->getMessage(), ['app' => 'sharing']);
- return [$recipient];
- }
- }
-
- /**
- * create mail body for plain text and html mail
- *
- * @param string $filename the shared file
- * @param string $link link to the shared file
- * @param int $expiration expiration date (timestamp)
- * @param string $prefix prefix of mail template files
- * @return array an array of the html mail body and the plain text mail body
- */
- private function createMailBody($filename, $link, $expiration, $prefix = '') {
- $formattedDate = $expiration ? $this->l->l('date', $expiration) : null;
-
- $html = new \OC_Template('core', $prefix . 'mail', '');
- $html->assign ('link', $link);
- $html->assign ('user_displayname', $this->senderDisplayName);
- $html->assign ('filename', $filename);
- $html->assign('expiration', $formattedDate);
- $htmlMail = $html->fetchPage();
-
- $plainText = new \OC_Template('core', $prefix . 'altmail', '');
- $plainText->assign ('link', $link);
- $plainText->assign ('user_displayname', $this->senderDisplayName);
- $plainText->assign ('filename', $filename);
- $plainText->assign('expiration', $formattedDate);
- $plainTextMail = $plainText->fetchPage();
-
- return [$htmlMail, $plainTextMail];
- }
-}
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index 924e2f68396..1bfd0821354 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -43,7 +43,6 @@
namespace OC\Share;
use OC\Files\Filesystem;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\ILogger;
use OCP\IUserManager;
@@ -2742,12 +2741,10 @@ class Share extends Constants {
'result' => '',
];
$try = 0;
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
+ $discoveryService = \OC::$server->query(\OCP\OCS\IDiscoveryService::class);
while ($result['success'] === false && $try < 2) {
- $endpoint = $discoveryManager->getShareEndpoint($protocol . $remoteDomain);
+ $federationEndpoints = $discoveryService->discover($protocol . $remoteDomain, 'FEDERATED_SHARING');
+ $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares';
$result = \OC::$server->getHTTPHelper()->post($protocol . $remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, $fields);
$try++;
$protocol = 'http://';
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index e4ae26be13d..933a2a5a33e 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -24,7 +24,6 @@
namespace OC\Share20;
use OC\Files\Cache\Cache;
-use OC\Files\Cache\CacheEntry;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Share\IShareProvider;
@@ -116,7 +115,7 @@ class DefaultShareProvider implements IShareProvider {
//If a password is set store it
if ($share->getPassword() !== null) {
- $qb->setValue('share_with', $qb->createNamedParameter($share->getPassword()));
+ $qb->setValue('password', $qb->createNamedParameter($share->getPassword()));
}
//If an expiration date is set store it
@@ -202,6 +201,7 @@ class DefaultShareProvider implements IShareProvider {
->set('permissions', $qb->createNamedParameter($share->getPermissions()))
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
+ ->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
->execute();
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
$qb = $this->dbConn->getQueryBuilder();
@@ -212,6 +212,7 @@ class DefaultShareProvider implements IShareProvider {
->set('permissions', $qb->createNamedParameter($share->getPermissions()))
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
+ ->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
->execute();
/*
@@ -224,6 +225,7 @@ class DefaultShareProvider implements IShareProvider {
->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy()))
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
+ ->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
->execute();
/*
@@ -240,7 +242,7 @@ class DefaultShareProvider implements IShareProvider {
$qb = $this->dbConn->getQueryBuilder();
$qb->update('share')
->where($qb->expr()->eq('id', $qb->createNamedParameter($share->getId())))
- ->set('share_with', $qb->createNamedParameter($share->getPassword()))
+ ->set('password', $qb->createNamedParameter($share->getPassword()))
->set('uid_owner', $qb->createNamedParameter($share->getShareOwner()))
->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy()))
->set('permissions', $qb->createNamedParameter($share->getPermissions()))
@@ -359,7 +361,7 @@ class DefaultShareProvider implements IShareProvider {
if ($data === false) {
$qb = $this->dbConn->getQueryBuilder();
- $type = $share->getNode() instanceof \OCP\Files\File ? 'file' : 'folder';
+ $type = $share->getNodeType();
//Insert new share
$qb->insert('share')
@@ -370,8 +372,8 @@ class DefaultShareProvider implements IShareProvider {
'uid_initiator' => $qb->createNamedParameter($share->getSharedBy()),
'parent' => $qb->createNamedParameter($share->getId()),
'item_type' => $qb->createNamedParameter($type),
- 'item_source' => $qb->createNamedParameter($share->getNode()->getId()),
- 'file_source' => $qb->createNamedParameter($share->getNode()->getId()),
+ 'item_source' => $qb->createNamedParameter($share->getNodeId()),
+ 'file_source' => $qb->createNamedParameter($share->getNodeId()),
'file_target' => $qb->createNamedParameter($share->getTarget()),
'permissions' => $qb->createNamedParameter(0),
'stime' => $qb->createNamedParameter($share->getShareTime()->getTimestamp()),
@@ -490,7 +492,7 @@ class DefaultShareProvider implements IShareProvider {
);
}
- $qb->innerJoin('s', 'filecache' ,'f', 's.file_source = f.fileid');
+ $qb->innerJoin('s', 'filecache' ,'f', $qb->expr()->eq('s.file_source', 'f.fileid'));
$qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId())));
$qb->orderBy('id');
@@ -646,7 +648,7 @@ class DefaultShareProvider implements IShareProvider {
// exclude shares leading to trashbin on home storages
$pathSections = explode('/', $data['path'], 2);
// FIXME: would not detect rare md5'd home storage case properly
- if ($pathSections[0] !== 'files'
+ if ($pathSections[0] !== 'files'
&& in_array(explode(':', $data['storage_string_id'], 2)[0], array('home', 'object'))) {
return false;
}
@@ -838,7 +840,7 @@ class DefaultShareProvider implements IShareProvider {
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
$share->setSharedWith($data['share_with']);
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
- $share->setPassword($data['share_with']);
+ $share->setPassword($data['password']);
$share->setToken($data['token']);
}
@@ -1067,4 +1069,115 @@ class DefaultShareProvider implements IShareProvider {
}
}
}
+
+ /**
+ * @inheritdoc
+ */
+ public function getAccessList($nodes, $currentAccess) {
+ $ids = [];
+ foreach ($nodes as $node) {
+ $ids[] = $node->getId();
+ }
+
+ $qb = $this->dbConn->getQueryBuilder();
+
+ $or = $qb->expr()->orX(
+ $qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_USER)),
+ $qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_GROUP)),
+ $qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_LINK))
+ );
+
+ if ($currentAccess) {
+ $or->add($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERGROUP)));
+ }
+
+ $qb->select('id', 'parent', 'share_type', 'share_with', 'file_source', 'file_target', 'permissions')
+ ->from('share')
+ ->where(
+ $or
+ )
+ ->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)))
+ ->andWhere($qb->expr()->orX(
+ $qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
+ $qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
+ ));
+ $cursor = $qb->execute();
+
+ $users = [];
+ $link = false;
+ while($row = $cursor->fetch()) {
+ $type = (int)$row['share_type'];
+ if ($type === \OCP\Share::SHARE_TYPE_USER) {
+ $uid = $row['share_with'];
+ $users[$uid] = isset($users[$uid]) ? $users[$uid] : [];
+ $users[$uid][$row['id']] = $row;
+ } else if ($type === \OCP\Share::SHARE_TYPE_GROUP) {
+ $gid = $row['share_with'];
+ $group = $this->groupManager->get($gid);
+
+ if ($gid === null) {
+ continue;
+ }
+
+ $userList = $group->getUsers();
+ foreach ($userList as $user) {
+ $uid = $user->getUID();
+ $users[$uid] = isset($users[$uid]) ? $users[$uid] : [];
+ $users[$uid][$row['id']] = $row;
+ }
+ } else if ($type === \OCP\Share::SHARE_TYPE_LINK) {
+ $link = true;
+ } else if ($type === self::SHARE_TYPE_USERGROUP && $currentAccess === true) {
+ $uid = $row['share_with'];
+ $users[$uid] = isset($users[$uid]) ? $users[$uid] : [];
+ $users[$uid][$row['id']] = $row;
+ }
+ }
+ $cursor->closeCursor();
+
+ if ($currentAccess === true) {
+ $users = array_map([$this, 'filterSharesOfUser'], $users);
+ $users = array_filter($users);
+ } else {
+ $users = array_keys($users);
+ }
+
+ return ['users' => $users, 'public' => $link];
+ }
+
+ /**
+ * For each user the path with the fewest slashes is returned
+ * @param array $shares
+ * @return array
+ */
+ protected function filterSharesOfUser(array $shares) {
+ // Group shares when the user has a share exception
+ foreach ($shares as $id => $share) {
+ $type = (int) $share['share_type'];
+ $permissions = (int) $share['permissions'];
+
+ if ($type === self::SHARE_TYPE_USERGROUP) {
+ unset($shares[$share['parent']]);
+
+ if ($permissions === 0) {
+ unset($shares[$id]);
+ }
+ }
+ }
+
+ $best = [];
+ $bestDepth = 0;
+ foreach ($shares as $id => $share) {
+ $depth = substr_count($share['file_target'], '/');
+ if (empty($best) || $depth < $bestDepth) {
+ $bestDepth = $depth;
+ $best = [
+ 'node_id' => $share['file_source'],
+ 'node_path' => $share['file_target'],
+ ];
+ }
+ }
+
+ return $best;
+ }
}
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index a02eb9205d0..06d03f2ec7c 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -36,7 +36,6 @@ use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Node;
-use OCP\Files\NotFoundException;
use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -266,7 +265,9 @@ class Manager implements IManager {
// Check that read permissions are always set
// Link shares are allowed to have no read permissions to allow upload to hidden folders
- if ($share->getShareType() !== \OCP\Share::SHARE_TYPE_LINK &&
+ $noReadPermissionRequired = $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK
+ || $share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL;
+ if (!$noReadPermissionRequired &&
($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
throw new \InvalidArgumentException('Shares need at least read permissions');
}
@@ -712,29 +713,29 @@ class Manager implements IManager {
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
$this->linkCreateChecks($share);
- // Password updated.
- if ($share->getPassword() !== $originalShare->getPassword()) {
- //Verify the password
- $this->verifyPassword($share->getPassword());
-
- // If a password is set. Hash it!
- if ($share->getPassword() !== null) {
- $share->setPassword($this->hasher->hash($share->getPassword()));
- }
- }
+ $this->updateSharePasswordIfNeeded($share, $originalShare);
if ($share->getExpirationDate() != $originalShare->getExpirationDate()) {
//Verify the expiration date
$this->validateExpirationDate($share);
$expirationDateUpdated = true;
}
+ } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
+ $plainTextPassword = $share->getPassword();
+ if (!$this->updateSharePasswordIfNeeded($share, $originalShare)) {
+ $plainTextPassword = null;
+ }
}
$this->pathCreateChecks($share->getNode());
// Now update the share!
$provider = $this->factory->getProviderForType($share->getShareType());
- $share = $provider->update($share);
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
+ $share = $provider->update($share, $plainTextPassword);
+ } else {
+ $share = $provider->update($share);
+ }
if ($expirationDateUpdated === true) {
\OC_Hook::emit('OCP\Share', 'post_set_expiration_date', [
@@ -776,6 +777,32 @@ class Manager implements IManager {
}
/**
+ * Updates the password of the given share if it is not the same as the
+ * password of the original share.
+ *
+ * @param \OCP\Share\IShare $share the share to update its password.
+ * @param \OCP\Share\IShare $originalShare the original share to compare its
+ * password with.
+ * @return boolean whether the password was updated or not.
+ */
+ private function updateSharePasswordIfNeeded(\OCP\Share\IShare $share, \OCP\Share\IShare $originalShare) {
+ // Password updated.
+ if ($share->getPassword() !== $originalShare->getPassword()) {
+ //Verify the password
+ $this->verifyPassword($share->getPassword());
+
+ // If a password is set. Hash it!
+ if ($share->getPassword() !== null) {
+ $share->setPassword($this->hasher->hash($share->getPassword()));
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* Delete all the children of this share
* FIXME: remove once https://github.com/owncloud/core/pull/21660 is in
*
@@ -915,55 +942,50 @@ class Manager implements IManager {
* Work around so we don't return expired shares but still follow
* proper pagination.
*/
- if ($shareType === \OCP\Share::SHARE_TYPE_LINK) {
- $shares2 = [];
- $today = new \DateTime();
-
- while(true) {
- $added = 0;
- foreach ($shares as $share) {
- // Check if the share is expired and if so delete it
- if ($share->getExpirationDate() !== null &&
- $share->getExpirationDate() <= $today
- ) {
- try {
- $this->deleteShare($share);
- } catch (NotFoundException $e) {
- //Ignore since this basically means the share is deleted
- }
- continue;
- }
- $added++;
- $shares2[] = $share;
- if (count($shares2) === $limit) {
- break;
- }
+ $shares2 = [];
+
+ while(true) {
+ $added = 0;
+ foreach ($shares as $share) {
+
+ try {
+ $this->checkExpireDate($share);
+ } catch (ShareNotFound $e) {
+ //Ignore since this basically means the share is deleted
+ continue;
}
+ $added++;
+ $shares2[] = $share;
+
if (count($shares2) === $limit) {
break;
}
+ }
- // If there was no limit on the select we are done
- if ($limit === -1) {
- break;
- }
+ if (count($shares2) === $limit) {
+ break;
+ }
- $offset += $added;
+ // If there was no limit on the select we are done
+ if ($limit === -1) {
+ break;
+ }
- // Fetch again $limit shares
- $shares = $provider->getSharesBy($userId, $shareType, $path, $reshares, $limit, $offset);
+ $offset += $added;
- // No more shares means we are done
- if (empty($shares)) {
- break;
- }
- }
+ // Fetch again $limit shares
+ $shares = $provider->getSharesBy($userId, $shareType, $path, $reshares, $limit, $offset);
- $shares = $shares2;
+ // No more shares means we are done
+ if (empty($shares)) {
+ break;
+ }
}
+ $shares = $shares2;
+
return $shares;
}
@@ -977,7 +999,18 @@ class Manager implements IManager {
return [];
}
- return $provider->getSharedWith($userId, $shareType, $node, $limit, $offset);
+ $shares = $provider->getSharedWith($userId, $shareType, $node, $limit, $offset);
+
+ // remove all shares which are already expired
+ foreach ($shares as $key => $share) {
+ try {
+ $this->checkExpireDate($share);
+ } catch (ShareNotFound $e) {
+ unset($shares[$key]);
+ }
+ }
+
+ return $shares;
}
/**
@@ -998,13 +1031,7 @@ class Manager implements IManager {
$share = $provider->getShareById($id, $recipient);
- // Validate link shares expiration date
- if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
- $share->getExpirationDate() !== null &&
- $share->getExpirationDate() <= new \DateTime()) {
- $this->deleteShare($share);
- throw new ShareNotFound();
- }
+ $this->checkExpireDate($share);
return $share;
}
@@ -1066,11 +1093,7 @@ class Manager implements IManager {
throw new ShareNotFound();
}
- if ($share->getExpirationDate() !== null &&
- $share->getExpirationDate() <= new \DateTime()) {
- $this->deleteShare($share);
- throw new ShareNotFound();
- }
+ $this->checkExpireDate($share);
/*
* Reduce the permissions for link shares if public upload is not enabled
@@ -1083,6 +1106,15 @@ class Manager implements IManager {
return $share;
}
+ protected function checkExpireDate($share) {
+ if ($share->getExpirationDate() !== null &&
+ $share->getExpirationDate() <= new \DateTime()) {
+ $this->deleteShare($share);
+ throw new ShareNotFound();
+ }
+
+ }
+
/**
* Verify the password of a public share
*
@@ -1091,7 +1123,9 @@ class Manager implements IManager {
* @return bool
*/
public function checkPassword(\OCP\Share\IShare $share, $password) {
- if ($share->getShareType() !== \OCP\Share::SHARE_TYPE_LINK) {
+ $passwordProtected = $share->getShareType() !== \OCP\Share::SHARE_TYPE_LINK
+ || $share->getShareType() !== \OCP\Share::SHARE_TYPE_EMAIL;
+ if (!$passwordProtected) {
//TODO maybe exception?
return false;
}
@@ -1148,29 +1182,114 @@ class Manager implements IManager {
/**
* Get access list to a path. This means
- * all the users and groups that can access a given path.
+ * all the users that can access a given path.
*
* Consider:
* -root
- * |-folder1
- * |-folder2
- * |-fileA
+ * |-folder1 (23)
+ * |-folder2 (32)
+ * |-fileA (42)
*
- * fileA is shared with user1
- * folder2 is shared with group2
- * folder1 is shared with user2
+ * fileA is shared with user1 and user1@server1
+ * folder2 is shared with group2 (user4 is a member of group2)
+ * folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
*
- * Then the access list will to '/folder1/folder2/fileA' is:
+ * Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
* [
- * 'users' => ['user1', 'user2'],
- * 'groups' => ['group2']
+ * users => [
+ * 'user1' => ['node_id' => 42, 'node_path' => '/fileA'],
+ * 'user4' => ['node_id' => 32, 'node_path' => '/folder2'],
+ * 'user2' => ['node_id' => 23, 'node_path' => '/folder (1)'],
+ * ],
+ * remote => [
+ * 'user1@server1' => ['node_id' => 42, 'token' => 'SeCr3t'],
+ * 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
+ * ],
+ * public => bool
+ * mail => bool
* ]
*
- * This is required for encryption
+ * The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
+ * [
+ * users => ['user1', 'user2', 'user4'],
+ * remote => bool,
+ * public => bool
+ * mail => bool
+ * ]
+ *
+ * This is required for encryption/activity
*
* @param \OCP\Files\Node $path
+ * @param bool $recursive Should we check all parent folders as well
+ * @param bool $currentAccess Should the user have currently access to the file
+ * @return array
*/
- public function getAccessList(\OCP\Files\Node $path) {
+ public function getAccessList(\OCP\Files\Node $path, $recursive = true, $currentAccess = false) {
+ $owner = $path->getOwner()->getUID();
+
+ if ($currentAccess) {
+ $al = ['users' => [], 'remote' => [], 'public' => false];
+ } else {
+ $al = ['users' => [], 'remote' => false, 'public' => false];
+ }
+ if (!$this->userManager->userExists($owner)) {
+ return $al;
+ }
+
+ //Get node for the owner
+ $userFolder = $this->rootFolder->getUserFolder($owner);
+ if ($path->getId() !== $userFolder->getId() && !$userFolder->isSubNode($path)) {
+ $path = $userFolder->getById($path->getId())[0];
+ }
+
+ $providers = $this->factory->getAllProviders();
+
+ /** @var Node[] $nodes */
+ $nodes = [];
+
+
+ if ($currentAccess) {
+ $ownerPath = $path->getPath();
+ $ownerPath = explode('/', $ownerPath, 4);
+ if (count($ownerPath) < 4) {
+ $ownerPath = '';
+ } else {
+ $ownerPath = $ownerPath[3];
+ }
+ $al['users'][$owner] = [
+ 'node_id' => $path->getId(),
+ 'node_path' => '/' . $ownerPath,
+ ];
+ } else {
+ $al['users'][] = $owner;
+ }
+
+ // Collect all the shares
+ while ($path->getPath() !== $userFolder->getPath()) {
+ $nodes[] = $path;
+ if (!$recursive) {
+ break;
+ }
+ $path = $path->getParent();
+ }
+
+ foreach ($providers as $provider) {
+ $tmp = $provider->getAccessList($nodes, $currentAccess);
+
+ foreach ($tmp as $k => $v) {
+ if (isset($al[$k])) {
+ if (is_array($al[$k])) {
+ $al[$k] = array_merge($al[$k], $v);
+ } else {
+ $al[$k] = $al[$k] || $v;
+ }
+ } else {
+ $al[$k] = $v;
+ }
+ }
+ }
+
+ return $al;
}
/**
diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php
index 1a39cfbf337..609fd87cd19 100644
--- a/lib/private/Share20/ProviderFactory.php
+++ b/lib/private/Share20/ProviderFactory.php
@@ -23,12 +23,14 @@
*/
namespace OC\Share20;
+use OC\CapabilitiesManager;
use OCA\FederatedFileSharing\AddressHandler;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
use OCA\FederatedFileSharing\TokenHandler;
+use OCA\ShareByMail\Settings\SettingsManager;
use OCA\ShareByMail\ShareByMailProvider;
+use OCP\Defaults;
use OCP\Share\IProviderFactory;
use OC\Share20\Exception\ProviderException;
use OCP\IServerContainer;
@@ -103,14 +105,10 @@ class ProviderFactory implements IProviderFactory {
$l,
$this->serverContainer->getCloudIdManager()
);
- $discoveryManager = new DiscoveryManager(
- $this->serverContainer->getMemCacheFactory(),
- $this->serverContainer->getHTTPClientService()
- );
$notifications = new Notifications(
$addressHandler,
$this->serverContainer->getHTTPClientService(),
- $discoveryManager,
+ $this->serverContainer->query(\OCP\OCS\IDiscoveryService::class),
$this->serverContainer->getJobList()
);
$tokenHandler = new TokenHandler(
@@ -149,18 +147,22 @@ class ProviderFactory implements IProviderFactory {
return null;
}
- $l = $this->serverContainer->getL10N('sharebymail');
+ $settingsManager = new SettingsManager($this->serverContainer->getConfig());
$this->shareByMailProvider = new ShareByMailProvider(
$this->serverContainer->getDatabaseConnection(),
$this->serverContainer->getSecureRandom(),
$this->serverContainer->getUserManager(),
$this->serverContainer->getLazyRootFolder(),
- $l,
+ $this->serverContainer->getL10N('sharebymail'),
$this->serverContainer->getLogger(),
$this->serverContainer->getMailer(),
$this->serverContainer->getURLGenerator(),
- $this->serverContainer->getActivityManager()
+ $this->serverContainer->getActivityManager(),
+ $settingsManager,
+ $this->serverContainer->query(Defaults::class),
+ $this->serverContainer->getHasher(),
+ $this->serverContainer->query(CapabilitiesManager::class)
);
}
diff --git a/lib/private/Share20/ShareHelper.php b/lib/private/Share20/ShareHelper.php
new file mode 100644
index 00000000000..358b4e8026a
--- /dev/null
+++ b/lib/private/Share20/ShareHelper.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OC\Share20;
+
+use OCP\Files\InvalidPathException;
+use OCP\Files\Node;
+use OCP\Files\NotFoundException;
+use OCP\Files\NotPermittedException;
+use OCP\Share\IManager;
+use OCP\Share\IShareHelper;
+
+class ShareHelper implements IShareHelper {
+
+ /** @var IManager */
+ private $shareManager;
+
+ public function __construct(IManager $shareManager) {
+ $this->shareManager = $shareManager;
+ }
+
+ /**
+ * @param Node $node
+ * @return array [ users => [Mapping $uid => $pathForUser], remotes => [Mapping $cloudId => $pathToMountRoot]]
+ */
+ public function getPathsForAccessList(Node $node) {
+ $result = [
+ 'users' => [],
+ 'remotes' => [],
+ ];
+
+ $accessList = $this->shareManager->getAccessList($node, true, true);
+ if (!empty($accessList['users'])) {
+ $result['users'] = $this->getPathsForUsers($node, $accessList['users']);
+ }
+ if (!empty($accessList['remote'])) {
+ $result['remotes'] = $this->getPathsForRemotes($node, $accessList['remote']);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Sample:
+ * $users = [
+ * 'test1' => ['node_id' => 16, 'node_path' => '/foo'],
+ * 'test2' => ['node_id' => 23, 'node_path' => '/bar'],
+ * 'test3' => ['node_id' => 42, 'node_path' => '/cat'],
+ * 'test4' => ['node_id' => 48, 'node_path' => '/dog'],
+ * ];
+ *
+ * Node tree:
+ * - SixTeen is the parent of TwentyThree
+ * - TwentyThree is the parent of FortyTwo
+ * - FortyEight does not exist
+ *
+ * $return = [
+ * 'test1' => '/foo/TwentyThree/FortyTwo',
+ * 'test2' => '/bar/FortyTwo',
+ * 'test3' => '/cat',
+ * ],
+ *
+ * @param Node $node
+ * @param array[] $users
+ * @return array
+ */
+ protected function getPathsForUsers(Node $node, array $users) {
+ /** @var array[] $byId */
+ $byId = [];
+ /** @var array[] $results */
+ $results = [];
+
+ foreach ($users as $uid => $info) {
+ if (!isset($byId[$info['node_id']])) {
+ $byId[$info['node_id']] = [];
+ }
+ $byId[$info['node_id']][$uid] = $info['node_path'];
+ }
+
+ try {
+ if (isset($byId[$node->getId()])) {
+ foreach ($byId[$node->getId()] as $uid => $path) {
+ $results[$uid] = $path;
+ }
+ unset($byId[$node->getId()]);
+ }
+ } catch (NotFoundException $e) {
+ return $results;
+ } catch (InvalidPathException $e) {
+ return $results;
+ }
+
+ if (empty($byId)) {
+ return $results;
+ }
+
+ $item = $node;
+ $appendix = '/' . $node->getName();
+ while (!empty($byId)) {
+ try {
+ /** @var Node $item */
+ $item = $item->getParent();
+
+ if (!empty($byId[$item->getId()])) {
+ foreach ($byId[$item->getId()] as $uid => $path) {
+ $results[$uid] = $path . $appendix;
+ }
+ unset($byId[$item->getId()]);
+ }
+
+ $appendix = '/' . $item->getName() . $appendix;
+ } catch (NotFoundException $e) {
+ return $results;
+ } catch (InvalidPathException $e) {
+ return $results;
+ } catch (NotPermittedException $e) {
+ return $results;
+ }
+ }
+
+ return $results;
+ }
+
+ /**
+ * Sample:
+ * $remotes = [
+ * 'test1' => ['node_id' => 16, 'token' => 't1'],
+ * 'test2' => ['node_id' => 23, 'token' => 't2'],
+ * 'test3' => ['node_id' => 42, 'token' => 't3'],
+ * 'test4' => ['node_id' => 48, 'token' => 't4'],
+ * ];
+ *
+ * Node tree:
+ * - SixTeen is the parent of TwentyThree
+ * - TwentyThree is the parent of FortyTwo
+ * - FortyEight does not exist
+ *
+ * $return = [
+ * 'test1' => ['token' => 't1', 'node_path' => '/SixTeen'],
+ * 'test2' => ['token' => 't2', 'node_path' => '/SixTeen/TwentyThree'],
+ * 'test3' => ['token' => 't3', 'node_path' => '/SixTeen/TwentyThree/FortyTwo'],
+ * ],
+ *
+ * @param Node $node
+ * @param array[] $remotes
+ * @return array
+ */
+ protected function getPathsForRemotes(Node $node, array $remotes) {
+ /** @var array[] $byId */
+ $byId = [];
+ /** @var array[] $results */
+ $results = [];
+
+ foreach ($remotes as $cloudId => $info) {
+ if (!isset($byId[$info['node_id']])) {
+ $byId[$info['node_id']] = [];
+ }
+ $byId[$info['node_id']][$cloudId] = $info['token'];
+ }
+
+ $item = $node;
+ while (!empty($byId)) {
+ try {
+ if (!empty($byId[$item->getId()])) {
+ $path = $this->getMountedPath($item);
+ foreach ($byId[$item->getId()] as $uid => $token) {
+ $results[$uid] = [
+ 'node_path' => $path,
+ 'token' => $token,
+ ];
+ }
+ unset($byId[$item->getId()]);
+ }
+
+ /** @var Node $item */
+ $item = $item->getParent();
+ } catch (NotFoundException $e) {
+ return $results;
+ } catch (InvalidPathException $e) {
+ return $results;
+ } catch (NotPermittedException $e) {
+ return $results;
+ }
+ }
+
+ return $results;
+ }
+
+ /**
+ * @param Node $node
+ * @return string
+ */
+ protected function getMountedPath(Node $node) {
+ $path = $node->getPath();
+ $sections = explode('/', $path, 4);
+ return '/' . $sections[3];
+ }
+}
diff --git a/lib/private/SystemTag/SystemTagManager.php b/lib/private/SystemTag/SystemTagManager.php
index d0854e885eb..ab0deba0360 100644
--- a/lib/private/SystemTag/SystemTagManager.php
+++ b/lib/private/SystemTag/SystemTagManager.php
@@ -31,7 +31,6 @@ use OCP\SystemTag\ManagerEvent;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\SystemTag\TagNotFoundException;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-use OCP\IUserManager;
use OCP\IGroupManager;
use OCP\SystemTag\ISystemTag;
use OCP\IUser;
diff --git a/lib/private/Template/Base.php b/lib/private/Template/Base.php
index 6af679f0a66..18cf6324089 100644
--- a/lib/private/Template/Base.php
+++ b/lib/private/Template/Base.php
@@ -28,6 +28,8 @@
namespace OC\Template;
+use OCP\Defaults;
+
class Base {
private $template; // The template
private $vars; // Vars
@@ -35,14 +37,14 @@ class Base {
/** @var \OCP\IL10N */
private $l10n;
- /** @var \OC_Defaults */
+ /** @var Defaults */
private $theme;
/**
* @param string $template
* @param string $requestToken
* @param \OCP\IL10N $l10n
- * @param \OC_Defaults $theme
+ * @param Defaults $theme
*/
public function __construct($template, $requestToken, $l10n, $theme ) {
$this->vars = array();
diff --git a/lib/private/Template/JSCombiner.php b/lib/private/Template/JSCombiner.php
index 9f92813f905..604cd2cceb7 100644
--- a/lib/private/Template/JSCombiner.php
+++ b/lib/private/Template/JSCombiner.php
@@ -98,7 +98,7 @@ class JSCombiner {
$fileName = str_replace('.json', '.js', $fileName) . '.deps';
try {
$deps = $this->depsCache->get($folder->getName() . '-' . $fileName);
- if ($deps === null) {
+ if ($deps === null || $deps === '') {
$depFile = $folder->getFile($fileName);
$deps = $depFile->getContent();
$this->depsCache->set($folder->getName() . '-' . $fileName, $deps);
@@ -155,8 +155,15 @@ class JSCombiner {
}
try {
+ $gzipFile = $folder->getFile($fileName . '.gzip'); # Safari doesn't like .gz
+ } catch (NotFoundException $e) {
+ $gzipFile = $folder->newFile($fileName . '.gzip'); # Safari doesn't like .gz
+ }
+
+ try {
$cachedfile->putContent($res);
$depFile->putContent(json_encode($deps));
+ $gzipFile->putContent(gzencode($res, 9));
return true;
} catch (NotPermittedException $e) {
return false;
diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php
index ca45bbee9c6..9a11e84f8d9 100644
--- a/lib/private/Template/JSConfigHelper.php
+++ b/lib/private/Template/JSConfigHelper.php
@@ -24,6 +24,7 @@ namespace OC\Template;
use bantu\IniGetWrapper\IniGetWrapper;
use OCP\App\IAppManager;
+use OCP\Defaults;
use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -36,7 +37,7 @@ class JSConfigHelper {
/** @var IL10N */
private $l;
- /** @var \OC_Defaults */
+ /** @var Defaults */
private $defaults;
/** @var IAppManager */
@@ -62,7 +63,7 @@ class JSConfigHelper {
/**
* @param IL10N $l
- * @param \OC_Defaults $defaults
+ * @param Defaults $defaults
* @param IAppManager $appManager
* @param ISession $session
* @param IUser|null $currentUser
@@ -72,7 +73,7 @@ class JSConfigHelper {
* @param IURLGenerator $urlGenerator
*/
public function __construct(IL10N $l,
- \OC_Defaults $defaults,
+ Defaults $defaults,
IAppManager $appManager,
ISession $session,
$currentUser,
@@ -112,6 +113,9 @@ class JSConfigHelper {
$apps_paths[$app] = \OC_App::getAppWebPath($app);
}
+
+ $enableLinkPasswordByDefault = $this->config->getAppValue('core', 'shareapi_enable_link_password_by_default', 'no');
+ $enableLinkPasswordByDefault = ($enableLinkPasswordByDefault === 'yes') ? true : false;
$defaultExpireDateEnabled = $this->config->getAppValue('core', 'shareapi_default_expire_date', 'no') === 'yes';
$defaultExpireDate = $enforceDefaultExpireDate = null;
if ($defaultExpireDateEnabled) {
@@ -217,6 +221,7 @@ class JSConfigHelper {
'defaultExpireDate' => $defaultExpireDate,
'defaultExpireDateEnforced' => $enforceDefaultExpireDate,
'enforcePasswordForPublicLink' => \OCP\Util::isPublicLinkPasswordRequired(),
+ 'enableLinkPasswordByDefault' => $enableLinkPasswordByDefault,
'sharingDisabledForUser' => \OCP\Util::isSharingDisabledForUser(),
'resharingAllowed' => \OCP\Share::isResharingAllowed(),
'remoteShareAllowed' => $outgoingServer2serverShareEnabled,
diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php
index c12d8771513..c31a255e441 100644
--- a/lib/private/Template/SCSSCacher.php
+++ b/lib/private/Template/SCSSCacher.php
@@ -25,10 +25,11 @@ use Leafo\ScssPhp\Compiler;
use Leafo\ScssPhp\Exception\ParserException;
use Leafo\ScssPhp\Formatter\Crunched;
use Leafo\ScssPhp\Formatter\Expanded;
-use OC\SystemConfig;
+use OC\Files\AppData\Factory;
use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
+use OCP\Files\SimpleFS\ISimpleFile;
use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\ICache;
use OCP\IConfig;
@@ -57,22 +58,25 @@ class SCSSCacher {
/**
* @param ILogger $logger
- * @param IAppData $appData
+ * @param Factory $appDataFactory
* @param IURLGenerator $urlGenerator
* @param IConfig $config
+ * @param \OC_Defaults $defaults
* @param string $serverRoot
* @param ICache $depsCache
*/
public function __construct(ILogger $logger,
- IAppData $appData,
+ Factory $appDataFactory,
IURLGenerator $urlGenerator,
IConfig $config,
+ \OC_Defaults $defaults,
$serverRoot,
ICache $depsCache) {
$this->logger = $logger;
- $this->appData = $appData;
+ $this->appData = $appDataFactory->get('css');
$this->urlGenerator = $urlGenerator;
$this->config = $config;
+ $this->defaults = $defaults;
$this->serverRoot = $serverRoot;
$this->depsCache = $depsCache;
}
@@ -101,13 +105,24 @@ class SCSSCacher {
$folder = $this->appData->newFolder($app);
}
- if($this->isCached($fileNameCSS, $folder)) {
+
+ if(!$this->variablesChanged() && $this->isCached($fileNameCSS, $folder)) {
return true;
}
return $this->cache($path, $fileNameCSS, $fileNameSCSS, $folder, $webDir);
}
/**
+ * @param $appName
+ * @param $fileName
+ * @return ISimpleFile
+ */
+ public function getCachedCSS($appName, $fileName) {
+ $folder = $this->appData->getFolder($appName);
+ return $folder->getFile($fileName);
+ }
+
+ /**
* Check if the file is cached or not
* @param string $fileNameCSS
* @param ISimpleFolder $folder
@@ -140,6 +155,20 @@ class SCSSCacher {
}
/**
+ * Check if the variables file has changed
+ * @return bool
+ */
+ private function variablesChanged() {
+ $injectedVariables = $this->getInjectedVariables();
+ if($this->config->getAppValue('core', 'scss.variables') !== md5($injectedVariables)) {
+ $this->resetCache();
+ $this->config->setAppValue('core', 'scss.variables', md5($injectedVariables));
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Cache the file with AppData
* @param string $path
* @param string $fileNameCSS
@@ -180,15 +209,25 @@ class SCSSCacher {
try {
$compiledScss = $scss->compile(
'@import "variables.scss";' .
+ $this->getInjectedVariables() .
'@import "'.$fileNameSCSS.'";');
} catch(ParserException $e) {
$this->logger->error($e, ['app' => 'core']);
return false;
}
+ // Gzip file
+ try {
+ $gzipFile = $folder->getFile($fileNameCSS . '.gzip'); # Safari doesn't like .gz
+ } catch (NotFoundException $e) {
+ $gzipFile = $folder->newFile($fileNameCSS . '.gzip'); # Safari doesn't like .gz
+ }
+
try {
- $cachedfile->putContent($this->rebaseUrls($compiledScss, $webDir));
+ $data = $this->rebaseUrls($compiledScss, $webDir);
+ $cachedfile->putContent($data);
$depFile->putContent(json_encode($scss->getParsedFiles()));
+ $gzipFile->putContent(gzencode($data, 9));
$this->logger->debug($webDir.'/'.$fileNameSCSS.' compiled and successfully cached', ['app' => 'core']);
return true;
} catch(NotPermittedException $e) {
@@ -197,6 +236,35 @@ class SCSSCacher {
}
/**
+ * Reset scss cache by deleting all generated css files
+ * We need to regenerate all files when variables change
+ */
+ private function resetCache() {
+ $appDirectory = $this->appData->getDirectoryListing();
+ if(empty($appDirectory)){
+ return;
+ }
+ foreach ($appDirectory as $folder) {
+ foreach ($folder->getDirectoryListing() as $file) {
+ if (substr($file->getName(), -3) === "css" || substr($file->getName(), -4) === "deps") {
+ $file->delete();
+ }
+ }
+ }
+ }
+
+ /**
+ * @return string SCSS code for variables from OC_Defaults
+ */
+ private function getInjectedVariables() {
+ $variables = '';
+ foreach ($this->defaults->getScssVariables() as $key => $value) {
+ $variables .= '$' . $key . ': ' . $value . ';';
+ }
+ return $variables;
+ }
+
+ /**
* Add the correct uri prefix to make uri valid again
* @param string $css
* @param string $webDir
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index 956cba40086..f7bb23cd3de 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -38,6 +38,7 @@ namespace OC;
use OC\Template\JSCombiner;
use OC\Template\JSConfigHelper;
use OC\Template\SCSSCacher;
+use OCP\Defaults;
class TemplateLayout extends \OC_Template {
@@ -57,6 +58,7 @@ class TemplateLayout extends \OC_Template {
// yes - should be injected ....
$this->config = \OC::$server->getConfig();
+
// Decide which page we show
if($renderAs == 'user') {
parent::__construct( 'core', 'layout.user' );
@@ -77,8 +79,6 @@ class TemplateLayout extends \OC_Template {
$this->assign( 'appid', $appId );
$navigation = \OC_App::getNavigation();
$this->assign( 'navigation', $navigation);
- $navigation = \OC_App::getHeaderNavigation();
- $this->assign( 'headernavigation', $navigation);
$settingsNavigation = \OC_App::getSettingsNavigation();
$this->assign( 'settingsnavigation', $settingsNavigation);
foreach($navigation as $entry) {
@@ -95,14 +95,8 @@ class TemplateLayout extends \OC_Template {
}
}
$userDisplayName = \OC_User::getDisplayName();
- $appsMgmtActive = strpos(\OC::$server->getRequest()->getRequestUri(), \OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')) === 0;
- if ($appsMgmtActive) {
- $l = \OC::$server->getL10N('lib');
- $this->assign('application', $l->t('Apps'));
- }
$this->assign('user_displayname', $userDisplayName);
$this->assign('user_uid', \OC_User::getUser());
- $this->assign('appsmanagement_active', $appsMgmtActive);
if (\OC_User::getUser() === false) {
$this->assign('userAvatarSet', false);
@@ -141,7 +135,7 @@ class TemplateLayout extends \OC_Template {
if (\OC::$server->getContentSecurityPolicyNonceManager()->browserSupportsCspV3()) {
$jsConfigHelper = new JSConfigHelper(
\OC::$server->getL10N('core'),
- \OC::$server->getThemingDefaults(),
+ \OC::$server->query(Defaults::class),
\OC::$server->getAppManager(),
\OC::$server->getSession(),
\OC::$server->getUserSession()->getUser(),
@@ -201,7 +195,9 @@ class TemplateLayout extends \OC_Template {
// allows chrome workspace mapping in debug mode
return "";
}
-
+ if ($this->config->getSystemValue('installed', false) && \OC::$server->getAppManager()->isInstalled('theming')) {
+ return '?v=' . self::$versionHash . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
+ }
return '?v=' . self::$versionHash;
}
@@ -214,16 +210,7 @@ class TemplateLayout extends \OC_Template {
$theme = \OC_Util::getTheme();
if($compileScss) {
- /** @var \OC\Memcache\Factory $cache */
- $cache = \OC::$server->query('MemCacheFactory');
- $SCSSCacher = new SCSSCacher(
- \OC::$server->getLogger(),
- \OC::$server->getAppDataDir('css'),
- \OC::$server->getURLGenerator(),
- \OC::$server->getConfig(),
- \OC::$SERVERROOT,
- $cache->createLocal('SCSS')
- );
+ $SCSSCacher = \OC::$server->query(SCSSCacher::class);
} else {
$SCSSCacher = null;
}
@@ -233,7 +220,8 @@ class TemplateLayout extends \OC_Template {
$theme,
array( \OC::$SERVERROOT => \OC::$WEBROOT ),
array( \OC::$SERVERROOT => \OC::$WEBROOT ),
- $SCSSCacher);
+ $SCSSCacher
+ );
$locator->find($styles);
return $locator->getResources();
}
diff --git a/lib/private/Updater/VersionCheck.php b/lib/private/Updater/VersionCheck.php
index ae3840a7fa5..7b8b7073d6d 100644
--- a/lib/private/Updater/VersionCheck.php
+++ b/lib/private/Updater/VersionCheck.php
@@ -23,10 +23,8 @@
namespace OC\Updater;
-use OC_Util;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
-use OC\Setup;
use OCP\Util;
class VersionCheck {
@@ -82,7 +80,12 @@ class VersionCheck {
$url = $updaterUrl . '?version=' . $versionString;
$tmp = [];
- $xml = $this->getUrlContent($url);
+ try {
+ $xml = $this->getUrlContent($url);
+ } catch (\Exception $e) {
+ return false;
+ }
+
if ($xml) {
$loadEntities = libxml_disable_entity_loader(true);
$data = @simplexml_load_string($xml);
@@ -108,16 +111,13 @@ class VersionCheck {
/**
* @codeCoverageIgnore
* @param string $url
- * @return bool|resource|string
+ * @return resource|string
+ * @throws \Exception
*/
protected function getUrlContent($url) {
- try {
- $client = $this->clientService->newClient();
- $response = $client->get($url);
- return $response->getBody();
- } catch (\Exception $e) {
- return false;
- }
+ $client = $this->clientService->newClient();
+ $response = $client->get($url);
+ return $response->getBody();
}
}
diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php
index 22b335ebfbd..73506c7d7c5 100644
--- a/lib/private/User/Database.php
+++ b/lib/private/User/Database.php
@@ -237,9 +237,10 @@ class Database extends Backend implements IUserBackend {
* @return boolean true if user was found, false otherwise
*/
private function loadUser($uid) {
+ $uid = (string) $uid;
if (!isset($this->cache[$uid])) {
//guests $uid could be NULL or ''
- if ($uid === null || $uid === '') {
+ if ($uid === '') {
$this->cache[$uid]=false;
return true;
}
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index 77741efcc75..6220613cbb1 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -185,9 +185,27 @@ class Manager extends PublicEmitter implements IUserManager {
* @return mixed the User object on success, false otherwise
*/
public function checkPassword($loginName, $password) {
+ $result = $this->checkPasswordNoLogging($loginName, $password);
+
+ if ($result === false) {
+ \OC::$server->getLogger()->warning('Login failed: \''. $loginName .'\' (Remote IP: \''. \OC::$server->getRequest()->getRemoteAddress(). '\')', ['app' => 'core']);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Check if the password is valid for the user
+ *
+ * @internal
+ * @param string $loginName
+ * @param string $password
+ * @return mixed the User object on success, false otherwise
+ */
+ public function checkPasswordNoLogging($loginName, $password) {
$loginName = str_replace("\0", '', $loginName);
$password = str_replace("\0", '', $password);
-
+
foreach ($this->backends as $backend) {
if ($backend->implementsActions(Backend::CHECK_PASSWORD)) {
$uid = $backend->checkPassword($loginName, $password);
@@ -197,7 +215,6 @@ class Manager extends PublicEmitter implements IUserManager {
}
}
- \OC::$server->getLogger()->warning('Login failed: \''. $loginName .'\' (Remote IP: \''. \OC::$server->getRequest()->getRemoteAddress(). '\')', ['app' => 'core']);
return false;
}
@@ -278,9 +295,13 @@ class Manager extends PublicEmitter implements IUserManager {
throw new \Exception($l->t('A valid username must be provided'));
}
// No whitespace at the beginning or at the end
- if (strlen(trim($uid, "\t\n\r\0\x0B\xe2\x80\x8b")) !== strlen(trim($uid))) {
+ if (trim($uid) !== $uid) {
throw new \Exception($l->t('Username contains whitespace at the beginning or at the end'));
}
+ // Username only consists of 1 or 2 dots (directory traversal)
+ if ($uid === '.' || $uid === '..') {
+ throw new \Exception($l->t('Username must not consist of dots only'));
+ }
// No empty password
if (trim($password) == '') {
throw new \Exception($l->t('A valid password must be provided'));
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 4980318b554..efa11348efe 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -41,6 +41,7 @@ use OC\Authentication\Exceptions\PasswordLoginForbiddenException;
use OC\Authentication\Token\IProvider;
use OC\Authentication\Token\IToken;
use OC\Hooks\Emitter;
+use OC\Hooks\PublicEmitter;
use OC_User;
use OC_Util;
use OCA\DAV\Connector\Sabre\Auth;
@@ -51,6 +52,7 @@ use OCP\ISession;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
+use OCP\Lockdown\ILockdownManager;
use OCP\Security\ISecureRandom;
use OCP\Session\Exceptions\SessionNotAvailableException;
use OCP\Util;
@@ -77,14 +79,14 @@ use Symfony\Component\EventDispatcher\GenericEvent;
*/
class Session implements IUserSession, Emitter {
- /** @var IUserManager $manager */
+ /** @var IUserManager|PublicEmitter $manager */
private $manager;
/** @var ISession $session */
private $session;
/** @var ITimeFactory */
- private $timeFacory;
+ private $timeFactory;
/** @var IProvider */
private $tokenProvider;
@@ -98,26 +100,33 @@ class Session implements IUserSession, Emitter {
/** @var ISecureRandom */
private $random;
+ /** @var ILockdownManager */
+ private $lockdownManager;
+
/**
* @param IUserManager $manager
* @param ISession $session
- * @param ITimeFactory $timeFacory
+ * @param ITimeFactory $timeFactory
* @param IProvider $tokenProvider
* @param IConfig $config
* @param ISecureRandom $random
+ * @param ILockdownManager $lockdownManager
*/
public function __construct(IUserManager $manager,
ISession $session,
- ITimeFactory $timeFacory,
+ ITimeFactory $timeFactory,
$tokenProvider,
IConfig $config,
- ISecureRandom $random) {
+ ISecureRandom $random,
+ ILockdownManager $lockdownManager
+ ) {
$this->manager = $manager;
$this->session = $session;
- $this->timeFacory = $timeFacory;
+ $this->timeFactory = $timeFactory;
$this->tokenProvider = $tokenProvider;
$this->config = $config;
$this->random = $random;
+ $this->lockdownManager = $lockdownManager;
}
/**
@@ -148,7 +157,7 @@ class Session implements IUserSession, Emitter {
/**
* get the manager object
*
- * @return Manager
+ * @return Manager|PublicEmitter
*/
public function getManager() {
return $this->manager;
@@ -317,6 +326,46 @@ class Session implements IUserSession, Emitter {
}
/**
+ * @param IUser $user
+ * @param array $loginDetails
+ * @param bool $regenerateSessionId
+ * @return true returns true if login successful or an exception otherwise
+ * @throws LoginException
+ */
+ public function completeLogin(IUser $user, array $loginDetails, $regenerateSessionId = true) {
+ if (!$user->isEnabled()) {
+ // disabled users can not log in
+ // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
+ $message = \OC::$server->getL10N('lib')->t('User disabled');
+ throw new LoginException($message);
+ }
+
+ if($regenerateSessionId) {
+ $this->session->regenerateId();
+ }
+
+ $this->setUser($user);
+ $this->setLoginName($loginDetails['loginName']);
+
+ if(isset($loginDetails['token']) && $loginDetails['token'] instanceof IToken) {
+ $this->setToken($loginDetails['token']->getId());
+ $this->lockdownManager->setToken($loginDetails['token']);
+ $firstTimeLogin = false;
+ } else {
+ $this->setToken(null);
+ $firstTimeLogin = $user->updateLastLoginTimestamp();
+ }
+ $this->manager->emit('\OC\User', 'postLogin', [$user, $loginDetails['password']]);
+ if($this->isLoggedIn()) {
+ $this->prepareUserLogin($firstTimeLogin);
+ return true;
+ } else {
+ $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
+ throw new LoginException($message);
+ }
+ }
+
+ /**
* Tries to log in a client
*
* Checks token auth enforced
@@ -374,7 +423,7 @@ class Session implements IUserSession, Emitter {
if (!is_null($request->getCookie('cookie_test'))) {
return true;
}
- setcookie('cookie_test', 'test', $this->timeFacory->getTime() + 3600);
+ setcookie('cookie_test', 'test', $this->timeFactory->getTime() + 3600);
return false;
}
@@ -464,7 +513,7 @@ class Session implements IUserSession, Emitter {
);
// Set the last-password-confirm session to make the sudo mode work
- $this->session->set('last-password-confirm', $this->timeFacory->getTime());
+ $this->session->set('last-password-confirm', $this->timeFactory->getTime());
return true;
}
@@ -490,25 +539,7 @@ class Session implements IUserSession, Emitter {
return false;
}
- if ($user->isEnabled()) {
- $this->setUser($user);
- $this->setLoginName($uid);
- $this->setToken(null);
- $firstTimeLogin = $user->updateLastLoginTimestamp();
- $this->manager->emit('\OC\User', 'postLogin', [$user, $password]);
- if ($this->isLoggedIn()) {
- $this->prepareUserLogin($firstTimeLogin);
- return true;
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
- throw new LoginException($message);
- }
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('User disabled');
- throw new LoginException($message);
- }
+ return $this->completeLogin($user, ['loginName' => $uid, 'password' => $password], false);
}
/**
@@ -534,34 +565,22 @@ class Session implements IUserSession, Emitter {
// Ignore and use empty string instead
}
+ $this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
+
$user = $this->manager->get($uid);
if (is_null($user)) {
// user does not exist
return false;
}
- if (!$user->isEnabled()) {
- // disabled users can not log in
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('User disabled');
- throw new LoginException($message);
- }
- //login
- $this->setUser($user);
- $this->setLoginName($dbToken->getLoginName());
- $this->setToken($dbToken->getId());
- \OC::$server->getLockdownManager()->setToken($dbToken);
- $this->manager->emit('\OC\User', 'postLogin', array($user, $password));
-
- if ($this->isLoggedIn()) {
- $this->prepareUserLogin(false); // token login cant be the first
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
- throw new LoginException($message);
- }
-
- return true;
+ return $this->completeLogin(
+ $user,
+ [
+ 'loginName' => $dbToken->getLoginName(),
+ 'password' => $password,
+ 'token' => $dbToken
+ ],
+ false);
}
/**
@@ -626,7 +645,7 @@ class Session implements IUserSession, Emitter {
// Check whether login credentials are still valid and the user was not disabled
// This check is performed each 5 minutes
$lastCheck = $dbToken->getLastCheck() ? : 0;
- $now = $this->timeFacory->getTime();
+ $now = $this->timeFactory->getTime();
if ($lastCheck > ($now - 60 * 5)) {
// Checked performed recently, nothing to do now
return true;
@@ -747,7 +766,7 @@ class Session implements IUserSession, Emitter {
// replace successfully used token with a new one
$this->config->deleteUserValue($uid, 'login_token', $currentToken);
$newToken = $this->random->generate(32);
- $this->config->setUserValue($uid, 'login_token', $newToken, $this->timeFacory->getTime());
+ $this->config->setUserValue($uid, 'login_token', $newToken, $this->timeFactory->getTime());
try {
$sessionId = $this->session->getId();
@@ -766,6 +785,7 @@ class Session implements IUserSession, Emitter {
$this->setUser($user);
$this->setLoginName($token->getLoginName());
$this->setToken($token->getId());
+ $this->lockdownManager->setToken($token);
$user->updateLastLoginTimestamp();
$this->manager->emit('\OC\User', 'postRememberedLogin', [$user]);
return true;
@@ -776,7 +796,7 @@ class Session implements IUserSession, Emitter {
*/
public function createRememberMeToken(IUser $user) {
$token = $this->random->generate(32);
- $this->config->setUserValue($user->getUID(), 'login_token', $token, $this->timeFacory->getTime());
+ $this->config->setUserValue($user->getUID(), 'login_token', $token, $this->timeFactory->getTime());
$this->setMagicInCookie($user->getUID(), $token);
}
@@ -814,7 +834,7 @@ class Session implements IUserSession, Emitter {
$webRoot = '/';
}
- $expires = $this->timeFacory->getTime() + $this->config->getSystemValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
+ $expires = $this->timeFactory->getTime() + $this->config->getSystemValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
setcookie('nc_username', $username, $expires, $webRoot, '', $secureCookie, true);
setcookie('nc_token', $token, $expires, $webRoot, '', $secureCookie, true);
try {
@@ -834,14 +854,14 @@ class Session implements IUserSession, Emitter {
unset($_COOKIE['nc_username']); //TODO: DI
unset($_COOKIE['nc_token']);
unset($_COOKIE['nc_session_id']);
- setcookie('nc_username', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
- setcookie('nc_token', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
- setcookie('nc_session_id', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
+ setcookie('nc_username', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
+ setcookie('nc_token', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
+ setcookie('nc_session_id', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT, '', $secureCookie, true);
// old cookies might be stored under /webroot/ instead of /webroot
// and Firefox doesn't like it!
- setcookie('nc_username', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
- setcookie('nc_token', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
- setcookie('nc_session_id', '', $this->timeFacory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
+ setcookie('nc_username', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
+ setcookie('nc_token', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
+ setcookie('nc_session_id', '', $this->timeFactory->getTime() - 3600, OC::$WEBROOT . '/', '', $secureCookie, true);
}
/**
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index bca9c46bfd0..f55807bc769 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -158,12 +158,13 @@ class User implements IUser {
* @since 9.0.0
*/
public function setEMailAddress($mailAddress) {
+ $oldMailAddress = $this->getEMailAddress();
if($mailAddress === '') {
$this->config->deleteUserValue($this->uid, 'settings', 'email');
} else {
$this->config->setUserValue($this->uid, 'settings', 'email', $mailAddress);
}
- $this->triggerChange('eMailAddress', $mailAddress);
+ $this->triggerChange('eMailAddress', $mailAddress, $oldMailAddress);
}
/**
@@ -341,9 +342,13 @@ class User implements IUser {
* @param bool $enabled
*/
public function setEnabled($enabled) {
+ $oldStatus = $this->isEnabled();
$this->enabled = $enabled;
$enabled = ($enabled) ? 'true' : 'false';
- $this->config->setUserValue($this->uid, 'core', 'enabled', $enabled);
+ if ($oldStatus !== $this->enabled) {
+ $this->triggerChange('enabled', $enabled);
+ $this->config->setUserValue($this->uid, 'core', 'enabled', $enabled);
+ }
}
/**
@@ -435,9 +440,9 @@ class User implements IUser {
return $url;
}
- public function triggerChange($feature, $value = null) {
+ public function triggerChange($feature, $value = null, $oldValue = null) {
if ($this->emitter) {
- $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature, $value));
+ $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature, $value, $oldValue));
}
}
}
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 5343e7ad172..3800b8b770e 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -51,7 +51,6 @@ use OC\App\DependencyAnalyzer;
use OC\App\InfoParser;
use OC\App\Platform;
use OC\Installer;
-use OC\OCSClient;
use OC\Repair;
use OCP\App\ManagerEvent;
@@ -457,83 +456,8 @@ class OC_App {
$appManager->disableApp($app);
}
- /**
- * Returns the Settings Navigation
- *
- * @return string[]
- *
- * This function returns an array containing all settings pages added. The
- * entries are sorted by the key 'order' ascending.
- */
- public static function getSettingsNavigation() {
- $l = \OC::$server->getL10N('lib');
- $urlGenerator = \OC::$server->getURLGenerator();
-
- $settings = array();
- // by default, settings only contain the help menu
- if (\OC::$server->getSystemConfig()->getValue('knowledgebaseenabled', true)) {
- $settings = array(
- array(
- "id" => "help",
- "order" => 4,
- "href" => $urlGenerator->linkToRoute('settings_help'),
- "name" => $l->t("Help"),
- "icon" => $urlGenerator->imagePath("settings", "help.svg")
- )
- );
- }
-
- // if the user is logged-in
- if (\OC::$server->getUserSession()->isLoggedIn()) {
- // personal menu
- $settings[] = array(
- "id" => "personal",
- "order" => 1,
- "href" => $urlGenerator->linkToRoute('settings_personal'),
- "name" => $l->t("Personal"),
- "icon" => $urlGenerator->imagePath("settings", "personal.svg")
- );
-
- //SubAdmins are also allowed to access user management
- $userObject = \OC::$server->getUserSession()->getUser();
- $isSubAdmin = false;
- if($userObject !== null) {
- $isSubAdmin = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdmin($userObject);
- }
- if ($isSubAdmin) {
- // admin users menu
- $settings[] = array(
- "id" => "core_users",
- "order" => 3,
- "href" => $urlGenerator->linkToRoute('settings_users'),
- "name" => $l->t("Users"),
- "icon" => $urlGenerator->imagePath("settings", "users.svg")
- );
- }
-
- // if the user is an admin
- if (OC_User::isAdminUser(OC_User::getUser())) {
- // admin settings
- $settings[] = array(
- "id" => "admin",
- "order" => 2,
- "href" => $urlGenerator->linkToRoute('settings.AdminSettings.index'),
- "name" => $l->t("Admin"),
- "icon" => $urlGenerator->imagePath("settings", "admin.svg")
- );
- }
- }
-
- $navigation = self::proceedNavigation($settings);
- return $navigation;
- }
-
// This is private as well. It simply works, so don't ask for more details
private static function proceedNavigation($list) {
- $headerIconCount = 8;
- if(OC_User::isAdminUser(OC_User::getUser())) {
- $headerIconCount--;
- }
usort($list, function($a, $b) {
if (isset($a['order']) && isset($b['order'])) {
return ($a['order'] < $b['order']) ? -1 : 1;
@@ -544,63 +468,16 @@ class OC_App {
}
});
- $activeAppIndex = -1;
$activeApp = OC::$server->getNavigationManager()->getActiveEntry();
foreach ($list as $index => &$navEntry) {
if ($navEntry['id'] == $activeApp) {
$navEntry['active'] = true;
- $activeAppIndex = $index;
} else {
$navEntry['active'] = false;
}
}
unset($navEntry);
- if($activeAppIndex > ($headerIconCount-1)) {
- $active = $list[$activeAppIndex];
- $lastInHeader = $list[$headerIconCount-1];
- $list[$headerIconCount-1] = $active;
- $list[$activeAppIndex] = $lastInHeader;
- }
-
- foreach ($list as $index => &$navEntry) {
- $navEntry['showInHeader'] = false;
- if($index < $headerIconCount) {
- $navEntry['showInHeader'] = true;
- }
- }
-
-
-
- return $list;
- }
-
- public static function proceedAppNavigation($entries) {
- $headerIconCount = 8;
- if(OC_User::isAdminUser(OC_User::getUser())) {
- $headerIconCount--;
- }
- $activeAppIndex = -1;
- $list = self::proceedNavigation($entries);
-
- $activeApp = OC::$server->getNavigationManager()->getActiveEntry();
- foreach ($list as $index => &$navEntry) {
- if ($navEntry['id'] == $activeApp) {
- $navEntry['active'] = true;
- $activeAppIndex = $index;
- } else {
- $navEntry['active'] = false;
- }
- }
- // move active item to last position
- if($activeAppIndex > ($headerIconCount-1)) {
- $active = $list[$activeAppIndex];
- $lastInHeader = $list[$headerIconCount-1];
- $list[$headerIconCount-1] = $active;
- $list[$activeAppIndex] = $lastInHeader;
- }
- $list = array_slice($list, 0, $headerIconCount);
-
return $list;
}
@@ -789,24 +666,20 @@ class OC_App {
*/
public static function getNavigation() {
$entries = OC::$server->getNavigationManager()->getAll();
- $navigation = self::proceedNavigation($entries);
- return $navigation;
+ return self::proceedNavigation($entries);
}
/**
- * Returns the navigation inside the header bar
+ * Returns the Settings Navigation
*
- * @return array
+ * @return string[]
*
- * This function returns an array containing all entries added. The
- * entries are sorted by the key 'order' ascending. Additional to the keys
- * given for each app the following keys exist:
- * - active: boolean, signals if the user is on this navigation entry
+ * This function returns an array containing all settings pages added. The
+ * entries are sorted by the key 'order' ascending.
*/
- public static function getHeaderNavigation() {
- $entries = OC::$server->getNavigationManager()->getAll();
- $navigation = self::proceedAppNavigation($entries);
- return $navigation;
+ public static function getSettingsNavigation() {
+ $entries = OC::$server->getNavigationManager()->getAll('settings');
+ return self::proceedNavigation($entries);
}
/**
diff --git a/lib/private/legacy/defaults.php b/lib/private/legacy/defaults.php
index ea41d80076e..7835707b19d 100644
--- a/lib/private/legacy/defaults.php
+++ b/lib/private/legacy/defaults.php
@@ -46,7 +46,8 @@ class OC_Defaults {
private $defaultDocVersion;
private $defaultSlogan;
private $defaultLogoClaim;
- private $defaultMailHeaderColor;
+ private $defaultColorPrimary;
+ private $defaultLogoUrl;
function __construct() {
$this->l = \OC::$server->getL10N('lib');
@@ -63,7 +64,9 @@ class OC_Defaults {
$this->defaultDocVersion = '11'; // used to generate doc links
$this->defaultSlogan = $this->l->t('a safe home for all your data');
$this->defaultLogoClaim = '';
- $this->defaultMailHeaderColor = '#0082c9'; /* header color of mail notifications */
+ $this->defaultColorPrimary = '#0082c9';
+ $this->defaultLogoUrl = \OC::$server->getURLGenerator()->imagePath('core','logo.svg');
+ $this->defaultLogoUrl .= '?v=' . hash('sha1', implode('.', \OCP\Util::getVersion()));
$themePath = OC::$SERVERROOT . '/themes/' . OC_Util::getTheme() . '/defaults.php';
if (file_exists($themePath)) {
@@ -263,6 +266,7 @@ class OC_Defaults {
/**
* @param string $key
+ * @return string URL to doc with key
*/
public function buildDocLinkToKey($key) {
if ($this->themeExist('buildDocLinkToKey')) {
@@ -272,18 +276,44 @@ class OC_Defaults {
}
/**
- * Returns mail header color
+ * Returns primary color
* @return string
*/
- public function getMailHeaderColor() {
+ public function getColorPrimary() {
+
+ if ($this->themeExist('getColorPrimary')) {
+ return $this->theme->getColorPrimary();
+ }
if ($this->themeExist('getMailHeaderColor')) {
return $this->theme->getMailHeaderColor();
- } else {
- return $this->defaultMailHeaderColor;
}
+ return $this->defaultColorPrimary;
+ }
+
+ /**
+ * @return array scss variables to overwrite
+ */
+ public function getScssVariables() {
+ if($this->themeExist('getScssVariables')) {
+ return $this->theme->getScssVariables();
+ }
+ return [];
}
public function shouldReplaceIcons() {
return false;
}
+
+ /**
+ * Themed logo url
+ *
+ * @return string
+ */
+ public function getLogo() {
+ if ($this->themeExist('getLogo')) {
+ return $this->theme->getLogo();
+ }
+
+ return $this->defaultLogoUrl;
+ }
}
diff --git a/lib/private/legacy/response.php b/lib/private/legacy/response.php
index 69c84e2df68..fa73f3d6d0d 100644
--- a/lib/private/legacy/response.php
+++ b/lib/private/legacy/response.php
@@ -253,15 +253,17 @@ class OC_Response {
. 'img-src * data: blob:; '
. 'font-src \'self\' data:; '
. 'media-src *; '
- . 'connect-src *';
+ . 'connect-src *; '
+ . 'object-src \'none\'; '
+ . 'base-uri \'self\'; ';
header('Content-Security-Policy:' . $policy);
+ header('X-Frame-Options: SAMEORIGIN'); // Disallow iFraming from other domains
// Send fallback headers for installations that don't have the possibility to send
// custom headers on the webserver side
if(getenv('modHeadersAvailable') !== 'true') {
header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
header('X-Content-Type-Options: nosniff'); // Disable sniffing the content type for IE
- header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains
header('X-Robots-Tag: none'); // https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag
header('X-Download-Options: noopen'); // https://msdn.microsoft.com/en-us/library/jj542450(v=vs.85).aspx
header('X-Permitted-Cross-Domain-Policies: none'); // https://www.adobe.com/devnet/adobe-media-server/articles/cross-domain-xml-for-streaming.html
diff --git a/lib/private/legacy/template.php b/lib/private/legacy/template.php
index 969f5174278..9a919ff12f2 100644
--- a/lib/private/legacy/template.php
+++ b/lib/private/legacy/template.php
@@ -79,7 +79,8 @@ class OC_Template extends \OC\Template\Base {
$parts = explode('/', $app); // fix translation when app is something like core/lostpassword
$l10n = \OC::$server->getL10N($parts[0]);
- $themeDefaults = \OC::$server->getThemingDefaults();
+ /** @var \OCP\Defaults $themeDefaults */
+ $themeDefaults = \OC::$server->query(\OCP\Defaults::class);
list($path, $template) = $this->findTemplate($theme, $app, $name);
@@ -117,6 +118,7 @@ class OC_Template extends \OC\Template\Base {
OC_Util::addScript('jquery-ui-fixes');
OC_Util::addScript('files/fileinfo');
OC_Util::addScript('files/client');
+ OC_Util::addScript('contactsmenu');
if (\OC::$server->getConfig()->getSystemValue('debug')) {
// Add the stuff we need always
diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php
index 7f351c5b00e..9516a67af48 100644
--- a/lib/private/legacy/util.php
+++ b/lib/private/legacy/util.php
@@ -651,7 +651,7 @@ class OC_Util {
$webServerRestart = false;
$setup = new \OC\Setup($config, \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'),
- \OC::$server->getThemingDefaults(), \OC::$server->getLogger(), \OC::$server->getSecureRandom());
+ \OC::$server->query(\OCP\Defaults::class), \OC::$server->getLogger(), \OC::$server->getSecureRandom());
$urlGenerator = \OC::$server->getURLGenerator();
@@ -698,22 +698,22 @@ class OC_Util {
if ($success) {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} else {
- $errors[] = array(
- 'error' => $l->t('Cannot create "data" directory (%s)', array($CONFIG_DATADIRECTORY)),
+ $errors[] = [
+ 'error' => $l->t('Cannot create "data" directory'),
'hint' => $l->t('This can usually be fixed by '
. '<a href="%s" target="_blank" rel="noreferrer">giving the webserver write access to the root directory</a>.',
- array($urlGenerator->linkToDocs('admin-dir_permissions')))
- );
+ [$urlGenerator->linkToDocs('admin-dir_permissions')])
+ ];
}
} 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="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank" rel="noreferrer">', '</a>'));
- $errors[] = array(
- 'error' => 'Data directory (' . $CONFIG_DATADIRECTORY . ') not writable',
+ ['<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank" rel="noreferrer">', '</a>']);
+ $errors[] = [
+ 'error' => 'Your data directory is not writable',
'hint' => $permissionsHint
- );
+ ];
} else {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
}
@@ -923,15 +923,15 @@ class OC_Util {
$permissionsModHint = $l->t('Please change the permissions to 0770 so that the directory'
. ' cannot be listed by other users.');
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
- if (substr($perms, -1) != '0') {
+ if (substr($perms, -1) !== '0') {
chmod($dataDirectory, 0770);
clearstatcache();
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
- if (substr($perms, 2, 1) != '0') {
- $errors[] = array(
- 'error' => $l->t('Data directory (%s) is readable by other users', array($dataDirectory)),
+ if ($perms[2] !== '0') {
+ $errors[] = [
+ 'error' => $l->t('Your data directory is readable by other users'),
'hint' => $permissionsModHint
- );
+ ];
}
}
return $errors;
@@ -949,13 +949,13 @@ class OC_Util {
$errors = [];
if ($dataDirectory[0] !== '/') {
$errors[] = [
- 'error' => $l->t('Data directory (%s) must be an absolute path', [$dataDirectory]),
+ 'error' => $l->t('Your data directory must be an absolute path'),
'hint' => $l->t('Check the value of "datadirectory" in your configuration')
];
}
if (!file_exists($dataDirectory . '/.ocdata')) {
$errors[] = [
- 'error' => $l->t('Data directory (%s) is invalid', [$dataDirectory]),
+ 'error' => $l->t('Your data directory is invalid'),
'hint' => $l->t('Please check that the data directory contains a file' .
' ".ocdata" in its root.')
];
@@ -981,9 +981,9 @@ class OC_Util {
);
exit();
}
- // Redirect to index page if 2FA challenge was not solved yet
+ // Redirect to 2FA challenge selection if 2FA challenge was not solved yet
if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor(\OC::$server->getUserSession()->getUser())) {
- header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php'));
+ header('Location: ' . \OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.selectChallenge'));
exit();
}
}
diff --git a/lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php b/lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php
index c53b5b2146c..64d4eb6e5d0 100644
--- a/lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php
+++ b/lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php
@@ -22,8 +22,6 @@
namespace OCP\AppFramework\Http;
-use OCP\AppFramework\Http;
-
/**
* Class EmptyContentSecurityPolicy is a simple helper which allows applications
* to modify the Content-Security-Policy sent by ownCloud. Per default the policy
@@ -336,6 +334,7 @@ class EmptyContentSecurityPolicy {
public function buildPolicy() {
$policy = "default-src 'none';";
$policy .= "base-uri 'none';";
+ $policy .= "manifest-src 'self';";
if(!empty($this->allowedScriptDomains) || $this->inlineScriptAllowed || $this->evalScriptAllowed) {
$policy .= 'script-src ';
diff --git a/lib/public/AppFramework/Http/NotFoundResponse.php b/lib/public/AppFramework/Http/NotFoundResponse.php
index 26338623efe..7f068a4c413 100644
--- a/lib/public/AppFramework/Http/NotFoundResponse.php
+++ b/lib/public/AppFramework/Http/NotFoundResponse.php
@@ -23,7 +23,6 @@
namespace OCP\AppFramework\Http;
-use OCP\AppFramework\Http;
use OCP\Template;
/**
diff --git a/lib/public/AppFramework/Http/RedirectResponse.php b/lib/public/AppFramework/Http/RedirectResponse.php
index adda83c7cfa..0ce3a64cb38 100644
--- a/lib/public/AppFramework/Http/RedirectResponse.php
+++ b/lib/public/AppFramework/Http/RedirectResponse.php
@@ -26,7 +26,6 @@
namespace OCP\AppFramework\Http;
-use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http;
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 051e68f3144..087522386be 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -81,6 +81,8 @@ class Response {
/** @var ContentSecurityPolicy|null Used Content-Security-Policy */
private $contentSecurityPolicy = null;
+ /** @var bool */
+ private $throttled = false;
/**
* Caches the response
@@ -322,5 +324,22 @@ class Response {
return $this;
}
+ /**
+ * Marks the response as to throttle. Will be throttled when the
+ * @BruteForceProtection annotation is added.
+ *
+ * @since 12.0.0
+ */
+ public function throttle() {
+ $this->throttled = true;
+ }
+ /**
+ * Whether the current response is throttled.
+ *
+ * @since 12.0.0
+ */
+ public function isThrottled() {
+ return $this->throttled;
+ }
}
diff --git a/lib/public/AppFramework/IAppContainer.php b/lib/public/AppFramework/IAppContainer.php
index 2fa049d6e85..f26afbdcd17 100644
--- a/lib/public/AppFramework/IAppContainer.php
+++ b/lib/public/AppFramework/IAppContainer.php
@@ -26,7 +26,6 @@
namespace OCP\AppFramework;
-use OCP\AppFramework\IApi;
use OCP\IContainer;
/**
diff --git a/lib/public/AppFramework/Middleware.php b/lib/public/AppFramework/Middleware.php
index 75cd3beea02..677e5c2e7ee 100644
--- a/lib/public/AppFramework/Middleware.php
+++ b/lib/public/AppFramework/Middleware.php
@@ -30,7 +30,6 @@
namespace OCP\AppFramework;
-use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Response;
diff --git a/lib/public/AppFramework/OCSController.php b/lib/public/AppFramework/OCSController.php
index 700d9ea1a22..06d0d90f3e1 100644
--- a/lib/public/AppFramework/OCSController.php
+++ b/lib/public/AppFramework/OCSController.php
@@ -31,7 +31,6 @@
namespace OCP\AppFramework;
use OCP\AppFramework\Http\DataResponse;
-use OCP\AppFramework\Http\OCSResponse;
use OCP\AppFramework\Http\Response;
use OCP\IRequest;
diff --git a/lib/public/Comments/ICommentsManager.php b/lib/public/Comments/ICommentsManager.php
index b43d5e8800b..f088ad9f70d 100644
--- a/lib/public/Comments/ICommentsManager.php
+++ b/lib/public/Comments/ICommentsManager.php
@@ -23,6 +23,8 @@
*/
namespace OCP\Comments;
+use OCP\IUser;
+
/**
* Interface ICommentsManager
*
@@ -126,6 +128,16 @@ interface ICommentsManager {
public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $notOlderThan = null);
/**
+ * Get the number of unread comments for all files in a folder
+ *
+ * @param int $folderId
+ * @param IUser $user
+ * @return array [$fileId => $unreadCount]
+ * @since 12.0.0
+ */
+ public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user);
+
+ /**
* creates a new comment and returns it. At this point of time, it is not
* saved in the used data storage. Use save() after setting other fields
* of the comment (e.g. message or verb).
diff --git a/lib/public/Contacts/ContactsMenu/IAction.php b/lib/public/Contacts/ContactsMenu/IAction.php
new file mode 100644
index 00000000000..44ad1af5ae8
--- /dev/null
+++ b/lib/public/Contacts/ContactsMenu/IAction.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Contacts\ContactsMenu;
+
+use JsonSerializable;
+
+/**
+ * Apps should use the IActionFactory to create new action objects
+ *
+ * @since 12.0
+ */
+interface IAction extends JsonSerializable {
+
+ /**
+ * @param string $icon absolute URI to an icon
+ * @since 12.0
+ */
+ public function setIcon($icon);
+
+ /**
+ * @return string localized action name, e.g. 'Call'
+ * @since 12.0
+ */
+ public function getName();
+
+ /**
+ * @param string $name localized action name, e.g. 'Call'
+ * @since 12.0
+ */
+ public function setName($name);
+
+ /**
+ * @param int $priority priorize actions, high order ones are shown on top
+ * @since 12.0
+ */
+ public function setPriority($priority);
+
+ /**
+ * @return int priority to priorize actions, high order ones are shown on top
+ * @since 12.0
+ */
+ public function getPriority();
+}
diff --git a/lib/public/Contacts/ContactsMenu/IActionFactory.php b/lib/public/Contacts/ContactsMenu/IActionFactory.php
new file mode 100644
index 00000000000..8778a729a56
--- /dev/null
+++ b/lib/public/Contacts/ContactsMenu/IActionFactory.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Contacts\ContactsMenu;
+
+/**
+ * @since 12.0
+ */
+interface IActionFactory {
+
+ /**
+ * Construct and return a new link action for the contacts menu
+ *
+ * @since 12.0
+ *
+ * @param string $icon full path to the action's icon
+ * @param string $name localized name of the action
+ * @param string $href target URL
+ * @return ILinkAction
+ */
+ public function newLinkAction($icon, $name, $href);
+
+ /**
+ * Construct and return a new email action for the contacts menu
+ *
+ * @since 12.0
+ *
+ * @param string $icon full path to the action's icon
+ * @param string $name localized name of the action
+ * @param string $email target e-mail address
+ * @return ILinkAction
+ */
+ public function newEMailAction($icon, $name, $email);
+}
diff --git a/lib/public/Contacts/ContactsMenu/IEntry.php b/lib/public/Contacts/ContactsMenu/IEntry.php
new file mode 100644
index 00000000000..eb04147a1bc
--- /dev/null
+++ b/lib/public/Contacts/ContactsMenu/IEntry.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Contacts\ContactsMenu;
+
+use JsonSerializable;
+
+/**
+ * @since 12.0
+ */
+interface IEntry extends JsonSerializable {
+
+ /**
+ * @since 12.0
+ * @return string
+ */
+ public function getFullName();
+
+ /**
+ * @since 12.0
+ * @return string[]
+ */
+ public function getEMailAddresses();
+
+ /**
+ * @since 12.0
+ * @return string|null image URI
+ */
+ public function getAvatar();
+
+ /**
+ * @since 12.0
+ * @param IAction $action an action to show in the contacts menu
+ */
+ public function addAction(IAction $action);
+
+ /**
+ * Get an arbitrary property from the contact
+ *
+ * @since 12.0
+ * @param string $key
+ * @return mixed the value of the property or null
+ */
+ public function getProperty($key);
+}
diff --git a/lib/public/Contacts/ContactsMenu/ILinkAction.php b/lib/public/Contacts/ContactsMenu/ILinkAction.php
new file mode 100644
index 00000000000..4e29f757c26
--- /dev/null
+++ b/lib/public/Contacts/ContactsMenu/ILinkAction.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Contacts\ContactsMenu;
+
+/**
+ * @since 12.0
+ */
+interface ILinkAction extends IAction {
+
+ /**
+ * @since 12.0
+ * @param string $href the target URL of the action
+ */
+ public function setHref($href);
+
+ /**
+ * @since 12.0
+ * @return string
+ */
+ public function getHref();
+}
diff --git a/lib/public/Contacts/ContactsMenu/IProvider.php b/lib/public/Contacts/ContactsMenu/IProvider.php
new file mode 100644
index 00000000000..e41b1c7c639
--- /dev/null
+++ b/lib/public/Contacts/ContactsMenu/IProvider.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Contacts\ContactsMenu;
+
+/**
+ * @since 12.0
+ */
+interface IProvider {
+
+ /**
+ * @since 12.0
+ * @param IEntry $entry
+ * @return void
+ */
+ public function process(IEntry $entry);
+}
diff --git a/lib/public/DB/QueryBuilder/IFunctionBuilder.php b/lib/public/DB/QueryBuilder/IFunctionBuilder.php
new file mode 100644
index 00000000000..38d3a67da9b
--- /dev/null
+++ b/lib/public/DB/QueryBuilder/IFunctionBuilder.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\DB\QueryBuilder;
+
+/**
+ * This class provides a builder for sql some functions
+ *
+ * @since 12.0.0
+ */
+interface IFunctionBuilder {
+ /**
+ * Calculates the MD5 hash of a given input
+ *
+ * @param mixed $input The input to be hashed
+ *
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function md5($input);
+
+ /**
+ * Combines two input strings
+ *
+ * @param mixed $x The first input string
+ * @param mixed $y The seccond input string
+ *
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function concat($x, $y);
+
+ /**
+ * Takes a substring from the input string
+ *
+ * @param mixed $input The input string
+ * @param mixed $start The start of the substring, note that counting starts at 1
+ * @param mixed $length The length of the substring
+ *
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function substring($input, $start, $length = null);
+
+ /**
+ * Takes the sum of all rows in a column
+ *
+ * @param mixed $field the column to sum
+ *
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function sum($field);
+}
diff --git a/lib/public/DB/QueryBuilder/IQueryBuilder.php b/lib/public/DB/QueryBuilder/IQueryBuilder.php
index 8ef8a96b25f..a176bb917a3 100644
--- a/lib/public/DB/QueryBuilder/IQueryBuilder.php
+++ b/lib/public/DB/QueryBuilder/IQueryBuilder.php
@@ -95,6 +95,25 @@ interface IQueryBuilder {
public function expr();
/**
+ * Gets an FunctionBuilder used for object-oriented construction of query functions.
+ * This producer method is intended for convenient inline usage. Example:
+ *
+ * <code>
+ * $qb = $conn->getQueryBuilder()
+ * ->select('u')
+ * ->from('users', 'u')
+ * ->where($qb->fun()->md5('u.id'));
+ * </code>
+ *
+ * For more complex function construction, consider storing the function
+ * builder object in a local variable.
+ *
+ * @return \OCP\DB\QueryBuilder\IFunctionBuilder
+ * @since 12.0.0
+ */
+ public function func();
+
+ /**
* Gets the type of the currently built query.
*
* @return integer
diff --git a/lib/public/Defaults.php b/lib/public/Defaults.php
index ae873831b8b..dbde78bce68 100644
--- a/lib/public/Defaults.php
+++ b/lib/public/Defaults.php
@@ -42,7 +42,6 @@ class Defaults {
/**
* \OC_Defaults instance to retrieve the defaults
- * @return string
* @since 6.0.0
*/
private $defaults;
@@ -52,8 +51,11 @@ class Defaults {
* actual defaults
* @since 6.0.0
*/
- function __construct() {
- $this->defaults = \OC::$server->getThemingDefaults();
+ public function __construct(\OC_Defaults $defaults = null) {
+ if ($defaults === null) {
+ $defaults = \OC::$server->getThemingDefaults();
+ }
+ $this->defaults = $defaults;
}
/**
@@ -172,4 +174,41 @@ class Defaults {
public function getiTunesAppId() {
return $this->defaults->getiTunesAppId();
}
+
+ /**
+ * Themed logo url
+ *
+ * @return string
+ * @since 12.0.0
+ */
+ public function getLogo() {
+ return $this->defaults->getLogo();
+ }
+
+ /**
+ * Returns primary color
+ * @return string
+ * @since 12.0.0
+ */
+ public function getColorPrimary() {
+ return $this->defaults->getColorPrimary();
+ }
+
+ /**
+ * @param string $key
+ * @return string URL to doc with key
+ * @since 12.0.0
+ */
+ public function buildDocLinkToKey($key) {
+ return $this->defaults->buildDocLinkToKey($key);
+ }
+
+ /**
+ * Returns the title
+ * @return string title
+ * @since 12.0.0
+ */
+ public function getTitle() {
+ return $this->defaults->getTitle();
+ }
}
diff --git a/lib/public/Files/Cache/ICache.php b/lib/public/Files/Cache/ICache.php
index 63993d0a8cb..3207356cb76 100644
--- a/lib/public/Files/Cache/ICache.php
+++ b/lib/public/Files/Cache/ICache.php
@@ -21,7 +21,6 @@
*/
namespace OCP\Files\Cache;
-use OCP\Files\Search\ISearchOperator;
use OCP\Files\Search\ISearchQuery;
/**
diff --git a/lib/public/Files/Config/IMountProviderCollection.php b/lib/public/Files/Config/IMountProviderCollection.php
index f0f5bf4be25..93701c326b2 100644
--- a/lib/public/Files/Config/IMountProviderCollection.php
+++ b/lib/public/Files/Config/IMountProviderCollection.php
@@ -23,7 +23,6 @@
namespace OCP\Files\Config;
-use OCP\Files\Mount\IMountPoint;
use OCP\IUser;
/**
diff --git a/lib/public/Files/Config/IUserMountCache.php b/lib/public/Files/Config/IUserMountCache.php
index c141d019c2f..cf30d8fb431 100644
--- a/lib/public/Files/Config/IUserMountCache.php
+++ b/lib/public/Files/Config/IUserMountCache.php
@@ -53,10 +53,11 @@ interface IUserMountCache {
* Get all cached mounts by storage
*
* @param int $numericStorageId
+ * @param string|null $user limit the results to a single user @since 12.0.0
* @return ICachedMountInfo[]
* @since 9.0.0
*/
- public function getMountsForStorageId($numericStorageId);
+ public function getMountsForStorageId($numericStorageId, $user = null);
/**
* Get all cached mounts by root
@@ -71,10 +72,11 @@ interface IUserMountCache {
* Get all cached mounts that contain a file
*
* @param int $fileId
+ * @param string|null $user optionally restrict the results to a single user @since 12.0.0
* @return ICachedMountInfo[]
* @since 9.0.0
*/
- public function getMountsForFileId($fileId);
+ public function getMountsForFileId($fileId, $user = null);
/**
* Remove all cached mounts for a user
diff --git a/lib/public/L10N/IFactory.php b/lib/public/L10N/IFactory.php
index 0d6e583c7e5..b5f93c2389c 100644
--- a/lib/public/L10N/IFactory.php
+++ b/lib/public/L10N/IFactory.php
@@ -62,14 +62,6 @@ interface IFactory {
public function languageExists($app, $lang);
/**
- * @param string|null $app App id or null for core
- * @return string
- * @since 9.0.0
- */
- public function setLanguageFromRequest($app = null);
-
-
- /**
* Creates a function from the plural string
*
* @param string $string
diff --git a/lib/public/Mail/IEMailTemplate.php b/lib/public/Mail/IEMailTemplate.php
new file mode 100644
index 00000000000..05e2fe92beb
--- /dev/null
+++ b/lib/public/Mail/IEMailTemplate.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * @copyright 2017, Morris Jobke <hey@morrisjobke.de>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Mail;
+
+/**
+ * Interface IEMailTemplate
+ *
+ * Interface to a class that allows to build HTML emails
+ *
+ * Example:
+ *
+ * <?php
+ *
+ * $emailTemplate = new EMailTemplate($this->defaults, $this->urlGenerator, $this->l10n);
+ *
+ * $emailTemplate->addHeader();
+ * $emailTemplate->addHeading('Welcome aboard');
+ * $emailTemplate->addBodyText('You have now an Nextcloud account, you can add, protect, and share your data.');
+ *
+ * $emailTemplate->addBodyButtonGroup(
+ * 'Set your password', 'https://example.org/resetPassword/q1234567890qwertz',
+ * 'Install Client', 'https://nextcloud.com/install/#install-clients'
+ * );
+ *
+ * $emailTemplate->addFooter('Optional footer text');
+ *
+ * $htmlContent = $emailTemplate->renderHtml();
+ * $plainContent = $emailTemplate->renderText();
+ *
+ * @since 12.0.0
+ */
+interface IEMailTemplate {
+ /**
+ * Adds a header to the email
+ *
+ * @since 12.0.0
+ */
+ public function addHeader();
+
+ /**
+ * Adds a heading to the email
+ *
+ * @param string $title
+ * @param string $plainTitle|bool Title that is used in the plain text email
+ * if empty the $title is used, if false none will be used
+ *
+ * @since 12.0.0
+ */
+ public function addHeading($title, $plainTitle = '');
+
+ /**
+ * Adds a paragraph to the body of the email
+ *
+ * @param string $text
+ * @param string|bool $plainText Text that is used in the plain text email
+ * if empty the $text is used, if false none will be used
+ *
+ * @since 12.0.0
+ */
+ public function addBodyText($text, $plainText = '');
+
+ /**
+ * Adds a button group of two buttons to the body of the email
+ *
+ * @param string $textLeft Text of left button
+ * @param string $urlLeft URL of left button
+ * @param string $textRight Text of right button
+ * @param string $urlRight URL of right button
+ * @param string $plainTextLeft Text of left button that is used in the plain text version - if empty the $textLeft is used
+ * @param string $plainTextRight Text of right button that is used in the plain text version - if empty the $textRight is used
+ *
+ * @since 12.0.0
+ */
+ public function addBodyButtonGroup($textLeft, $urlLeft, $textRight, $urlRight, $plainTextLeft = '', $plainTextRight = '');
+
+ /**
+ * Adds a button to the body of the email
+ *
+ * @param string $text Text of button
+ * @param string $url URL of button
+ * @param string $plainText Text of button in plain text version
+ * if empty the $text is used, if false none will be used
+ *
+ * @since 12.0.0
+ */
+ public function addBodyButton($text, $url, $plainText = '');
+
+ /**
+ * Adds a logo and a text to the footer. <br> in the text will be replaced by new lines in the plain text email
+ *
+ * @param string $text If the text is empty the default "Name - Slogan<br>This is an automatically sent email" will be used
+ *
+ * @since 12.0.0
+ */
+ public function addFooter($text = '');
+
+ /**
+ * Returns the rendered HTML email as string
+ *
+ * @return string
+ *
+ * @since 12.0.0
+ */
+ public function renderHtml();
+
+ /**
+ * Returns the rendered plain text email as string
+ *
+ * @return string
+ *
+ * @since 12.0.0
+ */
+ public function renderText();
+}
diff --git a/lib/public/Mail/IMailer.php b/lib/public/Mail/IMailer.php
index 9ecebd2ee40..af16a8a239a 100644
--- a/lib/public/Mail/IMailer.php
+++ b/lib/public/Mail/IMailer.php
@@ -55,6 +55,14 @@ interface IMailer {
public function createMessage();
/**
+ * Creates a new email template object
+ *
+ * @return IEMailTemplate
+ * @since 12.0.0
+ */
+ public function createEMailTemplate();
+
+ /**
* Send the specified message. Also sets the from address to the value defined in config.php
* if no-one has been passed.
*
diff --git a/lib/public/OCS/IDiscoveryService.php b/lib/public/OCS/IDiscoveryService.php
new file mode 100644
index 00000000000..eee5bf97f93
--- /dev/null
+++ b/lib/public/OCS/IDiscoveryService.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\OCS;
+
+/**
+ * Interface IDiscoveryService
+ *
+ * Allows you to discover OCS end-points on a remote server
+ *
+ * @package OCP\OCS
+ * @since 12.0.0
+ */
+interface IDiscoveryService {
+
+ /**
+ * Discover OCS end-points
+ *
+ * If no valid discovery data is found the defaults are returned
+ *
+ * @since 12.0.0
+ *
+ * @param string $remote
+ * @param string $service the service you want to discover
+ * @return array
+ */
+ public function discover($remote, $service);
+
+}
diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php
index a15020bbd69..31f04803066 100644
--- a/lib/public/Share/IManager.php
+++ b/lib/public/Share/IManager.php
@@ -192,6 +192,53 @@ interface IManager {
public function userDeletedFromGroup($uid, $gid);
/**
+ * Get access list to a path. This means
+ * all the users that can access a given path.
+ *
+ * Consider:
+ * -root
+ * |-folder1 (23)
+ * |-folder2 (32)
+ * |-fileA (42)
+ *
+ * fileA is shared with user1 and user1@server1
+ * folder2 is shared with group2 (user4 is a member of group2)
+ * folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
+ *
+ * Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
+ * [
+ * users => [
+ * 'user1' => ['node_id' => 42, 'node_path' => '/fileA'],
+ * 'user4' => ['node_id' => 32, 'node_path' => '/folder2'],
+ * 'user2' => ['node_id' => 23, 'node_path' => '/folder (1)'],
+ * ],
+ * remote => [
+ * 'user1@server1' => ['node_id' => 42, 'token' => 'SeCr3t'],
+ * 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
+ * ],
+ * public => bool
+ * mail => bool
+ * ]
+ *
+ * The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
+ * [
+ * users => ['user1', 'user2', 'user4'],
+ * remote => bool,
+ * public => bool
+ * mail => bool
+ * ]
+ *
+ * This is required for encryption/activity
+ *
+ * @param \OCP\Files\Node $path
+ * @param bool $recursive Should we check all parent folders as well
+ * @param bool $currentAccess Should the user have currently access to the file
+ * @return array
+ * @since 12
+ */
+ public function getAccessList(\OCP\Files\Node $path, $recursive = true, $currentAccess = false);
+
+ /**
* Instantiates a new share object. This is to be passed to
* createShare.
*
diff --git a/lib/public/Share/IShare.php b/lib/public/Share/IShare.php
index 5b552b51c3c..8deec573c1b 100644
--- a/lib/public/Share/IShare.php
+++ b/lib/public/Share/IShare.php
@@ -189,7 +189,7 @@ interface IShare {
/**
* Set the expiration date
*
- * @param \DateTime $expireDate
+ * @param null|\DateTime $expireDate
* @return \OCP\Share\IShare The modified object
* @since 9.0.0
*/
diff --git a/lib/public/Share/IShareHelper.php b/lib/public/Share/IShareHelper.php
new file mode 100644
index 00000000000..4ec62830c52
--- /dev/null
+++ b/lib/public/Share/IShareHelper.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\Share;
+
+use OCP\Files\Node;
+
+/**
+ * Interface IShareHelper
+ *
+ * @package OCP\Share
+ * @since 12
+ */
+interface IShareHelper {
+
+ /**
+ * @param Node $node
+ * @return array [ users => [Mapping $uid => $pathForUser], remotes => [Mapping $cloudId => $pathToMountRoot]]
+ * @since 12
+ */
+ public function getPathsForAccessList(Node $node);
+}
diff --git a/lib/public/Share/IShareProvider.php b/lib/public/Share/IShareProvider.php
index 6257c97eb77..31808206cf6 100644
--- a/lib/public/Share/IShareProvider.php
+++ b/lib/public/Share/IShareProvider.php
@@ -190,4 +190,16 @@ interface IShareProvider {
* @since 9.1.0
*/
public function userDeletedFromGroup($uid, $gid);
+
+ /**
+ * Get the access list to the array of provided nodes.
+ *
+ * @see IManager::getAccessList() for sample docs
+ *
+ * @param Node[] $nodes The list of nodes to get access for
+ * @param bool $currentAccess If current access is required (like for removed shares that might get revived later)
+ * @return array
+ * @since 12
+ */
+ public function getAccessList($nodes, $currentAccess);
}
diff --git a/lib/public/SystemTag/ISystemTagManager.php b/lib/public/SystemTag/ISystemTagManager.php
index bdfa19286f0..fff0a439116 100644
--- a/lib/public/SystemTag/ISystemTagManager.php
+++ b/lib/public/SystemTag/ISystemTagManager.php
@@ -24,7 +24,6 @@
namespace OCP\SystemTag;
use OCP\IUser;
-use OCP\SystemTag\ISystemTag;
/**
* Public interface to access and manage system-wide tags.