diff options
Diffstat (limited to 'lib')
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 |