summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/files/ajax/newfile.php28
-rw-r--r--apps/files/js/file-upload.js7
-rw-r--r--apps/files/l10n/ak.php7
-rw-r--r--apps/files/l10n/az.php7
-rw-r--r--apps/files/l10n/be.php3
-rw-r--r--apps/files/l10n/cs_CZ.php2
-rw-r--r--apps/files/l10n/da.php21
-rw-r--r--apps/files/l10n/de.php2
-rw-r--r--apps/files/l10n/de_DE.php2
-rw-r--r--apps/files/l10n/el.php26
-rw-r--r--apps/files/l10n/en_GB.php2
-rw-r--r--apps/files/l10n/es.php2
-rw-r--r--apps/files/l10n/es_CL.php9
-rw-r--r--apps/files/l10n/es_MX.php94
-rw-r--r--apps/files/l10n/et_EE.php2
-rw-r--r--apps/files/l10n/eu.php17
-rw-r--r--apps/files/l10n/fi_FI.php2
-rw-r--r--apps/files/l10n/fr.php2
-rw-r--r--apps/files/l10n/gl.php2
-rw-r--r--apps/files/l10n/hu_HU.php4
-rw-r--r--apps/files/l10n/id.php35
-rw-r--r--apps/files/l10n/it.php2
-rw-r--r--apps/files/l10n/ja_JP.php3
-rw-r--r--apps/files/l10n/ko.php57
-rw-r--r--apps/files/l10n/nl.php2
-rw-r--r--apps/files/l10n/pl.php6
-rw-r--r--apps/files/l10n/pt_BR.php2
-rw-r--r--apps/files/l10n/ru.php2
-rw-r--r--apps/files/l10n/ru_RU.php1
-rw-r--r--apps/files/l10n/sk.php6
-rw-r--r--apps/files/l10n/sl.php2
-rw-r--r--apps/files/l10n/tr.php12
-rw-r--r--apps/files/l10n/ur.php7
-rw-r--r--apps/files/templates/part.breadcrumb.php12
-rw-r--r--apps/files_encryption/hooks/hooks.php63
-rw-r--r--apps/files_encryption/l10n/da.php8
-rw-r--r--apps/files_encryption/l10n/el.php10
-rw-r--r--apps/files_encryption/l10n/es_MX.php44
-rw-r--r--apps/files_encryption/l10n/hu_HU.php36
-rw-r--r--apps/files_encryption/l10n/ko.php42
-rw-r--r--apps/files_encryption/l10n/pl.php1
-rwxr-xr-xapps/files_encryption/lib/helper.php27
-rw-r--r--apps/files_encryption/lib/proxy.php21
-rw-r--r--apps/files_encryption/lib/stream.php38
-rw-r--r--apps/files_encryption/lib/util.php140
-rw-r--r--apps/files_encryption/tests/helper.php37
-rw-r--r--apps/files_encryption/tests/proxy.php69
-rwxr-xr-xapps/files_encryption/tests/share.php27
-rw-r--r--apps/files_encryption/tests/stream.php39
-rwxr-xr-xapps/files_encryption/tests/util.php41
-rw-r--r--apps/files_external/3rdparty/smb4php/smb.php6
-rw-r--r--apps/files_external/l10n/es_MX.php28
-rw-r--r--apps/files_external/l10n/sk.php5
-rwxr-xr-xapps/files_external/lib/config.php2
-rw-r--r--apps/files_sharing/ajax/publicpreview.php4
-rw-r--r--apps/files_sharing/css/public.css2
-rw-r--r--apps/files_sharing/l10n/da.php4
-rw-r--r--apps/files_sharing/l10n/el.php10
-rw-r--r--apps/files_sharing/l10n/es_CL.php6
-rw-r--r--apps/files_sharing/l10n/es_MX.php20
-rw-r--r--apps/files_sharing/l10n/ko.php16
-rw-r--r--apps/files_sharing/l10n/sk.php5
-rw-r--r--apps/files_sharing/lib/permissions.php15
-rw-r--r--apps/files_sharing/tests/base.php4
-rw-r--r--apps/files_sharing/tests/permissions.php110
-rw-r--r--apps/files_trashbin/js/trash.js8
-rw-r--r--apps/files_trashbin/l10n/be.php3
-rw-r--r--apps/files_trashbin/l10n/el.php4
-rw-r--r--apps/files_trashbin/l10n/es_MX.php12
-rw-r--r--apps/files_trashbin/l10n/ko.php8
-rw-r--r--apps/files_trashbin/l10n/ru.php1
-rw-r--r--apps/files_trashbin/l10n/sk.php3
-rw-r--r--apps/files_trashbin/templates/part.breadcrumb.php8
-rw-r--r--apps/files_versions/l10n/el.php2
-rw-r--r--apps/files_versions/l10n/es_MX.php10
-rw-r--r--apps/files_versions/l10n/id.php3
-rw-r--r--apps/files_versions/l10n/ko.php6
-rw-r--r--apps/user_ldap/l10n/ak.php6
-rw-r--r--apps/user_ldap/l10n/az.php6
-rw-r--r--apps/user_ldap/l10n/be.php1
-rw-r--r--apps/user_ldap/l10n/el.php44
-rw-r--r--apps/user_ldap/l10n/es_CL.php7
-rw-r--r--apps/user_ldap/l10n/es_MX.php108
-rw-r--r--apps/user_ldap/l10n/hu_HU.php3
-rw-r--r--apps/user_ldap/l10n/ia.php1
-rw-r--r--apps/user_ldap/l10n/id.php1
-rw-r--r--apps/user_ldap/l10n/ko.php83
-rw-r--r--apps/user_ldap/l10n/nb_NO.php1
-rw-r--r--apps/user_ldap/l10n/sk.php3
-rw-r--r--apps/user_ldap/l10n/sk_SK.php3
-rw-r--r--apps/user_ldap/l10n/ur.php6
-rw-r--r--apps/user_ldap/lib/configuration.php11
-rw-r--r--apps/user_ldap/templates/part.wizard-server.php4
-rw-r--r--apps/user_webdavauth/l10n/el.php2
-rw-r--r--apps/user_webdavauth/l10n/es_MX.php7
-rw-r--r--apps/user_webdavauth/l10n/sl.php2
96 files changed, 1371 insertions, 266 deletions
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index c327d2b9f94..ec5b716fb2a 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -53,13 +53,13 @@ $result = array(
);
if(trim($filename) === '') {
- $result['data'] = array('message' => $l10n->t('File name cannot be empty.'));
+ $result['data'] = array('message' => (string)$l10n->t('File name cannot be empty.'));
OCP\JSON::error($result);
exit();
}
if(strpos($filename, '/') !== false) {
- $result['data'] = array('message' => $l10n->t('File name must not contain "/". Please choose a different name.'));
+ $result['data'] = array('message' => (string)$l10n->t('File name must not contain "/". Please choose a different name.'));
OCP\JSON::error($result);
exit();
}
@@ -68,7 +68,7 @@ if(strpos($filename, '/') !== false) {
$target = $dir.'/'.$filename;
if (\OC\Files\Filesystem::file_exists($target)) {
- $result['data'] = array('message' => $l10n->t(
+ $result['data'] = array('message' => (string)$l10n->t(
'The name %s is already used in the folder %s. Please choose a different name.',
array($filename, $dir))
);
@@ -78,20 +78,32 @@ if (\OC\Files\Filesystem::file_exists($target)) {
if($source) {
if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') {
- OCP\JSON::error(array('data' => array( 'message' => $l10n->t('Not a valid source') )));
+ OCP\JSON::error(array('data' => array('message' => $l10n->t('Not a valid source'))));
+ exit();
+ }
+
+ if (!ini_get('allow_url_fopen')) {
+ $eventSource->send('error', array('message' => $l10n->t('Server is not allowed to open URLs, please check the server configuration')));
+ $eventSource->close();
exit();
}
$ctx = stream_context_create(null, array('notification' =>'progress'));
- $sourceStream=fopen($source, 'rb', false, $ctx);
- $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
+ $sourceStream=@fopen($source, 'rb', false, $ctx);
+ $result = 0;
+ if (is_resource($sourceStream)) {
+ $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
+ }
if($result) {
$meta = \OC\Files\Filesystem::getFileInfo($target);
$mime=$meta['mimetype'];
$id = $meta['fileid'];
- $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id, 'etag' => $meta['etag']));
+ $eventSource->send('success', array('mime' => $mime, 'size' => \OC\Files\Filesystem::filesize($target), 'id' => $id, 'etag' => $meta['etag']));
} else {
- $eventSource->send('error', $l10n->t('Error while downloading %s to %s', array($source, $target)));
+ $eventSource->send('error', array('message' => $l10n->t('Error while downloading %s to %s', array($source, $target))));
+ }
+ if (is_resource($sourceStream)) {
+ fclose($sourceStream);
}
$eventSource->close();
exit();
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index e9663353f74..196817432d5 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -658,7 +658,12 @@ $(document).ready(function() {
});
eventSource.listen('error',function(error) {
$('#uploadprogressbar').fadeOut();
- alert(error);
+ var message = (error && error.message) || t('core', 'Error fetching URL');
+ OC.Notification.show(message);
+ //hide notification after 10 sec
+ setTimeout(function() {
+ OC.Notification.hide();
+ }, 10000);
});
break;
}
diff --git a/apps/files/l10n/ak.php b/apps/files/l10n/ak.php
new file mode 100644
index 00000000000..f229792722d
--- /dev/null
+++ b/apps/files/l10n/ak.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=n > 1;";
diff --git a/apps/files/l10n/az.php b/apps/files/l10n/az.php
new file mode 100644
index 00000000000..70ab6572ba4
--- /dev/null
+++ b/apps/files/l10n/az.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/be.php b/apps/files/l10n/be.php
index 17262d2184d..830400b93fb 100644
--- a/apps/files/l10n/be.php
+++ b/apps/files/l10n/be.php
@@ -2,6 +2,7 @@
$TRANSLATIONS = array(
"_%n folder_::_%n folders_" => array("","","",""),
"_%n file_::_%n files_" => array("","","",""),
-"_Uploading %n file_::_Uploading %n files_" => array("","","","")
+"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
+"Error" => "Памылка"
);
$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 75698f569e5..44e0fdae1f1 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Název souboru nesmí obsahovat \"/\". Vyberte prosím jiné jméno.",
"The name %s is already used in the folder %s. Please choose a different name." => "Název %s ve složce %s již existuje. Vyberte prosím jiné jméno.",
"Not a valid source" => "Neplatný zdroj",
+"Server is not allowed to open URLs, please check the server configuration" => "Server není oprávněn otevírat adresy URL. Ověřte, prosím, konfiguraci serveru.",
"Error while downloading %s to %s" => "Chyba při stahování %s do %s",
"Error when creating the file" => "Chyba při vytváření souboru",
"Folder name cannot be empty." => "Název složky nemůže být prázdný.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} již existuje",
"Could not create file" => "Nepodařilo se vytvořit soubor",
"Could not create folder" => "Nepodařilo se vytvořit složku",
+"Error fetching URL" => "Chyba při načítání URL",
"Share" => "Sdílet",
"Delete permanently" => "Trvale odstranit",
"Rename" => "Přejmenovat",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 93c9cb75925..9b7722444a8 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -3,6 +3,15 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Kunne ikke flytte %s - der findes allerede en fil med dette navn",
"Could not move %s" => "Kunne ikke flytte %s",
"File name cannot be empty." => "Filnavnet kan ikke stå tomt.",
+"File name must not contain \"/\". Please choose a different name." => "Filnavnet må ikke indeholde \"/\". Vælg venligst et andet navn.",
+"The name %s is already used in the folder %s. Please choose a different name." => "Navnet %s er allerede i brug i mappen %s. Vælg venligst et andet navn.",
+"Not a valid source" => "Ikke en gyldig kilde",
+"Server is not allowed to open URLs, please check the server configuration" => "Server har ikke tilladelse til at åbne URL'er. Kontroller venligst serverens indstillinger",
+"Error while downloading %s to %s" => "Fejl ved hentning af %s til %s",
+"Error when creating the file" => "Fejl ved oprettelse af fil",
+"Folder name cannot be empty." => "Mappenavnet kan ikke være tomt.",
+"Folder name must not contain \"/\". Please choose a different name." => "Mappenavnet må ikke indeholde \"/\". Vælg venligst et andet navn.",
+"Error when creating the folder" => "Fejl ved oprettelse af mappen",
"Unable to set upload directory." => "Ude af stand til at vælge upload mappe.",
"Invalid Token" => "Ugyldig Token ",
"No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.",
@@ -23,13 +32,20 @@ $TRANSLATIONS = array(
"Upload cancelled." => "Upload afbrudt.",
"Could not get result from server." => "Kunne ikke hente resultat fra server.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
+"URL cannot be empty" => "URL kan ikke være tom",
+"In the home folder 'Shared' is a reserved filename" => "Navnet 'Shared' er reserveret i hjemmemappen.",
"{new_name} already exists" => "{new_name} eksisterer allerede",
+"Could not create file" => "Kunne ikke oprette fil",
+"Could not create folder" => "Kunne ikke oprette mappe",
+"Error fetching URL" => "Fejl ved URL",
"Share" => "Del",
"Delete permanently" => "Slet permanent",
"Rename" => "Omdøb",
"Pending" => "Afventer",
+"Could not rename file" => "Kunne ikke omdøbe filen",
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
"undo" => "fortryd",
+"Error deleting file." => "Fejl ved sletnign af fil.",
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
"_%n file_::_%n files_" => array("%n fil","%n filer"),
"{dirs} and {files}" => "{dirs} og {files}",
@@ -38,6 +54,8 @@ $TRANSLATIONS = array(
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.",
"Your storage is full, files can not be updated or synced anymore!" => "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!",
"Your storage is almost full ({usedSpacePercent}%)" => "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
"Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.",
"Error moving file" => "Fejl ved flytning af fil",
@@ -45,6 +63,7 @@ $TRANSLATIONS = array(
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Ugyldig mappenavn. 'Shared' er reserveret.",
"%s could not be renamed" => "%s kunne ikke omdøbes",
"Upload" => "Upload",
"File handling" => "Filhåndtering",
@@ -56,12 +75,14 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "Maksimal størrelse på ZIP filer",
"Save" => "Gem",
"New" => "Ny",
+"New text file" => "Ny tekstfil",
"Text file" => "Tekstfil",
"New folder" => "Ny Mappe",
"Folder" => "Mappe",
"From link" => "Fra link",
"Deleted files" => "Slettede filer",
"Cancel upload" => "Fortryd upload",
+"You don’t have permission to upload or create files here" => "Du har ikke tilladelse til at uploade eller oprette filer her",
"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
"Download" => "Download",
"Delete" => "Slet",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 4617eaef6fd..b209fee88ae 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Der Dateiname darf kein \"/\" enthalten. Bitte wähle einen anderen Namen.",
"The name %s is already used in the folder %s. Please choose a different name." => "Der Name %s wird bereits im Ordner %s benutzt. Bitte wähle einen anderen Namen.",
"Not a valid source" => "Keine gültige Quelle",
+"Server is not allowed to open URLs, please check the server configuration" => "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen",
"Error while downloading %s to %s" => "Fehler beim Herunterladen von %s nach %s",
"Error when creating the file" => "Fehler beim Erstellen der Datei",
"Folder name cannot be empty." => "Der Ordner-Name darf nicht leer sein.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} existiert bereits",
"Could not create file" => "Die Datei konnte nicht erstellt werden",
"Could not create folder" => "Der Ordner konnte nicht erstellt werden",
+"Error fetching URL" => "Fehler beim Abrufen der URL",
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
"Rename" => "Umbenennen",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 2502b540cd8..76cdce00e4c 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Der Dateiname darf kein \"/\" enthalten. Bitte wählen Sie einen anderen Namen.",
"The name %s is already used in the folder %s. Please choose a different name." => "Der Name %s wird bereits im Ordner %s benutzt. Bitte wählen Sie einen anderen Namen.",
"Not a valid source" => "Keine gültige Quelle",
+"Server is not allowed to open URLs, please check the server configuration" => "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen",
"Error while downloading %s to %s" => "Fehler beim Herunterladen von %s nach %s",
"Error when creating the file" => "Fehler beim Erstellen der Datei",
"Folder name cannot be empty." => "Der Ordner-Name darf nicht leer sein.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} existiert bereits",
"Could not create file" => "Die Datei konnte nicht erstellt werden",
"Could not create folder" => "Der Ordner konnte nicht erstellt werden",
+"Error fetching URL" => "Fehler beim Abrufen der URL",
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
"Rename" => "Umbenennen",
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index cab7b2c6e31..9efe1af7dd3 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -3,6 +3,15 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα",
"Could not move %s" => "Αδυναμία μετακίνησης του %s",
"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
+"File name must not contain \"/\". Please choose a different name." => "Το όνομα αρχείου δεν μπορεί να περιέχει \"/\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα. ",
+"The name %s is already used in the folder %s. Please choose a different name." => "Το όνομα %s χρησιμοποιείτε ήδη στον φάκελο %s. Παρακαλώ επιλέξτε ένα άλλο όνομα.",
+"Not a valid source" => "Μη έγκυρη πηγή",
+"Server is not allowed to open URLs, please check the server configuration" => "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή",
+"Error while downloading %s to %s" => "Σφάλμα κατά τη λήψη του %s στο %s",
+"Error when creating the file" => "Σφάλμα κατά τη δημιουργία του αρχείου",
+"Folder name cannot be empty." => "Το όνομα φακέλου δεν μπορεί να είναι κενό.",
+"Folder name must not contain \"/\". Please choose a different name." => "Το όνομα φακέλου δεν μπορεί να περιέχει \"/\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα. ",
+"Error when creating the folder" => "Σφάλμα δημιουργίας φακέλου",
"Unable to set upload directory." => "Αδυναμία ορισμού καταλόγου αποστολής.",
"Invalid Token" => "Μη έγκυρο Token",
"No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα",
@@ -14,25 +23,39 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
"Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος",
+"Upload failed. Could not get file info." => "Η φόρτωση απέτυχε. Αδυναμία λήψης πληροφοριών αρχείων.",
+"Upload failed. Could not find uploaded file" => "Η φόρτωση απέτυχε. Αδυναμία εύρεσης αρχείου προς φόρτωση.",
"Invalid directory." => "Μη έγκυρος φάκελος.",
"Files" => "Αρχεία",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes",
"Not enough space available" => "Δεν υπάρχει αρκετός διαθέσιμος χώρος",
"Upload cancelled." => "Η αποστολή ακυρώθηκε.",
+"Could not get result from server." => "Αδυναμία λήψης αποτελέσματος από το διακομιστή.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
+"URL cannot be empty" => "Η URL δεν πρέπει να είναι κενή",
+"In the home folder 'Shared' is a reserved filename" => "Στον αρχικό φάκελο το όνομα 'Shared' διατηρείται από το σύστημα",
"{new_name} already exists" => "{new_name} υπάρχει ήδη",
+"Could not create file" => "Αδυναμία δημιουργίας αρχείου",
+"Could not create folder" => "Αδυναμία δημιουργίας φακέλου",
+"Error fetching URL" => "Σφάλμα φόρτωσης URL",
"Share" => "Διαμοιρασμός",
"Delete permanently" => "Μόνιμη διαγραφή",
"Rename" => "Μετονομασία",
"Pending" => "Εκκρεμεί",
+"Could not rename file" => "Αδυναμία μετονομασίας αρχείου",
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
"undo" => "αναίρεση",
+"Error deleting file." => "Σφάλμα διαγραφής αρχείου.",
"_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"),
"_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"),
+"{dirs} and {files}" => "{Κατάλογοι αρχείων} και {αρχεία}",
"_Uploading %n file_::_Uploading %n files_" => array("Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"),
"'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
"Your storage is full, files can not be updated or synced anymore!" => "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
"Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.",
"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
@@ -40,6 +63,7 @@ $TRANSLATIONS = array(
"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "Τροποποιήθηκε",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Άκυρο όνομα φακέλου. Η χρήση του 'Shared' διατηρείται από το σύστημα.",
"%s could not be renamed" => "Αδυναμία μετονομασίας του %s",
"Upload" => "Μεταφόρτωση",
"File handling" => "Διαχείριση αρχείων",
@@ -51,12 +75,14 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "Μέγιστο μέγεθος για αρχεία ZIP",
"Save" => "Αποθήκευση",
"New" => "Νέο",
+"New text file" => "Νέο αρχείο κειμένου",
"Text file" => "Αρχείο κειμένου",
"New folder" => "Νέος κατάλογος",
"Folder" => "Φάκελος",
"From link" => "Από σύνδεσμο",
"Deleted files" => "Διαγραμμένα αρχεία",
"Cancel upload" => "Ακύρωση αποστολής",
+"You don’t have permission to upload or create files here" => "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ",
"Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!",
"Download" => "Λήψη",
"Delete" => "Διαγραφή",
diff --git a/apps/files/l10n/en_GB.php b/apps/files/l10n/en_GB.php
index e45c4bf4ede..ac93aa68abb 100644
--- a/apps/files/l10n/en_GB.php
+++ b/apps/files/l10n/en_GB.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "File name must not contain \"/\". Please choose a different name.",
"The name %s is already used in the folder %s. Please choose a different name." => "The name %s is already used in the folder %s. Please choose a different name.",
"Not a valid source" => "Not a valid source",
+"Server is not allowed to open URLs, please check the server configuration" => "Server is not allowed to open URLs, please check the server configuration",
"Error while downloading %s to %s" => "Error whilst downloading %s to %s",
"Error when creating the file" => "Error when creating the file",
"Folder name cannot be empty." => "Folder name cannot be empty.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} already exists",
"Could not create file" => "Could not create file",
"Could not create folder" => "Could not create folder",
+"Error fetching URL" => "Error fetching URL",
"Share" => "Share",
"Delete permanently" => "Delete permanently",
"Rename" => "Rename",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 84e11df6818..bfbb80e8962 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "El nombre del archivo, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.",
"The name %s is already used in the folder %s. Please choose a different name." => "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.",
"Not a valid source" => "No es un origen válido",
+"Server is not allowed to open URLs, please check the server configuration" => "El servidor no puede acceder URLs; revise la configuración del servidor.",
"Error while downloading %s to %s" => "Error mientras se descargaba %s a %s",
"Error when creating the file" => "Error al crear el archivo",
"Folder name cannot be empty." => "El nombre de la carpeta no puede estar vacío.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} ya existe",
"Could not create file" => "No se pudo crear el archivo",
"Could not create folder" => "No se pudo crear la carpeta",
+"Error fetching URL" => "Error al descargar URL.",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renombrar",
diff --git a/apps/files/l10n/es_CL.php b/apps/files/l10n/es_CL.php
new file mode 100644
index 00000000000..6f97758878f
--- /dev/null
+++ b/apps/files/l10n/es_CL.php
@@ -0,0 +1,9 @@
+<?php
+$TRANSLATIONS = array(
+"Files" => "Archivos",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
+"Upload" => "Subir"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/es_MX.php b/apps/files/l10n/es_MX.php
index 0157af093e9..0b7571defc7 100644
--- a/apps/files/l10n/es_MX.php
+++ b/apps/files/l10n/es_MX.php
@@ -1,7 +1,95 @@
<?php
$TRANSLATIONS = array(
-"_%n folder_::_%n folders_" => array("",""),
-"_%n file_::_%n files_" => array("",""),
-"_Uploading %n file_::_Uploading %n files_" => array("","")
+"Could not move %s - File with this name already exists" => "No se pudo mover %s - Ya existe un archivo con ese nombre.",
+"Could not move %s" => "No se pudo mover %s",
+"File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
+"File name must not contain \"/\". Please choose a different name." => "El nombre del archivo, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.",
+"The name %s is already used in the folder %s. Please choose a different name." => "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.",
+"Not a valid source" => "No es un origen válido",
+"Server is not allowed to open URLs, please check the server configuration" => "El servidor no puede acceder URLs; revise la configuración del servidor.",
+"Error while downloading %s to %s" => "Error mientras se descargaba %s a %s",
+"Error when creating the file" => "Error al crear el archivo",
+"Folder name cannot be empty." => "El nombre de la carpeta no puede estar vacío.",
+"Folder name must not contain \"/\". Please choose a different name." => "El nombre de la carpeta, NO puede contener el simbolo\"/\", por favor elija un nombre diferente.",
+"Error when creating the folder" => "Error al crear la carpeta.",
+"Unable to set upload directory." => "Incapaz de crear directorio de subida.",
+"Invalid Token" => "Token Inválido",
+"No file was uploaded. Unknown error" => "No se subió ningún archivo. Error desconocido",
+"There is no error, the file uploaded with success" => "No hubo ningún problema, el archivo se subió con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo subido sobrepasa la directiva 'upload_max_filesize' en php.ini:",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo subido sobrepasa la directiva 'MAX_FILE_SIZE' especificada en el formulario HTML",
+"The uploaded file was only partially uploaded" => "El archivo subido fue sólo subido parcialmente",
+"No file was uploaded" => "No se subió ningún archivo",
+"Missing a temporary folder" => "Falta la carpeta temporal",
+"Failed to write to disk" => "Falló al escribir al disco",
+"Not enough storage available" => "No hay suficiente espacio disponible",
+"Upload failed. Could not get file info." => "Actualización fallida. No se pudo obtener información del archivo.",
+"Upload failed. Could not find uploaded file" => "Actualización fallida. No se pudo encontrar el archivo subido",
+"Invalid directory." => "Directorio inválido.",
+"Files" => "Archivos",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
+"Not enough space available" => "No hay suficiente espacio disponible",
+"Upload cancelled." => "Subida cancelada.",
+"Could not get result from server." => "No se pudo obtener respuesta del servidor.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.",
+"URL cannot be empty" => "La dirección URL no puede estar vacía",
+"In the home folder 'Shared' is a reserved filename" => "En la carpeta de inicio, 'Shared' es un nombre reservado",
+"{new_name} already exists" => "{new_name} ya existe",
+"Could not create file" => "No se pudo crear el archivo",
+"Could not create folder" => "No se pudo crear la carpeta",
+"Error fetching URL" => "Error al descargar URL.",
+"Share" => "Compartir",
+"Delete permanently" => "Eliminar permanentemente",
+"Rename" => "Renombrar",
+"Pending" => "Pendiente",
+"Could not rename file" => "No se pudo renombrar el archivo",
+"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
+"undo" => "deshacer",
+"Error deleting file." => "Error borrando el archivo.",
+"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
+"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
+"{dirs} and {files}" => "{dirs} y {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Subiendo %n archivo","Subiendo %n archivos"),
+"'.' is an invalid file name." => "'.' no es un nombre de archivo válido.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ",
+"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
+"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.",
+"Error moving file" => "Error moviendo archivo",
+"Error" => "Error",
+"Name" => "Nombre",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Nombre de carpeta inválido. El uso de \"Shared\" esta reservado.",
+"%s could not be renamed" => "%s no pudo ser renombrado",
+"Upload" => "Subir",
+"File handling" => "Administración de archivos",
+"Maximum upload size" => "Tamaño máximo de subida",
+"max. possible: " => "máx. posible:",
+"Needed for multi-file and folder downloads." => "Necesario para multi-archivo y descarga de carpetas",
+"Enable ZIP-download" => "Habilitar descarga en ZIP",
+"0 is unlimited" => "0 significa ilimitado",
+"Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada",
+"Save" => "Guardar",
+"New" => "Nuevo",
+"New text file" => "Nuevo archivo de texto",
+"Text file" => "Archivo de texto",
+"New folder" => "Nueva carpeta",
+"Folder" => "Carpeta",
+"From link" => "Desde enlace",
+"Deleted files" => "Archivos eliminados",
+"Cancel upload" => "Cancelar subida",
+"You don’t have permission to upload or create files here" => "No tienes permisos para subir o crear archivos aquí.",
+"Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!",
+"Download" => "Descargar",
+"Delete" => "Eliminar",
+"Upload too large" => "Subida demasido grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
+"Files are being scanned, please wait." => "Los archivos están siendo escaneados, por favor espere.",
+"Current scanning" => "Escaneo actual",
+"Upgrading filesystem cache..." => "Actualizando caché del sistema de archivos..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 98f74e1f001..fd031527738 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Faili nimi ei tohi sisaldada \"/\". Palun vali mõni teine nimi.",
"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.",
"Not a valid source" => "Pole korrektne lähteallikas",
+"Server is not allowed to open URLs, please check the server configuration" => "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust",
"Error while downloading %s to %s" => "Viga %s allalaadimisel %s",
"Error when creating the file" => "Viga faili loomisel",
"Folder name cannot be empty." => "Kataloogi nimi ei saa olla tühi.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} on juba olemas",
"Could not create file" => "Ei suuda luua faili",
"Could not create folder" => "Ei suuda luua kataloogi",
+"Error fetching URL" => "Viga URL-i haaramisel",
"Share" => "Jaga",
"Delete permanently" => "Kustuta jäädavalt",
"Rename" => "Nimeta ümber",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 6726775dd96..5df480c2bc3 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -3,6 +3,14 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da",
"Could not move %s" => "Ezin dira fitxategiak mugitu %s",
"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.",
+"File name must not contain \"/\". Please choose a different name." => "Fitxategi izenak ezin du \"/\" izan. Mesedez hautatu beste izen bat.",
+"The name %s is already used in the folder %s. Please choose a different name." => "%s izena dagoeneko erabilita dago %s karpetan. Mesdez hautatu izen ezberdina.",
+"Not a valid source" => "Ez da jatorri baliogarria",
+"Error while downloading %s to %s" => "Errorea %s %sra deskargatzerakoan",
+"Error when creating the file" => "Errorea fitxategia sortzerakoan",
+"Folder name cannot be empty." => "Karpeta izena ezin da hutsa izan.",
+"Folder name must not contain \"/\". Please choose a different name." => "Karpeta izenak ezin du \"/\" izan. Mesedez hautatu beste izen bat.",
+"Error when creating the folder" => "Errorea karpeta sortzerakoan",
"Unable to set upload directory." => "Ezin da igoera direktorioa ezarri.",
"Invalid Token" => "Lekuko baliogabea",
"No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
@@ -23,13 +31,19 @@ $TRANSLATIONS = array(
"Upload cancelled." => "Igoera ezeztatuta",
"Could not get result from server." => "Ezin da zerbitzaritik emaitzik lortu",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
+"URL cannot be empty" => "URLa ezin da hutsik egon",
+"In the home folder 'Shared' is a reserved filename" => "Etxeko (home) karpetan 'Shared' erreserbatutako fitxategi izena da",
"{new_name} already exists" => "{new_name} dagoeneko existitzen da",
+"Could not create file" => "Ezin izan da fitxategia sortu",
+"Could not create folder" => "Ezin izan da karpeta sortu",
"Share" => "Elkarbanatu",
"Delete permanently" => "Ezabatu betirako",
"Rename" => "Berrizendatu",
"Pending" => "Zain",
+"Could not rename file" => "Ezin izan da fitxategia berrizendatu",
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
"undo" => "desegin",
+"Error deleting file." => "Errorea fitxategia ezabatzerakoan.",
"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
"{dirs} and {files}" => "{dirs} eta {files}",
@@ -47,6 +61,7 @@ $TRANSLATIONS = array(
"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Baliogabeako karpeta izena. 'Shared' izena erreserbatuta dago.",
"%s could not be renamed" => "%s ezin da berrizendatu",
"Upload" => "Igo",
"File handling" => "Fitxategien kudeaketa",
@@ -58,12 +73,14 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "ZIP fitxategien gehienezko tamaina",
"Save" => "Gorde",
"New" => "Berria",
+"New text file" => "Testu fitxategi berria",
"Text file" => "Testu fitxategia",
"New folder" => "Karpeta berria",
"Folder" => "Karpeta",
"From link" => "Estekatik",
"Deleted files" => "Ezabatutako fitxategiak",
"Cancel upload" => "Ezeztatu igoera",
+"You don’t have permission to upload or create files here" => "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik",
"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
"Download" => "Deskargatu",
"Delete" => "Ezabatu",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 2c7327b0f39..d1241b77da0 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Tiedoston nimessä ei saa olla merkkiä \"/\". Valitse toinen nimi.",
"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on jo käytössä kansiossa %s. Valitse toinen nimi.",
"Not a valid source" => "Virheellinen lähde",
+"Server is not allowed to open URLs, please check the server configuration" => "Palvelimen ei ole lupa avata verkko-osoitteita. Tarkista palvelimen asetukset",
"Error while downloading %s to %s" => "Virhe ladatessa kohdetta %s sijaintiin %s",
"Error when creating the file" => "Virhe tiedostoa luotaessa",
"Folder name cannot be empty." => "Kansion nimi ei voi olla tyhjä.",
@@ -32,6 +33,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} on jo olemassa",
"Could not create file" => "Tiedoston luominen epäonnistui",
"Could not create folder" => "Kansion luominen epäonnistui",
+"Error fetching URL" => "Virhe noutaessa verkko-osoitetta",
"Share" => "Jaa",
"Delete permanently" => "Poista pysyvästi",
"Rename" => "Nimeä uudelleen",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index c493e2d5537..73b89434778 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Le nom de fichier ne doit pas contenir \"/\". Merci de choisir un nom différent.",
"The name %s is already used in the folder %s. Please choose a different name." => "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.",
"Not a valid source" => "La source n'est pas valide",
+"Server is not allowed to open URLs, please check the server configuration" => "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur",
"Error while downloading %s to %s" => "Erreur pendant le téléchargement de %s à %s",
"Error when creating the file" => "Erreur pendant la création du fichier",
"Folder name cannot be empty." => "Le nom de dossier ne peux pas être vide.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} existe déjà",
"Could not create file" => "Impossible de créer le fichier",
"Could not create folder" => "Impossible de créer le dossier",
+"Error fetching URL" => "Erreur d'accès à l'URL",
"Share" => "Partager",
"Delete permanently" => "Supprimer de façon définitive",
"Rename" => "Renommer",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index c2d8d9b7d1e..1d22691d93c 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "O nome do ficheiro non pode conter «/». Escolla outro nome.",
"The name %s is already used in the folder %s. Please choose a different name." => "Xa existe o nome %s no cartafol %s. Escolla outro nome.",
"Not a valid source" => "Esta orixe non é correcta",
+"Server is not allowed to open URLs, please check the server configuration" => "O servidor non ten permisos para abrir os enderezos URL, comprobe a configuración do servidor",
"Error while downloading %s to %s" => "Produciuse un erro ao descargar %s en %s",
"Error when creating the file" => "Produciuse un erro ao crear o ficheiro",
"Folder name cannot be empty." => "O nome de cartafol non pode estar baleiro.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "Xa existe un {new_name}",
"Could not create file" => "Non foi posíbel crear o ficheiro",
"Could not create folder" => "Non foi posíbel crear o cartafol",
+"Error fetching URL" => "Produciuse un erro ao obter o URL",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Rename" => "Renomear",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index f2150f05994..22c3926ed1c 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Az állomány neve nem tartalmazhatja a \"/\" karaktert. Kérem válasszon másik nevet!",
"The name %s is already used in the folder %s. Please choose a different name." => "A %s név már létezik a %s mappában. Kérem válasszon másik nevet!",
"Not a valid source" => "A kiinduló állomány érvénytelen",
+"Server is not allowed to open URLs, please check the server configuration" => "A kiszolgálón nincs engedélyezve URL-ek megnyitása, kérem ellenőrizze a beállításokat",
"Error while downloading %s to %s" => "Hiba történt miközben %s-t letöltöttük %s-be",
"Error when creating the file" => "Hiba történt az állomány létrehozásakor",
"Folder name cannot be empty." => "A mappa neve nem maradhat kitöltetlenül",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} már létezik",
"Could not create file" => "Az állomány nem hozható létre",
"Could not create folder" => "A mappa nem hozható létre",
+"Error fetching URL" => "A megadott URL-ről nem sikerül adatokat kapni",
"Share" => "Megosztás",
"Delete permanently" => "Végleges törlés",
"Rename" => "Átnevezés",
@@ -43,6 +45,7 @@ $TRANSLATIONS = array(
"Could not rename file" => "Az állomány nem nevezhető át",
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
"undo" => "visszavonás",
+"Error deleting file." => "Hiba a file törlése közben.",
"_%n folder_::_%n folders_" => array("%n mappa","%n mappa"),
"_%n file_::_%n files_" => array("%n állomány","%n állomány"),
"{dirs} and {files}" => "{dirs} és {files}",
@@ -72,6 +75,7 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "ZIP-fájlok maximális kiindulási mérete",
"Save" => "Mentés",
"New" => "Új",
+"New text file" => "Új szöveges file",
"Text file" => "Szövegfájl",
"New folder" => "Új mappa",
"Folder" => "Mappa",
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 719b092f3f9..4e254ff6f60 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -3,6 +3,16 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Tidak dapat memindahkan %s - Berkas dengan nama ini sudah ada",
"Could not move %s" => "Tidak dapat memindahkan %s",
"File name cannot be empty." => "Nama berkas tidak boleh kosong.",
+"File name must not contain \"/\". Please choose a different name." => "Nama berkas tidak boleh mengandung \"/\". Silakan pilih nama yang berbeda.",
+"The name %s is already used in the folder %s. Please choose a different name." => "Nama %s sudah digunakan dalam folder %s. Silakan pilih nama yang berbeda.",
+"Not a valid source" => "Sumber tidak sah",
+"Error while downloading %s to %s" => "Galat saat mengunduh %s ke %s",
+"Error when creating the file" => "Galat saat membuat berkas",
+"Folder name cannot be empty." => "Nama folder tidak bolh kosong.",
+"Folder name must not contain \"/\". Please choose a different name." => "Nama folder tidak boleh mengandung \"/\". Silakan pilih nama yang berbeda.",
+"Error when creating the folder" => "Galat saat membuat folder",
+"Unable to set upload directory." => "Tidak dapat mengatur folder unggah",
+"Invalid Token" => "Token tidak sah",
"No file was uploaded. Unknown error" => "Tidak ada berkas yang diunggah. Galat tidak dikenal.",
"There is no error, the file uploaded with success" => "Tidak ada galat, berkas sukses diunggah",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Berkas yang diunggah melampaui direktif upload_max_filesize pada php.ini",
@@ -12,30 +22,47 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Folder sementara tidak ada",
"Failed to write to disk" => "Gagal menulis ke disk",
"Not enough storage available" => "Ruang penyimpanan tidak mencukupi",
+"Upload failed. Could not get file info." => "Unggah gagal. Tidak mendapatkan informasi berkas.",
+"Upload failed. Could not find uploaded file" => "Unggah gagal. Tidak menemukan berkas yang akan diunggah",
"Invalid directory." => "Direktori tidak valid.",
"Files" => "Berkas",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte",
"Not enough space available" => "Ruang penyimpanan tidak mencukupi",
"Upload cancelled." => "Pengunggahan dibatalkan.",
+"Could not get result from server." => "Tidak mendapatkan hasil dari server.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
+"URL cannot be empty" => "URL tidak boleh kosong",
+"In the home folder 'Shared' is a reserved filename" => "Pada folder home, 'Shared' adalah nama berkas yang sudah digunakan",
"{new_name} already exists" => "{new_name} sudah ada",
+"Could not create file" => "Tidak dapat membuat berkas",
+"Could not create folder" => "Tidak dapat membuat folder",
"Share" => "Bagikan",
"Delete permanently" => "Hapus secara permanen",
"Rename" => "Ubah nama",
"Pending" => "Menunggu",
+"Could not rename file" => "Tidak dapat mengubah nama berkas",
"replaced {new_name} with {old_name}" => "mengganti {new_name} dengan {old_name}",
"undo" => "urungkan",
-"_%n folder_::_%n folders_" => array(""),
-"_%n file_::_%n files_" => array(""),
-"_Uploading %n file_::_Uploading %n files_" => array(""),
+"Error deleting file." => "Galat saat menghapus berkas.",
+"_%n folder_::_%n folders_" => array("%n folder"),
+"_%n file_::_%n files_" => array("%n berkas"),
+"{dirs} and {files}" => "{dirs} dan {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Mengunggah %n berkas"),
"'.' is an invalid file name." => "'.' bukan nama berkas yang valid.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.",
"Your storage is full, files can not be updated or synced anymore!" => "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
"Your download is being prepared. This might take some time if the files are big." => "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar.",
+"Error moving file" => "Galat saat memindahkan berkas",
"Error" => "Galat",
"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
+"Invalid folder name. Usage of 'Shared' is reserved." => "Nama folder tidak sah. Menggunakan 'Shared' sudah digunakan.",
+"%s could not be renamed" => "%s tidak dapat diubah nama",
"Upload" => "Unggah",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran pengunggahan maksimum",
@@ -46,12 +73,14 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "Ukuran masukan maksimum untuk berkas ZIP",
"Save" => "Simpan",
"New" => "Baru",
+"New text file" => "Berkas teks baru",
"Text file" => "Berkas teks",
"New folder" => "Map baru",
"Folder" => "Folder",
"From link" => "Dari tautan",
"Deleted files" => "Berkas yang dihapus",
"Cancel upload" => "Batal pengunggahan",
+"You don’t have permission to upload or create files here" => "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini",
"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
"Download" => "Unduh",
"Delete" => "Hapus",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 335ae416567..2a10e9977f4 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Il nome del file non può contenere il carattere \"/\". Scegli un nome diverso.",
"The name %s is already used in the folder %s. Please choose a different name." => "Il nome %s è attualmente in uso nella cartella %s. Scegli un nome diverso.",
"Not a valid source" => "Non è una sorgente valida",
+"Server is not allowed to open URLs, please check the server configuration" => "Al server non è permesso aprire URL, controlla la configurazione del server",
"Error while downloading %s to %s" => "Errore durante lo scaricamento di %s su %s",
"Error when creating the file" => "Errore durante la creazione del file",
"Folder name cannot be empty." => "Il nome della cartella non può essere vuoto.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} esiste già",
"Could not create file" => "Impossibile creare il file",
"Could not create folder" => "Impossibile creare la cartella",
+"Error fetching URL" => "Errore durante il recupero dello URL",
"Share" => "Condividi",
"Delete permanently" => "Elimina definitivamente",
"Rename" => "Rinomina",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 93dd9ed12b0..8019b825d3c 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "ファイル名には \"/\" を含めることはできません。別の名前を選択してください。",
"The name %s is already used in the folder %s. Please choose a different name." => "%s はフォルダ %s ないですでに使われています。別の名前を選択してください。",
"Not a valid source" => "有効なソースではありません",
+"Server is not allowed to open URLs, please check the server configuration" => "サーバーは、URLを開くことは許されません。サーバーの設定をチェックしてください。",
"Error while downloading %s to %s" => "%s から %s へのダウンロードエラー",
"Error when creating the file" => "ファイルの生成エラー",
"Folder name cannot be empty." => "フォルダ名は空にできません",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} はすでに存在しています",
"Could not create file" => "ファイルを作成できませんでした",
"Could not create folder" => "フォルダを作成できませんでした",
+"Error fetching URL" => "URL取得エラー",
"Share" => "共有",
"Delete permanently" => "完全に削除する",
"Rename" => "名前の変更",
@@ -73,6 +75,7 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "ZIPファイルへの最大入力サイズ",
"Save" => "保存",
"New" => "新規作成",
+"New text file" => "新規のテキストファイル作成",
"Text file" => "テキストファイル",
"New folder" => "新しいフォルダ",
"Folder" => "フォルダ",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index fbb80b7bfa1..35a9f2fb85c 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -1,11 +1,20 @@
<?php
$TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함",
-"Could not move %s" => "%s 항목을 이딩시키지 못하였음",
+"Could not move %s - File with this name already exists" => "항목 %s을(를) 이동시킬 수 없음 - 같은 이름의 파일이 이미 존재함",
+"Could not move %s" => "항목 %s을(를) 이동시킬 수 없음",
"File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.",
-"Unable to set upload directory." => "업로드 디렉터리를 정할수 없습니다",
+"File name must not contain \"/\". Please choose a different name." => "파일 이름에는 \"/\"가 들어갈 수 없습니다. 다른 이름을 사용하십시오.",
+"The name %s is already used in the folder %s. Please choose a different name." => "이름 %s이(가) 폴더 %s에서 이미 사용 중입니다. 다른 이름을 사용하십시오.",
+"Not a valid source" => "올바르지 않은 원본",
+"Server is not allowed to open URLs, please check the server configuration" => "서버에서 URL을 열 수 없습니다. 서버 설정을 확인하십시오",
+"Error while downloading %s to %s" => "%s을(를) %s(으)로 다운로드하는 중 오류 발생",
+"Error when creating the file" => "파일 생성 중 오류 발생",
+"Folder name cannot be empty." => "폴더 이름이 비어있을 수 없습니다.",
+"Folder name must not contain \"/\". Please choose a different name." => "폴더 이름에는 \"/\"가 들어갈 수 없습니다. 다른 이름을 사용하십시오.",
+"Error when creating the folder" => "폴더 생성 중 오류 발생",
+"Unable to set upload directory." => "업로드 디렉터리를 설정할 수 없습니다.",
"Invalid Token" => "잘못된 토큰",
-"No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다",
+"No file was uploaded. Unknown error" => "파일이 업로드 되지 않았습니다. 알 수 없는 오류입니다",
"There is no error, the file uploaded with success" => "파일 업로드에 성공하였습니다.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "업로드한 파일 크기가 HTML 폼의 MAX_FILE_SIZE보다 큼",
@@ -14,38 +23,48 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "임시 폴더가 없음",
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Not enough storage available" => "저장소가 용량이 충분하지 않습니다.",
-"Upload failed. Could not get file info." => "업로드에 실패했습니다. 파일 정보를 가져올수 없습니다.",
-"Upload failed. Could not find uploaded file" => "업로드에 실패했습니다. 업로드할 파일을 찾을수 없습니다",
+"Upload failed. Could not get file info." => "업로드에 실패했습니다. 파일 정보를 가져올 수 없습니다.",
+"Upload failed. Could not find uploaded file" => "업로드에 실패했습니다. 업로드할 파일을 찾을 수 없습니다",
"Invalid directory." => "올바르지 않은 디렉터리입니다.",
"Files" => "파일",
-"Unable to upload {filename} as it is a directory or has 0 bytes" => "{filename}을 업로드 할수 없습니다. 폴더이거나 0 바이트 파일입니다.",
+"Unable to upload {filename} as it is a directory or has 0 bytes" => "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.",
"Not enough space available" => "여유 공간이 부족합니다",
"Upload cancelled." => "업로드가 취소되었습니다.",
-"Could not get result from server." => "서버에서 결과를 가져올수 없습니다.",
+"Could not get result from server." => "서버에서 결과를 가져올 수 없습니다.",
"File upload is in progress. Leaving the page now will cancel the upload." => "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
+"URL cannot be empty" => "URL이 비어있을 수 없음",
+"In the home folder 'Shared' is a reserved filename" => "'공유됨'은 홈 폴더의 예약된 파일 이름임",
"{new_name} already exists" => "{new_name}이(가) 이미 존재함",
+"Could not create file" => "파일을 만들 수 없음",
+"Could not create folder" => "폴더를 만들 수 없음",
+"Error fetching URL" => "URL을 가져올 수 없음",
"Share" => "공유",
-"Delete permanently" => "영원히 삭제",
+"Delete permanently" => "영구히 삭제",
"Rename" => "이름 바꾸기",
"Pending" => "대기 중",
+"Could not rename file" => "이름을 변경할 수 없음",
"replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
-"undo" => "되돌리기",
-"_%n folder_::_%n folders_" => array("폴더 %n"),
-"_%n file_::_%n files_" => array("파일 %n 개"),
+"undo" => "실행 취소",
+"Error deleting file." => "파일 삭제 오류.",
+"_%n folder_::_%n folders_" => array("폴더 %n개"),
+"_%n file_::_%n files_" => array("파일 %n개"),
"{dirs} and {files}" => "{dirs} 그리고 {files}",
-"_Uploading %n file_::_Uploading %n files_" => array("%n 개의 파일을 업로드중"),
-"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.",
+"_Uploading %n file_::_Uploading %n files_" => array("파일 %n개 업로드 중"),
+"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름입니다.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.",
"Your storage is full, files can not be updated or synced anymore!" => "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!",
"Your storage is almost full ({usedSpacePercent}%)" => "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)",
-"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화 되어 있습니다. 개인 설저에 가셔서 암호를 해제하십시오",
-"Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다.",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
+"Your download is being prepared. This might take some time if the files are big." => "다운로드 준비 중입니다. 파일 크기가 크면 시간이 오래 걸릴 수도 있습니다.",
"Error moving file" => "파일 이동 오류",
"Error" => "오류",
"Name" => "이름",
"Size" => "크기",
"Modified" => "수정됨",
-"%s could not be renamed" => "%s 의 이름을 변경할수 없습니다",
+"Invalid folder name. Usage of 'Shared' is reserved." => "폴더 이름이 잘못되었습니다. '공유됨'은 예약된 폴더 이름입니다.",
+"%s could not be renamed" => "%s의 이름을 변경할 수 없습니다",
"Upload" => "업로드",
"File handling" => "파일 처리",
"Maximum upload size" => "최대 업로드 크기",
@@ -56,12 +75,14 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "ZIP 파일 최대 크기",
"Save" => "저장",
"New" => "새로 만들기",
+"New text file" => "새 텍스트 파일",
"Text file" => "텍스트 파일",
"New folder" => "새 폴더",
"Folder" => "폴더",
"From link" => "링크에서",
-"Deleted files" => "파일 삭제됨",
+"Deleted files" => "삭제된 파일",
"Cancel upload" => "업로드 취소",
+"You don’t have permission to upload or create files here" => "여기에 파일을 업로드하거나 만들 권한이 없습니다",
"Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!",
"Download" => "다운로드",
"Delete" => "삭제",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index 9edee862cbf..a391e25b952 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "De bestandsnaam mag geen \"/\" bevatten. Kies een andere naam.",
"The name %s is already used in the folder %s. Please choose a different name." => "De naam %s bestaat al in map %s. Kies een andere naam.",
"Not a valid source" => "Geen geldige bron",
+"Server is not allowed to open URLs, please check the server configuration" => "Server mag geen URS's openen, controleer de server configuratie",
"Error while downloading %s to %s" => "Fout bij downloaden %s naar %s",
"Error when creating the file" => "Fout bij creëren bestand",
"Folder name cannot be empty." => "Mapnaam mag niet leeg zijn.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} bestaat al",
"Could not create file" => "Kon bestand niet creëren",
"Could not create folder" => "Kon niet creëren map",
+"Error fetching URL" => "Fout bij ophalen URL",
"Share" => "Delen",
"Delete permanently" => "Verwijder definitief",
"Rename" => "Hernoem",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 5a26904e0ae..031bd508700 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Nazwa pliku nie może zawierać \"/\". Proszę wybrać inną nazwę.",
"The name %s is already used in the folder %s. Please choose a different name." => "Nazwa %s jest już używana w folderze %s. Proszę wybrać inną nazwę.",
"Not a valid source" => "Niepoprawne źródło",
+"Server is not allowed to open URLs, please check the server configuration" => "Serwer nie mógł otworzyć adresów URL, należy sprawdzić konfigurację serwera",
"Error while downloading %s to %s" => "Błąd podczas pobierania %s do %S",
"Error when creating the file" => "Błąd przy tworzeniu pliku",
"Folder name cannot be empty." => "Nazwa folderu nie może być pusta.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} już istnieje",
"Could not create file" => "Nie można utworzyć pliku",
"Could not create folder" => "Nie można utworzyć folderu",
+"Error fetching URL" => "Błąd przy pobieraniu adresu URL",
"Share" => "Udostępnij",
"Delete permanently" => "Trwale usuń",
"Rename" => "Zmień nazwę",
@@ -43,9 +45,10 @@ $TRANSLATIONS = array(
"Could not rename file" => "Nie można zmienić nazwy pliku",
"replaced {new_name} with {old_name}" => "zastąpiono {new_name} przez {old_name}",
"undo" => "cofnij",
+"Error deleting file." => "Błąd podczas usuwania pliku",
"_%n folder_::_%n folders_" => array("%n katalog","%n katalogi","%n katalogów"),
"_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"),
-"{dirs} and {files}" => "{katalogi} and {pliki}",
+"{dirs} and {files}" => "{dirs} and {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"),
"'.' is an invalid file name." => "„.” jest nieprawidłową nazwą pliku.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone.",
@@ -72,6 +75,7 @@ $TRANSLATIONS = array(
"Maximum input size for ZIP files" => "Maksymalna wielkość pliku wejściowego ZIP ",
"Save" => "Zapisz",
"New" => "Nowy",
+"New text file" => "Nowy plik tekstowy",
"Text file" => "Plik tekstowy",
"New folder" => "Nowy folder",
"Folder" => "Folder",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index 4f193611710..f84dcfcd488 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "O nome do arquivo não deve conter \"/\". Por favor, escolha um nome diferente.",
"The name %s is already used in the folder %s. Please choose a different name." => "O nome %s já é usado na pasta %s. Por favor, escolha um nome diferente.",
"Not a valid source" => "Não é uma fonte válida",
+"Server is not allowed to open URLs, please check the server configuration" => "Não é permitido ao servidor abrir URLs, por favor verificar a configuração do servidor.",
"Error while downloading %s to %s" => "Erro ao baixar %s para %s",
"Error when creating the file" => "Erro ao criar o arquivo",
"Folder name cannot be empty." => "O nome da pasta não pode estar vazio.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} já existe",
"Could not create file" => "Não foi possível criar o arquivo",
"Could not create folder" => "Não foi possível criar a pasta",
+"Error fetching URL" => "Erro ao buscar URL",
"Share" => "Compartilhar",
"Delete permanently" => "Excluir permanentemente",
"Rename" => "Renomear",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index cede72f26e7..968da63aaca 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Имя файла не должно содержать символ \"/\". Пожалуйста, выберите другое имя.",
"The name %s is already used in the folder %s. Please choose a different name." => "Имя %s уже используется в папке %s. Пожалуйста выберите другое имя.",
"Not a valid source" => "Неправильный источник",
+"Server is not allowed to open URLs, please check the server configuration" => "Сервер не позволяет открывать URL-адреса, пожалуйста, проверьте настройки сервера",
"Error while downloading %s to %s" => "Ошибка при загрузке %s в %s",
"Error when creating the file" => "Ошибка при создании файла",
"Folder name cannot be empty." => "Имя папки не может быть пустым.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} уже существует",
"Could not create file" => "Не удалось создать файл",
"Could not create folder" => "Не удалось создать папку",
+"Error fetching URL" => "Ошибка получения URL",
"Share" => "Открыть доступ",
"Delete permanently" => "Удалено навсегда",
"Rename" => "Переименовать",
diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php
index 0df5b9c8c82..2a6ceeb99b9 100644
--- a/apps/files/l10n/ru_RU.php
+++ b/apps/files/l10n/ru_RU.php
@@ -12,6 +12,7 @@ $TRANSLATIONS = array(
"Error" => "Ошибка",
"Size" => "Размер",
"Upload" => "Загрузка",
+"0 is unlimited" => "0 без ограничений",
"Save" => "Сохранить",
"Cancel upload" => "Отмена загрузки",
"Download" => "Загрузка",
diff --git a/apps/files/l10n/sk.php b/apps/files/l10n/sk.php
index a3178a95c47..53daf549eaa 100644
--- a/apps/files/l10n/sk.php
+++ b/apps/files/l10n/sk.php
@@ -1,7 +1,11 @@
<?php
$TRANSLATIONS = array(
+"Share" => "Zdieľať",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
-"_Uploading %n file_::_Uploading %n files_" => array("","","")
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
+"Save" => "Uložiť",
+"Download" => "Stiahnuť",
+"Delete" => "Odstrániť"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index 421792f3218..037e5f6b6b0 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Ime datoteke ne sme vsebovati znaka \"/\". Določiti je treba drugo ime.",
"The name %s is already used in the folder %s. Please choose a different name." => "Ime %s je že v mapi %s že v uporabi. Izbrati je treba drugo ime.",
"Not a valid source" => "Vir ni veljaven",
+"Server is not allowed to open URLs, please check the server configuration" => "Odpiranje naslovov URL preko strežnika ni dovoljeno. Preverite nastavitve strežnika.",
"Error while downloading %s to %s" => "Napaka med prejemanjem %s v mapo %s",
"Error when creating the file" => "Napaka med ustvarjanjem datoteke",
"Folder name cannot be empty." => "Ime mape ne more biti prazna vrednost.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} že obstaja",
"Could not create file" => "Ni mogoče ustvariti datoteke",
"Could not create folder" => "Ni mogoče ustvariti mape",
+"Error fetching URL" => "Napaka pridobivanja naslova URL",
"Share" => "Souporaba",
"Delete permanently" => "Izbriši dokončno",
"Rename" => "Preimenuj",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index 9ede20634a4..90b16922a76 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"File name must not contain \"/\". Please choose a different name." => "Dosya adı \"/\" içermemelidir. Lütfen farklı bir isim seçin.",
"The name %s is already used in the folder %s. Please choose a different name." => "%s ismi zaten %s klasöründe kullanılıyor. Lütfen farklı bir isim seçin.",
"Not a valid source" => "Geçerli bir kaynak değil",
+"Server is not allowed to open URLs, please check the server configuration" => "Sunucunun adresleri açma izi yok, lütfen sunucu yapılandırmasını denetleyin",
"Error while downloading %s to %s" => "%s, %s içine indirilirken hata",
"Error when creating the file" => "Dosya oluşturulurken hata",
"Folder name cannot be empty." => "Klasör adı boş olamaz.",
@@ -36,6 +37,7 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} zaten mevcut",
"Could not create file" => "Dosya oluşturulamadı",
"Could not create folder" => "Klasör oluşturulamadı",
+"Error fetching URL" => "Adres getirilirken hata",
"Share" => "Paylaş",
"Delete permanently" => "Kalıcı olarak sil",
"Rename" => "İsim değiştir.",
@@ -50,11 +52,11 @@ $TRANSLATIONS = array(
"_Uploading %n file_::_Uploading %n files_" => array("%n dosya yükleniyor","%n dosya yükleniyor"),
"'.' is an invalid file name." => "'.' geçersiz bir dosya adı.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.",
-"Your storage is full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek yada senkronizasyon edilmeyecek.",
+"Your storage is full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.",
"Your storage is almost full ({usedSpacePercent}%)" => "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
-"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçiniz.",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
"Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.",
"Error moving file" => "Dosya taşıma hatası",
"Error" => "Hata",
@@ -64,13 +66,13 @@ $TRANSLATIONS = array(
"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır.",
"%s could not be renamed" => "%s yeniden adlandırılamadı",
"Upload" => "Yükle",
-"File handling" => "Dosya taşıma",
+"File handling" => "Dosya işlemleri",
"Maximum upload size" => "Maksimum yükleme boyutu",
"max. possible: " => "mümkün olan en fazla: ",
"Needed for multi-file and folder downloads." => "Çoklu dosya ve dizin indirmesi için gerekli.",
-"Enable ZIP-download" => "ZIP indirmeyi aktif et",
+"Enable ZIP-download" => "ZIP indirmeyi etkinleştir",
"0 is unlimited" => "0 limitsiz demektir",
-"Maximum input size for ZIP files" => "ZIP dosyaları için en fazla girdi sayısı",
+"Maximum input size for ZIP files" => "ZIP dosyaları için en fazla girdi boyutu",
"Save" => "Kaydet",
"New" => "Yeni",
"New text file" => "Yeni metin dosyası",
diff --git a/apps/files/l10n/ur.php b/apps/files/l10n/ur.php
new file mode 100644
index 00000000000..0157af093e9
--- /dev/null
+++ b/apps/files/l10n/ur.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
index 9db27eb9b29..90d07d4336c 100644
--- a/apps/files/templates/part.breadcrumb.php
+++ b/apps/files/templates/part.breadcrumb.php
@@ -1,10 +1,8 @@
-<?php if(count($_["breadcrumb"])):?>
- <div class="crumb" data-dir=''>
- <a href="<?php print_unescaped($_['baseURL']); ?>">
- <img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
- </a>
- </div>
-<?php endif;?>
+<div class="crumb <?php if(!count($_["breadcrumb"])) p('last');?>" data-dir=''>
+ <a href="<?php print_unescaped($_['baseURL']); ?>">
+ <img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
+ </a>
+</div>
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
$crumb = $_["breadcrumb"][$i];
$dir = \OCP\Util::encodePath($crumb["dir"]); ?>
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 7b13ae2a1d0..09d5687e226 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -30,6 +30,9 @@ use OC\Files\Filesystem;
*/
class Hooks {
+ // file for which we want to rename the keys after the rename operation was successful
+ private static $renamedFiles = array();
+
/**
* @brief Startup encryption backend upon user login
* @note This method should never be called for users using client side encryption
@@ -480,6 +483,18 @@ class Hooks {
}
/**
+ * @brief mark file as renamed so that we know the original source after the file was renamed
+ * @param array $params with the old path and the new path
+ */
+ public static function preRename($params) {
+ $util = new Util(new \OC_FilesystemView('/'), \OCP\User::getUser());
+ list($ownerOld, $pathOld) = $util->getUidAndFilename($params['oldpath']);
+ self::$renamedFiles[$params['oldpath']] = array(
+ 'uid' => $ownerOld,
+ 'path' => $pathOld);
+ }
+
+ /**
* @brief after a file is renamed, rename its keyfile and share-keys also fix the file size and fix also the sharing
* @param array with oldpath and newpath
*
@@ -501,19 +516,32 @@ class Hooks {
$userId = \OCP\User::getUser();
$util = new Util($view, $userId);
+ if (isset(self::$renamedFiles[$params['oldpath']]['uid']) &&
+ isset(self::$renamedFiles[$params['oldpath']]['path'])) {
+ $ownerOld = self::$renamedFiles[$params['oldpath']]['uid'];
+ $pathOld = self::$renamedFiles[$params['oldpath']]['path'];
+ } else {
+ \OCP\Util::writeLog('Encryption library', "can't get path and owner from the file before it was renamed", \OCP\Util::ERROR);
+ return false;
+ }
+
+ list($ownerNew, $pathNew) = $util->getUidAndFilename($params['newpath']);
+
// Format paths to be relative to user files dir
- if ($util->isSystemWideMountPoint($params['oldpath'])) {
- $baseDir = 'files_encryption/';
- $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath'];
+ if ($util->isSystemWideMountPoint($pathOld)) {
+ $oldKeyfilePath = 'files_encryption/keyfiles/' . $pathOld;
+ $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;
} else {
- $baseDir = $userId . '/' . 'files_encryption/';
- $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath'];
+ $oldKeyfilePath = $ownerOld . '/' . 'files_encryption/keyfiles/' . $pathOld;
+ $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;
}
- if ($util->isSystemWideMountPoint($params['newpath'])) {
- $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath'];
+ if ($util->isSystemWideMountPoint($pathNew)) {
+ $newKeyfilePath = 'files_encryption/keyfiles/' . $pathNew;
+ $newShareKeyPath = 'files_encryption/share-keys/' . $pathNew;
} else {
- $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath'];
+ $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew;
+ $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;
}
// add key ext if this is not an folder
@@ -522,11 +550,11 @@ class Hooks {
$newKeyfilePath .= '.key';
// handle share-keys
- $localKeyPath = $view->getLocalFile($baseDir . 'share-keys/' . $params['oldpath']);
+ $localKeyPath = $view->getLocalFile($oldShareKeyPath);
$escapedPath = Helper::escapeGlobPattern($localKeyPath);
$matches = glob($escapedPath . '*.shareKey');
foreach ($matches as $src) {
- $dst = \OC\Files\Filesystem::normalizePath(str_replace($params['oldpath'], $params['newpath'], $src));
+ $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src));
// create destination folder if not exists
if (!file_exists(dirname($dst))) {
@@ -538,15 +566,13 @@ class Hooks {
} else {
// handle share-keys folders
- $oldShareKeyfilePath = $baseDir . 'share-keys/' . $params['oldpath'];
- $newShareKeyfilePath = $baseDir . 'share-keys/' . $params['newpath'];
// create destination folder if not exists
- if (!$view->file_exists(dirname($newShareKeyfilePath))) {
- $view->mkdir(dirname($newShareKeyfilePath), 0750, true);
+ if (!$view->file_exists(dirname($newShareKeyPath))) {
+ $view->mkdir(dirname($newShareKeyPath), 0750, true);
}
- $view->rename($oldShareKeyfilePath, $newShareKeyfilePath);
+ $view->rename($oldShareKeyPath, $newShareKeyPath);
}
// Rename keyfile so it isn't orphaned
@@ -561,18 +587,17 @@ class Hooks {
}
// build the path to the file
- $newPath = '/' . $userId . '/files' . $params['newpath'];
- $newPathRelative = $params['newpath'];
+ $newPath = '/' . $ownerNew . '/files' . $pathNew;
if ($util->fixFileSize($newPath)) {
// get sharing app state
$sharingEnabled = \OCP\Share::isEnabled();
// get users
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $newPathRelative);
+ $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew);
// update sharing-keys
- $util->setSharedFileKeyfiles($session, $usersSharing, $newPathRelative);
+ $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew);
}
\OC_FileProxy::$enabled = $proxyStatus;
diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php
index 9d307f1064d..9e4290534c0 100644
--- a/apps/files_encryption/l10n/da.php
+++ b/apps/files_encryption/l10n/da.php
@@ -8,19 +8,27 @@ $TRANSLATIONS = array(
"Could not change the password. Maybe the old password was not correct." => "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.",
"Private key password successfully updated." => "Privat nøgle kodeord succesfuldt opdateret.",
"Could not update the private key password. Maybe the old password was not correct." => "Kunne ikke opdatere det private nøgle kodeord-. Måske var det gamle kodeord forkert.",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Krypteringsprogrammet er ikke igangsat. Det kan skyldes at krypteringsprogrammet er blevet genaktiveret under din session. Prøv at logge ud og ind igen for at aktivere krypteringsprogrammet. ",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din private nøgle er ikke gyldig. Sandsynligvis er dit kodeord blevet ændret uden for %s (f.eks dit firmas adressebog). Du kan opdatere din private nøglekode i dine personlige indstillinger for at genskabe adgang til dine krypterede filer.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
+"Unknown error please check your system settings or contact your administrator" => "Ukendt fejl. Kontroller venligst dit system eller kontakt din administrator",
"Missing requirements." => "Manglende betingelser.",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
"Following users are not set up for encryption:" => "Følgende brugere er ikke sat op til kryptering:",
+"Initial encryption started... This can take some time. Please wait." => "Førstegangskryptering er påbegyndt... Dette kan tage nogen tid. Vent venligst.",
"Saving..." => "Gemmer...",
+"Go directly to your " => "Gå direkte til din ",
"personal settings" => "Personlige indstillinger",
"Encryption" => "Kryptering",
"Enable recovery key (allow to recover users files in case of password loss):" => "Aktiver gendannelsesnøgle (Tillad gendannelse af brugerfiler i tilfælde af tab af kodeord):",
"Recovery key password" => "Gendannelsesnøgle kodeord",
+"Repeat Recovery key password" => "Gentag gendannelse af nøglekoden",
"Enabled" => "Aktiveret",
"Disabled" => "Deaktiveret",
"Change recovery key password:" => "Skift gendannelsesnøgle kodeord:",
"Old Recovery key password" => "Gammel Gendannelsesnøgle kodeord",
"New Recovery key password" => "Ny Gendannelsesnøgle kodeord",
+"Repeat New Recovery key password" => "Gentag dannelse af ny gendannaleses nøglekode",
"Change Password" => "Skift Kodeord",
"Your private key password no longer match your log-in password:" => "Dit private nøgle kodeord stemmer ikke længere overens med dit login kodeord:",
"Set your old private key password to your current log-in password." => "Sæt dit gamle private nøgle kodeord til at være dit nuværende login kodeord. ",
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index 6b21122027a..22c1095e284 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -8,20 +8,30 @@ $TRANSLATIONS = array(
"Could not change the password. Maybe the old password was not correct." => "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.",
"Private key password successfully updated." => "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"Could not update the private key password. Maybe the old password was not correct." => "Αποτυχία ενημέρωσης του κωδικού για το προσωπικό κλειδί. Ενδεχομένως ο παλιός κωδικός δεν ήταν σωστός.",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Η εφαρμογή κρυπτογράφησης δεν έχει εκκινήσει! Ίσως η εφαρμογή κρυπτογράφησης επανενεργοποιήθηκε κατά τη διάρκεια της τρέχουσας σύνδεσής σας. Παρακαλώ προσπαθήστε να αποσυνδεθείτε και να ξανασυνδεθείτε για να εκκινήσετε την εφαρμογή κρυπτογράφησης.",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Το προσωπικό σας κλειδί δεν είναι έγκυρο! Πιθανόν ο κωδικός σας να άλλαξε έξω από το %s (π.χ. τη λίστα διευθύνσεων της εταιρείας σας). Μπορείτε να ενημερώσετε το προσωπικό σας κλειδί επαναφοράς κωδικού στις προσωπικές σας ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Unknown error please check your system settings or contact your administrator" => "Άγνωστο σφάλμα, παρακαλώ ελέγξτε τις ρυθμίσεις συστήματος ή επικοινωνήστε με τον διαχειριστή σας ",
"Missing requirements." => "Προαπαιτούμενα που απουσιάζουν.",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
"Following users are not set up for encryption:" => "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
+"Initial encryption started... This can take some time. Please wait." => "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
"Saving..." => "Γίνεται αποθήκευση...",
"Go directly to your " => "Πηγαίνε απευθείας στο ",
"personal settings" => "προσωπικές ρυθμίσεις",
"Encryption" => "Κρυπτογράφηση",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Ενεργοποίηση κλειδιού ανάκτησης (επιτρέψτε την ανάκτηση αρχείων χρηστών σε περίπτωση απώλειας κωδικού):",
"Recovery key password" => "Επαναφορά κωδικού κλειδιού",
+"Repeat Recovery key password" => "Επαναλάβετε το κλειδί επαναφοράς κωδικού",
"Enabled" => "Ενεργοποιημένο",
"Disabled" => "Απενεργοποιημένο",
+"Change recovery key password:" => "Αλλαγή κλειδιού επαναφοράς κωδικού:",
+"Old Recovery key password" => "Παλιό κλειδί επαναφοράς κωδικού",
"New Recovery key password" => "Νέο κλειδί επαναφοράς κωδικού",
+"Repeat New Recovery key password" => "Επαναλάβετε νέο κλειδί επαναφοράς κωδικού",
"Change Password" => "Αλλαγή Κωδικού Πρόσβασης",
"Your private key password no longer match your log-in password:" => "Ο κωδικός του προσωπικού κλειδιού δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας:",
+"Set your old private key password to your current log-in password." => "Ορίστε το παλιό σας προσωπικό κλειδί ως τον τρέχων κωδικό πρόσβασης.",
" If you don't remember your old password you can ask your administrator to recover your files." => "Εάν δεν θυμάστε τον παλιό σας κωδικό μπορείτε να ζητήσετε από τον διαχειριστή σας να επανακτήσει τα αρχεία σας.",
"Old log-in password" => "Παλαιό συνθηματικό εισόδου",
"Current log-in password" => "Τρέχον συνθηματικό πρόσβασης",
diff --git a/apps/files_encryption/l10n/es_MX.php b/apps/files_encryption/l10n/es_MX.php
new file mode 100644
index 00000000000..3906e3cacbe
--- /dev/null
+++ b/apps/files_encryption/l10n/es_MX.php
@@ -0,0 +1,44 @@
+<?php
+$TRANSLATIONS = array(
+"Recovery key successfully enabled" => "Se ha habilitado la recuperación de archivos",
+"Could not enable recovery key. Please check your recovery key password!" => "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.",
+"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
+"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
+"Password successfully changed." => "Su contraseña ha sido cambiada",
+"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
+"Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.",
+"Could not update the private key password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Puede que la contraseña antigua no sea correcta.",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
+"Unknown error please check your system settings or contact your administrator" => "Error desconocido. Verifique la configuración de su sistema o póngase en contacto con su administrador",
+"Missing requirements." => "Requisitos incompletos.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
+"Following users are not set up for encryption:" => "Los siguientes usuarios no han sido configurados para el cifrado:",
+"Initial encryption started... This can take some time. Please wait." => "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.",
+"Saving..." => "Guardando...",
+"Go directly to your " => "Ir directamente a su",
+"personal settings" => "opciones personales",
+"Encryption" => "Cifrado",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Habilitar la clave de recuperación (permite recuperar los archivos del usuario en caso de pérdida de la contraseña);",
+"Recovery key password" => "Contraseña de clave de recuperación",
+"Repeat Recovery key password" => "Repite la contraseña de clave de recuperación",
+"Enabled" => "Habilitar",
+"Disabled" => "Deshabilitado",
+"Change recovery key password:" => "Cambiar la contraseña de la clave de recuperación",
+"Old Recovery key password" => "Antigua clave de recuperación",
+"New Recovery key password" => "Nueva clave de recuperación",
+"Repeat New Recovery key password" => "Repetir la nueva clave de recuperación",
+"Change Password" => "Cambiar contraseña",
+"Your private key password no longer match your log-in password:" => "Su contraseña de clave privada ya no coincide con su contraseña de acceso:",
+"Set your old private key password to your current log-in password." => "Establecer la contraseña de su antigua clave privada a su contraseña actual de acceso.",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus archivos.",
+"Old log-in password" => "Contraseña de acceso antigua",
+"Current log-in password" => "Contraseña de acceso actual",
+"Update Private Key Password" => "Actualizar Contraseña de Clave Privada",
+"Enable password recovery:" => "Habilitar la recuperación de contraseña:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
+"File recovery settings updated" => "Opciones de recuperación de archivos actualizada",
+"Could not update file recovery" => "No se pudo actualizar la recuperación de archivos"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index 323291bbfbe..163011ff80b 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -1,18 +1,44 @@
<?php
$TRANSLATIONS = array(
-"Recovery key successfully disabled" => "Visszaállítási kulcs sikeresen kikapcsolva",
-"Password successfully changed." => "Jelszó sikeresen megváltoztatva.",
+"Recovery key successfully enabled" => "A helyreállítási kulcs sikeresen bekapcsolva",
+"Could not enable recovery key. Please check your recovery key password!" => "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+"Recovery key successfully disabled" => "A helyreállítási kulcs sikeresen kikapcsolva",
+"Could not disable recovery key. Please check your recovery key password!" => "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+"Password successfully changed." => "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." => "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
-"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérlek győződj meg arról, hogy PHP 5.3.3 vagy annál frissebb van telepítve, valamint a PHP-hez tartozó OpenSSL bővítmény be van-e kapcsolva és az helyesen van-e konfigurálva! Ki lett kapcsolva ideiglenesen a titkosító alkalmazás.",
+"Private key password successfully updated." => "A személyes kulcsának jelszava frissítésre került.",
+"Could not update the private key password. Maybe the old password was not correct." => "A személyes kulcsa jelszavát nem lehetett frissíteni. Lehet, hogy hibás volt a régi jelszó.",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "A titkosítási modul nincs elindítva! Talán a munkafolyamat közben került engedélyezésre. Kérjük jelentkezzen ki majd ismét jelentkezzen be, hogy a titkosítási modul megfelelően elinduljon!",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+"Unknown error please check your system settings or contact your administrator" => "Ismeretlen hiba. Ellenőrizze a rendszer beállításait vagy forduljon a rendszergazdához!",
+"Missing requirements." => "Hiányzó követelmények.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
+"Following users are not set up for encryption:" => "A következő felhasználók nem állították be a titkosítást:",
+"Initial encryption started... This can take some time. Please wait." => "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
"Saving..." => "Mentés...",
+"Go directly to your " => "Ugrás ide:",
"personal settings" => "személyes beállítások",
"Encryption" => "Titkosítás",
+"Enable recovery key (allow to recover users files in case of password loss):" => "A helyreállítási kulcs beállítása (lehetővé teszi a felhasználók állományainak visszaállítását, ha elfelejtik a jelszavukat):",
+"Recovery key password" => "A helyreállítási kulcs jelszava",
+"Repeat Recovery key password" => "Ismételje meg a helyreállítási kulcs jelszavát",
"Enabled" => "Bekapcsolva",
"Disabled" => "Kikapcsolva",
+"Change recovery key password:" => "A helyreállítási kulcs jelszavának módosítása:",
+"Old Recovery key password" => "Régi Helyreállítási Kulcs Jelszava",
+"New Recovery key password" => "Új Helyreállítási kulcs jelszava",
+"Repeat New Recovery key password" => "Ismételje meg az új helyreállítási kulcs jelszavát",
"Change Password" => "Jelszó megváltoztatása",
+"Your private key password no longer match your log-in password:" => "A személyes kulcs jelszava mostantól nem azonos a belépési jelszavával:",
+"Set your old private key password to your current log-in password." => "Állítsuk be a személyes kulcs jelszavát a jelenlegi bejelentkezési jelszavunkra.",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.",
"Old log-in password" => "Régi bejelentkezési jelszó",
"Current log-in password" => "Jelenlegi bejelentkezési jelszó",
-"Update Private Key Password" => "Privát kulcs jelszó frissítése",
-"Enable password recovery:" => "Jelszó-visszaállítás bekapcsolása"
+"Update Private Key Password" => "A személyest kulcs jelszó frissítése",
+"Enable password recovery:" => "Jelszó-visszaállítás bekapcsolása",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
+"File recovery settings updated" => "A fájlhelyreállítási beállítások frissültek",
+"Could not update file recovery" => "A fájlhelyreállítás nem frissíthető"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php
index cf06136c9b6..d91e861ca5d 100644
--- a/apps/files_encryption/l10n/ko.php
+++ b/apps/files_encryption/l10n/ko.php
@@ -1,26 +1,44 @@
<?php
$TRANSLATIONS = array(
-"Recovery key successfully enabled" => "복구키가 성공적으로 활성화 되었습니다",
-"Could not enable recovery key. Please check your recovery key password!" => "복구키를 활성화 할수 없습니다. 복구키의 비밀번호를 확인해주세요!",
-"Recovery key successfully disabled" => "복구키가 성공적으로 비활성화 되었습니다",
-"Could not disable recovery key. Please check your recovery key password!" => "복구키를 비활성화 할수 없습니다. 복구키의 비밀번호를 확인해주세요!",
+"Recovery key successfully enabled" => "복구 키가 성공적으로 활성화되었습니다",
+"Could not enable recovery key. Please check your recovery key password!" => "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주세요!",
+"Recovery key successfully disabled" => "복구 키가 성공적으로 비활성화 되었습니다",
+"Could not disable recovery key. Please check your recovery key password!" => "복구 키를 비활성화 할 수 없습니다. 복구 키의 암호를 확인해주세요!",
"Password successfully changed." => "암호가 성공적으로 변경되었습니다",
-"Could not change the password. Maybe the old password was not correct." => "암호를 변경할수 없습니다. 아마도 예전 암호가 정확하지 않은것 같습니다.",
-"Private key password successfully updated." => "개인키 암호가 성공적으로 업데이트 됨.",
+"Could not change the password. Maybe the old password was not correct." => "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.",
+"Private key password successfully updated." => "개인 키 암호가 성공적으로 업데이트 됨.",
+"Could not update the private key password. Maybe the old password was not correct." => "개인 키 암호를 업데이트할 수 없습니다. 이전 암호가 올바르지 않은 것 같습니다.",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "암호화 앱이 초기화되지 않았습니다! 암호화 앱이 다시 활성화된 것 같습니다. 암호화 앱을 초기화하려면 로그아웃했다 다시 로그인하십시오.",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
+"Unknown error please check your system settings or contact your administrator" => "알 수 없는 오류. 시스템 설정을 확인하거나 관리자에게 문의하십시오.",
+"Missing requirements." => "요구 사항이 부족합니다.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.",
+"Following users are not set up for encryption:" => "다음 사용자는 암호화를 사용할 수 없습니다:",
+"Initial encryption started... This can take some time. Please wait." => "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.",
"Saving..." => "저장 중...",
+"Go directly to your " => "다음으로 바로 가기: ",
"personal settings" => "개인 설정",
"Encryption" => "암호화",
-"Recovery key password" => "키 비밀번호 복구",
+"Enable recovery key (allow to recover users files in case of password loss):" => "복구 키 사용 (암호를 잊었을 때 파일을 복구할 수 있도록 함):",
+"Recovery key password" => "복구 키 암호",
+"Repeat Recovery key password" => "복구 키 암호 재입력",
"Enabled" => "활성화",
"Disabled" => "비활성화",
-"Change recovery key password:" => "복구 키 비밀번호 변경",
-"Old Recovery key password" => "예전 복구 키 비밀번호",
-"New Recovery key password" => "새 복구 키 비밀번호",
+"Change recovery key password:" => "복구 키 암호 변경:",
+"Old Recovery key password" => "이전 복구 키 암호",
+"New Recovery key password" => "새 복구 키 암호",
+"Repeat New Recovery key password" => "새 복구 키 암호 재입력",
"Change Password" => "암호 변경",
-"Old log-in password" => "예전 로그인 암호",
+"Your private key password no longer match your log-in password:" => "개인 키 암호와 로그인 암호가 일치하지 않습니다:",
+"Set your old private key password to your current log-in password." => "이전 개인 키 암호를 현재 로그인 암호로 설정하십시오.",
+" If you don't remember your old password you can ask your administrator to recover your files." => " 이전 암호가 기억나지 않으면 시스템 관리자에게 파일 복구를 요청하십시오.",
+"Old log-in password" => "이전 로그인 암호",
"Current log-in password" => "현재 로그인 암호",
"Update Private Key Password" => "개인 키 암호 업데이트",
+"Enable password recovery:" => "암호 복구 사용:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "이 옵션을 사용하면 암호를 잊었을 때 암호화된 파일에 다시 접근할 수 있습니다",
"File recovery settings updated" => "파일 복구 설정 업데이트됨",
-"Could not update file recovery" => "파일 복구를 업데이트 할수 없습니다"
+"Could not update file recovery" => "파일 복구를 업데이트할 수 없습니다"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
index 5d1a48d1246..b768bd46f8c 100644
--- a/apps/files_encryption/l10n/pl.php
+++ b/apps/files_encryption/l10n/pl.php
@@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Missing requirements." => "Brak wymagań.",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.",
"Following users are not set up for encryption:" => "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
+"Initial encryption started... This can take some time. Please wait." => "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Saving..." => "Zapisywanie...",
"Go directly to your " => "Przejdź bezpośrednio do",
"personal settings" => "Ustawienia osobiste",
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 17bcac5c585..5dcb05fa196 100755
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -29,6 +29,8 @@ namespace OCA\Encryption;
*/
class Helper {
+ private static $tmpFileMapping; // Map tmp files to files in data/user/files
+
/**
* @brief register share related hooks
*
@@ -59,6 +61,7 @@ class Helper {
*/
public static function registerFilesystemHooks() {
+ \OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Encryption\Hooks', 'preRename');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Encryption\Hooks', 'postRename');
}
@@ -274,7 +277,7 @@ class Helper {
$split = explode('/', $trimmed);
// it is not a file relative to data/user/files
- if (count($split) < 2 || $split[1] !== 'files') {
+ if (count($split) < 2 || ($split[1] !== 'files' && $split[1] !== 'cache')) {
return false;
}
@@ -423,5 +426,27 @@ class Helper {
public static function escapeGlobPattern($path) {
return preg_replace('/(\*|\?|\[)/', '[$1]', $path);
}
+
+ /**
+ * @brief remember from which file the tmp file (getLocalFile() call) was created
+ * @param string $tmpFile path of tmp file
+ * @param string $originalFile path of the original file relative to data/
+ */
+ public static function addTmpFileToMapper($tmpFile, $originalFile) {
+ self::$tmpFileMapping[$tmpFile] = $originalFile;
+ }
+
+ /**
+ * @brief get the path of the original file
+ * @param string $tmpFile path of the tmp file
+ * @return mixed path of the original file or false
+ */
+ public static function getPathFromTmpFile($tmpFile) {
+ if (isset(self::$tmpFileMapping[$tmpFile])) {
+ return self::$tmpFileMapping[$tmpFile];
+ }
+
+ return false;
+ }
}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index 5ba3bfa784f..41f352d853a 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -114,6 +114,15 @@ class Proxy extends \OC_FileProxy {
// get encrypted content
$data = $view->file_get_contents($tmpPath);
+ // update file cache for target file
+ $tmpFileInfo = $view->getFileInfo($tmpPath);
+ $fileInfo = $view->getFileInfo($path);
+ if (is_array($fileInfo) && is_array($tmpFileInfo)) {
+ $fileInfo['encrypted'] = true;
+ $fileInfo['unencrypted_size'] = $tmpFileInfo['size'];
+ $view->putFileInfo($path, $fileInfo);
+ }
+
// remove our temp file
$view->deleteAll('/' . \OCP\User::getUser() . '/cache/' . $cacheFolder);
@@ -182,8 +191,11 @@ class Proxy extends \OC_FileProxy {
*/
public function preUnlink($path) {
- // let the trashbin handle this
- if (\OCP\App::isEnabled('files_trashbin')) {
+ $relPath = Helper::stripUserFilesPath($path);
+
+ // skip this method if the trash bin is enabled or if we delete a file
+ // outside of /data/user/files
+ if (\OCP\App::isEnabled('files_trashbin') || $relPath === false) {
return true;
}
@@ -197,10 +209,7 @@ class Proxy extends \OC_FileProxy {
$util = new Util($view, $userId);
- // get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
-
- list($owner, $ownerPath) = $util->getUidAndFilename($relativePath);
+ list($owner, $ownerPath) = $util->getUidAndFilename($relPath);
// Delete keyfile & shareKey so it isn't orphaned
if (!Keymanager::deleteFileKey($view, $ownerPath)) {
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 7a37d2200a4..b3bf34ddb82 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -64,6 +64,9 @@ class Stream {
private $publicKey;
private $encKeyfile;
private $newFile; // helper var, we only need to write the keyfile for new files
+ private $isLocalTmpFile = false; // do we operate on a local tmp file
+ private $localTmpFile; // path of local tmp file
+
/**
* @var \OC\Files\View
*/
@@ -91,13 +94,18 @@ class Stream {
$this->rootView = new \OC_FilesystemView('/');
}
-
$this->session = new \OCA\Encryption\Session($this->rootView);
$this->privateKey = $this->session->getPrivateKey();
- // rawPath is relative to the data directory
- $this->rawPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path));
+ $normalizedPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path));
+ if ($originalFile = Helper::getPathFromTmpFile($normalizedPath)) {
+ $this->rawPath = $originalFile;
+ $this->isLocalTmpFile = true;
+ $this->localTmpFile = $normalizedPath;
+ } else {
+ $this->rawPath = $normalizedPath;
+ }
$this->userId = Helper::getUser($this->rawPath);
@@ -141,10 +149,14 @@ class Stream {
\OCA\Encryption\Helper::redirectToErrorPage($this->session);
}
- $this->size = $this->rootView->filesize($this->rawPath, $mode);
+ $this->size = $this->rootView->filesize($this->rawPath);
}
- $this->handle = $this->rootView->fopen($this->rawPath, $mode);
+ if ($this->isLocalTmpFile) {
+ $this->handle = fopen($this->localTmpFile, $mode);
+ } else {
+ $this->handle = $this->rootView->fopen($this->rawPath, $mode);
+ }
\OC_FileProxy::$enabled = $proxyStatus;
@@ -164,14 +176,25 @@ class Stream {
}
/**
+ * @brief Returns the current position of the file pointer
+ * @return int position of the file pointer
+ */
+ public function stream_tell() {
+ return ftell($this->handle);
+ }
+
+ /**
* @param $offset
* @param int $whence
+ * @return bool true if fseek was successful, otherwise false
*/
public function stream_seek($offset, $whence = SEEK_SET) {
$this->flush();
- fseek($this->handle, $offset, $whence);
+ // this wrapper needs to return "true" for success.
+ // the fseek call itself returns 0 on succeess
+ return !fseek($this->handle, $offset, $whence);
}
@@ -477,7 +500,7 @@ class Stream {
if ($this->privateKey === false) {
// cleanup
- if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb') {
+ if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb' && !$this->isLocalTmpFile) {
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -498,6 +521,7 @@ class Stream {
if (
$this->meta['mode'] !== 'r' &&
$this->meta['mode'] !== 'rb' &&
+ $this->isLocalTmpFile === false &&
$this->size > 0 &&
$this->unencryptedSize > 0
) {
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index bf7c49504a2..8a5dfabeec1 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -241,11 +241,9 @@ class Util {
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $row = $result->fetchRow();
- if (isset($row['recovery_enabled'])) {
- $recoveryEnabled[] = $row['recovery_enabled'];
- }
+ $row = $result->fetchRow();
+ if ($row && isset($row['recovery_enabled'])) {
+ $recoveryEnabled[] = $row['recovery_enabled'];
}
}
@@ -289,7 +287,7 @@ class Util {
$sql = 'UPDATE `*PREFIX*encryption` SET `recovery_enabled` = ? WHERE `uid` = ?';
$args = array(
- $enabled,
+ $enabled ? '1' : '0',
$this->userId
);
@@ -415,69 +413,42 @@ class Util {
}
/**
- * @brief Fetch the last lines of a file efficiently
- * @note Safe to use on large files; does not read entire file to memory
- * @note Derivative of http://tekkie.flashbit.net/php/tail-functionality-in-php
- */
- public function tail($filename, $numLines) {
-
- \OC_FileProxy::$enabled = false;
-
- $text = '';
- $pos = -1;
- $handle = $this->view->fopen($filename, 'r');
-
- while ($numLines > 0) {
-
- --$pos;
-
- if (fseek($handle, $pos, SEEK_END) !== 0) {
-
- rewind($handle);
- $numLines = 0;
-
- } elseif (fgetc($handle) === "\n") {
-
- --$numLines;
-
- }
-
- $block_size = (-$pos) % 8192;
- if ($block_size === 0 || $numLines === 0) {
-
- $text = fread($handle, ($block_size === 0 ? 8192 : $block_size)) . $text;
-
- }
- }
-
- fclose($handle);
-
- \OC_FileProxy::$enabled = true;
-
- return $text;
- }
-
- /**
* @brief Check if a given path identifies an encrypted file
* @param string $path
* @return boolean
*/
public function isEncryptedPath($path) {
- $relPath = Helper::getPathToRealFile($path);
-
- if ($relPath === false) {
- $relPath = Helper::stripUserFilesPath($path);
- }
-
- $fileKey = Keymanager::getFileKey($this->view, $this, $relPath);
+ // Disable encryption proxy so data retrieved is in its
+ // original form
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
- if ($fileKey === false) {
- return false;
+ // we only need 24 byte from the last chunk
+ $data = '';
+ $handle = $this->view->fopen($path, 'r');
+ if (is_resource($handle)) {
+ // suppress fseek warining, we handle the case that fseek doesn't
+ // work in the else branch
+ if (@fseek($handle, -24, SEEK_END) === 0) {
+ $data = fgets($handle);
+ } else {
+ // if fseek failed on the storage we create a local copy from the file
+ // and read this one
+ fclose($handle);
+ $localFile = $this->view->getLocalFile($path);
+ $handle = fopen($localFile, 'r');
+ if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) {
+ $data = fgets($handle);
+ }
+ }
+ fclose($handle);
}
- return true;
+ // re-enable proxy
+ \OC_FileProxy::$enabled = $proxyStatus;
+ return Crypt::isCatfileContent($data);
}
/**
@@ -523,7 +494,20 @@ class Util {
$lastChunckPos = ($lastChunkNr * 8192);
// seek to end
- fseek($stream, $lastChunckPos);
+ if (@fseek($stream, $lastChunckPos) === -1) {
+ // storage doesn't support fseek, we need a local copy
+ fclose($stream);
+ $localFile = $this->view->getLocalFile($path);
+ Helper::addTmpFileToMapper($localFile, $path);
+ $stream = fopen('crypt://' . $localFile, "r");
+ if (fseek($stream, $lastChunckPos) === -1) {
+ // if fseek also fails on the local storage, than
+ // there is nothing we can do
+ fclose($stream);
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t determine size of "' . $path, \OCP\Util::ERROR);
+ return $result;
+ }
+ }
// get the content of the last chunk
$lastChunkContent = fread($stream, $lastChunkSize);
@@ -985,8 +969,8 @@ class Util {
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $row = $result->fetchRow();
+ $row = $result->fetchRow();
+ if ($row) {
$path = substr($row['path'], strlen('files'));
}
}
@@ -1266,11 +1250,9 @@ class Util {
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $row = $result->fetchRow();
- if (isset($row['migration_status'])) {
- $migrationStatus[] = $row['migration_status'];
- }
+ $row = $result->fetchRow();
+ if ($row && isset($row['migration_status'])) {
+ $migrationStatus[] = $row['migration_status'];
}
}
@@ -1450,9 +1432,7 @@ class Util {
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $row = $result->fetchRow();
- }
+ $row = $result->fetchRow();
}
return $row;
@@ -1476,9 +1456,7 @@ class Util {
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $row = $result->fetchRow();
- }
+ $row = $result->fetchRow();
}
return $row;
@@ -1497,18 +1475,16 @@ class Util {
$result = $query->execute(array($id));
- $source = array();
+ $source = null;
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $source = $result->fetchRow();
- }
+ $source = $result->fetchRow();
}
$fileOwner = false;
- if (isset($source['parent'])) {
+ if ($source && isset($source['parent'])) {
$parent = $source['parent'];
@@ -1518,16 +1494,14 @@ class Util {
$result = $query->execute(array($parent));
- $item = array();
+ $item = null;
if (\OCP\DB::isError($result)) {
\OCP\Util::writeLog('Encryption library', \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
} else {
- if ($result->numRows() > 0) {
- $item = $result->fetchRow();
- }
+ $item = $result->fetchRow();
}
- if (isset($item['parent'])) {
+ if ($item && isset($item['parent'])) {
$parent = $item['parent'];
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php
index cd2be70a8fe..4b46e976b81 100644
--- a/apps/files_encryption/tests/helper.php
+++ b/apps/files_encryption/tests/helper.php
@@ -8,6 +8,7 @@
require_once __DIR__ . '/../lib/helper.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -16,6 +17,18 @@ use OCA\Encryption;
*/
class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
+ const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1";
+
+ public static function setUpBeforeClass() {
+ // create test user
+ \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
+ }
+
+ public static function tearDownAfterClass() {
+ // cleanup test user
+ \OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
+ }
+
/**
* @medium
*/
@@ -64,4 +77,28 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$this->assertEquals($relativePath, Encryption\Helper::getPathToRealFile($cachePath));
}
+ function testGetUser() {
+
+ $path1 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/files/foo/bar.txt";
+ $path2 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/cache/foo/bar.txt";
+ $path3 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/thumbnails/foo";
+ $path4 ="/" . "/" . self::TEST_ENCRYPTION_HELPER_USER1;
+
+ // if we are logged-in every path should return the currently logged-in user
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path3));
+
+ // now log out
+ \Test_Encryption_Util::logoutHelper();
+
+ // now we should only get the user from /user/files and user/cache paths
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path1));
+ $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path2));
+
+ $this->assertFalse(Encryption\Helper::getUser($path3));
+ $this->assertFalse(Encryption\Helper::getUser($path4));
+
+ // Log-in again
+ \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
+ }
+
}
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index a22f12411f4..419f95e1a38 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -44,8 +44,10 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
/**
* @var \OC_FilesystemView
*/
- public $view;
+ public $view; // view in /data/user/files
+ public $rootView; // view on /data/user
public $data;
+ public $filename;
public static function setUpBeforeClass() {
// reset backend
@@ -74,9 +76,12 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
// init filesystem view
$this->view = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files');
+ $this->rootView = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 );
// init short data
$this->data = 'hats';
+ $this->filename = 'enc_proxy_tests-' . time() . '.txt';
+
}
public static function tearDownAfterClass() {
@@ -90,21 +95,71 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
*/
function testPostFileSize() {
- // generate filename
- $filename = 'tmp-' . time() . '.txt';
-
- $this->view->file_put_contents($filename, $this->data);
+ $this->view->file_put_contents($this->filename, $this->data);
\OC_FileProxy::$enabled = false;
- $unencryptedSize = $this->view->filesize($filename);
+ $unencryptedSize = $this->view->filesize($this->filename);
\OC_FileProxy::$enabled = true;
- $encryptedSize = $this->view->filesize($filename);
+ $encryptedSize = $this->view->filesize($this->filename);
$this->assertTrue($encryptedSize !== $unencryptedSize);
+ // cleanup
+ $this->view->unlink($this->filename);
+
+ }
+
+ function testPreUnlinkWithoutTrash() {
+
+ // remember files_trashbin state
+ $stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
+
+ // we want to tests with app files_trashbin enabled
+ \OC_App::disable('files_trashbin');
+
+ $this->view->file_put_contents($this->filename, $this->data);
+
+ // create a dummy file that we can delete something outside of data/user/files
+ $this->rootView->file_put_contents("dummy.txt", $this->data);
+
+ // check if all keys are generated
+ $this->assertTrue($this->rootView->file_exists(
+ '/files_encryption/share-keys/'
+ . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey'));
+ $this->assertTrue($this->rootView->file_exists(
+ '/files_encryption/keyfiles/' . $this->filename . '.key'));
+
+
+ // delete dummy file outside of data/user/files
+ $this->rootView->unlink("dummy.txt");
+
+ // all keys should still exist
+ $this->assertTrue($this->rootView->file_exists(
+ '/files_encryption/share-keys/'
+ . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey'));
+ $this->assertTrue($this->rootView->file_exists(
+ '/files_encryption/keyfiles/' . $this->filename . '.key'));
+
+
+ // delete the file in data/user/files
+ $this->view->unlink($this->filename);
+
+ // now also the keys should be gone
+ $this->assertFalse($this->rootView->file_exists(
+ '/files_encryption/share-keys/'
+ . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey'));
+ $this->assertFalse($this->rootView->file_exists(
+ '/files_encryption/keyfiles/' . $this->filename . '.key'));
+
+ if ($stateFilesTrashbin) {
+ OC_App::enable('files_trashbin');
+ }
+ else {
+ OC_App::disable('files_trashbin');
+ }
}
}
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index 6a29d2428dc..e55427620a6 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -649,9 +649,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
* @large
*/
function testRecoveryFile() {
- $this->markTestIncomplete(
- 'No idea what\'s wrong here, this works perfectly in real-world. removeRecoveryKeys(\'/\') L709 removes correctly the keys, but for some reasons afterwards also the top-level folder "share-keys" is gone...'
- );
+
// login as admin
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -754,13 +752,13 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
* @large
*/
function testRecoveryForUser() {
- $this->markTestIncomplete(
- 'This test drives Jenkins crazy - "Cannot modify header information - headers already sent" - line 811'
- );
+
// login as admin
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
- \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
+ $result = \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
+ $this->assertTrue($result);
+
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
// login as user2
@@ -771,6 +769,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(1));
+ // add recovery keys for existing files (e.g. the auto-generated welcome.txt)
+ $util->addRecoveryKeys();
+
// create folder structure
$this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
$this->view->mkdir(
@@ -809,6 +810,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// change password
\OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
+ $params = array('uid' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2,
+ 'password' => 'test',
+ 'recoveryPassword' => 'test123');
+ \OCA\Encryption\Hooks::setPassphrase($params);
// login as user2
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
@@ -823,8 +828,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $retrievedCryptedFile2);
// cleanup
- $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
- $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->filename);
+ $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1);
+ $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
// check if share key for user and recovery exists
$this->assertFalse($this->view->file_exists(
@@ -889,8 +894,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
} catch (Exception $e) {
$this->assertEquals(0, strpos($e->getMessage(), "Following users are not set up for encryption"));
}
-
-
+
+
// login as admin
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index 530ee3a7b2d..2767bbe512b 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -180,4 +180,43 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
// tear down
$view->unlink($filename);
}
+
+ /**
+ * @medium
+ * @brief test if stream wrapper can read files outside from the data folder
+ */
+ function testStreamFromLocalFile() {
+
+ $filename = '/' . $this->userId . '/files/' . 'tmp-' . time().'.txt';
+
+ $tmpFilename = "/tmp/" . time() . ".txt";
+
+ // write an encrypted file
+ $cryptedFile = $this->view->file_put_contents($filename, $this->dataShort);
+
+ // Test that data was successfully written
+ $this->assertTrue(is_int($cryptedFile));
+
+ // create a copy outside of the data folder in /tmp
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
+ $encryptedContent = $this->view->file_get_contents($filename);
+ \OC_FileProxy::$enabled = $proxyStatus;
+
+ file_put_contents($tmpFilename, $encryptedContent);
+
+ \OCA\Encryption\Helper::addTmpFileToMapper($tmpFilename, $filename);
+
+ // try to read the file from /tmp
+ $handle = fopen("crypt://".$tmpFilename, "r");
+ $contentFromTmpFile = stream_get_contents($handle);
+
+ // check if it was successful
+ $this->assertEquals($this->dataShort, $contentFromTmpFile);
+
+ // clean up
+ unlink($tmpFilename);
+ $this->view->unlink($filename);
+
+ }
}
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index e8dfb74f3f3..b1904cbadc7 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -134,6 +134,41 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
/**
* @medium
+ * @brief test detection of encrypted files
+ */
+ function testIsEncryptedPath() {
+
+ $util = new Encryption\Util($this->view, $this->userId);
+
+ self::loginHelper($this->userId);
+
+ $unencryptedFile = '/tmpUnencrypted-' . time() . '.txt';
+ $encryptedFile = '/tmpEncrypted-' . time() . '.txt';
+
+ // Disable encryption proxy to write a unencrypted file
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
+
+ $this->view->file_put_contents($this->userId . '/files/' . $unencryptedFile, $this->dataShort);
+
+ // Re-enable proxy - our work is done
+ \OC_FileProxy::$enabled = $proxyStatus;
+
+ // write a encrypted file
+ $this->view->file_put_contents($this->userId . '/files/' . $encryptedFile, $this->dataShort);
+
+ // test if both files are detected correctly
+ $this->assertFalse($util->isEncryptedPath($this->userId . '/files/' . $unencryptedFile));
+ $this->assertTrue($util->isEncryptedPath($this->userId . '/files/' . $encryptedFile));
+
+ // cleanup
+ $this->view->unlink($this->userId . '/files/' . $unencryptedFile, $this->dataShort);
+ $this->view->unlink($this->userId . '/files/' . $encryptedFile, $this->dataShort);
+
+ }
+
+ /**
+ * @medium
* @brief test setup of encryption directories
*/
function testSetupServerSide() {
@@ -416,6 +451,12 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
OCA\Encryption\Hooks::login($params);
}
+ public static function logoutHelper() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::tearDown();
+ }
+
/**
* helper function to set migration status to the right value
* to be able to test the migration path
diff --git a/apps/files_external/3rdparty/smb4php/smb.php b/apps/files_external/3rdparty/smb4php/smb.php
index 87638271f0e..e454ddecb81 100644
--- a/apps/files_external/3rdparty/smb4php/smb.php
+++ b/apps/files_external/3rdparty/smb4php/smb.php
@@ -19,6 +19,10 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
+# Addition 17/12/2012 Frank Karlitschek (frank@owncloud.org)
+# On the official website http://www.phpclasses.org/smb4php the
+# license is listed as LGPL so we assume that this is
+# dual-licensed GPL/LGPL
###################################################################
define ('SMB4PHP_VERSION', '0.8');
@@ -160,7 +164,7 @@ class smb {
$i = ($mode == 'servers') ? array ($name, "server") : array ($name, "workgroup", $master);
break;
case 'files':
- list ($attr, $name) = preg_match ("/^(.*)[ ]+([D|A|H|S|R]+)$/", trim ($regs[1]), $regs2)
+ list ($attr, $name) = preg_match ("/^(.*)[ ]+([D|A|H|N|S|R]+)$/", trim ($regs[1]), $regs2)
? array (trim ($regs2[2]), trim ($regs2[1]))
: array ('', trim ($regs[1]));
list ($his, $im) = array (
diff --git a/apps/files_external/l10n/es_MX.php b/apps/files_external/l10n/es_MX.php
new file mode 100644
index 00000000000..b508df8476a
--- /dev/null
+++ b/apps/files_external/l10n/es_MX.php
@@ -0,0 +1,28 @@
+<?php
+$TRANSLATIONS = array(
+"Access granted" => "Acceso concedido",
+"Error configuring Dropbox storage" => "Error configurando el almacenamiento de Dropbox",
+"Grant access" => "Conceder acceso",
+"Please provide a valid Dropbox app key and secret." => "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.",
+"Error configuring Google Drive storage" => "Error configurando el almacenamiento de Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El cliente \"smbclient\" no se encuentra instalado. El montado de carpetas CIFS/SMB no es posible. Por favor pida al administrador de su sistema que lo instale.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El soporte de FTP en PHP no se encuentra instalado. El montado de carpetas FTP no es posible. Por favor pida al administrador de su sistema que lo instale.",
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Advertencia:</b> El soporte de Curl en PHP no está activado ni instalado. El montado de ownCloud, WebDAV o GoogleDrive no es posible. Pida al administrador de su sistema que lo instale.",
+"External Storage" => "Almacenamiento externo",
+"Folder name" => "Nombre de la carpeta",
+"External storage" => "Almacenamiento externo",
+"Configuration" => "Configuración",
+"Options" => "Opciones",
+"Applicable" => "Aplicable",
+"Add storage" => "Añadir almacenamiento",
+"None set" => "No se ha configurado",
+"All Users" => "Todos los usuarios",
+"Groups" => "Grupos",
+"Users" => "Usuarios",
+"Delete" => "Eliminar",
+"Enable User External Storage" => "Habilitar almacenamiento externo de usuario",
+"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo",
+"SSL root certificates" => "Certificados raíz SSL",
+"Import Root Certificate" => "Importar certificado raíz"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_external/l10n/sk.php b/apps/files_external/l10n/sk.php
new file mode 100644
index 00000000000..3129cf5c411
--- /dev/null
+++ b/apps/files_external/l10n/sk.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Delete" => "Odstrániť"
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 12836c7b88c..122cc57debc 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -431,7 +431,7 @@ class OC_Mount_Config {
*/
public static function checksmbclient() {
if(function_exists('shell_exec')) {
- $output=shell_exec('which smbclient');
+ $output=shell_exec('which smbclient 2> /dev/null');
return !empty($output);
}else{
return false;
diff --git a/apps/files_sharing/ajax/publicpreview.php b/apps/files_sharing/ajax/publicpreview.php
index 8c3085f1589..54a9806e8bf 100644
--- a/apps/files_sharing/ajax/publicpreview.php
+++ b/apps/files_sharing/ajax/publicpreview.php
@@ -36,7 +36,9 @@ if(!isset($linkedItem['uid_owner']) || !isset($linkedItem['file_source'])) {
exit;
}
-$userId = $linkedItem['uid_owner'];
+$rootLinkItem = OCP\Share::resolveReShare($linkedItem);
+$userId = $rootLinkItem['uid_owner'];
+
\OC_Util::setupFS($userId);
\OC\Files\Filesystem::initMountPoints($userId);
$view = new \OC\Files\View('/' . $userId . '/files');
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 3ccb35e327a..060d4dfedc7 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -65,7 +65,7 @@ body {
}
footer {
- margin-top: 45px;
+ margin-top: 65px;
}
p.info {
diff --git a/apps/files_sharing/l10n/da.php b/apps/files_sharing/l10n/da.php
index aef3ad98811..849b0e28d30 100644
--- a/apps/files_sharing/l10n/da.php
+++ b/apps/files_sharing/l10n/da.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"This share is password-protected" => "Delingen er beskyttet af kodeord",
"The password is wrong. Try again." => "Kodeordet er forkert. Prøv igen.",
"Password" => "Kodeord",
"Sorry, this link doesn’t seem to work anymore." => "Desværre, dette link ser ikke ud til at fungerer længere.",
@@ -13,6 +14,7 @@ $TRANSLATIONS = array(
"Download" => "Download",
"Upload" => "Upload",
"Cancel upload" => "Fortryd upload",
-"No preview available for" => "Forhåndsvisning ikke tilgængelig for"
+"No preview available for" => "Forhåndsvisning ikke tilgængelig for",
+"Direct link" => "Direkte link"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php
index 79387a91472..3ea666504b1 100644
--- a/apps/files_sharing/l10n/el.php
+++ b/apps/files_sharing/l10n/el.php
@@ -1,19 +1,19 @@
<?php
$TRANSLATIONS = array(
"This share is password-protected" => "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
-"The password is wrong. Try again." => "Εσφαλμένο συνθηματικό. Προσπαθήστε ξανά.",
-"Password" => "Συνθηματικό",
+"The password is wrong. Try again." => "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.",
+"Password" => "Κωδικός πρόσβασης",
"Sorry, this link doesn’t seem to work anymore." => "Συγγνώμη, αυτός ο σύνδεσμος μοιάζει να μην ισχύει πια.",
"Reasons might be:" => "Οι λόγοι μπορεί να είναι:",
"the item was removed" => "το αντικείμενο απομακρύνθηκε",
"the link expired" => "ο σύνδεσμος έληξε",
"sharing is disabled" => "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." => "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
-"%s shared the folder %s with you" => "%s μοιράστηκε τον φάκελο %s μαζί σας",
-"%s shared the file %s with you" => "%s μοιράστηκε το αρχείο %s μαζί σας",
+"%s shared the folder %s with you" => "Ο %s μοιράστηκε τον φάκελο %s μαζί σας",
+"%s shared the file %s with you" => "Ο %s μοιράστηκε το αρχείο %s μαζί σας",
"Download" => "Λήψη",
"Upload" => "Μεταφόρτωση",
-"Cancel upload" => "Ακύρωση αποστολής",
+"Cancel upload" => "Ακύρωση μεταφόρτωσης",
"No preview available for" => "Δεν υπάρχει διαθέσιμη προεπισκόπηση για",
"Direct link" => "Άμεσος σύνδεσμος"
);
diff --git a/apps/files_sharing/l10n/es_CL.php b/apps/files_sharing/l10n/es_CL.php
new file mode 100644
index 00000000000..31dc045870c
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CL.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"Password" => "Clave",
+"Upload" => "Subir"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/es_MX.php b/apps/files_sharing/l10n/es_MX.php
new file mode 100644
index 00000000000..9100ef8b35f
--- /dev/null
+++ b/apps/files_sharing/l10n/es_MX.php
@@ -0,0 +1,20 @@
+<?php
+$TRANSLATIONS = array(
+"This share is password-protected" => "Este elemento compartido esta protegido por contraseña",
+"The password is wrong. Try again." => "La contraseña introducida es errónea. Inténtelo de nuevo.",
+"Password" => "Contraseña",
+"Sorry, this link doesn’t seem to work anymore." => "Lo siento, este enlace al parecer ya no funciona.",
+"Reasons might be:" => "Las causas podrían ser:",
+"the item was removed" => "el elemento fue eliminado",
+"the link expired" => "el enlace expiró",
+"sharing is disabled" => "compartir está desactivado",
+"For more info, please ask the person who sent this link." => "Para mayor información, contacte a la persona que le envió el enlace.",
+"%s shared the folder %s with you" => "%s compartió la carpeta %s contigo",
+"%s shared the file %s with you" => "%s compartió el archivo %s contigo",
+"Download" => "Descargar",
+"Upload" => "Subir",
+"Cancel upload" => "Cancelar subida",
+"No preview available for" => "No hay vista previa disponible para",
+"Direct link" => "Enlace directo"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_sharing/l10n/ko.php b/apps/files_sharing/l10n/ko.php
index 90f59ed1673..03c4c1aea94 100644
--- a/apps/files_sharing/l10n/ko.php
+++ b/apps/files_sharing/l10n/ko.php
@@ -1,18 +1,20 @@
<?php
$TRANSLATIONS = array(
-"The password is wrong. Try again." => "비밀번호가 틀립니다. 다시 입력해주세요.",
+"This share is password-protected" => "이 공유는 암호로 보호되어 있습니다",
+"The password is wrong. Try again." => "암호가 잘못되었습니다. 다시 입력해 주십시오.",
"Password" => "암호",
-"Sorry, this link doesn’t seem to work anymore." => "죄송합니다만 이 링크는 더이상 작동되지 않습니다.",
+"Sorry, this link doesn’t seem to work anymore." => "죄송합니다. 이 링크는 더 이상 작동하지 않습니다.",
"Reasons might be:" => "이유는 다음과 같을 수 있습니다:",
-"the item was removed" => "이 항목은 삭제되었습니다",
-"the link expired" => "링크가 만료되었습니다",
-"sharing is disabled" => "공유가 비활성되었습니다",
-"For more info, please ask the person who sent this link." => "더 자세한 설명은 링크를 보내신 분에게 여쭤보십시오",
+"the item was removed" => "항목이 삭제됨",
+"the link expired" => "링크가 만료됨",
+"sharing is disabled" => "공유가 비활성화됨",
+"For more info, please ask the person who sent this link." => "자세한 정보는 링크를 보낸 사람에게 문의하십시오.",
"%s shared the folder %s with you" => "%s 님이 폴더 %s을(를) 공유하였습니다",
"%s shared the file %s with you" => "%s 님이 파일 %s을(를) 공유하였습니다",
"Download" => "다운로드",
"Upload" => "업로드",
"Cancel upload" => "업로드 취소",
-"No preview available for" => "다음 항목을 미리 볼 수 없음:"
+"No preview available for" => "다음 항목을 미리 볼 수 없음:",
+"Direct link" => "직접 링크"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_sharing/l10n/sk.php b/apps/files_sharing/l10n/sk.php
new file mode 100644
index 00000000000..72c9039571e
--- /dev/null
+++ b/apps/files_sharing/l10n/sk.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Download" => "Stiahnuť"
+);
+$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php
index e2978e12bfb..1dc53428a7f 100644
--- a/apps/files_sharing/lib/permissions.php
+++ b/apps/files_sharing/lib/permissions.php
@@ -42,6 +42,19 @@ class Shared_Permissions extends Permissions {
}
}
+ private function getFile($fileId, $user) {
+ if ($fileId == -1) {
+ return \OCP\PERMISSION_READ;
+ }
+ $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE,
+ null, false);
+ if ($source) {
+ return $source['permissions'];
+ } else {
+ return -1;
+ }
+ }
+
/**
* set the permissions of a file
*
@@ -82,7 +95,7 @@ class Shared_Permissions extends Permissions {
if ($parentId === -1) {
return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_PERMISSIONS);
}
- $permissions = $this->get($parentId, $user);
+ $permissions = $this->getFile($parentId, $user);
$query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `parent` = ?');
$result = $query->execute(array($parentId));
$filePermissions = array();
diff --git a/apps/files_sharing/tests/base.php b/apps/files_sharing/tests/base.php
index 689c80cb9e6..3e283271f5d 100644
--- a/apps/files_sharing/tests/base.php
+++ b/apps/files_sharing/tests/base.php
@@ -132,8 +132,8 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
$share = Null;
- if ($result && $result->numRows() > 0) {
- $share = $result->fetchRow();
+ if ($result) {
+ $share = $result->fetchRow();
}
return $share;
diff --git a/apps/files_sharing/tests/permissions.php b/apps/files_sharing/tests/permissions.php
new file mode 100644
index 00000000000..e301d384a49
--- /dev/null
+++ b/apps/files_sharing/tests/permissions.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2013 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+require_once __DIR__ . '/base.php';
+
+class Test_Files_Sharing_Permissions extends Test_Files_Sharing_Base {
+
+ function setUp() {
+ parent::setUp();
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ // prepare user1's dir structure
+ $textData = "dummy file data\n";
+ $this->view->mkdir('container');
+ $this->view->mkdir('container/shareddir');
+ $this->view->mkdir('container/shareddir/subdir');
+ $this->view->mkdir('container/shareddirrestricted');
+ $this->view->mkdir('container/shareddirrestricted/subdir');
+ $this->view->file_put_contents('container/shareddir/textfile.txt', $textData);
+ $this->view->file_put_contents('container/shareddirrestricted/textfile1.txt', $textData);
+
+ list($this->ownerStorage, $internalPath) = $this->view->resolvePath('');
+ $this->ownerCache = $this->ownerStorage->getCache();
+ $this->ownerStorage->getScanner()->scan('');
+
+ // share "shareddir" with user2
+ $fileinfo = $this->view->getFileInfo('container/shareddir');
+ \OCP\Share::shareItem('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2, 31);
+ $fileinfo2 = $this->view->getFileInfo('container/shareddirrestricted');
+ \OCP\Share::shareItem('folder', $fileinfo2['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2, 7);
+
+ // login as user2
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ // retrieve the shared storage
+ $this->secondView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2);
+ list($this->sharedStorage, $internalPath) = $this->secondView->resolvePath('files/Shared/shareddir');
+ $this->sharedCache = $this->sharedStorage->getCache();
+ }
+
+ function tearDown() {
+ $this->sharedCache->clear();
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $fileinfo = $this->view->getFileInfo('container/shareddir');
+ \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2);
+ $fileinfo2 = $this->view->getFileInfo('container/shareddirrestricted');
+ \OCP\Share::unshare('folder', $fileinfo2['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ self::TEST_FILES_SHARING_API_USER2);
+
+ $this->view->deleteAll('container');
+
+ $this->ownerCache->clear();
+
+ parent::tearDown();
+ }
+
+ /**
+ * Test that the permissions of shared directory are returned correctly
+ */
+ function testGetPermissions() {
+ $sharedDirPerms = $this->sharedStorage->getPermissions('shareddir');
+ $this->assertEquals(31, $sharedDirPerms);
+ $sharedDirPerms = $this->sharedStorage->getPermissions('shareddir/textfile.txt');
+ $this->assertEquals(31, $sharedDirPerms);
+ $sharedDirRestrictedPerms = $this->sharedStorage->getPermissions('shareddirrestricted');
+ $this->assertEquals(7, $sharedDirRestrictedPerms);
+ $sharedDirRestrictedPerms = $this->sharedStorage->getPermissions('shareddirrestricted/textfile.txt');
+ $this->assertEquals(7, $sharedDirRestrictedPerms);
+ }
+
+ /**
+ * Test that the permissions of shared directory are returned correctly
+ */
+ function testGetDirectoryPermissions() {
+ $contents = $this->secondView->getDirectoryContent('files/Shared/shareddir');
+ $this->assertEquals('subdir', $contents[0]['name']);
+ $this->assertEquals(31, $contents[0]['permissions']);
+ $this->assertEquals('textfile.txt', $contents[1]['name']);
+ $this->assertEquals(31, $contents[1]['permissions']);
+ $contents = $this->secondView->getDirectoryContent('files/Shared/shareddirrestricted');
+ $this->assertEquals('subdir', $contents[0]['name']);
+ $this->assertEquals(7, $contents[0]['permissions']);
+ $this->assertEquals('textfile1.txt', $contents[1]['name']);
+ $this->assertEquals(7, $contents[1]['permissions']);
+ }
+}
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
index 48e9629f7de..1ff5bac6130 100644
--- a/apps/files_trashbin/js/trash.js
+++ b/apps/files_trashbin/js/trash.js
@@ -152,6 +152,14 @@ $(document).ready(function() {
$('#fileList').on('click', 'td.filename input', function() {
var checkbox = $(this).parent().children('input:checkbox');
$(checkbox).parent().parent().toggleClass('selected');
+ if ($(checkbox).is(':checked')) {
+ var selectedCount = $('td.filename input:checkbox:checked').length;
+ if (selectedCount === $('td.filename input:checkbox').length) {
+ $('#select_all').prop('checked', true);
+ }
+ } else {
+ $('#select_all').prop('checked',false);
+ }
procesSelection();
});
diff --git a/apps/files_trashbin/l10n/be.php b/apps/files_trashbin/l10n/be.php
index 50df7ff5a97..6a34f1fe246 100644
--- a/apps/files_trashbin/l10n/be.php
+++ b/apps/files_trashbin/l10n/be.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"_%n folder_::_%n folders_" => array("","","",""),
-"_%n file_::_%n files_" => array("","","","")
+"Error" => "Памылка"
);
$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php
index ffeafb7e9d5..b4ee30c578d 100644
--- a/apps/files_trashbin/l10n/el.php
+++ b/apps/files_trashbin/l10n/el.php
@@ -3,11 +3,11 @@ $TRANSLATIONS = array(
"Couldn't delete %s permanently" => "Αδύνατη η μόνιμη διαγραφή του %s",
"Couldn't restore %s" => "Αδυναμία επαναφοράς %s",
"Error" => "Σφάλμα",
-"restored" => "έγινε επαναφορά",
+"restored" => "επαναφέρθηκαν",
"Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
"Name" => "Όνομα",
"Restore" => "Επαναφορά",
-"Deleted" => "Διαγράφηκε",
+"Deleted" => "Διαγραμμένα",
"Delete" => "Διαγραφή",
"Deleted Files" => "Διαγραμμένα Αρχεία"
);
diff --git a/apps/files_trashbin/l10n/es_MX.php b/apps/files_trashbin/l10n/es_MX.php
index 0acad00e8b5..db7a617729b 100644
--- a/apps/files_trashbin/l10n/es_MX.php
+++ b/apps/files_trashbin/l10n/es_MX.php
@@ -1,6 +1,14 @@
<?php
$TRANSLATIONS = array(
-"_%n folder_::_%n folders_" => array("",""),
-"_%n file_::_%n files_" => array("","")
+"Couldn't delete %s permanently" => "No se puede eliminar %s permanentemente",
+"Couldn't restore %s" => "No se puede restaurar %s",
+"Error" => "Error",
+"restored" => "recuperado",
+"Nothing in here. Your trash bin is empty!" => "No hay nada aquí. ¡Tu papelera esta vacía!",
+"Name" => "Nombre",
+"Restore" => "Recuperar",
+"Deleted" => "Eliminado",
+"Delete" => "Eliminar",
+"Deleted Files" => "Archivos Eliminados"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ko.php b/apps/files_trashbin/l10n/ko.php
index 809ecfea15d..9c3cd2de15f 100644
--- a/apps/files_trashbin/l10n/ko.php
+++ b/apps/files_trashbin/l10n/ko.php
@@ -1,14 +1,14 @@
<?php
$TRANSLATIONS = array(
-"Couldn't delete %s permanently" => "%s를 영구적으로 삭제할수 없습니다",
-"Couldn't restore %s" => "%s를 복원할수 없습니다",
+"Couldn't delete %s permanently" => "%s을(를_ 영구적으로 삭제할 수 없습니다",
+"Couldn't restore %s" => "%s을(를) 복원할 수 없습니다",
"Error" => "오류",
"restored" => "복원됨",
-"Nothing in here. Your trash bin is empty!" => "현재 휴지통은 비어있습니다!",
+"Nothing in here. Your trash bin is empty!" => "휴지통이 비어 있습니다!",
"Name" => "이름",
"Restore" => "복원",
"Deleted" => "삭제됨",
"Delete" => "삭제",
-"Deleted Files" => "삭제된 파일들"
+"Deleted Files" => "삭제된 파일"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/ru.php b/apps/files_trashbin/l10n/ru.php
index b6de1948f77..06a4f864c67 100644
--- a/apps/files_trashbin/l10n/ru.php
+++ b/apps/files_trashbin/l10n/ru.php
@@ -8,6 +8,7 @@ $TRANSLATIONS = array(
"Name" => "Имя",
"Restore" => "Восстановить",
"Deleted" => "Удалён",
+"Delete" => "Удалить",
"Deleted Files" => "Удаленные файлы"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_trashbin/l10n/sk.php b/apps/files_trashbin/l10n/sk.php
index 94aaf9b3a94..3129cf5c411 100644
--- a/apps/files_trashbin/l10n/sk.php
+++ b/apps/files_trashbin/l10n/sk.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"_%n folder_::_%n folders_" => array("","",""),
-"_%n file_::_%n files_" => array("","","")
+"Delete" => "Odstrániť"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_trashbin/templates/part.breadcrumb.php b/apps/files_trashbin/templates/part.breadcrumb.php
index 4acc298adbe..fdf78c190d0 100644
--- a/apps/files_trashbin/templates/part.breadcrumb.php
+++ b/apps/files_trashbin/templates/part.breadcrumb.php
@@ -3,11 +3,11 @@
<img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
</a>
</div>
-<?php if(count($_["breadcrumb"])):?>
- <div class="crumb svg"
- data-dir='/'>
+<div class="crumb svg"
+ data-dir='/'>
<a href="<?php p($_['baseURL']); ?>"><?php p($l->t("Deleted Files")); ?></a>
- </div>
+</div>
+<?php if(count($_["breadcrumb"])):?>
<?php endif;?>
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
$crumb = $_["breadcrumb"][$i];
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
index af608e7c042..5337f3b5a48 100644
--- a/apps/files_versions/l10n/el.php
+++ b/apps/files_versions/l10n/el.php
@@ -1,6 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Could not revert: %s" => "Αδυναμία επαναφοράς του: %s",
+"Could not revert: %s" => "Αδυναμία επαναφοράς: %s",
"Versions" => "Εκδόσεις",
"Failed to revert {file} to revision {timestamp}." => "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.",
"More versions..." => "Περισσότερες εκδόσεις...",
diff --git a/apps/files_versions/l10n/es_MX.php b/apps/files_versions/l10n/es_MX.php
new file mode 100644
index 00000000000..b7acc376978
--- /dev/null
+++ b/apps/files_versions/l10n/es_MX.php
@@ -0,0 +1,10 @@
+<?php
+$TRANSLATIONS = array(
+"Could not revert: %s" => "No se puede revertir: %s",
+"Versions" => "Revisiones",
+"Failed to revert {file} to revision {timestamp}." => "No se ha podido revertir {archivo} a revisión {timestamp}.",
+"More versions..." => "Más versiones...",
+"No other versions available" => "No hay otras versiones disponibles",
+"Restore" => "Recuperar"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_versions/l10n/id.php b/apps/files_versions/l10n/id.php
index ee7061805ba..14920cc52fd 100644
--- a/apps/files_versions/l10n/id.php
+++ b/apps/files_versions/l10n/id.php
@@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"Could not revert: %s" => "Tidak dapat mengembalikan: %s",
"Versions" => "Versi",
+"Failed to revert {file} to revision {timestamp}." => "Gagal mengembalikan {file} ke revisi {timestamp}.",
+"More versions..." => "Versi lebih...",
+"No other versions available" => "Tidak ada versi lain yang tersedia",
"Restore" => "Pulihkan"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_versions/l10n/ko.php b/apps/files_versions/l10n/ko.php
index ba951c4107a..bd56c0489bf 100644
--- a/apps/files_versions/l10n/ko.php
+++ b/apps/files_versions/l10n/ko.php
@@ -2,9 +2,9 @@
$TRANSLATIONS = array(
"Could not revert: %s" => "되돌릴 수 없습니다: %s",
"Versions" => "버전",
-"Failed to revert {file} to revision {timestamp}." => "{timestamp} 판의 {file}로 돌리는데 실패했습니다.",
-"More versions..." => "더 많은 버전들...",
-"No other versions available" => "다른 버전을 사용할수 없습니다",
+"Failed to revert {file} to revision {timestamp}." => "{file}을(를) 리비전 {timestamp}으(로) 되돌리는 데 실패하였습니다.",
+"More versions..." => "더 많은 버전...",
+"No other versions available" => "다른 버전을 사용할 수 없습니다",
"Restore" => "복원"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_ldap/l10n/ak.php b/apps/user_ldap/l10n/ak.php
new file mode 100644
index 00000000000..dd5f66761d6
--- /dev/null
+++ b/apps/user_ldap/l10n/ak.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%s group found_::_%s groups found_" => array("",""),
+"_%s user found_::_%s users found_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=n > 1;";
diff --git a/apps/user_ldap/l10n/az.php b/apps/user_ldap/l10n/az.php
new file mode 100644
index 00000000000..bba52d53a1a
--- /dev/null
+++ b/apps/user_ldap/l10n/az.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%s group found_::_%s groups found_" => array(""),
+"_%s user found_::_%s users found_" => array("")
+);
+$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_ldap/l10n/be.php b/apps/user_ldap/l10n/be.php
index 2641c1d1300..089b92efe7b 100644
--- a/apps/user_ldap/l10n/be.php
+++ b/apps/user_ldap/l10n/be.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Error" => "Памылка",
"_%s group found_::_%s groups found_" => array("","","",""),
"_%s user found_::_%s users found_" => array("","","","")
);
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
index 0e32abbf9c3..8369dff4895 100644
--- a/apps/user_ldap/l10n/el.php
+++ b/apps/user_ldap/l10n/el.php
@@ -4,6 +4,10 @@ $TRANSLATIONS = array(
"Failed to delete the server configuration" => "Αποτυχία διαγραφής ρυθμίσεων διακομιστή",
"The configuration is valid and the connection could be established!" => "Οι ρυθμίσεις είναι έγκυρες και η σύνδεση μπορεί να πραγματοποιηθεί!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Οι ρυθμίσεις είναι έγκυρες, αλλά απέτυχε η σύνδεση. Παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή και τα διαπιστευτήρια.",
+"The configuration is invalid. Please have a look at the logs for further details." => "Η διαμόρφωση είναι άκυρη. Παρακαλώ ελέγξτε τα αρχεία σφαλμάτων για περαιτέρω λεπτομέρειες.",
+"No action specified" => "Καμμία εντολή δεν προσδιορίστηκε",
+"No configuration specified" => "Καμμία διαμόρφωση δεν προσδιορίστηκε",
+"No data specified" => "Δεν προσδιορίστηκαν δεδομένα",
"Deletion failed" => "Η διαγραφή απέτυχε",
"Take over settings from recent server configuration?" => "Πάρτε πάνω από τις πρόσφατες ρυθμίσεις διαμόρφωσης του διακομιστή?",
"Keep settings?" => "Διατήρηση ρυθμίσεων;",
@@ -11,16 +15,35 @@ $TRANSLATIONS = array(
"mappings cleared" => "αντιστοιχίες εκκαθαρίστηκαν",
"Success" => "Επιτυχία",
"Error" => "Σφάλμα",
+"Configuration OK" => "Η διαμόρφωση είναι εντάξει",
+"Configuration incorrect" => "Η διαμόρφωση είναι λανθασμένη",
+"Configuration incomplete" => "Η διαμόρφωση είναι ελλιπής",
"Select groups" => "Επιλέξτε ομάδες",
+"Select object classes" => "Επιλογή κλάσης αντικειμένων",
+"Select attributes" => "Επιλογή χαρακτηριστικών",
"Connection test succeeded" => "Επιτυχημένη δοκιμαστική σύνδεση",
"Connection test failed" => "Αποτυχημένη δοκιμαστική σύνδεσης.",
"Do you really want to delete the current Server Configuration?" => "Θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις του διακομιστή;",
"Confirm Deletion" => "Επιβεβαίωση Διαγραφής",
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("",""),
+"_%s group found_::_%s groups found_" => array("%s ομάδα βρέθηκε","%s ομάδες βρέθηκαν"),
+"_%s user found_::_%s users found_" => array("%s χρήστης βρέθηκε","%s χρήστες βρέθηκαν"),
+"Invalid Host" => "Άκυρος εξυπηρετητής",
+"Could not find the desired feature" => "Αδυναμία εύρεσης επιθυμητου χαρακτηριστικού",
"Save" => "Αποθήκευση",
"Test Configuration" => "Δοκιμαστικες ρυθμισεις",
"Help" => "Βοήθεια",
+"Limit the access to %s to groups meeting this criteria:" => "Περιορισμός πρόσβασης %s σε ομάδες που ταιριάζουν αυτά τα κριτήρια:",
+"only those object classes:" => "μόνο αυτές οι κλάσεις αντικειμένων:",
+"only from those groups:" => "μόνο από αυτές τις ομάδες:",
+"Edit raw filter instead" => "Επεξεργασία πρωτογενούς φίλτρου αντί αυτού",
+"Raw LDAP filter" => "Πρωτογενές φίλτρο ",
+"The filter specifies which LDAP groups shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιες ομάδες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.",
+"groups found" => "ομάδες βρέθηκαν",
+"What attribute shall be used as login name:" => "Ποια ιδιότητα θα χρησιμοποιηθεί ως όνομα σύνδεσης:",
+"LDAP Username:" => "Όνομα χρήστη LDAP:",
+"LDAP Email Address:" => "Διεύθυνση ηλ. ταχυδρομείου LDAP:",
+"Other Attributes:" => "Άλλες Ιδιότητες:",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Ορίζει το φίλτρο που θα εφαρμοστεί, όταν επιχειριθεί σύνδεση. Το %%uid αντικαθιστά το όνομα χρήστη κατά τη σύνδεση. Παράδειγμα: \"uid=%%uid\"",
"Add Server Configuration" => "Προσθήκη Ρυθμίσεων Διακομιστή",
"Host" => "Διακομιστής",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Μπορείτε να παραλείψετε το πρωτόκολλο, εκτός αν απαιτείται SSL. Σε αυτή την περίπτωση ξεκινήστε με ldaps://",
@@ -31,6 +54,9 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Για ανώνυμη πρόσβαση, αφήστε κενά τα πεδία DN και Pasword.",
"One Base DN per line" => "Ένα DN Βάσης ανά γραμμή ",
"You can specify Base DN for users and groups in the Advanced tab" => "Μπορείτε να καθορίσετε το Base DN για χρήστες και ομάδες από την καρτέλα Προηγμένες ρυθμίσεις",
+"Limit the access to %s to users meeting this criteria:" => "Περιορισμός πρόσβασης %s σε χρήστες που ταιριάζουν αυτά τα κριτήρια:",
+"The filter specifies which LDAP users shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιοι χρήστες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.",
+"users found" => "χρήστες βρέθηκαν",
"Back" => "Επιστροφή",
"Continue" => "Συνέχεια",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Προσοχή:</b> Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.",
@@ -44,15 +70,18 @@ $TRANSLATIONS = array(
"Disable Main Server" => "Απενεργοποιηση του κεντρικου διακομιστη",
"Case insensitve LDAP server (Windows)" => "LDAP server (Windows) με διάκριση πεζών-ΚΕΦΑΛΑΙΩΝ",
"Turn off SSL certificate validation." => "Απενεργοποίηση επικύρωσης πιστοποιητικού SSL.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Δεν προτείνεται, χρησιμοποιείστε το μόνο για δοκιμές! Εάν η σύνδεση λειτουργεί μόνο με αυτή την επιλογή, εισάγετε το πιστοποιητικό SSL του διακομιστή LDAP στο %s διακομιστή σας.",
"Cache Time-To-Live" => "Cache Time-To-Live",
"in seconds. A change empties the cache." => "σε δευτερόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache.",
"Directory Settings" => "Ρυθμίσεις Καταλόγου",
"User Display Name Field" => "Πεδίο Ονόματος Χρήστη",
+"The LDAP attribute to use to generate the user's display name." => "Η ιδιότητα LDAP προς χρήση για δημιουργία του προβαλλόμενου ονόματος χρήστη.",
"Base User Tree" => "Base User Tree",
"One User Base DN per line" => "Ένα DN βάσης χρηστών ανά γραμμή",
"User Search Attributes" => "Χαρακτηριστικά αναζήτησης των χρηστών ",
"Optional; one attribute per line" => "Προαιρετικά? Ένα χαρακτηριστικό ανά γραμμή ",
"Group Display Name Field" => "Group Display Name Field",
+"The LDAP attribute to use to generate the groups's display name." => "Η ιδιότητα LDAP προς χρήση για δημιουργία του προβαλλόμενου ονόματος ομάδας.",
"Base Group Tree" => "Base Group Tree",
"One Group Base DN per line" => "Μια ομαδικη Βάση DN ανά γραμμή",
"Group Search Attributes" => "Ομάδα Χαρακτηριστικων Αναζήτηση",
@@ -65,6 +94,15 @@ $TRANSLATIONS = array(
"User Home Folder Naming Rule" => "Χρήστης Προσωπικόςφάκελος Ονομασία Κανόνας ",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Αφήστε το κενό για το όνομα χρήστη (προεπιλογή). Διαφορετικά, συμπληρώστε μία ιδιότητα LDAP/AD.",
"Internal Username" => "Εσωτερικό Όνομα Χρήστη",
-"Internal Username Attribute:" => "Ιδιότητα Εσωτερικού Ονόματος Χρήστη:"
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Εξ ορισμού, το εσωτερικό όνομα χρήστη θα δημιουργηθεί από το χαρακτηριστικό UUID. Αυτό βεβαιώνει ότι το όνομα χρήστη είναι μοναδικό και δεν χρειάζεται μετατροπή χαρακτήρων. Το εσωτερικό όνομα χρήστη έχει τον περιορισμό ότι μόνο αυτοί οι χαρακτήρες επιτρέπονται: [ a-zA-Z0-9_.@- ]. Οι άλλοι χαρακτήρες αντικαθίστανται με τους αντίστοιχους ASCII ή απλά παραλείπονται. Στις συγκρούσεις ένας αριθμός θα προστεθεί / αυξηθεί. Το εσωτερικό όνομα χρήστη χρησιμοποιείται για την αναγνώριση ενός χρήστη εσωτερικά. Είναι επίσης το προεπιλεγμένο όνομα για τον αρχικό φάκελο χρήστη. Αποτελεί επίσης μέρος των απομακρυσμένων διευθύνσεων URL, για παράδειγμα για όλες τις υπηρεσίες *DAV. Με αυτή τη ρύθμιση, η προεπιλεγμένη συμπεριφορά μπορεί να παρακαμφθεί. Για να επιτευχθεί μια παρόμοια συμπεριφορά όπως πριν το ownCloud 5 εισάγετε το χαρακτηριστικό του προβαλλόμενου ονόματος χρήστη στο παρακάτω πεδίο. Αφήστε το κενό για την προεπιλεγμένη λειτουργία. Οι αλλαγές θα έχουν ισχύ μόνο σε νεώτερους (προστιθέμενους) χρήστες LDAP.",
+"Internal Username Attribute:" => "Ιδιότητα Εσωτερικού Ονόματος Χρήστη:",
+"Override UUID detection" => "Παράκαμψη ανίχνευσης UUID",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Από προεπιλογή, το χαρακτηριστικό UUID εντοπίζεται αυτόματα. Το χαρακτηριστικό UUID χρησιμοποιείται για την αναγνώριση χωρίς αμφιβολία χρηστών και ομάδων LDAP. Επίσης, το εσωτερικό όνομα χρήστη θα δημιουργηθεί με βάση το UUID, εφόσον δεν ορίζεται διαφορετικά ανωτέρω. Μπορείτε να παρακάμψετε τη ρύθμιση και να ορίσετε ένα χαρακτηριστικό της επιλογής σας. Θα πρέπει να βεβαιωθείτε ότι το χαρακτηριστικό της επιλογής σας μπορεί να ληφθεί για τους χρήστες και τις ομάδες και ότι είναι μοναδικό. Αφήστε το κενό για την προεπιλεγμένη λειτουργία. Οι αλλαγές θα έχουν ισχύ μόνο σε πρόσφατα αντιστοιχισμένους (προστιθέμενους) χρήστες και ομάδες LDAP.",
+"UUID Attribute for Users:" => "Χαρακτηριστικό UUID για Χρήστες:",
+"UUID Attribute for Groups:" => "Χαρακτηριστικό UUID για Ομάδες:",
+"Username-LDAP User Mapping" => "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και την ανάθεση (μετα) δεδομένων. Προκειμένου να προσδιοριστούν με ακρίβεια και να αναγνωρίστουν οι χρήστες, κάθε χρήστης LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση του ονόματος χρήστη με το χρήστη LDAP. Το όνομα χρήστη που δημιουργήθηκε αντιστοιχίζεται στην UUID του χρήστη LDAP. Επιπροσθέτως, το DN αποθηκεύεται προσωρινά (cache) ώστε να μειωθεί η αλληλεπίδραση LDAP, αλλά δεν χρησιμοποιείται για την ταυτοποίηση. Αν το DN αλλάξει, οι αλλαγές θα βρεθούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα αφήσει κατάλοιπα παντού. Η εκκαθάριση των αντιστοιχίσεων δεν επηρεάζεται από τη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην διαγράψετε ποτέ τις αντιστοιχίσεις σε ένα λειτουργικό περιβάλλον παρά μόνο σε δοκιμές ή σε πειραματικό στάδιο.",
+"Clear Username-LDAP User Mapping" => "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη",
+"Clear Groupname-LDAP Group Mapping" => "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/es_CL.php b/apps/user_ldap/l10n/es_CL.php
new file mode 100644
index 00000000000..b3522617b42
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CL.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"_%s group found_::_%s groups found_" => array("",""),
+"_%s user found_::_%s users found_" => array("",""),
+"Password" => "Clave"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/es_MX.php b/apps/user_ldap/l10n/es_MX.php
index 3a1e002311c..16aaa91fd51 100644
--- a/apps/user_ldap/l10n/es_MX.php
+++ b/apps/user_ldap/l10n/es_MX.php
@@ -1,6 +1,110 @@
<?php
$TRANSLATIONS = array(
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("","")
+"Failed to clear the mappings." => "Ocurrió un fallo al borrar las asignaciones.",
+"Failed to delete the server configuration" => "No se pudo borrar la configuración del servidor",
+"The configuration is valid and the connection could be established!" => "¡La configuración es válida y la conexión puede establecerse!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.",
+"The configuration is invalid. Please have a look at the logs for further details." => "La configuración no es válida. Por favor, busque en el log para más detalles.",
+"No action specified" => "No se ha especificado la acción",
+"No configuration specified" => "No se ha especificado la configuración",
+"No data specified" => "No se han especificado los datos",
+" Could not set configuration %s" => "No se pudo establecer la configuración %s",
+"Deletion failed" => "Falló el borrado",
+"Take over settings from recent server configuration?" => "¿Asumir los ajustes actuales de la configuración del servidor?",
+"Keep settings?" => "¿Mantener la configuración?",
+"Cannot add server configuration" => "No se puede añadir la configuración del servidor",
+"mappings cleared" => "Asignaciones borradas",
+"Success" => "Éxito",
+"Error" => "Error",
+"Configuration OK" => "Configuración OK",
+"Configuration incorrect" => "Configuración Incorrecta",
+"Configuration incomplete" => "Configuración incompleta",
+"Select groups" => "Seleccionar grupos",
+"Select object classes" => "Seleccionar la clase de objeto",
+"Select attributes" => "Seleccionar atributos",
+"Connection test succeeded" => "La prueba de conexión fue exitosa",
+"Connection test failed" => "La prueba de conexión falló",
+"Do you really want to delete the current Server Configuration?" => "¿Realmente desea eliminar la configuración actual del servidor?",
+"Confirm Deletion" => "Confirmar eliminación",
+"_%s group found_::_%s groups found_" => array("Grupo %s encontrado","Grupos %s encontrados"),
+"_%s user found_::_%s users found_" => array("Usuario %s encontrado","Usuarios %s encontrados"),
+"Invalid Host" => "Host inválido",
+"Could not find the desired feature" => "No se puede encontrar la función deseada.",
+"Save" => "Guardar",
+"Test Configuration" => "Configuración de prueba",
+"Help" => "Ayuda",
+"Limit the access to %s to groups meeting this criteria:" => "Limitar el acceso a %s a los grupos que cumplan este criterio:",
+"only those object classes:" => "solamente de estas clases de objeto:",
+"only from those groups:" => "solamente de estos grupos:",
+"Edit raw filter instead" => "Editar el filtro en bruto en su lugar",
+"Raw LDAP filter" => "Filtro LDAP en bruto",
+"The filter specifies which LDAP groups shall have access to the %s instance." => "El filtro especifica que grupos LDAP tendrán acceso a %s.",
+"groups found" => "grupos encontrados",
+"What attribute shall be used as login name:" => "Que atributo debe ser usado como login:",
+"LDAP Username:" => "Nombre de usuario LDAP:",
+"LDAP Email Address:" => "Dirección e-mail LDAP:",
+"Other Attributes:" => "Otros atributos:",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define el filtro a aplicar cuando se intenta identificar. %%uid remplazará al nombre de usuario en el proceso de identificación. Por ejemplo: \"uid=%%uid\"",
+"Add Server Configuration" => "Agregar configuracion del servidor",
+"Host" => "Servidor",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
+"Port" => "Puerto",
+"User DN" => "DN usuario",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos.",
+"Password" => "Contraseña",
+"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, deje DN y contraseña vacíos.",
+"One Base DN per line" => "Un DN Base por línea",
+"You can specify Base DN for users and groups in the Advanced tab" => "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
+"Limit the access to %s to users meeting this criteria:" => "Limitar el acceso a %s a los usuarios que cumplan el siguiente criterio:",
+"The filter specifies which LDAP users shall have access to the %s instance." => "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
+"users found" => "usuarios encontrados",
+"Back" => "Atrás",
+"Continue" => "Continuar",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al su administrador de sistemas para desactivar uno de ellos.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.",
+"Connection Settings" => "Configuración de conexión",
+"Configuration Active" => "Configuracion activa",
+"When unchecked, this configuration will be skipped." => "Cuando deseleccione, esta configuracion sera omitida.",
+"Backup (Replica) Host" => "Servidor de copia de seguridad (Replica)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.",
+"Backup (Replica) Port" => "Puerto para copias de seguridad (Replica)",
+"Disable Main Server" => "Deshabilitar servidor principal",
+"Only connect to the replica server." => "Conectar sólo con el servidor de réplica.",
+"Case insensitve LDAP server (Windows)" => "Servidor de LDAP no sensible a mayúsculas/minúsculas (Windows)",
+"Turn off SSL certificate validation." => "Apagar la validación por certificado SSL.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "No se recomienda, ¡utilízalo únicamente para pruebas! Si la conexión únicamente funciona con esta opción, importa el certificado SSL del servidor LDAP en tu servidor %s.",
+"Cache Time-To-Live" => "Cache TTL",
+"in seconds. A change empties the cache." => "en segundos. Un cambio vacía la caché.",
+"Directory Settings" => "Configuración de directorio",
+"User Display Name Field" => "Campo de nombre de usuario a mostrar",
+"The LDAP attribute to use to generate the user's display name." => "El campo LDAP a usar para generar el nombre para mostrar del usuario.",
+"Base User Tree" => "Árbol base de usuario",
+"One User Base DN per line" => "Un DN Base de Usuario por línea",
+"User Search Attributes" => "Atributos de la busqueda de usuario",
+"Optional; one attribute per line" => "Opcional; un atributo por linea",
+"Group Display Name Field" => "Campo de nombre de grupo a mostrar",
+"The LDAP attribute to use to generate the groups's display name." => "El campo LDAP a usar para generar el nombre para mostrar del grupo.",
+"Base Group Tree" => "Árbol base de grupo",
+"One Group Base DN per line" => "Un DN Base de Grupo por línea",
+"Group Search Attributes" => "Atributos de busqueda de grupo",
+"Group-Member association" => "Asociación Grupo-Miembro",
+"Special Attributes" => "Atributos especiales",
+"Quota Field" => "Cuota",
+"Quota Default" => "Cuota por defecto",
+"in bytes" => "en bytes",
+"Email Field" => "E-mail",
+"User Home Folder Naming Rule" => "Regla para la carpeta Home de usuario",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.",
+"Internal Username" => "Nombre de usuario interno",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "El nombre de usuario interno será creado de forma predeterminada desde el atributo UUID. Esto asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. En el nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso de duplicidades, se añadirá o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para la carpeta personal del usuario en ownCloud. También es parte de URLs remotas, por ejemplo, para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser cambiado. Para conseguir un comportamiento similar a como era antes de ownCloud 5, introduzca el campo del nombre para mostrar del usuario en la siguiente caja. Déjelo vacío para el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente.",
+"Internal Username Attribute:" => "Atributo Nombre de usuario Interno:",
+"Override UUID detection" => "Sobrescribir la detección UUID",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar indudablemente usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.",
+"UUID Attribute for Users:" => "Atributo UUID para usuarios:",
+"UUID Attribute for Groups:" => "Atributo UUID para Grupos:",
+"Username-LDAP User Mapping" => "Asignación del Nombre de usuario de un usuario LDAP",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.",
+"Clear Username-LDAP User Mapping" => "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
+"Clear Groupname-LDAP Group Mapping" => "Borrar la asignación de los Nombres de grupo de los grupos de LDAP"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index 34f626c8c24..2799d0407c4 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -16,6 +16,9 @@ $TRANSLATIONS = array(
"mappings cleared" => "Töröltük a hozzárendeléseket",
"Success" => "Sikeres végrehajtás",
"Error" => "Hiba",
+"Configuration OK" => "Konfiguráció OK",
+"Configuration incorrect" => "Konfiguráió hibás",
+"Configuration incomplete" => "Konfiguráció nincs befejezve",
"Select groups" => "Csoportok kiválasztása",
"Select object classes" => "Objektumosztályok kiválasztása",
"Select attributes" => "Attribútumok kiválasztása",
diff --git a/apps/user_ldap/l10n/ia.php b/apps/user_ldap/l10n/ia.php
index 4a23d5860c4..e138fd835f1 100644
--- a/apps/user_ldap/l10n/ia.php
+++ b/apps/user_ldap/l10n/ia.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Deletion failed" => "Il falleva deler",
"Error" => "Error",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php
index 6f4ddd21483..03071bb1d0f 100644
--- a/apps/user_ldap/l10n/id.php
+++ b/apps/user_ldap/l10n/id.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"One Base DN per line" => "Satu Base DN per baris",
"You can specify Base DN for users and groups in the Advanced tab" => "Anda dapat menetapkan Base DN untuk pengguna dan grup dalam tab Lanjutan",
"Back" => "Kembali",
+"Continue" => "Lanjutkan",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Peringatan:</b> Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya.",
"Connection Settings" => "Pengaturan Koneksi",
"Configuration Active" => "Konfigurasi Aktif",
diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php
index bac25ec96b9..2d861f27ba8 100644
--- a/apps/user_ldap/l10n/ko.php
+++ b/apps/user_ldap/l10n/ko.php
@@ -1,19 +1,53 @@
<?php
$TRANSLATIONS = array(
+"Failed to clear the mappings." => "매핑을 비울 수 없습니다.",
+"Failed to delete the server configuration" => "서버 설정을 삭제할 수 없습니다.",
+"The configuration is valid and the connection could be established!" => "설정 정보가 올바르고 연결할 수 있습니다!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "설정 정보가 올바르지만 바인딩이 실패하였습니다. 서버 설정과 인증 정보를 확인하십시오.",
+"The configuration is invalid. Please have a look at the logs for further details." => "설정이 올바르지 않습니다. 자세한 사항은 로그를 참고하십시오.",
+"No action specified" => "동작이 지정되지 않음",
+"No configuration specified" => "설정이 지정되지 않음",
+"No data specified" => "데이터가 지정되지 않음",
+" Could not set configuration %s" => " 설정 %s을(를) 지정할 수 없음",
"Deletion failed" => "삭제 실패",
-"Keep settings?" => "설정을 유지합니까?",
+"Take over settings from recent server configuration?" => "최근 서버 설정을 다시 불러오시겠습니까?",
+"Keep settings?" => "설정을 유지하겠습니까?",
+"Cannot add server configuration" => "서버 설정을 추가할 수 없음",
+"mappings cleared" => "매핑 삭제됨",
+"Success" => "성공",
"Error" => "오류",
+"Configuration OK" => "설정 올바름",
+"Configuration incorrect" => "설정 올바르지 않음",
+"Configuration incomplete" => "설정 불완전함",
"Select groups" => "그룹 선택",
+"Select object classes" => "객체 클래스 선택",
+"Select attributes" => "속성 선택",
"Connection test succeeded" => "연결 시험 성공",
"Connection test failed" => "연결 시험 실패",
"Do you really want to delete the current Server Configuration?" => "현재 서버 설정을 지우시겠습니까?",
-"_%s group found_::_%s groups found_" => array(""),
-"_%s user found_::_%s users found_" => array(""),
+"Confirm Deletion" => "삭제 확인",
+"_%s group found_::_%s groups found_" => array("그룹 %s개 찾음"),
+"_%s user found_::_%s users found_" => array("사용자 %s명 찾음"),
+"Invalid Host" => "잘못된 호스트",
+"Could not find the desired feature" => "필요한 기능을 찾을 수 없음",
"Save" => "저장",
+"Test Configuration" => "설정 시험",
"Help" => "도움말",
+"Limit the access to %s to groups meeting this criteria:" => "다음 조건을 만족하는 그룹만 %s 접근 허용:",
+"only those object classes:" => "다음 객체 클래스만:",
+"only from those groups:" => "다음 그룹에서만:",
+"Edit raw filter instead" => "필터 직접 편집",
+"Raw LDAP filter" => "LDAP 필터",
+"The filter specifies which LDAP groups shall have access to the %s instance." => "이 필터는 %s에 접근할 수 있는 LDAP 그룹을 설정합니다.",
+"groups found" => "그룹 찾음",
+"What attribute shall be used as login name:" => "로그인 이름으로 사용할 속성:",
+"LDAP Username:" => "LDAP 사용자 이름:",
+"LDAP Email Address:" => "LDAP 이메일 주소:",
+"Other Attributes:" => "기타 속성:",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "로그인을 시도할 때 적용할 필터를 입력하십시오. %%uid는 로그인 동작의 사용자 이름으로 대체됩니다. 예: \"uid=%%uid\"",
"Add Server Configuration" => "서버 설정 추가",
"Host" => "호스트",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL을 사용하는 경우가 아니라면 프로토콜을 입력하지 않아도 됩니다. SSL을 사용하려면 ldaps://를 입력하십시오.",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL을 사용하지 않으면 프로토콜을 입력하지 않아도 됩니다. SSL을 사용하려면 ldaps://를 입력하십시오.",
"Port" => "포트",
"User DN" => "사용자 DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "바인딩 작업을 수행할 클라이언트 사용자 DN입니다. 예를 들어서 uid=agent,dc=example,dc=com입니다. 익명 접근을 허용하려면 DN과 암호를 비워 두십시오.",
@@ -21,29 +55,56 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "익명 접근을 허용하려면 DN과 암호를 비워 두십시오.",
"One Base DN per line" => "기본 DN을 한 줄에 하나씩 입력하십시오",
"You can specify Base DN for users and groups in the Advanced tab" => "고급 탭에서 사용자 및 그룹에 대한 기본 DN을 지정할 수 있습니다.",
+"Limit the access to %s to users meeting this criteria:" => "다음 조건을 만족하는 사용자만 %s 접근 허용:",
+"The filter specifies which LDAP users shall have access to the %s instance." => "이 필터는 %s에 접근할 수 있는 LDAP 사용자를 설정합니다.",
+"users found" => "사용자 찾음",
"Back" => "뒤로",
"Continue" => "계속",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>경고:</b> user_ldap, user_webdavauth 앱은 서로 호환되지 않습니다. 예상하지 못한 행동을 할 수도 있습니다. 시스템 관리자에게 연락하여 둘 중 하나의 앱의 사용을 중단하십시오.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>경고:</b> PHP LDAP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"Connection Settings" => "연결 설정",
-"Configuration Active" => "구성 활성화",
-"When unchecked, this configuration will be skipped." => "선택하지 않으시면, 설정은 무시됩니다.",
-"Backup (Replica) Host" => "백업 (복제) 포트",
+"Configuration Active" => "구성 활성",
+"When unchecked, this configuration will be skipped." => "선택하지 않으면 이 설정을 무시합니다.",
+"Backup (Replica) Host" => "백업 (복제) 호스트",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "추가적인 백업 호스트를 지정합니다. 기본 LDAP/AD 서버의 복사본이어야 합니다.",
"Backup (Replica) Port" => "백업 (복제) 포트",
"Disable Main Server" => "주 서버 비활성화",
+"Only connect to the replica server." => "복제 서버에만 연결합니다.",
"Case insensitve LDAP server (Windows)" => "서버에서 대소문자를 구분하지 않음 (Windows)",
"Turn off SSL certificate validation." => "SSL 인증서 유효성 검사를 해제합니다.",
-"in seconds. A change empties the cache." => "초. 항목 변경 시 캐시가 갱신됩니다.",
-"Directory Settings" => "디렉토리 설정",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "테스트 목적으로만 사용하십시오! 이 옵션을 사용해야만 연결할 수 있으면 %s 서버에 LDAP 서버의 SSL 인증서를 설치하십시오.",
+"Cache Time-To-Live" => "캐시 유지 시간",
+"in seconds. A change empties the cache." => "초 단위입니다. 항목 변경 시 캐시가 갱신됩니다.",
+"Directory Settings" => "디렉터리 설정",
"User Display Name Field" => "사용자의 표시 이름 필드",
+"The LDAP attribute to use to generate the user's display name." => "사용자 표시 이름을 생성할 때 사용할 LDAP 속성입니다.",
"Base User Tree" => "기본 사용자 트리",
"One User Base DN per line" => "사용자 DN을 한 줄에 하나씩 입력하십시오",
"User Search Attributes" => "사용자 검색 속성",
+"Optional; one attribute per line" => "추가적, 한 줄에 하나의 속성을 입력하십시오",
"Group Display Name Field" => "그룹의 표시 이름 필드",
+"The LDAP attribute to use to generate the groups's display name." => "그룹 표시 이름을 생성할 때 사용할 LDAP 속성입니다.",
"Base Group Tree" => "기본 그룹 트리",
"One Group Base DN per line" => "그룹 기본 DN을 한 줄에 하나씩 입력하십시오",
"Group Search Attributes" => "그룹 검색 속성",
"Group-Member association" => "그룹-회원 연결",
-"in bytes" => "바이트",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "사용자 이름을 사용하려면 비워 두십시오(기본값). 기타 경우 LDAP/AD 속성을 지정하십시오."
+"Special Attributes" => "특수 속성",
+"Quota Field" => "할당량 필드",
+"Quota Default" => "기본 할당량",
+"in bytes" => "바이트 단위",
+"Email Field" => "이메일 필드",
+"User Home Folder Naming Rule" => "사용자 홈 폴더 이름 규칙",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "사용자 이름을 사용하려면 비워 두십시오(기본값). 기타 경우 LDAP/AD 속성을 지정하십시오.",
+"Internal Username" => "내부 사용자 이름",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "기본적으로 내부 사용자 이름은 UUID 속성에서 생성됩니다. 사용자 이름이 중복되지 않고 문자열을 변환할 필요가 없도록 합니다. 내부 사용자 이름에는 다음과 같은 문자열만 사용할 수 있습니다: [a-zA-Z0-9_.@-] 다른 문자열은 ASCII에 해당하는 문자열로 변경되거나 없는 글자로 취급됩니다. 충돌하는 경우 숫자가 붙거나 증가합니다. 내부 사용자 이름은 내부적으로 사용자를 식별하는 데 사용되며, 사용자 홈 폴더의 기본 이름입니다. 또한 *DAV와 같은 외부 URL의 일부로 사용됩니다. 이 설정을 사용하면 기본 설정을 재정의할 수 있습니다. ownCloud 5 이전의 행동을 사용하려면 아래 필드에 사용자의 표시 이름 속성을 입력하십시오. 비워 두면 기본 설정을 사용합니다. 새로 추가되거나 매핑된 LDAP 사용자에게만 적용됩니다.",
+"Internal Username Attribute:" => "내부 사용자 이름 속성:",
+"Override UUID detection" => "UUID 확인 재정의",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "기본적으로 UUID 속성은 자동적으로 감지됩니다. UUID 속성은 LDAP 사용자와 그룹을 정확히 식별하는 데 사용됩니다. 지정하지 않은 경우 내부 사용자 이름은 UUID를 기반으로 생성됩니다. 이 설정을 다시 정의하고 임의의 속성을 지정할 수 있습니다. 사용자와 그룹 모두에게 속성을 적용할 수 있고 중복된 값이 없는지 확인하십시오. 비워 두면 기본 설정을 사용합니다. 새로 추가되거나 매핑된 LDAP 사용자와 그룹에만 적용됩니다.",
+"UUID Attribute for Users:" => "사용자 UUID 속성:",
+"UUID Attribute for Groups:" => "그룹 UUID 속성:",
+"Username-LDAP User Mapping" => "사용자 이름-LDAP 사용자 매핑",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "사용자 이름은 (메타) 데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확하게 식별하기 위하여 각각 LDAP 사용자는 내부 사용자 이름을 갖습니다. 이는 사용자 이름과 LDAP 사용자 간의 매핑이 필요합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID로 매핑됩니다. 추가적으로 LDAP 통신을 줄이기 위해서 DN이 캐시에 저장되지만 식별에 사용되지는 않습니다. DN이 변경되면 변경 사항이 기록됩니다. 내부 사용자 이름은 계속 사용됩니다. 매핑을 비우면 흔적이 남아 있게 됩니다. 매핑을 비우는 작업은 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에만 사용하고, 사용 중인 서버에서는 시도하지 마십시오.",
+"Clear Username-LDAP User Mapping" => "사용자 이름-LDAP 사용자 매핑 비우기",
+"Clear Groupname-LDAP Group Mapping" => "그룹 이름-LDAP 그룹 매핑 비우기"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_ldap/l10n/nb_NO.php b/apps/user_ldap/l10n/nb_NO.php
index c9bca8d4c45..625ec79d76b 100644
--- a/apps/user_ldap/l10n/nb_NO.php
+++ b/apps/user_ldap/l10n/nb_NO.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
"One Base DN per line" => "En hoved DN pr. linje",
"You can specify Base DN for users and groups in the Advanced tab" => "Du kan spesifisere Base DN for brukere og grupper under Avansert fanen",
"Back" => "Tilbake",
+"Continue" => "Fortsett",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warning:</b> PHP LDAP modulen er ikke installert, hjelperen vil ikke virke. Vennligst be din system-administrator om å installere den.",
"Configuration Active" => "Konfigurasjon aktiv",
"When unchecked, this configuration will be skipped." => "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.",
diff --git a/apps/user_ldap/l10n/sk.php b/apps/user_ldap/l10n/sk.php
index 8a689224737..2578bb55649 100644
--- a/apps/user_ldap/l10n/sk.php
+++ b/apps/user_ldap/l10n/sk.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"_%s group found_::_%s groups found_" => array("","",""),
-"_%s user found_::_%s users found_" => array("","","")
+"_%s user found_::_%s users found_" => array("","",""),
+"Save" => "Uložiť"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php
index 1672545adeb..850fce24c48 100644
--- a/apps/user_ldap/l10n/sk_SK.php
+++ b/apps/user_ldap/l10n/sk_SK.php
@@ -36,7 +36,8 @@ $TRANSLATIONS = array(
"Limit the access to %s to groups meeting this criteria:" => "Obmedziť prístup %s do skupiny, ktoré spĺňajú tieto kritériá:",
"only those object classes:" => "len tieto triedy objektov:",
"only from those groups:" => "len z týchto skupín:",
-"Raw LDAP filter" => "Surový LDAP filter",
+"Edit raw filter instead" => "Miesto pre úpravu raw filtra",
+"Raw LDAP filter" => "Raw LDAP filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Tento filter LDAP určuje, ktoré skupiny budú mať prístup k %s inštancii.",
"groups found" => "nájdené skupiny",
"What attribute shall be used as login name:" => "Ako prihlasovacie meno použiť atribút:",
diff --git a/apps/user_ldap/l10n/ur.php b/apps/user_ldap/l10n/ur.php
new file mode 100644
index 00000000000..3a1e002311c
--- /dev/null
+++ b/apps/user_ldap/l10n/ur.php
@@ -0,0 +1,6 @@
+<?php
+$TRANSLATIONS = array(
+"_%s group found_::_%s groups found_" => array("",""),
+"_%s user found_::_%s users found_" => array("","")
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php
index 874082f78f6..93f044e3152 100644
--- a/apps/user_ldap/lib/configuration.php
+++ b/apps/user_ldap/lib/configuration.php
@@ -129,6 +129,7 @@ class Configuration {
if(!empty($val) && strpos($val, 'attr:') === false) {
$val = 'attr:'.$val;
}
+ break;
case 'ldapBase':
case 'ldapBaseUsers':
case 'ldapBaseGroups':
@@ -140,11 +141,11 @@ class Configuration {
case 'ldapGroupFilterGroups':
case 'ldapLoginFilterAttributes':
$setMethod = 'setMultiLine';
- default:
- $this->$setMethod($key, $val);
- if(is_array($applied)) {
- $applied[] = $inputkey;
- }
+ break;
+ }
+ $this->$setMethod($key, $val);
+ if(is_array($applied)) {
+ $applied[] = $inputkey;
}
}
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index fde7c36cdd1..0312c17ab7b 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -41,7 +41,7 @@
<div class="tablerow">
<input type="text" id="ldap_dn" name="ldap_dn"
class="tablecell lwautosave"
- placeholder="<?php p($l->t('User DN'));?>"
+ placeholder="<?php p($l->t('User DN'));?>" autocomplete="off"
title="<?php p($l->t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.'));?>"
/>
</div>
@@ -49,7 +49,7 @@
<div class="tablerow">
<input type="password" id="ldap_agent_password"
class="tablecell lwautosave" name="ldap_agent_password"
- placeholder="<?php p($l->t('Password'));?>"
+ placeholder="<?php p($l->t('Password'));?>" autocomplete="off"
title="<?php p($l->t('For anonymous access, leave DN and Password empty.'));?>"
/>
</div>
diff --git a/apps/user_webdavauth/l10n/el.php b/apps/user_webdavauth/l10n/el.php
index 4a9ab3bafcc..e7403f9a8c3 100644
--- a/apps/user_webdavauth/l10n/el.php
+++ b/apps/user_webdavauth/l10n/el.php
@@ -1,6 +1,6 @@
<?php
$TRANSLATIONS = array(
-"WebDAV Authentication" => "Αυθεντικοποίηση μέσω WebDAV ",
+"WebDAV Authentication" => "Πιστοποίηση μέσω WebDAV ",
"Address: " => "Διεύθυνση:",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Τα διαπιστευτήρια του χρήστη θα σταλούν σε αυτή την διεύθυνση. Αυτό το πρόσθετο ελέγχει την απόκριση και θα ερμηνεύσει τους κωδικούς κατάστασης HTTP 401 και 402 ως μη έγκυρα διαπιστευτήρια και όλες τις άλλες αποκρίσεις ως έγκυρα διαπιστευτήρια."
);
diff --git a/apps/user_webdavauth/l10n/es_MX.php b/apps/user_webdavauth/l10n/es_MX.php
new file mode 100644
index 00000000000..951aabe24ae
--- /dev/null
+++ b/apps/user_webdavauth/l10n/es_MX.php
@@ -0,0 +1,7 @@
+<?php
+$TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticación mediante WevDAV",
+"Address: " => "Dirección:",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Las credenciales de usuario se enviarán a esta dirección. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_webdavauth/l10n/sl.php b/apps/user_webdavauth/l10n/sl.php
index 269f9c3d25d..3bf3068c55f 100644
--- a/apps/user_webdavauth/l10n/sl.php
+++ b/apps/user_webdavauth/l10n/sl.php
@@ -2,6 +2,6 @@
$TRANSLATIONS = array(
"WebDAV Authentication" => "Overitev WebDAV",
"Address: " => "Naslov:",
-"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Uporabniška poverila bodo poslana na ta naslov. Vstavek preveri odziv in kodi stanja 401 in 403 kot neveljavna poverila, vse ostale odzive pa kot veljavna."
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Uporabniška poverila bodo poslana na naveden naslov. Vstavek preveri odziv in kodi stanja 401 in 403 obravnava kot neveljavna poverila, vse ostale odzive pa kot veljavna."
);
$PLURAL_FORMS = "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);";