summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml97
-rw-r--r--apps/comments/l10n/et_EE.js21
-rw-r--r--apps/comments/l10n/et_EE.json21
-rw-r--r--apps/encryption/l10n/sk.js2
-rw-r--r--apps/encryption/l10n/sk.json2
-rw-r--r--apps/federatedfilesharing/l10n/fr.js14
-rw-r--r--apps/federatedfilesharing/l10n/fr.json14
-rw-r--r--apps/federatedfilesharing/l10n/it.js6
-rw-r--r--apps/federatedfilesharing/l10n/it.json6
-rw-r--r--apps/federation/l10n/de.js2
-rw-r--r--apps/federation/l10n/de.json2
-rw-r--r--apps/federation/l10n/fr.js2
-rw-r--r--apps/federation/l10n/fr.json2
-rw-r--r--apps/files_external/l10n/fr.js2
-rw-r--r--apps/files_external/l10n/fr.json2
-rw-r--r--apps/files_external/l10n/it.js2
-rw-r--r--apps/files_external/l10n/it.json2
-rw-r--r--apps/files_sharing/ajax/shareinfo.php111
-rw-r--r--apps/files_sharing/appinfo/routes.php15
-rw-r--r--apps/files_sharing/l10n/it.js1
-rw-r--r--apps/files_sharing/l10n/it.json1
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php8
-rw-r--r--apps/files_sharing/lib/Controller/ShareInfoController.php130
-rw-r--r--apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php86
-rw-r--r--apps/files_sharing/tests/Controller/ShareInfoControllerTest.php278
-rw-r--r--apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php136
-rw-r--r--apps/files_versions/l10n/et_EE.js7
-rw-r--r--apps/files_versions/l10n/et_EE.json7
-rw-r--r--apps/oauth2/l10n/de.js2
-rw-r--r--apps/oauth2/l10n/de.json2
-rw-r--r--apps/oauth2/l10n/de_DE.js2
-rw-r--r--apps/oauth2/l10n/de_DE.json2
-rw-r--r--apps/sharebymail/l10n/it.js28
-rw-r--r--apps/sharebymail/l10n/it.json28
-rw-r--r--apps/theming/js/settings-admin.js18
-rw-r--r--apps/theming/lib/Controller/ThemingController.php13
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php120
-rw-r--r--apps/updatenotification/l10n/it.js5
-rw-r--r--apps/updatenotification/l10n/it.json5
-rw-r--r--apps/updatenotification/l10n/ja.js2
-rw-r--r--apps/updatenotification/l10n/ja.json2
-rw-r--r--apps/user_ldap/l10n/it.js14
-rw-r--r--apps/user_ldap/l10n/it.json14
-rw-r--r--apps/user_ldap/lib/ILDAPWrapper.php4
-rw-r--r--apps/user_ldap/lib/LDAP.php4
-rw-r--r--apps/user_ldap/lib/Wizard.php19
-rw-r--r--console.php6
-rw-r--r--core/l10n/es_MX.js6
-rw-r--r--core/l10n/es_MX.json6
-rw-r--r--core/l10n/et_EE.js272
-rw-r--r--core/l10n/et_EE.json270
-rw-r--r--core/l10n/fr.js4
-rw-r--r--core/l10n/fr.json4
-rw-r--r--core/l10n/it.js21
-rw-r--r--core/l10n/it.json21
-rw-r--r--core/l10n/ja.js24
-rw-r--r--core/l10n/ja.json24
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/it.js7
-rw-r--r--lib/l10n/it.json7
-rw-r--r--lib/private/Files/Storage/Local.php6
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/Repair/Owncloud/DropAccountTermsTable.php60
-rw-r--r--lib/private/Updater.php4
-rw-r--r--settings/css/settings.css4
-rw-r--r--settings/l10n/et_EE.js2
-rw-r--r--settings/l10n/et_EE.json2
-rw-r--r--settings/l10n/it.js38
-rw-r--r--settings/l10n/it.json38
-rw-r--r--tests/acceptance/config/behat.yml1
-rw-r--r--tests/acceptance/features/app-theming.feature23
-rw-r--r--tests/acceptance/features/bootstrap/ThemingAppContext.php154
-rw-r--r--tests/acceptance/features/core/Actor.php9
74 files changed, 2042 insertions, 238 deletions
diff --git a/.drone.yml b/.drone.yml
index ec43119585f..923eaa27d1f 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -235,6 +235,54 @@ pipeline:
matrix:
DB: mysql
PHP: 7.1
+ mysql5.6-php5.6:
+ image: nextcloudci/php5.6:php5.6-7
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.6
+ PHP: 5.6
+ mysql5.6-php7.0:
+ image: nextcloudci/php7.0:php7.0-13
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.6
+ PHP: "7.0"
+ mysql5.6-php7.1:
+ image: nextcloudci/php7.1:php7.1-12
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.6
+ PHP: 7.1
+ mysql5.5-php5.6:
+ image: nextcloudci/php5.6:php5.6-7
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.5
+ PHP: 5.6
+ mysql5.5-php7.0:
+ image: nextcloudci/php7.0:php7.0-13
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.5
+ PHP: "7.0"
+ mysql5.5-php7.1:
+ image: nextcloudci/php7.1:php7.1-12
+ commands:
+ - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql5.5
+ PHP: 7.1
postgres-php5.6:
image: nextcloudci/php5.6:php5.6-7
commands:
@@ -540,6 +588,13 @@ pipeline:
when:
matrix:
TESTS-ACCEPTANCE: app-files
+ acceptance-app-theming:
+ image: nextcloudci/integration-php7.0:integration-php7.0-4
+ commands:
+ - tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-app-theming --selenium-server selenium:4444 allow-git-repository-modifications features/app-theming.feature
+ when:
+ matrix:
+ TESTS-ACCEPTANCE: app-theming
acceptance-login:
image: nextcloudci/integration-php7.0:integration-php7.0-4
commands:
@@ -638,6 +693,24 @@ matrix:
- DB: mysql
PHP: 7.1
ENABLE_REDIS: true
+ - DB: mysql5.6
+ PHP: 5.6
+ ENABLE_REDIS: true
+ - DB: mysql5.6
+ PHP: 7.0
+ ENABLE_REDIS: true
+ - DB: mysql5.6
+ PHP: 7.1
+ ENABLE_REDIS: true
+ - DB: mysql5.5
+ PHP: 5.6
+ ENABLE_REDIS: true
+ - DB: mysql5.5
+ PHP: 7.0
+ ENABLE_REDIS: true
+ - DB: mysql5.5
+ PHP: 7.1
+ ENABLE_REDIS: true
- DB: postgres
PHP: 5.6
ENABLE_REDIS: true
@@ -686,6 +759,8 @@ matrix:
- TESTS: acceptance
TESTS-ACCEPTANCE: app-files
- TESTS: acceptance
+ TESTS-ACCEPTANCE: app-theming
+ - TESTS: acceptance
TESTS-ACCEPTANCE: login
- TESTS: jsunit
- TESTS: syntax-php5.6
@@ -728,7 +803,7 @@ services:
matrix:
DB: postgres
mysql:
- image: mysql
+ image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=owncloud
- MYSQL_USER=oc_autotest
@@ -737,6 +812,26 @@ services:
when:
matrix:
DB: mysql
+ mysql:
+ image: mysql:5.6
+ environment:
+ - MYSQL_ROOT_PASSWORD=owncloud
+ - MYSQL_USER=oc_autotest
+ - MYSQL_PASSWORD=owncloud
+ - MYSQL_DATABASE=oc_autotest
+ when:
+ matrix:
+ DB: mysql5.6
+ mysql:
+ image: mysql:5.5
+ environment:
+ - MYSQL_ROOT_PASSWORD=owncloud
+ - MYSQL_USER=oc_autotest
+ - MYSQL_PASSWORD=owncloud
+ - MYSQL_DATABASE=oc_autotest
+ when:
+ matrix:
+ DB: mysql5.5
mysqlmb4:
image: mysql
environment:
diff --git a/apps/comments/l10n/et_EE.js b/apps/comments/l10n/et_EE.js
index 0979ed0c04b..ddebbc786a4 100644
--- a/apps/comments/l10n/et_EE.js
+++ b/apps/comments/l10n/et_EE.js
@@ -1,22 +1,29 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Kirjuta uus komentaar...",
+ "Comments" : "Kommentaarid",
+ "Unknown user" : "Tundmatu kasutaja",
+ "New comment …" : "Uus kommentaar",
"Delete comment" : "Kustuta kommentaar",
"Post" : "Postita",
"Cancel" : "Loobu",
"Edit comment" : "Muuda kommentaari",
"[Deleted user]" : "[Kustutatud kasutaja]",
- "Comments" : "Kommentaarid",
- "No other comments available" : "Ühtegi teist kommentaari pole saadaval",
- "More comments..." : "Veel kommentaare...",
+ "No comments yet, start the conversation!" : "Kommentaare veel pole, alusta vestlust",
+ "More comments …" : "Veel kommentaare ...",
"Save" : "Salvesta",
"Allowed characters {count} of {max}" : "Lubatud märkide arv {count}/{max}",
- "{count} unread comments" : "{count} lugemata kommentaari",
+ "Error occurred while retrieving comment with id {id}" : "Kommentaari {id} laadimisel tekkis tõrge",
+ "Error occurred while updating comment with id {id}" : "Kommentaari {id} uuendamisel tekkis tõrge",
+ "Error occurred while posting comment" : "Viga kommentaari postitamisel",
"Comment" : "Kommentaar",
"You commented" : "Sa kommenteerisid",
"%1$s commented" : "%1$s kommenteeris",
- "You commented on %2$s" : "Sa kommenteerisid %2$s",
- "%1$s commented on %2$s" : "%1$s kommenteeris %2$s"
+ "{author} commented" : "{author} kommenteeris",
+ "You commented on %1$s" : "Sa kommmenteerisid %1$s",
+ "You commented on {file}" : "Sa kommenteerisid faili {file}",
+ "%1$s commented on %2$s" : "%1$s kommenteeris %2$s",
+ "{author} commented on {file}" : "{author} kommenteeris faili {file}",
+ "<strong>Comments</strong> for files" : "<strong>kommentaari</strong> ffailidele"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/et_EE.json b/apps/comments/l10n/et_EE.json
index 93051ab6ddd..12c44872dfe 100644
--- a/apps/comments/l10n/et_EE.json
+++ b/apps/comments/l10n/et_EE.json
@@ -1,20 +1,27 @@
{ "translations": {
- "Type in a new comment..." : "Kirjuta uus komentaar...",
+ "Comments" : "Kommentaarid",
+ "Unknown user" : "Tundmatu kasutaja",
+ "New comment …" : "Uus kommentaar",
"Delete comment" : "Kustuta kommentaar",
"Post" : "Postita",
"Cancel" : "Loobu",
"Edit comment" : "Muuda kommentaari",
"[Deleted user]" : "[Kustutatud kasutaja]",
- "Comments" : "Kommentaarid",
- "No other comments available" : "Ühtegi teist kommentaari pole saadaval",
- "More comments..." : "Veel kommentaare...",
+ "No comments yet, start the conversation!" : "Kommentaare veel pole, alusta vestlust",
+ "More comments …" : "Veel kommentaare ...",
"Save" : "Salvesta",
"Allowed characters {count} of {max}" : "Lubatud märkide arv {count}/{max}",
- "{count} unread comments" : "{count} lugemata kommentaari",
+ "Error occurred while retrieving comment with id {id}" : "Kommentaari {id} laadimisel tekkis tõrge",
+ "Error occurred while updating comment with id {id}" : "Kommentaari {id} uuendamisel tekkis tõrge",
+ "Error occurred while posting comment" : "Viga kommentaari postitamisel",
"Comment" : "Kommentaar",
"You commented" : "Sa kommenteerisid",
"%1$s commented" : "%1$s kommenteeris",
- "You commented on %2$s" : "Sa kommenteerisid %2$s",
- "%1$s commented on %2$s" : "%1$s kommenteeris %2$s"
+ "{author} commented" : "{author} kommenteeris",
+ "You commented on %1$s" : "Sa kommmenteerisid %1$s",
+ "You commented on {file}" : "Sa kommenteerisid faili {file}",
+ "%1$s commented on %2$s" : "%1$s kommenteeris %2$s",
+ "{author} commented on {file}" : "{author} kommenteeris faili {file}",
+ "<strong>Comments</strong> for files" : "<strong>kommentaari</strong> ffailidele"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/sk.js b/apps/encryption/l10n/sk.js
index 91b90843699..1fe170ebd1b 100644
--- a/apps/encryption/l10n/sk.js
+++ b/apps/encryption/l10n/sk.js
@@ -23,6 +23,8 @@ OC.L10N.register(
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Aplikácia na šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a prihláste sa znova.",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Ak chcete použiť šifrovací modul, povoľte šifrovanie na strane servera v nastaveniach administrátora.",
"Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
"Bad Signature" : "Zlý podpis",
"Missing Signature" : "Chýbajúci podpis",
diff --git a/apps/encryption/l10n/sk.json b/apps/encryption/l10n/sk.json
index aa753b04d90..fc68f078c61 100644
--- a/apps/encryption/l10n/sk.json
+++ b/apps/encryption/l10n/sk.json
@@ -21,6 +21,8 @@
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Aplikácia na šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a prihláste sa znova.",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Ak chcete použiť šifrovací modul, povoľte šifrovanie na strane servera v nastaveniach administrátora.",
"Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
"Bad Signature" : "Zlý podpis",
"Missing Signature" : "Chýbajúci podpis",
diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js
index 8121555a24b..8a9d969ebb7 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -12,7 +12,7 @@ OC.L10N.register(
"Not supported!" : "Non supporté!",
"Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.",
"Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.",
- "Invalid Federated Cloud ID" : "ID Federated Cloud incorrect",
+ "Invalid Federated Cloud ID" : "ID de Cloud Fédéré incorrect",
"Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
"Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.",
"Couldn't establish a federated share, maybe the password was wrong." : "Impossible d'établir un partage fédéré, peut-être que le mot de passe est incorrect.",
@@ -35,19 +35,19 @@ OC.L10N.register(
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
"Accept" : "Accepter",
"Decline" : "Refuser",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant de Cloud Fédéré #Nextcloud %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant de Cloud Fédéré #Nextcloud",
"Sharing" : "Partage",
- "Federated Cloud Sharing" : "Federated Cloud Sharing",
+ "Federated Cloud Sharing" : "Partage Cloud Fédéré",
"Open documentation" : "Voir la documentation",
"Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs.",
"Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
"Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
"Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs",
"Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public",
- "Federated Cloud" : "Federated Cloud",
- "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Vous pouvez partager avec n'importe qui qui utilise Nextcloud, ownCloud ou Pydio ! Renseignez simplement leur Federated Cloud ID dans la boîte de dialogue de partage. Cela ressemble à person@cloud.example.com",
- "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :",
+ "Federated Cloud" : "Cloud Fédéré",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Vous pouvez partager avec n'importe qui utilisant Nextcloud, ownCloud ou Pydio ! Renseignez simplement leur ID de Cloud Fédéré dans la boîte de dialogue de partage. Il ressemble à person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Votre identifiant de Cloud Fédéré :",
"Share it so your friends can share files with you:" : "Partagez-le afin que vos amis puissent partager des fichiers avec vous :",
"Add to your website" : "Ajouter à votre site web",
"Share with me via Nextcloud" : "Partagez avec moi via Nextcloud",
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index d4420b6c9ff..77bae9ca184 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -10,7 +10,7 @@
"Not supported!" : "Non supporté!",
"Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.",
"Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.",
- "Invalid Federated Cloud ID" : "ID Federated Cloud incorrect",
+ "Invalid Federated Cloud ID" : "ID de Cloud Fédéré incorrect",
"Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
"Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.",
"Couldn't establish a federated share, maybe the password was wrong." : "Impossible d'établir un partage fédéré, peut-être que le mot de passe est incorrect.",
@@ -33,19 +33,19 @@
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
"Accept" : "Accepter",
"Decline" : "Refuser",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant de Cloud Fédéré #Nextcloud %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant de Cloud Fédéré #Nextcloud",
"Sharing" : "Partage",
- "Federated Cloud Sharing" : "Federated Cloud Sharing",
+ "Federated Cloud Sharing" : "Partage Cloud Fédéré",
"Open documentation" : "Voir la documentation",
"Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs.",
"Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
"Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
"Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs",
"Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public",
- "Federated Cloud" : "Federated Cloud",
- "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Vous pouvez partager avec n'importe qui qui utilise Nextcloud, ownCloud ou Pydio ! Renseignez simplement leur Federated Cloud ID dans la boîte de dialogue de partage. Cela ressemble à person@cloud.example.com",
- "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :",
+ "Federated Cloud" : "Cloud Fédéré",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Vous pouvez partager avec n'importe qui utilisant Nextcloud, ownCloud ou Pydio ! Renseignez simplement leur ID de Cloud Fédéré dans la boîte de dialogue de partage. Il ressemble à person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Votre identifiant de Cloud Fédéré :",
"Share it so your friends can share files with you:" : "Partagez-le afin que vos amis puissent partager des fichiers avec vous :",
"Add to your website" : "Ajouter à votre site web",
"Share with me via Nextcloud" : "Partagez avec moi via Nextcloud",
diff --git a/apps/federatedfilesharing/l10n/it.js b/apps/federatedfilesharing/l10n/it.js
index 4e0c58aeffe..7ac7a3e96ab 100644
--- a/apps/federatedfilesharing/l10n/it.js
+++ b/apps/federatedfilesharing/l10n/it.js
@@ -16,11 +16,13 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
"Couldn't establish a federated share." : "Impossibile stabilire una condivisione federata.",
"Couldn't establish a federated share, maybe the password was wrong." : "Impossibile stabilire una condivisione federata, forse la password non è corretta.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Richiesta della condivisione federata inviata, riceverai un invito. Controlla le tue notifiche.",
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
"Not allowed to create a federated share with the owner." : "Non è consentito creare una condivisione federata con il proprietario.",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
"Storage not valid" : "Archiviazione non valida",
+ "Federated share added" : "Condivisione federata aggiunta",
"Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
"Sharing %s failed, because this item is already shared with %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con %s",
"Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente",
@@ -38,15 +40,19 @@ OC.L10N.register(
"Sharing" : "Condivisione",
"Federated Cloud Sharing" : "Condivisione cloud federata",
"Open documentation" : "Apri la documentazione",
+ "Adjust how people can share between servers." : "Regola come le persone possono condividere tra i server.",
"Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
"Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
"Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica",
"Allow users to publish their data to a global and public address book" : "Consenti agli utenti di pubblicare i propri dati in una rubrica globale e pubblica",
"Federated Cloud" : "Cloud federata",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Puoi condividere con chiunque utilizzi Nextcloud, ownCloud o Pydio! Ti basta inserire il loro ID di cloud federata nella finestra di condivisione. Assomiglia a persona@cloud.esempio.com ",
"Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
+ "Share it so your friends can share files with you:" : "Condividilo in modo che i tuoi amici possano condividere file con te:",
"Add to your website" : "Aggiungi al tuo sito web",
"Share with me via Nextcloud" : "Condividi con me tramite Nextcloud",
"HTML Code:" : "Codice HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Cerca utenti nella rubrica globale e pubblica e consenti agli utenti di pubblicare i loro dati",
"Share it:" : "Condividilo:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/it.json b/apps/federatedfilesharing/l10n/it.json
index 56ec3b6ddb3..c82880e4fc2 100644
--- a/apps/federatedfilesharing/l10n/it.json
+++ b/apps/federatedfilesharing/l10n/it.json
@@ -14,11 +14,13 @@
"Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
"Couldn't establish a federated share." : "Impossibile stabilire una condivisione federata.",
"Couldn't establish a federated share, maybe the password was wrong." : "Impossibile stabilire una condivisione federata, forse la password non è corretta.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Richiesta della condivisione federata inviata, riceverai un invito. Controlla le tue notifiche.",
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
"Not allowed to create a federated share with the owner." : "Non è consentito creare una condivisione federata con il proprietario.",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
"Storage not valid" : "Archiviazione non valida",
+ "Federated share added" : "Condivisione federata aggiunta",
"Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
"Sharing %s failed, because this item is already shared with %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con %s",
"Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente",
@@ -36,15 +38,19 @@
"Sharing" : "Condivisione",
"Federated Cloud Sharing" : "Condivisione cloud federata",
"Open documentation" : "Apri la documentazione",
+ "Adjust how people can share between servers." : "Regola come le persone possono condividere tra i server.",
"Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
"Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
"Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica",
"Allow users to publish their data to a global and public address book" : "Consenti agli utenti di pubblicare i propri dati in una rubrica globale e pubblica",
"Federated Cloud" : "Cloud federata",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Puoi condividere con chiunque utilizzi Nextcloud, ownCloud o Pydio! Ti basta inserire il loro ID di cloud federata nella finestra di condivisione. Assomiglia a persona@cloud.esempio.com ",
"Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
+ "Share it so your friends can share files with you:" : "Condividilo in modo che i tuoi amici possano condividere file con te:",
"Add to your website" : "Aggiungi al tuo sito web",
"Share with me via Nextcloud" : "Condividi con me tramite Nextcloud",
"HTML Code:" : "Codice HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Cerca utenti nella rubrica globale e pubblica e consenti agli utenti di pubblicare i loro dati",
"Share it:" : "Condividilo:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js
index a8e4d9dd6d1..c6de0d61c39 100644
--- a/apps/federation/l10n/de.js
+++ b/apps/federation/l10n/de.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"federation",
{
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
- "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.",
+ "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.",
"No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Trusted servers" : "Vertrauenswürdige Server",
diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json
index 01c517ce9e2..78ab44df839 100644
--- a/apps/federation/l10n/de.json
+++ b/apps/federation/l10n/de.json
@@ -1,6 +1,6 @@
{ "translations": {
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
- "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.",
+ "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.",
"No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Trusted servers" : "Vertrauenswürdige Server",
diff --git a/apps/federation/l10n/fr.js b/apps/federation/l10n/fr.js
index d67862f6a01..7d2278c7866 100644
--- a/apps/federation/l10n/fr.js
+++ b/apps/federation/l10n/fr.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé",
"Could not add server" : "Impossible d'ajouter le serveur",
"Trusted servers" : "Serveurs de confiance",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
"Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès",
"+ Add trusted server" : "+ Ajouter un serveur de confiance",
"Trusted server" : "Serveur de confiance",
diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json
index 24dc0aee7f6..2d2edb39e75 100644
--- a/apps/federation/l10n/fr.json
+++ b/apps/federation/l10n/fr.json
@@ -4,7 +4,7 @@
"No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé",
"Could not add server" : "Impossible d'ajouter le serveur",
"Trusted servers" : "Serveurs de confiance",
- "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
"Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès",
"+ Add trusted server" : "+ Ajouter un serveur de confiance",
"Trusted server" : "Serveur de confiance",
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index bab2225b544..649b7969788 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Please provide a valid app key and secret." : "Veuillez fournir une clé d'application et un mot de passe valides.",
"Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s",
"Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s",
- "External storages" : "Stockages externe",
+ "External storages" : "Stockages externes",
"Dropbox App Configuration" : "Configuration de l'application Dropbox",
"Google Drive App Configuration" : "Configuration de l'application Google Drive",
"Personal" : "Personnel",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 0a8583a9e6e..058c415b5e2 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -4,7 +4,7 @@
"Please provide a valid app key and secret." : "Veuillez fournir une clé d'application et un mot de passe valides.",
"Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s",
"Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s",
- "External storages" : "Stockages externe",
+ "External storages" : "Stockages externes",
"Dropbox App Configuration" : "Configuration de l'application Dropbox",
"Google Drive App Configuration" : "Configuration de l'application Google Drive",
"Personal" : "Personnel",
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index d59a08c8407..695aa7c11cc 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -24,11 +24,13 @@ OC.L10N.register(
"Saving..." : "Salvataggio in corso...",
"Save" : "Salva",
"Empty response from the server" : "Risposta vuota dal server",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Impossibile accedere. Chiudi la sessione e accedi nuovamente per attivare questo punto di mount",
"Couldn't get the information from the remote server: {code} {type}" : "Impossibile ottenere le informazioni dal server remoto: {code} {tipo}",
"Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}",
"There was an error with message: " : "Si è verificato un errore con il messaggio:",
"External mount error" : "Errore di mount esterno",
"external-storage" : "archiviazione-esterna",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni",
"Please enter the credentials for the {mount} mount" : "Digita le credenziali per montare {mount}",
"Username" : "Nome utente",
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index 975905139b8..469d1569dfa 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -22,11 +22,13 @@
"Saving..." : "Salvataggio in corso...",
"Save" : "Salva",
"Empty response from the server" : "Risposta vuota dal server",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Impossibile accedere. Chiudi la sessione e accedi nuovamente per attivare questo punto di mount",
"Couldn't get the information from the remote server: {code} {type}" : "Impossibile ottenere le informazioni dal server remoto: {code} {tipo}",
"Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}",
"There was an error with message: " : "Si è verificato un errore con il messaggio:",
"External mount error" : "Errore di mount esterno",
"external-storage" : "archiviazione-esterna",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni",
"Please enter the credentials for the {mount} mount" : "Digita le credenziali per montare {mount}",
"Username" : "Nome utente",
diff --git a/apps/files_sharing/ajax/shareinfo.php b/apps/files_sharing/ajax/shareinfo.php
deleted file mode 100644
index a32b0a07328..00000000000
--- a/apps/files_sharing/ajax/shareinfo.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Stefan Weil <sw@weilnetz.de>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-OCP\JSON::checkAppEnabled('files_sharing');
-
-if (!isset($_GET['t'])) {
- \OC_Response::setStatus(400); //400 Bad Request
- exit;
-}
-
-$federatedSharingApp = new \OCA\FederatedFileSharing\AppInfo\Application();
-$federatedShareProvider = $federatedSharingApp->getFederatedShareProvider();
-
-if ($federatedShareProvider->isOutgoingServer2serverShareEnabled() === false) {
- \OC_Response::setStatus(404); // 404 not found
- exit;
-}
-
-$token = $_GET['t'];
-
-$password = null;
-if (isset($_POST['password'])) {
- $password = $_POST['password'];
-}
-
-$relativePath = null;
-if (isset($_GET['dir'])) {
- $relativePath = $_GET['dir'];
-}
-
-$data = \OCA\Files_Sharing\Helper::setupFromToken($token, $relativePath, $password);
-
-/** @var \OCP\Share\IShare $share */
-$share = $data['share'];
-// Load the files
-$path = $data['realPath'];
-
-$isWritable = $share->getPermissions() & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
-if (!$isWritable) {
- // FIXME: should not add storage wrappers outside of preSetup, need to find a better way
- $previousLog = \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper(false);
- \OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) {
- return new \OC\Files\Storage\Wrapper\PermissionsMask(array('storage' => $storage, 'mask' => \OCP\Constants::PERMISSION_READ + \OCP\Constants::PERMISSION_SHARE));
- });
- \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper($previousLog);
-}
-
-$rootInfo = \OC\Files\Filesystem::getFileInfo($path);
-$rootView = new \OC\Files\View('');
-
-if($rootInfo === false || !($share->getPermissions() & \OCP\Constants::PERMISSION_READ)) {
- OCP\JSON::error(array('data' => 'Share is not readable.'));
- exit();
-}
-
-/**
- * @param \OCP\Files\FileInfo $dir
- * @param \OC\Files\View $view
- * @return array
- */
-function getChildInfo($dir, $view, $sharePermissions) {
- $children = $view->getDirectoryContent($dir->getPath());
- $result = array();
- foreach ($children as $child) {
- $formatted = \OCA\Files\Helper::formatFileInfo($child);
- if ($child->getType() === 'dir') {
- $formatted['children'] = getChildInfo($child, $view, $sharePermissions);
- }
- $formatted['mtime'] = $formatted['mtime'] / 1000;
- $formatted['permissions'] = $sharePermissions & (int)$formatted['permissions'];
- $result[] = $formatted;
- }
- return $result;
-}
-
-$result = \OCA\Files\Helper::formatFileInfo($rootInfo);
-$result['mtime'] = $result['mtime'] / 1000;
-$result['permissions'] = (int)$result['permissions'] & $share->getPermissions();
-
-
-if ($rootInfo->getType() === 'dir') {
- $result['children'] = getChildInfo($rootInfo, $rootView, $share->getPermissions());
-}
-
-OCP\JSON::success(array('data' => $result));
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index 7a5f5650fc5..310b1c46eb6 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -26,8 +26,7 @@
*
*/
-$application = new \OCA\Files_Sharing\AppInfo\Application();
-$application->registerRoutes($this, [
+return [
'resources' => [
'ExternalShares' => ['url' => '/api/externalShares'],
],
@@ -48,6 +47,12 @@ $application->registerRoutes($this, [
'url' => '/ajax/publicpreview.php',
'verb' => 'GET',
],
+
+ [
+ 'name' => 'ShareInfo#info',
+ 'url' => '/shareinfo',
+ 'verb' => 'POST',
+ ],
],
'ocs' => [
/*
@@ -120,8 +125,4 @@ $application->registerRoutes($this, [
'verb' => 'DELETE',
],
],
-]);
-
-/** @var $this \OCP\Route\IRouter */
-$this->create('sharing_external_shareinfo', '/shareinfo')
- ->actionInclude('files_sharing/ajax/shareinfo.php');
+];
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 749c85d0493..3f2a9a968d7 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -102,6 +102,7 @@ OC.L10N.register(
"the link expired" : "il collegamento è scaduto",
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
+ "shared by %s" : "condiviso da %s",
"Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
"Download %s" : "Scarica %s",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index 5cce4c494fd..e45ada6a57e 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -100,6 +100,7 @@
"the link expired" : "il collegamento è scaduto",
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
+ "shared by %s" : "condiviso da %s",
"Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
"Download %s" : "Scarica %s",
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index db2175c3445..3e95c738df8 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -28,6 +28,7 @@
namespace OCA\Files_Sharing\AppInfo;
use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware;
+use OCA\Files_Sharing\Middleware\ShareInfoMiddleware;
use OCA\Files_Sharing\MountProvider;
use OCP\AppFramework\App;
use OC\AppFramework\Utility\SimpleContainer;
@@ -124,9 +125,16 @@ class Application extends App {
);
});
+ $container->registerService(ShareInfoMiddleware::class, function () use ($server) {
+ return new ShareInfoMiddleware(
+ $server->getShareManager()
+ );
+ });
+
// Execute middlewares
$container->registerMiddleWare('SharingCheckMiddleware');
$container->registerMiddleWare('OCSShareAPIMiddleware');
+ $container->registerMiddleWare(ShareInfoMiddleware::class);
$container->registerService('MountProvider', function (IContainer $c) {
/** @var \OCP\IServerContainer $server */
diff --git a/apps/files_sharing/lib/Controller/ShareInfoController.php b/apps/files_sharing/lib/Controller/ShareInfoController.php
new file mode 100644
index 00000000000..ccf7b7093a5
--- /dev/null
+++ b/apps/files_sharing/lib/Controller/ShareInfoController.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace OCA\Files_Sharing\Controller;
+
+use OCA\Files_External\NotFoundException;
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\Constants;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use OCP\Files\Node;
+use OCP\ILogger;
+use OCP\IRequest;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Share\IManager;
+
+class ShareInfoController extends ApiController {
+
+ /** @var IManager */
+ private $shareManager;
+
+ /**
+ * ShareInfoController constructor.
+ *
+ * @param string $appName
+ * @param IRequest $request
+ * @param IManager $shareManager
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IManager $shareManager) {
+ parent::__construct($appName, $request);
+
+ $this->shareManager = $shareManager;
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $t
+ * @param null $password
+ * @param null $dir
+ * @return JSONResponse
+ * @throws ShareNotFound
+ */
+ public function info($t, $password = null, $dir = null) {
+ try {
+ $share = $this->shareManager->getShareByToken($t);
+ } catch (ShareNotFound $e) {
+ return new JSONResponse([], Http::STATUS_NOT_FOUND);
+ }
+
+ if ($share->getPassword() && !$this->shareManager->checkPassword($share, $password)) {
+ return new JSONResponse([], Http::STATUS_FORBIDDEN);
+ }
+
+ if (!($share->getPermissions() & Constants::PERMISSION_READ)) {
+ return new JSONResponse([], Http::STATUS_FORBIDDEN);
+ }
+
+ $isWritable = $share->getPermissions() & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
+ if (!$isWritable) {
+ $this->addROWrapper();
+ }
+
+ $node = $share->getNode();
+
+ if ($dir !== null && $node instanceof Folder) {
+ try {
+ $node = $node->get($dir);
+ } catch (NotFoundException $e) {
+
+ }
+ }
+
+ return new JSONResponse($this->parseNode($node));
+ }
+
+ private function parseNode(Node $node) {
+ if ($node instanceof File) {
+ return $this->parseFile($node);
+ }
+ return $this->parseFolder($node);
+ }
+
+ private function parseFile(File $file) {
+ return $this->format($file);
+ }
+
+ private function parseFolder(Folder $folder) {
+ $data = $this->format($folder);
+
+ $data['children'] = [];
+
+ $nodes = $folder->getDirectoryListing();
+ foreach ($nodes as $node) {
+ $data['children'][] = $this->parseNode($node);
+ }
+
+ return $data;
+ }
+
+ private function format(Node $node) {
+ $entry = [];
+
+ $entry['id'] = $node->getId();
+ $entry['parentId'] = $node->getParent()->getId();
+ $entry['mtime'] = $node->getMTime();
+
+ $entry['name'] = $node->getName();
+ $entry['permissions'] = $node->getPermissions();
+ $entry['mimetype'] = $node->getMimetype();
+ $entry['size'] = $node->getSize();
+ $entry['type'] = $node->getType();
+ $entry['etag'] = $node->getEtag();
+
+ return $entry;
+ }
+
+ protected function addROWrapper() {
+ // FIXME: should not add storage wrappers outside of preSetup, need to find a better way
+ $previousLog = \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper(false);
+ \OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) {
+ return new \OC\Files\Storage\Wrapper\PermissionsMask(array('storage' => $storage, 'mask' => \OCP\Constants::PERMISSION_READ + \OCP\Constants::PERMISSION_SHARE));
+ });
+ \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper($previousLog);
+ }
+}
diff --git a/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php b/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php
new file mode 100644
index 00000000000..56e9b48f570
--- /dev/null
+++ b/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace OCA\Files_Sharing\Middleware;
+
+use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Files_Sharing\Controller\ShareInfoController;
+use OCA\Files_Sharing\Exceptions\S2SException;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Middleware;
+use OCP\Share\IManager;
+
+class ShareInfoMiddleware extends Middleware {
+ /** @var IManager */
+ private $shareManager;
+
+ public function __construct(IManager $shareManager) {
+ $this->shareManager = $shareManager;
+ }
+
+ /**
+ * @param Controller $controller
+ * @param string $methodName
+ * @throws S2SException
+ */
+ public function beforeController($controller, $methodName) {
+ if (!($controller instanceof ShareInfoController)) {
+ return;
+ }
+
+ if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
+ throw new S2SException();
+ }
+ }
+
+ /**
+ * @param Controller $controller
+ * @param string $methodName
+ * @param \Exception $exception
+ * @throws \Exception
+ * @return Response
+ */
+ public function afterException($controller, $methodName, \Exception $exception) {
+ if (!($controller instanceof ShareInfoController)) {
+ throw $exception;
+ }
+
+ if ($exception instanceof S2SException) {
+ return new JSONResponse([], Http::STATUS_NOT_FOUND);
+ }
+
+ throw $exception;
+ }
+
+ /**
+ * @param Controller $controller
+ * @param string $methodName
+ * @param Response $response
+ * @return Response
+ */
+ public function afterController($controller, $methodName, Response $response) {
+ if (!($controller instanceof ShareInfoController)) {
+ return $response;
+ }
+
+ if (!($response instanceof JSONResponse)) {
+ return $response;
+ }
+
+ $data = $response->getData();
+ $status = 'error';
+
+ if ($response->getStatus() === Http::STATUS_OK) {
+ $status = 'success';
+ }
+
+ $response->setData([
+ 'data' => $data,
+ 'status' => $status,
+ ]);
+
+ return $response;
+ }
+}
diff --git a/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php b/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php
new file mode 100644
index 00000000000..497b7f7d5ae
--- /dev/null
+++ b/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php
@@ -0,0 +1,278 @@
+<?php
+
+namespace OCA\Files_Sharing\Tests\Controller;
+
+use OCA\Files_Sharing\Controller\ShareInfoController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\Constants;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use OCP\IRequest;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Share\IManager as ShareManager;
+use OCP\Share\IShare;
+use Test\TestCase;
+
+class ShareInfoControllerTest extends TestCase {
+
+ /** @var ShareInfoController */
+ private $controller;
+
+ /** @var ShareManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->shareManager = $this->createMock(ShareManager::class);
+
+ $this->controller = $this->getMockBuilder(ShareInfoController::class)
+ ->setConstructorArgs([
+ 'files_sharing',
+ $this->createMock(IRequest::class),
+ $this->shareManager
+ ])
+ ->setMethods(['addROWrapper'])
+ ->getMock();
+ }
+
+ public function testNoShare() {
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willThrowException(new ShareNotFound());
+
+ $expected = new JSONResponse([], Http::STATUS_NOT_FOUND);
+ $this->assertEquals($expected, $this->controller->info('token'));
+ }
+
+ public function testWrongPassword() {
+ $share = $this->createMock(IShare::class);
+ $share->method('getPassword')
+ ->willReturn('sharePass');
+
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->shareManager->method('checkPassword')
+ ->with($share, 'pass')
+ ->willReturn(false);
+
+ $expected = new JSONResponse([], Http::STATUS_FORBIDDEN);
+ $this->assertEquals($expected, $this->controller->info('token', 'pass'));
+ }
+
+ public function testNoReadPermissions() {
+ $share = $this->createMock(IShare::class);
+ $share->method('getPassword')
+ ->willReturn('sharePass');
+ $share->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_CREATE);
+
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->shareManager->method('checkPassword')
+ ->with($share, 'pass')
+ ->willReturn(true);
+
+ $expected = new JSONResponse([], Http::STATUS_FORBIDDEN);
+ $this->assertEquals($expected, $this->controller->info('token', 'pass'));
+ }
+
+ private function prepareFile() {
+ $file = $this->createMock(File::class);
+
+ $file->method('getId')->willReturn(42);
+
+ $parent = $this->createMock(Folder::class);
+ $parent->method('getId')->willReturn(41);
+ $file->method('getParent')->willReturn($parent);
+
+ $file->method('getMTime')->willReturn(1337);
+ $file->method('getName')->willReturn('file');
+ $file->method('getPermissions')->willReturn(Constants::PERMISSION_READ);
+ $file->method('getMimeType')->willReturn('mime/type');
+ $file->method('getSize')->willReturn(1);
+ $file->method('getType')->willReturn('file');
+ $file->method('getEtag')->willReturn('etag');
+
+ return $file;
+ }
+
+ public function testInfoFile() {
+ $file = $this->prepareFile();
+
+ $share = $this->createMock(IShare::class);
+ $share->method('getPassword')
+ ->willReturn('sharePass');
+ $share->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ | Constants::PERMISSION_UPDATE);
+ $share->method('getNode')
+ ->willReturn($file);
+
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->shareManager->method('checkPassword')
+ ->with($share, 'pass')
+ ->willReturn(true);
+
+ $expected = new JSONResponse([
+ 'id' => 42,
+ 'parentId' => 41,
+ 'mtime' => 1337 ,
+ 'name' => 'file',
+ 'permissions' => 1,
+ 'mimetype' => 'mime/type',
+ 'size' => 1,
+ 'type' => 'file',
+ 'etag' => 'etag',
+ ]);
+ $this->assertEquals($expected, $this->controller->info('token', 'pass'));
+ }
+
+ public function testInfoFileRO() {
+ $file = $this->prepareFile();
+
+ $share = $this->createMock(IShare::class);
+ $share->method('getPassword')
+ ->willReturn('sharePass');
+ $share->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ);
+ $share->method('getNode')
+ ->willReturn($file);
+
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->shareManager->method('checkPassword')
+ ->with($share, 'pass')
+ ->willReturn(true);
+
+ $this->controller->expects($this->once())
+ ->method('addROWrapper');
+
+ $expected = new JSONResponse([
+ 'id' => 42,
+ 'parentId' => 41,
+ 'mtime' => 1337 ,
+ 'name' => 'file',
+ 'permissions' => 1,
+ 'mimetype' => 'mime/type',
+ 'size' => 1,
+ 'type' => 'file',
+ 'etag' => 'etag',
+ ]);
+ $this->assertEquals($expected, $this->controller->info('token', 'pass'));
+ }
+
+ private function prepareFolder() {
+ $root = $this->createMock(Folder::class);
+
+ $root->method('getId')->willReturn(42);
+
+ $parent = $this->createMock(Folder::class);
+ $parent->method('getId')->willReturn(41);
+ $root->method('getParent')->willReturn($parent);
+
+ $root->method('getMTime')->willReturn(1337);
+ $root->method('getName')->willReturn('root');
+ $root->method('getPermissions')->willReturn(Constants::PERMISSION_READ);
+ $root->method('getMimeType')->willReturn('mime/type');
+ $root->method('getSize')->willReturn(1);
+ $root->method('getType')->willReturn('folder');
+ $root->method('getEtag')->willReturn('etag');
+
+
+ //Subfolder
+ $sub = $this->createMock(Folder::class);
+
+ $sub->method('getId')->willReturn(43);
+ $sub->method('getParent')->willReturn($root);
+ $sub->method('getMTime')->willReturn(1338);
+ $sub->method('getName')->willReturn('sub');
+ $sub->method('getPermissions')->willReturn(Constants::PERMISSION_READ | Constants::PERMISSION_UPDATE);
+ $sub->method('getMimeType')->willReturn('mime/type');
+ $sub->method('getSize')->willReturn(2);
+ $sub->method('getType')->willReturn('folder');
+ $sub->method('getEtag')->willReturn('etag2');
+
+ $root->method('getDirectoryListing')->willReturn([$sub]);
+
+ //Subfile
+ $file = $this->createMock(File::class);
+ $file->method('getId')->willReturn(88);
+ $file->method('getParent')->willReturn($sub);
+ $file->method('getMTime')->willReturn(1339);
+ $file->method('getName')->willReturn('file');
+ $file->method('getPermissions')->willReturn(Constants::PERMISSION_READ | Constants::PERMISSION_DELETE);
+ $file->method('getMimeType')->willReturn('mime/type');
+ $file->method('getSize')->willReturn(3);
+ $file->method('getType')->willReturn('file');
+ $file->method('getEtag')->willReturn('etag3');
+
+ $sub->method('getDirectoryListing')->willReturn([$file]);
+
+ return $root;
+ }
+
+ public function testInfoFolder() {
+ $file = $this->prepareFolder();
+
+ $share = $this->createMock(IShare::class);
+ $share->method('getPassword')
+ ->willReturn('sharePass');
+ $share->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ | Constants::PERMISSION_UPDATE);
+ $share->method('getNode')
+ ->willReturn($file);
+
+ $this->shareManager->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->shareManager->method('checkPassword')
+ ->with($share, 'pass')
+ ->willReturn(true);
+
+ $expected = new JSONResponse([
+ 'id' => 42,
+ 'parentId' => 41,
+ 'mtime' => 1337,
+ 'name' => 'root',
+ 'permissions' => 1,
+ 'mimetype' => 'mime/type',
+ 'size' => 1,
+ 'type' => 'folder',
+ 'etag' => 'etag',
+ 'children' => [
+ [
+ 'id' => 43,
+ 'parentId' => 42,
+ 'mtime' => 1338,
+ 'name' => 'sub',
+ 'permissions' => 3,
+ 'mimetype' => 'mime/type',
+ 'size' => 2,
+ 'type' => 'folder',
+ 'etag' => 'etag2',
+ 'children' => [
+ [
+ 'id' => 88,
+ 'parentId' => 43,
+ 'mtime' => 1339,
+ 'name' => 'file',
+ 'permissions' => 9,
+ 'mimetype' => 'mime/type',
+ 'size' => 3,
+ 'type' => 'file',
+ 'etag' => 'etag3',
+ ]
+ ],
+ ]
+ ],
+ ]);
+ $this->assertEquals($expected, $this->controller->info('token', 'pass'));
+ }
+}
diff --git a/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php b/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php
new file mode 100644
index 00000000000..7f81bcbaa51
--- /dev/null
+++ b/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php
@@ -0,0 +1,136 @@
+<?php
+
+namespace OCA\Files_Sharing\Tests\Middleware;
+
+use OCA\Files_Sharing\Controller\ShareInfoController;
+use OCA\Files_Sharing\Exceptions\S2SException;
+use OCA\Files_Sharing\Middleware\ShareInfoMiddleware;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\Share\IManager as ShareManager;
+use Test\TestCase;
+
+class ShareInfoMiddlewareTest extends TestCase {
+
+ /** @var ShareManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+
+ /** @var ShareInfoMiddleware */
+ private $middleware;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->shareManager = $this->createMock(ShareManager::class);
+ $this->middleware = new ShareInfoMiddleware($this->shareManager);
+ }
+
+ public function testBeforeControllerNoShareInfo() {
+ $this->shareManager->expects($this->never())
+ ->method($this->anything());
+
+ $this->middleware->beforeController($this->createMock(ShareInfoMiddlewareTestController::class), 'foo');
+ }
+
+ public function testBeforeControllerShareInfoNoS2s() {
+ $this->shareManager->expects($this->once())
+ ->method('outgoingServer2ServerSharesAllowed')
+ ->willReturn(false);
+
+ $this->expectException(S2SException::class);
+ $this->middleware->beforeController($this->createMock(ShareInfoController::class), 'foo');
+ }
+
+ public function testBeforeControllerShareInfo() {
+ $this->shareManager->expects($this->once())
+ ->method('outgoingServer2ServerSharesAllowed')
+ ->willReturn(true);
+
+ $this->middleware->beforeController($this->createMock(ShareInfoController::class), 'foo');
+ }
+
+ public function testAfterExceptionNoShareInfo() {
+ $exeption = new \Exception();
+
+ try {
+ $this->middleware->afterException($this->createMock(ShareInfoMiddlewareTestController::class), 'foo', $exeption);
+ $this->fail();
+ } catch (\Exception $e) {
+ $this->assertSame($exeption, $e);
+ }
+ }
+
+
+ public function testAfterExceptionNoS2S() {
+ $exeption = new \Exception();
+
+ try {
+ $this->middleware->afterException($this->createMock(ShareInfoController::class), 'foo', $exeption);
+ $this->fail();
+ } catch (\Exception $e) {
+ $this->assertSame($exeption, $e);
+ }
+ }
+
+ public function testAfterExceptionS2S() {
+ $expected = new JSONResponse([], Http::STATUS_NOT_FOUND);
+
+ $this->assertEquals(
+ $expected,
+ $this->middleware->afterException($this->createMock(ShareInfoController::class), 'foo', new S2SException())
+ );
+ }
+
+ public function testAfterControllerNoShareInfo() {
+ $response = $this->createMock(Http\Response::class);
+
+ $this->assertEquals(
+ $response,
+ $this->middleware->afterController($this->createMock(ShareInfoMiddlewareTestController::class), 'foo', $response)
+ );
+ }
+
+ public function testAfterControllerNoJSON() {
+ $response = $this->createMock(Http\Response::class);
+
+ $this->assertEquals(
+ $response,
+ $this->middleware->afterController($this->createMock(ShareInfoController::class), 'foo', $response)
+ );
+ }
+
+ public function testAfterControllerJSONok() {
+ $data = ['foo' => 'bar'];
+ $response = new JSONResponse($data);
+
+ $expected = new JSONResponse([
+ 'data' => $data,
+ 'status' => 'success',
+ ]);
+
+ $this->assertEquals(
+ $expected,
+ $this->middleware->afterController($this->createMock(ShareInfoController::class), 'foo', $response)
+ );
+ }
+
+ public function testAfterControllerJSONerror() {
+ $data = ['foo' => 'bar'];
+ $response = new JSONResponse($data, Http::STATUS_FORBIDDEN);
+
+ $expected = new JSONResponse([
+ 'data' => $data,
+ 'status' => 'error',
+ ], Http::STATUS_FORBIDDEN);
+
+ $this->assertEquals(
+ $expected,
+ $this->middleware->afterController($this->createMock(ShareInfoController::class), 'foo', $response)
+ );
+ }
+}
+
+class ShareInfoMiddlewareTestController extends Controller {
+
+}
diff --git a/apps/files_versions/l10n/et_EE.js b/apps/files_versions/l10n/et_EE.js
index 5827b02c127..e5f4e59a41a 100644
--- a/apps/files_versions/l10n/et_EE.js
+++ b/apps/files_versions/l10n/et_EE.js
@@ -4,8 +4,11 @@ OC.L10N.register(
"Could not revert: %s" : "Ei suuda taastada faili: %s",
"Versions" : "Versioonid",
"Failed to revert {file} to revision {timestamp}." : "Ebaõnnestus faili {file} taastamine revisjonile {timestamp}",
+ "_%n byte_::_%n bytes_" : ["%n bait","%n baiti"],
"Restore" : "Taasta",
- "More versions..." : "Rohkem versioone...",
- "No other versions available" : "Muid versioone pole saadaval"
+ "No earlier versions available" : "Eelnevaid versioone pole saadaval",
+ "More versions …" : "Veel versioone ...",
+ "No versions available" : "Ühtegi versiooni pole saadaval",
+ "More versions..." : "Rohkem versioone..."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/et_EE.json b/apps/files_versions/l10n/et_EE.json
index 6cfd38102ab..eb5ac1b1636 100644
--- a/apps/files_versions/l10n/et_EE.json
+++ b/apps/files_versions/l10n/et_EE.json
@@ -2,8 +2,11 @@
"Could not revert: %s" : "Ei suuda taastada faili: %s",
"Versions" : "Versioonid",
"Failed to revert {file} to revision {timestamp}." : "Ebaõnnestus faili {file} taastamine revisjonile {timestamp}",
+ "_%n byte_::_%n bytes_" : ["%n bait","%n baiti"],
"Restore" : "Taasta",
- "More versions..." : "Rohkem versioone...",
- "No other versions available" : "Muid versioone pole saadaval"
+ "No earlier versions available" : "Eelnevaid versioone pole saadaval",
+ "More versions …" : "Veel versioone ...",
+ "No versions available" : "Ühtegi versiooni pole saadaval",
+ "More versions..." : "Rohkem versioone..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/oauth2/l10n/de.js b/apps/oauth2/l10n/de.js
index 9fce0856933..a3927dbd517 100644
--- a/apps/oauth2/l10n/de.js
+++ b/apps/oauth2/l10n/de.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"oauth2",
{
"OAuth 2.0 clients" : "OAuth-2.0-Clients",
- "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Services nach Zugriff auf %s zu fragen.",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Diensten nach Zugriff auf %s zu fragen.",
"Name" : "Name",
"Redirection URI" : "Weiterleitungs-URI",
"Client Identifier" : "Client-Identifikationsmerkmal",
diff --git a/apps/oauth2/l10n/de.json b/apps/oauth2/l10n/de.json
index 31aae6642f7..42c48422d93 100644
--- a/apps/oauth2/l10n/de.json
+++ b/apps/oauth2/l10n/de.json
@@ -1,6 +1,6 @@
{ "translations": {
"OAuth 2.0 clients" : "OAuth-2.0-Clients",
- "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Services nach Zugriff auf %s zu fragen.",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Diensten nach Zugriff auf %s zu fragen.",
"Name" : "Name",
"Redirection URI" : "Weiterleitungs-URI",
"Client Identifier" : "Client-Identifikationsmerkmal",
diff --git a/apps/oauth2/l10n/de_DE.js b/apps/oauth2/l10n/de_DE.js
index 9fce0856933..a3927dbd517 100644
--- a/apps/oauth2/l10n/de_DE.js
+++ b/apps/oauth2/l10n/de_DE.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"oauth2",
{
"OAuth 2.0 clients" : "OAuth-2.0-Clients",
- "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Services nach Zugriff auf %s zu fragen.",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Diensten nach Zugriff auf %s zu fragen.",
"Name" : "Name",
"Redirection URI" : "Weiterleitungs-URI",
"Client Identifier" : "Client-Identifikationsmerkmal",
diff --git a/apps/oauth2/l10n/de_DE.json b/apps/oauth2/l10n/de_DE.json
index 31aae6642f7..42c48422d93 100644
--- a/apps/oauth2/l10n/de_DE.json
+++ b/apps/oauth2/l10n/de_DE.json
@@ -1,6 +1,6 @@
{ "translations": {
"OAuth 2.0 clients" : "OAuth-2.0-Clients",
- "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Services nach Zugriff auf %s zu fragen.",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 erlaubt es externen Diensten nach Zugriff auf %s zu fragen.",
"Name" : "Name",
"Redirection URI" : "Weiterleitungs-URI",
"Client Identifier" : "Client-Identifikationsmerkmal",
diff --git a/apps/sharebymail/l10n/it.js b/apps/sharebymail/l10n/it.js
index e6bfdf2d02f..921d01ae095 100644
--- a/apps/sharebymail/l10n/it.js
+++ b/apps/sharebymail/l10n/it.js
@@ -5,21 +5,41 @@ OC.L10N.register(
"Shared with {email}" : "Condivisa con {email}",
"Shared with %1$s by %2$s" : "Condivisa con %1$s da %2$s",
"Shared with {email} by {actor}" : "Condivisa con {email} da {actor}",
+ "Password for mail share sent to %1$s" : "Password per la condivisione tramite posta inviata a %1$s",
+ "Password for mail share sent to {email}" : "Password per la condivisione tramite posta inviata a {email}",
+ "Password for mail share sent to you" : "Password per la condivisione tramite posta inviata a te",
"You shared %1$s with %2$s by mail" : "Hai condiviso %1$s con %2$s tramite posta",
"You shared {file} with {email} by mail" : "Hai condiviso {file} con {user} tramite posta",
"%3$s shared %1$s with %2$s by mail" : "%3$s ha condiviso %1$s con %2$s tramite email",
"{actor} shared {file} with {email} by mail" : "{actor} ha condiviso {file} con {email} tramite email",
+ "Password to access %1$s was sent to %2s" : "La password per accedere a %1$s è stata inviata a %2s",
+ "Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}",
+ "Password to access %1$s was sent to you" : "La password per accedere a %1$s ti è stata inviata",
+ "Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata",
"Sharing %s failed, this item is already shared with %s" : "Condivisione %s non riuscita, questo elemento è già condiviso con %s",
- "Failed to send share by E-mail" : "Invio non riuscito della condivisione tramite email",
+ "Failed to send share by email" : "Invio non riuscito della condivisione tramite email",
"%s shared »%s« with you" : "%s ha condiviso »%s« con te",
+ "%s shared »%s« with you." : "%s ha condiviso «%s» con te.",
+ "Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
+ "Open »%s«" : "Apri «%s»",
+ "%s via %s" : "%s tramite %s",
+ "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
+ "Password to access »%s«" : "Password per accedere a «%s»",
+ "It is protected with the following password: %s" : "È protetta con la password seguente: %s",
+ "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %s",
+ "This is the password: %s" : "Questa è la password: %s",
+ "You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.",
+ "Could not find share" : "Non è stato possibile trovare la condivisione",
+ "Share by mail" : "Condividi tramite email",
+ "Send password by mail" : "Invia password tramite posta",
+ "Enforce password protection" : "Imponi la protezione con password",
+ "Failed to send share by E-mail" : "Invio non riuscito della condivisione tramite email",
"%s shared »%s« with you on behalf of %s" : "%s ha condiviso «%s» con te per conto di %s",
"Failed to create the E-mail" : "Creazione dell'email non riuscita",
- "Could not find share" : "Non è stato possibile trovare la condivisione",
"Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ciao,\n\n%s ha condiviso «%s» con te per conto di %s.\n\n%s\n\n",
"Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ciao,\n\n%s ha condiviso «%s» con te.\n\n%s\n\n",
"Cheers!" : "Saluti!",
"Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te per conto di %s.<br><br>",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te.<br><br>",
- "Share by mail" : "Condividi tramite email"
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te.<br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/it.json b/apps/sharebymail/l10n/it.json
index 00e59d45f44..ba4d2a4aadb 100644
--- a/apps/sharebymail/l10n/it.json
+++ b/apps/sharebymail/l10n/it.json
@@ -3,21 +3,41 @@
"Shared with {email}" : "Condivisa con {email}",
"Shared with %1$s by %2$s" : "Condivisa con %1$s da %2$s",
"Shared with {email} by {actor}" : "Condivisa con {email} da {actor}",
+ "Password for mail share sent to %1$s" : "Password per la condivisione tramite posta inviata a %1$s",
+ "Password for mail share sent to {email}" : "Password per la condivisione tramite posta inviata a {email}",
+ "Password for mail share sent to you" : "Password per la condivisione tramite posta inviata a te",
"You shared %1$s with %2$s by mail" : "Hai condiviso %1$s con %2$s tramite posta",
"You shared {file} with {email} by mail" : "Hai condiviso {file} con {user} tramite posta",
"%3$s shared %1$s with %2$s by mail" : "%3$s ha condiviso %1$s con %2$s tramite email",
"{actor} shared {file} with {email} by mail" : "{actor} ha condiviso {file} con {email} tramite email",
+ "Password to access %1$s was sent to %2s" : "La password per accedere a %1$s è stata inviata a %2s",
+ "Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}",
+ "Password to access %1$s was sent to you" : "La password per accedere a %1$s ti è stata inviata",
+ "Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata",
"Sharing %s failed, this item is already shared with %s" : "Condivisione %s non riuscita, questo elemento è già condiviso con %s",
- "Failed to send share by E-mail" : "Invio non riuscito della condivisione tramite email",
+ "Failed to send share by email" : "Invio non riuscito della condivisione tramite email",
"%s shared »%s« with you" : "%s ha condiviso »%s« con te",
+ "%s shared »%s« with you." : "%s ha condiviso «%s» con te.",
+ "Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
+ "Open »%s«" : "Apri «%s»",
+ "%s via %s" : "%s tramite %s",
+ "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
+ "Password to access »%s«" : "Password per accedere a «%s»",
+ "It is protected with the following password: %s" : "È protetta con la password seguente: %s",
+ "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %s",
+ "This is the password: %s" : "Questa è la password: %s",
+ "You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.",
+ "Could not find share" : "Non è stato possibile trovare la condivisione",
+ "Share by mail" : "Condividi tramite email",
+ "Send password by mail" : "Invia password tramite posta",
+ "Enforce password protection" : "Imponi la protezione con password",
+ "Failed to send share by E-mail" : "Invio non riuscito della condivisione tramite email",
"%s shared »%s« with you on behalf of %s" : "%s ha condiviso «%s» con te per conto di %s",
"Failed to create the E-mail" : "Creazione dell'email non riuscita",
- "Could not find share" : "Non è stato possibile trovare la condivisione",
"Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ciao,\n\n%s ha condiviso «%s» con te per conto di %s.\n\n%s\n\n",
"Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ciao,\n\n%s ha condiviso «%s» con te.\n\n%s\n\n",
"Cheers!" : "Saluti!",
"Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te per conto di %s.<br><br>",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te.<br><br>",
- "Share by mail" : "Condividi tramite email"
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ciao, <br><br>%s ha condiviso <a href=\"%s\">%s</a> con te.<br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js
index 8c2ab2bc08e..d9e66284d14 100644
--- a/apps/theming/js/settings-admin.js
+++ b/apps/theming/js/settings-admin.js
@@ -30,7 +30,7 @@ function setThemingValue(setting, value) {
OC.generateUrl('/apps/theming/ajax/updateStylesheet'), {'setting' : setting, 'value' : value}
).done(function(response) {
hideUndoButton(setting, value);
- preview(setting, value);
+ preview(setting, value, response.data.serverCssUrl);
}).fail(function(response) {
OC.msg.finishedSaving('#theming_settings_msg', response);
$('#theming_settings_loading').hide();
@@ -38,12 +38,12 @@ function setThemingValue(setting, value) {
}
-function preview(setting, value) {
+function preview(setting, value, serverCssUrl) {
OC.msg.startAction('#theming_settings_msg', t('theming', 'Loading preview…'));
- var stylesheetsLoaded = 2;
+ var stylesheetsLoaded = 1;
var reloadStylesheets = function(cssFile) {
var queryString = '?reload=' + new Date().getTime();
- var url = OC.generateUrl(cssFile) + queryString;
+ var url = cssFile + queryString;
var old = $('link[href*="' + cssFile.replace("/","\/") + '"]');
var stylesheet = $("<link/>", {
rel: "stylesheet",
@@ -62,8 +62,12 @@ function preview(setting, value) {
stylesheet.appendTo("head");
};
- reloadStylesheets('/css/core/server.css');
- reloadStylesheets('/apps/theming/styles');
+ if (serverCssUrl !== undefined) {
+ stylesheetsLoaded++;
+
+ reloadStylesheets(serverCssUrl);
+ }
+ reloadStylesheets(OC.generateUrl('/apps/theming/styles'));
// Preview images
var timestamp = new Date().getTime();
@@ -218,7 +222,7 @@ $(document).ready(function () {
var input = document.getElementById('theming-'+setting);
input.value = response.data.value;
}
- preview(setting, response.data.value);
+ preview(setting, response.data.value, response.data.serverCssUrl);
});
});
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 225673079a3..b409d309f4d 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -73,6 +73,8 @@ class ThemingController extends Controller {
private $appData;
/** @var SCSSCacher */
private $scssCacher;
+ /** @var IURLGenerator */
+ private $urlGenerator;
/**
* ThemingController constructor.
@@ -87,6 +89,7 @@ class ThemingController extends Controller {
* @param ITempManager $tempManager
* @param IAppData $appData
* @param SCSSCacher $scssCacher
+ * @param IURLGenerator $urlGenerator
*/
public function __construct(
$appName,
@@ -98,7 +101,8 @@ class ThemingController extends Controller {
IL10N $l,
ITempManager $tempManager,
IAppData $appData,
- SCSSCacher $scssCacher
+ SCSSCacher $scssCacher,
+ IURLGenerator $urlGenerator
) {
parent::__construct($appName, $request);
@@ -110,6 +114,7 @@ class ThemingController extends Controller {
$this->tempManager = $tempManager;
$this->appData = $appData;
$this->scssCacher = $scssCacher;
+ $this->urlGenerator = $urlGenerator;
}
/**
@@ -172,7 +177,8 @@ class ThemingController extends Controller {
[
'data' =>
[
- 'message' => $this->l10n->t('Saved')
+ 'message' => $this->l10n->t('Saved'),
+ 'serverCssUrl' => $this->urlGenerator->linkTo('', $this->scssCacher->getCachedSCSS('core', '/core/css/server.scss'))
],
'status' => 'success'
]
@@ -303,7 +309,8 @@ class ThemingController extends Controller {
'data' =>
[
'value' => $value,
- 'message' => $this->l10n->t('Saved')
+ 'message' => $this->l10n->t('Saved'),
+ 'serverCssUrl' => $this->urlGenerator->linkTo('', $this->scssCacher->getCachedSCSS('core', '/core/css/server.scss'))
],
'status' => 'success'
]
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index 5fa8dc51939..5e6e43ca3cb 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -70,6 +70,8 @@ class ThemingControllerTest extends TestCase {
private $appData;
/** @var SCSSCacher */
private $scssCacher;
+ /** @var IURLGenerator */
+ private $urlGenerator;
public function setUp() {
$this->request = $this->createMock(IRequest::class);
@@ -85,6 +87,7 @@ class ThemingControllerTest extends TestCase {
->willReturn(123);
$this->tempManager = \OC::$server->getTempManager();
$this->scssCacher = $this->createMock(SCSSCacher::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->themingController = new ThemingController(
'theming',
@@ -96,39 +99,33 @@ class ThemingControllerTest extends TestCase {
$this->l10n,
$this->tempManager,
$this->appData,
- $this->scssCacher
+ $this->scssCacher,
+ $this->urlGenerator
);
return parent::setUp();
}
- public function dataUpdateStylesheet() {
+ public function dataUpdateStylesheetSuccess() {
return [
- ['name', str_repeat('a', 250), 'success', 'Saved'],
- ['name', str_repeat('a', 251), 'error', 'The given name is too long'],
- ['url', str_repeat('a', 500), 'success', 'Saved'],
- ['url', str_repeat('a', 501), 'error', 'The given web address is too long'],
- ['slogan', str_repeat('a', 500), 'success', 'Saved'],
- ['slogan', str_repeat('a', 501), 'error', 'The given slogan is too long'],
- ['color', '#0082c9', 'success', 'Saved'],
- ['color', '#0082C9', 'success', 'Saved'],
- ['color', '0082C9', 'error', 'The given color is invalid'],
- ['color', '#0082Z9', 'error', 'The given color is invalid'],
- ['color', 'Nextcloud', 'error', 'The given color is invalid'],
+ ['name', str_repeat('a', 250), 'Saved'],
+ ['url', str_repeat('a', 500), 'Saved'],
+ ['slogan', str_repeat('a', 500), 'Saved'],
+ ['color', '#0082c9', 'Saved'],
+ ['color', '#0082C9', 'Saved'],
];
}
/**
- * @dataProvider dataUpdateStylesheet
+ * @dataProvider dataUpdateStylesheetSuccess
*
* @param string $setting
* @param string $value
- * @param string $status
* @param string $message
*/
- public function testUpdateStylesheet($setting, $value, $status, $message) {
+ public function testUpdateStylesheetSuccess($setting, $value, $message) {
$this->themingDefaults
- ->expects($status === 'success' ? $this->once() : $this->never())
+ ->expects($this->once())
->method('set')
->with($setting, $value);
$this->l10n
@@ -136,13 +133,68 @@ class ThemingControllerTest extends TestCase {
->method('t')
->with($message)
->willReturn($message);
+ $this->scssCacher
+ ->expects($this->once())
+ ->method('getCachedSCSS')
+ ->with('core', '/core/css/server.scss')
+ ->willReturn('/core/css/someHash-server.scss');
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkTo')
+ ->with('', '/core/css/someHash-server.scss')
+ ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
- $expected = new DataResponse([
- 'data' => [
- 'message' => $message,
- ],
- 'status' => $status,
- ]);
+ $expected = new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => $message,
+ 'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
+ ],
+ 'status' => 'success',
+ ]
+ );
+ $this->assertEquals($expected, $this->themingController->updateStylesheet($setting, $value));
+ }
+
+ public function dataUpdateStylesheetError() {
+ return [
+ ['name', str_repeat('a', 251), 'The given name is too long'],
+ ['url', str_repeat('a', 501), 'The given web address is too long'],
+ ['slogan', str_repeat('a', 501), 'The given slogan is too long'],
+ ['color', '0082C9', 'The given color is invalid'],
+ ['color', '#0082Z9', 'The given color is invalid'],
+ ['color', 'Nextcloud', 'The given color is invalid'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataUpdateStylesheetError
+ *
+ * @param string $setting
+ * @param string $value
+ * @param string $message
+ */
+ public function testUpdateStylesheetError($setting, $value, $message) {
+ $this->themingDefaults
+ ->expects($this->never())
+ ->method('set')
+ ->with($setting, $value);
+ $this->l10n
+ ->expects($this->once())
+ ->method('t')
+ ->with($message)
+ ->willReturn($message);
+
+ $expected = new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => $message,
+ ],
+ 'status' => 'error',
+ ]
+ );
$this->assertEquals($expected, $this->themingController->updateStylesheet($setting, $value));
}
@@ -411,6 +463,16 @@ class ThemingControllerTest extends TestCase {
->method('undo')
->with('MySetting')
->willReturn('MyValue');
+ $this->scssCacher
+ ->expects($this->once())
+ ->method('getCachedSCSS')
+ ->with('core', '/core/css/server.scss')
+ ->willReturn('/core/css/someHash-server.scss');
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkTo')
+ ->with('', '/core/css/someHash-server.scss')
+ ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
$expected = new DataResponse(
[
@@ -418,6 +480,7 @@ class ThemingControllerTest extends TestCase {
[
'value' => 'MyValue',
'message' => 'Saved',
+ 'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
],
'status' => 'success'
]
@@ -444,6 +507,16 @@ class ThemingControllerTest extends TestCase {
->method('undo')
->with($value)
->willReturn($value);
+ $this->scssCacher
+ ->expects($this->once())
+ ->method('getCachedSCSS')
+ ->with('core', '/core/css/server.scss')
+ ->willReturn('/core/css/someHash-server.scss');
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkTo')
+ ->with('', '/core/css/someHash-server.scss')
+ ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
$folder = $this->createMock(ISimpleFolder::class);
$file = $this->createMock(ISimpleFile::class);
$this->appData
@@ -466,6 +539,7 @@ class ThemingControllerTest extends TestCase {
[
'value' => $value,
'message' => 'Saved',
+ 'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
],
'status' => 'success'
]
diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js
index a6eed3435ff..b48ba2cd554 100644
--- a/apps/updatenotification/l10n/it.js
+++ b/apps/updatenotification/l10n/it.js
@@ -5,16 +5,21 @@ OC.L10N.register(
"Could not start updater, please try the manual update" : "Impossibile avviare lo strumento di aggiornamento, prova l'aggiornamento manuale",
"{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.",
"Channel updated" : "Canale aggiornato",
+ "The update server could not be reached since %d days to check for new updates." : "Il server degli aggiornamenti non è raggiungibile da %d giorni per controllare la presenza di nuovi aggiornamenti.",
+ "Please check the Nextcloud and server log files for errors." : "Controlla i file di log di Nextcloud e del server alla ricerca di errori.",
"Update to %1$s is available." : "Aggiornamento a %1$s disponibile.",
"Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.",
"Update for {app} to version %s is available." : "È disponibile l'aggiornamento di {app} alla versione %s.",
"A new version is available: %s" : "Una nuova versione è disponibile: %s",
"Open updater" : "Apri strumento di aggiornamento",
"Download now" : "Scarica ora",
+ "The update check is not yet finished. Please refresh the page." : "Il controllo degli aggiornamenti non è ancora terminato. Aggiorna la pagina.",
"Your version is up to date." : "La tua versione è aggiornata.",
"Checked on %s" : "Controllato il %s",
+ "A non-default update server is in use to be checked for updates:" : "Stai utilizzando un server non predefinito per controllare gli aggiornamenti:",
"Update channel:" : "Canale di aggiornamento:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Puoi aggiornare sempre a una nuova versione / canale sperimentale. Ma non puoi mai tornare a una versione precedente.",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.",
"Notify members of the following groups about available updates:" : "Notifica i membri dei seguenti gruppi sugli aggiornamenti disponibili:",
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json
index 4eab414e170..ab7cad2172e 100644
--- a/apps/updatenotification/l10n/it.json
+++ b/apps/updatenotification/l10n/it.json
@@ -3,16 +3,21 @@
"Could not start updater, please try the manual update" : "Impossibile avviare lo strumento di aggiornamento, prova l'aggiornamento manuale",
"{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.",
"Channel updated" : "Canale aggiornato",
+ "The update server could not be reached since %d days to check for new updates." : "Il server degli aggiornamenti non è raggiungibile da %d giorni per controllare la presenza di nuovi aggiornamenti.",
+ "Please check the Nextcloud and server log files for errors." : "Controlla i file di log di Nextcloud e del server alla ricerca di errori.",
"Update to %1$s is available." : "Aggiornamento a %1$s disponibile.",
"Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.",
"Update for {app} to version %s is available." : "È disponibile l'aggiornamento di {app} alla versione %s.",
"A new version is available: %s" : "Una nuova versione è disponibile: %s",
"Open updater" : "Apri strumento di aggiornamento",
"Download now" : "Scarica ora",
+ "The update check is not yet finished. Please refresh the page." : "Il controllo degli aggiornamenti non è ancora terminato. Aggiorna la pagina.",
"Your version is up to date." : "La tua versione è aggiornata.",
"Checked on %s" : "Controllato il %s",
+ "A non-default update server is in use to be checked for updates:" : "Stai utilizzando un server non predefinito per controllare gli aggiornamenti:",
"Update channel:" : "Canale di aggiornamento:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Puoi aggiornare sempre a una nuova versione / canale sperimentale. Ma non puoi mai tornare a una versione precedente.",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.",
"Notify members of the following groups about available updates:" : "Notifica i membri dei seguenti gruppi sugli aggiornamenti disponibili:",
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js
index 7abefc6c279..2f6de6ed93e 100644
--- a/apps/updatenotification/l10n/ja.js
+++ b/apps/updatenotification/l10n/ja.js
@@ -13,8 +13,10 @@ OC.L10N.register(
"A new version is available: %s" : "新しいバージョンが利用可能: %s",
"Open updater" : "アップデーターを開く",
"Download now" : "今すぐダウンロード",
+ "The update check is not yet finished. Please refresh the page." : "アップデートチェックが完了していません。ページを更新してください。",
"Your version is up to date." : "最新版です。",
"Checked on %s" : "%s に確認",
+ "A non-default update server is in use to be checked for updates:" : "更新のチェックにデフォルト以外の更新サーバーが利用されています:",
"Update channel:" : "アップデートチャンネル:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "開発版の新しいバージョンにアップデートできます。ただし、アップデート後は安定版にダウングレードできません。",
"Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "新しいリリースの後、公開されるまでには時間がかかります。\n新しいバージョンを公開して配布しますが、問題が発見されたときにバージョンをスキップすることがあります。",
diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json
index c717b8e8d84..4a807956e34 100644
--- a/apps/updatenotification/l10n/ja.json
+++ b/apps/updatenotification/l10n/ja.json
@@ -11,8 +11,10 @@
"A new version is available: %s" : "新しいバージョンが利用可能: %s",
"Open updater" : "アップデーターを開く",
"Download now" : "今すぐダウンロード",
+ "The update check is not yet finished. Please refresh the page." : "アップデートチェックが完了していません。ページを更新してください。",
"Your version is up to date." : "最新版です。",
"Checked on %s" : "%s に確認",
+ "A non-default update server is in use to be checked for updates:" : "更新のチェックにデフォルト以外の更新サーバーが利用されています:",
"Update channel:" : "アップデートチャンネル:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "開発版の新しいバージョンにアップデートできます。ただし、アップデート後は安定版にダウングレードできません。",
"Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "新しいリリースの後、公開されるまでには時間がかかります。\n新しいバージョンを公開して配布しますが、問題が発見されたときにバージョンをスキップすることがあります。",
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index e34083a8f21..fe22b3b69ea 100644
--- a/apps/user_ldap/l10n/it.js
+++ b/apps/user_ldap/l10n/it.js
@@ -3,13 +3,20 @@ OC.L10N.register(
{
"Failed to clear the mappings." : "Cancellazione delle associazioni non riuscita.",
"Failed to delete the server configuration" : "Eliminazione della configurazione del server non riuscita",
+ "Invalid configuration: Anonymous binding is not allowed." : "La configurazione non è valida: l'associazione anonima non è consentita.",
+ "Valid configuration, connection established!" : "Configurazione valida, connessione stabilita!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configurazione valida, ma associazione non riuscita. Controlla le impostazioni del server e le credenziali.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli.",
"No action specified" : "Nessuna azione specificata",
"No configuration specified" : "Nessuna configurazione specificata",
"No data specified" : "Nessun dato specificato",
" Could not set configuration %s" : "Impossibile impostare la configurazione %s",
"Action does not exist" : "L'azione non esiste",
+ "LDAP user and group backend" : "Motore utente e gruppo LDAP",
+ "Renewing …" : "Rinnovo...",
"Very weak password" : "Password molto debole",
"Weak password" : "Password debole",
+ "So-so password" : "Password così-così",
"Good password" : "Password buona",
"Strong password" : "Password forte",
"The Base DN appears to be wrong" : "Il DN base sembra essere errato",
@@ -38,7 +45,9 @@ OC.L10N.register(
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Il cambio di modalità abiliterà le query LDAP automatiche. In base alla dimensione di LDAP, potrebbero richiedere del tempo. Vuoi ancora cambiare modalità?",
"Mode switch" : "Cambio modalità",
"Select attributes" : "Seleziona gli attributi",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Utente non trovato. Controlla i tuoi attributi di accesso e il nome utente.\nFiltro effettivo (copiare e incollare per la convalida della riga di comando):<br/>",
"User found and settings verified." : "Utente trovato e impostazioni verificate.",
+ "An unspecified error occurred. Please check log and settings." : "Si è verificato un errore non specificato. Controlla le impostazioni e il file di log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.",
"Please provide a login name to test against" : "Fornisci un nome di accesso da provare",
@@ -47,9 +56,11 @@ OC.L10N.register(
"Please login with the new password" : "Accedi con la nuova password",
"Your password will expire tomorrow." : "La tua password scadrà domani.",
"Your password will expire today." : "La tua password scadrà oggi.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni."],
"LDAP / AD integration" : "Integrazione LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Test Configuration" : "Prova configurazione",
@@ -63,6 +74,7 @@ OC.L10N.register(
"Edit LDAP Query" : "Modifica query LDAP",
"LDAP Filter:" : "Filtro LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Il filtro specifica quali gruppi LDAP devono avere accesso all'istanza %s.",
+ "Verify settings and count the groups" : "Verifica le impostazioni e conta i gruppi",
"When logging in, %s will find the user based on the following attributes:" : "Quando accedi, %s troverà l'utente sulla base dei seguenti attributi:",
"LDAP / AD Username:" : "Nome utente LDAP / AD:",
"LDAP / AD Email Address:" : "Indirizzo email LDAP / AD:",
@@ -75,6 +87,7 @@ OC.L10N.register(
"Copy current configuration into new directory binding" : "Copia la configurazione attuale nella nuova cartella associata",
"Delete the current configuration" : "Elimina la configurazione attuale",
"Host" : "Host",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "È possibile omettere il protocollo, a meno che non sia necessario SSL. In questo caso, inizia con ldaps://",
"Port" : "Porta",
"Detect Port" : "Rileva porta",
"User DN" : "DN utente",
@@ -96,6 +109,7 @@ OC.L10N.register(
"Continue" : "Continua",
"Please renew your password." : "Rinnova la tua password.",
"An internal error occurred." : "Si è verificato un errore interno.",
+ "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Current password" : "Password attuale",
"New password" : "Nuova password",
"Renew password" : "Rinnova la password",
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index e1558941cb3..55a0767906a 100644
--- a/apps/user_ldap/l10n/it.json
+++ b/apps/user_ldap/l10n/it.json
@@ -1,13 +1,20 @@
{ "translations": {
"Failed to clear the mappings." : "Cancellazione delle associazioni non riuscita.",
"Failed to delete the server configuration" : "Eliminazione della configurazione del server non riuscita",
+ "Invalid configuration: Anonymous binding is not allowed." : "La configurazione non è valida: l'associazione anonima non è consentita.",
+ "Valid configuration, connection established!" : "Configurazione valida, connessione stabilita!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configurazione valida, ma associazione non riuscita. Controlla le impostazioni del server e le credenziali.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configurazione non valida. Controlla i log per ulteriori dettagli.",
"No action specified" : "Nessuna azione specificata",
"No configuration specified" : "Nessuna configurazione specificata",
"No data specified" : "Nessun dato specificato",
" Could not set configuration %s" : "Impossibile impostare la configurazione %s",
"Action does not exist" : "L'azione non esiste",
+ "LDAP user and group backend" : "Motore utente e gruppo LDAP",
+ "Renewing …" : "Rinnovo...",
"Very weak password" : "Password molto debole",
"Weak password" : "Password debole",
+ "So-so password" : "Password così-così",
"Good password" : "Password buona",
"Strong password" : "Password forte",
"The Base DN appears to be wrong" : "Il DN base sembra essere errato",
@@ -36,7 +43,9 @@
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Il cambio di modalità abiliterà le query LDAP automatiche. In base alla dimensione di LDAP, potrebbero richiedere del tempo. Vuoi ancora cambiare modalità?",
"Mode switch" : "Cambio modalità",
"Select attributes" : "Seleziona gli attributi",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Utente non trovato. Controlla i tuoi attributi di accesso e il nome utente.\nFiltro effettivo (copiare e incollare per la convalida della riga di comando):<br/>",
"User found and settings verified." : "Utente trovato e impostazioni verificate.",
+ "An unspecified error occurred. Please check log and settings." : "Si è verificato un errore non specificato. Controlla le impostazioni e il file di log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.",
"Please provide a login name to test against" : "Fornisci un nome di accesso da provare",
@@ -45,9 +54,11 @@
"Please login with the new password" : "Accedi con la nuova password",
"Your password will expire tomorrow." : "La tua password scadrà domani.",
"Your password will expire today." : "La tua password scadrà oggi.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La tua password scadrà tra %n giorno.","La tua password scadrà oggi tra %n giorni."],
"LDAP / AD integration" : "Integrazione LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di LDAP.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Test Configuration" : "Prova configurazione",
@@ -61,6 +72,7 @@
"Edit LDAP Query" : "Modifica query LDAP",
"LDAP Filter:" : "Filtro LDAP:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Il filtro specifica quali gruppi LDAP devono avere accesso all'istanza %s.",
+ "Verify settings and count the groups" : "Verifica le impostazioni e conta i gruppi",
"When logging in, %s will find the user based on the following attributes:" : "Quando accedi, %s troverà l'utente sulla base dei seguenti attributi:",
"LDAP / AD Username:" : "Nome utente LDAP / AD:",
"LDAP / AD Email Address:" : "Indirizzo email LDAP / AD:",
@@ -73,6 +85,7 @@
"Copy current configuration into new directory binding" : "Copia la configurazione attuale nella nuova cartella associata",
"Delete the current configuration" : "Elimina la configurazione attuale",
"Host" : "Host",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "È possibile omettere il protocollo, a meno che non sia necessario SSL. In questo caso, inizia con ldaps://",
"Port" : "Porta",
"Detect Port" : "Rileva porta",
"User DN" : "DN utente",
@@ -94,6 +107,7 @@
"Continue" : "Continua",
"Please renew your password." : "Rinnova la tua password.",
"An internal error occurred." : "Si è verificato un errore interno.",
+ "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.",
"Current password" : "Password attuale",
"New password" : "Nuova password",
"Renew password" : "Rinnova la password",
diff --git a/apps/user_ldap/lib/ILDAPWrapper.php b/apps/user_ldap/lib/ILDAPWrapper.php
index 4034d0baea4..71dd60c3725 100644
--- a/apps/user_ldap/lib/ILDAPWrapper.php
+++ b/apps/user_ldap/lib/ILDAPWrapper.php
@@ -82,14 +82,14 @@ interface ILDAPWrapper {
/**
* Return the LDAP error number of the last LDAP command
* @param resource $link LDAP link resource
- * @return string error message as string
+ * @return int error code
*/
public function errno($link);
/**
* Return the LDAP error message of the last LDAP command
* @param resource $link LDAP link resource
- * @return int error code as integer
+ * @return string error message
*/
public function error($link);
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index ebee0784130..eafd8eacd06 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -100,7 +100,7 @@ class LDAP implements ILDAPWrapper {
/**
* @param LDAP $link
- * @return mixed|string
+ * @return integer
*/
public function errno($link) {
return $this->invokeLDAPMethod('errno', $link);
@@ -108,7 +108,7 @@ class LDAP implements ILDAPWrapper {
/**
* @param LDAP $link
- * @return int|mixed
+ * @return string
*/
public function error($link) {
return $this->invokeLDAPMethod('error', $link);
diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php
index f6b78208fd2..9d4da9cbf3f 100644
--- a/apps/user_ldap/lib/Wizard.php
+++ b/apps/user_ldap/lib/Wizard.php
@@ -1019,21 +1019,14 @@ class Wizard extends LDAPUtility {
/**
* Connects and Binds to an LDAP Server
+ *
* @param int $port the port to connect with
* @param bool $tls whether startTLS is to be used
- * @param bool $ncc
* @return bool
* @throws \Exception
*/
- private function connectAndBind($port = 389, $tls = false, $ncc = false) {
- if($ncc) {
- //No certificate check
- //FIXME: undo afterwards
- putenv('LDAPTLS_REQCERT=never');
- }
-
+ private function connectAndBind($port, $tls) {
//connect, does not really trigger any server communication
- \OCP\Util::writeLog('user_ldap', 'Wiz: Checking Host Info ', \OCP\Util::DEBUG);
$host = $this->configuration->ldapHost;
$hostInfo = parse_url($host);
if(!$hostInfo) {
@@ -1045,7 +1038,6 @@ class Wizard extends LDAPUtility {
throw new \Exception(self::$l->t('Invalid Host'));
}
- \OCP\Util::writeLog('user_ldap', 'Wiz: Setting LDAP Options ', \OCP\Util::DEBUG);
//set LDAP options
$this->ldap->setOption($cr, LDAP_OPT_PROTOCOL_VERSION, 3);
$this->ldap->setOption($cr, LDAP_OPT_REFERRALS, 0);
@@ -1074,18 +1066,13 @@ class Wizard extends LDAPUtility {
if($login === true) {
$this->ldap->unbind($cr);
- if($ncc) {
- throw new \Exception('Certificate cannot be validated.');
- }
\OCP\Util::writeLog('user_ldap', 'Wiz: Bind successful to Port '. $port . ' TLS ' . intval($tls), \OCP\Util::DEBUG);
return true;
}
- if($errNo === -1 || ($errNo === 2 && $ncc)) {
+ if($errNo === -1) {
//host, port or TLS wrong
return false;
- } else if ($errNo === 2) {
- return $this->connectAndBind($port, $tls, true);
}
throw new \Exception($error, $errNo);
}
diff --git a/console.php b/console.php
index 47cc2edf018..df02e89dff3 100644
--- a/console.php
+++ b/console.php
@@ -75,11 +75,11 @@ try {
$oldWorkingDir = getcwd();
if ($oldWorkingDir === false) {
- echo "This script can be run from the ownCloud root directory only." . PHP_EOL;
+ echo "This script can be run from the Nextcloud root directory only." . PHP_EOL;
echo "Can't determine current working dir - the script will continue to work but be aware of the above fact." . PHP_EOL;
} else if ($oldWorkingDir !== __DIR__ && !chdir(__DIR__)) {
- echo "This script can be run from the ownCloud root directory only." . PHP_EOL;
- echo "Can't change to ownCloud root directory." . PHP_EOL;
+ echo "This script can be run from the Nextcloud root directory only." . PHP_EOL;
+ echo "Can't change to Nextcloud root directory." . PHP_EOL;
exit(1);
}
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index 1556777704b..70752e8766b 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -124,7 +124,7 @@ OC.L10N.register(
"Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
- "Set expiration date" : "Establecer la fecha de expiración",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
"Expiration" : "Expiración",
"Expiration date" : "Fecha de expiración",
"Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
@@ -142,9 +142,9 @@ OC.L10N.register(
"Allow editing" : "Permitir editar",
"Email link to person" : "Enviar la liga por correo electrónico a una persona",
"Send" : "Enviar",
- "Allow upload and editing" : "Permitir cargar y editar",
+ "Allow upload and editing" : "Permitir carga y edición",
"Read only" : "Sólo lectura",
- "File drop (upload only)" : "Soltar archivo (solo para carga)",
+ "File drop (upload only)" : "Permitir carga",
"Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
"Shared with you by {owner}" : "Compartido contigo por {owner}",
"Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index 7618554e209..fe4f4ac0636 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -122,7 +122,7 @@
"Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
- "Set expiration date" : "Establecer la fecha de expiración",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
"Expiration" : "Expiración",
"Expiration date" : "Fecha de expiración",
"Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
@@ -140,9 +140,9 @@
"Allow editing" : "Permitir editar",
"Email link to person" : "Enviar la liga por correo electrónico a una persona",
"Send" : "Enviar",
- "Allow upload and editing" : "Permitir cargar y editar",
+ "Allow upload and editing" : "Permitir carga y edición",
"Read only" : "Sólo lectura",
- "File drop (upload only)" : "Soltar archivo (solo para carga)",
+ "File drop (upload only)" : "Permitir carga",
"Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
"Shared with you by {owner}" : "Compartido contigo por {owner}",
"Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js
new file mode 100644
index 00000000000..9bce8127206
--- /dev/null
+++ b/core/l10n/et_EE.js
@@ -0,0 +1,272 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Palun vali fail.",
+ "File is too big" : "Fail on liiga suur",
+ "The selected file is not an image." : "Valitud fail ei ole pilt.",
+ "The selected file cannot be read." : "Valitud faili ei ole võimalik lugeda.",
+ "Invalid file provided" : "Vigane fail",
+ "No image or file provided" : "Ühtegi pilti või faili pole pakutud",
+ "Unknown filetype" : "Tundmatu failitüüp",
+ "Invalid image" : "Vigane pilt",
+ "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.",
+ "No temporary profile picture available, try again" : "Ühtegi ajutist profiilipilti pole saadaval, proovi uuesti",
+ "No crop data provided" : "Lõikeandmeid ei leitud",
+ "No valid crop data provided" : "Kehtivaid lõikeandmeid pole leitud",
+ "Crop is not square" : "Lõikamine pole ruudukujuline",
+ "Password reset is disabled" : "Parooli taastamine on välja lülitatud",
+ "Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane",
+ "Couldn't reset password because the token is expired" : "Parooli ei saanud taastada, sest märgend on aegunud",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ei saanud saata lähtestamise e-kirja kuna antud kasutajal puudub e-posti aadress. Palun kontakteeruge administraatoriga ",
+ "Password reset" : "Parooli taastamine ",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliki allolevale nupule, et taastada oma parool. Kui sa ei ole paroolitaastamist pärinud. siis ignoreeri seda e-kirja.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliki allolevale lingile, et taastada oma parool. Kui sa ei ole parooli taastamist pärinud. siis ignoreeri seda e-kirja.",
+ "Reset your password" : "Lähtesta oma parool",
+ "%s password reset" : "%s parooli lähtestus",
+ "Couldn't send reset email. Please contact your administrator." : "Ei suutnud lähtestada e-maili. Palun kontakteeru süsteemihalduriga.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.",
+ "Preparing update" : "Uuendamise ettevalmistamine",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Paranda hoiatus:",
+ "Repair error: " : "Paranda viga:",
+ "Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud",
+ "Turned off maintenance mode" : "Haldusrežiimis välja lülitatud",
+ "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne",
+ "Updating database schema" : "Andmebaasi skeemi uuendamine",
+ "Updated database" : "Uuendatud andmebaas",
+ "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud",
+ "Checking updates of apps" : "Rakenduste uuenduste kontroll",
+ "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud",
+ "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s",
+ "%s (3rdparty)" : "%s (3nda osapoole arendaja)",
+ "%s (incompatible)" : "%s (pole ühilduv)",
+ "Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s",
+ "Already up to date" : "On juba ajakohane",
+ "Search contacts …" : "Otsi kontakte",
+ "No contacts found" : "Kontakte ei leitud",
+ "Show all contacts …" : "Näita kõiki kontakte",
+ "There was an error loading your contacts" : "Kontaktide laadimisel tekkis tõrge",
+ "Loading your contacts …" : "Sinu kontaktide laadimine ...",
+ "Looking for {term} …" : "Otsin {term} …",
+ "Settings" : "Seaded",
+ "Connection to server lost" : "Ühendus serveriga katkes",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Tõrge lehe laadimisel, ümberlaadimine %n sekundi pärast","Tõrge lehe laadimisel, ümberlaadimine %n sekundi pärast"],
+ "Saving..." : "Salvestamine...",
+ "Dismiss" : "Jäta vahele",
+ "This action requires you to confirm your password" : "See tegevus nõuab parooli kinnitamist",
+ "Authentication required" : "Autentimine on vajalik",
+ "Password" : "Parool",
+ "Cancel" : "Loobu",
+ "Confirm" : "Kinnita",
+ "Failed to authenticate, try again" : "Autentimine ebaõnnestus, proovige uuesti",
+ "seconds ago" : "sekundit tagasi",
+ "Logging in …" : "Sisselogimine ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Andmete taaastaamine ei ole pärast parooli lähtestaamist enam võimalik. <br />Kui Sa ei ole kindel mida teha, kontakteeru palun enne jätkamist administraatoriga. <br />Kas Sa kindlasti soovid jätkata?",
+ "I know what I'm doing" : "Ma tean mida teen",
+ "Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
+ "No" : "Ei",
+ "Yes" : "Jah",
+ "No files in here" : "Siin ei ole faile",
+ "Choose" : "Vali",
+ "Error loading file picker template: {error}" : "Viga failivalija malli laadimisel: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Viga sõnumi malli laadimisel: {error}",
+ "read-only" : "kirjutuskaitstud",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} failikonflikt","{count} failikonflikti"],
+ "One file conflict" : "Üks failikonflikt",
+ "New Files" : "Uued failid",
+ "Already existing files" : "Juba olemasolevad failid",
+ "Which files do you want to keep?" : "Milliseid faile sa soovid alles hoida?",
+ "If you select both versions, the copied file will have a number added to its name." : "Kui valid mõlemad versioonid, siis lisatakse kopeeritud faili nimele number.",
+ "Continue" : "Jätka",
+ "(all selected)" : "(kõik valitud)",
+ "({count} selected)" : "({count} valitud)",
+ "Error loading file exists template" : "Viga faili olemasolu malli laadimisel",
+ "Pending" : "Ootel",
+ "Very weak password" : "Väga nõrk parool",
+ "Weak password" : "Nõrk parool",
+ "So-so password" : "Enam-vähem sobiv parool",
+ "Good password" : "Hea parool",
+ "Strong password" : "Väga hea parool",
+ "Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
+ "Shared" : "Jagatud",
+ "Shared with {recipients}" : "Jagatud {recipients}",
+ "Error setting expiration date" : "Viga aegumise kuupäeva määramisel",
+ "The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
+ "Set expiration date" : "Määra aegumise kuupäev",
+ "Expiration" : "Aegumine",
+ "Expiration date" : "Aegumise kuupäev",
+ "Choose a password for the public link" : "Vali avaliku lingi jaoks parool",
+ "Copied!" : "Kopeeritud!",
+ "Copy" : "Kopeeri",
+ "Not supported!" : "Pole toetatud!",
+ "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.",
+ "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.",
+ "Resharing is not allowed" : "Edasijagamine pole lubatud",
+ "Share to {name}" : "Jaga kasutajale {name}",
+ "Share link" : "Jaga linki",
+ "Link" : "Link",
+ "Password protect" : "Parooliga kaitstud",
+ "Allow editing" : "Luba muutmine",
+ "Email link to person" : "Saada link isikule e-postiga",
+ "Send" : "Saada",
+ "Allow upload and editing" : "Luba üleslaadimine ja muutmine",
+ "Read only" : "kirjutuskaitstud",
+ "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt",
+ "Shared with you by {owner}" : "Sinuga jagas {owner}",
+ "group" : "grupp",
+ "email" : "e-post",
+ "shared by {sharer}" : "jagatud kasutajalt {sharer}",
+ "Unshare" : "Lõpeta jagamine",
+ "Can reshare" : "Võib edasi jagada",
+ "Can edit" : "Võib redigeerida",
+ "Can create" : "Võib luua",
+ "Can change" : "Võib muuta",
+ "Can delete" : "Võib kustutada",
+ "Access control" : "Ligipääsukontroll",
+ "Could not unshare" : "Jagamise lõpetamine ebaõnnestus",
+ "Error while sharing" : "Viga jagamisel",
+ "No users or groups found for {search}" : "Otsingu {search} põhjal kasutajaid ega gruppe ei leitud",
+ "No users found for {search}" : "Otsingu {search} põhjal kasutajaid ei leitud",
+ "An error occurred. Please try again" : "Tekkis tõrge. Palun proovi uuesti",
+ "{sharee} (group)" : "{sharee} (group)",
+ "{sharee} (remote)" : "{sharee} (mujal serveris)",
+ "Share" : "Jaga",
+ "Name or email address..." : "Nimi või e-posti aadress",
+ "Name..." : "Nimi...",
+ "Error" : "Viga",
+ "restricted" : "piiratud",
+ "invisible" : "nähtamatu",
+ "({scope})" : "({scope})",
+ "Delete" : "Kustuta",
+ "Rename" : "Nimeta ümber",
+ "No tags found" : "Märgendeid ei leitud",
+ "unknown text" : "tundmatu tekst",
+ "Hello world!" : "Tere maailm!",
+ "sunny" : "päikeseline",
+ "Hello {name}, the weather is {weather}" : "Tere {name}, ilm on {weather}",
+ "Hello {name}" : "Tere, {name}",
+ "new" : "uus",
+ "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"],
+ "Update to {version}" : "Uuenda versioonile {version}",
+ "An error occurred." : "Tekkis tõrge.",
+ "Please reload the page." : "Palun laadi see uuesti.",
+ "Continue to Nextcloud" : "Edasi Nextcloudi",
+ "Searching other places" : "Otsi teistest kohtadest",
+ "Personal" : "Isiklik",
+ "Users" : "Kasutajad",
+ "Apps" : "Rakendused",
+ "Admin" : "Admin",
+ "Help" : "Abiinfo",
+ "Access forbidden" : "Ligipääs on keelatud",
+ "File not found" : "Faili ei leitud",
+ "The specified document has not been found on the server." : "Määratud dokumenti serverist ei leitud.",
+ "You can click here to return to %s." : "%s tagasi minemiseks võid sa siia klikkida.",
+ "Internal Server Error" : "Serveri sisemine viga",
+ "The server encountered an internal error and was unable to complete your request." : "Serveris tekkis sisemine tõrge ja sinu päringu täitmine ebaõnnestus.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kui seda veateadet näidatakse mitu korda, siis palun võta ühendust serveri administraatoriga. Palun lisa alla aruandesse tehnilised üksikasjad.",
+ "More details can be found in the server log." : "Lisainfot võib leida serveri logist.",
+ "Technical details" : "Tehnilised andmed",
+ "Remote Address: %s" : "Kaugaadress: %s",
+ "Request ID: %s" : "Päringu ID: %s",
+ "Type: %s" : "Tüüp: %s",
+ "Code: %s" : "Kood: %s",
+ "Message: %s" : "Sõnum: %s",
+ "File: %s" : "Fail: %s",
+ "Line: %s" : "Rida: %s",
+ "Trace" : "Jälita",
+ "Security warning" : "Turvahoiatus",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
+ "Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
+ "Username" : "Kasutajanimi",
+ "Storage & database" : "Andmehoidla ja andmebaas",
+ "Data folder" : "Andmete kaust",
+ "Configure the database" : "Seadista andmebaasi",
+ "Only %s is available." : "Ainult %s on saadaval.",
+ "For more details check out the documentation." : "Lisainfot vaata dokumentatsioonist.",
+ "Database user" : "Andmebaasi kasutaja",
+ "Database password" : "Andmebaasi parool",
+ "Database name" : "Andmebasi nimi",
+ "Database tablespace" : "Andmebaasi tabeliruum",
+ "Database host" : "Andmebaasi host",
+ "Performance warning" : "Kiiruse hoiatus",
+ "SQLite will be used as database." : "Andmebaasina kasutatakse SQLite",
+ "Finish setup" : "Lõpeta seadistamine",
+ "Finishing …" : "Lõpetamine ...",
+ "Need help?" : "Vajad abi?",
+ "See the documentation" : "Vaata dokumentatsiooni",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun {linkstart}luba JavaScript{linkend} ning laadi see leht uuesti.",
+ "More apps" : "Veel rakendusi",
+ "Search" : "Otsi",
+ "This action requires you to confirm your password:" : "See tegevus nõuab parooli kinnitamist",
+ "Confirm your password" : "Kinnita oma parool",
+ "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!",
+ "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.",
+ "An internal error occurred." : "Tekkis sisemine tõrge.",
+ "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.",
+ "Username or email" : "Kasutajanimi või e-posti aadress",
+ "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?",
+ "Wrong password." : "Vale parool.",
+ "Log in" : "Logi sisse",
+ "Stay logged in" : "Püsi sisselogituna",
+ "Alternative Logins" : "Alternatiivsed sisselogimisviisid",
+ "Redirecting …" : "Ümbersuunamine ...",
+ "New password" : "Uus parool",
+ "New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
+ "Two-factor authentication" : "Kaheastmeline autentimine",
+ "Cancel log in" : "Katkesta sisselogimine",
+ "You are accessing the server from an untrusted domain." : "Sa kasutad serverit usalduseta asukohast",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Sõltuvalt sinu seadetest võib ka administraator kasutada allolevat nuppu, et seda domeeni usaldusväärseks märkida.",
+ "Add \"%s\" as trusted domain" : "Lisa \"%s\" usaldusväärse domeenina",
+ "App update required" : "Rakenduse uuendus on nõutud",
+ "%s will be updated to version %s" : "%s uuendatakse versioonile %s",
+ "These apps will be updated:" : "Neid rakendusi uuendatakse:",
+ "These incompatible apps will be disabled:" : "Need mitteühilduvad rakendused lülitatakse välja:",
+ "The theme %s has been disabled." : "Teema %s on keelatud.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Enne jätkamist veendu, et andmebaas, seadete ning andmete kataloog on varundatud.",
+ "Start update" : "Käivita uuendus",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:",
+ "Detailed logs" : "Üksikasjalikud logid",
+ "Update needed" : "Uuendamine vajaliik",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Abiinfo saamiseks vaata <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentatsiooni</a>.",
+ "Upgrade via web on my own risk" : "Uuenda veebi kaudu omal vastutusel",
+ "This page will refresh itself when the %s instance is available again." : "Se leht laetakse uuesti, kui %s instantsi on uuesti saadaval.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakteeru oma süsteemihalduriga, kui see teade püsib või on tekkinud ootamatult.",
+ "Thank you for your patience." : "Täname kannatlikkuse eest.",
+ "Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
+ "Ok" : "Ok",
+ "Error while unsharing" : "Viga jagamise lõpetamisel",
+ "can reshare" : "võib edasi jagada",
+ "can edit" : "saab muuta",
+ "can create" : "võib luua",
+ "can change" : "võib muuta",
+ "can delete" : "võib kustutada",
+ "access control" : "ligipääsukontroll",
+ "Share with users or by mail..." : "Jaga kasutajatega või e-postiga ...",
+ "Share with users or remote users..." : "Jaga kasutajatega või eemal olevate kasutajatega ...",
+ "Share with users, remote users or by mail..." : "Jaga kasutajatega, eemal olevate kasutajatega või e-postiga ...",
+ "Share with users or groups..." : "Jaga kasutajate või gruppidega ...",
+ "Share with users, groups or by mail..." : "Jaga kasutajatega, gruppidega või e-postiga ...",
+ "Share with users, groups or remote users..." : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...",
+ "Share with users, groups, remote users or by mail..." : "Jaga kasutajatega, gruppidega, eemal olevate kasutajatega või e-postiga ...",
+ "Share with users..." : "Jaga kasutajatega...",
+ "The object type is not specified." : "Objekti tüüp pole määratletud.",
+ "Enter new" : "Sisesta uus",
+ "Add" : "Lisa",
+ "Edit tags" : "Muuda silte",
+ "Error loading dialog template: {error}" : "Viga dialoogi malli laadimisel: {error}",
+ "No tags selected for deletion." : "Kustutamiseks pole ühtegi silti valitud.",
+ "The update was successful. Redirecting you to Nextcloud now." : "Uuendamine õnnestus. Sind suunatakse Nextcloudi.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tere,\n\n%s jagas sulle välja %s.\nVaata siit: %s\n\n",
+ "The share will expire on %s." : "Jagamine aegub %s.",
+ "Cheers!" : "Terekest!",
+ "Log out" : "Logi välja",
+ "Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>annan teada, et %s jagas sinuga <strong>%s</strong>. <a href=\"%s\">Vaata seda!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "See Nextcloud on momendil seadistatud ühe kasutaja jaoks.",
+ "This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json
new file mode 100644
index 00000000000..7bc4b92f5d0
--- /dev/null
+++ b/core/l10n/et_EE.json
@@ -0,0 +1,270 @@
+{ "translations": {
+ "Please select a file." : "Palun vali fail.",
+ "File is too big" : "Fail on liiga suur",
+ "The selected file is not an image." : "Valitud fail ei ole pilt.",
+ "The selected file cannot be read." : "Valitud faili ei ole võimalik lugeda.",
+ "Invalid file provided" : "Vigane fail",
+ "No image or file provided" : "Ühtegi pilti või faili pole pakutud",
+ "Unknown filetype" : "Tundmatu failitüüp",
+ "Invalid image" : "Vigane pilt",
+ "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.",
+ "No temporary profile picture available, try again" : "Ühtegi ajutist profiilipilti pole saadaval, proovi uuesti",
+ "No crop data provided" : "Lõikeandmeid ei leitud",
+ "No valid crop data provided" : "Kehtivaid lõikeandmeid pole leitud",
+ "Crop is not square" : "Lõikamine pole ruudukujuline",
+ "Password reset is disabled" : "Parooli taastamine on välja lülitatud",
+ "Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane",
+ "Couldn't reset password because the token is expired" : "Parooli ei saanud taastada, sest märgend on aegunud",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ei saanud saata lähtestamise e-kirja kuna antud kasutajal puudub e-posti aadress. Palun kontakteeruge administraatoriga ",
+ "Password reset" : "Parooli taastamine ",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliki allolevale nupule, et taastada oma parool. Kui sa ei ole paroolitaastamist pärinud. siis ignoreeri seda e-kirja.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliki allolevale lingile, et taastada oma parool. Kui sa ei ole parooli taastamist pärinud. siis ignoreeri seda e-kirja.",
+ "Reset your password" : "Lähtesta oma parool",
+ "%s password reset" : "%s parooli lähtestus",
+ "Couldn't send reset email. Please contact your administrator." : "Ei suutnud lähtestada e-maili. Palun kontakteeru süsteemihalduriga.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.",
+ "Preparing update" : "Uuendamise ettevalmistamine",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Paranda hoiatus:",
+ "Repair error: " : "Paranda viga:",
+ "Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud",
+ "Turned off maintenance mode" : "Haldusrežiimis välja lülitatud",
+ "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne",
+ "Updating database schema" : "Andmebaasi skeemi uuendamine",
+ "Updated database" : "Uuendatud andmebaas",
+ "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud",
+ "Checking updates of apps" : "Rakenduste uuenduste kontroll",
+ "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud",
+ "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s",
+ "%s (3rdparty)" : "%s (3nda osapoole arendaja)",
+ "%s (incompatible)" : "%s (pole ühilduv)",
+ "Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s",
+ "Already up to date" : "On juba ajakohane",
+ "Search contacts …" : "Otsi kontakte",
+ "No contacts found" : "Kontakte ei leitud",
+ "Show all contacts …" : "Näita kõiki kontakte",
+ "There was an error loading your contacts" : "Kontaktide laadimisel tekkis tõrge",
+ "Loading your contacts …" : "Sinu kontaktide laadimine ...",
+ "Looking for {term} …" : "Otsin {term} …",
+ "Settings" : "Seaded",
+ "Connection to server lost" : "Ühendus serveriga katkes",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Tõrge lehe laadimisel, ümberlaadimine %n sekundi pärast","Tõrge lehe laadimisel, ümberlaadimine %n sekundi pärast"],
+ "Saving..." : "Salvestamine...",
+ "Dismiss" : "Jäta vahele",
+ "This action requires you to confirm your password" : "See tegevus nõuab parooli kinnitamist",
+ "Authentication required" : "Autentimine on vajalik",
+ "Password" : "Parool",
+ "Cancel" : "Loobu",
+ "Confirm" : "Kinnita",
+ "Failed to authenticate, try again" : "Autentimine ebaõnnestus, proovige uuesti",
+ "seconds ago" : "sekundit tagasi",
+ "Logging in …" : "Sisselogimine ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Andmete taaastaamine ei ole pärast parooli lähtestaamist enam võimalik. <br />Kui Sa ei ole kindel mida teha, kontakteeru palun enne jätkamist administraatoriga. <br />Kas Sa kindlasti soovid jätkata?",
+ "I know what I'm doing" : "Ma tean mida teen",
+ "Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
+ "No" : "Ei",
+ "Yes" : "Jah",
+ "No files in here" : "Siin ei ole faile",
+ "Choose" : "Vali",
+ "Error loading file picker template: {error}" : "Viga failivalija malli laadimisel: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Viga sõnumi malli laadimisel: {error}",
+ "read-only" : "kirjutuskaitstud",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} failikonflikt","{count} failikonflikti"],
+ "One file conflict" : "Üks failikonflikt",
+ "New Files" : "Uued failid",
+ "Already existing files" : "Juba olemasolevad failid",
+ "Which files do you want to keep?" : "Milliseid faile sa soovid alles hoida?",
+ "If you select both versions, the copied file will have a number added to its name." : "Kui valid mõlemad versioonid, siis lisatakse kopeeritud faili nimele number.",
+ "Continue" : "Jätka",
+ "(all selected)" : "(kõik valitud)",
+ "({count} selected)" : "({count} valitud)",
+ "Error loading file exists template" : "Viga faili olemasolu malli laadimisel",
+ "Pending" : "Ootel",
+ "Very weak password" : "Väga nõrk parool",
+ "Weak password" : "Nõrk parool",
+ "So-so password" : "Enam-vähem sobiv parool",
+ "Good password" : "Hea parool",
+ "Strong password" : "Väga hea parool",
+ "Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
+ "Shared" : "Jagatud",
+ "Shared with {recipients}" : "Jagatud {recipients}",
+ "Error setting expiration date" : "Viga aegumise kuupäeva määramisel",
+ "The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
+ "Set expiration date" : "Määra aegumise kuupäev",
+ "Expiration" : "Aegumine",
+ "Expiration date" : "Aegumise kuupäev",
+ "Choose a password for the public link" : "Vali avaliku lingi jaoks parool",
+ "Copied!" : "Kopeeritud!",
+ "Copy" : "Kopeeri",
+ "Not supported!" : "Pole toetatud!",
+ "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.",
+ "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.",
+ "Resharing is not allowed" : "Edasijagamine pole lubatud",
+ "Share to {name}" : "Jaga kasutajale {name}",
+ "Share link" : "Jaga linki",
+ "Link" : "Link",
+ "Password protect" : "Parooliga kaitstud",
+ "Allow editing" : "Luba muutmine",
+ "Email link to person" : "Saada link isikule e-postiga",
+ "Send" : "Saada",
+ "Allow upload and editing" : "Luba üleslaadimine ja muutmine",
+ "Read only" : "kirjutuskaitstud",
+ "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt",
+ "Shared with you by {owner}" : "Sinuga jagas {owner}",
+ "group" : "grupp",
+ "email" : "e-post",
+ "shared by {sharer}" : "jagatud kasutajalt {sharer}",
+ "Unshare" : "Lõpeta jagamine",
+ "Can reshare" : "Võib edasi jagada",
+ "Can edit" : "Võib redigeerida",
+ "Can create" : "Võib luua",
+ "Can change" : "Võib muuta",
+ "Can delete" : "Võib kustutada",
+ "Access control" : "Ligipääsukontroll",
+ "Could not unshare" : "Jagamise lõpetamine ebaõnnestus",
+ "Error while sharing" : "Viga jagamisel",
+ "No users or groups found for {search}" : "Otsingu {search} põhjal kasutajaid ega gruppe ei leitud",
+ "No users found for {search}" : "Otsingu {search} põhjal kasutajaid ei leitud",
+ "An error occurred. Please try again" : "Tekkis tõrge. Palun proovi uuesti",
+ "{sharee} (group)" : "{sharee} (group)",
+ "{sharee} (remote)" : "{sharee} (mujal serveris)",
+ "Share" : "Jaga",
+ "Name or email address..." : "Nimi või e-posti aadress",
+ "Name..." : "Nimi...",
+ "Error" : "Viga",
+ "restricted" : "piiratud",
+ "invisible" : "nähtamatu",
+ "({scope})" : "({scope})",
+ "Delete" : "Kustuta",
+ "Rename" : "Nimeta ümber",
+ "No tags found" : "Märgendeid ei leitud",
+ "unknown text" : "tundmatu tekst",
+ "Hello world!" : "Tere maailm!",
+ "sunny" : "päikeseline",
+ "Hello {name}, the weather is {weather}" : "Tere {name}, ilm on {weather}",
+ "Hello {name}" : "Tere, {name}",
+ "new" : "uus",
+ "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"],
+ "Update to {version}" : "Uuenda versioonile {version}",
+ "An error occurred." : "Tekkis tõrge.",
+ "Please reload the page." : "Palun laadi see uuesti.",
+ "Continue to Nextcloud" : "Edasi Nextcloudi",
+ "Searching other places" : "Otsi teistest kohtadest",
+ "Personal" : "Isiklik",
+ "Users" : "Kasutajad",
+ "Apps" : "Rakendused",
+ "Admin" : "Admin",
+ "Help" : "Abiinfo",
+ "Access forbidden" : "Ligipääs on keelatud",
+ "File not found" : "Faili ei leitud",
+ "The specified document has not been found on the server." : "Määratud dokumenti serverist ei leitud.",
+ "You can click here to return to %s." : "%s tagasi minemiseks võid sa siia klikkida.",
+ "Internal Server Error" : "Serveri sisemine viga",
+ "The server encountered an internal error and was unable to complete your request." : "Serveris tekkis sisemine tõrge ja sinu päringu täitmine ebaõnnestus.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kui seda veateadet näidatakse mitu korda, siis palun võta ühendust serveri administraatoriga. Palun lisa alla aruandesse tehnilised üksikasjad.",
+ "More details can be found in the server log." : "Lisainfot võib leida serveri logist.",
+ "Technical details" : "Tehnilised andmed",
+ "Remote Address: %s" : "Kaugaadress: %s",
+ "Request ID: %s" : "Päringu ID: %s",
+ "Type: %s" : "Tüüp: %s",
+ "Code: %s" : "Kood: %s",
+ "Message: %s" : "Sõnum: %s",
+ "File: %s" : "Fail: %s",
+ "Line: %s" : "Rida: %s",
+ "Trace" : "Jälita",
+ "Security warning" : "Turvahoiatus",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
+ "Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
+ "Username" : "Kasutajanimi",
+ "Storage & database" : "Andmehoidla ja andmebaas",
+ "Data folder" : "Andmete kaust",
+ "Configure the database" : "Seadista andmebaasi",
+ "Only %s is available." : "Ainult %s on saadaval.",
+ "For more details check out the documentation." : "Lisainfot vaata dokumentatsioonist.",
+ "Database user" : "Andmebaasi kasutaja",
+ "Database password" : "Andmebaasi parool",
+ "Database name" : "Andmebasi nimi",
+ "Database tablespace" : "Andmebaasi tabeliruum",
+ "Database host" : "Andmebaasi host",
+ "Performance warning" : "Kiiruse hoiatus",
+ "SQLite will be used as database." : "Andmebaasina kasutatakse SQLite",
+ "Finish setup" : "Lõpeta seadistamine",
+ "Finishing …" : "Lõpetamine ...",
+ "Need help?" : "Vajad abi?",
+ "See the documentation" : "Vaata dokumentatsiooni",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun {linkstart}luba JavaScript{linkend} ning laadi see leht uuesti.",
+ "More apps" : "Veel rakendusi",
+ "Search" : "Otsi",
+ "This action requires you to confirm your password:" : "See tegevus nõuab parooli kinnitamist",
+ "Confirm your password" : "Kinnita oma parool",
+ "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!",
+ "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.",
+ "An internal error occurred." : "Tekkis sisemine tõrge.",
+ "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.",
+ "Username or email" : "Kasutajanimi või e-posti aadress",
+ "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?",
+ "Wrong password." : "Vale parool.",
+ "Log in" : "Logi sisse",
+ "Stay logged in" : "Püsi sisselogituna",
+ "Alternative Logins" : "Alternatiivsed sisselogimisviisid",
+ "Redirecting …" : "Ümbersuunamine ...",
+ "New password" : "Uus parool",
+ "New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
+ "Two-factor authentication" : "Kaheastmeline autentimine",
+ "Cancel log in" : "Katkesta sisselogimine",
+ "You are accessing the server from an untrusted domain." : "Sa kasutad serverit usalduseta asukohast",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Sõltuvalt sinu seadetest võib ka administraator kasutada allolevat nuppu, et seda domeeni usaldusväärseks märkida.",
+ "Add \"%s\" as trusted domain" : "Lisa \"%s\" usaldusväärse domeenina",
+ "App update required" : "Rakenduse uuendus on nõutud",
+ "%s will be updated to version %s" : "%s uuendatakse versioonile %s",
+ "These apps will be updated:" : "Neid rakendusi uuendatakse:",
+ "These incompatible apps will be disabled:" : "Need mitteühilduvad rakendused lülitatakse välja:",
+ "The theme %s has been disabled." : "Teema %s on keelatud.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Enne jätkamist veendu, et andmebaas, seadete ning andmete kataloog on varundatud.",
+ "Start update" : "Käivita uuendus",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:",
+ "Detailed logs" : "Üksikasjalikud logid",
+ "Update needed" : "Uuendamine vajaliik",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Abiinfo saamiseks vaata <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentatsiooni</a>.",
+ "Upgrade via web on my own risk" : "Uuenda veebi kaudu omal vastutusel",
+ "This page will refresh itself when the %s instance is available again." : "Se leht laetakse uuesti, kui %s instantsi on uuesti saadaval.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakteeru oma süsteemihalduriga, kui see teade püsib või on tekkinud ootamatult.",
+ "Thank you for your patience." : "Täname kannatlikkuse eest.",
+ "Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
+ "Ok" : "Ok",
+ "Error while unsharing" : "Viga jagamise lõpetamisel",
+ "can reshare" : "võib edasi jagada",
+ "can edit" : "saab muuta",
+ "can create" : "võib luua",
+ "can change" : "võib muuta",
+ "can delete" : "võib kustutada",
+ "access control" : "ligipääsukontroll",
+ "Share with users or by mail..." : "Jaga kasutajatega või e-postiga ...",
+ "Share with users or remote users..." : "Jaga kasutajatega või eemal olevate kasutajatega ...",
+ "Share with users, remote users or by mail..." : "Jaga kasutajatega, eemal olevate kasutajatega või e-postiga ...",
+ "Share with users or groups..." : "Jaga kasutajate või gruppidega ...",
+ "Share with users, groups or by mail..." : "Jaga kasutajatega, gruppidega või e-postiga ...",
+ "Share with users, groups or remote users..." : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...",
+ "Share with users, groups, remote users or by mail..." : "Jaga kasutajatega, gruppidega, eemal olevate kasutajatega või e-postiga ...",
+ "Share with users..." : "Jaga kasutajatega...",
+ "The object type is not specified." : "Objekti tüüp pole määratletud.",
+ "Enter new" : "Sisesta uus",
+ "Add" : "Lisa",
+ "Edit tags" : "Muuda silte",
+ "Error loading dialog template: {error}" : "Viga dialoogi malli laadimisel: {error}",
+ "No tags selected for deletion." : "Kustutamiseks pole ühtegi silti valitud.",
+ "The update was successful. Redirecting you to Nextcloud now." : "Uuendamine õnnestus. Sind suunatakse Nextcloudi.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tere,\n\n%s jagas sulle välja %s.\nVaata siit: %s\n\n",
+ "The share will expire on %s." : "Jagamine aegub %s.",
+ "Cheers!" : "Terekest!",
+ "Log out" : "Logi välja",
+ "Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>annan teada, et %s jagas sinuga <strong>%s</strong>. <a href=\"%s\">Vaata seda!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "See Nextcloud on momendil seadistatud ühe kasutaja jaoks.",
+ "This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index fc56c8b774e..c35ee42b9d4 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -173,8 +173,8 @@ OC.L10N.register(
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Partager",
- "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant cloud ou une adresse email.",
- "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant cloud.",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant de cloud fédéré ou une adresse email.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant de cloud fédéré.",
"Share with other people by entering a user or group or an email address." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou une adresse email.",
"Name or email address..." : "Nom ou adresse mail...",
"Name or federated cloud ID..." : "Nom ou ID du cloud fédéré...",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 994182603d5..3f96e4c60eb 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -171,8 +171,8 @@
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Partager",
- "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant cloud ou une adresse email.",
- "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant cloud.",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant de cloud fédéré ou une adresse email.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant de cloud fédéré.",
"Share with other people by entering a user or group or an email address." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou une adresse email.",
"Name or email address..." : "Nom ou adresse mail...",
"Name or federated cloud ID..." : "Nom ou ID du cloud fédéré...",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 97cf88eaf9d..813308437eb 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -14,11 +14,14 @@ OC.L10N.register(
"No crop data provided" : "Non sono stati forniti dati di ritaglio",
"No valid crop data provided" : "Non sono stati forniti dati di ritaglio validi",
"Crop is not square" : "Il ritaglio non è quadrato",
+ "State token does not match" : "Il token di stato non corrisponde",
"Password reset is disabled" : "Ripristino password disabilitato",
"Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido",
"Couldn't reset password because the token is expired" : "Impossibile reimpostare la password poiché il token è scaduto",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"Password reset" : "Ripristino password",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Fai clic sul pulsante seguente per reimpostare la tua password. Se non hai richiesto la reimpostazione della password, ignora questo messaggio.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Fai clic sul collegamento seguente per reimpostare la tua password. Se non hai richiesto la reimpostazione della password, ignora questo messaggio.",
"Reset your password" : "Ripristina la password",
"%s password reset" : "Ripristino password di %s",
"Couldn't send reset email. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione. Contatta il tuo amministratore.",
@@ -37,6 +40,9 @@ OC.L10N.register(
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controllo che lo schema del database possa essere aggiornato (ciò potrebbe richiedere molto tempo in base alla dimensione del database)",
"Checked database schema update" : "L'aggiornamento dello schema del database è stato verificato",
"Checking updates of apps" : "Controllo degli aggiornamenti delle applicazioni",
+ "Checking for update of app \"%s\" in appstore" : "Controllo degli aggiornamenti dell'applicazione \"%s\" nel negozio delle applicazioni",
+ "Update app \"%s\" from appstore" : "Aggiorna l'applicazione \"%s\" dal negozio di applicazioni",
+ "Checked for update of app \"%s\" in appstore" : "Verificati aggiornamento dell'applicazione \"%s\" nel negozio delle applicazioni",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controllo che lo schema del database di %s possa essere aggiornato (ciò potrebbe richiedere molto tempo in base alla dimensione del database)",
"Checked database schema update for apps" : "L'aggiornamento dello schema del database per le applicazioni è stato verificato",
"Updated \"%s\" to %s" : "Aggiornato \"%s\" a %s",
@@ -51,9 +57,12 @@ OC.L10N.register(
"Search contacts …" : "Cerca contatti...",
"No contacts found" : "Nessun contatto trovato",
"Show all contacts …" : "Mostra tutti i contatti...",
+ "There was an error loading your contacts" : "Si è verificato un errore durante il caricamento dei tuoi contatti",
"Loading your contacts …" : "Caricamento dei tuoi contatti...",
+ "Looking for {term} …" : "Ricerca di {term} in corso...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Si sono verificati errori con il controllo di integrità del codice. Ulteriori informazioni…</a>",
"No action available" : "Nessuna azione disponibile",
+ "Error fetching contact actions" : "Errore durante il recupero delle azioni dei contatti",
"Settings" : "Impostazioni",
"Connection to server lost" : "Connessione al server interrotta",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema durante il caricamento della pagina, aggiornamento tra %n secondo","Problema durante il caricamento della pagina, aggiornamento tra %n secondi"],
@@ -104,8 +113,10 @@ OC.L10N.register(
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a Nextcloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a Nextcloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OpCache non è configurata correttamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Per prestazioni migliori consigliamo</a> di utilizzare le impostazioni in <code>php.ini</code>:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La funzione PHP \"set_time_limit\" non è disponibile. Ciò potrebbe comportare l'interruzione di script durante l'esecuzione, compromettendo la tua installazione. Ti consigliamo vivamente di abilitare questa funzione.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\" rel=\"noreferrer\">consigli sulla sicurezza</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
@@ -117,6 +128,7 @@ OC.L10N.register(
"Expiration" : "Scadenza",
"Expiration date" : "Data di scadenza",
"Choose a password for the public link" : "Scegli una password per il collegamento pubblico",
+ "Choose a password for the public link or press the \"Enter\" key" : "Scegli una password per il collegamento pubblico o premi il tasto \"Invio\"",
"Copied!" : "Copiati!",
"Copy" : "Copia",
"Not supported!" : "Non supportato!",
@@ -135,6 +147,7 @@ OC.L10N.register(
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Shared with you and the group {group} by {owner}" : "Condiviso con te e con il gruppo {group} da {owner}",
"Shared with you by {owner}" : "Condiviso con te da {owner}",
+ "Choose a password for the mail share" : "Scegli una password per la condivisione tramite posta",
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha condiviso tramite collegamento",
"group" : "gruppo",
"remote" : "remota",
@@ -160,6 +173,9 @@ OC.L10N.register(
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Condividi",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Condividi con altre persone digitando un utente o un gruppo, un ID di cloud federata o un indirizzo di posta elettronica.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Condividi con altre persone digitando un utente, un gruppo o un ID di cloud federata.",
+ "Share with other people by entering a user or group or an email address." : "Condividi con altre persone digitando un utente, un gruppo o un indirizzo di posta elettronica.",
"Name or email address..." : "Nome o indirizzo email...",
"Name or federated cloud ID..." : "Nome o ID di cloud federata...",
"Name, federated cloud ID or email address..." : "Nome, ID di cloud federata o indirizzo email...",
@@ -255,6 +271,9 @@ OC.L10N.register(
"Log in" : "Accedi",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
+ "You are about to grant \"%s\" access to your %s account." : "Stai per accordare a \"%s\" l'accesso al tuo account %s.",
+ "App token" : "Token applicazione",
+ "Alternative login using app token" : "Accesso alternativo utilizzando il token dell'applicazione",
"Redirecting …" : "Redirezione in corso...",
"New password" : "Nuova password",
"New Password" : "Nuova password",
@@ -278,7 +297,9 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitare timeout con installazioni di grandi dimensioni, puoi eseguire il comando che segue dalla cartella di installazione:",
"Detailed logs" : "Log dettagliati",
"Update needed" : "Aggiornamento necessario",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Utilizza lo strumento di aggiornamento da riga di comando perché hai un'istanza grande con più di 50 utenti.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Per la guida, vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Sono consapevole che, procedendo con l'aggiornamento tramite interfaccia web, esista il rischio che la richiesta possa scadere e causare perdite di dati, ma ho una copia di sicurezza e so come ripristinare la mia istanza in caso di problemi.",
"Upgrade via web on my own risk" : "Aggiorna tramite web a mio rischio",
"This %s instance is currently in maintenance mode, which may take a while." : "Questa istanza di %s è attualmente in manutenzione, potrebbe richiedere del tempo.",
"This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile.",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 250f154e1ad..be82ccde14c 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -12,11 +12,14 @@
"No crop data provided" : "Non sono stati forniti dati di ritaglio",
"No valid crop data provided" : "Non sono stati forniti dati di ritaglio validi",
"Crop is not square" : "Il ritaglio non è quadrato",
+ "State token does not match" : "Il token di stato non corrisponde",
"Password reset is disabled" : "Ripristino password disabilitato",
"Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido",
"Couldn't reset password because the token is expired" : "Impossibile reimpostare la password poiché il token è scaduto",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"Password reset" : "Ripristino password",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Fai clic sul pulsante seguente per reimpostare la tua password. Se non hai richiesto la reimpostazione della password, ignora questo messaggio.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Fai clic sul collegamento seguente per reimpostare la tua password. Se non hai richiesto la reimpostazione della password, ignora questo messaggio.",
"Reset your password" : "Ripristina la password",
"%s password reset" : "Ripristino password di %s",
"Couldn't send reset email. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione. Contatta il tuo amministratore.",
@@ -35,6 +38,9 @@
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controllo che lo schema del database possa essere aggiornato (ciò potrebbe richiedere molto tempo in base alla dimensione del database)",
"Checked database schema update" : "L'aggiornamento dello schema del database è stato verificato",
"Checking updates of apps" : "Controllo degli aggiornamenti delle applicazioni",
+ "Checking for update of app \"%s\" in appstore" : "Controllo degli aggiornamenti dell'applicazione \"%s\" nel negozio delle applicazioni",
+ "Update app \"%s\" from appstore" : "Aggiorna l'applicazione \"%s\" dal negozio di applicazioni",
+ "Checked for update of app \"%s\" in appstore" : "Verificati aggiornamento dell'applicazione \"%s\" nel negozio delle applicazioni",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controllo che lo schema del database di %s possa essere aggiornato (ciò potrebbe richiedere molto tempo in base alla dimensione del database)",
"Checked database schema update for apps" : "L'aggiornamento dello schema del database per le applicazioni è stato verificato",
"Updated \"%s\" to %s" : "Aggiornato \"%s\" a %s",
@@ -49,9 +55,12 @@
"Search contacts …" : "Cerca contatti...",
"No contacts found" : "Nessun contatto trovato",
"Show all contacts …" : "Mostra tutti i contatti...",
+ "There was an error loading your contacts" : "Si è verificato un errore durante il caricamento dei tuoi contatti",
"Loading your contacts …" : "Caricamento dei tuoi contatti...",
+ "Looking for {term} …" : "Ricerca di {term} in corso...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Si sono verificati errori con il controllo di integrità del codice. Ulteriori informazioni…</a>",
"No action available" : "Nessuna azione disponibile",
+ "Error fetching contact actions" : "Errore durante il recupero delle azioni dei contatti",
"Settings" : "Impostazioni",
"Connection to server lost" : "Connessione al server interrotta",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema durante il caricamento della pagina, aggiornamento tra %n secondo","Problema durante il caricamento della pagina, aggiornamento tra %n secondi"],
@@ -102,8 +111,10 @@
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a Nextcloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a Nextcloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OpCache non è configurata correttamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Per prestazioni migliori consigliamo</a> di utilizzare le impostazioni in <code>php.ini</code>:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La funzione PHP \"set_time_limit\" non è disponibile. Ciò potrebbe comportare l'interruzione di script durante l'esecuzione, compromettendo la tua installazione. Ti consigliamo vivamente di abilitare questa funzione.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.",
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\" rel=\"noreferrer\">consigli sulla sicurezza</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
@@ -115,6 +126,7 @@
"Expiration" : "Scadenza",
"Expiration date" : "Data di scadenza",
"Choose a password for the public link" : "Scegli una password per il collegamento pubblico",
+ "Choose a password for the public link or press the \"Enter\" key" : "Scegli una password per il collegamento pubblico o premi il tasto \"Invio\"",
"Copied!" : "Copiati!",
"Copy" : "Copia",
"Not supported!" : "Non supportato!",
@@ -133,6 +145,7 @@
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Shared with you and the group {group} by {owner}" : "Condiviso con te e con il gruppo {group} da {owner}",
"Shared with you by {owner}" : "Condiviso con te da {owner}",
+ "Choose a password for the mail share" : "Scegli una password per la condivisione tramite posta",
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha condiviso tramite collegamento",
"group" : "gruppo",
"remote" : "remota",
@@ -158,6 +171,9 @@
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Condividi",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Condividi con altre persone digitando un utente o un gruppo, un ID di cloud federata o un indirizzo di posta elettronica.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Condividi con altre persone digitando un utente, un gruppo o un ID di cloud federata.",
+ "Share with other people by entering a user or group or an email address." : "Condividi con altre persone digitando un utente, un gruppo o un indirizzo di posta elettronica.",
"Name or email address..." : "Nome o indirizzo email...",
"Name or federated cloud ID..." : "Nome o ID di cloud federata...",
"Name, federated cloud ID or email address..." : "Nome, ID di cloud federata o indirizzo email...",
@@ -253,6 +269,9 @@
"Log in" : "Accedi",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
+ "You are about to grant \"%s\" access to your %s account." : "Stai per accordare a \"%s\" l'accesso al tuo account %s.",
+ "App token" : "Token applicazione",
+ "Alternative login using app token" : "Accesso alternativo utilizzando il token dell'applicazione",
"Redirecting …" : "Redirezione in corso...",
"New password" : "Nuova password",
"New Password" : "Nuova password",
@@ -276,7 +295,9 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitare timeout con installazioni di grandi dimensioni, puoi eseguire il comando che segue dalla cartella di installazione:",
"Detailed logs" : "Log dettagliati",
"Update needed" : "Aggiornamento necessario",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Utilizza lo strumento di aggiornamento da riga di comando perché hai un'istanza grande con più di 50 utenti.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Per la guida, vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Sono consapevole che, procedendo con l'aggiornamento tramite interfaccia web, esista il rischio che la richiesta possa scadere e causare perdite di dati, ma ho una copia di sicurezza e so come ripristinare la mia istanza in caso di problemi.",
"Upgrade via web on my own risk" : "Aggiorna tramite web a mio rischio",
"This %s instance is currently in maintenance mode, which may take a while." : "Questa istanza di %s è attualmente in manutenzione, potrebbe richiedere del tempo.",
"This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile.",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 5f0a2a61e17..c5c0ca49141 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -14,6 +14,7 @@ OC.L10N.register(
"No crop data provided" : "クロップデータは提供されません",
"No valid crop data provided" : "有効なクロップデータは提供されません",
"Crop is not square" : "クロップが正方形ではありません",
+ "State token does not match" : "トークンが適合しません",
"Password reset is disabled" : "パスワードリセットは無効化されています",
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした",
@@ -39,6 +40,9 @@ OC.L10N.register(
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "データベーススキーマーがアップデートできるかどうかチェックしています。(この操作の時間はデータベースの容量によります)",
"Checked database schema update" : "指定データベースのスキーマを更新",
"Checking updates of apps" : "アプリの更新をチェックしています。",
+ "Checking for update of app \"%s\" in appstore" : "アップストアで \"%s\" アプリの更新を確認しています",
+ "Update app \"%s\" from appstore" : "アップストアで \"%s\" アプリを更新",
+ "Checked for update of app \"%s\" in appstore" : "アップストアの \"%s\" アプリ更新確認済",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "データベーススキーマー %s がアップデートできるかどうかチェックしています。(この操作の時間はデータベースの容量によります)",
"Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新",
"Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。",
@@ -50,9 +54,15 @@ OC.L10N.register(
"%s (incompatible)" : "%s (非互換)",
"Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s",
"Already up to date" : "すべて更新済",
+ "Search contacts …" : "連絡先を検索...",
"No contacts found" : "連絡先が見つかりません",
"Show all contacts …" : "全ての連絡先を表示...",
+ "There was an error loading your contacts" : "連絡先の読み込みに失敗しました。",
+ "Loading your contacts …" : "連絡先を読み込み中...",
+ "Looking for {term} …" : "{term} を確認中 ...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>",
+ "No action available" : "操作できません",
+ "Error fetching contact actions" : "連絡先操作取得エラー",
"Settings" : "設定",
"Connection to server lost" : "サーバとの接続が切断されました",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["ページ読込に問題がありました。%n秒後に再読込します"],
@@ -103,6 +113,7 @@ OC.L10N.register(
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシヘッダーの設定が正しくないか、信頼できるプロキシからNextcloudにアクセスしています。信頼できるプロキシからNextcloudにアクセスしていない場合、これはセキュリティ上の問題であり、攻撃者が自分のIPアドレスを偽装してNextcloudに見えるようにしている可能性があります。詳細については、<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>をご覧ください。",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されています。しかし、PHPモジュール \"memcache\"が間違ってインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしています。\"memcache\" ではありません。<a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki で両方のモジュールの情報</a> について確認してください。",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "いくつかのファイルでチェックサムが適合しませんでした。この問題を解決するためは、<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>の詳細を見てください。(<a href=\"{codeIntegrityDownloadEndpoint}\">不適合ファイルのリスト…</a> / <a href=\"{rescanEndpoint}\">再チェック…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache が正しく設定されていません。 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">パフォーマンスを向上させるため ↗</a> <code>php.ini</code> で次の設定を使用することをお勧めします:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP 関数 \"set_time_limit\" は使用できません。これにより実行スクリプトが途中で停止されて、インストールを破壊する可能性があります。この機能を有効にすることを強くお勧めします。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : ".htaccess ファイルが機能していないため、インターネットからあなたのデータディレクトリとファイルにアクセスできる可能性があります。Webサーバの設定を変更してデータディレクトリにアクセス出来ないようにするか、データディレクトリをドキュメントルートの外側に移動することを強く推奨します。",
@@ -117,6 +128,7 @@ OC.L10N.register(
"Expiration" : "期限切れ",
"Expiration date" : "有効期限",
"Choose a password for the public link" : "URLによる共有のパスワードを入力",
+ "Choose a password for the public link or press the \"Enter\" key" : "公開リンクのパスワードを入力、または、\"エンター\"のみを叩く",
"Copied!" : "コピーされました!",
"Copy" : "コピー",
"Not supported!" : "サポートされていません!",
@@ -161,7 +173,13 @@ OC.L10N.register(
"{sharee} (email)" : "{sharee} (メール)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "共有",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "ユーザー名、グループ、クラウド統合ID、メールアドレスで共有",
+ "Share with other people by entering a user or group or a federated cloud ID." : "ユーザー名、グループ、クラウド統合IDで共有",
+ "Share with other people by entering a user or group or an email address." : "ユーザー名やグループ名、メールアドレスで共有",
"Name or email address..." : "名前またはメールアドレス",
+ "Name or federated cloud ID..." : "ユーザー名または、クラウド統合ID...",
+ "Name, federated cloud ID or email address..." : "ユーザー名、クラウド統合ID、またはメールアドレス",
+ "Name..." : "ユーザー名...",
"Error" : "エラー",
"Error removing share" : "共有の削除エラー",
"Non-existing tag #{tag}" : "存在しないタグ#{tag}",
@@ -253,7 +271,10 @@ OC.L10N.register(
"Log in" : "ログイン",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
+ "You are about to grant \"%s\" access to your %s account." : "%s アカウントで \"%s\" での接続を許可",
"App token" : "アプリのトークン",
+ "Alternative login using app token" : "アプリトークンを使って代替ログイン",
+ "Redirecting …" : "転送中...",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
"Reset password" : "パスワードをリセット",
@@ -276,7 +297,10 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "大規模なサイトの場合、ブラウザーがタイムアウトする可能性があるため、インストールディレクトリで以下のコマンドを実行することもできます。",
"Detailed logs" : "詳細ログ",
"Update needed" : "更新が必要です",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "50人以上が使う大規模システムの場合は、コマンドラインでアップグレードを行ってください。",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "不明な場合、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">ドキュメント</a>を参照してください。",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Web 画面から続行すると危険性があることを理解しています。この操作がタイムアウトすると、データが失われる危険性があることを理解しています。もし失敗した場合には取得済みのバックアップから修復する方法を理解しています。",
+ "Upgrade via web on my own risk" : "危険性を理解した上でWeb画面からアップグレード",
"This %s instance is currently in maintenance mode, which may take a while." : "このサーバー %s は現在メンテナンスモードです。しばらくお待ちください。",
"This page will refresh itself when the %s instance is available again." : "この画面は、サーバー %s の再起動後に自動的に更新されます。",
"Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 402d7b470ae..07ca1cd6178 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -12,6 +12,7 @@
"No crop data provided" : "クロップデータは提供されません",
"No valid crop data provided" : "有効なクロップデータは提供されません",
"Crop is not square" : "クロップが正方形ではありません",
+ "State token does not match" : "トークンが適合しません",
"Password reset is disabled" : "パスワードリセットは無効化されています",
"Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした",
"Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした",
@@ -37,6 +38,9 @@
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "データベーススキーマーがアップデートできるかどうかチェックしています。(この操作の時間はデータベースの容量によります)",
"Checked database schema update" : "指定データベースのスキーマを更新",
"Checking updates of apps" : "アプリの更新をチェックしています。",
+ "Checking for update of app \"%s\" in appstore" : "アップストアで \"%s\" アプリの更新を確認しています",
+ "Update app \"%s\" from appstore" : "アップストアで \"%s\" アプリを更新",
+ "Checked for update of app \"%s\" in appstore" : "アップストアの \"%s\" アプリ更新確認済",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "データベーススキーマー %s がアップデートできるかどうかチェックしています。(この操作の時間はデータベースの容量によります)",
"Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新",
"Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。",
@@ -48,9 +52,15 @@
"%s (incompatible)" : "%s (非互換)",
"Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s",
"Already up to date" : "すべて更新済",
+ "Search contacts …" : "連絡先を検索...",
"No contacts found" : "連絡先が見つかりません",
"Show all contacts …" : "全ての連絡先を表示...",
+ "There was an error loading your contacts" : "連絡先の読み込みに失敗しました。",
+ "Loading your contacts …" : "連絡先を読み込み中...",
+ "Looking for {term} …" : "{term} を確認中 ...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>",
+ "No action available" : "操作できません",
+ "Error fetching contact actions" : "連絡先操作取得エラー",
"Settings" : "設定",
"Connection to server lost" : "サーバとの接続が切断されました",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["ページ読込に問題がありました。%n秒後に再読込します"],
@@ -101,6 +111,7 @@
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシヘッダーの設定が正しくないか、信頼できるプロキシからNextcloudにアクセスしています。信頼できるプロキシからNextcloudにアクセスしていない場合、これはセキュリティ上の問題であり、攻撃者が自分のIPアドレスを偽装してNextcloudに見えるようにしている可能性があります。詳細については、<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>をご覧ください。",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されています。しかし、PHPモジュール \"memcache\"が間違ってインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしています。\"memcache\" ではありません。<a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki で両方のモジュールの情報</a> について確認してください。",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "いくつかのファイルでチェックサムが適合しませんでした。この問題を解決するためは、<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>の詳細を見てください。(<a href=\"{codeIntegrityDownloadEndpoint}\">不適合ファイルのリスト…</a> / <a href=\"{rescanEndpoint}\">再チェック…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache が正しく設定されていません。 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">パフォーマンスを向上させるため ↗</a> <code>php.ini</code> で次の設定を使用することをお勧めします:",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP 関数 \"set_time_limit\" は使用できません。これにより実行スクリプトが途中で停止されて、インストールを破壊する可能性があります。この機能を有効にすることを強くお勧めします。",
"Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : ".htaccess ファイルが機能していないため、インターネットからあなたのデータディレクトリとファイルにアクセスできる可能性があります。Webサーバの設定を変更してデータディレクトリにアクセス出来ないようにするか、データディレクトリをドキュメントルートの外側に移動することを強く推奨します。",
@@ -115,6 +126,7 @@
"Expiration" : "期限切れ",
"Expiration date" : "有効期限",
"Choose a password for the public link" : "URLによる共有のパスワードを入力",
+ "Choose a password for the public link or press the \"Enter\" key" : "公開リンクのパスワードを入力、または、\"エンター\"のみを叩く",
"Copied!" : "コピーされました!",
"Copy" : "コピー",
"Not supported!" : "サポートされていません!",
@@ -159,7 +171,13 @@
"{sharee} (email)" : "{sharee} (メール)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "共有",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "ユーザー名、グループ、クラウド統合ID、メールアドレスで共有",
+ "Share with other people by entering a user or group or a federated cloud ID." : "ユーザー名、グループ、クラウド統合IDで共有",
+ "Share with other people by entering a user or group or an email address." : "ユーザー名やグループ名、メールアドレスで共有",
"Name or email address..." : "名前またはメールアドレス",
+ "Name or federated cloud ID..." : "ユーザー名または、クラウド統合ID...",
+ "Name, federated cloud ID or email address..." : "ユーザー名、クラウド統合ID、またはメールアドレス",
+ "Name..." : "ユーザー名...",
"Error" : "エラー",
"Error removing share" : "共有の削除エラー",
"Non-existing tag #{tag}" : "存在しないタグ#{tag}",
@@ -251,7 +269,10 @@
"Log in" : "ログイン",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
+ "You are about to grant \"%s\" access to your %s account." : "%s アカウントで \"%s\" での接続を許可",
"App token" : "アプリのトークン",
+ "Alternative login using app token" : "アプリトークンを使って代替ログイン",
+ "Redirecting …" : "転送中...",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
"Reset password" : "パスワードをリセット",
@@ -274,7 +295,10 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "大規模なサイトの場合、ブラウザーがタイムアウトする可能性があるため、インストールディレクトリで以下のコマンドを実行することもできます。",
"Detailed logs" : "詳細ログ",
"Update needed" : "更新が必要です",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "50人以上が使う大規模システムの場合は、コマンドラインでアップグレードを行ってください。",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "不明な場合、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">ドキュメント</a>を参照してください。",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Web 画面から続行すると危険性があることを理解しています。この操作がタイムアウトすると、データが失われる危険性があることを理解しています。もし失敗した場合には取得済みのバックアップから修復する方法を理解しています。",
+ "Upgrade via web on my own risk" : "危険性を理解した上でWeb画面からアップグレード",
"This %s instance is currently in maintenance mode, which may take a while." : "このサーバー %s は現在メンテナンスモードです。しばらくお待ちください。",
"This page will refresh itself when the %s instance is available again." : "この画面は、サーバー %s の再起動後に自動的に更新されます。",
"Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。",
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index a6855801bcf..9d2cb485faf 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -759,6 +759,7 @@ return array(
'OC\\Repair\\NC12\\UpdateLanguageCodes' => $baseDir . '/lib/private/Repair/NC12/UpdateLanguageCodes.php',
'OC\\Repair\\NC13\\RepairInvalidPaths' => $baseDir . '/lib/private/Repair/NC13/RepairInvalidPaths.php',
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php',
+ 'OC\\Repair\\Owncloud\\DropAccountTermsTable' => $baseDir . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php',
'OC\\Repair\\Owncloud\\SaveAccountsTableData' => $baseDir . '/lib/private/Repair/Owncloud/SaveAccountsTableData.php',
'OC\\Repair\\RemoveRootShares' => $baseDir . '/lib/private/Repair/RemoveRootShares.php',
'OC\\Repair\\RepairInvalidShares' => $baseDir . '/lib/private/Repair/RepairInvalidShares.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index c0aeb4640d0..4617b344539 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -789,6 +789,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Repair\\NC12\\UpdateLanguageCodes' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/UpdateLanguageCodes.php',
'OC\\Repair\\NC13\\RepairInvalidPaths' => __DIR__ . '/../../..' . '/lib/private/Repair/NC13/RepairInvalidPaths.php',
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php',
+ 'OC\\Repair\\Owncloud\\DropAccountTermsTable' => __DIR__ . '/../../..' . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php',
'OC\\Repair\\Owncloud\\SaveAccountsTableData' => __DIR__ . '/../../..' . '/lib/private/Repair/Owncloud/SaveAccountsTableData.php',
'OC\\Repair\\RemoveRootShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveRootShares.php',
'OC\\Repair\\RepairInvalidShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairInvalidShares.php',
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index fb74583dbe8..70c0ab1e030 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -12,6 +12,10 @@ OC.L10N.register(
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
+ "Education Edition" : "Edizione didattica",
+ "Enterprise bundle" : "Pacchetto Enterprise",
+ "Groupware bundle" : "Pacchetto Groupware",
+ "Social sharing bundle" : "Pacchetto Social sharing",
"PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"PHP with a version lower than %s is required." : "Richiesta una versione di PHP minore di %s.",
"%sbit or higher PHP required." : "Richiesto PHP %sbit o superiore.",
@@ -118,6 +122,9 @@ OC.L10N.register(
"Expiration date is in the past" : "La data di scadenza è nel passato",
"Can’t set expiration date more than %s days in the future" : "Impossibile impostare la data di scadenza a più di %s giorni nel futuro",
"%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "%s shared »%s« with you." : "%s ha condiviso «%s» con te.",
+ "Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
+ "Open »%s«" : "Apri «%s»",
"%s via %s" : "%s tramite %s",
"The requested share does not exist anymore" : "La condivisione richiesta non esiste più",
"Could not find category \"%s\"" : "Impossibile trovare la categoria \"%s\"",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index bd3a35cdef1..395855ea535 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -10,6 +10,10 @@
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
+ "Education Edition" : "Edizione didattica",
+ "Enterprise bundle" : "Pacchetto Enterprise",
+ "Groupware bundle" : "Pacchetto Groupware",
+ "Social sharing bundle" : "Pacchetto Social sharing",
"PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"PHP with a version lower than %s is required." : "Richiesta una versione di PHP minore di %s.",
"%sbit or higher PHP required." : "Richiesto PHP %sbit o superiore.",
@@ -116,6 +120,9 @@
"Expiration date is in the past" : "La data di scadenza è nel passato",
"Can’t set expiration date more than %s days in the future" : "Impossibile impostare la data di scadenza a più di %s giorni nel futuro",
"%s shared »%s« with you" : "%s ha condiviso «%s» con te",
+ "%s shared »%s« with you." : "%s ha condiviso «%s» con te.",
+ "Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
+ "Open »%s«" : "Apri «%s»",
"%s via %s" : "%s tramite %s",
"The requested share does not exist anymore" : "La condivisione richiesta non esiste più",
"Could not find category \"%s\"" : "Impossibile trovare la categoria \"%s\"",
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index c19427e5f9b..0577093712e 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -412,6 +412,12 @@ class Local extends \OC\Files\Storage\Common {
*/
public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) {
if ($sourceStorage->instanceOfStorage('\OC\Files\Storage\Local')) {
+ if ($sourceStorage->instanceOfStorage(Jail::class)) {
+ /**
+ * @var \OC\Files\Storage\Wrapper\Jail $sourceStorage
+ */
+ $sourceInternalPath = $sourceStorage->getUnjailedPath($sourceInternalPath);
+ }
/**
* @var \OC\Files\Storage\Local $sourceStorage
*/
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index dae328e6340..6cfc8ddf4ad 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -40,6 +40,7 @@ use OC\Repair\NC11\MoveAvatars;
use OC\Repair\NC12\InstallCoreBundle;
use OC\Repair\NC12\UpdateLanguageCodes;
use OC\Repair\OldGroupMembershipShares;
+use OC\Repair\Owncloud\DropAccountTermsTable;
use OC\Repair\Owncloud\SaveAccountsTableData;
use OC\Repair\RemoveRootShares;
use OC\Repair\NC13\RepairInvalidPaths;
@@ -174,6 +175,7 @@ class Repair implements IOutput{
new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), $connection, true),
new SqliteAutoincrement($connection),
new SaveAccountsTableData($connection, $config),
+ new DropAccountTermsTable($connection),
];
return $steps;
diff --git a/lib/private/Repair/Owncloud/DropAccountTermsTable.php b/lib/private/Repair/Owncloud/DropAccountTermsTable.php
new file mode 100644
index 00000000000..0b1b64c3a3a
--- /dev/null
+++ b/lib/private/Repair/Owncloud/DropAccountTermsTable.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Owncloud;
+
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class DropAccountTermsTable implements IRepairStep {
+
+ /** @var IDBConnection */
+ protected $db;
+
+ /**
+ * @param IDBConnection $db
+ */
+ public function __construct(IDBConnection $db) {
+ $this->db = $db;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return 'Drop account terms table when migrating from ownCloud';
+ }
+
+ /**
+ * @param IOutput $output
+ */
+ public function run(IOutput $output) {
+ if (!$this->db->tableExists('account_terms')) {
+ return;
+ }
+
+ $this->db->dropTable('account_terms');
+ }
+}
+
diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index 902d22f6679..91ac5c665b3 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -200,9 +200,7 @@ class Updater extends BasicEmitter {
'11.0.0.10',
], true)) {
$currentVendor = 'nextcloud';
- } else if (in_array($oldVersion, [
- '10.0.0.12',
- ], true)) {
+ } else if (isset($allowedPreviousVersions['owncloud'][$oldVersion])) {
$currentVendor = 'owncloud';
}
}
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 9202a28899b..e3c48786be3 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -230,6 +230,10 @@ input#passwordbutton {
line-height: 1.6em;
}
+.federationScopeMenu.popovermenu .menuitem .menuitem-text {
+ font-weight: 600;
+}
+
.federationScopeMenu.popovermenu .menuitem .menuitem-text-detail {
opacity: .75;
}
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index 4328335abec..c205447dec9 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -1,6 +1,8 @@
OC.L10N.register(
"settings",
{
+ "{actor} changed your password" : "{actor} muutis sinu parooli",
+ "You changed your password" : "Sa muutsid oma parooli",
"Wrong password" : "Vale parool",
"Saved" : "Salvestatud",
"No user supplied" : "Kasutajat ei sisestatud",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 71ca6eb5e15..c80a6e40dbe 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -1,4 +1,6 @@
{ "translations": {
+ "{actor} changed your password" : "{actor} muutis sinu parooli",
+ "You changed your password" : "Sa muutsid oma parooli",
"Wrong password" : "Vale parool",
"Saved" : "Salvestatud",
"No user supplied" : "Kasutajat ei sisestatud",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index e507fab5466..82de3453ec2 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -8,9 +8,13 @@ OC.L10N.register(
"You changed your email address" : "Hai cambiato il tuo indirizzo email",
"Your email address was changed by an administrator" : "Il tuo indirizzo email è stato cambiato da un amministratore",
"Security" : "Sicurezza",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Hai effettuato correttamente l'accesso utilizzando l'autenticazione a due fattori (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un tentativo di utilizzare l'autenticazione a due fattori non è riuscito (%1$s)",
+ "Your <strong>password</strong> or <strong>email</strong> was modified" : "La tua<strong>password</strong> o <strong>email</strong> è stata modificata",
"Your apps" : "Le tue applicazioni",
"Enabled apps" : "Applicazioni abilitate",
"Disabled apps" : "Applicazioni disabilitate",
+ "App bundles" : "Pacchetti di applicazioni",
"Wrong password" : "Password errata",
"Saved" : "Salvato",
"No user supplied" : "Non è stato fornito alcun utente",
@@ -18,6 +22,7 @@ OC.L10N.register(
"Authentication error" : "Errore di autenticazione",
"Please provide an admin recovery password; otherwise, all user data will be lost." : "Fornisci una password amministrativa di ripristino; altrimenti, tutti i dati degli utenti saranno persi.",
"Wrong admin recovery password. Please check the password and try again." : "Password amministrativa di ripristino errata. Controlla la password e prova ancora.",
+ "Backend doesn't support password change, but the user's encryption key was updated." : "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata",
"Federated Cloud Sharing" : "Condivisione cloud federata",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL utilizza una versione %s datata (%s). Aggiorna il tuo sistema operativo o funzionalità come %s non funzioneranno correttamente.",
@@ -28,6 +33,8 @@ OC.L10N.register(
"Unable to delete group." : "Impossibile eliminare il gruppo.",
"Invalid SMTP password." : "Password SMTP non valida.",
"Well done, %s!" : "Ben fatto, %s!",
+ "Email setting test" : "Prova impostazioni email",
+ "Email could not be sent. Check your mail server log" : "Il messaggio non può essere inviato. Controlla il log del tuo server di posta",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid mail address" : "Indirizzo email non valido",
@@ -48,10 +55,16 @@ OC.L10N.register(
"Email saved" : "Email salvata",
"%1$s changed your password on %2$s." : "%1$s ha cambiato la tua password su %2$s.",
"Your password on %s was changed." : "La tua password su %s è stata modificata.",
+ "Your password on %s was reset by an administrator." : "La tua password su %s è stata reimpostata da un amministratore",
"Password changed for %s" : "Password modificata per %s",
"If you did not request this, please contact an administrator." : "Se non lo hai richiesto, contatta un amministratore.",
"Password for %1$s changed on %2$s" : "Password per %1$s cambiata su %2$s",
+ "%1$s changed your email address on %2$s." : "%1$s ha modificato il tuo indirizzo di posta su %2$s.",
+ "Your email address on %s was changed." : "Il tuo indirizzo di posta su %s è stata modificato.",
+ "Your email address on %s was changed by an administrator." : "Il tuo indirizzo di posta su %s è stato modificato da un amministratore.",
+ "Email address changed for %s" : "Indirizzo di posta modificato per %s",
"The new email address is %s" : "Il nuovo indirizzo email è %s",
+ "Email address for %1$s changed on %2$s" : "Indirizzo di posta per %1$s modificato su %2$s",
"Welcome aboard" : "Benvenuto a bordo",
"Welcome aboard %s" : "Benvenuto a bordo di %s",
"Your username is: %s" : "Il tuo nome utente è: %s",
@@ -133,6 +146,7 @@ OC.L10N.register(
"Will be synced to a global and public address book" : "Sarà sincronizzato con una rubrica globale e pubblica",
"Verify" : "Verifica",
"Verifying …" : "Verifica in corso...",
+ "An error occured while changing your language. Please reload the page and try again." : "Si è verificato un errore durante la modifica della lingua. Ricarica la pagina e prova ancora.",
"Select a profile picture" : "Seleziona un'immagine del profilo",
"Very weak password" : "Password molto debole",
"Weak password" : "Password debole",
@@ -145,6 +159,7 @@ OC.L10N.register(
"A valid group name must be provided" : "Deve essere fornito un nome valido per il gruppo",
"deleted {groupName}" : "{groupName} eliminato",
"undo" : "annulla",
+ "{size} used" : "{size} utilizzati",
"never" : "mai",
"deleted {userName}" : "{userName} eliminato",
"No user found for <strong>{pattern}</strong>" : "Nessun utente trovato per <strong>{pattern}</strong>",
@@ -156,6 +171,7 @@ OC.L10N.register(
"Password successfully changed" : "Password modificata correttamente",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Il cambiamento della password causerà una perdita di dati, poiché il ripristino dei dati non è disponibile per questo utente",
"Could not change the users email" : "Impossibile modificare l'indirizzo email degli utenti",
+ "Error while changing status of {user}" : "Errore durante la modifica dello stato di {user}",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Error creating user: {message}" : "Errore durante la creazione dell'utente: {message}",
"A valid password must be provided" : "Deve essere fornita una password valida",
@@ -224,15 +240,27 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.",
"Start migration" : "Avvia migrazione",
"Security & setup warnings" : "Avvisi di sicurezza e di configurazione",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione ↗</a> per le note di configurazione di PHP e la configurazione PHP del tuo server, in particolare quando utilizzi php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:",
"Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Leggi attentamente le <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"%s\">log</a>.",
"All checks passed." : "Tutti i controlli passati.",
+ "Background jobs" : "Operazioni in background",
+ "Last job ran %s." : "Ultima esecuzione di cron: %s.",
+ "Last job execution ran %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.",
+ "Background job didn’t run yet!" : "Operazione in background non ancora eseguita!",
"Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su HTTP.",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.",
"The cron.php needs to be executed by the system user \"%s\"." : "Il cron.php deve essere eseguito dall'utente di sistema \"%s\".",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.",
"Version" : "Versione",
"Sharing" : "Condivisione",
"Allow apps to use the Share API" : "Consenti alle applicazioni di utilizzare le API di condivisione",
@@ -284,8 +312,10 @@ OC.L10N.register(
"Address" : "Indirizzo",
"Your postal address" : "Il tuo indirizzo postale",
"Website" : "Sito web",
+ "It can take up to 24 hours before the account is displayed as verified." : "Potrebbero essere necessarie 24 ore prima che l'account sia visualizzato come verificato.",
"Link https://…" : "Colegamento https://...",
"Twitter" : "Twitter",
+ "Twitter handle @…" : "Nome utente Twitter @...",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
"Language" : "Lingua",
"Help translate" : "Migliora la traduzione",
@@ -303,6 +333,11 @@ OC.L10N.register(
"Username" : "Nome utente",
"Done" : "Completato",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google+" : "Seguici su Google+!",
+ "Like our Facebook page" : "Mi piace sulla nostra pagina di Facebook!",
+ "Follow us on Twitter" : "Seguici su Twitter!",
+ "Check out our blog" : "Leggi il nostro blog!",
+ "Subscribe to our newsletter" : "Iscriviti alla nostra newsletter",
"Settings" : "Impostazioni",
"Show storage location" : "Mostra posizione di archiviazione",
"Show user backend" : "Mostra il motore utente",
@@ -386,6 +421,9 @@ OC.L10N.register(
"Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!",
"Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!",
"Show last log in" : "Mostra ultimo accesso",
+ "Verifying" : "Verifica in corso",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Client web, desktop e mobile e password specifiche di applicazioni che hanno attualmente accesso al tuo account.",
"Follow us on Google+!" : "Seguici su Google+!",
"Follow us on Twitter!" : "Seguici su Twitter!",
"Check out our blog!" : "Leggi il nostro blog!"
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index b5cccfad616..9a3124224c3 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -6,9 +6,13 @@
"You changed your email address" : "Hai cambiato il tuo indirizzo email",
"Your email address was changed by an administrator" : "Il tuo indirizzo email è stato cambiato da un amministratore",
"Security" : "Sicurezza",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Hai effettuato correttamente l'accesso utilizzando l'autenticazione a due fattori (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un tentativo di utilizzare l'autenticazione a due fattori non è riuscito (%1$s)",
+ "Your <strong>password</strong> or <strong>email</strong> was modified" : "La tua<strong>password</strong> o <strong>email</strong> è stata modificata",
"Your apps" : "Le tue applicazioni",
"Enabled apps" : "Applicazioni abilitate",
"Disabled apps" : "Applicazioni disabilitate",
+ "App bundles" : "Pacchetti di applicazioni",
"Wrong password" : "Password errata",
"Saved" : "Salvato",
"No user supplied" : "Non è stato fornito alcun utente",
@@ -16,6 +20,7 @@
"Authentication error" : "Errore di autenticazione",
"Please provide an admin recovery password; otherwise, all user data will be lost." : "Fornisci una password amministrativa di ripristino; altrimenti, tutti i dati degli utenti saranno persi.",
"Wrong admin recovery password. Please check the password and try again." : "Password amministrativa di ripristino errata. Controlla la password e prova ancora.",
+ "Backend doesn't support password change, but the user's encryption key was updated." : "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata",
"Federated Cloud Sharing" : "Condivisione cloud federata",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL utilizza una versione %s datata (%s). Aggiorna il tuo sistema operativo o funzionalità come %s non funzioneranno correttamente.",
@@ -26,6 +31,8 @@
"Unable to delete group." : "Impossibile eliminare il gruppo.",
"Invalid SMTP password." : "Password SMTP non valida.",
"Well done, %s!" : "Ben fatto, %s!",
+ "Email setting test" : "Prova impostazioni email",
+ "Email could not be sent. Check your mail server log" : "Il messaggio non può essere inviato. Controlla il log del tuo server di posta",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid mail address" : "Indirizzo email non valido",
@@ -46,10 +53,16 @@
"Email saved" : "Email salvata",
"%1$s changed your password on %2$s." : "%1$s ha cambiato la tua password su %2$s.",
"Your password on %s was changed." : "La tua password su %s è stata modificata.",
+ "Your password on %s was reset by an administrator." : "La tua password su %s è stata reimpostata da un amministratore",
"Password changed for %s" : "Password modificata per %s",
"If you did not request this, please contact an administrator." : "Se non lo hai richiesto, contatta un amministratore.",
"Password for %1$s changed on %2$s" : "Password per %1$s cambiata su %2$s",
+ "%1$s changed your email address on %2$s." : "%1$s ha modificato il tuo indirizzo di posta su %2$s.",
+ "Your email address on %s was changed." : "Il tuo indirizzo di posta su %s è stata modificato.",
+ "Your email address on %s was changed by an administrator." : "Il tuo indirizzo di posta su %s è stato modificato da un amministratore.",
+ "Email address changed for %s" : "Indirizzo di posta modificato per %s",
"The new email address is %s" : "Il nuovo indirizzo email è %s",
+ "Email address for %1$s changed on %2$s" : "Indirizzo di posta per %1$s modificato su %2$s",
"Welcome aboard" : "Benvenuto a bordo",
"Welcome aboard %s" : "Benvenuto a bordo di %s",
"Your username is: %s" : "Il tuo nome utente è: %s",
@@ -131,6 +144,7 @@
"Will be synced to a global and public address book" : "Sarà sincronizzato con una rubrica globale e pubblica",
"Verify" : "Verifica",
"Verifying …" : "Verifica in corso...",
+ "An error occured while changing your language. Please reload the page and try again." : "Si è verificato un errore durante la modifica della lingua. Ricarica la pagina e prova ancora.",
"Select a profile picture" : "Seleziona un'immagine del profilo",
"Very weak password" : "Password molto debole",
"Weak password" : "Password debole",
@@ -143,6 +157,7 @@
"A valid group name must be provided" : "Deve essere fornito un nome valido per il gruppo",
"deleted {groupName}" : "{groupName} eliminato",
"undo" : "annulla",
+ "{size} used" : "{size} utilizzati",
"never" : "mai",
"deleted {userName}" : "{userName} eliminato",
"No user found for <strong>{pattern}</strong>" : "Nessun utente trovato per <strong>{pattern}</strong>",
@@ -154,6 +169,7 @@
"Password successfully changed" : "Password modificata correttamente",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Il cambiamento della password causerà una perdita di dati, poiché il ripristino dei dati non è disponibile per questo utente",
"Could not change the users email" : "Impossibile modificare l'indirizzo email degli utenti",
+ "Error while changing status of {user}" : "Errore durante la modifica dello stato di {user}",
"A valid username must be provided" : "Deve essere fornito un nome utente valido",
"Error creating user: {message}" : "Errore durante la creazione dell'utente: {message}",
"A valid password must be provided" : "Deve essere fornita una password valida",
@@ -222,15 +238,27 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.",
"Start migration" : "Avvia migrazione",
"Security & setup warnings" : "Avvisi di sicurezza e di configurazione",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione ↗</a> per le note di configurazione di PHP e la configurazione PHP del tuo server, in particolare quando utilizzi php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:",
"Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Leggi attentamente le <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"%s\">log</a>.",
"All checks passed." : "Tutti i controlli passati.",
+ "Background jobs" : "Operazioni in background",
+ "Last job ran %s." : "Ultima esecuzione di cron: %s.",
+ "Last job execution ran %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.",
+ "Background job didn’t run yet!" : "Operazione in background non ancora eseguita!",
"Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su HTTP.",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.",
"The cron.php needs to be executed by the system user \"%s\"." : "Il cron.php deve essere eseguito dall'utente di sistema \"%s\".",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.",
"Version" : "Versione",
"Sharing" : "Condivisione",
"Allow apps to use the Share API" : "Consenti alle applicazioni di utilizzare le API di condivisione",
@@ -282,8 +310,10 @@
"Address" : "Indirizzo",
"Your postal address" : "Il tuo indirizzo postale",
"Website" : "Sito web",
+ "It can take up to 24 hours before the account is displayed as verified." : "Potrebbero essere necessarie 24 ore prima che l'account sia visualizzato come verificato.",
"Link https://…" : "Colegamento https://...",
"Twitter" : "Twitter",
+ "Twitter handle @…" : "Nome utente Twitter @...",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
"Language" : "Lingua",
"Help translate" : "Migliora la traduzione",
@@ -301,6 +331,11 @@
"Username" : "Nome utente",
"Done" : "Completato",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google+" : "Seguici su Google+!",
+ "Like our Facebook page" : "Mi piace sulla nostra pagina di Facebook!",
+ "Follow us on Twitter" : "Seguici su Twitter!",
+ "Check out our blog" : "Leggi il nostro blog!",
+ "Subscribe to our newsletter" : "Iscriviti alla nostra newsletter",
"Settings" : "Impostazioni",
"Show storage location" : "Mostra posizione di archiviazione",
"Show user backend" : "Mostra il motore utente",
@@ -384,6 +419,9 @@
"Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!",
"Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!",
"Show last log in" : "Mostra ultimo accesso",
+ "Verifying" : "Verifica in corso",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Client web, desktop e mobile e password specifiche di applicazioni che hanno attualmente accesso al tuo account.",
"Follow us on Google+!" : "Seguici su Google+!",
"Follow us on Twitter!" : "Seguici su Twitter!",
"Check out our blog!" : "Leggi il nostro blog!"
diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml
index f9412935e51..10e1d425022 100644
--- a/tests/acceptance/config/behat.yml
+++ b/tests/acceptance/config/behat.yml
@@ -17,6 +17,7 @@ default:
- NotificationContext
- SettingsContext
- SettingsMenuContext
+ - ThemingAppContext
- UsersSettingsContext
extensions:
Behat\MinkExtension:
diff --git a/tests/acceptance/features/app-theming.feature b/tests/acceptance/features/app-theming.feature
new file mode 100644
index 00000000000..9f5ac3f6a42
--- /dev/null
+++ b/tests/acceptance/features/app-theming.feature
@@ -0,0 +1,23 @@
+Feature: app-theming
+
+ Scenario: changing the color updates the header color
+ Given I am logged in as the admin
+ And I visit the settings page
+ And I open the "Theming" section
+ And I see that the color selector in the Theming app has loaded
+ And I see that the header color is "0082C9"
+ When I set the "Color" parameter in the Theming app to "C9C9C9"
+ Then I see that the parameters in the Theming app are eventually saved
+ And I see that the header color is "C9C9C9"
+
+ Scenario: resetting the color updates the header color
+ Given I am logged in as the admin
+ And I visit the settings page
+ And I open the "Theming" section
+ And I see that the color selector in the Theming app has loaded
+ And I set the "Color" parameter in the Theming app to "C9C9C9"
+ And I see that the parameters in the Theming app are eventually saved
+ And I see that the header color is "C9C9C9"
+ When I reset the "Color" parameter in the Theming app to its default value
+ Then I see that the parameters in the Theming app are eventually saved
+ And I see that the header color is "0082C9"
diff --git a/tests/acceptance/features/bootstrap/ThemingAppContext.php b/tests/acceptance/features/bootstrap/ThemingAppContext.php
new file mode 100644
index 00000000000..a36ce7b297e
--- /dev/null
+++ b/tests/acceptance/features/bootstrap/ThemingAppContext.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ *
+ * @copyright Copyright (c) 2017, Daniel Calviño Sánchez (danxuliu@gmail.com)
+ *
+ * @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/>.
+ *
+ */
+
+use Behat\Behat\Context\Context;
+
+class ThemingAppContext implements Context, ActorAwareInterface {
+
+ use ActorAware;
+
+ /**
+ * @return Locator
+ */
+ public static function inputFieldFor($parameterName) {
+ return Locator::forThe()->css("input")->
+ descendantOf(self::parameterDivFor($parameterName))->
+ describedAs("Input field for $parameterName parameter in Theming app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function resetButtonFor($parameterName) {
+ return Locator::forThe()->css(".theme-undo")->
+ descendantOf(self::parameterDivFor($parameterName))->
+ describedAs("Reset button for $parameterName parameter in Theming app");
+ }
+
+ /**
+ * @return Locator
+ */
+ private static function parameterDivFor($parameterName) {
+ return Locator::forThe()->xpath("//*[@id='theming']//label//*[normalize-space() = '$parameterName']/ancestor::div[1]")->
+ describedAs("Div for $parameterName parameter in Theming app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function statusMessage() {
+ return Locator::forThe()->id("theming_settings_msg")->
+ describedAs("Status message in Theming app");
+ }
+
+ /**
+ * @When I set the :parameterName parameter in the Theming app to :parameterValue
+ */
+ public function iSetTheParameterInTheThemingAppTo($parameterName, $parameterValue) {
+ $this->actor->find(self::inputFieldFor($parameterName), 10)->setValue($parameterValue . "\r");
+ }
+
+ /**
+ * @When I reset the :parameterName parameter in the Theming app to its default value
+ */
+ public function iSetTheParameterInTheThemingAppToItsDefaultValue($parameterName) {
+ // The reset button is not shown when the cursor is outside the input
+ // field, so ensure that the cursor is on the input field by clicking on
+ // it.
+ $this->actor->find(self::inputFieldFor($parameterName), 10)->click();
+
+ $this->actor->find(self::resetButtonFor($parameterName), 10)->click();
+ }
+
+ /**
+ * @Then I see that the color selector in the Theming app has loaded
+ */
+ public function iSeeThatTheColorSelectorInTheThemingAppHasLoaded() {
+ // When the color selector is loaded it removes the leading '#' from the
+ // value property of the input field object it is linked to, and changes
+ // the background color of the input field to that value. The only way
+ // to know that the color selector has loaded is to look for any of
+ // those changes.
+
+ PHPUnit_Framework_Assert::assertTrue($this->actor->find(self::inputFieldFor("Color"), 10)->isVisible());
+
+ $actor = $this->actor;
+
+ $colorSelectorLoadedCallback = function() use($actor) {
+ $colorSelectorValue = $actor->getSession()->evaluateScript("return $('#theming-color')[0].value;");
+
+ if ($colorSelectorValue[0] === '#') {
+ return false;
+ }
+
+ return true;
+ };
+
+ if (!Utils::waitFor($colorSelectorLoadedCallback, $timeout = 10 * $this->actor->getFindTimeoutMultiplier(), $timeoutStep = 1)) {
+ PHPUnit_Framework_Assert::fail("The color selector in Theming app has not been loaded after $timeout seconds");
+ }
+ }
+
+ /**
+ * @Then I see that the header color is :color
+ */
+ public function iSeeThatTheHeaderColorIs($color) {
+ $headerColor = $this->actor->getSession()->evaluateScript("return $('#header').css('background-color');");
+
+ if ($headerColor[0] === '#') {
+ $headerColor = substr($headerColor, 1);
+ } else if (preg_match("/rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\)/", $headerColor, $matches)) {
+ // Convert from hex string to RGB array
+ $color = sscanf($color, "%02X%02X%02X");
+
+ // Convert from "rgb(R, G, B)" string to RGB array
+ $headerColor = array_splice($matches, 1);
+ } else {
+ PHPUnit_Framework_Assert::fail("The acceptance test does not know how to handle the color string returned by the browser: $headerColor");
+ }
+
+ PHPUnit_Framework_Assert::assertEquals($color, $headerColor);
+ }
+
+ /**
+ * @Then I see that the parameters in the Theming app are eventually saved
+ */
+ public function iSeeThatTheParametersInTheThemingAppAreEventuallySaved() {
+ PHPUnit_Framework_Assert::assertTrue($this->actor->find(self::statusMessage(), 10)->isVisible());
+
+ $actor = $this->actor;
+
+ $savedStatusMessageShownCallback = function() use($actor) {
+ if ($actor->find(self::statusMessage())->getText() !== "Saved") {
+ return false;
+ }
+
+ return true;
+ };
+
+ if (!Utils::waitFor($savedStatusMessageShownCallback, $timeout = 10 * $this->actor->getFindTimeoutMultiplier(), $timeoutStep = 1)) {
+ PHPUnit_Framework_Assert::fail("The 'Saved' status messages in Theming app has not been shown after $timeout seconds");
+ }
+ }
+
+}
diff --git a/tests/acceptance/features/core/Actor.php b/tests/acceptance/features/core/Actor.php
index a87ccfb7737..bf2f5a7367d 100644
--- a/tests/acceptance/features/core/Actor.php
+++ b/tests/acceptance/features/core/Actor.php
@@ -105,6 +105,15 @@ class Actor {
}
/**
+ * Returns the multiplier for find timeouts.
+ *
+ * @return float the multiplier to apply to find timeouts.
+ */
+ public function getFindTimeoutMultiplier() {
+ return $this->findTimeoutMultiplier;
+ }
+
+ /**
* Sets the multiplier for find timeouts.
*
* @param float $findTimeoutMultiplier the multiplier to apply to find