summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/composer/composer/autoload_classmap.php10
-rw-r--r--lib/composer/composer/autoload_static.php10
-rw-r--r--lib/l10n/ar.js2
-rw-r--r--lib/l10n/ar.json2
-rw-r--r--lib/l10n/ast.js6
-rw-r--r--lib/l10n/ast.json6
-rw-r--r--lib/l10n/bg.js6
-rw-r--r--lib/l10n/bg.json6
-rw-r--r--lib/l10n/ca.js6
-rw-r--r--lib/l10n/ca.json6
-rw-r--r--lib/l10n/cs.js6
-rw-r--r--lib/l10n/cs.json6
-rw-r--r--lib/l10n/de.js6
-rw-r--r--lib/l10n/de.json6
-rw-r--r--lib/l10n/de_DE.js6
-rw-r--r--lib/l10n/de_DE.json6
-rw-r--r--lib/l10n/el.js9
-rw-r--r--lib/l10n/el.json9
-rw-r--r--lib/l10n/en_GB.js6
-rw-r--r--lib/l10n/en_GB.json6
-rw-r--r--lib/l10n/eo.js38
-rw-r--r--lib/l10n/eo.json38
-rw-r--r--lib/l10n/es.js6
-rw-r--r--lib/l10n/es.json6
-rw-r--r--lib/l10n/es_419.js6
-rw-r--r--lib/l10n/es_419.json6
-rw-r--r--lib/l10n/es_AR.js8
-rw-r--r--lib/l10n/es_AR.json8
-rw-r--r--lib/l10n/es_CL.js6
-rw-r--r--lib/l10n/es_CL.json6
-rw-r--r--lib/l10n/es_CO.js6
-rw-r--r--lib/l10n/es_CO.json6
-rw-r--r--lib/l10n/es_CR.js6
-rw-r--r--lib/l10n/es_CR.json6
-rw-r--r--lib/l10n/es_DO.js6
-rw-r--r--lib/l10n/es_DO.json6
-rw-r--r--lib/l10n/es_EC.js6
-rw-r--r--lib/l10n/es_EC.json6
-rw-r--r--lib/l10n/es_GT.js6
-rw-r--r--lib/l10n/es_GT.json6
-rw-r--r--lib/l10n/es_HN.js6
-rw-r--r--lib/l10n/es_HN.json6
-rw-r--r--lib/l10n/es_MX.js6
-rw-r--r--lib/l10n/es_MX.json6
-rw-r--r--lib/l10n/es_NI.js6
-rw-r--r--lib/l10n/es_NI.json6
-rw-r--r--lib/l10n/es_PA.js6
-rw-r--r--lib/l10n/es_PA.json6
-rw-r--r--lib/l10n/es_PE.js6
-rw-r--r--lib/l10n/es_PE.json6
-rw-r--r--lib/l10n/es_PR.js6
-rw-r--r--lib/l10n/es_PR.json6
-rw-r--r--lib/l10n/es_PY.js6
-rw-r--r--lib/l10n/es_PY.json6
-rw-r--r--lib/l10n/es_SV.js6
-rw-r--r--lib/l10n/es_SV.json6
-rw-r--r--lib/l10n/es_UY.js6
-rw-r--r--lib/l10n/es_UY.json6
-rw-r--r--lib/l10n/et_EE.js2
-rw-r--r--lib/l10n/et_EE.json2
-rw-r--r--lib/l10n/eu.js8
-rw-r--r--lib/l10n/eu.json8
-rw-r--r--lib/l10n/fi.js6
-rw-r--r--lib/l10n/fi.json6
-rw-r--r--lib/l10n/fr.js6
-rw-r--r--lib/l10n/fr.json6
-rw-r--r--lib/l10n/he.js4
-rw-r--r--lib/l10n/he.json4
-rw-r--r--lib/l10n/hu.js6
-rw-r--r--lib/l10n/hu.json6
-rw-r--r--lib/l10n/is.js6
-rw-r--r--lib/l10n/is.json6
-rw-r--r--lib/l10n/it.js6
-rw-r--r--lib/l10n/it.json6
-rw-r--r--lib/l10n/ja.js12
-rw-r--r--lib/l10n/ja.json12
-rw-r--r--lib/l10n/ka_GE.js6
-rw-r--r--lib/l10n/ka_GE.json6
-rw-r--r--lib/l10n/ko.js6
-rw-r--r--lib/l10n/ko.json6
-rw-r--r--lib/l10n/lb.js4
-rw-r--r--lib/l10n/lb.json4
-rw-r--r--lib/l10n/lt_LT.js6
-rw-r--r--lib/l10n/lt_LT.json6
-rw-r--r--lib/l10n/lv.js6
-rw-r--r--lib/l10n/lv.json6
-rw-r--r--lib/l10n/nb.js6
-rw-r--r--lib/l10n/nb.json6
-rw-r--r--lib/l10n/nl.js6
-rw-r--r--lib/l10n/nl.json6
-rw-r--r--lib/l10n/pl.js6
-rw-r--r--lib/l10n/pl.json6
-rw-r--r--lib/l10n/pt_BR.js6
-rw-r--r--lib/l10n/pt_BR.json6
-rw-r--r--lib/l10n/pt_PT.js6
-rw-r--r--lib/l10n/pt_PT.json6
-rw-r--r--lib/l10n/ro.js4
-rw-r--r--lib/l10n/ro.json4
-rw-r--r--lib/l10n/ru.js6
-rw-r--r--lib/l10n/ru.json6
-rw-r--r--lib/l10n/sk.js6
-rw-r--r--lib/l10n/sk.json6
-rw-r--r--lib/l10n/sl.js4
-rw-r--r--lib/l10n/sl.json4
-rw-r--r--lib/l10n/sq.js6
-rw-r--r--lib/l10n/sq.json6
-rw-r--r--lib/l10n/sr.js6
-rw-r--r--lib/l10n/sr.json6
-rw-r--r--lib/l10n/sv.js6
-rw-r--r--lib/l10n/sv.json6
-rw-r--r--lib/l10n/tr.js6
-rw-r--r--lib/l10n/tr.json6
-rw-r--r--lib/l10n/zh_CN.js6
-rw-r--r--lib/l10n/zh_CN.json6
-rw-r--r--lib/l10n/zh_TW.js6
-rw-r--r--lib/l10n/zh_TW.json6
-rw-r--r--lib/private/Authentication/Token/DefaultToken.php7
-rw-r--r--lib/private/Authentication/Token/DefaultTokenMapper.php33
-rw-r--r--lib/private/Authentication/Token/DefaultTokenProvider.php27
-rw-r--r--lib/private/Authentication/Token/IProvider.php9
-rw-r--r--lib/private/Authentication/Token/Manager.php230
-rw-r--r--lib/private/Authentication/Token/PublicKeyToken.php217
-rw-r--r--lib/private/Authentication/Token/PublicKeyTokenMapper.php172
-rw-r--r--lib/private/Authentication/Token/PublicKeyTokenProvider.php320
-rw-r--r--lib/private/Avatar.php166
-rw-r--r--lib/private/Group/Group.php4
-rw-r--r--lib/private/Http/Client/Client.php12
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/Repair/AddCleanupUpdaterBackupsJob.php48
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php2
-rw-r--r--lib/private/Server.php12
-rw-r--r--lib/private/Session/CryptoSessionData.php5
-rw-r--r--lib/private/Session/Internal.php33
-rw-r--r--lib/private/Session/Memory.php2
-rw-r--r--lib/private/Settings/Admin/Overview.php90
-rw-r--r--lib/private/Settings/Manager.php2
-rw-r--r--lib/private/User/Session.php2
-rw-r--r--lib/public/AppFramework/Http/ContentSecurityPolicy.php7
-rw-r--r--lib/public/AppFramework/Http/StrictContentSecurityPolicy.php85
-rw-r--r--lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php51
-rw-r--r--lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php51
-rw-r--r--lib/public/IAvatar.php9
-rw-r--r--lib/public/ISession.php5
143 files changed, 1840 insertions, 525 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 08f8760b321..77729886601 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -40,6 +40,9 @@ return array(
'OCP\\AppFramework\\Http\\RedirectResponse' => $baseDir . '/lib/public/AppFramework/Http/RedirectResponse.php',
'OCP\\AppFramework\\Http\\Response' => $baseDir . '/lib/public/AppFramework/Http/Response.php',
'OCP\\AppFramework\\Http\\StreamResponse' => $baseDir . '/lib/public/AppFramework/Http/StreamResponse.php',
+ 'OCP\\AppFramework\\Http\\StrictContentSecurityPolicy' => $baseDir . '/lib/public/AppFramework/Http/StrictContentSecurityPolicy.php',
+ 'OCP\\AppFramework\\Http\\StrictEvalContentSecurityPolicy' => $baseDir . '/lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php',
+ 'OCP\\AppFramework\\Http\\StrictInlineContentSecurityPolicy' => $baseDir . '/lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php',
'OCP\\AppFramework\\Http\\TemplateResponse' => $baseDir . '/lib/public/AppFramework/Http/TemplateResponse.php',
'OCP\\AppFramework\\Http\\Template\\ExternalShareMenuAction' => $baseDir . '/lib/public/AppFramework/Http/Template/ExternalShareMenuAction.php',
'OCP\\AppFramework\\Http\\Template\\IMenuAction' => $baseDir . '/lib/public/AppFramework/Http/Template/IMenuAction.php',
@@ -418,6 +421,10 @@ return array(
'OC\\Authentication\\Token\\ExpiredTokenException' => $baseDir . '/lib/private/Authentication/Exceptions/ExpiredTokenException.php',
'OC\\Authentication\\Token\\IProvider' => $baseDir . '/lib/private/Authentication/Token/IProvider.php',
'OC\\Authentication\\Token\\IToken' => $baseDir . '/lib/private/Authentication/Token/IToken.php',
+ 'OC\\Authentication\\Token\\Manager' => $baseDir . '/lib/private/Authentication/Token/Manager.php',
+ 'OC\\Authentication\\Token\\PublicKeyToken' => $baseDir . '/lib/private/Authentication/Token/PublicKeyToken.php',
+ 'OC\\Authentication\\Token\\PublicKeyTokenMapper' => $baseDir . '/lib/private/Authentication/Token/PublicKeyTokenMapper.php',
+ 'OC\\Authentication\\Token\\PublicKeyTokenProvider' => $baseDir . '/lib/private/Authentication/Token/PublicKeyTokenProvider.php',
'OC\\Authentication\\TwoFactorAuth\\Manager' => $baseDir . '/lib/private/Authentication/TwoFactorAuth/Manager.php',
'OC\\Avatar' => $baseDir . '/lib/private/Avatar.php',
'OC\\AvatarManager' => $baseDir . '/lib/private/AvatarManager.php',
@@ -462,6 +469,7 @@ return array(
'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\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => $baseDir . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php',
'OC\\Core\\Command\\App\\CheckCode' => $baseDir . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => $baseDir . '/core/Command/App/Disable.php',
'OC\\Core\\Command\\App\\Enable' => $baseDir . '/core/Command/App/Enable.php',
@@ -566,6 +574,7 @@ return array(
'OC\\Core\\Migrations\\Version14000Date20180129121024' => $baseDir . '/core/Migrations/Version14000Date20180129121024.php',
'OC\\Core\\Migrations\\Version14000Date20180404140050' => $baseDir . '/core/Migrations/Version14000Date20180404140050.php',
'OC\\Core\\Migrations\\Version14000Date20180516101403' => $baseDir . '/core/Migrations/Version14000Date20180516101403.php',
+ 'OC\\Core\\Migrations\\Version14000Date20180518120534' => $baseDir . '/core/Migrations/Version14000Date20180518120534.php',
'OC\\DB\\Adapter' => $baseDir . '/lib/private/DB/Adapter.php',
'OC\\DB\\AdapterMySQL' => $baseDir . '/lib/private/DB/AdapterMySQL.php',
'OC\\DB\\AdapterOCI8' => $baseDir . '/lib/private/DB/AdapterOCI8.php',
@@ -838,6 +847,7 @@ return array(
'OC\\Remote\\User' => $baseDir . '/lib/private/Remote/User.php',
'OC\\Repair' => $baseDir . '/lib/private/Repair.php',
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
+ 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\ClearFrontendCaches' => $baseDir . '/lib/private/Repair/ClearFrontendCaches.php',
'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 4c5756b98e3..be9c71d8246 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -70,6 +70,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\AppFramework\\Http\\RedirectResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/RedirectResponse.php',
'OCP\\AppFramework\\Http\\Response' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/Response.php',
'OCP\\AppFramework\\Http\\StreamResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StreamResponse.php',
+ 'OCP\\AppFramework\\Http\\StrictContentSecurityPolicy' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StrictContentSecurityPolicy.php',
+ 'OCP\\AppFramework\\Http\\StrictEvalContentSecurityPolicy' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php',
+ 'OCP\\AppFramework\\Http\\StrictInlineContentSecurityPolicy' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php',
'OCP\\AppFramework\\Http\\TemplateResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/TemplateResponse.php',
'OCP\\AppFramework\\Http\\Template\\ExternalShareMenuAction' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/Template/ExternalShareMenuAction.php',
'OCP\\AppFramework\\Http\\Template\\IMenuAction' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/Template/IMenuAction.php',
@@ -448,6 +451,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Authentication\\Token\\ExpiredTokenException' => __DIR__ . '/../../..' . '/lib/private/Authentication/Exceptions/ExpiredTokenException.php',
'OC\\Authentication\\Token\\IProvider' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/IProvider.php',
'OC\\Authentication\\Token\\IToken' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/IToken.php',
+ 'OC\\Authentication\\Token\\Manager' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/Manager.php',
+ 'OC\\Authentication\\Token\\PublicKeyToken' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/PublicKeyToken.php',
+ 'OC\\Authentication\\Token\\PublicKeyTokenMapper' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/PublicKeyTokenMapper.php',
+ 'OC\\Authentication\\Token\\PublicKeyTokenProvider' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/PublicKeyTokenProvider.php',
'OC\\Authentication\\TwoFactorAuth\\Manager' => __DIR__ . '/../../..' . '/lib/private/Authentication/TwoFactorAuth/Manager.php',
'OC\\Avatar' => __DIR__ . '/../../..' . '/lib/private/Avatar.php',
'OC\\AvatarManager' => __DIR__ . '/../../..' . '/lib/private/AvatarManager.php',
@@ -492,6 +499,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'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\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php',
'OC\\Core\\Command\\App\\CheckCode' => __DIR__ . '/../../..' . '/core/Command/App/CheckCode.php',
'OC\\Core\\Command\\App\\Disable' => __DIR__ . '/../../..' . '/core/Command/App/Disable.php',
'OC\\Core\\Command\\App\\Enable' => __DIR__ . '/../../..' . '/core/Command/App/Enable.php',
@@ -596,6 +604,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Core\\Migrations\\Version14000Date20180129121024' => __DIR__ . '/../../..' . '/core/Migrations/Version14000Date20180129121024.php',
'OC\\Core\\Migrations\\Version14000Date20180404140050' => __DIR__ . '/../../..' . '/core/Migrations/Version14000Date20180404140050.php',
'OC\\Core\\Migrations\\Version14000Date20180516101403' => __DIR__ . '/../../..' . '/core/Migrations/Version14000Date20180516101403.php',
+ 'OC\\Core\\Migrations\\Version14000Date20180518120534' => __DIR__ . '/../../..' . '/core/Migrations/Version14000Date20180518120534.php',
'OC\\DB\\Adapter' => __DIR__ . '/../../..' . '/lib/private/DB/Adapter.php',
'OC\\DB\\AdapterMySQL' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterMySQL.php',
'OC\\DB\\AdapterOCI8' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterOCI8.php',
@@ -868,6 +877,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Remote\\User' => __DIR__ . '/../../..' . '/lib/private/Remote/User.php',
'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php',
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
+ 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\ClearFrontendCaches' => __DIR__ . '/../../..' . '/lib/private/Repair/ClearFrontendCaches.php',
'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php',
diff --git a/lib/l10n/ar.js b/lib/l10n/ar.js
index 611a371613d..09a34082aa0 100644
--- a/lib/l10n/ar.js
+++ b/lib/l10n/ar.js
@@ -49,7 +49,6 @@ OC.L10N.register(
"Security" : "الأمان",
"Encryption" : "التعمية",
"Additional settings" : "الإعدادات المتقدمة",
- "Tips & tricks" : "نصائح و تلميحات",
"Personal info" : "المعلومات الشخصية",
"Unlimited" : "غير محدود",
"Verifying" : "التحقق",
@@ -137,6 +136,7 @@ OC.L10N.register(
"Token expired. Please reload page." : "انتهت صلاحية الكلمة , يرجى اعادة تحميل الصفحة",
"Personal" : "الحساب الشخصي",
"Admin" : "المدير",
+ "Tips & tricks" : "نصائح و تلميحات",
"Sync clients" : "مزامنة العملاء"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/lib/l10n/ar.json b/lib/l10n/ar.json
index d114a3341fc..cfbf9675988 100644
--- a/lib/l10n/ar.json
+++ b/lib/l10n/ar.json
@@ -47,7 +47,6 @@
"Security" : "الأمان",
"Encryption" : "التعمية",
"Additional settings" : "الإعدادات المتقدمة",
- "Tips & tricks" : "نصائح و تلميحات",
"Personal info" : "المعلومات الشخصية",
"Unlimited" : "غير محدود",
"Verifying" : "التحقق",
@@ -135,6 +134,7 @@
"Token expired. Please reload page." : "انتهت صلاحية الكلمة , يرجى اعادة تحميل الصفحة",
"Personal" : "الحساب الشخصي",
"Admin" : "المدير",
+ "Tips & tricks" : "نصائح و تلميحات",
"Sync clients" : "مزامنة العملاء"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js
index 13ce6d0cf49..4518070496b 100644
--- a/lib/l10n/ast.js
+++ b/lib/l10n/ast.js
@@ -46,12 +46,10 @@ OC.L10N.register(
"Log out" : "Zarrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Usuariu desconocíu",
- "APCu" : "APCu",
"Basic settings" : "Axustes básicos",
"Security" : "Seguranza",
"Encryption" : "Cifráu",
"Additional settings" : "Axustes adicionales",
- "Tips & tricks" : "Conseyos y trucos",
"%s enter the database username and name." : "%s introducir el nome d'usuariu y el nome de la base de datos .",
"%s enter the database username." : "%s introducir l'usuariu de la base de datos.",
"%s enter the database name." : "%s introducir nome de la base de datos.",
@@ -172,6 +170,8 @@ OC.L10N.register(
"Storage incomplete configuration. %s" : "Configuración d'almacenamientu incompleta. %s",
"Storage connection error. %s" : "Fallu de conexón al almacenamientu. %s",
"Storage is temporarily not available" : "L'almacenamientu ta temporalmente non disponible",
- "Storage connection timeout. %s" : "Tiempu escosao de conexón al almacenamientu. %s"
+ "Storage connection timeout. %s" : "Tiempu escosao de conexón al almacenamientu. %s",
+ "APCu" : "APCu",
+ "Tips & tricks" : "Conseyos y trucos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json
index 3d233d346a6..53f8b0c1312 100644
--- a/lib/l10n/ast.json
+++ b/lib/l10n/ast.json
@@ -44,12 +44,10 @@
"Log out" : "Zarrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Usuariu desconocíu",
- "APCu" : "APCu",
"Basic settings" : "Axustes básicos",
"Security" : "Seguranza",
"Encryption" : "Cifráu",
"Additional settings" : "Axustes adicionales",
- "Tips & tricks" : "Conseyos y trucos",
"%s enter the database username and name." : "%s introducir el nome d'usuariu y el nome de la base de datos .",
"%s enter the database username." : "%s introducir l'usuariu de la base de datos.",
"%s enter the database name." : "%s introducir nome de la base de datos.",
@@ -170,6 +168,8 @@
"Storage incomplete configuration. %s" : "Configuración d'almacenamientu incompleta. %s",
"Storage connection error. %s" : "Fallu de conexón al almacenamientu. %s",
"Storage is temporarily not available" : "L'almacenamientu ta temporalmente non disponible",
- "Storage connection timeout. %s" : "Tiempu escosao de conexón al almacenamientu. %s"
+ "Storage connection timeout. %s" : "Tiempu escosao de conexón al almacenamientu. %s",
+ "APCu" : "APCu",
+ "Tips & tricks" : "Conseyos y trucos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/bg.js b/lib/l10n/bg.js
index fc793298065..18c8af414e4 100644
--- a/lib/l10n/bg.js
+++ b/lib/l10n/bg.js
@@ -37,8 +37,6 @@ OC.L10N.register(
"Apps" : "Приложения",
"Users" : "Потребители",
"Unknown user" : "Непознат потребител",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Sharing" : "Споделяне",
"Additional settings" : "Допълнителни настройки",
"%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
@@ -144,6 +142,8 @@ 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, за да не може директорията да бъде видяна от други потребители.",
- "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\"."
+ "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
+ "APCu" : "APCu",
+ "Redis" : "Redis"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/bg.json b/lib/l10n/bg.json
index af3f266bcbf..1a0feea7c23 100644
--- a/lib/l10n/bg.json
+++ b/lib/l10n/bg.json
@@ -35,8 +35,6 @@
"Apps" : "Приложения",
"Users" : "Потребители",
"Unknown user" : "Непознат потребител",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Sharing" : "Споделяне",
"Additional settings" : "Допълнителни настройки",
"%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
@@ -142,6 +140,8 @@
"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, за да не може директорията да бъде видяна от други потребители.",
- "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\"."
+ "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
+ "APCu" : "APCu",
+ "Redis" : "Redis"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js
index b845da3b4c1..8ee2e416751 100644
--- a/lib/l10n/ca.js
+++ b/lib/l10n/ca.js
@@ -57,8 +57,6 @@ OC.L10N.register(
"Log out" : "Surt",
"Users" : "Usuaris",
"Unknown user" : "Usuari desconegut",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crea",
"Change" : "Modifica",
"Delete" : "Esborra",
@@ -69,7 +67,6 @@ OC.L10N.register(
"Security" : "Seguretat",
"Encryption" : "Xifrat",
"Additional settings" : "Configuració addicional",
- "Tips & tricks" : "Consells i trucs",
"Personal info" : "Informació personal",
"Unlimited" : "Il·limitat",
"Verifying" : "Verificant",
@@ -188,6 +185,9 @@ OC.L10N.register(
"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.",
"Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
"Personal" : "Personal",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consells i trucs",
"Sync clients" : "Aplicacions per sincronitzar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json
index f3db1540d23..26c96edb590 100644
--- a/lib/l10n/ca.json
+++ b/lib/l10n/ca.json
@@ -55,8 +55,6 @@
"Log out" : "Surt",
"Users" : "Usuaris",
"Unknown user" : "Usuari desconegut",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crea",
"Change" : "Modifica",
"Delete" : "Esborra",
@@ -67,7 +65,6 @@
"Security" : "Seguretat",
"Encryption" : "Xifrat",
"Additional settings" : "Configuració addicional",
- "Tips & tricks" : "Consells i trucs",
"Personal info" : "Informació personal",
"Unlimited" : "Il·limitat",
"Verifying" : "Verificant",
@@ -186,6 +183,9 @@
"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.",
"Could not obtain lock type %d on \"%s\"." : "No s'ha pogut obtenir un bloqueig tipus %d a \"%s\".",
"Personal" : "Personal",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consells i trucs",
"Sync clients" : "Aplicacions per sincronitzar"
},"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 45a755c4f08..f7dd8cd72cc 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Odhlásit se",
"Users" : "Uživatelé",
"Unknown user" : "Neznámý uživatel",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Vytvořit",
"Change" : "Změnit",
"Delete" : "Smazat",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Zabezpečení",
"Encryption" : "Šifrování",
"Additional settings" : "Dodatečná nastavení",
- "Tips & tricks" : "Tipy a triky",
"Personal info" : "Osobní informace",
"Unlimited" : "Neomezeně",
"Verifying" : "Ověření",
@@ -234,6 +231,9 @@ OC.L10N.register(
"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",
"Personal" : "Osobní",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipy a triky",
"DB Error: \"%s\"" : "Chyba databáze: „%s“",
"No app name specified" : "Nezadán název aplikace",
"Sync clients" : "Synchronizační klienti"
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index 80d1b375efa..228b06a682f 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -64,8 +64,6 @@
"Log out" : "Odhlásit se",
"Users" : "Uživatelé",
"Unknown user" : "Neznámý uživatel",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Vytvořit",
"Change" : "Změnit",
"Delete" : "Smazat",
@@ -76,7 +74,6 @@
"Security" : "Zabezpečení",
"Encryption" : "Šifrování",
"Additional settings" : "Dodatečná nastavení",
- "Tips & tricks" : "Tipy a triky",
"Personal info" : "Osobní informace",
"Unlimited" : "Neomezeně",
"Verifying" : "Ověření",
@@ -232,6 +229,9 @@
"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",
"Personal" : "Osobní",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipy a triky",
"DB Error: \"%s\"" : "Chyba databáze: „%s“",
"No app name specified" : "Nezadán název aplikace",
"Sync clients" : "Synchronizační klienti"
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 0b123169b17..4260bb253bc 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Abmelden",
"Users" : "Benutzer",
"Unknown user" : "Unbekannter Benutzer",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Anlegen",
"Change" : "Ändern",
"Delete" : "Löschen",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
- "Tips & tricks" : "Tipps & Tricks",
"Personal info" : "Persönliche Informationen ",
"Mobile & desktop" : "Mobil & Desktop",
"Unlimited" : "Unbegrenzt",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
"Personal" : "Persönlich",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipps & Tricks",
"DB Error: \"%s\"" : "DB-Fehler: \"%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s“, Name: %s, Passwort: %s",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index 97d7f667615..f27730390f9 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -64,8 +64,6 @@
"Log out" : "Abmelden",
"Users" : "Benutzer",
"Unknown user" : "Unbekannter Benutzer",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Anlegen",
"Change" : "Ändern",
"Delete" : "Löschen",
@@ -76,7 +74,6 @@
"Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
- "Tips & tricks" : "Tipps & Tricks",
"Personal info" : "Persönliche Informationen ",
"Mobile & desktop" : "Mobil & Desktop",
"Unlimited" : "Unbegrenzt",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
"Personal" : "Persönlich",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipps & Tricks",
"DB Error: \"%s\"" : "DB-Fehler: \"%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s“, Name: %s, Passwort: %s",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 9f4d5dd6e04..b0f85566adc 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Abmelden",
"Users" : "Benutzer",
"Unknown user" : "Unbekannter Benutzer",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Erstellen",
"Change" : "Ändern",
"Delete" : "Löschen",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
- "Tips & tricks" : "Tipps & Tricks",
"Personal info" : "Persönliche Informationen ",
"Mobile & desktop" : "Mobil & Desktop",
"Unlimited" : "Unbegrenzt",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
"Personal" : "Persönlich",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipps & Tricks",
"DB Error: \"%s\"" : "DB-Fehler: \"%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s“, Name: %s, Passwort: %s",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 9e96ad28327..17111d69708 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -64,8 +64,6 @@
"Log out" : "Abmelden",
"Users" : "Benutzer",
"Unknown user" : "Unbekannter Benutzer",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Erstellen",
"Change" : "Ändern",
"Delete" : "Löschen",
@@ -76,7 +74,6 @@
"Security" : "Sicherheit",
"Encryption" : "Verschlüsselung",
"Additional settings" : "Zusätzliche Einstellungen",
- "Tips & tricks" : "Tipps & Tricks",
"Personal info" : "Persönliche Informationen ",
"Mobile & desktop" : "Mobil & Desktop",
"Unlimited" : "Unbegrenzt",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s",
"Personal" : "Persönlich",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipps & Tricks",
"DB Error: \"%s\"" : "DB-Fehler: \"%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: \"%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Fehlerhafter Befehl war: \"%s“, Name: %s, Passwort: %s",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index 5ca72d4db7b..8bc15fb9c32 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -61,8 +61,6 @@ OC.L10N.register(
"Log out" : "Έξοδος",
"Users" : "Χρήστες",
"Unknown user" : "Άγνωστος χρήστης",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Δημιουργία",
"Delete" : "Διαγραφή",
"Basic settings" : "Βασικές ρυθμίσεις",
@@ -70,7 +68,6 @@ OC.L10N.register(
"Security" : "Ασφάλεια",
"Encryption" : "Κρυπτογράφηση",
"Additional settings" : "Επιπρόσθετες ρυθμίσεις",
- "Tips & tricks" : "Συμβουλές & κόλπα",
"Personal info" : "Προσωπικές πληροφορίες",
"Unlimited" : "Απεριόριστα",
"Verifying" : "Γίνεται επαλήθευση",
@@ -221,6 +218,12 @@ OC.L10N.register(
"Storage connection error. %s" : "Σφάλμα σύνδεσης με αποθηκευτικό χώρο. %s",
"Storage is temporarily not available" : "Μη διαθέσιμος χώρος αποθήκευσης προσωρινά",
"Storage connection timeout. %s" : "Λήξη χρονικού ορίου σύνδεσης με αποθηκευτικό χώρο.%s",
+ "Personal" : "Προσωπικά",
+ "Admin" : "Διαχειριστής",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Συμβουλές & κόλπα",
+ "DB Error: \"%s\"" : "Σφάλμα βάσης δεδομένων: \"%s\"",
"Sync clients" : "Εφαρμογές συγχρονισμού"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index b5eb9c1bb9b..cbb22cd33bc 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -59,8 +59,6 @@
"Log out" : "Έξοδος",
"Users" : "Χρήστες",
"Unknown user" : "Άγνωστος χρήστης",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Δημιουργία",
"Delete" : "Διαγραφή",
"Basic settings" : "Βασικές ρυθμίσεις",
@@ -68,7 +66,6 @@
"Security" : "Ασφάλεια",
"Encryption" : "Κρυπτογράφηση",
"Additional settings" : "Επιπρόσθετες ρυθμίσεις",
- "Tips & tricks" : "Συμβουλές & κόλπα",
"Personal info" : "Προσωπικές πληροφορίες",
"Unlimited" : "Απεριόριστα",
"Verifying" : "Γίνεται επαλήθευση",
@@ -219,6 +216,12 @@
"Storage connection error. %s" : "Σφάλμα σύνδεσης με αποθηκευτικό χώρο. %s",
"Storage is temporarily not available" : "Μη διαθέσιμος χώρος αποθήκευσης προσωρινά",
"Storage connection timeout. %s" : "Λήξη χρονικού ορίου σύνδεσης με αποθηκευτικό χώρο.%s",
+ "Personal" : "Προσωπικά",
+ "Admin" : "Διαχειριστής",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Συμβουλές & κόλπα",
+ "DB Error: \"%s\"" : "Σφάλμα βάσης δεδομένων: \"%s\"",
"Sync clients" : "Εφαρμογές συγχρονισμού"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index 47d881ae05e..431f865465a 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Log out",
"Users" : "Users",
"Unknown user" : "Unknown user",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Create",
"Change" : "Change",
"Delete" : "Delete",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Security",
"Encryption" : "Encryption",
"Additional settings" : "Additional settings",
- "Tips & tricks" : "Tips & tricks",
"Personal info" : "Personal info",
"Mobile & desktop" : "Mobile & desktop",
"Unlimited" : "Unlimited",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Storage connection timeout. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & tricks",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "Offending command was: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Offending command was: \"%s\", name: %s, password: %s",
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index fb88eb5e467..c681b7da04a 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -64,8 +64,6 @@
"Log out" : "Log out",
"Users" : "Users",
"Unknown user" : "Unknown user",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Create",
"Change" : "Change",
"Delete" : "Delete",
@@ -76,7 +74,6 @@
"Security" : "Security",
"Encryption" : "Encryption",
"Additional settings" : "Additional settings",
- "Tips & tricks" : "Tips & tricks",
"Personal info" : "Personal info",
"Mobile & desktop" : "Mobile & desktop",
"Unlimited" : "Unlimited",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Storage connection timeout. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & tricks",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "Offending command was: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Offending command was: \"%s\", name: %s, password: %s",
diff --git a/lib/l10n/eo.js b/lib/l10n/eo.js
index 100b0fe50d8..bc87b260f7c 100644
--- a/lib/l10n/eo.js
+++ b/lib/l10n/eo.js
@@ -11,6 +11,7 @@ OC.L10N.register(
"Unknown filetype" : "Ne konatas dosiertipo",
"Invalid image" : "Ne validas bildo",
"today" : "hodiaŭ",
+ "tomorrow" : "morgaŭ",
"yesterday" : "hieraŭ",
"_%n day ago_::_%n days ago_" : ["antaŭ %n tago","antaŭ %n tagoj"],
"last month" : "lastamonate",
@@ -21,9 +22,19 @@ OC.L10N.register(
"File name is too long" : "La dosiernomo tro longas",
"Empty filename is not allowed" : "Malplena dosiernomo ne permesatas",
"__language_name__" : "Esperanto",
+ "Help" : "Helpo",
"Apps" : "Aplikaĵoj",
+ "Settings" : "Agordo",
+ "Log out" : "Elsaluti",
"Users" : "Uzantoj",
"Unknown user" : "Nekonata uzanto",
+ "Create" : "Krei",
+ "Change" : "Ŝanĝi",
+ "Delete" : "Forigi",
+ "Share" : "Kunhavigi",
+ "Sharing" : "Kunhavigo",
+ "Security" : "Sekurigo",
+ "Additional settings" : "Plia agordo",
"%s enter the database username." : "%s enigu la uzantonomon de la datumbazo.",
"%s enter the database name." : "%s enigu la nomon de la datumbazo.",
"%s you may not use dots in the database name" : "%s vi ne povas uzi punktojn en la nomo de la datumbazo",
@@ -33,6 +44,7 @@ OC.L10N.register(
"Set an admin username." : "Starigi administran uzantonomon.",
"Set an admin password." : "Starigi administran pasvorton.",
"Can't create or write into the data directory %s" : "Ne kreeblas aŭ ne skribeblas la dosierujo de datumoj %s",
+ "Invalid Federated Cloud ID" : "Ne validas identigilo de federa nubo",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Kunhavigo de %s malsukcesis, ĉar la motoro ne permesas kunhavojn el tipo %i",
"Sharing %s failed, because the file does not exist" : "Kunhavigo de %s malsukcesis, ĉar la dosiero ne ekzistas",
"You are not allowed to share %s" : "Vi ne permesatas kunhavigi %s",
@@ -52,10 +64,32 @@ OC.L10N.register(
"%s shared »%s« with you" : "%s kunhavigis “%s” kun vi",
"%s via %s" : "%s per %s",
"Could not find category \"%s\"" : "Ne troviĝis kategorio “%s”",
+ "Sunday" : "dimanĉo",
+ "Monday" : "lundo",
+ "Tuesday" : "mardo",
+ "Wednesday" : "merkredo",
+ "Thursday" : "ĵaŭdo",
+ "Friday" : "vendredo",
+ "Saturday" : "sabato",
+ "Sun." : "dim.",
+ "Mon." : "lun.",
+ "Tue." : "mar.",
+ "Wed." : "mer.",
+ "Thu." : "ĵaŭ.",
+ "Fri." : "ven.",
+ "Sat." : "sab.",
+ "Su" : "Di",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Me",
+ "Th" : "Ĵa",
+ "Fr" : "Ve",
+ "Sa" : "Sa",
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"Username contains whitespace at the beginning or at the end" : "Uzantonomo enhavas blankospacon eke aŭ maleke",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
"The username is already being used" : "La uzantonomo jam uzatas",
+ "a safe home for all your data" : "sekura hejmo por ĉion vian datumon",
"Can't read file" : "Ne legeblas dosiero",
"Application is not enabled" : "La aplikaĵo ne estas kapabligita",
"Authentication error" : "Aŭtentiga eraro",
@@ -67,6 +101,8 @@ OC.L10N.register(
"Please ask your server administrator to restart the web server." : "Bonvolu peti viajn serviladministranton, ke ŝi/li reekfunkciigu la TTT-servilon.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas",
"Please upgrade your database version" : "Bonvolu ĝisdatigi la eldonon de via datumbazo",
- "Storage connection error. %s" : "Memorokonekta eraro. %s"
+ "Storage connection error. %s" : "Memorokonekta eraro. %s",
+ "Personal" : "Persona",
+ "Admin" : "Administranto"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eo.json b/lib/l10n/eo.json
index 10780bbed76..3fc0a8c6f87 100644
--- a/lib/l10n/eo.json
+++ b/lib/l10n/eo.json
@@ -9,6 +9,7 @@
"Unknown filetype" : "Ne konatas dosiertipo",
"Invalid image" : "Ne validas bildo",
"today" : "hodiaŭ",
+ "tomorrow" : "morgaŭ",
"yesterday" : "hieraŭ",
"_%n day ago_::_%n days ago_" : ["antaŭ %n tago","antaŭ %n tagoj"],
"last month" : "lastamonate",
@@ -19,9 +20,19 @@
"File name is too long" : "La dosiernomo tro longas",
"Empty filename is not allowed" : "Malplena dosiernomo ne permesatas",
"__language_name__" : "Esperanto",
+ "Help" : "Helpo",
"Apps" : "Aplikaĵoj",
+ "Settings" : "Agordo",
+ "Log out" : "Elsaluti",
"Users" : "Uzantoj",
"Unknown user" : "Nekonata uzanto",
+ "Create" : "Krei",
+ "Change" : "Ŝanĝi",
+ "Delete" : "Forigi",
+ "Share" : "Kunhavigi",
+ "Sharing" : "Kunhavigo",
+ "Security" : "Sekurigo",
+ "Additional settings" : "Plia agordo",
"%s enter the database username." : "%s enigu la uzantonomon de la datumbazo.",
"%s enter the database name." : "%s enigu la nomon de la datumbazo.",
"%s you may not use dots in the database name" : "%s vi ne povas uzi punktojn en la nomo de la datumbazo",
@@ -31,6 +42,7 @@
"Set an admin username." : "Starigi administran uzantonomon.",
"Set an admin password." : "Starigi administran pasvorton.",
"Can't create or write into the data directory %s" : "Ne kreeblas aŭ ne skribeblas la dosierujo de datumoj %s",
+ "Invalid Federated Cloud ID" : "Ne validas identigilo de federa nubo",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Kunhavigo de %s malsukcesis, ĉar la motoro ne permesas kunhavojn el tipo %i",
"Sharing %s failed, because the file does not exist" : "Kunhavigo de %s malsukcesis, ĉar la dosiero ne ekzistas",
"You are not allowed to share %s" : "Vi ne permesatas kunhavigi %s",
@@ -50,10 +62,32 @@
"%s shared »%s« with you" : "%s kunhavigis “%s” kun vi",
"%s via %s" : "%s per %s",
"Could not find category \"%s\"" : "Ne troviĝis kategorio “%s”",
+ "Sunday" : "dimanĉo",
+ "Monday" : "lundo",
+ "Tuesday" : "mardo",
+ "Wednesday" : "merkredo",
+ "Thursday" : "ĵaŭdo",
+ "Friday" : "vendredo",
+ "Saturday" : "sabato",
+ "Sun." : "dim.",
+ "Mon." : "lun.",
+ "Tue." : "mar.",
+ "Wed." : "mer.",
+ "Thu." : "ĵaŭ.",
+ "Fri." : "ven.",
+ "Sat." : "sab.",
+ "Su" : "Di",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Me",
+ "Th" : "Ĵa",
+ "Fr" : "Ve",
+ "Sa" : "Sa",
"A valid username must be provided" : "Valida uzantonomo devas proviziĝi",
"Username contains whitespace at the beginning or at the end" : "Uzantonomo enhavas blankospacon eke aŭ maleke",
"A valid password must be provided" : "Valida pasvorto devas proviziĝi",
"The username is already being used" : "La uzantonomo jam uzatas",
+ "a safe home for all your data" : "sekura hejmo por ĉion vian datumon",
"Can't read file" : "Ne legeblas dosiero",
"Application is not enabled" : "La aplikaĵo ne estas kapabligita",
"Authentication error" : "Aŭtentiga eraro",
@@ -65,6 +99,8 @@
"Please ask your server administrator to restart the web server." : "Bonvolu peti viajn serviladministranton, ke ŝi/li reekfunkciigu la TTT-servilon.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas",
"Please upgrade your database version" : "Bonvolu ĝisdatigi la eldonon de via datumbazo",
- "Storage connection error. %s" : "Memorokonekta eraro. %s"
+ "Storage connection error. %s" : "Memorokonekta eraro. %s",
+ "Personal" : "Persona",
+ "Admin" : "Administranto"
},"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 4b41ad2502c..f8ce3269cba 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Usuario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Eliminar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Cifrado",
"Additional settings" : "Configuración adicional",
- "Tips & tricks" : "Sugerencias y trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verificando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s",
"Personal" : "Personal",
"Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Sugerencias y trucos",
"DB Error: \"%s\"" : "Error de BD: \"%s\"",
"Offending command was: \"%s\"" : "El comando ofensivo fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando ofensivo fue: \"%s\", nombre: %s, contraseña: %s",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index f7840cdf713..175cc1a85aa 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Usuario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Eliminar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Cifrado",
"Additional settings" : "Configuración adicional",
- "Tips & tricks" : "Sugerencias y trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verificando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s",
"Personal" : "Personal",
"Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Sugerencias y trucos",
"DB Error: \"%s\"" : "Error de BD: \"%s\"",
"Offending command was: \"%s\"" : "El comando ofensivo fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando ofensivo fue: \"%s\", nombre: %s, contraseña: %s",
diff --git a/lib/l10n/es_419.js b/lib/l10n/es_419.js
index d06c3dc480e..d1b7f54eae2 100644
--- a/lib/l10n/es_419.js
+++ b/lib/l10n/es_419.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_419.json b/lib/l10n/es_419.json
index 6d3a221b8e5..0d19207cb80 100644
--- a/lib/l10n/es_419.json
+++ b/lib/l10n/es_419.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_AR.js b/lib/l10n/es_AR.js
index 98fb3533d13..d5cb6aebed6 100644
--- a/lib/l10n/es_AR.js
+++ b/lib/l10n/es_AR.js
@@ -54,14 +54,11 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones 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",
@@ -200,6 +197,9 @@ OC.L10N.register(
"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"
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos y trucos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_AR.json b/lib/l10n/es_AR.json
index 61e384e8a8a..5100beeb414 100644
--- a/lib/l10n/es_AR.json
+++ b/lib/l10n/es_AR.json
@@ -52,14 +52,11 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones 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",
@@ -198,6 +195,9 @@
"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"
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos y trucos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_CL.js b/lib/l10n/es_CL.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_CL.js
+++ b/lib/l10n/es_CL.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_CL.json b/lib/l10n/es_CL.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_CL.json
+++ b/lib/l10n/es_CL.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_CO.js b/lib/l10n/es_CO.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_CO.js
+++ b/lib/l10n/es_CO.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_CO.json b/lib/l10n/es_CO.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_CO.json
+++ b/lib/l10n/es_CO.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_CR.js b/lib/l10n/es_CR.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_CR.js
+++ b/lib/l10n/es_CR.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_CR.json b/lib/l10n/es_CR.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_CR.json
+++ b/lib/l10n/es_CR.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_DO.js b/lib/l10n/es_DO.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_DO.js
+++ b/lib/l10n/es_DO.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_DO.json b/lib/l10n/es_DO.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_DO.json
+++ b/lib/l10n/es_DO.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_EC.js b/lib/l10n/es_EC.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_EC.js
+++ b/lib/l10n/es_EC.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_EC.json b/lib/l10n/es_EC.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_EC.json
+++ b/lib/l10n/es_EC.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_GT.js b/lib/l10n/es_GT.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_GT.js
+++ b/lib/l10n/es_GT.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_GT.json b/lib/l10n/es_GT.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_GT.json
+++ b/lib/l10n/es_GT.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_HN.js b/lib/l10n/es_HN.js
index 097c6a9ec75..4f46d2cd040 100644
--- a/lib/l10n/es_HN.js
+++ b/lib/l10n/es_HN.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_HN.json b/lib/l10n/es_HN.json
index 92ad85169da..ab057a17c9a 100644
--- a/lib/l10n/es_HN.json
+++ b/lib/l10n/es_HN.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"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
index 37d50d67783..575d11b5e70 100644
--- a/lib/l10n/es_MX.js
+++ b/lib/l10n/es_MX.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Mobile & desktop" : "Móvil & escritorio",
"Unlimited" : "Ilimitado",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json
index 41222fe9178..83dbe76dac0 100644
--- a/lib/l10n/es_MX.json
+++ b/lib/l10n/es_MX.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Mobile & desktop" : "Móvil & escritorio",
"Unlimited" : "Ilimitado",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_NI.js b/lib/l10n/es_NI.js
index 967a97420b3..1b6cf810e71 100644
--- a/lib/l10n/es_NI.js
+++ b/lib/l10n/es_NI.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_NI.json b/lib/l10n/es_NI.json
index aa9d70acc1a..a787ebe2d03 100644
--- a/lib/l10n/es_NI.json
+++ b/lib/l10n/es_NI.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_PA.js b/lib/l10n/es_PA.js
index 8bbc815dd7e..c16f549a918 100644
--- a/lib/l10n/es_PA.js
+++ b/lib/l10n/es_PA.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PA.json b/lib/l10n/es_PA.json
index 334d6682dff..63558bdd6c7 100644
--- a/lib/l10n/es_PA.json
+++ b/lib/l10n/es_PA.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_PE.js b/lib/l10n/es_PE.js
index fc0db3108a3..0364835f324 100644
--- a/lib/l10n/es_PE.js
+++ b/lib/l10n/es_PE.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PE.json b/lib/l10n/es_PE.json
index 186eff96ff3..86aa71cf7c3 100644
--- a/lib/l10n/es_PE.json
+++ b/lib/l10n/es_PE.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_PR.js b/lib/l10n/es_PR.js
index 8bf006a943b..d317aa8c90b 100644
--- a/lib/l10n/es_PR.js
+++ b/lib/l10n/es_PR.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PR.json b/lib/l10n/es_PR.json
index 46a88fe3d56..72bc8e46e87 100644
--- a/lib/l10n/es_PR.json
+++ b/lib/l10n/es_PR.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_PY.js b/lib/l10n/es_PY.js
index d188af2a98a..23080660d7b 100644
--- a/lib/l10n/es_PY.js
+++ b/lib/l10n/es_PY.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_PY.json b/lib/l10n/es_PY.json
index 46105adf88f..3f877acbac6 100644
--- a/lib/l10n/es_PY.json
+++ b/lib/l10n/es_PY.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es_SV.js b/lib/l10n/es_SV.js
index 458431e70f5..1002b064857 100644
--- a/lib/l10n/es_SV.js
+++ b/lib/l10n/es_SV.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_SV.json b/lib/l10n/es_SV.json
index 00cb0a8ad5e..f29877d6b0b 100644
--- a/lib/l10n/es_SV.json
+++ b/lib/l10n/es_SV.json
@@ -64,8 +64,6 @@
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crear",
"Change" : "Cambiar",
"Delete" : "Borrar",
@@ -76,7 +74,6 @@
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
"Personal" : "Personal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"DB Error: \"%s\"" : "DB Error: \"%s\"",
"Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre:%s, contraseña:%s",
diff --git a/lib/l10n/es_UY.js b/lib/l10n/es_UY.js
index 526701467f5..ec07e1fdc14 100644
--- a/lib/l10n/es_UY.js
+++ b/lib/l10n/es_UY.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_UY.json b/lib/l10n/es_UY.json
index 4b84af44a0b..a9f65b90d7c 100644
--- a/lib/l10n/es_UY.json
+++ b/lib/l10n/es_UY.json
@@ -63,14 +63,11 @@
"Log out" : "Salir",
"Users" : "Usuarios",
"Unknown user" : "Ususario desconocido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Configuraciones básicas",
"Sharing" : "Compartiendo",
"Security" : "Seguridad",
"Encryption" : "Encripción",
"Additional settings" : "Configuraciones adicionales",
- "Tips & tricks" : "Consejos & trucos",
"Personal info" : "Información personal",
"Unlimited" : "Ilimitado",
"Verifying" : "Verficando",
@@ -225,6 +222,9 @@
"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" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Consejos & trucos",
"Sync clients" : "Sincronizar clientes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index 28e5ca430f5..c322c6342ff 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -50,7 +50,6 @@ OC.L10N.register(
"Security" : "Turvalisus",
"Encryption" : "Krüpteerimine",
"Additional settings" : "Lisaseaded",
- "Tips & tricks" : "Nõuanded ja trikid",
"Personal info" : "Isiklik info",
"Unlimited" : "Piiramatult",
"Verifying" : "Kontrollin",
@@ -182,6 +181,7 @@ OC.L10N.register(
"Please upgrade your database version" : "Palun uuenda oma andmebaasi versiooni",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Palun muuda kataloogi õigused 0770-ks, et kataloogi sisu poleks teistele kasutajatele nähtav",
"Could not obtain lock type %d on \"%s\"." : "Ei suutnud hankida %d tüüpi lukustust \"%s\".",
+ "Tips & tricks" : "Nõuanded ja trikid",
"Sync clients" : "Klientide sünkroniseerimine"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 33cb3215a79..d94732acdba 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -48,7 +48,6 @@
"Security" : "Turvalisus",
"Encryption" : "Krüpteerimine",
"Additional settings" : "Lisaseaded",
- "Tips & tricks" : "Nõuanded ja trikid",
"Personal info" : "Isiklik info",
"Unlimited" : "Piiramatult",
"Verifying" : "Kontrollin",
@@ -180,6 +179,7 @@
"Please upgrade your database version" : "Palun uuenda oma andmebaasi versiooni",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Palun muuda kataloogi õigused 0770-ks, et kataloogi sisu poleks teistele kasutajatele nähtav",
"Could not obtain lock type %d on \"%s\"." : "Ei suutnud hankida %d tüüpi lukustust \"%s\".",
+ "Tips & tricks" : "Nõuanded ja trikid",
"Sync clients" : "Klientide sünkroniseerimine"
},"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 51d5b42aee9..baafa10dda4 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -41,12 +41,9 @@ OC.L10N.register(
"Apps" : "Aplikazioak",
"Users" : "Erabiltzaileak",
"Unknown user" : "Erabiltzaile ezezaguna",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Sharing" : "Partekatze",
"Encryption" : "Enkriptazio",
"Additional settings" : "Ezarpen gehiago",
- "Tips & tricks" : "Aholkuak eta trikimailuak",
"%s enter the database username and name." : "%s sartu datu-basearen erabiltzaile-izena eta izena.",
"%s enter the database username." : "%s sartu datu basearen erabiltzaile izena.",
"%s enter the database name." : "%s sartu datu basearen izena.",
@@ -149,6 +146,9 @@ 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.",
- "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an."
+ "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Aholkuak eta trikimailuak"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 016d4e76303..685f7469c59 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -39,12 +39,9 @@
"Apps" : "Aplikazioak",
"Users" : "Erabiltzaileak",
"Unknown user" : "Erabiltzaile ezezaguna",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Sharing" : "Partekatze",
"Encryption" : "Enkriptazio",
"Additional settings" : "Ezarpen gehiago",
- "Tips & tricks" : "Aholkuak eta trikimailuak",
"%s enter the database username and name." : "%s sartu datu-basearen erabiltzaile-izena eta izena.",
"%s enter the database username." : "%s sartu datu basearen erabiltzaile izena.",
"%s enter the database name." : "%s sartu datu basearen izena.",
@@ -147,6 +144,9 @@
"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.",
- "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an."
+ "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Aholkuak eta trikimailuak"
},"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 8a6ee544929..f458f502007 100644
--- a/lib/l10n/fi.js
+++ b/lib/l10n/fi.js
@@ -60,8 +60,6 @@ OC.L10N.register(
"Log out" : "Kirjaudu ulos",
"Users" : "Käyttäjät",
"Unknown user" : "Tuntematon käyttäjä",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Luo",
"Change" : "Muuta",
"Delete" : "Poista",
@@ -71,7 +69,6 @@ OC.L10N.register(
"Security" : "Turvallisuus",
"Encryption" : "Salaus",
"Additional settings" : "Lisäasetukset",
- "Tips & tricks" : "Vinkkejä",
"Personal info" : "Henkilökohtaiset tiedot",
"Mobile & desktop" : "Mobiili ja työpöytä",
"Unlimited" : "Rajoittamaton",
@@ -209,6 +206,9 @@ OC.L10N.register(
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Vinkkejä",
"DB Error: \"%s\"" : "Tietokantavirhe: \"%s\"",
"App '%s' could not be installed!" : "Sovellusta '%s' ei voitu asentaa!",
"Sync clients" : "Synkronointisovellukset"
diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json
index e79386f72b3..e8f169c0ddd 100644
--- a/lib/l10n/fi.json
+++ b/lib/l10n/fi.json
@@ -58,8 +58,6 @@
"Log out" : "Kirjaudu ulos",
"Users" : "Käyttäjät",
"Unknown user" : "Tuntematon käyttäjä",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Luo",
"Change" : "Muuta",
"Delete" : "Poista",
@@ -69,7 +67,6 @@
"Security" : "Turvallisuus",
"Encryption" : "Salaus",
"Additional settings" : "Lisäasetukset",
- "Tips & tricks" : "Vinkkejä",
"Personal info" : "Henkilökohtaiset tiedot",
"Mobile & desktop" : "Mobiili ja työpöytä",
"Unlimited" : "Rajoittamaton",
@@ -207,6 +204,9 @@
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Vinkkejä",
"DB Error: \"%s\"" : "Tietokantavirhe: \"%s\"",
"App '%s' could not be installed!" : "Sovellusta '%s' ei voitu asentaa!",
"Sync clients" : "Synkronointisovellukset"
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 780451c06ea..f966e0e9bf1 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Se déconnecter",
"Users" : "Utilisateurs",
"Unknown user" : "Utilisateur inconnu",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Créer",
"Change" : "Modifier",
"Delete" : "Supprimer",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Sécurité",
"Encryption" : "Chiffrement",
"Additional settings" : "Paramètres supplémentaires",
- "Tips & tricks" : "Trucs et astuces",
"Personal info" : "Informations personnelles",
"Unlimited" : "Illimité",
"Verifying" : "Vérification en cours",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s",
"Personal" : "Personnel",
"Admin" : "Administration",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Trucs et astuces",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index af4451e352f..fe12ac8591b 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -64,8 +64,6 @@
"Log out" : "Se déconnecter",
"Users" : "Utilisateurs",
"Unknown user" : "Utilisateur inconnu",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Créer",
"Change" : "Modifier",
"Delete" : "Supprimer",
@@ -76,7 +74,6 @@
"Security" : "Sécurité",
"Encryption" : "Chiffrement",
"Additional settings" : "Paramètres supplémentaires",
- "Tips & tricks" : "Trucs et astuces",
"Personal info" : "Informations personnelles",
"Unlimited" : "Illimité",
"Verifying" : "Vérification en cours",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s",
"Personal" : "Personnel",
"Admin" : "Administration",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Trucs et astuces",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
diff --git a/lib/l10n/he.js b/lib/l10n/he.js
index 48c455015f2..02e8bf2827e 100644
--- a/lib/l10n/he.js
+++ b/lib/l10n/he.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Users" : "משתמשים",
"Unknown user" : "משתמש לא ידוע",
"Sharing" : "שיתוף",
- "Tips & tricks" : "טיפים וטריקים",
"%s enter the database username and name." : "%s יש להכניס את שם המשתמש ושם מסד הנתונים.",
"%s enter the database username." : "%s נכנס למסד נתוני שמות המשתמשים.",
"%s enter the database name." : "%s נכנס למסד נתוני השמות.",
@@ -166,6 +165,7 @@ OC.L10N.register(
"Storage unauthorized. %s" : "אחסון לא מורשה. %s",
"Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s",
"Storage connection error. %s" : "שגיאת חיבור אחסון. %s",
- "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s"
+ "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s",
+ "Tips & tricks" : "טיפים וטריקים"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");
diff --git a/lib/l10n/he.json b/lib/l10n/he.json
index 25e138b3298..0e8e6413b68 100644
--- a/lib/l10n/he.json
+++ b/lib/l10n/he.json
@@ -36,7 +36,6 @@
"Users" : "משתמשים",
"Unknown user" : "משתמש לא ידוע",
"Sharing" : "שיתוף",
- "Tips & tricks" : "טיפים וטריקים",
"%s enter the database username and name." : "%s יש להכניס את שם המשתמש ושם מסד הנתונים.",
"%s enter the database username." : "%s נכנס למסד נתוני שמות המשתמשים.",
"%s enter the database name." : "%s נכנס למסד נתוני השמות.",
@@ -164,6 +163,7 @@
"Storage unauthorized. %s" : "אחסון לא מורשה. %s",
"Storage incomplete configuration. %s" : "תצורה לא מושלמת של האחסון. %s",
"Storage connection error. %s" : "שגיאת חיבור אחסון. %s",
- "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s"
+ "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s",
+ "Tips & tricks" : "טיפים וטריקים"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
} \ No newline at end of file
diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js
index e3b48107a69..60c3c21b089 100644
--- a/lib/l10n/hu.js
+++ b/lib/l10n/hu.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Kijelentkezés",
"Users" : "Felhasználók",
"Unknown user" : "Ismeretlen felhasználó",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Létrehozás",
"Change" : "Változtatás",
"Delete" : "Törlés",
@@ -77,7 +75,6 @@ OC.L10N.register(
"Security" : "Biztonság",
"Encryption" : "Titkosítás",
"Additional settings" : "További beállítások",
- "Tips & tricks" : "Tippek és trükkök",
"Personal info" : "Személyes információk",
"Unlimited" : "Korlátlan",
"Verifying" : "Ellenőrzés",
@@ -234,6 +231,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
"Personal" : "Személyes",
"Admin" : "Adminisztrátor",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tippek és trükkök",
"DB Error: \"%s\"" : "Adatbázis hiba: \"%s\"",
"Offending command was: \"%s\"" : "A hibát ez a parancs okozta: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "A hibát okozó parancs ez volt: \"%s\", login név: %s, jelszó: %s",
diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json
index efcbe56fda7..42e219a11f5 100644
--- a/lib/l10n/hu.json
+++ b/lib/l10n/hu.json
@@ -64,8 +64,6 @@
"Log out" : "Kijelentkezés",
"Users" : "Felhasználók",
"Unknown user" : "Ismeretlen felhasználó",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Létrehozás",
"Change" : "Változtatás",
"Delete" : "Törlés",
@@ -75,7 +73,6 @@
"Security" : "Biztonság",
"Encryption" : "Titkosítás",
"Additional settings" : "További beállítások",
- "Tips & tricks" : "Tippek és trükkök",
"Personal info" : "Személyes információk",
"Unlimited" : "Korlátlan",
"Verifying" : "Ellenőrzés",
@@ -232,6 +229,9 @@
"Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
"Personal" : "Személyes",
"Admin" : "Adminisztrátor",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tippek és trükkök",
"DB Error: \"%s\"" : "Adatbázis hiba: \"%s\"",
"Offending command was: \"%s\"" : "A hibát ez a parancs okozta: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "A hibát okozó parancs ez volt: \"%s\", login név: %s, jelszó: %s",
diff --git a/lib/l10n/is.js b/lib/l10n/is.js
index 942a318d2ee..c9beec4994d 100644
--- a/lib/l10n/is.js
+++ b/lib/l10n/is.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Skrá út",
"Users" : "Notendur",
"Unknown user" : "Óþekktur notandi",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Grunnstillingar",
"Sharing" : "Deiling",
"Security" : "Öryggi",
"Encryption" : "Dulritun",
"Additional settings" : "Valfrjálsar stillingar",
- "Tips & tricks" : "Ábendingar og góð ráð",
"Personal info" : "Persónulegar upplýsingar",
"Unlimited" : "Ótakmarkað",
"Verifying" : "Sannreyni",
@@ -227,6 +224,9 @@ OC.L10N.register(
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Ábendingar og góð ráð",
"Sync clients" : "Samstilla biðlara"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/lib/l10n/is.json b/lib/l10n/is.json
index dff884ba9a6..bf7eea16be6 100644
--- a/lib/l10n/is.json
+++ b/lib/l10n/is.json
@@ -63,14 +63,11 @@
"Log out" : "Skrá út",
"Users" : "Notendur",
"Unknown user" : "Óþekktur notandi",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Grunnstillingar",
"Sharing" : "Deiling",
"Security" : "Öryggi",
"Encryption" : "Dulritun",
"Additional settings" : "Valfrjálsar stillingar",
- "Tips & tricks" : "Ábendingar og góð ráð",
"Personal info" : "Persónulegar upplýsingar",
"Unlimited" : "Ótakmarkað",
"Verifying" : "Sannreyni",
@@ -225,6 +222,9 @@
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Ábendingar og góð ráð",
"Sync clients" : "Samstilla biðlara"
},"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 685f912f87d..3d10a5fa006 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Esci",
"Users" : "Utenti",
"Unknown user" : "Utente sconosciuto",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crea",
"Change" : "Modifica",
"Delete" : "Elimina",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Sicurezza",
"Encryption" : "Cifratura",
"Additional settings" : "Impostazioni aggiuntive",
- "Tips & tricks" : "Suggerimenti e trucchi",
"Personal info" : "Informazioni personali",
"Mobile & desktop" : "Mobile e desktop",
"Unlimited" : "Illimitato",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s",
"Personal" : "Personale",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Suggerimenti e trucchi",
"DB Error: \"%s\"" : "Errore DB: \"%s\"",
"Offending command was: \"%s\"" : "Il comando non consentito era: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Il comando non consentito era: \"%s\", nome: %s, password: %s",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 78124cac485..208dda698cb 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -64,8 +64,6 @@
"Log out" : "Esci",
"Users" : "Utenti",
"Unknown user" : "Utente sconosciuto",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Crea",
"Change" : "Modifica",
"Delete" : "Elimina",
@@ -76,7 +74,6 @@
"Security" : "Sicurezza",
"Encryption" : "Cifratura",
"Additional settings" : "Impostazioni aggiuntive",
- "Tips & tricks" : "Suggerimenti e trucchi",
"Personal info" : "Informazioni personali",
"Mobile & desktop" : "Mobile e desktop",
"Unlimited" : "Illimitato",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s",
"Personal" : "Personale",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Suggerimenti e trucchi",
"DB Error: \"%s\"" : "Errore DB: \"%s\"",
"Offending command was: \"%s\"" : "Il comando non consentito era: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Il comando non consentito era: \"%s\", nome: %s, password: %s",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 394751a777d..7821322dd24 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "ログアウト",
"Users" : "ユーザー",
"Unknown user" : "不明なユーザー",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "作成",
"Change" : "変更",
"Delete" : "削除",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "セキュリティ",
"Encryption" : "暗号化",
"Additional settings" : "追加設定",
- "Tips & tricks" : "ヒントとコツ",
"Personal info" : "個人情報",
"Unlimited" : "無制限",
"Verifying" : "検証中",
@@ -89,8 +86,8 @@ OC.L10N.register(
"%s enter the database name." : "%s のデータベース名を入力してください。",
"%s you may not use dots in the database name" : "%s ではデータベース名にドットを利用できないかもしれません。",
"Oracle connection could not be established" : "Oracleへの接続が確立できませんでした。",
- "Oracle username and/or password not valid" : "Oracleのユーザー名もしくはパスワードは有効ではありません",
- "PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名もしくはパスワードは有効ではありません",
+ "Oracle username and/or password not valid" : "Oracleのユーザー名またはパスワードが有効ではありません",
+ "PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名またはパスワードが有効ではありません",
"You need to enter details of an existing account." : "既存のアカウントの詳細を入力してください。",
"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は正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
@@ -112,7 +109,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。",
"You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です",
"Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。",
- "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
+ "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有は作成できません。",
"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 には適用できません。",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "有効期限を設定できません。共有開始から %s 以降に有効期限を設定することはできません。",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s",
"Personal" : "パーソナル",
"Admin" : "管理者",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "ヒントとコツ",
"DB Error: \"%s\"" : "DBエラー: \"%s\"",
"Offending command was: \"%s\"" : "問題のあるコマンド: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "問題のあるコマンド: \"%s\", name: %s, password: %s",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 773c5bddb9b..9d5049baa79 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -64,8 +64,6 @@
"Log out" : "ログアウト",
"Users" : "ユーザー",
"Unknown user" : "不明なユーザー",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "作成",
"Change" : "変更",
"Delete" : "削除",
@@ -76,7 +74,6 @@
"Security" : "セキュリティ",
"Encryption" : "暗号化",
"Additional settings" : "追加設定",
- "Tips & tricks" : "ヒントとコツ",
"Personal info" : "個人情報",
"Unlimited" : "無制限",
"Verifying" : "検証中",
@@ -87,8 +84,8 @@
"%s enter the database name." : "%s のデータベース名を入力してください。",
"%s you may not use dots in the database name" : "%s ではデータベース名にドットを利用できないかもしれません。",
"Oracle connection could not be established" : "Oracleへの接続が確立できませんでした。",
- "Oracle username and/or password not valid" : "Oracleのユーザー名もしくはパスワードは有効ではありません",
- "PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名もしくはパスワードは有効ではありません",
+ "Oracle username and/or password not valid" : "Oracleのユーザー名またはパスワードが有効ではありません",
+ "PostgreSQL username and/or password not valid" : "PostgreSQLのユーザー名またはパスワードが有効ではありません",
"You need to enter details of an existing account." : "既存のアカウントの詳細を入力してください。",
"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は正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
@@ -110,7 +107,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。",
"You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です",
"Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。",
- "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
+ "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有は作成できません。",
"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 には適用できません。",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "有効期限を設定できません。共有開始から %s 以降に有効期限を設定することはできません。",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s",
"Personal" : "パーソナル",
"Admin" : "管理者",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "ヒントとコツ",
"DB Error: \"%s\"" : "DBエラー: \"%s\"",
"Offending command was: \"%s\"" : "問題のあるコマンド: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "問題のあるコマンド: \"%s\", name: %s, password: %s",
diff --git a/lib/l10n/ka_GE.js b/lib/l10n/ka_GE.js
index e12e58d5ee0..db25f68a2dd 100644
--- a/lib/l10n/ka_GE.js
+++ b/lib/l10n/ka_GE.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "გასვლა",
"Users" : "მომხმარებლები",
"Unknown user" : "ამოუცნობი მომხმარებელი",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "შექმნა",
"Change" : "შეცვლა",
"Delete" : "გაუქმება",
@@ -77,7 +75,6 @@ OC.L10N.register(
"Security" : "უსაფრთხოება",
"Encryption" : "შიფრაცია",
"Additional settings" : "დამატებითი პარამეტრები",
- "Tips & tricks" : "რჩევები და ხრიკები",
"Personal info" : "პირადი ინფორმაცია",
"Unlimited" : "ულიმიტო",
"Verifying" : "მოწმდება",
@@ -234,6 +231,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "საცავის კავშირის დროის ამოწურვა. %s",
"Personal" : "პირადი",
"Admin" : "ადმინისტრატორი",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "რჩევები და ხრიკები",
"DB Error: \"%s\"" : "DB შეცდომა: \"%s\"",
"Offending command was: \"%s\"" : "შემაშფოთებელი ბრძანება იყო: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "შემაშფოთებელი ბრძანება იყო: \"%s\", სახელი: %s, პაროლი: %s",
diff --git a/lib/l10n/ka_GE.json b/lib/l10n/ka_GE.json
index 5ed15c191d5..2e81294b48c 100644
--- a/lib/l10n/ka_GE.json
+++ b/lib/l10n/ka_GE.json
@@ -64,8 +64,6 @@
"Log out" : "გასვლა",
"Users" : "მომხმარებლები",
"Unknown user" : "ამოუცნობი მომხმარებელი",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "შექმნა",
"Change" : "შეცვლა",
"Delete" : "გაუქმება",
@@ -75,7 +73,6 @@
"Security" : "უსაფრთხოება",
"Encryption" : "შიფრაცია",
"Additional settings" : "დამატებითი პარამეტრები",
- "Tips & tricks" : "რჩევები და ხრიკები",
"Personal info" : "პირადი ინფორმაცია",
"Unlimited" : "ულიმიტო",
"Verifying" : "მოწმდება",
@@ -232,6 +229,9 @@
"Storage connection timeout. %s" : "საცავის კავშირის დროის ამოწურვა. %s",
"Personal" : "პირადი",
"Admin" : "ადმინისტრატორი",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "რჩევები და ხრიკები",
"DB Error: \"%s\"" : "DB შეცდომა: \"%s\"",
"Offending command was: \"%s\"" : "შემაშფოთებელი ბრძანება იყო: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "შემაშფოთებელი ბრძანება იყო: \"%s\", სახელი: %s, პაროლი: %s",
diff --git a/lib/l10n/ko.js b/lib/l10n/ko.js
index 4138e5df955..43c6f8baf5a 100644
--- a/lib/l10n/ko.js
+++ b/lib/l10n/ko.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "로그아웃",
"Users" : "사용자",
"Unknown user" : "알려지지 않은 사용자",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "기본 설정",
"Sharing" : "공유",
"Security" : "보안",
"Encryption" : "암호화",
"Additional settings" : "고급 설정",
- "Tips & tricks" : "팁과 추가 정보",
"Personal info" : "개인 정보",
"Unlimited" : "무제한",
"Verifying" : "검사 중",
@@ -229,6 +226,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "저장소 연결 시간이 초과되었습니다. %s",
"Personal" : "개인",
"Admin" : "관리자",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "팁과 추가 정보",
"DB Error: \"%s\"" : "DB 오류: \"%s\"",
"Offending command was: \"%s\"" : "잘못된 명령: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "잘못된 명령: \"%s\", 이름: %s, 암호: %s",
diff --git a/lib/l10n/ko.json b/lib/l10n/ko.json
index 3447f65132d..9356de01a07 100644
--- a/lib/l10n/ko.json
+++ b/lib/l10n/ko.json
@@ -63,14 +63,11 @@
"Log out" : "로그아웃",
"Users" : "사용자",
"Unknown user" : "알려지지 않은 사용자",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "기본 설정",
"Sharing" : "공유",
"Security" : "보안",
"Encryption" : "암호화",
"Additional settings" : "고급 설정",
- "Tips & tricks" : "팁과 추가 정보",
"Personal info" : "개인 정보",
"Unlimited" : "무제한",
"Verifying" : "검사 중",
@@ -227,6 +224,9 @@
"Storage connection timeout. %s" : "저장소 연결 시간이 초과되었습니다. %s",
"Personal" : "개인",
"Admin" : "관리자",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "팁과 추가 정보",
"DB Error: \"%s\"" : "DB 오류: \"%s\"",
"Offending command was: \"%s\"" : "잘못된 명령: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "잘못된 명령: \"%s\", 이름: %s, 암호: %s",
diff --git a/lib/l10n/lb.js b/lib/l10n/lb.js
index eab1bc9c73f..8b44be891f4 100644
--- a/lib/l10n/lb.js
+++ b/lib/l10n/lb.js
@@ -21,9 +21,9 @@ OC.L10N.register(
"__language_name__" : "Lëtzebuergesch",
"Apps" : "Applikatiounen",
"Users" : "Benotzer",
- "Tips & tricks" : "Tipps an Tricks",
"Set an admin password." : "Admin Passwuert setzen",
"%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt",
- "Authentication error" : "Authentifikatioun's Fehler"
+ "Authentication error" : "Authentifikatioun's Fehler",
+ "Tips & tricks" : "Tipps an Tricks"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/lb.json b/lib/l10n/lb.json
index e818fbaaadb..28503f3ede5 100644
--- a/lib/l10n/lb.json
+++ b/lib/l10n/lb.json
@@ -19,9 +19,9 @@
"__language_name__" : "Lëtzebuergesch",
"Apps" : "Applikatiounen",
"Users" : "Benotzer",
- "Tips & tricks" : "Tipps an Tricks",
"Set an admin password." : "Admin Passwuert setzen",
"%s shared »%s« with you" : "Den/D' %s huet »%s« mat dir gedeelt",
- "Authentication error" : "Authentifikatioun's Fehler"
+ "Authentication error" : "Authentifikatioun's Fehler",
+ "Tips & tricks" : "Tipps an Tricks"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/lt_LT.js b/lib/l10n/lt_LT.js
index aa9f3aa1b49..08b0f6527b8 100644
--- a/lib/l10n/lt_LT.js
+++ b/lib/l10n/lt_LT.js
@@ -50,8 +50,6 @@ OC.L10N.register(
"Log out" : "Atsijungti",
"Users" : "Naudotojai",
"Unknown user" : "Nežinomas naudotojas",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Sukurti",
"Delete" : "Ištrinti",
"Overview" : "Apžvalga",
@@ -60,7 +58,6 @@ OC.L10N.register(
"Security" : "Saugumas",
"Encryption" : "Šifravimas",
"Additional settings" : "Papildomi nustatymai",
- "Tips & tricks" : "Patarimai ir gudrybės",
"Personal info" : "Asmeninė informacija",
"Unlimited" : "Neribota",
"Verifying" : "Tikrinimas",
@@ -203,6 +200,9 @@ OC.L10N.register(
"Storage connection error. %s" : "Saugyklos sujungimo ryšio klaida. %s",
"Storage is temporarily not available" : "Saugykla yra laikinai neprieinama",
"Storage connection timeout. %s" : "Sujungimo su saugykla laikas baigėsi. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Patarimai ir gudrybės",
"DB Error: \"%s\"" : "DB klaida: \"%s\"",
"Files can't be shared with delete permissions" : "Failai negali būti bendrinami su ištrynimo leidimais",
"Files can't be shared with create permissions" : "Failai negali būti bendrinami su sukūrimo leidimais",
diff --git a/lib/l10n/lt_LT.json b/lib/l10n/lt_LT.json
index 85268029318..2aa2b3ee25b 100644
--- a/lib/l10n/lt_LT.json
+++ b/lib/l10n/lt_LT.json
@@ -48,8 +48,6 @@
"Log out" : "Atsijungti",
"Users" : "Naudotojai",
"Unknown user" : "Nežinomas naudotojas",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Sukurti",
"Delete" : "Ištrinti",
"Overview" : "Apžvalga",
@@ -58,7 +56,6 @@
"Security" : "Saugumas",
"Encryption" : "Šifravimas",
"Additional settings" : "Papildomi nustatymai",
- "Tips & tricks" : "Patarimai ir gudrybės",
"Personal info" : "Asmeninė informacija",
"Unlimited" : "Neribota",
"Verifying" : "Tikrinimas",
@@ -201,6 +198,9 @@
"Storage connection error. %s" : "Saugyklos sujungimo ryšio klaida. %s",
"Storage is temporarily not available" : "Saugykla yra laikinai neprieinama",
"Storage connection timeout. %s" : "Sujungimo su saugykla laikas baigėsi. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Patarimai ir gudrybės",
"DB Error: \"%s\"" : "DB klaida: \"%s\"",
"Files can't be shared with delete permissions" : "Failai negali būti bendrinami su ištrynimo leidimais",
"Files can't be shared with create permissions" : "Failai negali būti bendrinami su sukūrimo leidimais",
diff --git a/lib/l10n/lv.js b/lib/l10n/lv.js
index 5688cc91388..aa175d49ee7 100644
--- a/lib/l10n/lv.js
+++ b/lib/l10n/lv.js
@@ -40,11 +40,9 @@ OC.L10N.register(
"Apps" : "Programmas",
"Users" : "Lietotāji",
"Unknown user" : "Nezināms lietotājs",
- "APCu" : "APCu",
"Sharing" : "Koplietošana",
"Encryption" : "Šifrēšana",
"Additional settings" : "Papildu iestatījumi",
- "Tips & tricks" : "Padomi un ieteikumi",
"%s enter the database username." : "%s ievadiet datubāzes lietotājvārdu.",
"%s enter the database name." : "%s ievadiet datubāzes nosaukumu.",
"%s you may not use dots in the database name" : "%s datubāžu nosaukumos nedrīkst izmantot punktus",
@@ -124,6 +122,8 @@ OC.L10N.register(
"Storage incomplete configuration. %s" : "Storage incomplete configuration. %s",
"Storage connection error. %s" : "Datu savienojuma kļūda. %s",
"Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
- "Storage connection timeout. %s" : "Datu savienojuma taimauts. %s"
+ "Storage connection timeout. %s" : "Datu savienojuma taimauts. %s",
+ "APCu" : "APCu",
+ "Tips & tricks" : "Padomi un ieteikumi"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/lib/l10n/lv.json b/lib/l10n/lv.json
index c31e8f7dc3c..a48d497552c 100644
--- a/lib/l10n/lv.json
+++ b/lib/l10n/lv.json
@@ -38,11 +38,9 @@
"Apps" : "Programmas",
"Users" : "Lietotāji",
"Unknown user" : "Nezināms lietotājs",
- "APCu" : "APCu",
"Sharing" : "Koplietošana",
"Encryption" : "Šifrēšana",
"Additional settings" : "Papildu iestatījumi",
- "Tips & tricks" : "Padomi un ieteikumi",
"%s enter the database username." : "%s ievadiet datubāzes lietotājvārdu.",
"%s enter the database name." : "%s ievadiet datubāzes nosaukumu.",
"%s you may not use dots in the database name" : "%s datubāžu nosaukumos nedrīkst izmantot punktus",
@@ -122,6 +120,8 @@
"Storage incomplete configuration. %s" : "Storage incomplete configuration. %s",
"Storage connection error. %s" : "Datu savienojuma kļūda. %s",
"Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
- "Storage connection timeout. %s" : "Datu savienojuma taimauts. %s"
+ "Storage connection timeout. %s" : "Datu savienojuma taimauts. %s",
+ "APCu" : "APCu",
+ "Tips & tricks" : "Padomi un ieteikumi"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js
index e1f122ddb12..f8a2efe333a 100644
--- a/lib/l10n/nb.js
+++ b/lib/l10n/nb.js
@@ -65,8 +65,6 @@ OC.L10N.register(
"Log out" : "Logg ut",
"Users" : "Brukere",
"Unknown user" : "Ukjent bruker",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Opprett",
"Change" : "Endre",
"Delete" : "Slett",
@@ -76,7 +74,6 @@ OC.L10N.register(
"Security" : "Sikkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Flere innstillinger",
- "Tips & tricks" : "Tips og triks",
"Personal info" : "Personlig informasjon",
"Unlimited" : "Ubegrenset",
"Verifying" : "Bekrefter",
@@ -233,6 +230,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
"Personal" : "Personlig",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips og triks",
"DB Error: \"%s\"" : "Databasefeil: \"%s\"",
"Offending command was: \"%s\"" : "Kommandoen som mislyktes: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Kommandoen som mislyktes var: \"%s\", navn: %s, passord: %s",
diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json
index 3f65db55698..8333ef492ef 100644
--- a/lib/l10n/nb.json
+++ b/lib/l10n/nb.json
@@ -63,8 +63,6 @@
"Log out" : "Logg ut",
"Users" : "Brukere",
"Unknown user" : "Ukjent bruker",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Opprett",
"Change" : "Endre",
"Delete" : "Slett",
@@ -74,7 +72,6 @@
"Security" : "Sikkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Flere innstillinger",
- "Tips & tricks" : "Tips og triks",
"Personal info" : "Personlig informasjon",
"Unlimited" : "Ubegrenset",
"Verifying" : "Bekrefter",
@@ -231,6 +228,9 @@
"Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
"Personal" : "Personlig",
"Admin" : "Administrator",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips og triks",
"DB Error: \"%s\"" : "Databasefeil: \"%s\"",
"Offending command was: \"%s\"" : "Kommandoen som mislyktes: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Kommandoen som mislyktes var: \"%s\", navn: %s, passord: %s",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index fe37c608bfe..512924b2416 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Uitloggen",
"Users" : "Gebruikers",
"Unknown user" : "Onbekende gebruiker",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Aanmaken",
"Change" : "Wijzigen",
"Delete" : "Verwijderen",
@@ -77,7 +75,6 @@ OC.L10N.register(
"Security" : "Beveiliging",
"Encryption" : "Versleuteling",
"Additional settings" : "Aanvullende instellingen",
- "Tips & tricks" : "Tips & trucs",
"Personal info" : "Persoonlijke informatie",
"Unlimited" : "Ongelimiteerd",
"Verifying" : "Verifiëren",
@@ -234,6 +231,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Opslag verbinding time-out. %s",
"Personal" : "Persoonlijk",
"Admin" : "Beheerder",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & trucs",
"DB Error: \"%s\"" : "DB Fout: \"%s\"",
"Offending command was: \"%s\"" : "Onjuiste commando was: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Onjuiste commando was: \"%s\", naam: %s, wachtwoord: %s",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 50e91c80a7c..8e8cd0ee92c 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -64,8 +64,6 @@
"Log out" : "Uitloggen",
"Users" : "Gebruikers",
"Unknown user" : "Onbekende gebruiker",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Aanmaken",
"Change" : "Wijzigen",
"Delete" : "Verwijderen",
@@ -75,7 +73,6 @@
"Security" : "Beveiliging",
"Encryption" : "Versleuteling",
"Additional settings" : "Aanvullende instellingen",
- "Tips & tricks" : "Tips & trucs",
"Personal info" : "Persoonlijke informatie",
"Unlimited" : "Ongelimiteerd",
"Verifying" : "Verifiëren",
@@ -232,6 +229,9 @@
"Storage connection timeout. %s" : "Opslag verbinding time-out. %s",
"Personal" : "Persoonlijk",
"Admin" : "Beheerder",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & trucs",
"DB Error: \"%s\"" : "DB Fout: \"%s\"",
"Offending command was: \"%s\"" : "Onjuiste commando was: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Onjuiste commando was: \"%s\", naam: %s, wachtwoord: %s",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index 658d67184d9..de999209f55 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -60,14 +60,11 @@ OC.L10N.register(
"Log out" : "Wyloguj",
"Users" : "Użytkownicy",
"Unknown user" : "Nieznany użytkownik",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Ustawienia podstawowe",
"Sharing" : "Udostępnianie",
"Security" : "Bepieczeństwo",
"Encryption" : "Szyfrowanie",
"Additional settings" : "Ustawienia dodatkowe",
- "Tips & tricks" : "Porady i wskazówki",
"Personal info" : "Informacje Osobiste",
"Unlimited" : "Nielimitowane",
"Verifying" : "Weryfikacja",
@@ -222,6 +219,9 @@ OC.L10N.register(
"Storage connection error. %s" : "Błąd połączenia z magazynem. %s",
"Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny",
"Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Porady i wskazówki",
"Sync clients" : "Synchronizuj z klientami"
},
"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 eb1379a2ef7..85777950c2e 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -58,14 +58,11 @@
"Log out" : "Wyloguj",
"Users" : "Użytkownicy",
"Unknown user" : "Nieznany użytkownik",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Ustawienia podstawowe",
"Sharing" : "Udostępnianie",
"Security" : "Bepieczeństwo",
"Encryption" : "Szyfrowanie",
"Additional settings" : "Ustawienia dodatkowe",
- "Tips & tricks" : "Porady i wskazówki",
"Personal info" : "Informacje Osobiste",
"Unlimited" : "Nielimitowane",
"Verifying" : "Weryfikacja",
@@ -220,6 +217,9 @@
"Storage connection error. %s" : "Błąd połączenia z magazynem. %s",
"Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny",
"Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Porady i wskazówki",
"Sync clients" : "Synchronizuj z klientami"
},"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 df736aba1f6..1eb6e6c59f2 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Sair",
"Users" : "Usuários",
"Unknown user" : "Usuário desconhecido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Criar",
"Change" : "Mudar",
"Delete" : "Excluir",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Segurança",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dicas & truques",
"Personal info" : "Informação Pessoal",
"Mobile & desktop" : "Móvel & desktop",
"Unlimited" : "Ilimitado",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s",
"Personal" : "Pessoal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Dicas & truques",
"DB Error: \"%s\"" : "Erro no BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando incorreto foi: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando incorreto foi: \"%s\", nome: %s, senha: %s",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 0e5b4792d58..7b15102480c 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -64,8 +64,6 @@
"Log out" : "Sair",
"Users" : "Usuários",
"Unknown user" : "Usuário desconhecido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Criar",
"Change" : "Mudar",
"Delete" : "Excluir",
@@ -76,7 +74,6 @@
"Security" : "Segurança",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dicas & truques",
"Personal info" : "Informação Pessoal",
"Mobile & desktop" : "Móvel & desktop",
"Unlimited" : "Ilimitado",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s",
"Personal" : "Pessoal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Dicas & truques",
"DB Error: \"%s\"" : "Erro no BD: \"%s\"",
"Offending command was: \"%s\"" : "Comando incorreto foi: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Comando incorreto foi: \"%s\", nome: %s, senha: %s",
diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js
index 8641ba1f250..e2a3388743d 100644
--- a/lib/l10n/pt_PT.js
+++ b/lib/l10n/pt_PT.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Sair",
"Users" : "Utilizadores",
"Unknown user" : "Utilizador desconhecido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Definições básicas",
"Sharing" : "Partilhar",
"Security" : "Segurança",
"Encryption" : "Encriptação",
"Additional settings" : "Definições adicionais",
- "Tips & tricks" : "Dicas e truques",
"Personal info" : "Informação pessoal",
"Unlimited" : "Ilimitado",
"Verifying" : "A verificar",
@@ -229,6 +226,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s",
"Personal" : "Pessoal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Dicas e truques",
"DB Error: \"%s\"" : "Erro de BD:\"%s\"",
"Offending command was: \"%s\"" : "O comando transgressor foi:\"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "O comando transgressor foi: \"%s\", nome: %s, password: %s",
diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json
index ece9df88d9f..64b68498b86 100644
--- a/lib/l10n/pt_PT.json
+++ b/lib/l10n/pt_PT.json
@@ -63,14 +63,11 @@
"Log out" : "Sair",
"Users" : "Utilizadores",
"Unknown user" : "Utilizador desconhecido",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Definições básicas",
"Sharing" : "Partilhar",
"Security" : "Segurança",
"Encryption" : "Encriptação",
"Additional settings" : "Definições adicionais",
- "Tips & tricks" : "Dicas e truques",
"Personal info" : "Informação pessoal",
"Unlimited" : "Ilimitado",
"Verifying" : "A verificar",
@@ -227,6 +224,9 @@
"Storage connection timeout. %s" : "Tempo de ligação ao armazenamento expirou. %s",
"Personal" : "Pessoal",
"Admin" : "Admin",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Dicas e truques",
"DB Error: \"%s\"" : "Erro de BD:\"%s\"",
"Offending command was: \"%s\"" : "O comando transgressor foi:\"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "O comando transgressor foi: \"%s\", nome: %s, password: %s",
diff --git a/lib/l10n/ro.js b/lib/l10n/ro.js
index 8f8c44b4808..cf1fc4c1e45 100644
--- a/lib/l10n/ro.js
+++ b/lib/l10n/ro.js
@@ -46,7 +46,6 @@ OC.L10N.register(
"Security" : "Securitate",
"Encryption" : "Încriptare",
"Additional settings" : "Setări adiționale",
- "Tips & tricks" : "Sfaturi & trucuri",
"Personal info" : "Informații personale",
"Verifying …" : "Se verifică ...",
"Verify" : "Verifică",
@@ -139,6 +138,7 @@ OC.L10N.register(
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
- "Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă"
+ "Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
+ "Tips & tricks" : "Sfaturi & trucuri"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/lib/l10n/ro.json b/lib/l10n/ro.json
index b55b524df83..102f1bb5f39 100644
--- a/lib/l10n/ro.json
+++ b/lib/l10n/ro.json
@@ -44,7 +44,6 @@
"Security" : "Securitate",
"Encryption" : "Încriptare",
"Additional settings" : "Setări adiționale",
- "Tips & tricks" : "Sfaturi & trucuri",
"Personal info" : "Informații personale",
"Verifying …" : "Se verifică ...",
"Verify" : "Verifică",
@@ -137,6 +136,7 @@
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
- "Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă"
+ "Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
+ "Tips & tricks" : "Sfaturi & trucuri"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
} \ No newline at end of file
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 02da6357743..bbb94f61a90 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Выйти",
"Users" : "Пользователи",
"Unknown user" : "Неизвестный пользователь",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Создать",
"Change" : "Изменить",
"Delete" : "Удалить",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Безопасность",
"Encryption" : "Шифрование",
"Additional settings" : "Дополнительные настройки",
- "Tips & tricks" : "Советы и трюки",
"Personal info" : "Личная информация",
"Unlimited" : "Неограничено",
"Verifying" : "Производится проверка",
@@ -235,6 +232,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s",
"Personal" : "Личное",
"Admin" : "Администратор",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Советы и трюки",
"DB Error: \"%s\"" : "Ошибка БД: «%s»",
"Offending command was: \"%s\"" : "Нарушившая команда была: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Нарушившая команда была: \"%s\", имя: %s, пароль: %s",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index cfa8ab90533..1a3a632d21b 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -64,8 +64,6 @@
"Log out" : "Выйти",
"Users" : "Пользователи",
"Unknown user" : "Неизвестный пользователь",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Создать",
"Change" : "Изменить",
"Delete" : "Удалить",
@@ -76,7 +74,6 @@
"Security" : "Безопасность",
"Encryption" : "Шифрование",
"Additional settings" : "Дополнительные настройки",
- "Tips & tricks" : "Советы и трюки",
"Personal info" : "Личная информация",
"Unlimited" : "Неограничено",
"Verifying" : "Производится проверка",
@@ -233,6 +230,9 @@
"Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s",
"Personal" : "Личное",
"Admin" : "Администратор",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Советы и трюки",
"DB Error: \"%s\"" : "Ошибка БД: «%s»",
"Offending command was: \"%s\"" : "Нарушившая команда была: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Нарушившая команда была: \"%s\", имя: %s, пароль: %s",
diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js
index da96d01229f..596a3e0dda9 100644
--- a/lib/l10n/sk.js
+++ b/lib/l10n/sk.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Odhlásiť sa",
"Users" : "Používatelia",
"Unknown user" : "Neznámy používateľ",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Vytvoriť",
"Change" : "Zmeniť",
"Delete" : "Zmazať",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Zabezpečenie",
"Encryption" : "Šifrovanie",
"Additional settings" : "Ďalšie nastavenia",
- "Tips & tricks" : "Tipy a triky",
"Personal info" : "Osobné informácie",
"Mobile & desktop" : "Mobil a počítač",
"Unlimited" : "Neobmedzené",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Vypršanie pripojenia k úložisku. %s",
"Personal" : "Osobné",
"Admin" : "Admi",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipy a triky",
"DB Error: \"%s\"" : "Chyba databázy: \"%s\"",
"Offending command was: \"%s\"" : "Problémový príkaz bol: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Problémový príkaz bol: \"%s\", meno: %s, heslo: %s",
diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json
index 3f95fc88660..1ee63b2641d 100644
--- a/lib/l10n/sk.json
+++ b/lib/l10n/sk.json
@@ -64,8 +64,6 @@
"Log out" : "Odhlásiť sa",
"Users" : "Používatelia",
"Unknown user" : "Neznámy používateľ",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Vytvoriť",
"Change" : "Zmeniť",
"Delete" : "Zmazať",
@@ -76,7 +74,6 @@
"Security" : "Zabezpečenie",
"Encryption" : "Šifrovanie",
"Additional settings" : "Ďalšie nastavenia",
- "Tips & tricks" : "Tipy a triky",
"Personal info" : "Osobné informácie",
"Mobile & desktop" : "Mobil a počítač",
"Unlimited" : "Neobmedzené",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Vypršanie pripojenia k úložisku. %s",
"Personal" : "Osobné",
"Admin" : "Admi",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tipy a triky",
"DB Error: \"%s\"" : "Chyba databázy: \"%s\"",
"Offending command was: \"%s\"" : "Problémový príkaz bol: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Problémový príkaz bol: \"%s\", meno: %s, heslo: %s",
diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js
index 833731948bf..e5bfe2028b6 100644
--- a/lib/l10n/sl.js
+++ b/lib/l10n/sl.js
@@ -46,7 +46,6 @@ OC.L10N.register(
"Unknown user" : "Neznan uporabnik",
"Basic settings" : "Osnovne nastavitve",
"Security" : "Varnost",
- "Tips & tricks" : "Triki in nasveti",
"%s enter the database username and name." : "%s - vnos uporabniškega imena in imena podatkovne zbirke.",
"%s enter the database username." : "%s - vnos uporabniškega imena podatkovne zbirke.",
"%s enter the database name." : "%s - vnos imena podatkovne zbirke.",
@@ -130,6 +129,7 @@ OC.L10N.register(
"Storage unauthorized. %s" : "Dostop do shrambe ni overjen. %s",
"Storage incomplete configuration. %s" : "Nepopolna nastavitev shrambe. %s",
"Storage connection error. %s" : "Napaka povezave do shrambe. %s",
- "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s"
+ "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s",
+ "Tips & tricks" : "Triki in nasveti"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json
index ab789d898f2..f6e025c4077 100644
--- a/lib/l10n/sl.json
+++ b/lib/l10n/sl.json
@@ -44,7 +44,6 @@
"Unknown user" : "Neznan uporabnik",
"Basic settings" : "Osnovne nastavitve",
"Security" : "Varnost",
- "Tips & tricks" : "Triki in nasveti",
"%s enter the database username and name." : "%s - vnos uporabniškega imena in imena podatkovne zbirke.",
"%s enter the database username." : "%s - vnos uporabniškega imena podatkovne zbirke.",
"%s enter the database name." : "%s - vnos imena podatkovne zbirke.",
@@ -128,6 +127,7 @@
"Storage unauthorized. %s" : "Dostop do shrambe ni overjen. %s",
"Storage incomplete configuration. %s" : "Nepopolna nastavitev shrambe. %s",
"Storage connection error. %s" : "Napaka povezave do shrambe. %s",
- "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s"
+ "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s",
+ "Tips & tricks" : "Triki in nasveti"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
index 233795e19ad..ffb84891648 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -56,14 +56,11 @@ OC.L10N.register(
"Log out" : "Shkyçu",
"Users" : "Përdorues",
"Unknown user" : "Përdorues i panjohur",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Konfigurime bazike",
"Sharing" : "Ndarja",
"Security" : "Siguria",
"Encryption" : "Enkriptimi",
"Additional settings" : "Konfigurime shtesë",
- "Tips & tricks" : "Këshilla dhe rrengje",
"Personal info" : "Informacion personal",
"Unlimited" : "E palimituar",
"Verifying" : "Duke e verifikuar",
@@ -217,6 +214,9 @@ 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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Këshilla dhe rrengje",
"Sync clients" : "Klientë të sikronizuar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index fbb15454ef8..edf0e868afb 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -54,14 +54,11 @@
"Log out" : "Shkyçu",
"Users" : "Përdorues",
"Unknown user" : "Përdorues i panjohur",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Konfigurime bazike",
"Sharing" : "Ndarja",
"Security" : "Siguria",
"Encryption" : "Enkriptimi",
"Additional settings" : "Konfigurime shtesë",
- "Tips & tricks" : "Këshilla dhe rrengje",
"Personal info" : "Informacion personal",
"Unlimited" : "E palimituar",
"Verifying" : "Duke e verifikuar",
@@ -215,6 +212,9 @@
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Këshilla dhe rrengje",
"Sync clients" : "Klientë të sikronizuar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js
index 19c2deef663..dd22cced58f 100644
--- a/lib/l10n/sr.js
+++ b/lib/l10n/sr.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Одјава",
"Users" : "Корисници",
"Unknown user" : "Непознат корисник",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Направи",
"Change" : "Измени",
"Delete" : "Обриши",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Безбедност",
"Encryption" : "Шифровање",
"Additional settings" : "Додатне поставке",
- "Tips & tricks" : "Савети и трикови",
"Personal info" : "Лични подаци",
"Mobile & desktop" : "Мобилни и десктоп",
"Unlimited" : "Неограничено",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Прекорачено време за повезивање на складиште. %s",
"Personal" : "Лично",
"Admin" : "Администратор",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Савети и трикови",
"DB Error: \"%s\"" : "Грешка базе података: \"%s\"",
"Offending command was: \"%s\"" : "Неисправна команда је: „%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Неисправна команда је: „%s“, назив: %s, лозинка: %s",
diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json
index a2ca14fe15b..2d1bb5da8c8 100644
--- a/lib/l10n/sr.json
+++ b/lib/l10n/sr.json
@@ -64,8 +64,6 @@
"Log out" : "Одјава",
"Users" : "Корисници",
"Unknown user" : "Непознат корисник",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Направи",
"Change" : "Измени",
"Delete" : "Обриши",
@@ -76,7 +74,6 @@
"Security" : "Безбедност",
"Encryption" : "Шифровање",
"Additional settings" : "Додатне поставке",
- "Tips & tricks" : "Савети и трикови",
"Personal info" : "Лични подаци",
"Mobile & desktop" : "Мобилни и десктоп",
"Unlimited" : "Неограничено",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Прекорачено време за повезивање на складиште. %s",
"Personal" : "Лично",
"Admin" : "Администратор",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Савети и трикови",
"DB Error: \"%s\"" : "Грешка базе података: \"%s\"",
"Offending command was: \"%s\"" : "Неисправна команда је: „%s“",
"Offending command was: \"%s\", name: %s, password: %s" : "Неисправна команда је: „%s“, назив: %s, лозинка: %s",
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index 0a8636884da..ff328b58aed 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -65,14 +65,11 @@ OC.L10N.register(
"Log out" : "Logga ut",
"Users" : "Användare",
"Unknown user" : "Okänd användare",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Generella inställningar",
"Sharing" : "Delning",
"Security" : "Säkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Övriga inställningar",
- "Tips & tricks" : "Tips & tricks",
"Personal info" : "Personlig information",
"Unlimited" : "Obegränsad",
"Verifying" : "Verifierar",
@@ -227,6 +224,9 @@ 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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & tricks",
"Sync clients" : "Synkklienter"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 484064f0d12..ea6ceff9a0a 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -63,14 +63,11 @@
"Log out" : "Logga ut",
"Users" : "Användare",
"Unknown user" : "Okänd användare",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Basic settings" : "Generella inställningar",
"Sharing" : "Delning",
"Security" : "Säkerhet",
"Encryption" : "Kryptering",
"Additional settings" : "Övriga inställningar",
- "Tips & tricks" : "Tips & tricks",
"Personal info" : "Personlig information",
"Unlimited" : "Obegränsad",
"Verifying" : "Verifierar",
@@ -225,6 +222,9 @@
"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",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "Tips & tricks",
"Sync clients" : "Synkklienter"
},"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 dfb245d2f07..36261fa5904 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -66,8 +66,6 @@ OC.L10N.register(
"Log out" : "Oturumu Kapat",
"Users" : "Kullanıcılar",
"Unknown user" : "Kullanıcı bilinmiyor",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Ekle",
"Change" : "Düzenle",
"Delete" : "Sil",
@@ -78,7 +76,6 @@ OC.L10N.register(
"Security" : "Güvenlik",
"Encryption" : "Şifreleme",
"Additional settings" : "Ek ayarlar",
- "Tips & tricks" : "İpucu ve kolaylıklar",
"Personal info" : "Kişisel Bilgiler",
"Mobile & desktop" : "Mobil ve masaüstü",
"Unlimited" : "Sınırsız",
@@ -236,6 +233,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s",
"Personal" : "Kişisel",
"Admin" : "Yönetici",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "İpucu ve kolaylıklar",
"DB Error: \"%s\"" : "Veritabanı Sorunu: \"%s\"",
"Offending command was: \"%s\"" : "Saldırgan komut: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Saldırgan komut: \"%s\", kullanıcı adı: %s, parola: %s",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index 8fe9de750bd..31f2ca88815 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -64,8 +64,6 @@
"Log out" : "Oturumu Kapat",
"Users" : "Kullanıcılar",
"Unknown user" : "Kullanıcı bilinmiyor",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "Ekle",
"Change" : "Düzenle",
"Delete" : "Sil",
@@ -76,7 +74,6 @@
"Security" : "Güvenlik",
"Encryption" : "Şifreleme",
"Additional settings" : "Ek ayarlar",
- "Tips & tricks" : "İpucu ve kolaylıklar",
"Personal info" : "Kişisel Bilgiler",
"Mobile & desktop" : "Mobil ve masaüstü",
"Unlimited" : "Sınırsız",
@@ -234,6 +231,9 @@
"Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s",
"Personal" : "Kişisel",
"Admin" : "Yönetici",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "İpucu ve kolaylıklar",
"DB Error: \"%s\"" : "Veritabanı Sorunu: \"%s\"",
"Offending command was: \"%s\"" : "Saldırgan komut: \"%s\"",
"Offending command was: \"%s\", name: %s, password: %s" : "Saldırgan komut: \"%s\", kullanıcı adı: %s, parola: %s",
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index 0b886b2b44a..1c5563cb264 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -65,8 +65,6 @@ OC.L10N.register(
"Log out" : "注销",
"Users" : "用户",
"Unknown user" : "未知用户",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "创建",
"Change" : "修改",
"Delete" : "删除",
@@ -76,7 +74,6 @@ OC.L10N.register(
"Security" : "安全",
"Encryption" : "加密",
"Additional settings" : "其他设置",
- "Tips & tricks" : "小提示",
"Personal info" : "个人信息",
"Unlimited" : "无限制",
"Verifying" : "验证",
@@ -232,6 +229,9 @@ OC.L10N.register(
"Storage is temporarily not available" : "存储暂时不可用",
"Storage connection timeout. %s" : "存储连接超时. %s",
"Personal" : "个人",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "小提示",
"DB Error: \"%s\"" : "数据库错误:\"%s\"",
"No app name specified" : "没有指定的 App 名称",
"Sync clients" : "同步客户"
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index 91e733d1567..27aa81f926f 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -63,8 +63,6 @@
"Log out" : "注销",
"Users" : "用户",
"Unknown user" : "未知用户",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "创建",
"Change" : "修改",
"Delete" : "删除",
@@ -74,7 +72,6 @@
"Security" : "安全",
"Encryption" : "加密",
"Additional settings" : "其他设置",
- "Tips & tricks" : "小提示",
"Personal info" : "个人信息",
"Unlimited" : "无限制",
"Verifying" : "验证",
@@ -230,6 +227,9 @@
"Storage is temporarily not available" : "存储暂时不可用",
"Storage connection timeout. %s" : "存储连接超时. %s",
"Personal" : "个人",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "小提示",
"DB Error: \"%s\"" : "数据库错误:\"%s\"",
"No app name specified" : "没有指定的 App 名称",
"Sync clients" : "同步客户"
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 26b671ef41c..280d1c5c180 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -59,8 +59,6 @@ OC.L10N.register(
"Log out" : "登出",
"Users" : "使用者",
"Unknown user" : "未知的使用者",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "建立",
"Change" : "更改",
"Delete" : "刪除",
@@ -70,7 +68,6 @@ OC.L10N.register(
"Security" : "安全性",
"Encryption" : "加密",
"Additional settings" : "其他設定",
- "Tips & tricks" : "使用祕訣",
"Personal info" : "個人資訊",
"Unlimited" : "無限",
"Verifying" : "驗證中",
@@ -227,6 +224,9 @@ OC.L10N.register(
"Storage connection timeout. %s" : "儲存空間連線逾時。%s",
"Personal" : "個人",
"Admin" : "管理",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "使用祕訣",
"DB Error: \"%s\"" : "資料庫錯誤: %s",
"Offending command was: \"%s\"" : "有問題的指令: %s",
"Offending command was: \"%s\", name: %s, password: %s" : "有問題的指令: %s,名字: %s,密碼: %s",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 59be3ed69ba..906623415f8 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -57,8 +57,6 @@
"Log out" : "登出",
"Users" : "使用者",
"Unknown user" : "未知的使用者",
- "APCu" : "APCu",
- "Redis" : "Redis",
"Create" : "建立",
"Change" : "更改",
"Delete" : "刪除",
@@ -68,7 +66,6 @@
"Security" : "安全性",
"Encryption" : "加密",
"Additional settings" : "其他設定",
- "Tips & tricks" : "使用祕訣",
"Personal info" : "個人資訊",
"Unlimited" : "無限",
"Verifying" : "驗證中",
@@ -225,6 +222,9 @@
"Storage connection timeout. %s" : "儲存空間連線逾時。%s",
"Personal" : "個人",
"Admin" : "管理",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Tips & tricks" : "使用祕訣",
"DB Error: \"%s\"" : "資料庫錯誤: %s",
"Offending command was: \"%s\"" : "有問題的指令: %s",
"Offending command was: \"%s\", name: %s, password: %s" : "有問題的指令: %s,名字: %s,密碼: %s",
diff --git a/lib/private/Authentication/Token/DefaultToken.php b/lib/private/Authentication/Token/DefaultToken.php
index 67aa89ea66b..85ea0dc4cdd 100644
--- a/lib/private/Authentication/Token/DefaultToken.php
+++ b/lib/private/Authentication/Token/DefaultToken.php
@@ -37,9 +37,12 @@ use OCP\AppFramework\Db\Entity;
* @method void setRemember(int $remember)
* @method void setLastActivity(int $lastactivity)
* @method int getLastActivity()
+ * @method void setVersion(int $version)
*/
class DefaultToken extends Entity implements IToken {
+ const VERSION = 1;
+
/** @var string user UID */
protected $uid;
@@ -73,6 +76,9 @@ class DefaultToken extends Entity implements IToken {
/** @var int */
protected $expires;
+ /** @var int */
+ protected $version;
+
public function __construct() {
$this->addType('uid', 'string');
$this->addType('loginName', 'string');
@@ -85,6 +91,7 @@ class DefaultToken extends Entity implements IToken {
$this->addType('lastCheck', 'int');
$this->addType('scope', 'string');
$this->addType('expires', 'int');
+ $this->addType('version', 'int');
}
public function getId(): int {
diff --git a/lib/private/Authentication/Token/DefaultTokenMapper.php b/lib/private/Authentication/Token/DefaultTokenMapper.php
index a67d7d151e9..b8df00ff094 100644
--- a/lib/private/Authentication/Token/DefaultTokenMapper.php
+++ b/lib/private/Authentication/Token/DefaultTokenMapper.php
@@ -33,7 +33,6 @@ use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\QBMapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
-use OCP\IUser;
class DefaultTokenMapper extends QBMapper {
@@ -50,8 +49,8 @@ class DefaultTokenMapper extends QBMapper {
/* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder();
$qb->delete('authtoken')
- ->where($qb->expr()->eq('token', $qb->createParameter('token')))
- ->setParameter('token', $token)
+ ->where($qb->expr()->eq('token', $qb->createNamedParameter($token, IQueryBuilder::PARAM_STR)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)))
->execute();
}
@@ -66,6 +65,7 @@ class DefaultTokenMapper extends QBMapper {
->where($qb->expr()->lt('last_activity', $qb->createNamedParameter($olderThan, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('type', $qb->createNamedParameter(IToken::TEMPORARY_TOKEN, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('remember', $qb->createNamedParameter($remember, IQueryBuilder::PARAM_INT)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)))
->execute();
}
@@ -79,9 +79,10 @@ class DefaultTokenMapper extends QBMapper {
public function getToken(string $token): DefaultToken {
/* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder();
- $result = $qb->select('*')
+ $result = $qb->select('id', 'uid', 'login_name', 'password', 'name', 'token', 'type', 'remember', 'last_activity', 'last_check', 'scope', 'expires', 'version')
->from('authtoken')
->where($qb->expr()->eq('token', $qb->createNamedParameter($token)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)))
->execute();
$data = $result->fetch();
@@ -102,9 +103,10 @@ class DefaultTokenMapper extends QBMapper {
public function getTokenById(int $id): DefaultToken {
/* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder();
- $result = $qb->select('*')
+ $result = $qb->select('id', 'uid', 'login_name', 'password', 'name', 'token', 'type', 'remember', 'last_activity', 'last_check', 'scope', 'expires', 'version')
->from('authtoken')
->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)))
->execute();
$data = $result->fetch();
@@ -121,15 +123,16 @@ class DefaultTokenMapper extends QBMapper {
* The provider may limit the number of result rows in case of an abuse
* where a high number of (session) tokens is generated
*
- * @param IUser $user
+ * @param string $uid
* @return DefaultToken[]
*/
- public function getTokenByUser(IUser $user): array {
+ public function getTokenByUser(string $uid): array {
/* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder();
- $qb->select('*')
+ $qb->select('id', 'uid', 'login_name', 'password', 'name', 'token', 'type', 'remember', 'last_activity', 'last_check', 'scope', 'expires', 'version')
->from('authtoken')
- ->where($qb->expr()->eq('uid', $qb->createNamedParameter($user->getUID())))
+ ->where($qb->expr()->eq('uid', $qb->createNamedParameter($uid)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)))
->setMaxResults(1000);
$result = $qb->execute();
$data = $result->fetchAll();
@@ -142,16 +145,13 @@ class DefaultTokenMapper extends QBMapper {
return $entities;
}
- /**
- * @param IUser $user
- * @param int $id
- */
- public function deleteById(IUser $user, int $id) {
+ public function deleteById(string $uid, int $id) {
/* @var $qb IQueryBuilder */
$qb = $this->db->getQueryBuilder();
$qb->delete('authtoken')
->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
- ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($user->getUID())));
+ ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($uid)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)));
$qb->execute();
}
@@ -163,7 +163,8 @@ class DefaultTokenMapper extends QBMapper {
public function deleteByName(string $name) {
$qb = $this->db->getQueryBuilder();
$qb->delete('authtoken')
- ->where($qb->expr()->eq('name', $qb->createNamedParameter($name), IQueryBuilder::PARAM_STR));
+ ->where($qb->expr()->eq('name', $qb->createNamedParameter($name), IQueryBuilder::PARAM_STR))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(DefaultToken::VERSION, IQueryBuilder::PARAM_INT)));
$qb->execute();
}
diff --git a/lib/private/Authentication/Token/DefaultTokenProvider.php b/lib/private/Authentication/Token/DefaultTokenProvider.php
index 7a43dbb23e1..8c2d8c33a97 100644
--- a/lib/private/Authentication/Token/DefaultTokenProvider.php
+++ b/lib/private/Authentication/Token/DefaultTokenProvider.php
@@ -35,7 +35,6 @@ use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IConfig;
use OCP\ILogger;
-use OCP\IUser;
use OCP\Security\ICrypto;
class DefaultTokenProvider implements IProvider {
@@ -105,6 +104,7 @@ class DefaultTokenProvider implements IProvider {
$dbToken->setRemember($remember);
$dbToken->setLastActivity($this->time->getTime());
$dbToken->setLastCheck($this->time->getTime());
+ $dbToken->setVersion(DefaultToken::VERSION);
$this->mapper->insert($dbToken);
@@ -143,17 +143,8 @@ class DefaultTokenProvider implements IProvider {
}
}
- /**
- * Get all tokens of a user
- *
- * The provider may limit the number of result rows in case of an abuse
- * where a high number of (session) tokens is generated
- *
- * @param IUser $user
- * @return IToken[]
- */
- public function getTokenByUser(IUser $user): array {
- return $this->mapper->getTokenByUser($user);
+ public function getTokenByUser(string $uid): array {
+ return $this->mapper->getTokenByUser($uid);
}
/**
@@ -265,14 +256,8 @@ class DefaultTokenProvider implements IProvider {
$this->mapper->invalidate($this->hashToken($token));
}
- /**
- * Invalidate (delete) the given token
- *
- * @param IUser $user
- * @param int $id
- */
- public function invalidateTokenById(IUser $user, int $id) {
- $this->mapper->deleteById($user, $id);
+ public function invalidateTokenById(string $uid, int $id) {
+ $this->mapper->deleteById($uid, $id);
}
/**
@@ -313,7 +298,7 @@ class DefaultTokenProvider implements IProvider {
* @param string $token
* @return string
*/
- private function hashToken(string $token) {
+ private function hashToken(string $token): string {
$secret = $this->config->getSystemValue('secret');
return hash('sha512', $token . $secret);
}
diff --git a/lib/private/Authentication/Token/IProvider.php b/lib/private/Authentication/Token/IProvider.php
index 0efffefac68..ab46bd12126 100644
--- a/lib/private/Authentication/Token/IProvider.php
+++ b/lib/private/Authentication/Token/IProvider.php
@@ -28,7 +28,6 @@ namespace OC\Authentication\Token;
use OC\Authentication\Exceptions\InvalidTokenException;
use OC\Authentication\Exceptions\PasswordlessTokenException;
-use OCP\IUser;
interface IProvider {
@@ -92,10 +91,10 @@ interface IProvider {
/**
* Invalidate (delete) the given token
*
- * @param IUser $user
+ * @param string $uid
* @param int $id
*/
- public function invalidateTokenById(IUser $user, int $id);
+ public function invalidateTokenById(string $uid, int $id);
/**
* Invalidate (delete) old session tokens
@@ -122,10 +121,10 @@ interface IProvider {
* The provider may limit the number of result rows in case of an abuse
* where a high number of (session) tokens is generated
*
- * @param IUser $user
+ * @param string $uid
* @return IToken[]
*/
- public function getTokenByUser(IUser $user): array;
+ public function getTokenByUser(string $uid): array;
/**
* Get the (unencrypted) password of the given token
diff --git a/lib/private/Authentication/Token/Manager.php b/lib/private/Authentication/Token/Manager.php
new file mode 100644
index 00000000000..254a1598943
--- /dev/null
+++ b/lib/private/Authentication/Token/Manager.php
@@ -0,0 +1,230 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Authentication\Token;
+
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Exceptions\PasswordlessTokenException;
+
+class Manager implements IProvider {
+
+ /** @var DefaultTokenProvider */
+ private $defaultTokenProvider;
+
+ /** @var PublicKeyTokenProvider */
+ private $publicKeyTokenProvider;
+
+ public function __construct(DefaultTokenProvider $defaultTokenProvider, PublicKeyTokenProvider $publicKeyTokenProvider) {
+ $this->defaultTokenProvider = $defaultTokenProvider;
+ $this->publicKeyTokenProvider = $publicKeyTokenProvider;
+ }
+
+ /**
+ * Create and persist a new token
+ *
+ * @param string $token
+ * @param string $uid
+ * @param string $loginName
+ * @param string|null $password
+ * @param string $name
+ * @param int $type token type
+ * @param int $remember whether the session token should be used for remember-me
+ * @return IToken
+ */
+ public function generateToken(string $token,
+ string $uid,
+ string $loginName,
+ $password,
+ string $name,
+ int $type = IToken::TEMPORARY_TOKEN,
+ int $remember = IToken::DO_NOT_REMEMBER): IToken {
+ return $this->publicKeyTokenProvider->generateToken(
+ $token,
+ $uid,
+ $loginName,
+ $password,
+ $name,
+ $type,
+ $remember
+ );
+ }
+
+ /**
+ * Save the updated token
+ *
+ * @param IToken $token
+ * @throws InvalidTokenException
+ */
+ public function updateToken(IToken $token) {
+ $provider = $this->getProvider($token);
+ $provider->updateToken($token);
+ }
+
+ /**
+ * Update token activity timestamp
+ *
+ * @throws InvalidTokenException
+ * @param IToken $token
+ */
+ public function updateTokenActivity(IToken $token) {
+ $provider = $this->getProvider($token);
+ $provider->updateTokenActivity($token);
+ }
+
+ /**
+ * @param string $uid
+ * @return IToken[]
+ */
+ public function getTokenByUser(string $uid): array {
+ $old = $this->defaultTokenProvider->getTokenByUser($uid);
+ $new = $this->publicKeyTokenProvider->getTokenByUser($uid);
+
+ return array_merge($old, $new);
+ }
+
+ /**
+ * Get a token by token
+ *
+ * @param string $tokenId
+ * @throws InvalidTokenException
+ * @return IToken
+ */
+ public function getToken(string $tokenId): IToken {
+ try {
+ return $this->publicKeyTokenProvider->getToken($tokenId);
+ } catch (InvalidTokenException $e) {
+ // No worries we try to convert it to a PublicKey Token
+ }
+
+ //Convert!
+ $token = $this->defaultTokenProvider->getToken($tokenId);
+
+ try {
+ $password = $this->defaultTokenProvider->getPassword($token, $tokenId);
+ } catch (PasswordlessTokenException $e) {
+ $password = null;
+ }
+
+ return $this->publicKeyTokenProvider->convertToken($token, $tokenId, $password);
+ }
+
+ /**
+ * Get a token by token id
+ *
+ * @param int $tokenId
+ * @throws InvalidTokenException
+ * @return IToken
+ */
+ public function getTokenById(int $tokenId): IToken {
+ try {
+ return $this->publicKeyTokenProvider->getTokenById($tokenId);
+ } catch (InvalidTokenException $e) {
+ return $this->defaultTokenProvider->getTokenById($tokenId);
+ }
+ }
+
+ /**
+ * @param string $oldSessionId
+ * @param string $sessionId
+ * @throws InvalidTokenException
+ */
+ public function renewSessionToken(string $oldSessionId, string $sessionId) {
+ try {
+ $this->publicKeyTokenProvider->renewSessionToken($oldSessionId, $sessionId);
+ } catch (InvalidTokenException $e) {
+ $this->defaultTokenProvider->renewSessionToken($oldSessionId, $sessionId);
+ }
+ }
+
+ /**
+ * @param IToken $savedToken
+ * @param string $tokenId session token
+ * @throws InvalidTokenException
+ * @throws PasswordlessTokenException
+ * @return string
+ */
+ public function getPassword(IToken $savedToken, string $tokenId): string {
+ $provider = $this->getProvider($savedToken);
+ return $provider->getPassword($savedToken, $tokenId);
+ }
+
+ public function setPassword(IToken $token, string $tokenId, string $password) {
+ $provider = $this->getProvider($token);
+ $provider->setPassword($token, $tokenId, $password);
+ }
+
+ public function invalidateToken(string $token) {
+ $this->defaultTokenProvider->invalidateToken($token);
+ $this->publicKeyTokenProvider->invalidateToken($token);
+ }
+
+ public function invalidateTokenById(string $uid, int $id) {
+ $this->defaultTokenProvider->invalidateTokenById($uid, $id);
+ $this->publicKeyTokenProvider->invalidateTokenById($uid, $id);
+ }
+
+ public function invalidateOldTokens() {
+ $this->defaultTokenProvider->invalidateOldTokens();
+ $this->publicKeyTokenProvider->invalidateOldTokens();
+ }
+
+ /**
+ * @param IToken $token
+ * @param string $oldTokenId
+ * @param string $newTokenId
+ * @return IToken
+ * @throws InvalidTokenException
+ */
+ public function rotate(IToken $token, string $oldTokenId, string $newTokenId): IToken {
+ if ($token instanceof DefaultToken) {
+ try {
+ $password = $this->defaultTokenProvider->getPassword($token, $oldTokenId);
+ } catch (PasswordlessTokenException $e) {
+ $password = null;
+ }
+
+ return $this->publicKeyTokenProvider->convertToken($token, $newTokenId, $password);
+ }
+
+ if ($token instanceof PublicKeyToken) {
+ return $this->publicKeyTokenProvider->rotate($token, $oldTokenId, $newTokenId);
+ }
+
+ throw new InvalidTokenException();
+ }
+
+ /**
+ * @param IToken $token
+ * @return IProvider
+ * @throws InvalidTokenException
+ */
+ private function getProvider(IToken $token): IProvider {
+ if ($token instanceof DefaultToken) {
+ return $this->defaultTokenProvider;
+ }
+ if ($token instanceof PublicKeyToken) {
+ return $this->publicKeyTokenProvider;
+ }
+ throw new InvalidTokenException();
+ }
+}
diff --git a/lib/private/Authentication/Token/PublicKeyToken.php b/lib/private/Authentication/Token/PublicKeyToken.php
new file mode 100644
index 00000000000..0e793ce8c7c
--- /dev/null
+++ b/lib/private/Authentication/Token/PublicKeyToken.php
@@ -0,0 +1,217 @@
+<?php
+/** @noinspection ALL */
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2018 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\Authentication\Token;
+
+use OCP\AppFramework\Db\Entity;
+
+/**
+ * @method void setId(int $id)
+ * @method void setUid(string $uid);
+ * @method void setLoginName(string $loginname)
+ * @method void setName(string $name)
+ * @method string getToken()
+ * @method void setType(int $type)
+ * @method int getType()
+ * @method void setRemember(int $remember)
+ * @method void setLastActivity(int $lastactivity)
+ * @method int getLastActivity()
+ * @method string getPrivateKey()
+ * @method void setPrivateKey(string $key)
+ * @method string getPublicKey()
+ * @method void setPublicKey(string $key)
+ * @method void setVersion(int $version)
+ */
+class PublicKeyToken extends Entity implements IToken {
+
+ const VERSION = 2;
+
+ /** @var string user UID */
+ protected $uid;
+
+ /** @var string login name used for generating the token */
+ protected $loginName;
+
+ /** @var string encrypted user password */
+ protected $password;
+
+ /** @var string token name (e.g. browser/OS) */
+ protected $name;
+
+ /** @var string */
+ protected $token;
+
+ /** @var int */
+ protected $type;
+
+ /** @var int */
+ protected $remember;
+
+ /** @var int */
+ protected $lastActivity;
+
+ /** @var int */
+ protected $lastCheck;
+
+ /** @var string */
+ protected $scope;
+
+ /** @var int */
+ protected $expires;
+
+ /** @var string */
+ protected $privateKey;
+
+ /** @var string */
+ protected $publicKey;
+
+ /** @var int */
+ protected $version;
+
+ public function __construct() {
+ $this->addType('uid', 'string');
+ $this->addType('loginName', 'string');
+ $this->addType('password', 'string');
+ $this->addType('name', 'string');
+ $this->addType('token', 'string');
+ $this->addType('type', 'int');
+ $this->addType('remember', 'int');
+ $this->addType('lastActivity', 'int');
+ $this->addType('lastCheck', 'int');
+ $this->addType('scope', 'string');
+ $this->addType('expires', 'int');
+ $this->addType('publicKey', 'string');
+ $this->addType('privateKey', 'string');
+ $this->addType('version', 'int');
+ }
+
+ public function getId(): int {
+ return $this->id;
+ }
+
+ public function getUID(): string {
+ return $this->uid;
+ }
+
+ /**
+ * Get the login name used when generating the token
+ *
+ * @return string
+ */
+ public function getLoginName(): string {
+ return parent::getLoginName();
+ }
+
+ /**
+ * Get the (encrypted) login password
+ *
+ * @return string|null
+ */
+ public function getPassword() {
+ return parent::getPassword();
+ }
+
+ public function jsonSerialize() {
+ return [
+ 'id' => $this->id,
+ 'name' => $this->name,
+ 'lastActivity' => $this->lastActivity,
+ 'type' => $this->type,
+ 'scope' => $this->getScopeAsArray()
+ ];
+ }
+
+ /**
+ * Get the timestamp of the last password check
+ *
+ * @return int
+ */
+ public function getLastCheck(): int {
+ return parent::getLastCheck();
+ }
+
+ /**
+ * Get the timestamp of the last password check
+ *
+ * @param int $time
+ */
+ public function setLastCheck(int $time) {
+ parent::setLastCheck($time);
+ }
+
+ public function getScope(): string {
+ $scope = parent::getScope();
+ if ($scope === null) {
+ return '';
+ }
+
+ return $scope;
+ }
+
+ public function getScopeAsArray(): array {
+ $scope = json_decode($this->getScope(), true);
+ if (!$scope) {
+ return [
+ 'filesystem'=> true
+ ];
+ }
+ return $scope;
+ }
+
+ public function setScope($scope) {
+ if (is_array($scope)) {
+ parent::setScope(json_encode($scope));
+ } else {
+ parent::setScope((string)$scope);
+ }
+ }
+
+ public function getName(): string {
+ return parent::getName();
+ }
+
+ public function getRemember(): int {
+ return parent::getRemember();
+ }
+
+ public function setToken(string $token) {
+ parent::setToken($token);
+ }
+
+ public function setPassword(string $password = null) {
+ parent::setPassword($password);
+ }
+
+ public function setExpires($expires) {
+ parent::setExpires($expires);
+ }
+
+ /**
+ * @return int|null
+ */
+ public function getExpires() {
+ return parent::getExpires();
+ }
+}
diff --git a/lib/private/Authentication/Token/PublicKeyTokenMapper.php b/lib/private/Authentication/Token/PublicKeyTokenMapper.php
new file mode 100644
index 00000000000..5e5c69dbc46
--- /dev/null
+++ b/lib/private/Authentication/Token/PublicKeyTokenMapper.php
@@ -0,0 +1,172 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2018 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\Authentication\Token;
+
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Db\QBMapper;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+
+class PublicKeyTokenMapper extends QBMapper {
+
+ public function __construct(IDBConnection $db) {
+ parent::__construct($db, 'authtoken');
+ }
+
+ /**
+ * Invalidate (delete) a given token
+ *
+ * @param string $token
+ */
+ public function invalidate(string $token) {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete('authtoken')
+ ->where($qb->expr()->eq('token', $qb->createNamedParameter($token)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)))
+ ->execute();
+ }
+
+ /**
+ * @param int $olderThan
+ * @param int $remember
+ */
+ public function invalidateOld(int $olderThan, int $remember = IToken::DO_NOT_REMEMBER) {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete('authtoken')
+ ->where($qb->expr()->lt('last_activity', $qb->createNamedParameter($olderThan, IQueryBuilder::PARAM_INT)))
+ ->andWhere($qb->expr()->eq('type', $qb->createNamedParameter(IToken::TEMPORARY_TOKEN, IQueryBuilder::PARAM_INT)))
+ ->andWhere($qb->expr()->eq('remember', $qb->createNamedParameter($remember, IQueryBuilder::PARAM_INT)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)))
+ ->execute();
+ }
+
+ /**
+ * Get the user UID for the given token
+ *
+ * @throws DoesNotExistException
+ */
+ public function getToken(string $token): PublicKeyToken {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $result = $qb->select('*')
+ ->from('authtoken')
+ ->where($qb->expr()->eq('token', $qb->createNamedParameter($token)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)))
+ ->execute();
+
+ $data = $result->fetch();
+ $result->closeCursor();
+ if ($data === false) {
+ throw new DoesNotExistException('token does not exist');
+ }
+ return PublicKeyToken::fromRow($data);
+ }
+
+ /**
+ * Get the token for $id
+ *
+ * @throws DoesNotExistException
+ */
+ public function getTokenById(int $id): PublicKeyToken {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $result = $qb->select('*')
+ ->from('authtoken')
+ ->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)))
+ ->execute();
+
+ $data = $result->fetch();
+ $result->closeCursor();
+ if ($data === false) {
+ throw new DoesNotExistException('token does not exist');
+ }
+ return PublicKeyToken::fromRow($data);
+ }
+
+ /**
+ * Get all tokens of a user
+ *
+ * The provider may limit the number of result rows in case of an abuse
+ * where a high number of (session) tokens is generated
+ *
+ * @param string $uid
+ * @return PublicKeyToken[]
+ */
+ public function getTokenByUser(string $uid): array {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $qb->select('*')
+ ->from('authtoken')
+ ->where($qb->expr()->eq('uid', $qb->createNamedParameter($uid)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)))
+ ->setMaxResults(1000);
+ $result = $qb->execute();
+ $data = $result->fetchAll();
+ $result->closeCursor();
+
+ $entities = array_map(function ($row) {
+ return PublicKeyToken::fromRow($row);
+ }, $data);
+
+ return $entities;
+ }
+
+ public function deleteById(string $uid, int $id) {
+ /* @var $qb IQueryBuilder */
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete('authtoken')
+ ->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
+ ->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($uid)))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)));
+ $qb->execute();
+ }
+
+ /**
+ * delete all auth token which belong to a specific client if the client was deleted
+ *
+ * @param string $name
+ */
+ public function deleteByName(string $name) {
+ $qb = $this->db->getQueryBuilder();
+ $qb->delete('authtoken')
+ ->where($qb->expr()->eq('name', $qb->createNamedParameter($name), IQueryBuilder::PARAM_STR))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)));
+ $qb->execute();
+ }
+
+ public function deleteTempToken(PublicKeyToken $except) {
+ $qb = $this->db->getQueryBuilder();
+
+ $qb->delete('authtoken')
+ ->where($qb->expr()->eq('type', $qb->createNamedParameter(IToken::TEMPORARY_TOKEN)))
+ ->andWhere($qb->expr()->neq('id', $qb->createNamedParameter($except->getId())))
+ ->andWhere($qb->expr()->eq('version', $qb->createNamedParameter(PublicKeyToken::VERSION, IQueryBuilder::PARAM_INT)));
+
+ $qb->execute();
+ }
+}
diff --git a/lib/private/Authentication/Token/PublicKeyTokenProvider.php b/lib/private/Authentication/Token/PublicKeyTokenProvider.php
new file mode 100644
index 00000000000..f6a6fc3455f
--- /dev/null
+++ b/lib/private/Authentication/Token/PublicKeyTokenProvider.php
@@ -0,0 +1,320 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Authentication\Token;
+
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Exceptions\PasswordlessTokenException;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\Security\ICrypto;
+
+class PublicKeyTokenProvider implements IProvider {
+ /** @var PublicKeyTokenMapper */
+ private $mapper;
+
+ /** @var ICrypto */
+ private $crypto;
+
+ /** @var IConfig */
+ private $config;
+
+ /** @var ILogger $logger */
+ private $logger;
+
+ /** @var ITimeFactory $time */
+ private $time;
+
+ public function __construct(PublicKeyTokenMapper $mapper,
+ ICrypto $crypto,
+ IConfig $config,
+ ILogger $logger,
+ ITimeFactory $time) {
+ $this->mapper = $mapper;
+ $this->crypto = $crypto;
+ $this->config = $config;
+ $this->logger = $logger;
+ $this->time = $time;
+ }
+
+ public function generateToken(string $token,
+ string $uid,
+ string $loginName,
+ $password,
+ string $name,
+ int $type = IToken::TEMPORARY_TOKEN,
+ int $remember = IToken::DO_NOT_REMEMBER): IToken {
+ $dbToken = $this->newToken($token, $uid, $loginName, $password, $name, $type, $remember);
+
+ $this->mapper->insert($dbToken);
+
+ return $dbToken;
+ }
+
+ public function getToken(string $tokenId): IToken {
+ try {
+ $token = $this->mapper->getToken($this->hashToken($tokenId));
+ } catch (DoesNotExistException $ex) {
+ throw new InvalidTokenException();
+ }
+
+ if ($token->getExpires() !== null && $token->getExpires() < $this->time->getTime()) {
+ throw new ExpiredTokenException($token);
+ }
+
+ return $token;
+ }
+
+ public function getTokenById(int $tokenId): IToken {
+ try {
+ $token = $this->mapper->getTokenById($tokenId);
+ } catch (DoesNotExistException $ex) {
+ throw new InvalidTokenException();
+ }
+
+ if ($token->getExpires() !== null && $token->getExpires() < $this->time->getTime()) {
+ throw new ExpiredTokenException($token);
+ }
+
+ return $token;
+ }
+
+ public function renewSessionToken(string $oldSessionId, string $sessionId) {
+ $token = $this->getToken($oldSessionId);
+
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+
+ $password = null;
+ if (!is_null($token->getPassword())) {
+ $privateKey = $this->decrypt($token->getPrivateKey(), $oldSessionId);
+ $password = $this->decryptPassword($token->getPassword(), $privateKey);
+ }
+
+ $this->generateToken(
+ $sessionId,
+ $token->getUID(),
+ $token->getLoginName(),
+ $password,
+ $token->getName(),
+ IToken::TEMPORARY_TOKEN,
+ $token->getRemember()
+ );
+
+ $this->mapper->delete($token);
+ }
+
+ public function invalidateToken(string $token) {
+ $this->mapper->invalidate($this->hashToken($token));
+ }
+
+ public function invalidateTokenById(string $uid, int $id) {
+ $this->mapper->deleteById($uid, $id);
+ }
+
+ public function invalidateOldTokens() {
+ $olderThan = $this->time->getTime() - (int) $this->config->getSystemValue('session_lifetime', 60 * 60 * 24);
+ $this->logger->debug('Invalidating session tokens older than ' . date('c', $olderThan), ['app' => 'cron']);
+ $this->mapper->invalidateOld($olderThan, IToken::DO_NOT_REMEMBER);
+ $rememberThreshold = $this->time->getTime() - (int) $this->config->getSystemValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
+ $this->logger->debug('Invalidating remembered session tokens older than ' . date('c', $rememberThreshold), ['app' => 'cron']);
+ $this->mapper->invalidateOld($rememberThreshold, IToken::REMEMBER);
+ }
+
+ public function updateToken(IToken $token) {
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+ $this->mapper->update($token);
+ }
+
+ public function updateTokenActivity(IToken $token) {
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+ /** @var DefaultToken $token */
+ $now = $this->time->getTime();
+ if ($token->getLastActivity() < ($now - 60)) {
+ // Update token only once per minute
+ $token->setLastActivity($now);
+ $this->mapper->update($token);
+ }
+ }
+
+ public function getTokenByUser(string $uid): array {
+ return $this->mapper->getTokenByUser($uid);
+ }
+
+ public function getPassword(IToken $token, string $tokenId): string {
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+
+ if ($token->getPassword() === null) {
+ throw new PasswordlessTokenException();
+ }
+
+ // Decrypt private key with tokenId
+ $privateKey = $this->decrypt($token->getPrivateKey(), $tokenId);
+
+ // Decrypt password with private key
+ return $this->decryptPassword($token->getPassword(), $privateKey);
+ }
+
+ public function setPassword(IToken $token, string $tokenId, string $password) {
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+
+ // When changing passwords all temp tokens are deleted
+ $this->mapper->deleteTempToken($token);
+
+ // Update the password for all tokens
+ $tokens = $this->mapper->getTokenByUser($token->getUID());
+ foreach ($tokens as $t) {
+ $publicKey = $t->getPublicKey();
+ $t->setPassword($this->encryptPassword($password, $publicKey));
+ $this->updateToken($t);
+ }
+ }
+
+ public function rotate(IToken $token, string $oldTokenId, string $newTokenId): IToken {
+ if (!($token instanceof PublicKeyToken)) {
+ throw new InvalidTokenException();
+ }
+
+ // Decrypt private key with oldTokenId
+ $privateKey = $this->decrypt($token->getPrivateKey(), $oldTokenId);
+ // Encrypt with the new token
+ $token->setPrivateKey($this->encrypt($privateKey, $newTokenId));
+
+ $token->setToken($this->hashToken($newTokenId));
+ $this->updateToken($token);
+
+ return $token;
+ }
+
+ private function encrypt(string $plaintext, string $token): string {
+ $secret = $this->config->getSystemValue('secret');
+ return $this->crypto->encrypt($plaintext, $token . $secret);
+ }
+
+ /**
+ * @throws InvalidTokenException
+ */
+ private function decrypt(string $cipherText, string $token): string {
+ $secret = $this->config->getSystemValue('secret');
+ try {
+ return $this->crypto->decrypt($cipherText, $token . $secret);
+ } catch (\Exception $ex) {
+ // Delete the invalid token
+ $this->invalidateToken($token);
+ throw new InvalidTokenException();
+ }
+ }
+
+ private function encryptPassword(string $password, string $publicKey): string {
+ openssl_public_encrypt($password, $encryptedPassword, $publicKey, OPENSSL_PKCS1_OAEP_PADDING);
+ $encryptedPassword = base64_encode($encryptedPassword);
+
+ return $encryptedPassword;
+ }
+
+ private function decryptPassword(string $encryptedPassword, string $privateKey): string {
+ $encryptedPassword = base64_decode($encryptedPassword);
+ openssl_private_decrypt($encryptedPassword, $password, $privateKey, OPENSSL_PKCS1_OAEP_PADDING);
+
+ return $password;
+ }
+
+ private function hashToken(string $token): string {
+ $secret = $this->config->getSystemValue('secret');
+ return hash('sha512', $token . $secret);
+ }
+
+ /**
+ * Convert a DefaultToken to a publicKeyToken
+ * This will also be updated directly in the Database
+ */
+ public function convertToken(DefaultToken $defaultToken, string $token, $password): PublicKeyToken {
+ $pkToken = $this->newToken(
+ $token,
+ $defaultToken->getUID(),
+ $defaultToken->getLoginName(),
+ $password,
+ $defaultToken->getName(),
+ $defaultToken->getType(),
+ $defaultToken->getRemember()
+ );
+
+ $pkToken->setExpires($defaultToken->getExpires());
+ $pkToken->setId($defaultToken->getId());
+
+ return $this->mapper->update($pkToken);
+ }
+
+ private function newToken(string $token,
+ string $uid,
+ string $loginName,
+ $password,
+ string $name,
+ int $type,
+ int $remember): PublicKeyToken {
+ $dbToken = new PublicKeyToken();
+ $dbToken->setUid($uid);
+ $dbToken->setLoginName($loginName);
+
+ $config = [
+ 'digest_alg' => 'sha512',
+ 'private_key_bits' => 2048,
+ ];
+
+ // Generate new key
+ $res = openssl_pkey_new($config);
+ openssl_pkey_export($res, $privateKey);
+
+ // Extract the public key from $res to $pubKey
+ $publicKey = openssl_pkey_get_details($res);
+ $publicKey = $publicKey['key'];
+
+ $dbToken->setPublicKey($publicKey);
+ $dbToken->setPrivateKey($this->encrypt($privateKey, $token));
+
+ if (!is_null($password)) {
+ $dbToken->setPassword($this->encryptPassword($password, $publicKey));
+ }
+
+ $dbToken->setName($name);
+ $dbToken->setToken($this->hashToken($token));
+ $dbToken->setType($type);
+ $dbToken->setRemember($remember);
+ $dbToken->setLastActivity($this->time->getTime());
+ $dbToken->setLastCheck($this->time->getTime());
+ $dbToken->setVersion(PublicKeyToken::VERSION);
+
+ return $dbToken;
+ }
+}
diff --git a/lib/private/Avatar.php b/lib/private/Avatar.php
index 53dea5b966a..9dbeb4ac745 100644
--- a/lib/private/Avatar.php
+++ b/lib/private/Avatar.php
@@ -11,6 +11,7 @@
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license AGPL-3.0
*
@@ -30,7 +31,6 @@
namespace OC;
-use OC\User\User;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\Files\SimpleFS\ISimpleFile;
@@ -39,8 +39,10 @@ use OCP\IAvatar;
use OCP\IConfig;
use OCP\IImage;
use OCP\IL10N;
-use OC_Image;
use OCP\ILogger;
+use OC\User\User;
+use OC_Image;
+use Imagick;
/**
* This class gets and sets users avatars.
@@ -59,6 +61,19 @@ class Avatar implements IAvatar {
private $config;
/**
+ * https://github.com/sebdesign/cap-height -- for 500px height
+ * Open Sans cap-height is 0.72 and we want a 200px caps height size (0.4 letter-to-total-height ratio, 500*0.4=200). 200/0.72 = 278px.
+ * Since we start from the baseline (text-anchor) we need to shift the y axis by 100px (half the caps height): 500/2+100=350
+ *
+ * @var string
+ */
+ private $svgTemplate = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <svg width="{size}" height="{size}" version="1.1" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
+ <rect width="100%" height="100%" fill="#{fill}"></rect>
+ <text x="50%" y="350" style="font-weight:600;font-size:278px;font-family:\'Open Sans\';text-anchor:middle;fill:#fff">{letter}</text>
+ </svg>';
+
+ /**
* constructor
*
* @param ISimpleFolder $folder The folder where the avatars are
@@ -68,10 +83,10 @@ class Avatar implements IAvatar {
* @param IConfig $config
*/
public function __construct(ISimpleFolder $folder,
- IL10N $l,
- $user,
- ILogger $logger,
- IConfig $config) {
+ IL10N $l,
+ $user,
+ ILogger $logger,
+ IConfig $config) {
$this->folder = $folder;
$this->l = $l;
$this->user = $user;
@@ -82,7 +97,7 @@ class Avatar implements IAvatar {
/**
* @inheritdoc
*/
- public function get ($size = 64) {
+ public function get($size = 64) {
try {
$file = $this->getFile($size);
} catch (NotFoundException $e) {
@@ -111,17 +126,17 @@ class Avatar implements IAvatar {
* @throws \Exception if the provided image is not valid
* @throws NotSquareException if the image is not square
* @return void
- */
- public function set ($data) {
+ */
+ public function set($data) {
- if($data instanceOf IImage) {
+ if ($data instanceof IImage) {
$img = $data;
$data = $img->data();
} else {
$img = new OC_Image();
if (is_resource($data) && get_resource_type($data) === "gd") {
$img->setResource($data);
- } elseif(is_resource($data)) {
+ } elseif (is_resource($data)) {
$img->loadFromFileHandle($data);
} else {
try {
@@ -154,7 +169,7 @@ class Avatar implements IAvatar {
}
$this->remove();
- $file = $this->folder->newFile('avatar.'.$type);
+ $file = $this->folder->newFile('avatar.' . $type);
$file->putContent($data);
try {
@@ -165,17 +180,17 @@ class Avatar implements IAvatar {
//
}
$this->user->triggerChange('avatar', $file);
- }
+ }
/**
* remove the users avatar
* @return void
- */
- public function remove () {
+ */
+ public function remove() {
$avatars = $this->folder->getDirectoryListing();
$this->config->setUserValue($this->user->getUID(), 'avatar', 'version',
- (int)$this->config->getUserValue($this->user->getUID(), 'avatar', 'version', 0) + 1);
+ (int) $this->config->getUserValue($this->user->getUID(), 'avatar', 'version', 0) + 1);
foreach ($avatars as $avatar) {
$avatar->delete();
@@ -191,7 +206,9 @@ class Avatar implements IAvatar {
try {
$ext = $this->getExtension();
} catch (NotFoundException $e) {
- $data = $this->generateAvatar($this->user->getDisplayName(), 1024);
+ if (!$data = $this->generateAvatarFromSvg(1024)) {
+ $data = $this->generateAvatar($this->user->getDisplayName(), 1024);
+ }
$avatar = $this->folder->newFile('avatar.png');
$avatar->putContent($data);
$ext = 'png';
@@ -214,7 +231,9 @@ class Avatar implements IAvatar {
}
if ($this->folder->fileExists('generated')) {
- $data = $this->generateAvatar($this->user->getDisplayName(), $size);
+ if (!$data = $this->generateAvatarFromSvg($size)) {
+ $data = $this->generateAvatar($this->user->getDisplayName(), $size);
+ }
} else {
$avatar = new OC_Image();
@@ -235,7 +254,7 @@ class Avatar implements IAvatar {
}
- if($this->config->getUserValue($this->user->getUID(), 'avatar', 'generated', null) === null) {
+ if ($this->config->getUserValue($this->user->getUID(), 'avatar', 'generated', null) === null) {
$generated = $this->folder->fileExists('generated') ? 'true' : 'false';
$this->config->setUserValue($this->user->getUID(), 'avatar', 'generated', $generated);
}
@@ -257,8 +276,55 @@ class Avatar implements IAvatar {
}
throw new NotFoundException;
}
+
+ /**
+ * {size} = 500
+ * {fill} = hex color to fill
+ * {letter} = Letter to display
+ *
+ * Generate SVG avatar
+ * @return string
+ *
+ */
+ private function getAvatarVector(int $size): string {
+ $userDisplayName = $this->user->getDisplayName();
+
+ $bgRGB = $this->avatarBackgroundColor($userDisplayName);
+ $bgHEX = sprintf("%02x%02x%02x", $bgRGB->r, $bgRGB->g, $bgRGB->b);
+ $letter = mb_strtoupper(mb_substr($userDisplayName, 0, 1), 'UTF-8');
+
+ $toReplace = ['{size}', '{fill}', '{letter}'];
+ return str_replace($toReplace, [$size, $bgHEX, $letter], $this->svgTemplate);
+ }
/**
+ * Generate png avatar from svg with Imagick
+ *
+ * @param int $size
+ * @return string|boolean
+ */
+ private function generateAvatarFromSvg(int $size) {
+ if (!extension_loaded('imagick')) {
+ return false;
+ }
+ try {
+ $font = __DIR__ . '/../../core/fonts/OpenSans-Semibold.ttf';
+ $svg = $this->getAvatarVector($size);
+ $avatar = new Imagick();
+ $avatar->setFont($font);
+ $avatar->readImageBlob($svg);
+ $avatar->setImageFormat('png');
+ $image = new OC_Image();
+ $image->loadFromData($avatar);
+ return $image->data();
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Generate png avatar with GD
+ *
* @param string $userDisplayName
* @param int $size
* @return string
@@ -275,12 +341,9 @@ class Avatar implements IAvatar {
$font = __DIR__ . '/../../core/fonts/OpenSans-Semibold.ttf';
$fontSize = $size * 0.4;
- $box = imagettfbbox($fontSize, 0, $font, $text);
- $x = ($size - ($box[2] - $box[0])) / 2;
- $y = ($size - ($box[1] - $box[7])) / 2;
- $x += 1;
- $y -= $box[7];
+ list($x, $y) = $this->imageTTFCenter($im, $text, $font, $fontSize);
+
imagettftext($im, $fontSize, 0, $x, $y, $white, $font, $text);
ob_start();
@@ -292,6 +355,35 @@ class Avatar implements IAvatar {
}
/**
+ * Calculate real image ttf center
+ *
+ * @param resource $image
+ * @param string $text text string
+ * @param string $font font path
+ * @param int $size font size
+ * @param int $angle
+ * @return Array
+ */
+ protected function imageTTFCenter($image, string $text, string $font, int $size, $angle = 0): array {
+ // Image width & height
+ $xi = imagesx($image);
+ $yi = imagesy($image);
+
+ // bounding box
+ $box = imagettfbbox($size, $angle, $font, $text);
+
+ // imagettfbbox can return negative int
+ $xr = abs(max($box[2], $box[4]));
+ $yr = abs(max($box[5], $box[7]));
+
+ // calculate bottom left placement
+ $x = intval(($xi - $xr) / 2);
+ $y = intval(($yi + $yr) / 2);
+
+ return array($x, $y);
+ }
+
+ /**
* Calculate steps between two Colors
* @param object Color $steps start color
* @param object Color $ends end color
@@ -304,6 +396,7 @@ class Avatar implements IAvatar {
$step[2] = ($ends[1]->b - $ends[0]->b) / $steps;
return $step;
}
+
/**
* Convert a string to an integer evenly
* @param string $hash the text to parse
@@ -318,12 +411,11 @@ class Avatar implements IAvatar {
$r = intval($color1->r + ($step[0] * $i));
$g = intval($color1->g + ($step[1] * $i));
$b = intval($color1->b + ($step[2] * $i));
- $palette[] = new Color($r, $g, $b);
+ $palette[] = new Color($r, $g, $b);
}
return $palette;
}
-
/**
* Convert a string to an integer evenly
* @param string $hash the text to parse
@@ -335,7 +427,7 @@ class Avatar implements IAvatar {
$result = array();
// Splitting evenly the string
- for ($i=0; $i< strlen($hash); $i++) {
+ for ($i = 0; $i < strlen($hash); $i++) {
// chars in md5 goes up to f, hex:16
$result[] = intval(substr($hash, $i, 1), 16) % 16;
}
@@ -347,20 +439,26 @@ class Avatar implements IAvatar {
return intval($final % $maximum);
}
-
/**
- * @param string $text
+ * @param string $hash
* @return Color Object containting r g b int in the range [0, 255]
*/
- function avatarBackgroundColor($text) {
- $hash = preg_replace('/[^0-9a-f]+/', '', $text);
+ public function avatarBackgroundColor(string $hash) {
+ // Normalize hash
+ $hash = strtolower($hash);
+
+ // Already a md5 hash?
+ if( preg_match('/^([0-9a-f]{4}-?){8}$/', $hash, $matches) !== 1 ) {
+ $hash = md5($hash);
+ }
- $hash = md5($hash);
- $hashChars = str_split($hash);
+ // Remove unwanted char
+ $hash = preg_replace('/[^0-9a-f]+/', '', $hash);
$red = new Color(182, 70, 157);
$yellow = new Color(221, 203, 85);
$blue = new Color(0, 130, 201); // Nextcloud blue
+
// Number of steps to go from a color to another
// 3 colors * 6 will result in 18 generated colors
$steps = 6;
@@ -371,7 +469,7 @@ class Avatar implements IAvatar {
$finalPalette = array_merge($palette1, $palette2, $palette3);
- return $finalPalette[$this->hashToInt($hash, $steps * 3 )];
+ return $finalPalette[$this->hashToInt($hash, $steps * 3)];
}
public function userChanged($feature, $oldValue, $newValue) {
diff --git a/lib/private/Group/Group.php b/lib/private/Group/Group.php
index cc6315263d4..275b697bc3b 100644
--- a/lib/private/Group/Group.php
+++ b/lib/private/Group/Group.php
@@ -211,10 +211,10 @@ class Group implements IGroup {
$userIds = $backend->usersInGroup($this->gid, $search, $limit, $offset);
$users += $this->getVerifiedUsers($userIds);
if (!is_null($limit) and $limit <= 0) {
- return array_values($users);
+ return $users;
}
}
- return array_values($users);
+ return $users;
}
/**
diff --git a/lib/private/Http/Client/Client.php b/lib/private/Http/Client/Client.php
index 0387fcabfaf..03b09bf54b7 100644
--- a/lib/private/Http/Client/Client.php
+++ b/lib/private/Http/Client/Client.php
@@ -158,7 +158,7 @@ class Client implements IClient {
*/
public function get(string $uri, array $options = []): IResponse {
$this->setDefaultOptions();
- $response = $this->client->request('get', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('get', $uri, array_merge($this->getRequestOptions(), $options));
$isStream = isset($options['stream']) && $options['stream'];
return new Response($response, $isStream);
}
@@ -189,7 +189,7 @@ class Client implements IClient {
*/
public function head(string $uri, array $options = []): IResponse {
$this->setDefaultOptions();
- $response = $this->client->request('head', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('head', $uri, array_merge($this->getRequestOptions(), $options));
return new Response($response);
}
@@ -228,7 +228,7 @@ class Client implements IClient {
$options['form_params'] = $options['body'];
unset($options['body']);
}
- $response = $this->client->request('post', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('post', $uri, array_merge($this->getRequestOptions(), $options));
return new Response($response);
}
@@ -263,7 +263,7 @@ class Client implements IClient {
*/
public function put(string $uri, array $options = []): IResponse {
$this->setDefaultOptions();
- $response = $this->client->request('put', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('put', $uri, array_merge($this->getRequestOptions(), $options));
return new Response($response);
}
@@ -298,7 +298,7 @@ class Client implements IClient {
*/
public function delete(string $uri, array $options = []): IResponse {
$this->setDefaultOptions();
- $response = $this->client->request('delete', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('delete', $uri, array_merge($this->getRequestOptions(), $options));
return new Response($response);
}
@@ -334,7 +334,7 @@ class Client implements IClient {
*/
public function options(string $uri, array $options = []): IResponse {
$this->setDefaultOptions();
- $response = $this->client->request('options', $uri, array_merge($options, $this->getRequestOptions()));
+ $response = $this->client->request('options', $uri, array_merge($this->getRequestOptions(), $options));
return new Response($response);
}
}
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index 72407d2570c..78a60392219 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -30,6 +30,7 @@
namespace OC;
+use OC\Repair\AddCleanupUpdaterBackupsJob;
use OC\Repair\CleanTags;
use OC\Repair\ClearFrontendCaches;
use OC\Repair\Collation;
@@ -135,6 +136,7 @@ class Repair implements IOutput{
new AddLogRotateJob(\OC::$server->getJobList()),
new ClearFrontendCaches(\OC::$server->getMemCacheFactory(), \OC::$server->query(SCSSCacher::class), \OC::$server->query(JSCombiner::class)),
new AddPreviewBackgroundCleanupJob(\OC::$server->getJobList()),
+ new AddCleanupUpdaterBackupsJob(\OC::$server->getJobList()),
];
}
diff --git a/lib/private/Repair/AddCleanupUpdaterBackupsJob.php b/lib/private/Repair/AddCleanupUpdaterBackupsJob.php
new file mode 100644
index 00000000000..1574e665fb6
--- /dev/null
+++ b/lib/private/Repair/AddCleanupUpdaterBackupsJob.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @copyright Copyright (c) 2018 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 OC\Repair;
+
+use OC\Core\BackgroundJobs\BackgroundCleanupUpdaterBackupsJob;
+use OCP\BackgroundJob\IJobList;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class AddCleanupUpdaterBackupsJob implements IRepairStep {
+
+ /** @var IJobList */
+ protected $jobList;
+
+ public function __construct(IJobList $jobList) {
+ $this->jobList = $jobList;
+ }
+
+ public function getName() {
+ return 'Queue a one-time job to cleanup old backups of the updater';
+ }
+
+ public function run(IOutput $output) {
+ $this->jobList->add(BackgroundCleanupUpdaterBackupsJob::class);
+ }
+}
+
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index f08b721d143..3282121d967 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -228,7 +228,7 @@ class Throttler {
return 0;
}
- $maxDelay = 30;
+ $maxDelay = 25;
$firstDelay = 0.1;
if ($attempts > (8 * PHP_INT_SIZE - 1)) {
// Don't ever overflow. Just assume the maxDelay time:s
diff --git a/lib/private/Server.php b/lib/private/Server.php
index f230ce5b884..31f088ea718 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -339,15 +339,7 @@ class Server extends ServerContainer implements IServerContainer {
$dbConnection = $c->getDatabaseConnection();
return new Authentication\Token\DefaultTokenMapper($dbConnection);
});
- $this->registerService(Authentication\Token\DefaultTokenProvider::class, function (Server $c) {
- $mapper = $c->query(Authentication\Token\DefaultTokenMapper::class);
- $crypto = $c->getCrypto();
- $config = $c->getConfig();
- $logger = $c->getLogger();
- $timeFactory = new TimeFactory();
- return new \OC\Authentication\Token\DefaultTokenProvider($mapper, $crypto, $config, $logger, $timeFactory);
- });
- $this->registerAlias(IProvider::class, Authentication\Token\DefaultTokenProvider::class);
+ $this->registerAlias(IProvider::class, Authentication\Token\Manager::class);
$this->registerService(\OCP\IUserSession::class, function (Server $c) {
$manager = $c->getUserManager();
@@ -954,7 +946,7 @@ class Server extends ServerContainer implements IServerContainer {
$c->getURLGenerator(),
$c->getMemCacheFactory(),
new Util($c->getConfig(), $this->getAppManager(), $c->getAppDataDir('theming')),
- new ImageManager($c->getConfig(), $c->getAppDataDir('theming'), $c->getURLGenerator()),
+ new ImageManager($c->getConfig(), $c->getAppDataDir('theming'), $c->getURLGenerator(), $this->getMemCacheFactory(), $this->getLogger()),
$c->getAppManager()
);
}
diff --git a/lib/private/Session/CryptoSessionData.php b/lib/private/Session/CryptoSessionData.php
index b63b568875e..01cac631870 100644
--- a/lib/private/Session/CryptoSessionData.php
+++ b/lib/private/Session/CryptoSessionData.php
@@ -150,10 +150,11 @@ class CryptoSessionData implements \ArrayAccess, ISession {
* Wrapper around session_regenerate_id
*
* @param bool $deleteOldSession Whether to delete the old associated session file or not.
+ * @param bool $updateToken Wheater to update the associated auth token
* @return void
*/
- public function regenerateId(bool $deleteOldSession = true) {
- $this->session->regenerateId($deleteOldSession);
+ public function regenerateId(bool $deleteOldSession = true, bool $updateToken = false) {
+ $this->session->regenerateId($deleteOldSession, $updateToken);
}
/**
diff --git a/lib/private/Session/Internal.php b/lib/private/Session/Internal.php
index 1d0466ec349..182754f457c 100644
--- a/lib/private/Session/Internal.php
+++ b/lib/private/Session/Internal.php
@@ -30,6 +30,10 @@ declare(strict_types=1);
namespace OC\Session;
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Token\IProvider;
+use OC\SystemConfig;
+use OCP\IConfig;
use OCP\Session\Exceptions\SessionNotAvailableException;
/**
@@ -111,14 +115,41 @@ class Internal extends Session {
* Wrapper around session_regenerate_id
*
* @param bool $deleteOldSession Whether to delete the old associated session file or not.
+ * @param bool $updateToken Wheater to update the associated auth token
* @return void
*/
- public function regenerateId(bool $deleteOldSession = true) {
+ public function regenerateId(bool $deleteOldSession = true, bool $updateToken = false) {
+ $oldId = null;
+
+ if ($updateToken) {
+ // Get the old id to update the token
+ try {
+ $oldId = $this->getId();
+ } catch (SessionNotAvailableException $e) {
+ // We can't update a token if there is no previous id
+ $updateToken = false;
+ }
+ }
+
try {
@session_regenerate_id($deleteOldSession);
} catch (\Error $e) {
$this->trapError($e->getCode(), $e->getMessage());
}
+
+ if ($updateToken) {
+ // Get the new id to update the token
+ $newId = $this->getId();
+
+ /** @var IProvider $tokenProvider */
+ $tokenProvider = \OC::$server->query(IProvider::class);
+
+ try {
+ $tokenProvider->renewSessionToken($oldId, $newId);
+ } catch (InvalidTokenException $e) {
+ // Just ignore
+ }
+ }
}
/**
diff --git a/lib/private/Session/Memory.php b/lib/private/Session/Memory.php
index 79900bc8067..5a2a3039d7b 100644
--- a/lib/private/Session/Memory.php
+++ b/lib/private/Session/Memory.php
@@ -91,7 +91,7 @@ class Memory extends Session {
*
* @param bool $deleteOldSession
*/
- public function regenerateId(bool $deleteOldSession = true) {}
+ public function regenerateId(bool $deleteOldSession = true, bool $updateToken = false) {}
/**
* Wrapper around session_id
diff --git a/lib/private/Settings/Admin/Overview.php b/lib/private/Settings/Admin/Overview.php
index 6e186dc6f98..51e5808f487 100644
--- a/lib/private/Settings/Admin/Overview.php
+++ b/lib/private/Settings/Admin/Overview.php
@@ -23,112 +23,24 @@
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\IRequest;
-use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
class Overview implements ISettings {
- /** @var IDBConnection|Connection */
- private $db;
- /** @var IRequest */
- private $request;
/** @var IConfig */
private $config;
- /** @var ILockingProvider */
- private $lockingProvider;
- /** @var IL10N */
- private $l;
- /**
- * @param IDBConnection $db
- * @param IRequest $request
- * @param IConfig $config
- * @param ILockingProvider $lockingProvider
- * @param IL10N $l
- */
- public function __construct(IDBConnection $db,
- IRequest $request,
- IConfig $config,
- ILockingProvider $lockingProvider,
- IL10N $l) {
- $this->db = $db;
- $this->request = $request;
+ public function __construct(IConfig $config) {
$this->config = $config;
- $this->lockingProvider = $lockingProvider;
- $this->l = $l;
}
/**
* @return TemplateResponse
*/
public function getForm() {
- try {
- if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
- $invalidTransactionIsolationLevel = false;
- } else {
- $invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED;
- }
- } catch (DBALException $e) {
- // ignore
- $invalidTransactionIsolationLevel = false;
- }
-
- $envPath = getenv('PATH');
-
- // warn if outdated version of a memcache module is used
- $caches = [
- 'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'],
- 'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'],
- ];
- $outdatedCaches = [];
- foreach ($caches as $php_module => $data) {
- $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
- if ($isOutdated) {
- $outdatedCaches[$php_module] = $data;
- }
- }
-
- if ($this->lockingProvider instanceof NoopLockingProvider) {
- $fileLockingType = 'none';
- } else if ($this->lockingProvider instanceof DBLockingProvider) {
- $fileLockingType = 'db';
- } else {
- $fileLockingType = 'cache';
- }
-
- $suggestedOverwriteCliUrl = '';
- if ($this->config->getSystemValue('overwrite.cli.url', '') === '') {
- $suggestedOverwriteCliUrl = $this->request->getServerProtocol() . '://' . $this->request->getInsecureServerHost() . \OC::$WEBROOT;
- if (!$this->config->getSystemValue('config_is_read_only', false)) {
- // Set the overwrite URL when it was not set yet.
- $this->config->setSystemValue('overwrite.cli.url', $suggestedOverwriteCliUrl);
- $suggestedOverwriteCliUrl = '';
- }
- }
-
$parameters = [
- // Diagnosis
- 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
- 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
- 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true),
- 'has_fileinfo' => \OC_Util::fileInfoLoaded(),
- 'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel,
- 'getenvServerNotWorking' => empty($envPath),
- 'OutdatedCacheWarning' => $outdatedCaches,
- 'fileLockingType' => $fileLockingType,
- 'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl,
- 'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
- 'cronErrors' => $this->config->getAppValue('core', 'cronErrors'),
];
return new TemplateResponse('settings', 'settings/admin/overview', $parameters, '');
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index bfccdf392bb..a974eb9808d 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -259,7 +259,7 @@ class Manager implements IManager {
if ($section === 'overview') {
/** @var ISettings $form */
- $form = new Admin\Overview($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
+ $form = new Admin\Overview($this->config);
$forms[$form->getPriority()] = [$form];
$form = new Admin\ServerDevNotice();
$forms[$form->getPriority()] = [$form];
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 5d8455fb5f7..ee1439b9e20 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -626,6 +626,8 @@ class Session implements IUserSession, Emitter {
try {
$sessionId = $this->session->getId();
$pwd = $this->getPassword($password);
+ // Make sure the current sessionId has no leftover tokens
+ $this->tokenProvider->invalidateToken($sessionId);
$this->tokenProvider->generateToken($sessionId, $uid, $loginName, $pwd, $name, IToken::TEMPORARY_TOKEN, $remember);
return true;
} catch (SessionNotAvailableException $ex) {
diff --git a/lib/public/AppFramework/Http/ContentSecurityPolicy.php b/lib/public/AppFramework/Http/ContentSecurityPolicy.php
index 9438c6ead61..c705955bb8a 100644
--- a/lib/public/AppFramework/Http/ContentSecurityPolicy.php
+++ b/lib/public/AppFramework/Http/ContentSecurityPolicy.php
@@ -27,16 +27,19 @@ namespace OCP\AppFramework\Http;
/**
* Class ContentSecurityPolicy is a simple helper which allows applications to
- * modify the Content-Security-Policy sent by ownCloud. Per default only JavaScript,
+ * modify the Content-Security-Policy sent by Nextcloud. Per default only JavaScript,
* stylesheets, images, fonts, media and connections from the same domain
* ('self') are allowed.
*
* Even if a value gets modified above defaults will still get appended. Please
- * notice that ownCloud ships already with sensible defaults and those policies
+ * notice that Nextcloud ships already with sensible defaults and those policies
* should require no modification at all for most use-cases.
*
+ * This class allows unsafe-eval of javascript and unsafe-inline of CSS.
+ *
* @package OCP\AppFramework\Http
* @since 8.1.0
+ * @deprecated 14.0.0 Use one of our stricter CSP policies
*/
class ContentSecurityPolicy extends EmptyContentSecurityPolicy {
/** @var bool Whether inline JS snippets are allowed */
diff --git a/lib/public/AppFramework/Http/StrictContentSecurityPolicy.php b/lib/public/AppFramework/Http/StrictContentSecurityPolicy.php
new file mode 100644
index 00000000000..6713796bdd3
--- /dev/null
+++ b/lib/public/AppFramework/Http/StrictContentSecurityPolicy.php
@@ -0,0 +1,85 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, 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\AppFramework\Http;
+
+/**
+ * Class StrictContentSecurityPolicy is a simple helper which allows applications to
+ * modify the Content-Security-Policy sent by Nextcloud. Per default only JavaScript,
+ * stylesheets, images, fonts, media and connections from the same domain
+ * ('self') are allowed.
+ *
+ * Even if a value gets modified above defaults will still get appended. Please
+ * notice that Nextcloud ships already with sensible defaults and those policies
+ * should require no modification at all for most use-cases.
+ *
+ * This class represents out strictest defaults. They may get change from release
+ * to release if more strict CSP directives become available.
+ *
+ * @package OCP\AppFramework\Http
+ * @since 14.0.0
+ */
+class StrictContentSecurityPolicy extends EmptyContentSecurityPolicy {
+ /** @var bool Whether inline JS snippets are allowed */
+ protected $inlineScriptAllowed = false;
+ /** @var bool Whether eval in JS scripts is allowed */
+ protected $evalScriptAllowed = false;
+ /** @var array Domains from which scripts can get loaded */
+ protected $allowedScriptDomains = [
+ '\'self\'',
+ ];
+ /** @var bool Whether inline CSS is allowed */
+ protected $inlineStyleAllowed = false;
+ /** @var array Domains from which CSS can get loaded */
+ protected $allowedStyleDomains = [
+ '\'self\'',
+ ];
+ /** @var array Domains from which images can get loaded */
+ protected $allowedImageDomains = [
+ '\'self\'',
+ 'data:',
+ 'blob:',
+ ];
+ /** @var array Domains to which connections can be done */
+ protected $allowedConnectDomains = [
+ '\'self\'',
+ ];
+ /** @var array Domains from which media elements can be loaded */
+ protected $allowedMediaDomains = [
+ '\'self\'',
+ ];
+ /** @var array Domains from which object elements can be loaded */
+ protected $allowedObjectDomains = [];
+ /** @var array Domains from which iframes can be loaded */
+ protected $allowedFrameDomains = [];
+ /** @var array Domains from which fonts can be loaded */
+ protected $allowedFontDomains = [
+ '\'self\'',
+ ];
+ /** @var array Domains from which web-workers and nested browsing content can load elements */
+ protected $allowedChildSrcDomains = [];
+
+ /** @var array Domains which can embed this Nextcloud instance */
+ protected $allowedFrameAncestors = [];
+}
diff --git a/lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php b/lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php
new file mode 100644
index 00000000000..c1d6093d880
--- /dev/null
+++ b/lib/public/AppFramework/Http/StrictEvalContentSecurityPolicy.php
@@ -0,0 +1,51 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, 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\AppFramework\Http;
+
+/**
+ * Class StrictInlineContentSecurityPolicy is a simple helper which allows applications to
+ * modify the Content-Security-Policy sent by Nextcloud. Per default only JavaScript,
+ * stylesheets, images, fonts, media and connections from the same domain
+ * ('self') are allowed.
+ *
+ * Even if a value gets modified above defaults will still get appended. Please
+ * notice that Nextcloud ships already with sensible defaults and those policies
+ * should require no modification at all for most use-cases.
+ *
+ * This is a temp helper class from the default ContentSecurityPolicy to allow slow
+ * migration to a stricter CSP. This does not allow unsafe eval.
+ *
+ * @package OCP\AppFramework\Http
+ * @since 14.0.0
+ */
+class StrictEvalContentSecurityPolicy extends ContentSecurityPolicy {
+
+ /**
+ * @since 14.0.0
+ */
+ public function __construct() {
+ $this->inlineStyleAllowed = false;
+ }
+}
diff --git a/lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php b/lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php
new file mode 100644
index 00000000000..65630de7b76
--- /dev/null
+++ b/lib/public/AppFramework/Http/StrictInlineContentSecurityPolicy.php
@@ -0,0 +1,51 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, 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\AppFramework\Http;
+
+/**
+ * Class StrictInlineContentSecurityPolicy is a simple helper which allows applications to
+ * modify the Content-Security-Policy sent by Nextcloud. Per default only JavaScript,
+ * stylesheets, images, fonts, media and connections from the same domain
+ * ('self') are allowed.
+ *
+ * Even if a value gets modified above defaults will still get appended. Please
+ * notice that Nextcloud ships already with sensible defaults and those policies
+ * should require no modification at all for most use-cases.
+ *
+ * This is a temp helper class from the default ContentSecurityPolicy to allow slow
+ * migration to a stricter CSP. This does not allow inline styles.
+ *
+ * @package OCP\AppFramework\Http
+ * @since 14.0.0
+ */
+class StrictInlineContentSecurityPolicy extends ContentSecurityPolicy {
+
+ /**
+ * @since 14.0.0
+ */
+ public function __construct() {
+ $this->inlineStyleAllowed = false;
+ }
+}
diff --git a/lib/public/IAvatar.php b/lib/public/IAvatar.php
index a6731b63be9..85863357069 100644
--- a/lib/public/IAvatar.php
+++ b/lib/public/IAvatar.php
@@ -8,6 +8,7 @@
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license AGPL-3.0
*
@@ -26,6 +27,7 @@
*/
namespace OCP;
+
use OCP\Files\File;
use OCP\Files\NotFoundException;
@@ -79,6 +81,13 @@ interface IAvatar {
public function getFile($size);
/**
+ * @param string $text
+ * @return Color Object containting r g b int in the range [0, 255]
+ * @since 14.0.0
+ */
+ public function avatarBackgroundColor(string $text);
+
+ /**
* Handle a changed user
* @since 13.0.0
*/
diff --git a/lib/public/ISession.php b/lib/public/ISession.php
index 411356b8dcc..bbf36c86520 100644
--- a/lib/public/ISession.php
+++ b/lib/public/ISession.php
@@ -96,10 +96,11 @@ interface ISession {
* Wrapper around session_regenerate_id
*
* @param bool $deleteOldSession Whether to delete the old associated session file or not.
+ * @param bool $updateToken Wheater to update the associated auth token
* @return void
- * @since 9.0.0
+ * @since 9.0.0, $updateToken added in 14.0.0
*/
- public function regenerateId(bool $deleteOldSession = true);
+ public function regenerateId(bool $deleteOldSession = true, bool $updateToken = false);
/**
* Wrapper around session_id