Merge branch 'master' into navigation

This commit is contained in:
Jan-Christoph Borchardt 2013-01-31 19:28:25 +01:00
commit 3d5c7ca245
297 changed files with 7813 additions and 2912 deletions

View File

@ -17,8 +17,8 @@ if(\OC\Files\Filesystem::file_exists($target . '/' . $file)) {
}
if ($dir != '' || $file != 'Shared') {
$targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
$sourceFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file);
$targetFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file);
$sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
} else {

8
apps/files/js/upload.js Normal file
View File

@ -0,0 +1,8 @@
function Upload(fileSelector) {
if ($.support.xhrFileUpload) {
return new XHRUpload(fileSelector.target.files);
} else {
return new FormUpload(fileSelector);
}
}
Upload.target = OC.filePath('files', 'ajax', 'upload.php');

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "কোন ফাইল আপলোড করা হয় নি",
"Missing a temporary folder" => "অস্থায়ী ফোল্ডার খোয়া গিয়েছে",
"Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ",
"Not enough space available" => "যথেষ্ঠ পরিমাণ স্থান নেই",
"Invalid directory." => "ভুল ডিরেক্টরি",
"Files" => "ফাইল",
"Unshare" => "ভাগাভাগি বাতিল ",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} প্রতিস্থাপন করা হয়েছে",
"undo" => "ক্রিয়া প্রত্যাহার",
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে",
"unshared {files}" => "{files} ভাগাভাগি বাতিল কর",
"deleted {files}" => "{files} মুছে ফেলা হয়েছে",
"'.' is an invalid file name." => "টি একটি অননুমোদিত নাম।",
"File name cannot be empty." => "ফাইলের নামটি ফাঁকা রাখা যাবে না।",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "El fitxer no s'ha pujat",
"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
"Not enough space available" => "No hi ha prou espai disponible",
"Invalid directory." => "Directori no vàlid.",
"Files" => "Fitxers",
"Unshare" => "Deixa de compartir",
@ -19,8 +20,6 @@
"replaced {new_name}" => "s'ha substituït {new_name}",
"undo" => "desfés",
"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
"unshared {files}" => "no compartits {files}",
"deleted {files}" => "eliminats {files}",
"'.' is an invalid file name." => "'.' és un nom no vàlid per un fitxer.",
"File name cannot be empty." => "El nom del fitxer no pot ser buit.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
@ -63,5 +62,6 @@
"Upload too large" => "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu",
"Current scanning" => "Actualment escanejant"
"Current scanning" => "Actualment escanejant",
"Upgrading filesystem cache..." => "Actualitzant la memòria de cau del sistema de fitxers..."
);

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Žádný soubor nebyl odeslán",
"Missing a temporary folder" => "Chybí adresář pro dočasné soubory",
"Failed to write to disk" => "Zápis na disk selhal",
"Not enough space available" => "Nedostatek dostupného místa",
"Invalid directory." => "Neplatný adresář",
"Files" => "Soubory",
"Unshare" => "Zrušit sdílení",
@ -19,8 +20,6 @@
"replaced {new_name}" => "nahrazeno {new_name}",
"undo" => "zpět",
"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
"unshared {files}" => "sdílení zrušeno pro {files}",
"deleted {files}" => "smazáno {files}",
"'.' is an invalid file name." => "'.' je neplatným názvem souboru.",
"File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.",
@ -63,5 +62,6 @@
"Upload too large" => "Odeslaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.",
"Current scanning" => "Aktuální prohledávání"
"Current scanning" => "Aktuální prohledávání",
"Upgrading filesystem cache..." => "Aktualizuji mezipaměť souborového systému..."
);

View File

@ -19,8 +19,6 @@
"replaced {new_name}" => "erstattede {new_name}",
"undo" => "fortryd",
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
"unshared {files}" => "ikke delte {files}",
"deleted {files}" => "slettede {files}",
"'.' is an invalid file name." => "'.' er et ugyldigt filnavn.",
"File name cannot be empty." => "Filnavnet kan ikke stå tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Temporärer Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Not enough space available" => "Nicht genug Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
"unshared {files}" => "Freigabe von {files} aufgehoben",
"deleted {files}" => "{files} gelöscht",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Der temporäre Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
"unshared {files}" => "Freigabe für {files} beendet",
"deleted {files}" => "{files} gelöscht",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε",
"Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
"Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
"Not enough space available" => "Δεν υπάρχει αρκετός διαθέσιμος χώρος",
"Invalid directory." => "Μη έγκυρος φάκελος.",
"Files" => "Αρχεία",
"Unshare" => "Διακοπή κοινής χρήσης",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} αντικαταστάθηκε",
"undo" => "αναίρεση",
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
"unshared {files}" => "μη διαμοιρασμένα {files}",
"deleted {files}" => "διαγραμμένα {files}",
"'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.",
"File name cannot be empty." => "Το όνομα αρχείου δεν πρέπει να είναι κενό.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Neniu dosiero estas alŝutita",
"Missing a temporary folder" => "Mankas tempa dosierujo",
"Failed to write to disk" => "Malsukcesis skribo al disko",
"Not enough space available" => "Ne haveblas sufiĉa spaco",
"Invalid directory." => "Nevalida dosierujo.",
"Files" => "Dosieroj",
"Unshare" => "Malkunhavigi",
@ -19,8 +20,6 @@
"replaced {new_name}" => "anstataŭiĝis {new_name}",
"undo" => "malfari",
"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
"unshared {files}" => "malkunhaviĝis {files}",
"deleted {files}" => "foriĝis {files}",
"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "No se ha subido ningún archivo",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "La escritura en disco ha fallado",
"Not enough space available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
@ -19,8 +20,6 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
"unshared {files}" => "{files} descompartidos",
"deleted {files}" => "{files} eliminados",
"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
"File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "El archivo no fue subido",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "Error al escribir en el disco",
"Not enough space available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
@ -19,8 +20,6 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
"unshared {files}" => "{files} se dejaron de compartir",
"deleted {files}" => "{files} borrados",
"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
"File name cannot be empty." => "El nombre del archivo no puede quedar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.",

View File

@ -17,8 +17,6 @@
"replaced {new_name}" => "asendatud nimega {new_name}",
"undo" => "tagasi",
"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
"unshared {files}" => "jagamata {files}",
"deleted {files}" => "kustutatud {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
"Upload Error" => "Üleslaadimise viga",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Ez da fitxategirik igo",
"Missing a temporary folder" => "Aldi baterako karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
"Not enough space available" => "Ez dago leku nahikorik.",
"Invalid directory." => "Baliogabeko karpeta.",
"Files" => "Fitxategiak",
"Unshare" => "Ez elkarbanatu",
@ -19,8 +20,6 @@
"replaced {new_name}" => "ordezkatua {new_name}",
"undo" => "desegin",
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
"unshared {files}" => "elkarbanaketa utzita {files}",
"deleted {files}" => "ezabatuta {files}",
"'.' is an invalid file name." => "'.' ez da fitxategi izen baliogarria.",
"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "هیچ فایلی بارگذاری نشده",
"Missing a temporary folder" => "یک پوشه موقت گم شده است",
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
"Not enough space available" => "فضای کافی در دسترس نیست",
"Invalid directory." => "فهرست راهنما نامعتبر می باشد.",
"Files" => "فایل ها",
"Unshare" => "لغو اشتراک",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{نام _جدید} جایگزین شد ",
"undo" => "بازگشت",
"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
"unshared {files}" => "{ فایل های } قسمت نشده",
"deleted {files}" => "{ فایل های } پاک شده",
"'.' is an invalid file name." => "'.' یک نام پرونده نامعتبر است.",
"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.",

View File

@ -6,6 +6,7 @@
"No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty",
"Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa",
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
"Not enough space available" => "Tilaa ei ole riittävästi",
"Invalid directory." => "Virheellinen kansio.",
"Files" => "Tiedostot",
"Unshare" => "Peru jakaminen",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Aucun fichier n'a été téléversé",
"Missing a temporary folder" => "Il manque un répertoire temporaire",
"Failed to write to disk" => "Erreur d'écriture sur le disque",
"Not enough space available" => "Espace disponible insuffisant",
"Invalid directory." => "Dossier invalide.",
"Files" => "Fichiers",
"Unshare" => "Ne plus partager",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} a été remplacé",
"undo" => "annuler",
"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
"unshared {files}" => "Fichiers non partagés : {files}",
"deleted {files}" => "Fichiers supprimés : {files}",
"'.' is an invalid file name." => "'.' n'est pas un nom de fichier valide.",
"File name cannot be empty." => "Le nom de fichier ne peut être vide.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Non se enviou ningún ficheiro",
"Missing a temporary folder" => "Falta un cartafol temporal",
"Failed to write to disk" => "Erro ao escribir no disco",
"Not enough space available" => "O espazo dispoñíbel é insuficiente",
"Invalid directory." => "O directorio é incorrecto.",
"Files" => "Ficheiros",
"Unshare" => "Deixar de compartir",
@ -19,8 +20,6 @@
"replaced {new_name}" => "substituír {new_name}",
"undo" => "desfacer",
"replaced {new_name} with {old_name}" => "substituír {new_name} polo {old_name}",
"unshared {files}" => "{files} sen compartir",
"deleted {files}" => "{files} eliminados",
"'.' is an invalid file name." => "'.' é un nonme de ficheiro non válido",
"File name cannot be empty." => "O nome de ficheiro non pode estar baldeiro",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten.",

View File

@ -18,8 +18,6 @@
"replaced {new_name}" => "{new_name} הוחלף",
"undo" => "ביטול",
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
"unshared {files}" => "בוטל שיתופם של {files}",
"deleted {files}" => "{files} נמחקו",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
"Upload Error" => "שגיאת העלאה",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Nem töltődött fel semmi",
"Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
"Failed to write to disk" => "Nem sikerült a lemezre történő írás",
"Not enough space available" => "Nincs elég szabad hely",
"Invalid directory." => "Érvénytelen mappa.",
"Files" => "Fájlok",
"Unshare" => "Megosztás visszavonása",
@ -19,8 +20,6 @@
"replaced {new_name}" => "a(z) {new_name} állományt kicseréltük",
"undo" => "visszavonás",
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
"unshared {files}" => "{files} fájl megosztása visszavonva",
"deleted {files}" => "{files} fájl törölve",
"'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
"File name cannot be empty." => "A fájlnév nem lehet semmi.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Engin skrá skilaði sér",
"Missing a temporary folder" => "Vantar bráðabirgðamöppu",
"Failed to write to disk" => "Tókst ekki að skrifa á disk",
"Not enough space available" => "Ekki nægt pláss tiltækt",
"Invalid directory." => "Ógild mappa.",
"Files" => "Skrár",
"Unshare" => "Hætta deilingu",
@ -19,8 +20,6 @@
"replaced {new_name}" => "endurskýrði {new_name}",
"undo" => "afturkalla",
"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
"unshared {files}" => "Hætti við deilingu á {files}",
"deleted {files}" => "eyddi {files}",
"'.' is an invalid file name." => "'.' er ekki leyfilegt nafn.",
"File name cannot be empty." => "Nafn skráar má ekki vera tómt",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Nessun file è stato caricato",
"Missing a temporary folder" => "Cartella temporanea mancante",
"Failed to write to disk" => "Scrittura su disco non riuscita",
"Not enough space available" => "Spazio disponibile insufficiente",
"Invalid directory." => "Cartella non valida.",
"Files" => "File",
"Unshare" => "Rimuovi condivisione",
@ -19,8 +20,6 @@
"replaced {new_name}" => "sostituito {new_name}",
"undo" => "annulla",
"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
"unshared {files}" => "non condivisi {files}",
"deleted {files}" => "eliminati {files}",
"'.' is an invalid file name." => "'.' non è un nome file valido.",
"File name cannot be empty." => "Il nome del file non può essere vuoto.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.",
@ -63,5 +62,6 @@
"Upload too large" => "Il file caricato è troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." => "Scansione dei file in corso, attendi",
"Current scanning" => "Scansione corrente"
"Current scanning" => "Scansione corrente",
"Upgrading filesystem cache..." => "Aggiornamento della cache del filesystem in corso..."
);

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "ファイルはアップロードされませんでした",
"Missing a temporary folder" => "テンポラリフォルダが見つかりません",
"Failed to write to disk" => "ディスクへの書き込みに失敗しました",
"Not enough space available" => "利用可能なスペースが十分にありません",
"Invalid directory." => "無効なディレクトリです。",
"Files" => "ファイル",
"Unshare" => "共有しない",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} を置換",
"undo" => "元に戻す",
"replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換",
"unshared {files}" => "未共有 {files}",
"deleted {files}" => "削除 {files}",
"'.' is an invalid file name." => "'.' は無効なファイル名です。",
"File name cannot be empty." => "ファイル名を空にすることはできません。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。",

View File

@ -16,8 +16,6 @@
"replaced {new_name}" => "{new_name} შეცვლილია",
"undo" => "დაბრუნება",
"replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით",
"unshared {files}" => "გაზიარება მოხსნილი {files}",
"deleted {files}" => "წაშლილი {files}",
"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს",
"Upload Error" => "შეცდომა ატვირთვისას",
"Close" => "დახურვა",

View File

@ -7,7 +7,8 @@
"No file was uploaded" => "업로드된 파일 없음",
"Missing a temporary folder" => "임시 폴더가 사라짐",
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Invalid directory." => "올바르지 않은 디렉토리입니다.",
"Not enough space available" => "여유 공간이 부족합니다",
"Invalid directory." => "올바르지 않은 디렉터리입니다.",
"Files" => "파일",
"Unshare" => "공유 해제",
"Delete" => "삭제",
@ -19,11 +20,12 @@
"replaced {new_name}" => "{new_name}을(를) 대체함",
"undo" => "실행 취소",
"replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
"unshared {files}" => "{files} 공유 해제됨",
"deleted {files}" => "{files} 삭제됨",
"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.",
"File name cannot be empty." => "파일이름은 공란이 될 수 없습니다.",
"File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.",
"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}%)",
"Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다.",
"Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉터리이거나 비어 있기 때문에 업로드할 수 없습니다",
"Upload Error" => "업로드 오류",
"Close" => "닫기",
@ -60,5 +62,6 @@
"Upload too large" => "업로드 용량 초과",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
"Files are being scanned, please wait." => "파일을 검색하고 있습니다. 기다려 주십시오.",
"Current scanning" => "현재 검색"
"Current scanning" => "현재 검색",
"Upgrading filesystem cache..." => "파일 시스템 캐시 업그레이드 중..."
);

View File

@ -16,8 +16,6 @@
"replaced {new_name}" => "pakeiskite {new_name}",
"undo" => "anuliuoti",
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
"unshared {files}" => "nebesidalinti {files}",
"deleted {files}" => "ištrinti {files}",
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
"Upload Error" => "Įkėlimo klaida",
"Close" => "Užverti",

View File

@ -18,8 +18,6 @@
"replaced {new_name}" => "земенета {new_name}",
"undo" => "врати",
"replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}",
"unshared {files}" => "без споделување {files}",
"deleted {files}" => "избришани {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти",
"Upload Error" => "Грешка при преземање",

View File

@ -17,7 +17,6 @@
"replaced {new_name}" => "erstatt {new_name}",
"undo" => "angre",
"replaced {new_name} with {old_name}" => "erstatt {new_name} med {old_name}",
"deleted {files}" => "slettet {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
"Upload Error" => "Opplasting feilet",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Geen bestand geüpload",
"Missing a temporary folder" => "Een tijdelijke map mist",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
"Not enough space available" => "Niet genoeg ruimte beschikbaar",
"Invalid directory." => "Ongeldige directory.",
"Files" => "Bestanden",
"Unshare" => "Stop delen",
@ -19,8 +20,6 @@
"replaced {new_name}" => "verving {new_name}",
"undo" => "ongedaan maken",
"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
"unshared {files}" => "delen gestopt {files}",
"deleted {files}" => "verwijderde {files}",
"'.' is an invalid file name." => "'.' is een ongeldige bestandsnaam.",
"File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Nie przesłano żadnego pliku",
"Missing a temporary folder" => "Brak katalogu tymczasowego",
"Failed to write to disk" => "Błąd zapisu na dysk",
"Not enough space available" => "Za mało miejsca",
"Invalid directory." => "Zła ścieżka.",
"Files" => "Pliki",
"Unshare" => "Nie udostępniaj",
@ -19,8 +20,6 @@
"replaced {new_name}" => "zastąpiony {new_name}",
"undo" => "wróć",
"replaced {new_name} with {old_name}" => "zastąpiony {new_name} z {old_name}",
"unshared {files}" => "Udostępniane wstrzymane {files}",
"deleted {files}" => "usunięto {files}",
"'.' is an invalid file name." => "'.' jest nieprawidłową nazwą pliku.",
"File name cannot be empty." => "Nazwa pliku nie może być pusta.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Niepoprawna nazwa, Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*'są niedozwolone.",

View File

@ -19,8 +19,6 @@
"replaced {new_name}" => "substituído {new_name}",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
"unshared {files}" => "{files} não compartilhados",
"deleted {files}" => "{files} apagados",
"'.' is an invalid file name." => "'.' é um nome de arquivo inválido.",
"File name cannot be empty." => "O nome do arquivo não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Não foi enviado nenhum ficheiro",
"Missing a temporary folder" => "Falta uma pasta temporária",
"Failed to write to disk" => "Falhou a escrita no disco",
"Not enough space available" => "Espaço em disco insuficiente!",
"Invalid directory." => "Directório Inválido",
"Files" => "Ficheiros",
"Unshare" => "Deixar de partilhar",
@ -19,8 +20,6 @@
"replaced {new_name}" => "{new_name} substituido",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
"unshared {files}" => "{files} não partilhado(s)",
"deleted {files}" => "{files} eliminado(s)",
"'.' is an invalid file name." => "'.' não é um nome de ficheiro válido!",
"File name cannot be empty." => "O nome do ficheiro não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
@ -63,5 +62,6 @@
"Upload too large" => "Envio muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
"Current scanning" => "Análise actual"
"Current scanning" => "Análise actual",
"Upgrading filesystem cache..." => "Atualizar cache do sistema de ficheiros..."
);

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Niciun fișier încărcat",
"Missing a temporary folder" => "Lipsește un dosar temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
"Not enough space available" => "Nu este suficient spațiu disponibil",
"Invalid directory." => "Director invalid.",
"Files" => "Fișiere",
"Unshare" => "Anulează partajarea",
@ -19,8 +20,6 @@
"replaced {new_name}" => "inlocuit {new_name}",
"undo" => "Anulează ultima acțiune",
"replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}",
"unshared {files}" => "nedistribuit {files}",
"deleted {files}" => "Sterse {files}",
"'.' is an invalid file name." => "'.' este un nume invalid de fișier.",
"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalid, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "Невозможно найти временную папку",
"Failed to write to disk" => "Ошибка записи на диск",
"Not enough space available" => "Недостаточно свободного места",
"Invalid directory." => "Неправильный каталог.",
"Files" => "Файлы",
"Unshare" => "Отменить публикацию",
@ -19,8 +20,6 @@
"replaced {new_name}" => "заменено {new_name}",
"undo" => "отмена",
"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
"unshared {files}" => "не опубликованные {files}",
"deleted {files}" => "удаленные {files}",
"'.' is an invalid file name." => "'.' - неправильное имя файла.",
"File name cannot be empty." => "Имя файла не может быть пустым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправильное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",

View File

@ -7,6 +7,8 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "Отсутствует временная папка",
"Failed to write to disk" => "Не удалось записать на диск",
"Not enough space available" => "Не достаточно свободного места",
"Invalid directory." => "Неверный каталог.",
"Files" => "Файлы",
"Unshare" => "Скрыть",
"Delete" => "Удалить",
@ -18,8 +20,8 @@
"replaced {new_name}" => "заменено {новое_имя}",
"undo" => "отменить действие",
"replaced {new_name} with {old_name}" => "заменено {новое_имя} с {старое_имя}",
"unshared {files}" => "Cовместное использование прекращено {файлы}",
"deleted {files}" => "удалено {файлы}",
"'.' is an invalid file name." => "'.' является неверным именем файла.",
"File name cannot be empty." => "Имя файла не может быть пустым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Некорректное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не допустимы.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Невозможно загрузить файл,\n так как он имеет нулевой размер или является директорией",
"Upload Error" => "Ошибка загрузки",
@ -30,6 +32,7 @@
"Upload cancelled." => "Загрузка отменена",
"File upload is in progress. Leaving the page now will cancel the upload." => "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена.",
"URL cannot be empty." => "URL не должен быть пустым.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Неверное имя папки. Использование наименования 'Опубликовано' зарезервировано Owncloud",
"Name" => "Имя",
"Size" => "Размер",
"Modified" => "Изменен",
@ -56,5 +59,6 @@
"Upload too large" => "Загрузка слишком велика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Размер файлов, которые Вы пытаетесь загрузить, превышает максимально допустимый размер для загрузки на данный сервер.",
"Files are being scanned, please wait." => "Файлы сканируются, пожалуйста, подождите.",
"Current scanning" => "Текущее сканирование"
"Current scanning" => "Текущее сканирование",
"Upgrading filesystem cache..." => "Обновление кэша файловой системы... "
);

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Žiaden súbor nebol nahraný",
"Missing a temporary folder" => "Chýbajúci dočasný priečinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
"Not enough space available" => "Nie je k dispozícii dostatok miesta",
"Invalid directory." => "Neplatný adresár",
"Files" => "Súbory",
"Unshare" => "Nezdielať",
@ -19,8 +20,6 @@
"replaced {new_name}" => "prepísaný {new_name}",
"undo" => "vrátiť",
"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
"unshared {files}" => "zdieľanie zrušené pre {files}",
"deleted {files}" => "zmazané {files}",
"'.' is an invalid file name." => "'.' je neplatné meno súboru.",
"File name cannot be empty." => "Meno súboru nemôže byť prázdne",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.",

View File

@ -18,8 +18,6 @@
"replaced {new_name}" => "zamenjano je ime {new_name}",
"undo" => "razveljavi",
"replaced {new_name} with {old_name}" => "zamenjano ime {new_name} z imenom {old_name}",
"unshared {files}" => "odstranjeno iz souporabe {files}",
"deleted {files}" => "izbrisano {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.",
"Upload Error" => "Napaka med nalaganjem",

View File

@ -17,8 +17,6 @@
"replaced {new_name}" => "замењено {new_name}",
"undo" => "опозови",
"replaced {new_name} with {old_name}" => "замењено {new_name} са {old_name}",
"unshared {files}" => "укинуто дељење {files}",
"deleted {files}" => "обрисано {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова",
"Upload Error" => "Грешка при отпремању",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Ingen fil blev uppladdad",
"Missing a temporary folder" => "Saknar en tillfällig mapp",
"Failed to write to disk" => "Misslyckades spara till disk",
"Not enough space available" => "Inte tillräckligt med utrymme tillgängligt",
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
"Unshare" => "Sluta dela",
@ -19,8 +20,6 @@
"replaced {new_name}" => "ersatt {new_name}",
"undo" => "ångra",
"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
"unshared {files}" => "stoppad delning {files}",
"deleted {files}" => "raderade {files}",
"'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
@ -63,5 +62,6 @@
"Upload too large" => "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"Files are being scanned, please wait." => "Filer skannas, var god vänta",
"Current scanning" => "Aktuell skanning"
"Current scanning" => "Aktuell skanning",
"Upgrading filesystem cache..." => "Uppgraderar filsystemets cache..."
);

View File

@ -17,8 +17,6 @@
"replaced {new_name}" => "மாற்றப்பட்டது {new_name}",
"undo" => "முன் செயல் நீக்கம் ",
"replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது",
"unshared {files}" => "பகிரப்படாதது {கோப்புகள்}",
"deleted {files}" => "நீக்கப்பட்டது {கோப்புகள்}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது.",
"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை",
"Upload Error" => "பதிவேற்றல் வழு",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด",
"Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย",
"Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
"Not enough space available" => "มีพื้นที่เหลือไม่เพียงพอ",
"Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" => "ไฟล์",
"Unshare" => "ยกเลิกการแชร์ข้อมูล",
@ -19,8 +20,6 @@
"replaced {new_name}" => "แทนที่ {new_name} แล้ว",
"undo" => "เลิกทำ",
"replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว",
"unshared {files}" => "ยกเลิกการแชร์แล้ว {files} ไฟล์",
"deleted {files}" => "ลบไฟล์แล้ว {files} ไฟล์",
"'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูกต้อง",
"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "Hiç dosya yüklenmedi",
"Missing a temporary folder" => "Geçici bir klasör eksik",
"Failed to write to disk" => "Diske yazılamadı",
"Not enough space available" => "Yeterli disk alanı yok",
"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
"Unshare" => "Paylaşılmayan",
@ -19,8 +20,6 @@
"replaced {new_name}" => "değiştirilen {new_name}",
"undo" => "geri al",
"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi",
"unshared {files}" => "paylaşılmamış {files}",
"deleted {files}" => "silinen {files}",
"'.' is an invalid file name." => "'.' geçersiz dosya adı.",
"File name cannot be empty." => "Dosya adı boş olamaz.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.",

View File

@ -18,8 +18,6 @@
"replaced {new_name}" => "замінено {new_name}",
"undo" => "відмінити",
"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
"unshared {files}" => "неопубліковано {files}",
"deleted {files}" => "видалено {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
"Upload Error" => "Помилка завантаження",

View File

@ -17,8 +17,6 @@
"replaced {new_name}" => "đã thay thế {new_name}",
"undo" => "lùi lại",
"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
"unshared {files}" => "hủy chia sẽ {files}",
"deleted {files}" => "đã xóa {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
"Upload Error" => "Tải lên lỗi",

View File

@ -17,8 +17,6 @@
"replaced {new_name}" => "已替换 {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已用 {old_name} 替换 {new_name}",
"unshared {files}" => "未分享的 {files}",
"deleted {files}" => "已删除的 {files}",
"Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0",
"Upload Error" => "上传错误",
"Close" => "关闭",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "文件没有上传",
"Missing a temporary folder" => "缺少临时目录",
"Failed to write to disk" => "写入磁盘失败",
"Not enough space available" => "没有足够可用空间",
"Invalid directory." => "无效文件夹。",
"Files" => "文件",
"Unshare" => "取消分享",
@ -19,8 +20,6 @@
"replaced {new_name}" => "替换 {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}",
"unshared {files}" => "取消了共享 {files}",
"deleted {files}" => "删除了 {files}",
"'.' is an invalid file name." => "'.' 是一个无效的文件名。",
"File name cannot be empty." => "文件名不能为空。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。",

View File

@ -7,6 +7,7 @@
"No file was uploaded" => "無已上傳檔案",
"Missing a temporary folder" => "遺失暫存資料夾",
"Failed to write to disk" => "寫入硬碟失敗",
"Not enough space available" => "沒有足夠的可用空間",
"Invalid directory." => "無效的資料夾。",
"Files" => "檔案",
"Unshare" => "取消共享",
@ -19,8 +20,6 @@
"replaced {new_name}" => "已取代 {new_name}",
"undo" => "復原",
"replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}",
"unshared {files}" => "已取消分享 {files}",
"deleted {files}" => "已刪除 {files}",
"'.' is an invalid file name." => "'.' 是不合法的檔名。",
"File name cannot be empty." => "檔名不能為空。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 '\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 。",

View File

@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "ownCloud로 전환한 다음 암호화에 사용할 암호를 변경하면 변환이 완료됩니다.",
"switched to client side encryption" => "클라이언트 암호화로 변경됨",
"Change encryption password to login password" => "암호화 암호를 로그인 암호로 변경",
"Please check your passwords and try again." => "암호를 확인한 다음 다시 시도하십시오.",
"Could not change your file encryption password to your login password" => "암호화 암호를 로그인 암호로 변경할 수 없습니다",
"Choose encryption mode:" => "암호화 모드 선택:",
"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "클라이언트 암호화 (안전하지만 웹에서 데이터에 접근할 수 없음)",
"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "서버 암호화 (웹 및 데스크톱 클라이언트에서 데이터에 접근할 수 있음)",
"None (no encryption at all)" => "없음 (암호화하지 않음)",
"Important: Once you selected an encryption mode there is no way to change it back" => "알림: 암호화 모드를 선택하면 다른 것으로 변경할 수 없습니다",
"User specific (let the user decide)" => "사용자 지정 (사용자별 설정)",
"Encryption" => "암호화",
"Exclude the following file types from encryption" => "다음 파일 형식은 암호화하지 않음",
"None" => "없음"

View File

@ -1,4 +1,13 @@
<?php $TRANSLATIONS = array(
"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Пожалуйста, переключитесь на ownCloud-клиент и измените Ваш пароль шифрования для завершения конвертации.",
"switched to client side encryption" => "переключено на шифрование на клиентской стороне",
"Please check your passwords and try again." => "Пожалуйста, проверьте Ваш пароль и попробуйте снова",
"Choose encryption mode:" => "Выберите способ шифрования:",
"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Шифрование на стороне клиента (наиболее безопасно, но делает невозможным получение доступа к Вашим данным по вэб-интерфейсу)",
"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Шифрование на стороне сервера (позволяет Вам получить доступ к Вашим файлам по вэб-интерфейсу и десктопному клиенту)",
"None (no encryption at all)" => "Нет (шифрование полностью отсутствует)",
"Important: Once you selected an encryption mode there is no way to change it back" => "Важно: Невозможно будет изменить выбранный способ шифрования",
"User specific (let the user decide)" => "Специфика пользователя (позволено решить пользователю)",
"Encryption" => "Шифрование",
"Exclude the following file types from encryption" => "Исключите следующие типы файлов из шифрования",
"None" => "Ни один"

View File

@ -5,8 +5,8 @@
"Fill out all required fields" => "모든 필수 항목을 입력하십시오",
"Please provide a valid Dropbox app key and secret." => "올바른 Dropbox 앱 키와 암호를 입력하십시오.",
"Error configuring Google Drive storage" => "Google 드라이브 저장소 설정 오류",
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고</b>\"smbclient\"가 설치되지 않았습니다. CIFS/SMB 공유애 연결이 불가능 합니다.. 시스템 관리자에게 요청하여 설치하시기 바랍니다.",
"<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>경고</b>PHP용 FTP 지원이 사용 불가능 하거나 설치되지 않았습니다. FTP 공유에 연결이 불가능 합니다. 시스템 관리자에게 요청하여 설치하시기 바랍니다. ",
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> \"smbclient\"가 설치되지 않았습니다. CIFS/SMB 공유 자원에 연결할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"<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>경고:</b> PHP FTP 지원이 비활성화되어 있거나 설치되지 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"External Storage" => "외부 저장소",
"Mount point" => "마운트 지점",
"Backend" => "백엔드",

View File

View File

@ -0,0 +1,35 @@
<?php
/**
* ownCloud - user_ldap
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
// Check user and app status
OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser'];
if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)){
OCP\JSON::success();
} else {
$l=OC_L10N::get('user_ldap');
OCP\JSON::error(array('message' => $l->t('Failed to delete the server configuration')));
}

View File

@ -0,0 +1,31 @@
<?php
/**
* ownCloud - user_ldap
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
// Check user and app status
OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser'];
$connection = new \OCA\user_ldap\lib\Connection($prefix);
OCP\JSON::success(array('configuration' => $connection->getConfiguration()));

View File

@ -0,0 +1,34 @@
<?php
/**
* ownCloud - user_ldap
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
// Check user and app status
OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$serverConnections = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
sort($serverConnections);
$lk = array_pop($serverConnections);
$ln = intval(str_replace('s', '', $lk));
$nk = 's'.str_pad($ln+1, 2, '0', STR_PAD_LEFT);
OCP\JSON::success(array('configPrefix' => $nk));

View File

@ -0,0 +1,33 @@
<?php
/**
* ownCloud - user_ldap
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
// Check user and app status
OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser'];
$connection = new \OCA\user_ldap\lib\Connection($prefix);
$connection->setConfiguration($_POST);
$connection->saveConfiguration();
OCP\JSON::success();

View File

@ -4,7 +4,7 @@
* ownCloud - user_ldap
*
* @author Arthur Schiwon
* @copyright 2012 Arthur Schiwon blizzz@owncloud.com
* @copyright 2012, 2013 Arthur Schiwon blizzz@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
@ -26,14 +26,16 @@ OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
$connection = new \OCA\user_ldap\lib\Connection(null);
$l=OC_L10N::get('user_ldap');
$connection = new \OCA\user_ldap\lib\Connection('', null);
if($connection->setConfiguration($_POST)) {
//Configuration is okay
if($connection->bind()) {
OCP\JSON::success(array('message' => 'The configuration is valid and the connection could be established!'));
OCP\JSON::success(array('message' => $l->t('The configuration is valid and the connection could be established!')));
} else {
OCP\JSON::error(array('message' => 'The configuration is valid, but the Bind failed. Please check the server settings and credentials.'));
OCP\JSON::error(array('message' => $l->t('The configuration is valid, but the Bind failed. Please check the server settings and credentials.')));
}
} else {
OCP\JSON::error(array('message' => 'The configuration is invalid. Please look in the ownCloud log for further details.'));
OCP\JSON::error(array('message' => $l->t('The configuration is invalid. Please look in the ownCloud log for further details.')));
}

View File

@ -23,15 +23,23 @@
OCP\App::registerAdmin('user_ldap', 'settings');
$connector = new OCA\user_ldap\lib\Connection('user_ldap');
$userBackend = new OCA\user_ldap\USER_LDAP();
$userBackend->setConnector($connector);
$groupBackend = new OCA\user_ldap\GROUP_LDAP();
$groupBackend->setConnector($connector);
$configPrefixes = OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes(true);
if(count($configPrefixes) == 1) {
$connector = new OCA\user_ldap\lib\Connection($configPrefixes[0]);
$userBackend = new OCA\user_ldap\USER_LDAP();
$userBackend->setConnector($connector);
$groupBackend = new OCA\user_ldap\GROUP_LDAP();
$groupBackend->setConnector($connector);
} else {
$userBackend = new OCA\user_ldap\User_Proxy($configPrefixes);
$groupBackend = new OCA\user_ldap\Group_Proxy($configPrefixes);
}
// register user backend
OC_User::useBackend($userBackend);
OC_Group::useBackend($groupBackend);
if(count($configPrefixes) > 0) {
// register user backend
OC_User::useBackend($userBackend);
OC_Group::useBackend($groupBackend);
}
// add settings page to navigation
$entry = array(

View File

@ -5,7 +5,7 @@
//ATTENTION
//Upgrade from ownCloud 3 (LDAP backend 0.1) to ownCloud 4.5 (LDAP backend 0.3) is not supported!!
//You must do upgrade to ownCloud 4.0 first!
//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad efffects.
//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad effects.
//settings
$pw = OCP\Config::getAppValue('user_ldap', 'ldap_password');
@ -22,12 +22,10 @@ if($state == 'unset') {
OCP\Config::setSystemValue('ldapIgnoreNamingRules', false);
}
// ### SUPPORTED upgrade path starts here ###
//from version 0.2 to 0.3 (0.2.0.x dev version)
$objects = array('user', 'group');
$connector = new \OCA\user_ldap\lib\Connection('user_ldap');
$connector = new \OCA\user_ldap\lib\Connection();
$userBE = new \OCA\user_ldap\USER_LDAP();
$userBE->setConnector($connector);
$groupBE = new \OCA\user_ldap\GROUP_LDAP();
@ -80,3 +78,13 @@ function escapeDN($dn) {
return $dn;
}
// SUPPORTED UPGRADE FROM Version 0.3 (ownCloud 4.5) to 0.4 (ownCloud 5)
if(!isset($connector)) {
$connector = new \OCA\user_ldap\lib\Connection();
}
//it is required, that connections do have ldap_configuration_active setting stored in the database
$connector->getConfiguration();
$connector->saveConfiguration();

View File

@ -1 +1 @@
0.3.0.1
0.3.9.0

View File

@ -171,7 +171,6 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
return array();
}
$search = empty($search) ? '*' : '*'.$search.'*';
$groupUsers = array();
$isMemberUid = (strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid');
foreach($members as $member) {
@ -179,7 +178,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
//we got uids, need to get their DNs to 'tranlsate' them to usernames
$filter = $this->combineFilterWithAnd(array(
\OCP\Util::mb_str_replace('%uid', $member, $this->connection>ldapLoginFilter, 'UTF-8'),
$this->connection->ldapUserDisplayName.'='.$search
$this->getFilterPartForUserSearch($search)
));
$ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
@ -188,8 +187,8 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
$groupUsers[] = $this->dn2username($ldap_users[0]);
} else {
//we got DNs, check if we need to filter by search or we can give back all of them
if($search != '*') {
if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->connection->ldapUserDisplayName.'='.$search)) {
if(!empty($search)) {
if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->getFilterPartForUserSearch($search))) {
continue;
}
}
@ -230,10 +229,9 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if($limit <= 0) {
$limit = null;
}
$search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapGroupFilter,
$this->connection->ldapGroupDisplayName.'='.$search
$this->getFilterPartForGroupSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getGroups Filter '.$filter, \OCP\Util::DEBUG);
$ldap_groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName, 'dn'), $limit, $offset);

View File

@ -0,0 +1,178 @@
<?php
/**
* ownCloud
*
* @author Artuhr Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
namespace OCA\user_ldap;
class Group_Proxy extends lib\Proxy implements \OCP\GroupInterface {
private $backends = array();
private $refBackend = null;
/**
* @brief Constructor
* @param $serverConfigPrefixes array containing the config Prefixes
*/
public function __construct($serverConfigPrefixes) {
parent::__construct();
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] = new \OCA\user_ldap\GROUP_LDAP();
$connector = $this->getConnector($configPrefix);
$this->backends[$configPrefix]->setConnector($connector);
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}
}
}
/**
* @brief Tries the backends one after the other until a positive result is returned from the specified method
* @param $gid string, the gid connected to the request
* @param $method string, the method of the group backend that shall be called
* @param $parameters an array of parameters to be passed
* @return mixed, the result of the method or false
*/
protected function walkBackends($gid, $method, $parameters) {
$cacheKey = $this->getGroupCacheKey($gid);
foreach($this->backends as $configPrefix => $backend) {
if($result = call_user_func_array(array($backend, $method), $parameters)) {
$this->writeToCache($cacheKey, $configPrefix);
return $result;
}
}
return false;
}
/**
* @brief Asks the backend connected to the server that supposely takes care of the gid from the request.
* @param $gid string, the gid connected to the request
* @param $method string, the method of the group backend that shall be called
* @param $parameters an array of parameters to be passed
* @return mixed, the result of the method or false
*/
protected function callOnLastSeenOn($gid, $method, $parameters) {
$cacheKey = $this->getGroupCacheKey($gid);;
$prefix = $this->getFromCache($cacheKey);
//in case the uid has been found in the past, try this stored connection first
if(!is_null($prefix)) {
if(isset($this->backends[$prefix])) {
$result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
if(!$result) {
//not found here, reset cache to null
$this->writeToCache($cacheKey, null);
}
return $result;
}
}
return false;
}
/**
* @brief is user in group?
* @param $uid uid of the user
* @param $gid gid of the group
* @returns true/false
*
* Checks whether the user is member of a group or not.
*/
public function inGroup($uid, $gid) {
return $this->handleRequest($gid, 'inGroup', array($uid, $gid));
}
/**
* @brief Get all groups a user belongs to
* @param $uid Name of the user
* @returns array with group names
*
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
*/
public function getUserGroups($uid) {
$groups = array();
foreach($this->backends as $backend) {
$backendGroups = $backend->getUserGroups($uid);
if (is_array($backendGroups)) {
$groups = array_merge($groups, $backendGroups);
}
}
return $groups;
}
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
$users = array();
foreach($this->backends as $backend) {
$backendUsers = $backend->usersInGroup($gid, $search, $limit, $offset);
if (is_array($backendUsers)) {
$users = array_merge($users, $backendUsers);
}
}
return $users;
}
/**
* @brief get a list of all groups
* @returns array with group names
*
* Returns a list with all groups
*/
public function getGroups($search = '', $limit = -1, $offset = 0) {
$groups = array();
foreach($this->backends as $backend) {
$backendGroups = $backend->getGroups($search, $limit, $offset);
if (is_array($backendGroups)) {
$groups = array_merge($groups, $backendGroups);
}
}
return $groups;
}
/**
* check if a group exists
* @param string $gid
* @return bool
*/
public function groupExists($gid) {
return $this->handleRequest($gid, 'groupExists', array($gid));
}
/**
* @brief Check if backend implements actions
* @param $actions bitwise-or'ed actions
* @returns boolean
*
* Returns the supported actions as int to be
* compared with OC_USER_BACKEND_CREATE_USER etc.
*/
public function implementsActions($actions) {
//it's the same across all our user backends obviously
return $this->refBackend->implementsActions($actions);
}
}

View File

@ -1,6 +1,113 @@
var LdapConfiguration = {
refreshConfig: function() {
if($('#ldap_serverconfig_chooser option').length < 2) {
LdapConfiguration.addConfiguration(true);
return;
}
$.post(
OC.filePath('user_ldap','ajax','getConfiguration.php'),
$('#ldap_serverconfig_chooser').serialize(),
function (result) {
if(result.status == 'success') {
$.each(result.configuration, function(configkey, configvalue) {
elementID = '#'+configkey;
//deal with Checkboxes
if($(elementID).is('input[type=checkbox]')) {
if(configvalue == 1) {
$(elementID).attr('checked', 'checked');
} else {
$(elementID).removeAttr('checked');
}
return;
}
//On Textareas, Multi-Line Settings come as array
if($(elementID).is('textarea') && $.isArray(configvalue)) {
configvalue = configvalue.join("\n");
}
// assign the value
$('#'+configkey).val(configvalue);
});
}
}
);
},
resetDefaults: function() {
$('#ldap').find('input[type=text], input[type=number], input[type=password], textarea, select').each(function() {
if($(this).attr('id') == 'ldap_serverconfig_chooser') {
return;
}
$(this).val($(this).attr('data-default'));
});
$('#ldap').find('input[type=checkbox]').each(function() {
if($(this).attr('data-default') == 1) {
$(this).attr('checked', 'checked');
} else {
$(this).removeAttr('checked');
}
});
},
deleteConfiguration: function() {
$.post(
OC.filePath('user_ldap','ajax','deleteConfiguration.php'),
$('#ldap_serverconfig_chooser').serialize(),
function (result) {
if(result.status == 'success') {
$('#ldap_serverconfig_chooser option:selected').remove();
$('#ldap_serverconfig_chooser option:first').select();
LdapConfiguration.refreshConfig();
} else {
OC.dialogs.alert(
result.message,
t('user_ldap', 'Deletion failed')
);
}
}
);
},
addConfiguration: function(doNotAsk) {
$.post(
OC.filePath('user_ldap','ajax','getNewServerConfigPrefix.php'),
function (result) {
if(result.status == 'success') {
if(doNotAsk) {
LdapConfiguration.resetDefaults();
} else {
OC.dialogs.confirm(
t('user_ldap', 'Take over settings from recent server configuration?'),
t('user_ldap', 'Keep settings?'),
function(keep) {
if(!keep) {
LdapConfiguration.resetDefaults();
}
}
);
}
$('#ldap_serverconfig_chooser option:selected').removeAttr('selected');
var html = '<option value="'+result.configPrefix+'" selected="selected">'+$('#ldap_serverconfig_chooser option').length+'. Server</option>';
$('#ldap_serverconfig_chooser option:last').before(html);
} else {
OC.dialogs.alert(
result.message,
t('user_ldap', 'Cannot add server configuration')
);
}
}
);
}
}
$(document).ready(function() {
$('#ldapSettings').tabs();
$('#ldap_submit').button();
$('#ldap_action_test_connection').button();
$('#ldap_action_delete_configuration').button();
LdapConfiguration.refreshConfig();
$('#ldap_action_test_connection').click(function(event){
event.preventDefault();
$.post(
@ -10,15 +117,60 @@ $(document).ready(function() {
if (result.status == 'success') {
OC.dialogs.alert(
result.message,
'Connection test succeeded'
t('user_ldap', 'Connection test succeeded')
);
} else {
OC.dialogs.alert(
result.message,
'Connection test failed'
t('user_ldap', 'Connection test failed')
);
}
}
);
});
$('#ldap_action_delete_configuration').click(function(event) {
event.preventDefault();
OC.dialogs.confirm(
t('user_ldap', 'Do you really want to delete the current Server Configuration?'),
t('user_ldap', 'Confirm Deletion'),
function(deleteConfiguration) {
if(deleteConfiguration) {
LdapConfiguration.deleteConfiguration();
}
}
);
});
$('#ldap_submit').click(function(event) {
event.preventDefault();
$.post(
OC.filePath('user_ldap','ajax','setConfiguration.php'),
$('#ldap').serialize(),
function (result) {
bgcolor = $('#ldap_submit').css('background');
if (result.status == 'success') {
//the dealing with colors is a but ugly, but the jQuery version in use has issues with rgba colors
$('#ldap_submit').css('background', '#fff');
$('#ldap_submit').effect('highlight', {'color':'#A8FA87'}, 5000, function() {
$('#ldap_submit').css('background', bgcolor);
});
} else {
$('#ldap_submit').css('background', '#fff');
$('#ldap_submit').effect('highlight', {'color':'#E97'}, 5000, function() {
$('#ldap_submit').css('background', bgcolor);
});
}
}
);
});
$('#ldap_serverconfig_chooser').change(function(event) {
value = $('#ldap_serverconfig_chooser option:selected:first').attr('value');
if(value == 'NEW') {
LdapConfiguration.addConfiguration(false);
} else {
LdapConfiguration.refreshConfig();
}
});
});

View File

@ -1,8 +1,10 @@
<?php $TRANSLATIONS = array(
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>경고</b>user_ldap 앱과 user_webdavauth 앱은 호환되지 않습니다. 오동작을 일으킬 수 있으므로, 시스템 관리자에게 요청하여, 둘 중 하나를 비활성화 하시기 바랍니다.",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. 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 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
"Host" => "호스트",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL을 사용하는 경우가 아니라면 프로토콜을 입력하지 않아도 됩니다. SSL을 사용하려면 ldaps://를 입력하십시오.",
"Base DN" => "기본 DN",
"One Base DN per line" => "기본 DN을 한 줄에 하나씩 입력하십시오",
"You can specify Base DN for users and groups in the Advanced tab" => "고급 탭에서 사용자 및 그룹에 대한 기본 DN을 지정할 수 있습니다.",
"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과 암호를 비워 두십시오.",
@ -19,7 +21,9 @@
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "자리 비움자를 사용할 수 없습니다. 예제: \"objectClass=posixGroup\"",
"Port" => "포트",
"Base User Tree" => "기본 사용자 트리",
"One User Base DN per line" => "사용자 DN을 한 줄에 하나씩 입력하십시오",
"Base Group Tree" => "기본 그룹 트리",
"One Group Base DN per line" => "그룹 기본 DN을 한 줄에 하나씩 입력하십시오",
"Group-Member association" => "그룹-회원 연결",
"Use TLS" => "TLS 사용",
"Do not use it for SSL connections, it will fail." => "SSL 연결 시 사용하는 경우 연결되지 않습니다.",

View File

@ -719,6 +719,50 @@ abstract class Access {
return $combinedFilter;
}
/**
* @brief creates a filter part for to perfrom search for users
* @param string $search the search term
* @return string the final filter part to use in LDAP searches
*/
public function getFilterPartForUserSearch($search) {
return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForUserSearch, $this->connection->ldapUserDisplayName);
}
/**
* @brief creates a filter part for to perfrom search for groups
* @param string $search the search term
* @return string the final filter part to use in LDAP searches
*/
public function getFilterPartForGroupSearch($search) {
return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForGroupSearch, $this->connection->ldapGroupDisplayName);
}
/**
* @brief creates a filter part for searches
* @param string $search the search term
* @param string $fallbackAttribute a fallback attribute in case the user
* did not define search attributes. Typically the display name attribute.
* @returns string the final filter part to use in LDAP searches
*/
private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
$filter = array();
$search = empty($search) ? '*' : '*'.$search.'*';
if(!is_array($searchAttributes) || count($searchAttributes) == 0) {
if(empty($fallbackAttribute)) {
return '';
}
$filter[] = $fallbackAttribute . '=' . $search;
} else {
foreach($searchAttributes as $attribute) {
$filter[] = $attribute . '=' . $search;
}
}
if(count($filter) == 1) {
return '('.$filter[0].')';
}
return $this->combineFilterWithOr($filter);
}
public function areCredentialsValid($name, $password) {
$name = $this->DNasBaseParameter($name);
$testConnection = clone $this->connection;
@ -912,7 +956,7 @@ abstract class Access {
$reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
//a bit recursive, $offset of 0 is the exit
\OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
$this->search($filter, $base, $attr, $limit, $reOffset, true);
$this->search($filter, array($base), $attr, $limit, $reOffset, true);
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
//still no cookie? obviously, the server does not like us. Let's skip paging efforts.
//TODO: remember this, probably does not change in the next request...

View File

@ -4,7 +4,7 @@
* ownCloud LDAP Access
*
* @author Arthur Schiwon
* @copyright 2012 Arthur Schiwon blizzz@owncloud.com
* @copyright 2012, 2013 Arthur Schiwon blizzz@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
@ -25,6 +25,7 @@ namespace OCA\user_ldap\lib;
class Connection {
private $ldapConnectionRes = null;
private $configPrefix;
private $configID;
private $configured = false;
@ -35,6 +36,8 @@ class Connection {
protected $config = array(
'ldapHost' => null,
'ldapPort' => null,
'ldapBackupHost' => null,
'ldapBackupPort' => null,
'ldapBase' => null,
'ldapBaseUsers' => null,
'ldapBaseGroups' => null,
@ -48,6 +51,7 @@ class Connection {
'ldapUserFilter' => null,
'ldapGroupFilter' => null,
'ldapGroupDisplayName' => null,
'ldapGroupMemberAssocAttr' => null,
'ldapLoginFilter' => null,
'ldapQuotaAttribute' => null,
'ldapQuotaDefault' => null,
@ -55,15 +59,24 @@ class Connection {
'ldapCacheTTL' => null,
'ldapUuidAttribute' => null,
'ldapOverrideUuidAttribute' => null,
'ldapOverrideMainServer' => false,
'ldapConfigurationActive' => false,
'ldapAttributesForUserSearch' => null,
'ldapAttributesForGroupSearch' => null,
'homeFolderNamingRule' => null,
'hasPagedResultSupport' => false,
);
public function __construct($configID = 'user_ldap') {
/**
* @brief Constructor
* @param $configPrefix a string with the prefix for the configkey column (appconfig table)
* @param $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections
*/
public function __construct($configPrefix = '', $configID = 'user_ldap') {
$this->configPrefix = $configPrefix;
$this->configID = $configID;
$this->cache = \OC_Cache::getGlobalCache();
$this->config['hasPagedResultSupport'] = (function_exists('ldap_control_paged_result') && function_exists('ldap_control_paged_result_response'));
\OCP\Util::writeLog('user_ldap', 'PHP supports paged results? '.print_r($this->config['hasPagedResultSupport'], true), \OCP\Util::INFO);
}
public function __destruct() {
@ -84,12 +97,12 @@ class Connection {
public function __set($name, $value) {
$changed = false;
//omly few options are writable
//only few options are writable
if($name == 'ldapUuidAttribute') {
\OCP\Util::writeLog('user_ldap', 'Set config ldapUuidAttribute to '.$value, \OCP\Util::DEBUG);
$this->config[$name] = $value;
if(!empty($this->configID)) {
\OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', $value);
\OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', $value);
}
$changed = true;
}
@ -126,7 +139,7 @@ class Connection {
}
private function getCacheKey($key) {
$prefix = 'LDAP-'.$this->configID.'-';
$prefix = 'LDAP-'.$this->configID.'-'.$this->configPrefix.'-';
if(is_null($key)) {
return $prefix;
}
@ -164,7 +177,8 @@ class Connection {
if(!$this->configured) {
$this->readConfiguration();
}
if(!$this->config['ldapCacheTTL']) {
if(!$this->config['ldapCacheTTL']
|| !$this->config['ldapConfigurationActive']) {
return null;
}
$key = $this->getCacheKey($key);
@ -176,42 +190,96 @@ class Connection {
$this->cache->clear($this->getCacheKey(null));
}
private function getValue($varname) {
static $defaults;
if(is_null($defaults)){
$defaults = $this->getDefaults();
}
return \OCP\Config::getAppValue($this->configID,
$this->configPrefix.$varname,
$defaults[$varname]);
}
private function setValue($varname, $value) {
\OCP\Config::setAppValue($this->configID,
$this->configPrefix.$varname,
$value);
}
/**
* Caches the general LDAP configuration.
*/
private function readConfiguration($force = false) {
\OCP\Util::writeLog('user_ldap', 'Checking conf state: isConfigured? '.print_r($this->configured, true).' isForce? '.print_r($force, true).' configID? '.print_r($this->configID, true), \OCP\Util::DEBUG);
if((!$this->configured || $force) && !is_null($this->configID)) {
\OCP\Util::writeLog('user_ldap', 'Reading the configuration', \OCP\Util::DEBUG);
$this->config['ldapHost'] = \OCP\Config::getAppValue($this->configID, 'ldap_host', '');
$this->config['ldapPort'] = \OCP\Config::getAppValue($this->configID, 'ldap_port', 389);
$this->config['ldapAgentName'] = \OCP\Config::getAppValue($this->configID, 'ldap_dn', '');
$this->config['ldapAgentPassword'] = base64_decode(\OCP\Config::getAppValue($this->configID, 'ldap_agent_password', ''));
$this->config['ldapBase'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base', ''));
$this->config['ldapBaseUsers'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base_users', $this->config['ldapBase']));
$this->config['ldapBaseGroups'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base_groups', $this->config['ldapBase']));
$this->config['ldapTLS'] = \OCP\Config::getAppValue($this->configID, 'ldap_tls', 0);
$this->config['ldapNoCase'] = \OCP\Config::getAppValue($this->configID, 'ldap_nocase', 0);
$this->config['turnOffCertCheck'] = \OCP\Config::getAppValue($this->configID, 'ldap_turn_off_cert_check', 0);
$this->config['ldapUserDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_display_name', 'uid'), 'UTF-8');
$this->config['ldapUserFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_userlist_filter', 'objectClass=person');
$this->config['ldapGroupFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_filter', '(objectClass=posixGroup)');
$this->config['ldapLoginFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_login_filter', '(uid=%uid)');
$this->config['ldapGroupDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_group_display_name', 'uid'), 'UTF-8');
$this->config['ldapQuotaAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_attr', '');
$this->config['ldapQuotaDefault'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_def', '');
$this->config['ldapEmailAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_email_attr', '');
$this->config['ldapGroupMemberAssocAttr'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_member_assoc_attribute', 'uniqueMember');
$this->config['ldapIgnoreNamingRules'] = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
$this->config['ldapCacheTTL'] = \OCP\Config::getAppValue($this->configID, 'ldap_cache_ttl', 10*60);
$this->config['ldapUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
$this->config['ldapOverrideUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_override_uuid_attribute', 0);
$this->config['homeFolderNamingRule'] = \OCP\Config::getAppValue($this->configID, 'home_folder_naming_rule', 'opt:username');
$defaults = $this->getDefaults();
$v = 'getValue';
$this->config['ldapHost'] = $this->$v('ldap_host');
$this->config['ldapBackupHost'] = $this->$v('ldap_backup_host');
$this->config['ldapPort'] = $this->$v('ldap_port');
$this->config['ldapBackupPort'] = $this->$v('ldap_backup_port');
$this->config['ldapOverrideMainServer']
= $this->$v('ldap_override_main_server');
$this->config['ldapAgentName'] = $this->$v('ldap_dn');
$this->config['ldapAgentPassword']
= base64_decode($this->$v('ldap_agent_password'));
$rawLdapBase = $this->$v('ldap_base');
$this->config['ldapBase']
= preg_split('/\r\n|\r|\n/', $rawLdapBase);
$this->config['ldapBaseUsers']
= preg_split('/\r\n|\r|\n/', ($this->$v('ldap_base_users')));
$this->config['ldapBaseGroups']
= preg_split('/\r\n|\r|\n/', $this->$v('ldap_base_groups'));
unset($rawLdapBase);
$this->config['ldapTLS'] = $this->$v('ldap_tls');
$this->config['ldapNoCase'] = $this->$v('ldap_nocase');
$this->config['turnOffCertCheck']
= $this->$v('ldap_turn_off_cert_check');
$this->config['ldapUserDisplayName']
= mb_strtolower($this->$v('ldap_display_name'),'UTF-8');
$this->config['ldapUserFilter']
= $this->$v('ldap_userlist_filter');
$this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter');
$this->config['ldapLoginFilter'] = $this->$v('ldap_login_filter');
$this->config['ldapGroupDisplayName']
= mb_strtolower($this->$v('ldap_group_display_name'), 'UTF-8');
$this->config['ldapQuotaAttribute']
= $this->$v('ldap_quota_attr');
$this->config['ldapQuotaDefault']
= $this->$v('ldap_quota_def');
$this->config['ldapEmailAttribute']
= $this->$v('ldap_email_attr');
$this->config['ldapGroupMemberAssocAttr']
= $this->$v('ldap_group_member_assoc_attribute');
$this->config['ldapIgnoreNamingRules']
= \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
$this->config['ldapCacheTTL'] = $this->$v('ldap_cache_ttl');
$this->config['ldapUuidAttribute']
= $this->$v('ldap_uuid_attribute');
$this->config['ldapOverrideUuidAttribute']
= $this->$v('ldap_override_uuid_attribute');
$this->config['homeFolderNamingRule']
= $this->$v('home_folder_naming_rule');
$this->config['ldapConfigurationActive']
= $this->$v('ldap_configuration_active');
$this->config['ldapAttributesForUserSearch']
= preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_user_search'));
$this->config['ldapAttributesForGroupSearch']
= preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_group_search'));
$this->configured = $this->validateConfiguration();
}
}
/**
* @return returns an array that maps internal variable names to database fields
*/
private function getConfigTranslationArray() {
static $array = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_backup_host'=>'ldapBackupHost', 'ldap_backup_port'=>'ldapBackupPort', 'ldap_override_main_server' => 'ldapOverrideMainServer', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', 'ldap_display_name'=>'ldapUserDisplayName', 'ldap_group_display_name'=>'ldapGroupDisplayName',
'ldap_tls'=>'ldapTLS', 'ldap_nocase'=>'ldapNoCase', 'ldap_quota_def'=>'ldapQuotaDefault', 'ldap_quota_attr'=>'ldapQuotaAttribute', 'ldap_email_attr'=>'ldapEmailAttribute', 'ldap_group_member_assoc_attribute'=>'ldapGroupMemberAssocAttr', 'ldap_cache_ttl'=>'ldapCacheTTL', 'home_folder_naming_rule' => 'homeFolderNamingRule', 'ldap_turn_off_cert_check' => 'turnOffCertCheck', 'ldap_configuration_active' => 'ldapConfigurationActive', 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch', 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch');
return $array;
}
/**
* @brief set LDAP configuration with values delivered by an array, not read from configuration
* @param $config array that holds the config parameters in an associated array
@ -223,9 +291,7 @@ class Connection {
return false;
}
$params = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', 'ldap_display_name'=>'ldapUserDisplayName', 'ldap_group_display_name'=>'ldapGroupDisplayName',
'ldap_tls'=>'ldapTLS', 'ldap_nocase'=>'ldapNoCase', 'ldap_quota_def'=>'ldapQuotaDefault', 'ldap_quota_attr'=>'ldapQuotaAttribute', 'ldap_email_attr'=>'ldapEmailAttribute', 'ldap_group_member_assoc_attribute'=>'ldapGroupMemberAssocAttr', 'ldap_cache_ttl'=>'ldapCacheTTL', 'home_folder_naming_rule' => 'homeFolderNamingRule');
$params = $this->getConfigTranslationArray();
foreach($config as $parameter => $value) {
if(isset($this->config[$parameter])) {
@ -246,6 +312,71 @@ class Connection {
return $this->configured;
}
/**
* @brief saves the current Configuration in the database
*/
public function saveConfiguration() {
$trans = array_flip($this->getConfigTranslationArray());
foreach($this->config as $key => $value) {
\OCP\Util::writeLog('user_ldap', 'LDAP: storing key '.$key.' value '.$value, \OCP\Util::DEBUG);
switch ($key) {
case 'ldapAgentPassword':
$value = base64_encode($value);
break;
case 'homeFolderNamingRule':
$value = empty($value) ? 'opt:username' : 'attr:'.$value;
break;
case 'ldapBase':
case 'ldapBaseUsers':
case 'ldapBaseGroups':
case 'ldapAttributesForUserSearch':
case 'ldapAttributesForGroupSearch':
if(is_array($value)){
$value = implode("\n", $value);
}
break;
case 'ldapIgnoreNamingRules':
case 'ldapOverrideUuidAttribute':
case 'ldapUuidAttribute':
case 'hasPagedResultSupport':
continue 2;
}
if(is_null($value)) {
$value = '';
}
$this->setValue($trans[$key], $value);
}
$this->clearCache();
}
/**
* @brief get the current LDAP configuration
* @return array
*/
public function getConfiguration() {
$this->readConfiguration();
$trans = $this->getConfigTranslationArray();
$config = array();
foreach($trans as $dbKey => $classKey) {
if($classKey == 'homeFolderNamingRule') {
if(strpos($this->config[$classKey], 'opt') === 0) {
$config[$dbKey] = '';
} else {
$config[$dbKey] = substr($this->config[$classKey], 5);
}
continue;
} else if((strpos($classKey, 'ldapBase') !== false)
|| (strpos($classKey, 'ldapAttributes') !== false)) {
$config[$dbKey] = implode("\n", $this->config[$classKey]);
continue;
}
$config[$dbKey] = $this->config[$classKey];
}
return $config;
}
/**
* @brief Validates the user specified configuration
* @returns true if configuration seems OK, false otherwise
@ -264,9 +395,21 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'No group filter is specified, LDAP group feature will not be used.', \OCP\Util::INFO);
}
if(!in_array($this->config['ldapUuidAttribute'], array('auto', 'entryuuid', 'nsuniqueid', 'objectguid')) && (!is_null($this->configID))) {
\OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
\OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', 'auto');
\OCP\Util::writeLog('user_ldap', 'Illegal value for the UUID Attribute, reset to autodetect.', \OCP\Util::INFO);
}
if(empty($this->config['ldapBackupPort'])) {
//force default
$this->config['ldapBackupPort'] = $this->config['ldapPort'];
}
foreach(array('ldapAttributesForUserSearch', 'ldapAttributesForGroupSearch') as $key) {
if(is_array($this->config[$key])
&& count($this->config[$key]) == 1
&& empty($this->config[$key][0])) {
$this->config[$key] = array();
}
}
//second step: critical checks. If left empty or filled wrong, set as unconfigured and give a warning.
@ -310,10 +453,51 @@ class Connection {
return $configurationOK;
}
/**
* @returns an associative array with the default values. Keys are correspond
* to config-value entries in the database table
*/
public function getDefaults() {
return array(
'ldap_host' => '',
'ldap_port' => '389',
'ldap_backup_host' => '',
'ldap_backup_port' => '',
'ldap_override_main_server' => '',
'ldap_dn' => '',
'ldap_agent_password' => '',
'ldap_base' => '',
'ldap_base_users' => '',
'ldap_base_groups' => '',
'ldap_userlist_filter' => 'objectClass=person',
'ldap_login_filter' => 'uid=%uid',
'ldap_group_filter' => 'objectClass=posixGroup',
'ldap_display_name' => 'cn',
'ldap_group_display_name' => 'cn',
'ldap_tls' => 1,
'ldap_nocase' => 0,
'ldap_quota_def' => '',
'ldap_quota_attr' => '',
'ldap_email_attr' => '',
'ldap_group_member_assoc_attribute' => 'uniqueMember',
'ldap_cache_ttl' => 600,
'ldap_uuid_attribute' => 'auto',
'ldap_override_uuid_attribute' => 0,
'home_folder_naming_rule' => 'opt:username',
'ldap_turn_off_cert_check' => 0,
'ldap_configuration_active' => 1,
'ldap_attributes_for_user_search' => '',
'ldap_attributes_for_group_search' => '',
);
}
/**
* Connects and Binds to LDAP
*/
private function establishConnection() {
if(!$this->config['ldapConfigurationActive']) {
return null;
}
static $phpLDAPinstalled = true;
if(!$phpLDAPinstalled) {
return false;
@ -336,16 +520,40 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'Could not turn off SSL certificate validation.', \OCP\Util::WARN);
}
}
$this->ldapConnectionRes = ldap_connect($this->config['ldapHost'], $this->config['ldapPort']);
if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
if($this->config['ldapTLS']) {
ldap_start_tls($this->ldapConnectionRes);
}
}
if(!$this->config['ldapOverrideMainServer'] && !$this->getFromCache('overrideMainServer')) {
$this->doConnect($this->config['ldapHost'], $this->config['ldapPort']);
$bindStatus = $this->bind();
$error = ldap_errno($this->ldapConnectionRes);
} else {
$bindStatus = false;
$error = null;
}
return $this->bind();
$error = null;
//if LDAP server is not reachable, try the Backup (Replica!) Server
if((!$bindStatus && ($error == -1))
|| $this->config['ldapOverrideMainServer']
|| $this->getFromCache('overrideMainServer')) {
$this->doConnect($this->config['ldapBackupHost'], $this->config['ldapBackupPort']);
$bindStatus = $this->bind();
if($bindStatus && $error == -1) {
//when bind to backup server succeeded and failed to main server,
//skip contacting him until next cache refresh
$this->writeToCache('overrideMainServer', true);
}
}
return $bindStatus;
}
}
private function doConnect($host, $port) {
$this->ldapConnectionRes = ldap_connect($host, $port);
if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
if($this->config['ldapTLS']) {
ldap_start_tls($this->ldapConnectionRes);
}
}
}
}
@ -353,6 +561,9 @@ class Connection {
* Binds to LDAP
*/
public function bind() {
if(!$this->config['ldapConfigurationActive']) {
return false;
}
$ldapLogin = @ldap_bind($this->getConnectionResource(), $this->config['ldapAgentName'], $this->config['ldapAgentPassword']);
if(!$ldapLogin) {
\OCP\Util::writeLog('user_ldap', 'Bind failed: ' . ldap_errno($this->ldapConnectionRes) . ': ' . ldap_error($this->ldapConnectionRes), \OCP\Util::ERROR);

View File

@ -0,0 +1,105 @@
<?php
/**
* ownCloud LDAP Helper
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
namespace OCA\user_ldap\lib;
class Helper {
/**
* @brief returns prefixes for each saved LDAP/AD server configuration.
* @param bool optional, whether only active configuration shall be
* retrieved, defaults to false
* @return array with a list of the available prefixes
*
* Configuration prefixes are used to set up configurations for n LDAP or
* AD servers. Since configuration is stored in the database, table
* appconfig under appid user_ldap, the common identifiers in column
* 'configkey' have a prefix. The prefix for the very first server
* configuration is empty.
* Configkey Examples:
* Server 1: ldap_login_filter
* Server 2: s1_ldap_login_filter
* Server 3: s2_ldap_login_filter
*
* The prefix needs to be passed to the constructor of Connection class,
* except the default (first) server shall be connected to.
*
*/
static public function getServerConfigurationPrefixes($activeConfigurations = false) {
$referenceConfigkey = 'ldap_configuration_active';
$query = '
SELECT DISTINCT `configkey`
FROM `*PREFIX*appconfig`
WHERE `configkey` LIKE ?
';
if($activeConfigurations) {
$query .= ' AND `configvalue` = 1';
}
$query = \OCP\DB::prepare($query);
$serverConfigs = $query->execute(array('%'.$referenceConfigkey))->fetchAll();
$prefixes = array();
foreach($serverConfigs as $serverConfig) {
$len = strlen($serverConfig['configkey']) - strlen($referenceConfigkey);
$prefixes[] = substr($serverConfig['configkey'], 0, $len);
}
return $prefixes;
}
/**
* @brief deletes a given saved LDAP/AD server configuration.
* @param string the configuration prefix of the config to delete
* @return bool true on success, false otherwise
*/
static public function deleteServerConfiguration($prefix) {
//just to be on the safe side
\OCP\User::checkAdminUser();
if(!in_array($prefix, self::getServerConfigurationPrefixes())) {
return false;
}
$query = \OCP\DB::prepare('
DELETE
FROM `*PREFIX*appconfig`
WHERE `configkey` LIKE ?
AND `appid` = "user_ldap"
AND `configkey` NOT IN ("enabled", "installed_version", "types", "bgjUpdateGroupsLastRun")
');
$res = $query->execute(array($prefix.'%'));
if(\OCP\DB::isError($res)) {
return false;
}
if($res->numRows() == 0) {
return false;
}
return true;
}
}

View File

@ -0,0 +1,104 @@
<?php
/**
* ownCloud LDAP Backend Proxy
*
* @author Arthur Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
namespace OCA\user_ldap\lib;
abstract class Proxy {
static private $connectors = array();
public function __construct() {
$this->cache = \OC_Cache::getGlobalCache();
}
private function addConnector($configPrefix) {
self::$connectors[$configPrefix] = new \OCA\user_ldap\lib\Connection($configPrefix);
}
protected function getConnector($configPrefix) {
if(!isset(self::$connectors[$configPrefix])) {
$this->addConnector($configPrefix);
}
return self::$connectors[$configPrefix];
}
protected function getConnectors() {
return self::$connectors;
}
protected function getUserCacheKey($uid) {
return 'user-'.$uid.'-lastSeenOn';
}
protected function getGroupCacheKey($gid) {
return 'group-'.$gid.'-lastSeenOn';
}
abstract protected function callOnLastSeenOn($id, $method, $parameters);
abstract protected function walkBackends($id, $method, $parameters);
/**
* @brief Takes care of the request to the User backend
* @param $uid string, the uid connected to the request
* @param $method string, the method of the user backend that shall be called
* @param $parameters an array of parameters to be passed
* @return mixed, the result of the specified method
*/
protected function handleRequest($id, $method, $parameters) {
if(!$result = $this->callOnLastSeenOn($id, $method, $parameters)) {
$result = $this->walkBackends($id, $method, $parameters);
}
return $result;
}
private function getCacheKey($key) {
$prefix = 'LDAP-Proxy-';
if(is_null($key)) {
return $prefix;
}
return $prefix.md5($key);
}
public function getFromCache($key) {
if(!$this->isCached($key)) {
return null;
}
$key = $this->getCacheKey($key);
return unserialize(base64_decode($this->cache->get($key)));
}
public function isCached($key) {
$key = $this->getCacheKey($key);
return $this->cache->hasKey($key);
}
public function writeToCache($key, $value) {
$key = $this->getCacheKey($key);
$value = base64_encode(serialize($value));
$this->cache->set($key, $value, '2592000');
}
public function clearCache() {
$this->cache->clear($this->getCacheKey(null));
}
}

View File

@ -23,58 +23,46 @@
OC_Util::checkAdminUser();
$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password', 'ldap_base', 'ldap_base_users', 'ldap_base_groups', 'ldap_userlist_filter', 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name', 'ldap_group_display_name', 'ldap_tls', 'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl', 'home_folder_naming_rule');
$params = array('ldap_host', 'ldap_port', 'ldap_backup_host',
'ldap_backup_port', 'ldap_override_main_server', 'ldap_dn',
'ldap_agent_password', 'ldap_base', 'ldap_base_users',
'ldap_base_groups', 'ldap_userlist_filter',
'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name',
'ldap_group_display_name', 'ldap_tls',
'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def',
'ldap_quota_attr', 'ldap_email_attr',
'ldap_group_member_assoc_attribute', 'ldap_cache_ttl',
'home_folder_naming_rule'
);
OCP\Util::addscript('user_ldap', 'settings');
OCP\Util::addstyle('user_ldap', 'settings');
if ($_POST) {
$clearCache = false;
foreach($params as $param) {
if(isset($_POST[$param])) {
$clearCache = true;
if('ldap_agent_password' == $param) {
OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param]));
} elseif('home_folder_naming_rule' == $param) {
$value = empty($_POST[$param]) ? 'opt:username' : 'attr:'.$_POST[$param];
OCP\Config::setAppValue('user_ldap', $param, $value);
} else {
OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]);
}
}
elseif('ldap_tls' == $param) {
// unchecked checkboxes are not included in the post paramters
OCP\Config::setAppValue('user_ldap', $param, 0);
}
elseif('ldap_nocase' == $param) {
OCP\Config::setAppValue('user_ldap', $param, 0);
}
elseif('ldap_turn_off_cert_check' == $param) {
OCP\Config::setAppValue('user_ldap', $param, 0);
}
}
if($clearCache) {
$ldap = new \OCA\user_ldap\lib\Connection('user_ldap');
$ldap->clearCache();
}
}
// fill template
$tmpl = new OCP\Template( 'user_ldap', 'settings');
foreach($params as $param) {
$value = OCP\Config::getAppValue('user_ldap', $param, '');
$tmpl->assign($param, $value);
$tmpl = new OCP\Template('user_ldap', 'settings');
$prefixes = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
$scoHtml = '';
$i = 1;
$sel = ' selected';
foreach($prefixes as $prefix) {
$scoHtml .= '<option value="'.$prefix.'"'.$sel.'>'.$i++.'. Server</option>';
$sel = '';
}
if(count($prefixes) == 0) {
$scoHtml .= '<option value="" selected>1. Server</option>';
}
$tmpl->assign('serverConfigurationOptions', $scoHtml, false);
// assign default values
if(!isset($ldap)) {
$ldap = new \OCA\user_ldap\lib\Connection();
}
$defaults = $ldap->getDefaults();
foreach($defaults as $key => $default) {
$tmpl->assign($key.'_default', $default);
}
// settings with default values
$tmpl->assign( 'ldap_port', OCP\Config::getAppValue('user_ldap', 'ldap_port', '389'));
$tmpl->assign( 'ldap_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_display_name', 'uid'));
$tmpl->assign( 'ldap_group_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_group_display_name', 'cn'));
$tmpl->assign( 'ldap_group_member_assoc_attribute', OCP\Config::getAppValue('user_ldap', 'ldap_group_member_assoc_attribute', 'uniqueMember'));
$tmpl->assign( 'ldap_agent_password', base64_decode(OCP\Config::getAppValue('user_ldap', 'ldap_agent_password')));
$tmpl->assign( 'ldap_cache_ttl', OCP\Config::getAppValue('user_ldap', 'ldap_cache_ttl', '600'));
$hfnr = OCP\Config::getAppValue('user_ldap', 'home_folder_naming_rule', 'opt:username');
$hfnr = ($hfnr == 'opt:username') ? '' : substr($hfnr, strlen('attr:'));
$tmpl->assign( 'home_folder_naming_rule', $hfnr, '');
// $tmpl->assign();
return $tmpl->fetchPage();

View File

@ -12,31 +12,43 @@
}
?>
<fieldset id="ldapSettings-1">
<p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
<p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><textarea id="ldap_base" name="ldap_base" placeholder="<?php echo $l->t('One Base DN per line');?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>"><?php echo $_['ldap_base']; ?></textarea></p>
<p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" title="<?php echo $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.');?>" /></p>
<p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" value="<?php echo $_['ldap_agent_password']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
<p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" value="<?php echo $_['ldap_login_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
<p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" value="<?php echo $_['ldap_userlist_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
<p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" value="<?php echo $_['ldap_group_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
<p><label for="ldap_serverconfig_chooser"><?php echo $l->t('Server configuration');?></label><select id="ldap_serverconfig_chooser" name="ldap_serverconfig_chooser">
<?php echo $_['serverConfigurationOptions']; ?>
<option value="NEW"><?php echo $l->t('Add Server Configuration');?></option>
</select>
<button id="ldap_action_delete_configuration" name="ldap_action_delete_configuration">Delete Configuration</button>
</p>
<p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" data-default="<?php echo $_['ldap_host_default']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
<p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><textarea id="ldap_base" name="ldap_base" placeholder="<?php echo $l->t('One Base DN per line');?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>" data-default="<?php echo $_['ldap_base_default']; ?>" ></textarea></p>
<p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" data-default="<?php echo $_['ldap_dn_default']; ?>" title="<?php echo $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.');?>" /></p>
<p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" data-default="<?php echo $_['ldap_agent_password_default']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
<p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" data-default="<?php echo $_['ldap_login_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
<p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" data-default="<?php echo $_['ldap_userlist_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
<p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" data-default="<?php echo $_['ldap_group_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
</fieldset>
<fieldset id="ldapSettings-2">
<p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="text" id="ldap_port" name="ldap_port" value="<?php echo $_['ldap_port']; ?>" /></p>
<p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php echo $l->t('One User Base DN per line');?>" title="<?php echo $l->t('Base User Tree');?>"><?php echo $_['ldap_base_users']; ?></textarea></p>
<p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php echo $l->t('One Group Base DN per line');?>" title="<?php echo $l->t('Base Group Tree');?>"><?php echo $_['ldap_base_groups']; ?></textarea></p>
<p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute"><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
<p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1"<?php if ($_['ldap_tls']) echo ' checked'; ?> title="<?php echo $l->t('Do not use it for SSL connections, it will fail.');?>" /></p>
<p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label> <input type="checkbox" id="ldap_nocase" name="ldap_nocase" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
<p><label for="ldap_turn_off_cert_check"><?php echo $l->t('Turn off SSL certificate validation.');?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" value="1"<?php if ($_['ldap_turn_off_cert_check']) echo ' checked'; ?>><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
<p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
<p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" value="<?php echo $_['ldap_group_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
<p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /></p>
<p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
<p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></p>
<p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="text" id="ldap_cache_ttl" name="ldap_cache_ttl" value="<?php echo $_['ldap_cache_ttl']; ?>" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" /></p>
<p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" value="<?php echo $_['home_folder_naming_rule']; ?>" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" /></p>
<p><label for="ldap_configuration_active"><?php echo $l->t('Configuration Active');?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php echo $_['ldap_configuration_active_default']; ?>" title="<?php echo $l->t('When unchecked, this configuration will be skipped.');?>" /></p>
<p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="number" id="ldap_port" name="ldap_port" data-default="<?php echo $_['ldap_port_default']; ?>" /></p>
<p><label for="ldap_backup_host"><?php echo $l->t('Backup (Replica) Host');?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php echo $_['ldap_backup_host_default']; ?>" title="<?php echo $l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.');?>"></p>
<p><label for="ldap_backup_port"><?php echo $l->t('Backup (Replica) Port');?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php echo $_['ldap_backup_port_default']; ?>" /></p>
<p><label for="ldap_override_main_server"><?php echo $l->t('Disable Main Server');?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php echo $_['ldap_override_main_server_default']; ?>" title="<?php echo $l->t('When switched on, ownCloud will only connect to the replica server.');?>" /></p>
<p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php echo $l->t('One User Base DN per line');?>" data-default="<?php echo $_['ldap_base_users_default']; ?>" title="<?php echo $l->t('Base User Tree');?>"></textarea></p>
<p><label for="ldap_attributes_for_user_search"><?php echo $l->t('User Search Attributes');?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_user_search_default']; ?>" title="<?php echo $l->t('User Search Attributes');?>"></textarea></p>
<p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php echo $l->t('One Group Base DN per line');?>" data-default="<?php echo $_['ldap_base_groups_default']; ?>" title="<?php echo $l->t('Base Group Tree');?>"></textarea></p>
<p><label for="ldap_attributes_for_group_search"><?php echo $l->t('Group Search Attributes');?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_group_search_default']; ?>" title="<?php echo $l->t('Group Search Attributes');?>"></textarea></p>
<p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php echo $_['ldap_group_member_assoc_attribute_default']; ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
<p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1" data-default="<?php echo $_['ldap_tls_default']; ?>" title="<?php echo $l->t('Do not use it for SSL connections, it will fail.');?>" /></p>
<p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label> <input type="checkbox" id="ldap_nocase" name="ldap_nocase" data-default="<?php echo $_['ldap_nocase_default']; ?>" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
<p><label for="ldap_turn_off_cert_check"><?php echo $l->t('Turn off SSL certificate validation.');?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" data-default="<?php echo $_['ldap_turn_off_cert_check_default']; ?>" value="1"><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
<p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php echo $_['ldap_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
<p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php echo $_['ldap_group_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
<p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php echo $_['ldap_quota_attr_default']; ?>"/></p>
<p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php echo $_['ldap_quota_def_default']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
<p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php echo $_['ldap_email_attr_default']; ?>" /></p>
<p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" data-default="<?php echo $_['ldap_cache_ttl_default']; ?>" /></p>
<p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" data-default="<?php echo $_['home_folder_naming_rule_default']; ?>" /></p>
</fieldset>
<input type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://owncloud.org/support/ldap-backend/" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
<input id="ldap_submit" type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://doc.owncloud.org/server/5.0/admin_manual/auth_ldap.html" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
</div>
</form>

View File

@ -116,10 +116,9 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
if($limit <= 0) {
$limit = null;
}
$search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapUserFilter,
$this->connection->ldapUserDisplayName.'='.$search
$this->getFilterPartForUserSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, \OCP\Util::DEBUG);

View File

@ -0,0 +1,159 @@
<?php
/**
* ownCloud
*
* @author Artuhr Schiwon
* @copyright 2013 Arthur Schiwon blizzz@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/>.
*
*/
namespace OCA\user_ldap;
class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
private $backends = array();
private $refBackend = null;
/**
* @brief Constructor
* @param $serverConfigPrefixes array containing the config Prefixes
*/
public function __construct($serverConfigPrefixes) {
parent::__construct();
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] = new \OCA\user_ldap\USER_LDAP();
$connector = $this->getConnector($configPrefix);
$this->backends[$configPrefix]->setConnector($connector);
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}
}
}
/**
* @brief Tries the backends one after the other until a positive result is returned from the specified method
* @param $uid string, the uid connected to the request
* @param $method string, the method of the user backend that shall be called
* @param $parameters an array of parameters to be passed
* @return mixed, the result of the method or false
*/
protected function walkBackends($uid, $method, $parameters) {
$cacheKey = $this->getUserCacheKey($uid);
foreach($this->backends as $configPrefix => $backend) {
if($result = call_user_func_array(array($backend, $method), $parameters)) {
$this->writeToCache($cacheKey, $configPrefix);
return $result;
}
}
return false;
}
/**
* @brief Asks the backend connected to the server that supposely takes care of the uid from the request.
* @param $uid string, the uid connected to the request
* @param $method string, the method of the user backend that shall be called
* @param $parameters an array of parameters to be passed
* @return mixed, the result of the method or false
*/
protected function callOnLastSeenOn($uid, $method, $parameters) {
$cacheKey = $this->getUserCacheKey($uid);
$prefix = $this->getFromCache($cacheKey);
//in case the uid has been found in the past, try this stored connection first
if(!is_null($prefix)) {
if(isset($this->backends[$prefix])) {
$result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
if(!$result) {
//not found here, reset cache to null
$this->writeToCache($cacheKey, null);
}
return $result;
}
}
return false;
}
/**
* @brief Check if backend implements actions
* @param $actions bitwise-or'ed actions
* @returns boolean
*
* Returns the supported actions as int to be
* compared with OC_USER_BACKEND_CREATE_USER etc.
*/
public function implementsActions($actions) {
//it's the same across all our user backends obviously
return $this->refBackend->implementsActions($actions);
}
/**
* @brief Get a list of all users
* @returns array with all uids
*
* Get a list of all users.
*/
public function getUsers($search = '', $limit = 10, $offset = 0) {
//we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends
$users = array();
foreach($this->backends as $backend) {
$backendUsers = $backend->getUsers($search, $limit, $offset);
if (is_array($backendUsers)) {
$users = array_merge($users, $backendUsers);
}
}
return $users;
}
/**
* @brief check if a user exists
* @param string $uid the username
* @return boolean
*/
public function userExists($uid) {
return $this->handleRequest($uid, 'userExists', array($uid));
}
/**
* @brief Check if the password is correct
* @param $uid The username
* @param $password The password
* @returns true/false
*
* Check if the password is correct without logging in the user
*/
public function checkPassword($uid, $password) {
return $this->handleRequest($uid, 'checkPassword', array($uid, $password));
}
/**
* @brief get the user's home directory
* @param string $uid the username
* @return boolean
*/
public function getHome($uid) {
return $this->handleRequest($uid, 'getHome', array($uid));
}
/**
* @brief delete a user
* @param $uid The username of the user to delete
* @returns true/false
*
* Deletes a user
*/
public function deleteUser($uid) {
return false;
}
}

View File

@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
"URL: http://" => "URL: http://"
"WebDAV Authentication" => "WebDAV 인증",
"URL: http://" => "URL: http://",
"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud에서 이 URL로 사용자 인증 정보를 보냅니다. 이 플러그인은 응답을 확인하여 HTTP 상태 코드 401이나 403이 돌아온 경우에 잘못된 인증 정보로 간주합니다. 다른 모든 상태 코드는 올바른 인증 정보로 간주합니다."
);

View File

@ -54,14 +54,15 @@ input[type="checkbox"]:hover+label, input[type="checkbox"]:focus+label { color:#
/* BUTTONS */
input[type="submit"], input[type="button"], button, .button, #quota, div.jp-progress, select, .pager li a {
width:auto; padding:.4em;
background-color:rgba(230,230,230,.5); font-weight:bold; color:#555; text-shadow:#fff 0 1px 0; border:1px solid #bbb; border:1px solid rgba(180,180,180,.5); cursor:pointer;
-moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset;
background-color:rgba(240,240,240,.9); font-weight:bold; color:#555; text-shadow:rgba(255,255,255,.9) 0 1px 0; border:1px solid rgba(190,190,190,.9); cursor:pointer;
-moz-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; -webkit-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset;
-moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em;
}
input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, select:hover, select:focus, select:active, input[type="button"]:focus, .button:hover {
background:rgba(255,255,255,.5); color:#333;
background:rgba(250,250,250,.9); color:#333;
}
input[type="submit"] img, input[type="button"] img, button img, .button img { cursor:pointer; }
#header .button { border:none; -moz-box-shadow:none; -webkit-box-shadow:none; box-shadow:none; }
/* Primary action button, use sparingly */
.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary {

View File

@ -669,6 +669,7 @@ $(document).ready(function(){
// all the tipsy stuff needs to be here (in reverse order) to work
$('.jp-controls .jp-previous').tipsy({gravity:'nw', fade:true, live:true});
$('.jp-controls .jp-next').tipsy({gravity:'n', fade:true, live:true});
$('.displayName .action').tipsy({gravity:'se', fade:true, live:true});
$('.password .action').tipsy({gravity:'se', fade:true, live:true});
$('#upload').tipsy({gravity:'w', fade:true});
$('.selectedActions a').tipsy({gravity:'s', fade:true, live:true});

View File

@ -124,12 +124,12 @@
"web services under your control" => "servizi web nelle tue mani",
"Log out" => "Esci",
"Automatic logon rejected!" => "Accesso automatico rifiutato.",
"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere stato compromesso.",
"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere compromesso.",
"Please change your password to secure your account again." => "Cambia la password per rendere nuovamente sicuro il tuo account.",
"Lost your password?" => "Hai perso la password?",
"remember" => "ricorda",
"Log in" => "Accedi",
"prev" => "precedente",
"next" => "successivo",
"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, potrebbe richiedere del tempo."
"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, ciò potrebbe richiedere del tempo."
);

View File

@ -1,8 +1,8 @@
<?php $TRANSLATIONS = array(
"User %s shared a file with you" => "User %s 가 당신과 파일을 공유하였습니다.",
"User %s shared a folder with you" => "User %s 가 당신과 폴더를 공유하였습니다.",
"User %s shared the file \"%s\" with you. It is available for download here: %s" => "User %s 가 파일 \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s 할 수 있습니다.",
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "User %s 가 폴더 \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s 할 수 있습니다.",
"User %s shared a file with you" => "%s 님이 파일을 공유하였습니다",
"User %s shared a folder with you" => "%s 님이 폴더를 공유하였습니다",
"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s 님이 파일 \"%s\"을(를) 공유하였습니다. 여기에서 다운로드할 수 있습니다: %s",
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s 님이 폴더 \"%s\"을(를) 공유하였습니다. 여기에서 다운로드할 수 있습니다: %s",
"Category type not provided." => "분류 형식이 제공되지 않았습니다.",
"No category to add?" => "추가할 분류가 없습니까?",
"This category already exists: " => "이 분류는 이미 존재합니다:",
@ -54,6 +54,7 @@
"The app name is not specified." => "앱 이름이 지정되지 않았습니다.",
"The required file {file} is not installed!" => "필요한 파일 {file}이(가) 설치되지 않았습니다!",
"Share" => "공유",
"Shared" => "공유됨",
"Error while sharing" => "공유하는 중 오류 발생",
"Error while unsharing" => "공유 해제하는 중 오류 발생",
"Error while changing permissions" => "권한 변경하는 중 오류 발생",
@ -83,6 +84,8 @@
"Error setting expiration date" => "만료 날짜 설정 오류",
"Sending ..." => "전송 중...",
"Email sent" => "이메일 발송됨",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "업데이트가 실패하였습니다. 이 문제를 <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 커뮤니티</a>에 보고해 주십시오.",
"The update was successful. Redirecting you to ownCloud now." => "업데이트가 성공하였습니다. ownCloud로 돌아갑니다.",
"ownCloud password reset" => "ownCloud 암호 재설정",
"Use the following link to reset your password: {link}" => "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
"You will receive a link to reset your password via Email." => "이메일로 암호 재설정 링크를 보냈습니다.",
@ -128,5 +131,5 @@
"Log in" => "로그인",
"prev" => "이전",
"next" => "다음",
"Updating ownCloud to version %s, this may take a while." => "ownCloud 를 버젼 %s로 업데이트 하는 중, 시간이 소요됩니다."
"Updating ownCloud to version %s, this may take a while." => "ownCloud를 버전 %s(으)로 업데이트합니다. 잠시 기다려 주십시오."
);

6
index.html Normal file
View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=index.php">
</head>
</html>

View File

@ -40,6 +40,12 @@ source_file = templates/files_sharing.pot
source_lang = en
type = PO
[owncloud.files_trashbin]
file_filter = <lang>/files_trashbin.po
source_file = templates/files_trashbin.pot
source_lang = en
type = PO
[owncloud.files_versions]
file_filter = <lang>/files_versions.po
source_file = templates/files_versions.pot

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:46+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@ -65,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "الملفات"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "إلغاء مشاركة"
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "محذوف"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@ -97,7 +97,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@ -105,12 +105,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
#: js/filelist.js:286
msgid "unshared {files}"
msgstr ""
#: js/filelist.js:288
msgid "deleted {files}"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@ -135,78 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr ""
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "إغلق"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr ""
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "الاسم"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "حجم"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "معدل"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr ""
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr ""
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr ""
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr ""
@ -262,33 +258,37 @@ msgstr "مجلد"
msgid "From link"
msgstr ""
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "لا يوجد شيء هنا. إرفع بعض الملفات!"
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "تحميل"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "حجم الترفيع أعلى من المسموح"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr ""

58
l10n/ar/files_trashbin.po Normal file
View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:50+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@ -66,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Файлове"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Изтриване"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "Преименуване"
@ -98,7 +98,7 @@ msgstr "отказ"
msgid "replaced {new_name}"
msgstr ""
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "възтановяване"
@ -106,12 +106,8 @@ msgstr "възтановяване"
msgid "replaced {new_name} with {old_name}"
msgstr ""
#: js/filelist.js:286
msgid "unshared {files}"
msgstr ""
#: js/filelist.js:288
msgid "deleted {files}"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@ -136,78 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr ""
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr ""
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr ""
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Качването е спряно."
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Име"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Размер"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Променено"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr ""
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr ""
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr ""
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr ""
@ -263,33 +259,37 @@ msgstr "Папка"
msgid "From link"
msgstr ""
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Няма нищо тук. Качете нещо."
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "Изтегляне"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "Файлът който сте избрали за качване е прекалено голям"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr ""

View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:50+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@ -55,7 +55,7 @@ msgstr "ডিস্কে লিখতে ব্যর্থ"
#: ajax/upload.php:51
msgid "Not enough space available"
msgstr ""
msgstr "যথেষ্ঠ পরিমাণ স্থান নেই"
#: ajax/upload.php:82
msgid "Invalid directory."
@ -65,15 +65,15 @@ msgstr "ভুল ডিরেক্টরি"
msgid "Files"
msgstr "ফাইল"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "ভাগাভাগি বাতিল "
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "মুছে ফেল"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "পূনঃনামকরণ"
@ -97,7 +97,7 @@ msgstr "বাতিল"
msgid "replaced {new_name}"
msgstr "{new_name} প্রতিস্থাপন করা হয়েছে"
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "ক্রিয়া প্রত্যাহার"
@ -105,13 +105,9 @@ msgstr "ক্রিয়া প্রত্যাহার"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে"
#: js/filelist.js:286
msgid "unshared {files}"
msgstr "{files} ভাগাভাগি বাতিল কর"
#: js/filelist.js:288
msgid "deleted {files}"
msgstr "{files} মুছে ফেলা হয়েছে"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@ -135,78 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার বাইট"
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr "আপলোড করতে সমস্যা "
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "বন্ধ"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "মুলতুবি"
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr "১টি ফাইল আপলোড করা হচ্ছে"
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} টি ফাইল আপলোড করা হচ্ছে"
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "আপলোড বাতিল করা হয়েছে।"
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।"
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ফাঁকা রাখা যাবে না।"
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud এর জন্য সংরক্ষিত।"
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "নাম"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "আকার"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "পরিবর্তিত"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr "১টি ফোল্ডার"
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr "{count} টি ফোল্ডার"
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr "১টি ফাইল"
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr "{count} টি ফাইল"
@ -262,33 +258,37 @@ msgstr "ফোল্ডার"
msgid "From link"
msgstr " লিংক থেকে"
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr "আপলোড বাতিল কর"
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "এখানে কিছুই নেই। কিছু আপলোড করুন !"
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "ডাউনলোড"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "আপলোডের আকারটি অনেক বড়"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন "
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ফাইলগুলো স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।"
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr "বর্তমান স্ক্যানিং"

View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:46+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"

View File

@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@ -61,7 +61,7 @@ msgstr "Ha fallat en escriure al disc"
#: ajax/upload.php:51
msgid "Not enough space available"
msgstr ""
msgstr "No hi ha prou espai disponible"
#: ajax/upload.php:82
msgid "Invalid directory."
@ -71,15 +71,15 @@ msgstr "Directori no vàlid."
msgid "Files"
msgstr "Fitxers"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Deixa de compartir"
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Suprimeix"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "Reanomena"
@ -103,7 +103,7 @@ msgstr "cancel·la"
msgid "replaced {new_name}"
msgstr "s'ha substituït {new_name}"
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desfés"
@ -111,13 +111,9 @@ msgstr "desfés"
msgid "replaced {new_name} with {old_name}"
msgstr "s'ha substituït {old_name} per {new_name}"
#: js/filelist.js:286
msgid "unshared {files}"
msgstr "no compartits {files}"
#: js/filelist.js:288
msgid "deleted {files}"
msgstr "eliminats {files}"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@ -141,78 +137,78 @@ msgstr "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden ac
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)"
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans."
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr "Error en la pujada"
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "Tanca"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendents"
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fitxer pujant"
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fitxers en pujada"
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "La pujada s'ha cancel·lat."
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr "La URL no pot ser buida"
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud"
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nom"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Mida"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr "1 carpeta"
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr "{count} carpetes"
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr "1 fitxer"
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr "{count} fitxers"
@ -268,36 +264,40 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Des d'enllaç"
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancel·la la pujada"
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Res per aquí. Pugeu alguna cosa!"
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "Baixa"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "La pujada és massa gran"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "S'estan escanejant els fitxers, espereu"
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr "Actualment escanejant"
#: templates/upgrade.php:2
msgid "Upgrading filesystem cache..."
msgstr ""
msgstr "Actualitzant la memòria de cau del sistema de fitxers..."

58
l10n/ca/files_trashbin.po Normal file
View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 08:30+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -270,11 +270,11 @@ msgstr "Emmagatzemament"
#: templates/users.php:97
msgid "change display name"
msgstr ""
msgstr "canvia el nom a mostrar"
#: templates/users.php:101
msgid "set new password"
msgstr ""
msgstr "estableix nova contrasenya"
#: templates/users.php:137
msgid "Default"

View File

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:46+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@ -57,7 +57,7 @@ msgstr "Zápis na disk selhal"
#: ajax/upload.php:51
msgid "Not enough space available"
msgstr ""
msgstr "Nedostatek dostupného místa"
#: ajax/upload.php:82
msgid "Invalid directory."
@ -67,15 +67,15 @@ msgstr "Neplatný adresář"
msgid "Files"
msgstr "Soubory"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Zrušit sdílení"
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Smazat"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "Přejmenovat"
@ -99,7 +99,7 @@ msgstr "zrušit"
msgid "replaced {new_name}"
msgstr "nahrazeno {new_name}"
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "zpět"
@ -107,13 +107,9 @@ msgstr "zpět"
msgid "replaced {new_name} with {old_name}"
msgstr "nahrazeno {new_name} s {old_name}"
#: js/filelist.js:286
msgid "unshared {files}"
msgstr "sdílení zrušeno pro {files}"
#: js/filelist.js:288
msgid "deleted {files}"
msgstr "smazáno {files}"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@ -137,78 +133,78 @@ msgstr "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubo
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Vaše úložiště je téměř plné ({usedSpacePercent}%)"
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Vaše soubory ke stažení se připravují. Pokud jsou velké může to chvíli trvat."
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů"
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr "Chyba odesílání"
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "Zavřít"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Čekající"
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr "odesílá se 1 soubor"
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "odesílám {count} souborů"
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Odesílání zrušeno."
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání."
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL nemůže být prázdná"
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud"
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Název"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Velikost"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Změněno"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr "1 složka"
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr "{count} složky"
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr "1 soubor"
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr "{count} soubory"
@ -264,36 +260,40 @@ msgstr "Složka"
msgid "From link"
msgstr "Z odkazu"
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr "Zrušit odesílání"
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Žádný obsah. Nahrajte něco."
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "Stáhnout"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "Odeslaný soubor je příliš velký"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru."
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Soubory se prohledávají, prosím čekejte."
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktuální prohledávání"
#: templates/upgrade.php:2
msgid "Upgrading filesystem cache..."
msgstr ""
msgstr "Aktualizuji mezipaměť souborového systému..."

View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 07:20+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -270,11 +270,11 @@ msgstr "Úložiště"
#: templates/users.php:97
msgid "change display name"
msgstr ""
msgstr "změnit zobrazované jméno"
#: templates/users.php:101
msgid "set new password"
msgstr ""
msgstr "nastavit nové heslo"
#: templates/users.php:137
msgid "Default"

View File

@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:46+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"

View File

@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:27+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@ -72,15 +72,15 @@ msgstr "Ugyldig mappe."
msgid "Files"
msgstr "Filer"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Fjern deling"
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slet"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "Omdøb"
@ -104,7 +104,7 @@ msgstr "fortryd"
msgid "replaced {new_name}"
msgstr "erstattede {new_name}"
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "fortryd"
@ -112,13 +112,9 @@ msgstr "fortryd"
msgid "replaced {new_name} with {old_name}"
msgstr "erstattede {new_name} med {old_name}"
#: js/filelist.js:286
msgid "unshared {files}"
msgstr "ikke delte {files}"
#: js/filelist.js:288
msgid "deleted {files}"
msgstr "slettede {files}"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@ -142,78 +138,78 @@ msgstr "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkron
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)"
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Dit download forberedes. Dette kan tage lidt tid ved større filer."
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom"
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr "Fejl ved upload"
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "Luk"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Afventer"
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fil uploades"
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} filer uploades"
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload afbrudt."
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret."
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLen kan ikke være tom."
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud"
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Navn"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Størrelse"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Ændret"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr "1 mappe"
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mapper"
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr "1 fil"
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr "{count} filer"
@ -269,33 +265,37 @@ msgstr "Mappe"
msgid "From link"
msgstr "Fra link"
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr "Fortryd upload"
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Her er tomt. Upload noget!"
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "Download"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload for stor"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Filerne bliver indlæst, vent venligst."
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr "Indlæser"

58
l10n/da/files_trashbin.po Normal file
View File

@ -0,0 +1,58 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: js/trash.js:7
msgid "perform restore operation"
msgstr ""
#: js/trash.js:69
msgid "perform undelete operation"
msgstr ""
#: js/trash.js:100 templates/index.php:17
msgid "Name"
msgstr ""
#: js/trash.js:101 templates/index.php:27
msgid "Deleted"
msgstr ""
#: js/trash.js:110
msgid "1 folder"
msgstr ""
#: js/trash.js:112
msgid "{count} folders"
msgstr ""
#: js/trash.js:120
msgid "1 file"
msgstr ""
#: js/trash.js:122
msgid "{count} files"
msgstr ""
#: templates/index.php:9
msgid "Nothing in here. Your trash bin is empty!"
msgstr ""
#: templates/index.php:20 templates/index.php:22
msgid "Restore"
msgstr ""

View File

@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 12:47+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"

View File

@ -27,8 +27,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-01-31 00:27+0100\n"
"PO-Revision-Date: 2013-01-30 23:27+0000\n"
"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@ -74,7 +74,7 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
#: ajax/upload.php:51
msgid "Not enough space available"
msgstr ""
msgstr "Nicht genug Speicherplatz verfügbar"
#: ajax/upload.php:82
msgid "Invalid directory."
@ -84,15 +84,15 @@ msgstr "Ungültiges Verzeichnis"
msgid "Files"
msgstr "Dateien"
#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nicht mehr freigeben"
#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Löschen"
#: js/fileactions.js:181
#: js/fileactions.js:185
msgid "Rename"
msgstr "Umbenennen"
@ -116,7 +116,7 @@ msgstr "abbrechen"
msgid "replaced {new_name}"
msgstr "{new_name} wurde ersetzt"
#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "rückgängig machen"
@ -124,13 +124,9 @@ msgstr "rückgängig machen"
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} ersetzt durch {new_name}"
#: js/filelist.js:286
msgid "unshared {files}"
msgstr "Freigabe von {files} aufgehoben"
#: js/filelist.js:288
msgid "deleted {files}"
msgstr "{files} gelöscht"
#: js/filelist.js:280
msgid "perform delete operation"
msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@ -154,78 +150,78 @@ msgstr "Ihr Speicherplatz ist voll, Dateien können nicht mehr aktualisiert oder
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Ihr Speicherplatz ist fast aufgebraucht ({usedSpacePercent}%)"
#: js/files.js:219
#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern."
#: js/files.js:256
#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist."
#: js/files.js:256
#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim Upload"
#: js/files.js:273
#: js/files.js:278
msgid "Close"
msgstr "Schließen"
#: js/files.js:292 js/files.js:408 js/files.js:439
#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ausstehend"
#: js/files.js:312
#: js/files.js:317
msgid "1 file uploading"
msgstr "Eine Datei wird hoch geladen"
#: js/files.js:315 js/files.js:370 js/files.js:385
#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} Dateien werden hochgeladen"
#: js/files.js:388 js/files.js:423
#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload abgebrochen."
#: js/files.js:497
#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen."
#: js/files.js:570
#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Die URL darf nicht leer sein"
#: js/files.js:575
#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten."
#: js/files.js:944 templates/index.php:63
#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Name"
#: js/files.js:945 templates/index.php:74
#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Größe"
#: js/files.js:946 templates/index.php:76
#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Bearbeitet"
#: js/files.js:965
#: js/files.js:970
msgid "1 folder"
msgstr "1 Ordner"
#: js/files.js:967
#: js/files.js:972
msgid "{count} folders"
msgstr "{count} Ordner"
#: js/files.js:975
#: js/files.js:980
msgid "1 file"
msgstr "1 Datei"
#: js/files.js:977
#: js/files.js:982
msgid "{count} files"
msgstr "{count} Dateien"
@ -281,33 +277,37 @@ msgstr "Ordner"
msgid "From link"
msgstr "Von einem Link"
#: templates/index.php:41
#: templates/index.php:40
msgid "Trash"
msgstr ""
#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload abbrechen"
#: templates/index.php:55
#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Lade etwas hoch!"
#: templates/index.php:69
#: templates/index.php:73
msgid "Download"
msgstr "Herunterladen"
#: templates/index.php:101
#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload zu groß"
#: templates/index.php:103
#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
#: templates/index.php:108
#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dateien werden gescannt, bitte warten."
#: templates/index.php:111
#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanne"

Some files were not shown because too many files have changed in this diff Show More