Merge branch 'master' into files_encryption

This commit is contained in:
Sam Tuke 2013-01-22 16:50:20 +00:00
commit 619780a67d
331 changed files with 3554 additions and 3183 deletions

37
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,37 @@
## Submitting issues
If you have questions about how to use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc].
### Guidelines
* Report the issue using our [template][template], it includes all the informations we need to track down the issue.
* This repository is *only* for issues within the ownCloud core code. Issues in other compontents should be reported in their own repositores:
- [Android client](https://github.com/owncloud/android/issues)
- [iOS client](https://github.com/owncloud/ios-issues/issues)
- [Desktop client](https://github.com/owncloud/mirall/issues)
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar, Contacts...)
* Search the existing issues first, it's likely that your issue was already reported.
If your issue appears to be a bug, and hasn't been reported, open a new issue.
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
[template]: https://raw.github.com/owncloud/core/master/issue_template.md
[mailinglist]: https://mail.kde.org/mailman/listinfo/owncloud
[forum]: http://forum.owncloud.org/
[irc]: http://webchat.freenode.net/?channels=owncloud&uio=d4
## Contributing to Source Code
Thanks for wanting to contribute source code to ownCloud. That's great!
Before we're able to merge your code into the ownCloud core, you need to sign our [Contributor Agreement][agreement].
Please read the [Developer Manuals][devmanual] to get useful infos like how to create your first application or how to test the ownCloud code with phpunit.
[agreement]: http://owncloud.org/about/contributor-agreement/
[devmanual]: http://owncloud.org/dev/
## Translations
Please submit translations via [Transifex][transifex].
[transifex]: https://www.transifex.com/projects/p/owncloud/

View file

@ -1,46 +1,71 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান",
"Could not move %s" => "%s কে স্থানান্তর করা সম্ভব হলো না",
"Unable to rename file" => "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না",
"No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমস্যা অজ্ঞাত।",
"There is no error, the file uploaded with success" => "কোন সমস্যা নেই, ফাইল আপলোড সুসম্পন্ন হয়েছে",
"The uploaded file was only partially uploaded" => "আপলোড করা ফাইলটি আংশিক আপলোড হয়েছে",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "আপলোড করা ফাইলটি php.ini তে বর্ণিত upload_max_filesize নির্দেশিত আয়তন অতিক্রম করছেঃ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "আপলোড করা ফাইলটি HTML ফর্মে নির্ধারিত MAX_FILE_SIZE নির্দেশিত সর্বোচ্চ আকার অতিক্রম করেছে ",
"The uploaded file was only partially uploaded" => "আপলোড করা ফাইলটি আংশিক আপলোড করা হয়েছে",
"No file was uploaded" => "কোন ফাইল আপলোড করা হয় নি",
"Missing a temporary folder" => "অস্থায়ী ফোল্ডারটি খোয়া গিয়েছে ",
"Failed to write to disk" => "ডিস্কে লিখতে পারা গেল না",
"Missing a temporary folder" => "অস্থায়ী ফোল্ডার খোয়া গিয়েছে",
"Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ",
"Not enough space available" => "যথেষ্ঠ পরিমাণ স্থান নেই",
"Invalid directory." => "ভুল ডিরেক্টরি",
"Files" => "ফাইল",
"Unshare" => "ভাগাভাগি বাতিল",
"Unshare" => "ভাগাভাগি বাতিল ",
"Delete" => "মুছে ফেল",
"Rename" => "পূনঃনামকরণ",
"{new_name} already exists" => "{new_name} টি বিদ্যমান",
"replace" => "প্রতিস্থাপন",
"suggest name" => "নাম সুপারিশ কর",
"suggest name" => "নাম সুপারিশ করুন",
"cancel" => "বাতিল",
"replaced {new_name}" => "{new_name} প্রতিস্থাপন করা হয়েছে",
"undo" => "ক্রিয়া প্রত্যাহার",
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে",
"unshared {files}" => "{files} ভাগাভাগি বাতিল কর",
"deleted {files}" => "{files} মুছে ফেলা হয়েছে",
"Upload Error" => "আপলোড করতে সমস্যা",
"'.' is an invalid file name." => "টি একটি অননুমোদিত নাম।",
"File name cannot be empty." => "ফাইলের নামটি ফাঁকা রাখা যাবে না।",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।",
"generating ZIP-file, it may take some time." => "ZIP- ফাইল তৈরী করা হচ্ছে, এজন্য কিছু সময় আবশ্যক।",
"Unable to upload your file as it is a directory or has 0 bytes" => "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার বাইট",
"Upload Error" => "আপলোড করতে সমস্যা ",
"Close" => "বন্ধ",
"Pending" => "মুলতুবি",
"1 file uploading" => "১ টি ফাইল আপলোড করা হচ্ছে",
"Upload cancelled." => "আপলোড বাতিল করা হয়েছে ।",
"1 file uploading" => "১টি ফাইল আপলোড করা হচ্ছে",
"{count} files uploading" => "{count} টি ফাইল আপলোড করা হচ্ছে",
"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 এর জন্য সংরক্ষিত।",
"{count} files scanned" => "{count} টি ফাইল স্ক্যান করা হয়েছে",
"error while scanning" => "স্ক্যান করার সময় সমস্যা দেখা দিয়েছে",
"Name" => "নাম",
"Size" => "আকার",
"Modified" => "পরিবর্তিত",
"File handling" => "ফাইল হ্যান্ডলিং",
"1 folder" => "১টি ফোল্ডার",
"{count} folders" => "{count} টি ফোল্ডার",
"1 file" => "১টি ফাইল",
"{count} files" => "{count} টি ফাইল",
"File handling" => "ফাইল হ্যার্ডলিং",
"Maximum upload size" => "আপলোডের সর্বোচ্চ আকার",
"max. possible: " => "সম্ভাব্য সর্বোচ্চঃ",
"Needed for multi-file and folder downloads." => "একাধিক ফাইল এবং ফোল্ডার ডাউনলোড করার ক্ষেত্রে আবশ্যক।",
"Enable ZIP-download" => "জিপ ডাউনলোড সক্রিয় কর",
"0 is unlimited" => " এর অর্থ হলো অসীম",
"Maximum input size for ZIP files" => "জিপ ফাইলের জন্য সর্বোচ্চ ইনপুট",
"Save" => "সংরক্ষ কর",
"max. possible: " => "অনুমোদিত সর্বোচ্চ আকার",
"Needed for multi-file and folder downloads." => "একাধিক ফাইল এবং ফোল্ডার ডাউনলোড করার জন্য আবশ্যক।",
"Enable ZIP-download" => "ZIP ডাউনলোড সক্রিয় কর",
"0 is unlimited" => " এর অর্থ অসীম",
"Maximum input size for ZIP files" => "ZIP ফাইলের ইনপুটের সর্বোচ্চ আকার",
"Save" => "সংরক্ষ কর",
"New" => "নতুন",
"Text file" => "টেক্সট ফাইল",
"Folder" => "ফোল্ডার",
"From link" => " লিংক থেকে",
"Upload" => "আপলোড",
"Cancel upload" => "আপলোড বাতিল কর",
"Nothing in here. Upload something!" => "এখানে কোন কিছুই নেই। কিছু আপলোড করুন !",
"Nothing in here. Upload something!" => "এখানে কিছুই নেই। কিছু আপলোড করুন !",
"Download" => "ডাউনলোড",
"Upload too large" => "আপলোডের আকার অনেক বড়",
"Files are being scanned, please wait." => "ফাইল স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।",
"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" => "বর্তমান স্ক্যানিং"
);

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
"Could not move %s" => " No s'ha pogut moure %s",
"Unable to rename file" => "No es pot canviar el nom del fitxer",
"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
"There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Larxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Nelze přesunout %s - existuje soubor se stejným názvem",
"Could not move %s" => "Nelze přesunout %s",
"Unable to rename file" => "Nelze přejmenovat soubor",
"No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
"There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.",
"Could not move %s" => "Konnte %s nicht verschieben",
"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@ -8,7 +11,7 @@
"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.",
"Invalid directory." => "Ungültiges Verzeichnis",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
"Delete" => "Löschen",
@ -22,8 +25,8 @@
"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.",
"'.' 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.",
"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
@ -34,7 +37,8 @@
"{count} files uploading" => "{count} Dateien werden hochgeladen",
"Upload cancelled." => "Upload abgebrochen.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein.",
"URL cannot be empty." => "Die URL darf nicht leer sein",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten.",
"{count} files scanned" => "{count} Dateien wurden gescannt",
"error while scanning" => "Fehler beim Scannen",
"Name" => "Name",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits",
"Could not move %s" => "Konnte %s nicht verschieben",
"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@ -35,6 +38,7 @@
"Upload cancelled." => "Upload abgebrochen.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten",
"{count} files scanned" => "{count} Dateien wurden gescannt",
"error while scanning" => "Fehler beim Scannen",
"Name" => "Name",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "No se puede mover %s - Ya existe un archivo con ese nombre",
"Could not move %s" => "No se puede mover %s",
"Unable to rename file" => "No se puede renombrar el archivo",
"No file was uploaded. Unknown error" => "Fallo no se subió el fichero",
"There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa",
"Could not move %s" => "Kohteen %s siirto ei onnistunut",
"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut",
"No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe",
"There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
"Could not move %s" => "Impossible de déplacer %s",
"Unable to rename file" => "Impossible de renommer le fichier",
"No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue",
"There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Non se moveu %s - Xa existe un ficheiro con ese nome.",
"Could not move %s" => "Non se puido mover %s",
"Unable to rename file" => "Non se pode renomear o ficheiro",
"No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.",
"There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini",
@ -22,6 +25,8 @@
"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.",
"generating ZIP-file, it may take some time." => "xerando un ficheiro ZIP, o que pode levar un anaco.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes",
@ -33,6 +38,7 @@
"Upload cancelled." => "Subida cancelada.",
"File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.",
"URL cannot be empty." => "URL non pode quedar baleiro.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud",
"{count} files scanned" => "{count} ficheiros escaneados",
"error while scanning" => "erro mentres analizaba",
"Name" => "Nome",

View file

@ -1,4 +1,8 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Gat ekki fært %s - Skrá með þessu nafni er þegar til",
"Could not move %s" => "Gat ekki fært %s",
"Unable to rename file" => "Gat ekki endurskýrt skrá",
"No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.",
"There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Innsenda skráin er stærri en MAX_FILE_SIZE sem skilgreint er í HTML sniðinu.",
@ -6,6 +10,8 @@
"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",
"Delete" => "Eyða",
@ -19,6 +25,8 @@
"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ð.",
"generating ZIP-file, it may take some time." => "bý til ZIP skrá, það gæti tekið smá stund.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti.",
@ -30,6 +38,7 @@
"Upload cancelled." => "Hætt við innsendingu.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
"URL cannot be empty." => "Vefslóð má ekki vera tóm.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud",
"{count} files scanned" => "{count} skrár skimaðar",
"error while scanning" => "villa við skimun",
"Name" => "Nafn",
@ -53,9 +62,9 @@
"From link" => "Af tengli",
"Upload" => "Senda inn",
"Cancel upload" => "Hætta við innsendingu",
"Nothing in here. Upload something!" => "Ekkert hér. Sendu eitthvað inn!",
"Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!",
"Download" => "Niðurhal",
"Upload too large" => "Innsend skrá of stór",
"Upload too large" => "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
"Files are being scanned, please wait." => "Verið er að skima skrár, vinsamlegast hinkraðu.",
"Current scanning" => "Er að skima"

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Impossibile spostare %s - un file con questo nome esiste già",
"Could not move %s" => "Impossibile spostare %s",
"Unable to rename file" => "Impossibile rinominare il file",
"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
"There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "%s を移動できませんでした ― この名前のファイルはすでに存在します",
"Could not move %s" => "%s を移動できませんでした",
"Unable to rename file" => "ファイル名の変更ができません",
"No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー",
"There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함",
"Could not move %s" => "%s 항목을 이딩시키지 못하였음",
"Unable to rename file" => "파일 이름바꾸기 할 수 없음",
"No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다",
"There is no error, the file uploaded with success" => "업로드에 성공하였습니다.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:",
@ -35,6 +38,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" => "폴더 이름이 유효하지 않습니다. ",
"{count} files scanned" => "파일 {count}개 검색됨",
"error while scanning" => "검색 중 오류 발생",
"Name" => "이름",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome",
"Could not move %s" => "Não foi possível move o ficheiro %s",
"Unable to rename file" => "Não foi possível renomear o ficheiro",
"No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido",
"There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize",
@ -35,6 +38,7 @@
"Upload cancelled." => "O envio foi cancelado.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.",
"URL cannot be empty." => "O URL não pode estar vazio.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud",
"{count} files scanned" => "{count} ficheiros analisados",
"error while scanning" => "erro ao analisar",
"Name" => "Nome",

View file

@ -1,4 +1,6 @@
<?php $TRANSLATIONS = array(
"Could not move %s" => "Nu s-a putut muta %s",
"Unable to rename file" => "Nu s-a putut redenumi fișierul",
"No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută",
"There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ",
@ -7,6 +9,8 @@
"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",
"Delete" => "Șterge",
@ -20,6 +24,8 @@
"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.",
"generating ZIP-file, it may take some time." => "se generază fișierul ZIP, va dura ceva timp.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.",

View file

@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Невозможно переместить %s - файл с таким именем уже существует",
"Could not move %s" => "Невозможно переместить %s",
"Unable to rename file" => "Невозможно переименовать файл",
"No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка",
"There is no error, the file uploaded with success" => "Файл успешно загружен",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Файл превышает размер установленный upload_max_filesize в php.ini:",
@ -7,6 +10,8 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "Невозможно найти временную папку",
"Failed to write to disk" => "Ошибка записи на диск",
"Not enough space available" => "Недостаточно свободного места",
"Invalid directory." => "Неправильный каталог.",
"Files" => "Файлы",
"Unshare" => "Отменить публикацию",
"Delete" => "Удалить",
@ -20,6 +25,8 @@
"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." => "Неправильное имя, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.",
"generating ZIP-file, it may take some time." => "создание ZIP-файла, это может занять некоторое время.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог",
@ -31,6 +38,7 @@
"Upload cancelled." => "Загрузка отменена.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.",
"URL cannot be empty." => "Ссылка не может быть пустой.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.",
"{count} files scanned" => "{count} файлов просканировано",
"error while scanning" => "ошибка во время санирования",
"Name" => "Название",

View file

@ -1,9 +1,12 @@
<?php $TRANSLATIONS = array(
"No file was uploaded. Unknown error" => "沒有檔案被上傳. 未知的錯誤.",
"Could not move %s - File with this name already exists" => "無法移動 %s - 同名的檔案已經存在",
"Could not move %s" => "無法移動 %s",
"Unable to rename file" => "無法重新命名檔案",
"No file was uploaded. Unknown error" => "沒有檔案被上傳。未知的錯誤。",
"There is no error, the file uploaded with success" => "無錯誤,檔案上傳成功",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上傳的檔案大小超過 php.ini 當中 upload_max_filesize 參數的設定:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上傳黨案的超過 HTML 表單中指定 MAX_FILE_SIZE 限制",
"The uploaded file was only partially uploaded" => "只有部分檔案被上傳",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上傳檔案大小超過 HTML 表單中 MAX_FILE_SIZE 限制",
"The uploaded file was only partially uploaded" => "只有檔案的一部分被上傳",
"No file was uploaded" => "無已上傳檔案",
"Missing a temporary folder" => "遺失暫存資料夾",
"Failed to write to disk" => "寫入硬碟失敗",
@ -20,12 +23,12 @@
"replaced {new_name}" => "已取代 {new_name}",
"undo" => "復原",
"replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}",
"unshared {files}" => "停止分享 {files}",
"unshared {files}" => "已取消分享 {files}",
"deleted {files}" => "已刪除 {files}",
"'.' is an invalid file name." => "'.' 是不合法的檔名。",
"File name cannot be empty." => "檔名不能為空。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 '\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 。",
"generating ZIP-file, it may take some time." => "產生壓縮檔, 它可能需要一段時間.",
"generating ZIP-file, it may take some time." => "產生 ZIP 壓縮檔,這可能需要一段時間。",
"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0",
"Upload Error" => "上傳發生錯誤",
"Close" => "關閉",
@ -33,8 +36,8 @@
"1 file uploading" => "1 個檔案正在上傳",
"{count} files uploading" => "{count} 個檔案正在上傳",
"Upload cancelled." => "上傳取消",
"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中. 離開此頁面將會取消上傳.",
"URL cannot be empty." => "URL不能為空白.",
"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" => "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留",
"{count} files scanned" => "{count} 個檔案已掃描",
"error while scanning" => "掃描時發生錯誤",
@ -46,12 +49,12 @@
"1 file" => "1 個檔案",
"{count} files" => "{count} 個檔案",
"File handling" => "檔案處理",
"Maximum upload size" => "最大上傳容量",
"max. possible: " => "最大允許: ",
"Needed for multi-file and folder downloads." => "針對多檔案和目錄下載是必填的",
"Maximum upload size" => "最大上傳檔案大小",
"max. possible: " => "最大允許",
"Needed for multi-file and folder downloads." => "針對多檔案和目錄下載是必填的",
"Enable ZIP-download" => "啟用 Zip 下載",
"0 is unlimited" => "0代表沒有限制",
"Maximum input size for ZIP files" => "針對ZIP檔案最大輸入大小",
"Maximum input size for ZIP files" => "針對 ZIP 檔案最大輸入大小",
"Save" => "儲存",
"New" => "新增",
"Text file" => "文字檔",
@ -59,10 +62,10 @@
"From link" => "從連結",
"Upload" => "上傳",
"Cancel upload" => "取消上傳",
"Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!",
"Nothing in here. Upload something!" => "沒有任何東西。請上傳內容",
"Download" => "下載",
"Upload too large" => "上傳過大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "你試圖上傳的檔案已超過伺服器的最大容量限制。 ",
"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" => "目前掃描"
);

View file

@ -0,0 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "সংকেতায়ন",
"Enable Encryption" => "সংকেতায়ন সক্রিয় কর",
"None" => "কোনটিই নয়",
"Exclude the following file types from encryption" => "সংকেতায়ন থেকে নিম্নোক্ত ধরণসমূহ বাদ দাও"
);

View file

@ -1,6 +1,24 @@
<?php $TRANSLATIONS = array(
"Backend" => "প্রশাসক",
"Groups" => "গোষ্ঠী",
"Users" => "ব্যবহারকারিবৃন্দ",
"Delete" => "মুছে ফেল"
"Access granted" => "অধিগমনের অনুমতি প্রদান করা হলো",
"Error configuring Dropbox storage" => "Dropbox সংরক্ষণাগার নির্ধারণ করতে সমস্যা ",
"Grant access" => "অধিগমনের অনুমতি প্রদান কর",
"Fill out all required fields" => "আবশ্যিক সমস্ত ক্ষেত্র পূরণ করুন",
"Please provide a valid Dropbox app key and secret." => "দয়া করে সঠিক এবং বৈধ Dropbox app key and secret প্রদান করুন।",
"Error configuring Google Drive storage" => "Google Drive সংরক্ষণাগার নির্ধারণ করতে সমস্যা ",
"External Storage" => "বাহ্যিক সংরক্ষণাগার",
"Mount point" => "মাউন্ট পয়েন্ট",
"Backend" => "পশ্চাদপট",
"Configuration" => "কনফিগারেসন",
"Options" => "বিকল্পসমূহ",
"Applicable" => "প্রযোজ্য",
"Add mount point" => "মাউন্ট পয়েন্ট যোগ কর",
"None set" => "কোনটিই নির্ধারণ করা হয় নি",
"All Users" => "সমস্ত ব্যবহারকারী",
"Groups" => "গোষ্ঠীসমূহ",
"Users" => "ব্যবহারকারী",
"Delete" => "মুছে ফেল",
"Enable User External Storage" => "ব্যবহারকারীর বাহ্যিক সংরক্ষণাগার সক্রিয় কর",
"Allow users to mount their own external storage" => "ব্যবহারকারীদেরকে তাদের নিজস্ব বাহ্যিক সংরক্ষনাগার সাউন্ট করতে অনুমোদন দাও",
"SSL root certificates" => "SSL রুট সনদপত্র",
"Import Root Certificate" => "রুট সনদপত্রটি আমদানি করুন"
);

View file

@ -1,6 +1,9 @@
<?php $TRANSLATIONS = array(
"Password" => "কূটশব্দ",
"Submit" => "পাঠাও",
"Submit" => "জমা দাও",
"%s shared the folder %s with you" => "%s আপনার সাথে %s ফোল্ডারটি ভাগাভাগি করেছেন",
"%s shared the file %s with you" => "%s আপনার সাথে %s ফাইলটি ভাগাভাগি করেছেন",
"Download" => "ডাউনলোড",
"web services under your control" => "ওয়েব সেবাসমূহ এখন আপনার হাতের মুঠোয়"
"No preview available for" => "এর জন্য কোন প্রাকবীক্ষণ সুলভ নয়",
"web services under your control" => "ওয়েব সার্ভিস আপনার হাতের মুঠোয়"
);

View file

@ -7,7 +7,7 @@ OC_App::loadApps();
// support will be removed in OC 5.0,a
if (isset($_GET['token'])) {
unset($_GET['file']);
$qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? LIMIT 1');
$qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ?', 1);
$filepath = $qry->execute(array($_GET['token']))->fetchOne();
if(isset($filepath)) {
$info = OC_FileCache_Cached::get($filepath, '');
@ -16,7 +16,9 @@ if (isset($_GET['token'])) {
} else {
$_GET['file'] = $filepath;
}
\OCP\Util::writeLog('files_sharing', 'You have files that are shared by link originating from ownCloud 4.0. Redistribute the new links, because backwards compatibility will be removed in ownCloud 5.', \OCP\Util::WARN);
\OCP\Util::writeLog('files_sharing', 'You have files that are shared by link originating from ownCloud 4.0.'
.' Redistribute the new links, because backwards compatibility will be removed in ownCloud 5.',
\OCP\Util::WARN);
}
}
@ -27,7 +29,10 @@ function getID($path) {
$path_parts = explode('/', $path, 5);
$user = $path_parts[1];
$intPath = '/'.$path_parts[4];
$query = \OC_DB::prepare('SELECT `item_source` FROM `*PREFIX*share` WHERE `uid_owner` = ? AND `file_target` = ? ');
$query = \OC_DB::prepare('SELECT `item_source`'
.' FROM `*PREFIX*share`'
.' WHERE `uid_owner` = ?'
.' AND `file_target` = ? ');
$result = $query->execute(array($user, $intPath));
$row = $result->fetchRow();
$fileSource = $row['item_source'];
@ -69,7 +74,8 @@ if (isset($_GET['t'])) {
//if this is a reshare check the file owner also exists
if ($shareOwner != $fileOwner && ! OCP\User::userExists($fileOwner)) {
OCP\Util::writeLog('share', 'original file owner '.$fileOwner.' does not exist for share '.$linkItem['id'], \OCP\Util::ERROR);
OCP\Util::writeLog('share', 'original file owner '.$fileOwner
.' does not exist for share '.$linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
@ -134,7 +140,8 @@ if ($linkItem) {
// Check Password
$forcePortable = (CRYPT_BLOWFISH != 1);
$hasher = new PasswordHash(8, $forcePortable);
if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''), $linkItem['share_with']))) {
if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
$linkItem['share_with']))) {
$tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
$tmpl->assign('URL', $url);
$tmpl->assign('error', true);
@ -145,19 +152,25 @@ if ($linkItem) {
$_SESSION['public_link_authenticated'] = $linkItem['id'];
}
} else {
OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type'].' for share id '.$linkItem['id'], \OCP\Util::ERROR);
OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
.' for share id '.$linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
exit();
}
// Check if item id is set in session
} else if (!isset($_SESSION['public_link_authenticated']) || $_SESSION['public_link_authenticated'] !== $linkItem['id']) {
// Prompt for password
$tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
$tmpl->assign('URL', $url);
$tmpl->printPage();
exit();
} else {
// Check if item id is set in session
if (!isset($_SESSION['public_link_authenticated'])
|| $_SESSION['public_link_authenticated'] !== $linkItem['id']
) {
// Prompt for password
$tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
$tmpl->assign('URL', $url);
$tmpl->printPage();
exit();
}
}
}
$basePath = substr($pathAndUser['path'], strlen('/'.$fileOwner.'/files'));
@ -203,7 +216,9 @@ if ($linkItem) {
$getPath = '';
}
//
$urlLinkIdentifiers= (isset($token)?'&t='.$token:'').(isset($_GET['dir'])?'&dir='.$_GET['dir']:'').(isset($_GET['file'])?'&file='.$_GET['file']:'');
$urlLinkIdentifiers= (isset($token)?'&t='.$token:'')
.(isset($_GET['dir'])?'&dir='.$_GET['dir']:'')
.(isset($_GET['file'])?'&file='.$_GET['file']:'');
// Show file list
if (OC_Filesystem::is_dir($path)) {
OCP\Util::addStyle('files', 'files');
@ -260,13 +275,16 @@ if ($linkItem) {
$folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
$tmpl->assign('folder', $folder->fetchPage(), false);
$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
.$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
} else {
// Show file preview if viewer is available
if ($type == 'file') {
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download');
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
.$urlLinkIdentifiers.'&download');
} else {
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
.$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
}
}
$tmpl->printPage();

View file

@ -1,44 +0,0 @@
<?php
/**
* ownCloud - user_migrate
*
* @author Sam Tuke
* @copyright 2012 Sam Tuke samtuke@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/>.
*
*/
// TODO: Allow admins to expire versions of any user
// TODO: Provide feedback as to how many versions were deleted
// Check user and app status
OCP\JSON::checkLoggedIn();
OCP\App::checkAppEnabled('files_versions');
OCP\JSON::callCheck();
$versions = new OCA_Versions\Storage();
if( $versions->expireAll() ) {
OCP\JSON::success();
die();
} else {
OCP\JSON::error();
die();
}

View file

@ -4,10 +4,9 @@ OCP\JSON::checkAppEnabled('files_versions');
$userDirectory = "/".OCP\USER::getUser()."/files";
$source = $_GET['source'];
if( OCA_Versions\Storage::isversioned( $source ) ) {
$count = 5; //show the newest revisions
if( ($versions = OCA_Versions\Storage::getVersions( $source, $count)) ) {
$count=5; //show the newest revisions
$versions = OCA_Versions\Storage::getVersions( $source, $count);
$versionsFormatted = array();
foreach ( $versions AS $version ) {

View file

@ -8,10 +8,9 @@ $userDirectory = "/".OCP\USER::getUser()."/files";
$file = $_GET['file'];
$revision=(int)$_GET['revision'];
if( OCA_Versions\Storage::isversioned( $file ) ) {
if(OCA_Versions\Storage::rollback( $file, $revision )) {
OCP\JSON::success(array("data" => array( "revision" => $revision, "file" => $file )));
}else{
OCP\JSON::error(array("data" => array( "message" => "Could not revert:" . $file )));
}
if(OCA_Versions\Storage::rollback( $file, $revision )) {
OCP\JSON::success(array("data" => array( "revision" => $revision, "file" => $file )));
}else{
OCP\JSON::error(array("data" => array( "message" => "Could not revert:" . $file )));
}

View file

@ -52,10 +52,8 @@ if ( isset( $_GET['path'] ) ) {
}
// show the history only if there is something to show
if( OCA_Versions\Storage::isversioned( $path ) ) {
$count = 999; //show the newest revisions
$versions = OCA_Versions\Storage::getVersions( $path, $count);
$count = 999; //show the newest revisions
if( ($versions = OCA_Versions\Storage::getVersions( $path, $count)) ) {
$tmpl->assign( 'versions', array_reverse( $versions ) );

View file

@ -1,39 +0,0 @@
// TODO: allow the button to be clicked only once
$( document ).ready(function(){
//
$( '#expireAllBtn' ).click(
function( event ) {
// Prevent page from reloading
event.preventDefault();
// Show loading gif
$('.expireAllLoading').show();
$.getJSON(
OC.filePath('files_versions','ajax','expireAll.php'),
function(result){
if (result.status == 'success') {
$('.expireAllLoading').hide();
$('#expireAllBtn').html('Expiration successful');
} else {
// Cancel loading
$('#expireAllBtn').html('Expiration failed');
// Show Dialog
OC.dialogs.alert(
'Something went wrong, your files may not have been expired',
'An error has occurred',
function(){
$('#expireAllBtn').html(t('files_versions', 'Expire all versions')+'<img style="display: none;" class="loading" src="'+OC.filePath('core','img','loading.gif')+'" />');
}
);
}
}
);
}
);
});

View file

@ -1,3 +1,8 @@
<?php $TRANSLATIONS = array(
"Enable" => "সক্রিয়"
"Expire all versions" => "সমস্ত ভার্সন মেয়াদোত্তীর্ণ",
"History" => "ইতিহাস",
"Versions" => "ভার্সন",
"This will delete all existing backup versions of your files" => "এটি আপনার বিদ্যমান ফাইলের সমস্ত ব্যাক-আপ ভার্সন মুছে ফেলবে।",
"Files Versioning" => "ফাইল ভার্সন করা",
"Enable" => "সক্রিয় "
);

View file

@ -39,15 +39,15 @@ class Hooks {
* cleanup the versions directory if the actual file gets deleted
*/
public static function remove_hook($params) {
$versions_fileview = \OCP\Files::getStorage('files_versions');
$rel_path = $params['path'];
$abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_path.'.v';
if(Storage::isversioned($rel_path)) {
$versions = Storage::getVersions($rel_path);
foreach ($versions as $v) {
unlink($abs_path . $v['version']);
}
}
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
$versions = new Storage( new \OC_FilesystemView('') );
$path = $params[\OC_Filesystem::signal_param_path];
if($path<>'') $versions->delete( $path );
}
}
/**
@ -58,18 +58,16 @@ class Hooks {
* of the stored versions along the actual file
*/
public static function rename_hook($params) {
$versions_fileview = \OCP\Files::getStorage('files_versions');
$rel_oldpath = $params['oldpath'];
$abs_oldpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_oldpath.'.v';
$abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v';
if(Storage::isversioned($rel_oldpath)) {
$info=pathinfo($abs_newpath);
if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
$versions = Storage::getVersions($rel_oldpath);
foreach ($versions as $v) {
rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
}
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
$versions = new Storage( new \OC_FilesystemView('') );
$oldpath = $params['oldpath'];
$newpath = $params['newpath'];
if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
}
}
}

View file

@ -1,6 +1,7 @@
<?php
/**
* Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
* 2013 Bjoern Schiessle <schiessle@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@ -16,24 +17,23 @@ namespace OCA_Versions;
class Storage {
// config.php configuration:
// - files_versions
// - files_versionsfolder
// - files_versionsblacklist
// - files_versionsmaxfilesize
// - files_versionsinterval
// - files_versionmaxversions
//
// todo:
// - finish porting to OC_FilesystemView to enable network transparency
// - add transparent compression. first test if it´s worth it.
const DEFAULTENABLED=true;
const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp';
const DEFAULTMAXFILESIZE=1048576; // 10MB
const DEFAULTMININTERVAL=60; // 1 min
const DEFAULTMAXVERSIONS=50;
const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
private static $max_versions_per_interval = array(
1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec
'step' => 2),
2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec
'step' => 10),
3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute
'step' => 60),
4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour
'step' => 3600),
5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day
'step' => 86400),
6 => array('intervalEndsAfter' => -1, //until the end one version per week
'step' => 604800),
);
private static function getUidAndFilename($filename)
{
@ -72,40 +72,11 @@ class Storage {
return false;
}
// check filetype blacklist
$blacklist=explode(' ', \OCP\Config::getSystemValue('files_versionsblacklist', Storage::DEFAULTBLACKLIST));
foreach($blacklist as $bl) {
$parts=explode('.', $filename);
$ext=end($parts);
if(strtolower($ext)==$bl) {
return false;
}
}
// we should have a source file to work with
if (!$files_view->file_exists($filename)) {
return false;
}
// check filesize
if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)) {
return false;
}
// check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval)
if ($uid == \OCP\User::getUser()) {
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
$versionsFolderName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
$matches=glob($versionsName.'.v*');
sort($matches);
$parts=explode('.v', end($matches));
if((end($parts)+Storage::DEFAULTMININTERVAL)>time()) {
return false;
}
}
// create all parent folders
$info=pathinfo($filename);
if(!file_exists($versionsFolderName.'/'.$info['dirname'])) {
@ -113,14 +84,63 @@ class Storage {
}
// store a new version of a file
$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
$result = $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
$versionsSize = self::calculateSize($uid);
}
$versionsSize += $users_view->filesize('files'.$filename);
// expire old revisions if necessary
Storage::expire($filename);
$newSize = self::expire($filename, $versionsSize);
if ( $newSize != $versionsSize ) {
\OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
}
}
}
/**
* Delete versions of a file
*/
public static function delete($filename) {
list($uid, $filename) = self::getUidAndFilename($filename);
$versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions');
$abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
if( ($versions = self::getVersions($filename)) ) {
if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
$versionsSize = self::calculateSize($uid);
}
foreach ($versions as $v) {
unlink($abs_path . $v['version']);
$versionsSize -= $v['size'];
}
\OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
}
}
/**
* rename versions of a file
*/
public static function rename($oldpath, $newpath) {
list($uid, $oldpath) = self::getUidAndFilename($oldpath);
list($uidn, $newpath) = self::getUidAndFilename($newpath);
$versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions');
$files_view = new \OC_FilesystemView('/'.$uid .'/files');
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
$versions_view->rename($oldpath, $newpath);
} else if ( ($versions = Storage::getVersions($oldpath)) ) {
$info=pathinfo($abs_newpath);
if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
$versions = Storage::getVersions($oldpath);
foreach ($versions as $v) {
$versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
}
}
}
/**
* rollback to an old version of a file.
*/
@ -130,44 +150,27 @@ class Storage {
list($uid, $filename) = self::getUidAndFilename($filename);
$users_view = new \OC_FilesystemView('/'.$uid);
//first create a new version
$version = 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename);
if ( !$users_view->file_exists($version)) {
$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
$versionCreated = true;
}
// rollback
if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
$users_view->touch('files'.$filename, $revision);
Storage::expire($filename);
return true;
}else{
return false;
}else if ( $versionCreated ) {
$users_view->unlink($version);
}
}
return false;
}
/**
* check if old versions of a file exist.
*/
public static function isversioned($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
// check for old versions
$matches=glob($versionsName.'.v*');
if(count($matches)>0) {
return true;
}else{
return false;
}
}else{
return(false);
}
}
/**
* @brief get a list of all available versions of a file in descending chronological order
@ -187,92 +190,232 @@ class Storage {
sort( $matches );
$i = 0;
$files_view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files');
$files_view = new \OC_FilesystemView('/'.$uid.'/files');
$local_file = $files_view->getLocalFile($filename);
foreach( $matches as $ma ) {
$i++;
$versions[$i]['cur'] = 0;
foreach( $matches as $ma ) {
$parts = explode( '.v', $ma );
$versions[$i]['version'] = ( end( $parts ) );
$version = ( end( $parts ) );
$key = $version.'#'.$filename;
$versions[$key]['cur'] = 0;
$versions[$key]['version'] = $version;
$versions[$key]['path'] = $filename;
$versions[$key]['size'] = $versions_fileview->filesize($filename.'.v'.$version);
// if file with modified date exists, flag it in array as currently enabled version
( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$i]['fileMatch'] = 1 : $versions[$i]['fileMatch'] = 0 );
( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$key]['fileMatch'] = 1 : $versions[$key]['fileMatch'] = 0 );
}
$versions = array_reverse( $versions );
foreach( $versions as $key => $value ) {
// flag the first matched file in array (which will have latest modification date) as current version
if ( $value['fileMatch'] ) {
$value['cur'] = 1;
break;
}
}
$versions = array_reverse( $versions );
// only show the newest commits
if( $count != 0 and ( count( $versions )>$count ) ) {
$versions = array_slice( $versions, count( $versions ) - $count );
}
return( $versions );
} else {
// if versioning isn't enabled then return an empty array
return( array() );
}
}
/**
* @brief get the size of all stored versions from a given user
* @param $uid id from the user
* @return size of vesions
*/
private static function calculateSize($uid) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
$size = 0;
foreach ($iterator as $path) {
if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
$relpath = substr($path, strlen($versionsRoot)-1);
$size += $versions_fileview->filesize($relpath);
}
}
return $size;
}
}
/**
* @brief returns all stored file versions from a given user
* @param $uid id to the user
* @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename
*/
private static function getAllVersions($uid) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
$versions = array();
foreach ($iterator as $path) {
if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
$relpath = substr($path, strlen($versionsRoot)-1);
$versions[$match[1].'#'.$relpath] = array('path' => $relpath, 'timestamp' => $match[1]);
}
}
ksort($versions);
$i = 0;
$result = array();
foreach( $versions as $key => $value ) {
$i++;
$size = $versions_fileview->filesize($value['path']);
$filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
$result['all'][$key]['version'] = $value['timestamp'];
$result['all'][$key]['path'] = $filename;
$result['all'][$key]['size'] = $size;
$filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
$result['by_file'][$filename][$key]['version'] = $value['timestamp'];
$result['by_file'][$filename][$key]['path'] = $filename;
$result['by_file'][$filename][$key]['size'] = $size;
}
return $result;
}
}
/**
* @brief Erase a file's versions which exceed the set quota
*/
public static function expire($filename) {
private static function expire($filename, $versionsSize = null) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
list($uid, $filename) = self::getUidAndFilename($filename);
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
// check for old versions
$matches = glob( $versionsName.'.v*' );
if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) {
$numberToDelete = count($matches) - \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS );
// delete old versions of a file
$deleteItems = array_slice( $matches, 0, $numberToDelete );
foreach( $deleteItems as $de ) {
unlink( $versionsName.'.v'.$de );
// get available disk space for user
$quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($uid, 'files', 'quota'));
if ( $quota == null ) {
$quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota'));
}
if ( $quota == null ) {
$quota = \OC_Filesystem::free_space('/');
}
// make sure that we have the current size of the version history
if ( $versionsSize === null ) {
if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
$versionsSize = self::calculateSize($uid);
}
}
}
}
/**
* @brief Erase all old versions of all user files
* @return true/false
*/
public function expireAll() {
$view = \OCP\Files::getStorage('files_versions');
return $view->deleteAll('', true);
// calculate available space for version history
$rootInfo = \OC_FileCache::get('', '/'. $uid . '/files');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions
} else {
$availableSpace = $free-$versionsSize;
}
// after every 1000s run reduce the number of all versions not only for the current file
$random = rand(0, 1000);
if ($random == 0) {
$result = Storage::getAllVersions($uid);
$versions_by_file = $result['by_file'];
$all_versions = $result['all'];
} else {
$all_versions = Storage::getVersions($filename);
$versions_by_file[$filename] = $all_versions;
}
$time = time();
// it is possible to expire versions from more than one file
// iterate through all given files
foreach ($versions_by_file as $filename => $versions) {
$versions = array_reverse($versions); // newest version first
$interval = 1;
$step = Storage::$max_versions_per_interval[$interval]['step'];
if (Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1) {
$nextInterval = -1;
} else {
$nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'];
}
$firstVersion = reset($versions);
$firstKey = key($versions);
$prevTimestamp = $firstVersion['version'];
$nextVersion = $firstVersion['version'] - $step;
$remaining_versions[$firstKey] = $firstVersion;
unset($versions[$firstKey]);
foreach ($versions as $key => $version) {
$newInterval = true;
while ( $newInterval ) {
if ( $nextInterval == -1 || $version['version'] >= $nextInterval ) {
if ( $version['version'] > $nextVersion ) {
//distance between two version too small, delete version
$versions_fileview->unlink($version['path'].'.v'.$version['version']);
$availableSpace += $version['size'];
$versionsSize -= $version['size'];
unset($all_versions[$key]); // update array with all versions
} else {
$nextVersion = $version['version'] - $step;
}
$newInterval = false; // version checked so we can move to the next one
} else { // time to move on to the next interval
$interval++;
$step = Storage::$max_versions_per_interval[$interval]['step'];
$nextVersion = $prevTimestamp - $step;
if ( Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1 ) {
$nextInterval = -1;
} else {
$nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'];
}
$newInterval = true; // we changed the interval -> check same version with new interval
}
}
$prevTimestamp = $version['version'];
}
}
// check if enough space is available after versions are rearranged.
// if not we delete the oldest versions until we meet the size limit for versions
$numOfVersions = count($all_versions);
$i = 0;
while ($availableSpace < 0) {
if ($i = $numOfVersions-2) break; // keep at least the last version
$versions_fileview->unlink($all_versions[$i]['path'].'.v'.$all_versions[$i]['version']);
$versionsSize -= $all_versions[$i]['size'];
$availableSpace += $all_versions[$i]['size'];
$i++;
}
return $versionsSize; // finally return the new size of the version history
}
return false;
}
}

View file

@ -1,7 +0,0 @@
<?php
$tmpl = new OCP\Template( 'files_versions', 'settings-personal');
OCP\Util::addscript('files_versions', 'settings-personal');
return $tmpl->fetchPage();

View file

@ -1,12 +0,0 @@
<form id="versions">
<fieldset class="personalblock">
<legend>
<strong><?php echo $l->t('Versions'); ?></strong>
</legend>
<button id="expireAllBtn">
<?php echo $l->t('Expire all versions'); ?>
<img style="display: none;" class="expireAllLoading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" />
</button>
<br /><em><?php echo $l->t('This will delete all existing backup versions of your files'); ?></em>
</fieldset>
</form>

View file

@ -1,4 +1,37 @@
<?php $TRANSLATIONS = array(
"Host" => "হোস্ট",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://",
"Base DN" => "ভিত্তি 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." => "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"Password" => "কূটশব্দ",
"For anonymous access, leave DN and Password empty." => "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"User Login Filter" => "ব্যবহারকারির প্রবেশ ছাঁকনী",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "প্রবেশের চেষ্টা করার সময় প্রযোজ্য ছাঁকনীটি নির্ধারণ করবে। প্রবেশের সময় ব্যবহারকারী নামটি %%uid দিয়ে প্রতিস্থাপিত হবে।",
"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid স্থানধারক ব্যবহার করুন, উদাহরণঃ \"uid=%%uid\"",
"User List Filter" => "ব্যবহারকারী তালিকা ছাঁকনী",
"Defines the filter to apply, when retrieving users." => "ব্যবহারকারী উদ্ধার করার সময় প্রয়োগের জন্য ছাঁকনী নির্ধারণ করবে।",
"without any placeholder, e.g. \"objectClass=person\"." => "কোন স্থানধারক ব্যতীত, যেমনঃ \"objectClass=person\"",
"Group Filter" => "গোষ্ঠী ছাঁকনী",
"Defines the filter to apply, when retrieving groups." => "গোষ্ঠীসমূহ উদ্ধার করার সময় প্রয়োগের জন্য ছাঁকনী নির্ধারণ করবে।",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "কোন স্থান ধারক ব্যতীত, উদাহরণঃ\"objectClass=posixGroup\"",
"Port" => "পোর্ট",
"Base User Tree" => "ভিত্তি ব্যবহারকারি বৃক্ষাকারে",
"Base Group Tree" => "ভিত্তি গোষ্ঠী বৃক্ষাকারে",
"Group-Member association" => "গোষ্ঠী-সদস্য সংস্থাপন",
"Use TLS" => "TLS ব্যবহার কর",
"Do not use it for SSL connections, it will fail." => "SSL সংযোগের জন্য এটি ব্যবহার করবেন না, তাহলে ব্যর্থ হবেনই।",
"Case insensitve LDAP server (Windows)" => "বর্ণ অসংবেদী LDAP সার্ভার (উইন্ডোজ)",
"Turn off SSL certificate validation." => "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "শুধুমাত্র যদি এই বিকল্পটি ব্যবহার করেই সংযোগ কার্যকরী হয় তবে আপনার ownCloud সার্ভারে LDAP সার্ভারের SSL সনদপত্রটি আমদানি করুন।",
"Not recommended, use for testing only." => "অনুমোদিত নয়, শুধুমাত্র পরীক্ষামূলক ব্যবহারের জন্য।",
"User Display Name Field" => "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র",
"The LDAP attribute to use to generate the user`s ownCloud name." => "ব্যবহারকারীর ownCloud নাম তৈরি করার জন্য ব্যভহৃত LDAP বৈশিষ্ট্য।",
"Group Display Name Field" => "গোষ্ঠীর প্রদর্শিতব্য নামের ক্ষেত্র",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "গোষ্ঠীর ownCloud নাম তৈরি করার জন্য ব্যভহৃত LDAP বৈশিষ্ট্য।",
"in bytes" => "বাইটে",
"in seconds. A change empties the cache." => "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ব্যবহারকারী নামের জন্য ফাঁকা রাখুন (পূর্বনির্ধারিত)। অন্যথায়, LDAP/AD বৈশিষ্ট্য নির্ধারণ করুন।",
"Help" => "সহায়িকা"
);

View file

@ -0,0 +1,12 @@
<?php $TRANSLATIONS = array(
"Host" => "מארח",
"User DN" => "DN משתמש",
"Password" => "סיסמא",
"For anonymous access, leave DN and Password empty." => "לגישה אנונימית, השאר את הDM והסיסמא ריקים.",
"User Login Filter" => "סנן כניסת משתמש",
"User List Filter" => "סנן רשימת משתמשים",
"Group Filter" => "סנן קבוצה",
"in bytes" => "בבתים",
"in seconds. A change empties the cache." => "בשניות. שינוי מרוקן את המטמון.",
"Help" => "עזרה"
);

View file

@ -0,0 +1,4 @@
<?php $TRANSLATIONS = array(
"URL: http://" => "URL:http://",
"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct."
);

View file

@ -1,4 +1,4 @@
<?php $TRANSLATIONS = array(
"URL: http://" => "URL : http://",
"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "Owncloud enverra les identifiants de sécurité de l'utilisateur à cet URL et interprète les http 401 et 403 comme des erreurs d'identification et tous les autres codes seront considérés comme une identification valide."
"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud "
);

View file

@ -5,15 +5,25 @@
ul.multiselectoptions {
background-color:#fff;
border:1px solid #ddd;
border-bottom-left-radius:.5em;
border-bottom-right-radius:.5em;
border-top:none;
box-shadow:0 1px 1px #ddd;
padding-top:.5em;
position:absolute;
max-height: 20em;
overflow-y: auto;
z-index:49;
}
ul.multiselectoptions.down {
border-bottom-left-radius:.5em;
border-bottom-right-radius:.5em;
}
ul.multiselectoptions.up {
border-top-left-radius:.5em;
border-top-right-radius:.5em;
}
ul.multiselectoptions>li {
overflow:hidden;
white-space:nowrap;
@ -30,11 +40,20 @@
div.multiselect.active {
background-color:#fff;
position:relative;
z-index:50;
}
div.multiselect.up {
border-top:0 none;
border-top-left-radius:0;
border-top-right-radius:0;
}
div.multiselect.down {
border-bottom:none;
border-bottom-left-radius:0;
border-bottom-right-radius:0;
position:relative;
z-index:50;
}
div.multiselect>span:first-child {

View file

@ -1,20 +1,44 @@
/**
* @param 'createCallback' A function to be called when a new entry is created. Two arguments are supplied to this function:
* The select element used and the value of the option. If the function returns false addition will be cancelled. If it returns
* anything else it will be used as the value of the newly added option.
* @param 'createText' The placeholder text for the create action.
* @param 'title' The title to show if no options are selected.
* @param 'checked' An array containing values for options that should be checked. Any options which are already selected will be added to this array.
* @param 'labels' The corresponding labels to show for the checked items.
* @param 'oncheck' Callback function which will be called when a checkbox/radiobutton is selected. If the function returns false the input will be unchecked.
* @param 'onuncheck' @see 'oncheck'.
* @param 'singleSelect' If true radiobuttons will be used instead of checkboxes.
*/
(function( $ ){
var multiSelectId=-1;
$.fn.multiSelect=function(options){
$.fn.multiSelect=function(options) {
multiSelectId++;
var settings = {
'createCallback':false,
'createText':false,
'singleSelect':false,
'selectedFirst':false,
'sort':true,
'title':this.attr('title'),
'checked':[],
'labels':[],
'oncheck':false,
'onuncheck':false,
'minWidth': 'default;',
};
$(this).attr('data-msid', multiSelectId);
$.extend(settings,options);
$.each(this.children(),function(i,option){
if($(option).attr('selected') && settings.checked.indexOf($(option).val())==-1){
$.each(this.children(),function(i,option) {
// If the option is selected, but not in the checked array, add it.
if($(option).attr('selected') && settings.checked.indexOf($(option).val()) === -1) {
settings.checked.push($(option).val());
settings.labels.push($(option).text().trim());
}
// If the option is in the checked array but not selected, select it.
else if(settings.checked.indexOf($(option).val()) !== -1 && !$(option).attr('selected')) {
$(option).attr('selected', 'selected');
settings.labels.push($(option).text().trim());
}
});
var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span>▾</span></div>');
@ -24,24 +48,36 @@
button.selectedItems=[];
this.hide();
this.before(span);
if(settings.minWidth=='default'){
if(settings.minWidth=='default') {
settings.minWidth=button.width();
}
button.css('min-width',settings.minWidth);
settings.minOuterWidth=button.outerWidth()-2;
button.data('settings',settings);
if(settings.checked.length>0){
button.children('span').first().text(settings.checked.join(', '));
if(!settings.singleSelect && settings.checked.length>0) {
button.children('span').first().text(settings.labels.join(', '));
} else if(settings.singleSelect) {
button.children('span').first().text(this.find(':selected').text());
}
var self = this;
self.menuDirection = 'down';
button.click(function(event){
var button=$(this);
if(button.parent().children('ul').length>0){
button.parent().children('ul').slideUp(400,function(){
button.parent().children('ul').remove();
button.removeClass('active');
});
if(button.parent().children('ul').length>0) {
if(self.menuDirection === 'down') {
button.parent().children('ul').slideUp(400,function() {
button.parent().children('ul').remove();
button.removeClass('active down');
});
} else {
button.parent().children('ul').fadeOut(400,function() {
button.parent().children('ul').remove();
button.removeClass('active up');
});
}
return;
}
var lists=$('ul.multiselectoptions');
@ -54,49 +90,69 @@
event.stopPropagation();
var options=$(this).parent().next().children();
var list=$('<ul class="multiselectoptions"/>').hide().appendTo($(this).parent());
function createItem(element,checked){
var inputType = settings.singleSelect ? 'radio' : 'checkbox';
function createItem(element, checked){
element=$(element);
var item=element.val();
var id='ms'+multiSelectId+'-option-'+item;
var input=$('<input type="checkbox"/>');
var input=$('<input type="' + inputType + '"/>');
input.attr('id',id);
if(settings.singleSelect) {
input.attr('name', 'ms'+multiSelectId+'-option');
}
var label=$('<label/>');
label.attr('for',id);
label.text(item);
if(settings.checked.indexOf(item)!=-1 || checked){
input.attr('checked',true);
label.text(element.text() || item);
if(settings.checked.indexOf(item)!=-1 || checked) {
input.attr('checked', true);
}
if(checked){
settings.checked.push(item);
if(settings.singleSelect) {
settings.checked = [item];
settings.labels = [item];
} else {
settings.checked.push(item);
settings.labels.push(item);
}
}
input.change(function(){
var groupname=$(this).next().text();
if($(this).is(':checked')){
var value = $(this).attr('id').substring(String('ms'+multiSelectId+'-option').length+1);
var label = $(this).next().text().trim();
if($(this).is(':checked')) {
if(settings.singleSelect) {
settings.checked = [];
settings.labels = [];
$.each(self.find('option'), function() {
$(this).removeAttr('selected');
});
}
element.attr('selected','selected');
if(settings.oncheck){
if(settings.oncheck(groupname)===false){
if(typeof settings.oncheck === 'function') {
if(settings.oncheck(value)===false) {
$(this).attr('checked', false);
return;
}
}
settings.checked.push(groupname);
}else{
var index=settings.checked.indexOf(groupname);
settings.checked.push(value);
settings.labels.push(label);
$(this).parent().addClass('checked');
} else {
var index=settings.checked.indexOf(value);
element.attr('selected',null);
if(settings.onuncheck){
if(settings.onuncheck(groupname)===false){
if(typeof settings.onuncheck === 'function') {
if(settings.onuncheck(value)===false) {
$(this).attr('checked',true);
return;
}
}
$(this).parent().removeClass('checked');
settings.checked.splice(index,1);
settings.labels.splice(index,1);
}
var oldWidth=button.width();
if(settings.checked.length>0){
button.children('span').first().text(settings.checked.join(', '));
}else{
button.children('span').first().text(settings.title);
}
button.children('span').first().text(settings.labels.length > 0
? settings.labels.join(', ')
: settings.title);
var newOuterWidth=Math.max((button.outerWidth()-2),settings.minOuterWidth)+'px';
var newWidth=Math.max(button.width(),settings.minWidth);
var pos=button.position();
@ -110,6 +166,9 @@
});
var li=$('<li></li>');
li.append(input).append(label);
if(input.is(':checked')) {
li.addClass('checked');
}
return li;
}
$.each(options,function(index,item){
@ -117,13 +176,13 @@
});
button.parent().data('preventHide',false);
if(settings.createText){
var li=$('<li>+ <em>'+settings.createText+'<em></li>');
var li=$('<li class="creator">+ <em>'+settings.createText+'<em></li>');
li.click(function(event){
li.empty();
var input=$('<input class="new">');
li.append(input);
input.focus();
input.css('width',button.width());
input.css('width',button.innerWidth());
button.parent().data('preventHide',true);
input.keypress(function(event) {
if(event.keyCode == 13) {
@ -132,7 +191,7 @@
var value = $(this).val();
var exists = false;
$.each(options,function(index, item) {
if ($(item).val() == value) {
if ($(item).val() == value || $(item).text() == value) {
exists = true;
return false;
}
@ -141,22 +200,39 @@
return false;
}
var li=$(this).parent();
var val = $(this).val()
var select=button.parent().next();
if(typeof settings.createCallback === 'function') {
var response = settings.createCallback(select, val);
if(response === false) {
return false;
} else if(typeof response !== 'undefined') {
val = response;
}
}
if(settings.singleSelect) {
$.each(select.find('option:selected'), function() {
$(this).removeAttr('selected');
});
}
$(this).remove();
li.text('+ '+settings.createText);
li.before(createItem(this));
var select=button.parent().next();
var option=$('<option selected="selected"/>');
option.attr('value',value);
option.text($(this).val());
option.text($(this).val()).val(val).attr('selected', 'selected');
select.append(option);
li.prev().children('input').trigger('click');
li.prev().children('input').prop('checked', true).trigger('change');
button.parent().data('preventHide',false);
if(settings.createCallback){
settings.createCallback($(this).val());
button.children('span').first().text(settings.labels.length > 0
? settings.labels.join(', ')
: settings.title);
if(self.menuDirection === 'up') {
var list = li.parent();
list.css('top', list.position().top-li.outerHeight());
}
}
});
input.blur(function(){
input.blur(function() {
event.preventDefault();
event.stopPropagation();
$(this).remove();
@ -168,21 +244,72 @@
});
list.append(li);
}
var doSort = function(list, selector) {
var rows = list.find('li'+selector).get();
if(settings.sort) {
rows.sort(function(a, b) {
return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase());
});
}
$.each(rows, function(index, row) {
list.append(row);
});
};
if(settings.sort && settings.selectedFirst) {
doSort(list, '.checked');
doSort(list, ':not(.checked)');
} else if(settings.sort && !settings.selectedFirst) {
doSort(list, '');
}
list.append(list.find('li.creator'));
var pos=button.position();
list.css('top',pos.top+button.outerHeight()-5);
list.css('left',pos.left+3);
list.css('width',(button.outerWidth()-2)+'px');
list.slideDown();
list.click(function(event){
if($(document).height() > (button.offset().top+button.outerHeight() + list.children().length * button.height())
|| $(document).height()/2 > pos.top
) {
list.css({
top:pos.top+button.outerHeight()-5,
left:pos.left+3,
width:(button.outerWidth()-2)+'px',
'max-height':($(document).height()-(button.offset().top+button.outerHeight()+10))+'px'
});
list.addClass('down');
button.addClass('down');
list.slideDown();
} else {
list.css('max-height', $(document).height()-($(document).height()-(pos.top)+50)+'px');
list.css({
top:pos.top - list.height(),
left:pos.left+3,
width:(button.outerWidth()-2)+'px'
});
list.detach().insertBefore($(this));
list.addClass('up');
button.addClass('up');
list.fadeIn();
self.menuDirection = 'up';
}
list.click(function(event) {
event.stopPropagation();
});
});
$(window).click(function(){
if(!button.parent().data('preventHide')){
button.parent().children('ul').slideUp(400,function(){
button.parent().children('ul').remove();
button.removeClass('active');
});
$(window).click(function() {
if(!button.parent().data('preventHide')) {
// How can I save the effect in a var?
if(self.menuDirection === 'down') {
button.parent().children('ul').slideUp(400,function() {
button.parent().children('ul').remove();
button.removeClass('active down');
});
} else {
button.parent().children('ul').fadeOut(400,function() {
button.parent().children('ul').remove();
button.removeClass('active up');
});
}
}
});

View file

@ -98,7 +98,6 @@
"Lost your password?" => "هل نسيت كلمة السر؟",
"remember" => "تذكر",
"Log in" => "أدخل",
"You are logged out." => "تم الخروج بنجاح.",
"prev" => "السابق",
"next" => "التالي",
"Security Warning!" => "تحذير أمان!",

View file

@ -1,12 +1,15 @@
<?php $TRANSLATIONS = array(
"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: " => "এই ক্যাটেগরিটি বিদ্যমানঃ",
"This category already exists: " => "এই ক্যাটেগরিটি পূর্ব থেকেই বিদ্যমানঃ",
"Object type not provided." => "অবজেক্টের ধরণটি প্রদান করা হয় নি।",
"%s ID not provided." => "%s ID প্রদান করা হয় নি।",
"Error adding %s to favorites." => "প্রিয়তে %s যোগ করতে সমস্যা দেখা দিয়েছে।",
"No categories selected for deletion." => "মুছে ফেলার জন্য কোন ক্যাটেগরি নির্বাচন করা হয় নি",
"No categories selected for deletion." => "মুছে ফেলার জন্য কোন ক্যাটেগরি নির্বাচন করা হয় নি ",
"Error removing %s from favorites." => "প্রিয় থেকে %s সরিয়ে ফেলতে সমস্যা দেখা দিয়েছে।",
"Settings" => "নিয়ামকসমূহ",
"seconds ago" => "সেকেন্ড পূর্বে",
@ -22,8 +25,8 @@
"months ago" => "মাস পূর্বে",
"last year" => "গত বছর",
"years ago" => "বছর পূর্বে",
"Choose" => "নির্বাচ",
"Cancel" => "বাতি",
"Choose" => "বেছে নিন",
"Cancel" => "বাতি",
"No" => "না",
"Yes" => "হ্যাঁ",
"Ok" => "তথাস্তু",
@ -31,64 +34,67 @@
"Error" => "সমস্যা",
"The app name is not specified." => "অ্যাপের নামটি সুনির্দিষ্ট নয়।",
"The required file {file} is not installed!" => "আবশ্যিক {file} টি সংস্থাপিত নেই !",
"Error while sharing" => "ভাগাভাগি করার সময় সমস্যা দেখা দিয়েছে",
"Error while unsharing" => "ভাগাভাগি বাতিল করার সময় সমস্যা দেখা দিয়েছে",
"Error while changing permissions" => "অনুমতি পরিবর্তন করার সময় সমস্যা দেখা দিয়েছে",
"Share with" => "যাদের সাথে ভাগাভাগি করবে",
"Share with link" => "লিংক সহযোগে ভাগাভাগি",
"Password protect" => "কূটশব্দদ্বারা সুরক্ষিত",
"Error while sharing" => "ভাগাভাগি করতে সমস্যা দেখা দিয়েছে ",
"Error while unsharing" => "ভাগাভাগি বাতিল করতে সমস্যা দেখা দিয়েছে",
"Error while changing permissions" => "অনুমতিসমূহ পরিবর্তন করতে সমস্যা দেখা দিয়েছে",
"Shared with you and the group {group} by {owner}" => "{owner} আপনার এবং {group} গোষ্ঠীর সাথে ভাগাভাগি করেছেন",
"Shared with you by {owner}" => "{owner} আপনার সাথে ভাগাভাগি করেছেন",
"Share with" => "যাদের সাথে ভাগাভাগি করা হয়েছে",
"Share with link" => "লিংকের সাথে ভাগাভাগি কর",
"Password protect" => "কূটশব্দ সুরক্ষিত",
"Password" => "কূটশব্দ",
"Email link to person" => "ব্যক্তির সাথে ই-মেইল যুক্ত কর",
"Send" => "পাঠাও",
"Set expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন",
"Expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ",
"Share via email:" => "ই-মেইলের মাধ্যমে ভাগাভাগি কর",
"Share via email:" => "ই-মেইলের মাধ্যমে ভাগাভাগি করুন",
"No people found" => "কোন ব্যক্তি খুঁজে পাওয়া গেল না",
"Resharing is not allowed" => "পূনরায় ভাগাভাগি করার অনুমতি নেই",
"Unshare" => "ভাগাভাগি বাতিল",
"can edit" => "সম্পাদনা করতে পারবে",
"access control" => "অধিগম্যতার নিয়ন্ত্রণ",
"create" => "তৈরি কর",
"Resharing is not allowed" => "পূনঃরায় ভাগাভাগি অনুমোদিত নয়",
"Shared in {item} with {user}" => "{user} এর সাথে {item} ভাগাভাগি করা হয়েছে",
"Unshare" => "ভাগাভাগি বাতিল কর",
"can edit" => "সম্পাদনা করতে পারবেন",
"access control" => "অধিগম্যতা নিয়ন্ত্রণ",
"create" => "তৈরী করুন",
"update" => "পরিবর্ধন কর",
"delete" => "মুছে ফেল",
"share" => "ভাগাভাগি কর",
"Password protected" => "কূটশব্দদ্বারা সুরক্ষিত",
"Error unsetting expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা",
"Error setting expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা",
"Error unsetting expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা দেখা দিয়েছে",
"Error setting expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা দেখা দিয়েছে",
"Sending ..." => "পাঠানো হচ্ছে......",
"Email sent" => "ই-মেইল পাঠানো হয়েছে",
"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." => "কূটশব্দ পূনঃনির্ধারণের জন্য একটি লিংক ই-মেইলের মাধ্যমে পাঠানো হয়েছে",
"Use the following link to reset your password: {link}" => "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}",
"You will receive a link to reset your password via Email." => "কূটশব্দ পূনঃনির্ধারণের জন্য একটি টূনঃনির্ধারণ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ",
"Reset email send." => "পূনঃনির্ধারণ ই-মেইল পাঠানো হয়েছে।",
"Request failed!" => "অনুরোধ ব্যর্থ !",
"Username" => "ব্যবহারকারি",
"Request reset" => "পূনঃনির্ধারণের জন্য অনুরোধ",
"Your password was reset" => "আপনার কূটশব্দটি পূনঃনির্ধারণ করা হয়েছে",
"To login page" => "প্রবেশ পাতায়",
"Username" => "ব্যবহারকার",
"Request reset" => "অনুরোধ পূনঃনির্ধারণ",
"Your password was reset" => "আপনার কূটশব্দটি পূনঃনির্ধারণ করা হয়েছে",
"To login page" => "প্রবেশ পৃষ্ঠায়",
"New password" => "নতুন কূটশব্দ",
"Reset password" => "কূটশব্দ পূনঃনির্ধারণ",
"Reset password" => "কূটশব্দ পূনঃনির্ধারণ কর",
"Personal" => "ব্যক্তিগত",
"Users" => "ব্যবহারকারিবৃন্দ",
"Users" => "ব্যবহারকার",
"Apps" => "অ্যাপস",
"Admin" => "প্রশাস",
"Admin" => "প্রশাস",
"Help" => "সহায়িকা",
"Access forbidden" => "অধিগমনের অনুমতি নেই",
"Cloud not found" => "ক্লাউড খুঁজে পাওয়া গেল না",
"Edit categories" => "ক্যাটেগরি সম্পাদনা",
"Add" => "যোগ কর",
"Security Warning" => "নিরাপত্তাজনিত সতর্কতা",
"Create an <strong>admin account</strong>" => "<strong>প্রশাসক একাউন্ট</strong> তৈরি কর",
"Create an <strong>admin account</strong>" => "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন",
"Advanced" => "সুচারু",
"Data folder" => "ডাটা ফোল্ডার",
"Configure the database" => "ডাটাবেজ কনফিগার কর",
"Data folder" => "ডাটা ফোল্ডার ",
"Configure the database" => "ডাটাবেচ কনফিগার করুন",
"will be used" => "ব্যবহৃত হবে",
"Database user" => "ডাটাবেজ ব্যবহারকারি",
"Database user" => "ডাটাবেজ ব্যবহারকার",
"Database password" => "ডাটাবেজ কূটশব্দ",
"Database name" => "ডাটাবেজের নাম",
"Database tablespace" => "ডাটাবেজ টেবিলস্পেস",
"Database tablespace" => "ডাটাবেজ টেবলস্পেস",
"Database host" => "ডাটাবেজ হোস্ট",
"Finish setup" => "সেট-আপ সুসম্পন্ন কর",
"Finish setup" => "সেটআপ সুসম্পন্ন কর",
"Sunday" => "রবিবার",
"Monday" => "সোমবার",
"Tuesday" => "মঙ্গলবার",
@ -103,19 +109,19 @@
"May" => "মে",
"June" => "জুন",
"July" => "জুলাই",
"August" => "অগা্ট",
"August" => "অগা্ট",
"September" => "সেপ্টেম্বর",
"October" => "অক্টোবর",
"November" => "নভেম্বর",
"December" => "ডিসেম্বর",
"web services under your control" => "ওয়েব সেবাসমূহ এখন আপনার হাতের মুঠোয়",
"web services under your control" => "ওয়েব সার্ভিসের নিয়ন্ত্রণ আপনার হাতের মুঠোয়",
"Log out" => "প্রস্থান",
"Lost your password?" => "আপনার কূটশব্দটি হারিয়েছেন ?",
"Lost your password?" => "কূটশব্দ হারিয়েছেন?",
"remember" => "মনে রাখ",
"Log in" => "প্রবেশ",
"You are logged out." => "আপনি প্রস্থান করেছেন",
"prev" => "পূর্ববর্তী",
"next" => "পরবর্তী",
"Updating ownCloud to version %s, this may take a while." => "%s ভার্সনে ownCloud পরিবর্ধন করা হচ্ছে, এজন্য কিছু সময় প্রয়োজন।",
"Security Warning!" => "নিরাপত্তাবিষয়ক সতর্কবাণী",
"Verify" => "যাচাই কর"
);

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Heu perdut la contrasenya?",
"remember" => "recorda'm",
"Log in" => "Inici de sessió",
"You are logged out." => "Heu tancat la sessió.",
"prev" => "anterior",
"next" => "següent",
"Updating ownCloud to version %s, this may take a while." => "S'està actualitzant ownCloud a la versió %s, pot trigar una estona.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Ztratili jste své heslo?",
"remember" => "zapamatovat si",
"Log in" => "Přihlásit",
"You are logged out." => "Jste odhlášeni.",
"prev" => "předchozí",
"next" => "následující",
"Updating ownCloud to version %s, this may take a while." => "Aktualizuji ownCloud na verzi %s, bude to chvíli trvat.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Mistet dit kodeord?",
"remember" => "husk",
"Log in" => "Log ind",
"You are logged out." => "Du er nu logget ud.",
"prev" => "forrige",
"next" => "næste",
"Security Warning!" => "Sikkerhedsadvarsel!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"Log in" => "Einloggen",
"You are logged out." => "Du wurdest abgemeldet.",
"prev" => "Zurück",
"next" => "Weiter",
"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"Log in" => "Einloggen",
"You are logged out." => "Sie wurden abgemeldet.",
"prev" => "Zurück",
"next" => "Weiter",
"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Ξεχάσατε το συνθηματικό σας;",
"remember" => "απομνημόνευση",
"Log in" => "Είσοδος",
"You are logged out." => "Έχετε αποσυνδεθεί.",
"prev" => "προηγούμενο",
"next" => "επόμενο",
"Security Warning!" => "Προειδοποίηση Ασφαλείας!",

View file

@ -121,7 +121,6 @@
"Lost your password?" => "Ĉu vi perdis vian pasvorton?",
"remember" => "memori",
"Log in" => "Ensaluti",
"You are logged out." => "Vi estas elsalutita.",
"prev" => "maljena",
"next" => "jena",
"Security Warning!" => "Sekureca averto!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "¿Has perdido tu contraseña?",
"remember" => "recuérdame",
"Log in" => "Entrar",
"You are logged out." => "Has cerrado la sesión.",
"prev" => "anterior",
"next" => "siguiente",
"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a la versión %s, esto puede demorar un tiempo.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "¿Perdiste tu contraseña?",
"remember" => "recordame",
"Log in" => "Entrar",
"You are logged out." => "Terminaste la sesión.",
"prev" => "anterior",
"next" => "siguiente",
"Security Warning!" => "¡Advertencia de seguridad!",

View file

@ -101,7 +101,6 @@
"Lost your password?" => "Kaotasid oma parooli?",
"remember" => "pea meeles",
"Log in" => "Logi sisse",
"You are logged out." => "Sa oled välja loginud",
"prev" => "eelm",
"next" => "järgm",
"Security Warning!" => "turvahoiatus!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Galdu duzu pasahitza?",
"remember" => "gogoratu",
"Log in" => "Hasi saioa",
"You are logged out." => "Zure saioa bukatu da.",
"prev" => "aurrekoa",
"next" => "hurrengoa",
"Security Warning!" => "Segurtasun abisua",

View file

@ -71,7 +71,6 @@
"Lost your password?" => "آیا گذرواژه تان را به یاد نمی آورید؟",
"remember" => "بیاد آوری",
"Log in" => "ورود",
"You are logged out." => "شما خارج شدید",
"prev" => "بازگشت",
"next" => "بعدی"
);

View file

@ -1,4 +1,8 @@
<?php $TRANSLATIONS = array(
"User %s shared a file with you" => "Käyttäjä %s jakoi tiedoston kanssasi",
"User %s shared a folder with you" => "Käyttäjä %s jakoi kansion kanssasi",
"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Käyttäjä %s jakoi tiedoston \"%s\" kanssasi. Se on ladattavissa täältä: %s",
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Käyttäjä %s jakoi kansion \"%s\" kanssasi. Se on ladattavissa täältä: %s",
"No category to add?" => "Ei lisättävää luokkaa?",
"This category already exists: " => "Tämä luokka on jo olemassa: ",
"No categories selected for deletion." => "Luokkia ei valittu poistettavaksi.",
@ -52,6 +56,7 @@
"ownCloud password reset" => "ownCloud-salasanan nollaus",
"Use the following link to reset your password: {link}" => "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"You will receive a link to reset your password via Email." => "Saat sähköpostitse linkin nollataksesi salasanan.",
"Reset email send." => "Salasanan nollausviesti lähetetty.",
"Request failed!" => "Pyyntö epäonnistui!",
"Username" => "Käyttäjätunnus",
"Request reset" => "Tilaus lähetetty",
@ -108,9 +113,9 @@
"Lost your password?" => "Unohditko salasanasi?",
"remember" => "muista",
"Log in" => "Kirjaudu sisään",
"You are logged out." => "Olet kirjautunut ulos.",
"prev" => "edellinen",
"next" => "seuraava",
"Updating ownCloud to version %s, this may take a while." => "Päivitetään ownCloud versioon %s, tämä saattaa kestää hetken.",
"Security Warning!" => "Turvallisuusvaroitus!",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Vahvista salasanasi. <br/>Turvallisuussyistä sinulta saatetaan ajoittain kysyä salasanasi uudelleen.",
"Verify" => "Vahvista"

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Mot de passe perdu ?",
"remember" => "se souvenir de moi",
"Log in" => "Connexion",
"You are logged out." => "Vous êtes désormais déconnecté.",
"prev" => "précédent",
"next" => "suivant",
"Updating ownCloud to version %s, this may take a while." => "Mise à jour en cours d'ownCloud vers la version %s, cela peut prendre du temps.",

View file

@ -125,9 +125,9 @@
"Lost your password?" => "Perdeu o contrasinal?",
"remember" => "lembrar",
"Log in" => "Conectar",
"You are logged out." => "Está desconectado",
"prev" => "anterior",
"next" => "seguinte",
"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a versión %s, esto pode levar un anaco.",
"Security Warning!" => "Advertencia de seguranza",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Verifique o seu contrasinal.<br/>Por motivos de seguranza pode que ocasionalmente se lle pregunte de novo polo seu contrasinal.",
"Verify" => "Verificar"

View file

@ -125,9 +125,9 @@
"Lost your password?" => "שכחת את ססמתך?",
"remember" => "שמירת הססמה",
"Log in" => "כניסה",
"You are logged out." => "לא התחברת.",
"prev" => "הקודם",
"next" => "הבא",
"Updating ownCloud to version %s, this may take a while." => "מעדכן את ownCloud אל גרסא %s, זה עלול לקחת זמן מה.",
"Security Warning!" => "אזהרת אבטחה!",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "נא לאמת את הססמה שלך. <br/>מטעמי אבטחה יתכן שתופיע בקשה להזין את הססמה שוב.",
"Verify" => "אימות"

View file

@ -12,7 +12,6 @@
"Database user" => "डेटाबेस उपयोगकर्ता",
"Database password" => "डेटाबेस पासवर्ड",
"Finish setup" => "सेटअप समाप्त करे",
"You are logged out." => "आप लोग आउट कर दिए गए हैं.",
"prev" => "पिछला",
"next" => "अगला"
);

View file

@ -91,7 +91,6 @@
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "zapamtiti",
"Log in" => "Prijava",
"You are logged out." => "Odjavljeni ste.",
"prev" => "prethodan",
"next" => "sljedeći"
);

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Elfelejtette a jelszavát?",
"remember" => "emlékezzen",
"Log in" => "Bejelentkezés",
"You are logged out." => "Kilépett.",
"prev" => "előző",
"next" => "következő",
"Security Warning!" => "Biztonsági figyelmeztetés!",

View file

@ -52,7 +52,6 @@
"Lost your password?" => "Tu perdeva le contrasigno?",
"remember" => "memora",
"Log in" => "Aperir session",
"You are logged out." => "Tu session ha essite claudite.",
"prev" => "prev",
"next" => "prox"
);

View file

@ -100,7 +100,6 @@
"Lost your password?" => "Lupa password anda?",
"remember" => "selalu login",
"Log in" => "Masuk",
"You are logged out." => "Anda telah keluar.",
"prev" => "sebelum",
"next" => "selanjutnya",
"Security Warning!" => "peringatan keamanan!",

View file

@ -4,7 +4,7 @@
"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Notandinn %s deildi skránni \"%s\" með þér. Hægt er að hlaða henni niður hér: %s",
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Notandinn %s deildi möppunni \"%s\" með þér. Hægt er að hlaða henni niður hér: %s",
"Category type not provided." => "Flokkur ekki gefin",
"No category to add?" => "Enginn flokkur til að <strong>bæta við</strong>?",
"No category to add?" => "Enginn flokkur til að bæta við?",
"This category already exists: " => "Þessi flokkur er þegar til:",
"Object type not provided." => "Tegund ekki í boði.",
"%s ID not provided." => "%s ID ekki í boði.",
@ -31,7 +31,7 @@
"Yes" => "",
"Ok" => "Í lagi",
"The object type is not specified." => "Tegund ekki tilgreind",
"Error" => "<strong>Villa</strong>",
"Error" => "Villa",
"The app name is not specified." => "Nafn forrits ekki tilgreint",
"The required file {file} is not installed!" => "Umbeðina skráin {file} ekki tiltæk!",
"Error while sharing" => "Villa við deilingu",
@ -63,7 +63,7 @@
"Error setting expiration date" => "Villa við að setja gildistíma",
"Sending ..." => "Sendi ...",
"Email sent" => "Tölvupóstur sendur",
"ownCloud password reset" => "endursetja ownCloud <strong>lykilorð</strong>",
"ownCloud password reset" => "endursetja ownCloud lykilorð",
"Use the following link to reset your password: {link}" => "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"You will receive a link to reset your password via Email." => "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
"Reset email send." => "Beiðni um endursetningu send.",
@ -78,9 +78,9 @@
"Users" => "Notendur",
"Apps" => "Forrit",
"Admin" => "Vefstjórn",
"Help" => "Help",
"Help" => "Hlp",
"Access forbidden" => "Aðgangur bannaður",
"Cloud not found" => "Skýið finnst eigi",
"Cloud not found" => "Ský finnst ekki",
"Edit categories" => "Breyta flokkum",
"Add" => "Bæta",
"Security Warning" => "Öryggis aðvörun",
@ -92,12 +92,12 @@
"Data folder" => "Gagnamappa",
"Configure the database" => "Stilla gagnagrunn",
"will be used" => "verður notað",
"Database user" => "Notandi gagnagrunns",
"Database password" => "Lykilorð gagnagrunns",
"Database user" => "Gagnagrunns notandi",
"Database password" => "Gagnagrunns lykilorð",
"Database name" => "Nafn gagnagrunns",
"Database tablespace" => "Töflusvæði gagnagrunns",
"Database host" => "Netþjónn gagnagrunns",
"Finish setup" => "Ljúka uppsetningu",
"Finish setup" => "Virkja uppsetningu",
"Sunday" => "Sunnudagur",
"Monday" => "Mánudagur",
"Tuesday" => "Þriðjudagur",
@ -125,9 +125,9 @@
"Lost your password?" => "Týndir þú lykilorðinu?",
"remember" => "muna eftir mér",
"Log in" => "<strong>Skrá inn</strong>",
"You are logged out." => "Þú ert útskráð(ur).",
"prev" => "fyrra",
"next" => "næsta",
"Updating ownCloud to version %s, this may take a while." => "Uppfæri ownCloud í útgáfu %s, það gæti tekið smá stund.",
"Security Warning!" => "Öryggis aðvörun!",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Vinsamlegast staðfestu lykilorðið þitt.<br/>Í öryggisskyni munum við biðja þig um að skipta um lykilorð af og til.",
"Verify" => "Staðfesta"

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Hai perso la password?",
"remember" => "ricorda",
"Log in" => "Accedi",
"You are logged out." => "Sei uscito.",
"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.",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "パスワードを忘れましたか?",
"remember" => "パスワードを記憶する",
"Log in" => "ログイン",
"You are logged out." => "ログアウトしました。",
"prev" => "",
"next" => "",
"Updating ownCloud to version %s, this may take a while." => "ownCloud をバージョン %s に更新しています、しばらくお待ち下さい。",

View file

@ -98,7 +98,6 @@
"Lost your password?" => "დაგავიწყდათ პაროლი?",
"remember" => "დამახსოვრება",
"Log in" => "შესვლა",
"You are logged out." => "თქვენ გამოხვედით სისტემიდან",
"prev" => "წინა",
"next" => "შემდეგი",
"Security Warning!" => "უსაფრთხოების გაფრთხილება!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "암호를 잊으셨습니까?",
"remember" => "기억하기",
"Log in" => "로그인",
"You are logged out." => "로그아웃되었습니다.",
"prev" => "이전",
"next" => "다음",
"Updating ownCloud to version %s, this may take a while." => "ownCloud 를 버젼 %s로 업데이트 하는 중, 시간이 소요됩니다.",

View file

@ -64,7 +64,6 @@
"Lost your password?" => "Passwuert vergiess?",
"remember" => "verhalen",
"Log in" => "Log dech an",
"You are logged out." => "Du bass ausgeloggt.",
"prev" => "zeréck",
"next" => "weider"
);

View file

@ -104,7 +104,6 @@
"Lost your password?" => "Pamiršote slaptažodį?",
"remember" => "prisiminti",
"Log in" => "Prisijungti",
"You are logged out." => "Jūs atsijungėte.",
"prev" => "atgal",
"next" => "kitas",
"Security Warning!" => "Saugumo pranešimas!",

View file

@ -30,7 +30,6 @@
"Lost your password?" => "Aizmirsāt paroli?",
"remember" => "atcerēties",
"Log in" => "Ielogoties",
"You are logged out." => "Jūs esat veiksmīgi izlogojies.",
"prev" => "iepriekšējā",
"next" => "nākamā"
);

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Ја заборавивте лозинката?",
"remember" => "запамти",
"Log in" => "Најава",
"You are logged out." => "Одјавени сте.",
"prev" => "претходно",
"next" => "следно",
"Security Warning!" => "Безбедносно предупредување.",

View file

@ -62,7 +62,6 @@
"Lost your password?" => "Hilang kata laluan?",
"remember" => "ingat",
"Log in" => "Log masuk",
"You are logged out." => "Anda telah log keluar.",
"prev" => "sebelum",
"next" => "seterus"
);

View file

@ -100,7 +100,6 @@
"Lost your password?" => "Mistet passordet ditt?",
"remember" => "husk",
"Log in" => "Logg inn",
"You are logged out." => "Du er logget ut",
"prev" => "forrige",
"next" => "neste",
"Security Warning!" => "Sikkerhetsadvarsel!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Uw wachtwoord vergeten?",
"remember" => "onthoud gegevens",
"Log in" => "Meld je aan",
"You are logged out." => "U bent afgemeld.",
"prev" => "vorige",
"next" => "volgende",
"Updating ownCloud to version %s, this may take a while." => "Updaten ownCloud naar versie %s, dit kan even duren.",

View file

@ -52,7 +52,6 @@
"Lost your password?" => "Gløymt passordet?",
"remember" => "hugs",
"Log in" => "Logg inn",
"You are logged out." => "Du er logga ut.",
"prev" => "førre",
"next" => "neste"
);

View file

@ -93,7 +93,6 @@
"Lost your password?" => "L'as perdut lo senhal ?",
"remember" => "bremba-te",
"Log in" => "Dintrada",
"You are logged out." => "Sias pas dintra (t/ada)",
"prev" => "dariièr",
"next" => "venent"
);

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Nie pamiętasz hasła?",
"remember" => "Zapamiętanie",
"Log in" => "Zaloguj",
"You are logged out." => "Wylogowano użytkownika.",
"prev" => "wstecz",
"next" => "naprzód",
"Updating ownCloud to version %s, this may take a while." => "Aktualizowanie ownCloud do wersji %s, może to potrwać chwilę.",

View file

@ -117,7 +117,6 @@
"Lost your password?" => "Esqueçeu sua senha?",
"remember" => "lembrete",
"Log in" => "Log in",
"You are logged out." => "Você está desconectado.",
"prev" => "anterior",
"next" => "próximo",
"Security Warning!" => "Aviso de Segurança!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Esqueceu a sua password?",
"remember" => "lembrar",
"Log in" => "Entrar",
"You are logged out." => "Estás desconetado.",
"prev" => "anterior",
"next" => "seguinte",
"Updating ownCloud to version %s, this may take a while." => "A Actualizar o ownCloud para a versão %s, esta operação pode demorar.",

View file

@ -109,7 +109,6 @@
"Lost your password?" => "Ai uitat parola?",
"remember" => "amintește",
"Log in" => "Autentificare",
"You are logged out." => "Ai ieșit",
"prev" => "precedentul",
"next" => "următorul",
"Security Warning!" => "Advertisment de Securitate",

View file

@ -125,9 +125,9 @@
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"Log in" => "Войти",
"You are logged out." => "Вы вышли.",
"prev" => "пред",
"next" => "след",
"Updating ownCloud to version %s, this may take a while." => "Производится обновление ownCloud до версии %s. Это может занять некоторое время.",
"Security Warning!" => "Предупреждение безопасности!",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Пожалуйста, проверьте свой ​​пароль. <br/>По соображениям безопасности, Вам иногда придется вводить свой пароль снова.",
"Verify" => "Подтвердить"

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"Log in" => "Войти",
"You are logged out." => "Вы вышли из системы.",
"prev" => "предыдущий",
"next" => "следующий",
"Security Warning!" => "Предупреждение системы безопасности!",

View file

@ -85,7 +85,6 @@
"Lost your password?" => "මුරපදය අමතකද?",
"remember" => "මතක තබාගන්න",
"Log in" => "ප්‍රවේශවන්න",
"You are logged out." => "ඔබ නික්මී ඇත.",
"prev" => "පෙර",
"next" => "ඊළඟ"
);

View file

@ -117,7 +117,6 @@
"Lost your password?" => "Zabudli ste heslo?",
"remember" => "zapamätať",
"Log in" => "Prihlásiť sa",
"You are logged out." => "Ste odhlásený.",
"prev" => "späť",
"next" => "ďalej",
"Security Warning!" => "Bezpečnostné varovanie!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Ali ste pozabili geslo?",
"remember" => "Zapomni si me",
"Log in" => "Prijava",
"You are logged out." => "Sta odjavljeni.",
"prev" => "nazaj",
"next" => "naprej",
"Security Warning!" => "Varnostno opozorilo!",

View file

@ -117,7 +117,6 @@
"Lost your password?" => "Изгубили сте лозинку?",
"remember" => "упамти",
"Log in" => "Пријава",
"You are logged out." => "Одјављени сте.",
"prev" => "претходно",
"next" => "следеће",
"Security Warning!" => "Сигурносно упозорење!",

View file

@ -46,7 +46,6 @@
"Log out" => "Odjava",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "upamti",
"You are logged out." => "Odjavljeni ste.",
"prev" => "prethodno",
"next" => "sledeće"
);

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Glömt ditt lösenord?",
"remember" => "kom ihåg",
"Log in" => "Logga in",
"You are logged out." => "Du är utloggad.",
"prev" => "föregående",
"next" => "nästa",
"Updating ownCloud to version %s, this may take a while." => "Uppdaterar ownCloud till version %s, detta kan ta en stund.",

View file

@ -117,7 +117,6 @@
"Lost your password?" => "உங்கள் கடவுச்சொல்லை தொலைத்துவிட்டீர்களா?",
"remember" => "ஞாபகப்படுத்துக",
"Log in" => "புகுபதிகை",
"You are logged out." => "நீங்கள் விடுபதிகை செய்துவிட்டீர்கள்.",
"prev" => "முந்தைய",
"next" => "அடுத்து",
"Security Warning!" => "பாதுகாப்பு எச்சரிக்கை!",

View file

@ -117,7 +117,6 @@
"Lost your password?" => "ลืมรหัสผ่าน?",
"remember" => "จำรหัสผ่าน",
"Log in" => "เข้าสู่ระบบ",
"You are logged out." => "คุณออกจากระบบเรียบร้อยแล้ว",
"prev" => "ก่อนหน้า",
"next" => "ถัดไป",
"Security Warning!" => "คำเตือนเพื่อความปลอดภัย!",

View file

@ -104,7 +104,6 @@
"Lost your password?" => "Parolanızı mı unuttunuz?",
"remember" => "hatırla",
"Log in" => "Giriş yap",
"You are logged out." => "Çıkış yaptınız.",
"prev" => "önceki",
"next" => "sonraki",
"Security Warning!" => "Güvenlik Uyarısı!",

View file

@ -125,7 +125,6 @@
"Lost your password?" => "Забули пароль?",
"remember" => "запам'ятати",
"Log in" => "Вхід",
"You are logged out." => "Ви вийшли з системи.",
"prev" => "попередній",
"next" => "наступний",
"Security Warning!" => "Попередження про небезпеку!",

View file

@ -117,7 +117,6 @@
"Lost your password?" => "Bạn quên mật khẩu ?",
"remember" => "ghi nhớ",
"Log in" => "Đăng nhập",
"You are logged out." => "Bạn đã đăng xuất.",
"prev" => "Lùi lại",
"next" => "Kế tiếp",
"Security Warning!" => "Cảnh báo bảo mật !",

View file

@ -106,7 +106,6 @@
"Lost your password?" => "忘记密码?",
"remember" => "备忘",
"Log in" => "登陆",
"You are logged out." => "你已经注销了",
"prev" => "后退",
"next" => "前进",
"Security Warning!" => "安全警告!",

View file

@ -124,7 +124,6 @@
"Lost your password?" => "忘记密码?",
"remember" => "记住",
"Log in" => "登录",
"You are logged out." => "您已注销。",
"prev" => "上一页",
"next" => "下一页",
"Security Warning!" => "安全警告!",

View file

@ -1,14 +1,22 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "無分類添加?",
"This category already exists: " => "此分類已經存在:",
"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: " => "此分類已經存在:",
"Object type not provided." => "不支援的物件類型",
"No categories selected for deletion." => "沒選擇要刪除的分類",
"%s ID not provided." => "未提供 %s ID 。",
"Error adding %s to favorites." => "加入 %s 到最愛時發生錯誤。",
"No categories selected for deletion." => "沒有選擇要刪除的分類。",
"Error removing %s from favorites." => "從最愛移除 %s 時發生錯誤。",
"Settings" => "設定",
"seconds ago" => "幾秒前",
"1 minute ago" => "1 分鐘前",
"{minutes} minutes ago" => "{minutes} 分鐘前",
"1 hour ago" => "1 個小時前",
"{hours} hours ago" => "{hours} 小時前",
"{hours} hours ago" => "{hours} 小時前",
"today" => "今天",
"yesterday" => "昨天",
"{days} days ago" => "{days} 天前",
@ -22,20 +30,24 @@
"No" => "No",
"Yes" => "Yes",
"Ok" => "Ok",
"The object type is not specified." => "未指定物件類型。",
"Error" => "錯誤",
"The app name is not specified." => "沒有詳述APP名稱.",
"The app name is not specified." => "沒有指定 app 名稱。",
"The required file {file} is not installed!" => "沒有安裝所需的檔案 {file} ",
"Error while sharing" => "分享時發生錯誤",
"Error while unsharing" => "取消分享時發生錯誤",
"Error while changing permissions" => "修改權限時發生錯誤",
"Shared with you and the group {group} by {owner}" => "{owner} 分享給您和 {group}",
"Shared with you by {owner}" => "{owner} 已經和您分享",
"Share with" => "分享",
"Share with" => "...分享",
"Share with link" => "使用連結分享",
"Password protect" => "密碼保護",
"Password" => "密碼",
"Email link to person" => "將連結 email 給別人",
"Send" => "寄出",
"Set expiration date" => "設置到期日",
"Expiration date" => "到期日",
"Share via email:" => "透過email分享:",
"Share via email:" => "透過 email 分享:",
"No people found" => "沒有找到任何人",
"Resharing is not allowed" => "不允許重新分享",
"Shared in {item} with {user}" => "已和 {user} 分享 {item}",
@ -46,16 +58,18 @@
"update" => "更新",
"delete" => "刪除",
"share" => "分享",
"Password protected" => "密碼保護",
"Password protected" => "密碼保護",
"Error unsetting expiration date" => "解除過期日設定失敗",
"Error setting expiration date" => "錯誤的到期日設定",
"Sending ..." => "正在寄出...",
"Email sent" => "Email 已寄出",
"ownCloud password reset" => "ownCloud 密碼重設",
"Use the following link to reset your password: {link}" => "請循以下聯結重設你的密碼: (聯結) ",
"You will receive a link to reset your password via Email." => "重設密碼的連結將會寄到你的電子郵件信箱",
"Reset email send." => "重設郵件已送出.",
"Request failed!" => "請求失敗!",
"Use the following link to reset your password: {link}" => "請循以下聯結重設你的密碼 {link}",
"You will receive a link to reset your password via Email." => "重設密碼的連結將會寄到你的電子郵件信箱",
"Reset email send." => "重設郵件已送出",
"Request failed!" => "請求失敗",
"Username" => "使用者名稱",
"Request reset" => "求重設",
"Request reset" => "求重設",
"Your password was reset" => "你的密碼已重設",
"To login page" => "至登入頁面",
"New password" => "新密碼",
@ -65,12 +79,12 @@
"Apps" => "應用程式",
"Admin" => "管理者",
"Help" => "幫助",
"Access forbidden" => "禁止存取",
"Access forbidden" => "存取被拒",
"Cloud not found" => "未發現雲",
"Edit categories" => "編輯分類",
"Add" => "",
"Add" => "",
"Security Warning" => "安全性警告",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有可用的隨機數字產生器, 請啟用 PHP 中 OpenSSL 擴充功能.",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有可用的亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重設信物,然後控制您的帳戶。",
"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "您的資料目錄 (Data Directory) 和檔案可能可以由網際網路上面公開存取。Owncloud 所提供的 .htaccess 設定檔並未生效,我們強烈建議您設定您的網頁伺服器以防止資料目錄被公開存取,或將您的資料目錄移出網頁伺服器的 document root 。",
"Create an <strong>admin account</strong>" => "建立一個<strong>管理者帳號</strong>",
@ -103,18 +117,18 @@
"October" => "十月",
"November" => "十一月",
"December" => "十二月",
"web services under your control" => "網路服務已在你控制",
"web services under your control" => "網路服務在您控制之下",
"Log out" => "登出",
"Automatic logon rejected!" => "自動登入被拒!",
"If you did not change your password recently, your account may be compromised!" => "如果您最近並未更改密碼,您的帳號可能已經遭到入侵!",
"Please change your password to secure your account again." => "請更改您的密碼以再次取得您的帳戶的控制權。",
"Lost your password?" => "忘記密碼?",
"Lost your password?" => "忘記密碼",
"remember" => "記住",
"Log in" => "登入",
"You are logged out." => "你已登出",
"prev" => "上一頁",
"next" => "下一頁",
"Security Warning!" => "安全性警告!",
"Updating ownCloud to version %s, this may take a while." => "正在將 Owncloud 升級至版本 %s ,這可能需要一點時間。",
"Security Warning!" => "安全性警告!",
"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "請輸入您的密碼。<br/>基於安全性的理由,您有時候可能會被要求再次輸入密碼。",
"Verify" => "驗證"
);

View file

@ -5,7 +5,7 @@
<p class="exception">
<?php
if($_['showsysinfo'] == true) {
echo 'If you would like to support ownCloud\'s developers and report this error in our <a href="http://bugs.owncloud.org">Bugtracker</a>, please copy the following informations into the description. <br><br><textarea readonly>';
echo 'If you would like to support ownCloud\'s developers and report this error in our <a href="https://github.com/owncloud/core">bug tracker</a>, please copy the following informations into the description. <br><br><textarea readonly>';
echo 'Message: ' . $_['message'] . "\n";
echo 'Error Code: ' . $_['code'] . "\n";
echo 'File: ' . $_['file'] . "\n";

View file

@ -1 +0,0 @@
<?php echo $l->t( 'You are logged out.' );

46
issue_template.md Normal file
View file

@ -0,0 +1,46 @@
### Expected behaviour
Tell us what should happen
### Actual behaviour
Tell us what happens instead
### Steps to reproduce
1.
2.
3.
### Server configuration
Operating system:
Web server:
Database:
PHP version:
ownCloud version:
### Client configuration
Browser:
Operating system:
### Logs
#### Web server error log
```
Insert your webserver log here
```
#### ownCloud log (data/owncloud.log)
```
Insert your ownCloud log here
```
#### Browser log
```
Insert your browser log here, this could for example include:
a) The javascript console log
b) The network log
c) ...
```

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-07 00:04+0100\n"
"PO-Revision-Date: 2013-01-06 23:04+0000\n"
"POT-Creation-Date: 2013-01-12 00:09+0100\n"
"PO-Revision-Date: 2013-01-11 23:09+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"
@ -85,55 +85,55 @@ msgstr ""
msgid "Settings"
msgstr "تعديلات"
#: js/js.js:704
#: js/js.js:711
msgid "seconds ago"
msgstr "منذ ثواني"
#: js/js.js:705
#: js/js.js:712
msgid "1 minute ago"
msgstr "منذ دقيقة"
#: js/js.js:706
#: js/js.js:713
msgid "{minutes} minutes ago"
msgstr "{minutes} منذ دقائق"
#: js/js.js:707
#: js/js.js:714
msgid "1 hour ago"
msgstr ""
#: js/js.js:708
#: js/js.js:715
msgid "{hours} hours ago"
msgstr ""
#: js/js.js:709
#: js/js.js:716
msgid "today"
msgstr "اليوم"
#: js/js.js:710
#: js/js.js:717
msgid "yesterday"
msgstr ""
#: js/js.js:711
#: js/js.js:718
msgid "{days} days ago"
msgstr ""
#: js/js.js:712
#: js/js.js:719
msgid "last month"
msgstr ""
#: js/js.js:713
#: js/js.js:720
msgid "{months} months ago"
msgstr ""
#: js/js.js:714
#: js/js.js:721
msgid "months ago"
msgstr ""
#: js/js.js:715
#: js/js.js:722
msgid "last year"
msgstr ""
#: js/js.js:716
#: js/js.js:723
msgid "years ago"
msgstr ""
@ -554,10 +554,6 @@ msgstr "تذكر"
msgid "Log in"
msgstr "أدخل"
#: templates/logout.php:1
msgid "You are logged out."
msgstr "تم الخروج بنجاح."
#: templates/part.pagenavi.php:3
msgid "prev"
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: 2012-12-30 00:04+0100\n"
"PO-Revision-Date: 2012-12-29 23:05+0000\n"
"POT-Creation-Date: 2013-01-12 00:09+0100\n"
"PO-Revision-Date: 2013-01-11 23:09+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"
@ -32,7 +32,7 @@ msgstr "المجموعة موجودة مسبقاً"
msgid "Unable to add group"
msgstr "فشل إضافة المجموعة"
#: ajax/enableapp.php:12
#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "فشل عملية تفعيل التطبيق"
@ -44,14 +44,6 @@ msgstr "تم حفظ البريد الإلكتروني"
msgid "Invalid email"
msgstr "البريد الإلكتروني غير صالح"
#: ajax/openid.php:13
msgid "OpenID Changed"
msgstr "تم تغيير ال OpenID"
#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
msgid "Invalid request"
msgstr "طلبك غير مفهوم"
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "فشل إزالة المجموعة"
@ -68,6 +60,10 @@ msgstr "فشل إزالة المستخدم"
msgid "Language changed"
msgstr "تم تغيير اللغة"
#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
msgid "Invalid request"
msgstr "طلبك غير مفهوم"
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "لا يستطيع المدير إزالة حسابه من مجموعة المديرين"

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