diff options
author | Michael Gapczynski <mtgap@owncloud.com> | 2012-07-31 15:00:04 -0400 |
---|---|---|
committer | Michael Gapczynski <mtgap@owncloud.com> | 2012-07-31 15:00:04 -0400 |
commit | 94ce8f2168bdd9897f54ec433ad7017fb3db1cc8 (patch) | |
tree | db031ac7fd4788be6593e258d170c8f134533e4b /apps | |
parent | 269922543eaf9e69dbf5a15fa0ba34704040b09c (diff) | |
parent | dfae77dec1650f171d09d4bde88ab74029f6e8c7 (diff) | |
download | nextcloud-server-94ce8f2168bdd9897f54ec433ad7017fb3db1cc8.tar.gz nextcloud-server-94ce8f2168bdd9897f54ec433ad7017fb3db1cc8.zip |
Merge branch 'master' into share_api
Conflicts:
apps/contacts/lib/app.php
apps/files_sharing/js/share.js
Diffstat (limited to 'apps')
107 files changed, 2445 insertions, 485 deletions
diff --git a/apps/bookmarks/l10n/ca.php b/apps/bookmarks/l10n/ca.php new file mode 100644 index 00000000000..cf90d9a8874 --- /dev/null +++ b/apps/bookmarks/l10n/ca.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Adreces d'interès", +"unnamed" => "sense nom", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Arrossegueu-ho al navegador i feu-hi un clic quan volgueu marcar ràpidament una adreça d'interès:", +"Read later" => "Llegeix més tard", +"Address" => "Adreça", +"Title" => "Títol", +"Tags" => "Etiquetes", +"Save bookmark" => "Desa l'adreça d'interès", +"You have no bookmarks" => "No teniu adreces d'interès", +"Bookmarklet <br />" => "Bookmarklet <br />" +); diff --git a/apps/bookmarks/l10n/de.php b/apps/bookmarks/l10n/de.php new file mode 100644 index 00000000000..9e0f137382c --- /dev/null +++ b/apps/bookmarks/l10n/de.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Lesezeichen", +"unnamed" => "unbenannt", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Ziehe dies zu deinen Browser-Lesezeichen und klicke es, wenn du eine Website schnell den Lesezeichen hinzufügen willst.", +"Read later" => "Später lesen", +"Address" => "Adresse", +"Title" => "Title", +"Tags" => "Tags", +"Save bookmark" => "Lesezeichen speichern", +"You have no bookmarks" => "Du hast keine Lesezeichen", +"Bookmarklet <br />" => "Bookmarklet <br />" +); diff --git a/apps/bookmarks/l10n/el.php b/apps/bookmarks/l10n/el.php new file mode 100644 index 00000000000..f282a1bbf85 --- /dev/null +++ b/apps/bookmarks/l10n/el.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Σελιδοδείκτες", +"unnamed" => "ανώνυμο", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Σύρετε αυτό στους σελιδοδείκτες του περιηγητή σας και κάντε κλικ επάνω του, όταν θέλετε να προσθέσετε σύντομα μια ιστοσελίδα ως σελιδοδείκτη:", +"Read later" => "Ανάγνωση αργότερα", +"Address" => "Διεύθυνση", +"Title" => "Τίτλος", +"Tags" => "Ετικέτες", +"Save bookmark" => "Αποθήκευση σελιδοδείκτη", +"You have no bookmarks" => "Δεν έχετε σελιδοδείκτες", +"Bookmarklet <br />" => "Εφαρμογίδιο Σελιδοδεικτών <br />" +); diff --git a/apps/bookmarks/l10n/es.php b/apps/bookmarks/l10n/es.php new file mode 100644 index 00000000000..071b0dda707 --- /dev/null +++ b/apps/bookmarks/l10n/es.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Marcadores", +"unnamed" => "sin nombre", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Arrastra desde aquí a los marcadores de tu navegador, y haz clic cuando quieras marcar una página web rápidamente:", +"Read later" => "Leer después", +"Address" => "Dirección", +"Title" => "Título", +"Tags" => "Etiquetas", +"Save bookmark" => "Guardar marcador", +"You have no bookmarks" => "No tienes marcadores", +"Bookmarklet <br />" => "Bookmarklet <br />" +); diff --git a/apps/bookmarks/l10n/fi_FI.php b/apps/bookmarks/l10n/fi_FI.php new file mode 100644 index 00000000000..c814747411b --- /dev/null +++ b/apps/bookmarks/l10n/fi_FI.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Kirjanmerkit", +"unnamed" => "nimetön", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Vedä tämä selaimesi kirjanmerkkipalkkiin ja napsauta sitä, kun haluat lisätä kirjanmerkin nopeasti:", +"Read later" => "Lue myöhemmin", +"Address" => "Osoite", +"Title" => "Otsikko", +"Tags" => "Tunnisteet", +"Save bookmark" => "Tallenna kirjanmerkki", +"You have no bookmarks" => "Sinulla ei ole kirjanmerkkejä", +"Bookmarklet <br />" => "Kirjanmerkitsin <br />" +); diff --git a/apps/bookmarks/l10n/sl.php b/apps/bookmarks/l10n/sl.php new file mode 100644 index 00000000000..32a41629082 --- /dev/null +++ b/apps/bookmarks/l10n/sl.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Zaznamki", +"unnamed" => "neimenovano", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Povlecite to povezavo med zaznamke v vašem brskalniku in jo, ko želite ustvariti zaznamek trenutne strani, preprosto kliknite:", +"Read later" => "Preberi kasneje", +"Address" => "Naslov", +"Title" => "Ime", +"Tags" => "Oznake", +"Save bookmark" => "Shrani zaznamek", +"You have no bookmarks" => "Nimate zaznamkov", +"Bookmarklet <br />" => "Bookmarklet <br />" +); diff --git a/apps/bookmarks/l10n/sv.php b/apps/bookmarks/l10n/sv.php new file mode 100644 index 00000000000..689bd452f12 --- /dev/null +++ b/apps/bookmarks/l10n/sv.php @@ -0,0 +1,12 @@ +<?php $TRANSLATIONS = array( +"Bookmarks" => "Bokmärken", +"unnamed" => "namnlös", +"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Dra till din webbläsares bokmärken och klicka på det när du vill bokmärka en webbsida snabbt:", +"Read later" => "Läs senare", +"Address" => "Adress", +"Title" => "Titel", +"Tags" => "Taggar", +"Save bookmark" => "Spara bokmärke", +"You have no bookmarks" => "Du har inga bokmärken", +"Bookmarklet <br />" => "Skriptbokmärke <br />" +); diff --git a/apps/calendar/l10n/ca.php b/apps/calendar/l10n/ca.php index afb1c799d93..d999eaf4739 100644 --- a/apps/calendar/l10n/ca.php +++ b/apps/calendar/l10n/ca.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "No tots els calendaris estan en memòria", +"Everything seems to be completely cached" => "Sembla que tot està en memòria", "No calendars found." => "No s'han trobat calendaris.", "No events found." => "No s'han trobat events.", "Wrong calendar" => "Calendari erroni", +"The file contained either no events or all events are already saved in your calendar." => "El fitxer no contenia esdeveniments o aquests ja estaven desats en el vostre caledari", +"events has been saved in the new calendar" => "els esdeveniments s'han desat en el calendari nou", +"Import failed" => "Ha fallat la importació", +"events has been saved in your calendar" => "els esdveniments s'han desat en el calendari", "New Timezone:" => "Nova zona horària:", "Timezone changed" => "La zona horària ha canviat", "Invalid request" => "Sol.licitud no vàlida", "Calendar" => "Calendari", -"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"ddd" => "ddd", +"ddd M/d" => "ddd d/M", +"dddd M/d" => "dddd d/M", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d [MMM ][yyyy ]{'—' d MMM yyyy}", +"dddd, MMM d, yyyy" => "dddd, d MMM, yyyy", "Birthday" => "Aniversari", "Business" => "Feina", "Call" => "Trucada", @@ -22,7 +33,9 @@ "Projects" => "Projectes", "Questions" => "Preguntes", "Work" => "Feina", +"by" => "per", "unnamed" => "sense nom", +"New Calendar" => "Calendari nou", "Does not repeat" => "No es repeteix", "Daily" => "Diari", "Weekly" => "Mensual", @@ -67,8 +80,26 @@ "by day and month" => "per dia del mes", "Date" => "Data", "Cal." => "Cal.", +"Sun." => "Dg.", +"Mon." => "Dl.", +"Tue." => "Dm.", +"Wed." => "Dc.", +"Thu." => "Dj.", +"Fri." => "Dv.", +"Sat." => "Ds.", +"Jan." => "Gen.", +"Feb." => "Febr.", +"Mar." => "Març", +"Apr." => "Abr.", +"May." => "Maig", +"Jun." => "Juny", +"Jul." => "Jul.", +"Aug." => "Ag.", +"Sep." => "Set.", +"Oct." => "Oct.", +"Nov." => "Nov.", +"Dec." => "Des.", "All day" => "Tot el dia", -"New Calendar" => "Calendari nou", "Missing fields" => "Els camps que falten", "Title" => "Títol", "From Date" => "Des de la data", @@ -132,18 +163,17 @@ "Interval" => "Interval", "End" => "Final", "occurrences" => "aparicions", -"Import a calendar file" => "Importa un fitxer de calendari", -"Please choose the calendar" => "Escolliu el calendari", "create a new calendar" => "crea un nou calendari", +"Import a calendar file" => "Importa un fitxer de calendari", +"Please choose a calendar" => "Escolliu un calendari", "Name of new calendar" => "Nom del nou calendari", +"Take an available name!" => "Escolliu un nom disponible!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ja hi ha un calendari amb aquest nom. Si continueu, els calendaris es combinaran.", "Import" => "Importa", -"Importing calendar" => "S'està important el calendari", -"Calendar imported successfully" => "El calendari s'ha importat amb èxit", "Close Dialog" => "Tanca el diàleg", "Create a new event" => "Crea un nou esdeveniment", "View an event" => "Mostra un event", "No categories selected" => "No hi ha categories seleccionades", -"Select category" => "Seleccioneu categoria", "of" => "de", "at" => "a", "Timezone" => "Zona horària", @@ -152,7 +182,13 @@ "24h" => "24h", "12h" => "12h", "First day of the week" => "Primer dia de la setmana", -"Calendar CalDAV syncing address:" => "Adreça de sincronització del calendari CalDAV:", +"Cache" => "Memòria de cau", +"Clear cache for repeating events" => "Neteja la memòria de cau pels esdeveniments amb repetició", +"Calendar CalDAV syncing addresses" => "Adreça de sincronització del calendari CalDAV", +"more info" => "més informació", +"Primary address (Kontact et al)" => "Adreça primària (Kontact et al)", +"iOS/OS X" => "IOS/OS X", +"Read only iCalendar link(s)" => "Enllaç(os) iCalendar només de lectura", "Users" => "Usuaris", "select users" => "seleccioneu usuaris", "Editable" => "Editable", diff --git a/apps/calendar/l10n/de.php b/apps/calendar/l10n/de.php index 33c924ac2c3..8270b6785e4 100644 --- a/apps/calendar/l10n/de.php +++ b/apps/calendar/l10n/de.php @@ -1,8 +1,13 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Noch sind nicht alle Kalender zwischengespeichert.", +"Everything seems to be completely cached" => "Es sieht so aus, als wäre alles vollständig zwischengespeichert.", "No calendars found." => "Keine Kalender gefunden", "No events found." => "Keine Termine gefunden", "Wrong calendar" => "Falscher Kalender", +"The file contained either no events or all events are already saved in your calendar." => "Entweder enthielt die Datei keine Termine oder alle Termine waren schon im Kalender gespeichert.", +"events has been saved in the new calendar" => "Der Termin wurde im neuen Kalender gespeichert.", "Import failed" => "Import fehlgeschlagen", +"events has been saved in your calendar" => "Der Termin wurde im Kalender gespeichert.", "New Timezone:" => "Neue Zeitzone:", "Timezone changed" => "Zeitzone geändert", "Invalid request" => "Fehlerhafte Anfrage", @@ -160,7 +165,10 @@ "occurrences" => "Termine", "create a new calendar" => "Neuen Kalender anlegen", "Import a calendar file" => "Kalenderdatei Importieren", +"Please choose a calendar" => "Wählen Sie bitte einen Kalender.", "Name of new calendar" => "Kalendername", +"Take an available name!" => "Wählen Sie einen verfügbaren Namen.", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ein Kalender mit diesem Namen existiert schon. Sollten Sie fortfahren, werden die beiden Kalender zusammengeführt.", "Import" => "Importieren", "Close Dialog" => "Dialog schließen", "Create a new event" => "Neues Ereignis", @@ -174,6 +182,13 @@ "24h" => "24h", "12h" => "12h", "First day of the week" => "erster Wochentag", +"Cache" => "Zwischenspeicher", +"Clear cache for repeating events" => "Lösche den Zwischenspeicher für wiederholende Veranstaltungen.", +"Calendar CalDAV syncing addresses" => "CalDAV-Kalender gleicht Adressen ab.", +"more info" => "weitere Informationen", +"Primary address (Kontact et al)" => "Primäre Adresse (Kontakt u.a.)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Nur lesende(r) iCalender-Link(s)", "Users" => "Benutzer", "select users" => "Benutzer auswählen", "Editable" => "editierbar", diff --git a/apps/calendar/l10n/el.php b/apps/calendar/l10n/el.php index 0b289fbcf68..46572138485 100644 --- a/apps/calendar/l10n/el.php +++ b/apps/calendar/l10n/el.php @@ -1,17 +1,28 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Δεν έχει δημιουργηθεί λανθάνουσα μνήμη για όλα τα ημερολόγια", +"Everything seems to be completely cached" => "Όλα έχουν αποθηκευτεί στη cache", "No calendars found." => "Δε βρέθηκαν ημερολόγια.", "No events found." => "Δε βρέθηκαν γεγονότα.", "Wrong calendar" => "Λάθος ημερολόγιο", +"The file contained either no events or all events are already saved in your calendar." => "Το αρχείο που περιέχει είτε κανένα γεγονός είτε όλα τα γεγονότα έχουν ήδη αποθηκευτεί στο ημερολόγιό σας.", +"events has been saved in the new calendar" => "τα συμβάντα αποθηκεύτηκαν σε ένα νέο ημερολόγιο", +"Import failed" => "Η εισαγωγή απέτυχε", +"events has been saved in your calendar" => "το συμβάν αποθηκεύτηκε στο ημερολογιό σου", "New Timezone:" => "Νέα ζώνη ώρας:", "Timezone changed" => "Η ζώνη ώρας άλλαξε", "Invalid request" => "Μη έγκυρο αίτημα", "Calendar" => "Ημερολόγιο", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Γενέθλια", "Business" => "Επιχείρηση", "Call" => "Κλήση", "Clients" => "Πελάτες", -"Deliverer" => "Παραδώσας", +"Deliverer" => "Προμηθευτής", "Holidays" => "Διακοπές", "Ideas" => "Ιδέες", "Journey" => "Ταξίδι", @@ -22,7 +33,9 @@ "Projects" => "Έργα", "Questions" => "Ερωτήσεις", "Work" => "Εργασία", +"by" => "από", "unnamed" => "ανώνυμο", +"New Calendar" => "Νέα Ημερολόγιο", "Does not repeat" => "Μη επαναλαμβανόμενο", "Daily" => "Καθημερινά", "Weekly" => "Εβδομαδιαία", @@ -67,8 +80,26 @@ "by day and month" => "κατά ημέρα και μήνα", "Date" => "Ημερομηνία", "Cal." => "Ημερ.", +"Sun." => "Κυρ.", +"Mon." => "Δευ.", +"Tue." => "Τρί.", +"Wed." => "Τετ.", +"Thu." => "Πέμ.", +"Fri." => "Παρ.", +"Sat." => "Σάβ.", +"Jan." => "Ιαν.", +"Feb." => "Φεβ.", +"Mar." => "Μάρ.", +"Apr." => "Απρ.", +"May." => "Μαΐ.", +"Jun." => "Ιούν.", +"Jul." => "Ιούλ.", +"Aug." => "Αύγ.", +"Sep." => "Σεπ.", +"Oct." => "Οκτ.", +"Nov." => "Νοέ.", +"Dec." => "Δεκ.", "All day" => "Ολοήμερο", -"New Calendar" => "Νέα Ημερολόγιο", "Missing fields" => "Πεδία που λείπουν", "Title" => "Τίτλος", "From Date" => "Από Ημερομηνία", @@ -132,18 +163,17 @@ "Interval" => "Διάστημα", "End" => "Τέλος", "occurrences" => "περιστατικά", -"Import a calendar file" => "Εισαγωγή αρχείου ημερολογίου", -"Please choose the calendar" => "Παρακαλώ επιλέξτε το ημερολόγιο", "create a new calendar" => "δημιουργία νέου ημερολογίου", +"Import a calendar file" => "Εισαγωγή αρχείου ημερολογίου", +"Please choose a calendar" => "Παρακαλώ επέλεξε ένα ημερολόγιο", "Name of new calendar" => "Όνομα νέου ημερολογίου", +"Take an available name!" => "Επέλεξε ένα διαθέσιμο όνομα!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ένα ημερολόγιο με αυτό το όνομα υπάρχει ήδη. Εάν θέλετε να συνεχίσετε, αυτά τα 2 ημερολόγια θα συγχωνευθούν.", "Import" => "Εισαγωγή", -"Importing calendar" => "Εισαγωγή ημερολογίου", -"Calendar imported successfully" => "Το ημερολόγιο εισήχθει επιτυχώς", "Close Dialog" => "Κλείσιμο Διαλόγου", "Create a new event" => "Δημιουργήστε ένα νέο συμβάν", "View an event" => "Εμφάνισε ένα γεγονός", "No categories selected" => "Δεν επελέγησαν κατηγορίες", -"Select category" => "Επιλέξτε κατηγορία", "of" => "του", "at" => "στο", "Timezone" => "Ζώνη ώρας", @@ -152,7 +182,13 @@ "24h" => "24ω", "12h" => "12ω", "First day of the week" => "Πρώτη μέρα της εβδομάδας", -"Calendar CalDAV syncing address:" => "Διεύθυνση για το συγχρονισμού του ημερολογίου CalDAV:", +"Cache" => "Cache", +"Clear cache for repeating events" => "Εκκαθάριση λανθάνουσας μνήμης για επανάληψη γεγονότων", +"Calendar CalDAV syncing addresses" => "Διευθύνσεις συγχρονισμού ημερολογίου CalDAV", +"more info" => "περισσότερες πλροφορίες", +"Primary address (Kontact et al)" => "Κύρια Διεύθυνση(Επαφή και άλλα)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => " iCalendar link(s) μόνο για ανάγνωση", "Users" => "Χρήστες", "select users" => "επέλεξε χρήστες", "Editable" => "Επεξεργάσιμο", diff --git a/apps/calendar/l10n/fi_FI.php b/apps/calendar/l10n/fi_FI.php index 4de94b7b7b7..23096d7365a 100644 --- a/apps/calendar/l10n/fi_FI.php +++ b/apps/calendar/l10n/fi_FI.php @@ -2,6 +2,9 @@ "No calendars found." => "Kalentereita ei löytynyt", "No events found." => "Tapahtumia ei löytynyt.", "Wrong calendar" => "Väärä kalenteri", +"The file contained either no events or all events are already saved in your calendar." => "Tiedosto ei joko sisältänyt tapahtumia tai vaihtoehtoisesti kaikki tapahtumat on jo tallennettu kalenteriisi.", +"Import failed" => "Tuonti epäonnistui", +"events has been saved in your calendar" => "tapahtumaa on tallennettu kalenteriisi", "New Timezone:" => "Uusi aikavyöhyke:", "Timezone changed" => "Aikavyöhyke vaihdettu", "Invalid request" => "Virheellinen pyyntö", @@ -21,6 +24,7 @@ "Questions" => "Kysymykset", "Work" => "Työ", "unnamed" => "nimetön", +"New Calendar" => "Uusi kalenteri", "Does not repeat" => "Ei toistoa", "Daily" => "Päivittäin", "Weekly" => "Viikottain", @@ -55,8 +59,26 @@ "November" => "Marraskuu", "December" => "Joulukuu", "Date" => "Päivämäärä", +"Sun." => "Su", +"Mon." => "Ma", +"Tue." => "Ti", +"Wed." => "Ke", +"Thu." => "To", +"Fri." => "Pe", +"Sat." => "La", +"Jan." => "Tammi", +"Feb." => "Helmi", +"Mar." => "Maalis", +"Apr." => "Huhti", +"May." => "Touko", +"Jun." => "Kesä", +"Jul." => "Heinä", +"Aug." => "Elo", +"Sep." => "Syys", +"Oct." => "Loka", +"Nov." => "Marras", +"Dec." => "Joulu", "All day" => "Koko päivä", -"New Calendar" => "Uusi kalenteri", "Missing fields" => "Puuttuvat kentät", "Title" => "Otsikko", "The event ends before it starts" => "Tapahtuma päättyy ennen alkamistaan", @@ -110,25 +132,24 @@ "Select months" => "Valitse kuukaudet", "Select weeks" => "Valitse viikot", "Interval" => "Intervalli", -"Import a calendar file" => "Tuo kalenteritiedosto", -"Please choose the calendar" => "Valitse kalenteri", "create a new calendar" => "luo uusi kalenteri", +"Import a calendar file" => "Tuo kalenteritiedosto", +"Please choose a calendar" => "Valitse kalenteri", "Name of new calendar" => "Uuden kalenterin nimi", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Samalla nimellä on jo olemassa kalenteri. Jos jatkat kaikesta huolimatta, kalenterit yhdistetään.", "Import" => "Tuo", -"Importing calendar" => "Tuodaan kalenteria", -"Calendar imported successfully" => "Kalenteri tuotu onnistuneesti", "Close Dialog" => "Sulje ikkuna", "Create a new event" => "Luo uusi tapahtuma", "View an event" => "Avaa tapahtuma", "No categories selected" => "Luokkia ei ole valittu", -"Select category" => "Valitse luokka", "Timezone" => "Aikavyöhyke", "Check always for changes of the timezone" => "Tarkista aina aikavyöhykkeen muutokset", "Timeformat" => "Ajan esitysmuoto", "24h" => "24 tuntia", "12h" => "12 tuntia", "First day of the week" => "Viikon ensimmäinen päivä", -"Calendar CalDAV syncing address:" => "Kalenterin CalDAV-synkronointiosoite:", +"Calendar CalDAV syncing addresses" => "Kalenterin CalDAV-synkronointiosoitteet", +"iOS/OS X" => "iOS/OS X", "Users" => "Käyttäjät", "select users" => "valitse käyttäjät", "Editable" => "Muoktattava", diff --git a/apps/calendar/l10n/fr.php b/apps/calendar/l10n/fr.php index 506453af428..289bc905b3c 100644 --- a/apps/calendar/l10n/fr.php +++ b/apps/calendar/l10n/fr.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Tous les calendriers ne sont pas mis en cache", +"Everything seems to be completely cached" => "Tout semble être en cache", "No calendars found." => "Aucun calendrier n'a été trouvé.", "No events found." => "Aucun événement n'a été trouvé.", "Wrong calendar" => "Mauvais calendrier", +"The file contained either no events or all events are already saved in your calendar." => "Soit le fichier ne contient aucun événement soit tous les événements sont déjà enregistrés dans votre calendrier.", +"events has been saved in the new calendar" => "Les événements ont été enregistrés dans le nouveau calendrier", +"Import failed" => "Échec de l'import", +"events has been saved in your calendar" => "Les événements ont été enregistrés dans votre calendrier", "New Timezone:" => "Nouveau fuseau horaire :", "Timezone changed" => "Fuseau horaire modifié", "Invalid request" => "Requête invalide", "Calendar" => "Calendrier", +"ddd" => "jjj", +"ddd M/d" => "jjj M/j", +"dddd M/d" => "jjjj M/j", +"MMMM yyyy" => "MMMM aaaa", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "jjjj, MMM j, aaaa", "Birthday" => "Anniversaire", "Business" => "Professionnel", "Call" => "Appel", @@ -22,7 +33,9 @@ "Projects" => "Projets", "Questions" => "Questions", "Work" => "Travail", +"by" => "par", "unnamed" => "sans-nom", +"New Calendar" => "Nouveau Calendrier", "Does not repeat" => "Pas de répétition", "Daily" => "Tous les jours", "Weekly" => "Hebdomadaire", @@ -67,8 +80,26 @@ "by day and month" => "par jour et mois", "Date" => "Date", "Cal." => "Cal.", +"Sun." => "Dim.", +"Mon." => "Lun.", +"Tue." => "Mar.", +"Wed." => "Mer.", +"Thu." => "Jeu", +"Fri." => "Ven.", +"Sat." => "Sam.", +"Jan." => "Jan.", +"Feb." => "Fév.", +"Mar." => "Mars", +"Apr." => "Avr.", +"May." => "Mai", +"Jun." => "Juin", +"Jul." => "Juil.", +"Aug." => "Août", +"Sep." => "Sep.", +"Oct." => "Oct.", +"Nov." => "Nov.", +"Dec." => "Déc.", "All day" => "Journée entière", -"New Calendar" => "Nouveau Calendrier", "Missing fields" => "Champs manquants", "Title" => "Titre", "From Date" => "De la date", @@ -132,18 +163,17 @@ "Interval" => "Intervalle", "End" => "Fin", "occurrences" => "occurrences", -"Import a calendar file" => "Importer un fichier de calendriers", -"Please choose the calendar" => "Choisissez le calendrier svp", "create a new calendar" => "Créer un nouveau calendrier", +"Import a calendar file" => "Importer un fichier de calendriers", +"Please choose a calendar" => "Veuillez sélectionner un calendrier", "Name of new calendar" => "Nom pour le nouveau calendrier", +"Take an available name!" => "Choisissez un nom disponible !", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendrier de ce nom existe déjà. Si vous choisissez de continuer les calendriers seront fusionnés.", "Import" => "Importer", -"Importing calendar" => "Import du calendrier", -"Calendar imported successfully" => "Calendrier importé avec succès", "Close Dialog" => "Fermer la fenêtre", "Create a new event" => "Créer un nouvel événement", "View an event" => "Voir un événement", "No categories selected" => "Aucune catégorie sélectionnée", -"Select category" => "Sélectionner une catégorie", "of" => "de", "at" => "à", "Timezone" => "Fuseau horaire", @@ -152,7 +182,13 @@ "24h" => "24h", "12h" => "12h", "First day of the week" => "Premier jour de la semaine", -"Calendar CalDAV syncing address:" => "Adresse de synchronisation du calendrier CalDAV :", +"Cache" => "Cache", +"Clear cache for repeating events" => "Nettoyer le cache des événements répétitifs", +"Calendar CalDAV syncing addresses" => "Adresses de synchronisation des calendriers CalDAV", +"more info" => "plus d'infos", +"Primary address (Kontact et al)" => "Adresses principales (Kontact et assimilés)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "lien(s) iCalendar en lecture seule", "Users" => "Utilisateurs", "select users" => "sélectionner les utilisateurs", "Editable" => "Modifiable", diff --git a/apps/calendar/l10n/it.php b/apps/calendar/l10n/it.php index cdb2d99c82e..b91e8b0df0b 100644 --- a/apps/calendar/l10n/it.php +++ b/apps/calendar/l10n/it.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Non tutti i calendari sono mantenuti completamente in cache", +"Everything seems to be completely cached" => "Tutto sembra essere mantenuto completamente in cache", "No calendars found." => "Nessun calendario trovato.", "No events found." => "Nessun evento trovato.", "Wrong calendar" => "Calendario sbagliato", +"The file contained either no events or all events are already saved in your calendar." => "Il file non conteneva alcun evento o tutti gli eventi erano già salvati nel tuo calendario.", +"events has been saved in the new calendar" => "gli eventi sono stati salvati nel nuovo calendario", +"Import failed" => "Importazione non riuscita", +"events has been saved in your calendar" => "gli eventi sono stati salvati nel tuo calendario", "New Timezone:" => "Nuovo fuso orario:", "Timezone changed" => "Fuso orario cambiato", "Invalid request" => "Richiesta non valida", "Calendar" => "Calendario", +"ddd" => "ggg", +"ddd M/d" => "ggg M/g", +"dddd M/d" => "gggg M/g", +"MMMM yyyy" => "MMMM aaaa", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "gggg, MMM g, aaaa", "Birthday" => "Compleanno", "Business" => "Azienda", "Call" => "Chiama", @@ -22,7 +33,9 @@ "Projects" => "Progetti", "Questions" => "Domande", "Work" => "Lavoro", +"by" => "da", "unnamed" => "senza nome", +"New Calendar" => "Nuovo calendario", "Does not repeat" => "Non ripetere", "Daily" => "Giornaliero", "Weekly" => "Settimanale", @@ -67,8 +80,26 @@ "by day and month" => "per giorno e mese", "Date" => "Data", "Cal." => "Cal.", +"Sun." => "Dom.", +"Mon." => "Lun.", +"Tue." => "Mar.", +"Wed." => "Mer.", +"Thu." => "Gio.", +"Fri." => "Ven.", +"Sat." => "Sab.", +"Jan." => "Gen.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Mag.", +"Jun." => "Giu.", +"Jul." => "Lug.", +"Aug." => "Ago.", +"Sep." => "Set.", +"Oct." => "Ott.", +"Nov." => "Nov.", +"Dec." => "Dic.", "All day" => "Tutti il giorno", -"New Calendar" => "Nuovo calendario", "Missing fields" => "Campi mancanti", "Title" => "Titolo", "From Date" => "Dal giorno", @@ -132,18 +163,17 @@ "Interval" => "Intervallo", "End" => "Fine", "occurrences" => "occorrenze", -"Import a calendar file" => "Importa un file di calendario", -"Please choose the calendar" => "Scegli il calendario", "create a new calendar" => "Crea un nuovo calendario", +"Import a calendar file" => "Importa un file di calendario", +"Please choose a calendar" => "Scegli un calendario", "Name of new calendar" => "Nome del nuovo calendario", +"Take an available name!" => "Usa un nome disponibile!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendario con questo nome esiste già. Se continui, i due calendari saranno uniti.", "Import" => "Importa", -"Importing calendar" => "Importazione del calendario in corso", -"Calendar imported successfully" => "Calendario importato correttamente", "Close Dialog" => "Chiudi la finestra di dialogo", "Create a new event" => "Crea un nuovo evento", "View an event" => "Visualizza un evento", "No categories selected" => "Nessuna categoria selezionata", -"Select category" => "Seleziona una categoria", "of" => "di", "at" => "alle", "Timezone" => "Fuso orario", @@ -152,7 +182,13 @@ "24h" => "24h", "12h" => "12h", "First day of the week" => "Primo giorno della settimana", -"Calendar CalDAV syncing address:" => "Indirizzo sincronizzazione calendario CalDAV:", +"Cache" => "Cache", +"Clear cache for repeating events" => "Cancella gli eventi che si ripetono dalla cache", +"Calendar CalDAV syncing addresses" => "Indirizzi di sincronizzazione calendari CalDAV", +"more info" => "ulteriori informazioni", +"Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Collegamento(i) iCalendar sola lettura", "Users" => "Utenti", "select users" => "seleziona utenti", "Editable" => "Modificabile", diff --git a/apps/calendar/l10n/sv.php b/apps/calendar/l10n/sv.php index 59f8c6e6b5d..e29e96b4631 100644 --- a/apps/calendar/l10n/sv.php +++ b/apps/calendar/l10n/sv.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Alla kalendrar är inte fullständigt sparade i cache", +"Everything seems to be completely cached" => "Allt verkar vara fullständigt sparat i cache", "No calendars found." => "Inga kalendrar funna", "No events found." => "Inga händelser funna.", "Wrong calendar" => "Fel kalender", +"The file contained either no events or all events are already saved in your calendar." => "Filen innehöll inga händelser eller så är alla händelser redan sparade i kalendern.", +"events has been saved in the new calendar" => "händelser har sparats i den nya kalendern", +"Import failed" => "Misslyckad import", +"events has been saved in your calendar" => "händelse har sparats i din kalender", "New Timezone:" => "Ny tidszon:", "Timezone changed" => "Tidszon ändrad", "Invalid request" => "Ogiltig begäran", "Calendar" => "Kalender", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM åååå", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "ddd, MMM d, åååå", "Birthday" => "Födelsedag", "Business" => "Företag", "Call" => "Ringa", @@ -22,7 +33,9 @@ "Projects" => "Projekt", "Questions" => "Frågor", "Work" => "Arbetet", +"by" => "av", "unnamed" => "Namn saknas", +"New Calendar" => "Ny kalender", "Does not repeat" => "Upprepas inte", "Daily" => "Dagligen", "Weekly" => "Varje vecka", @@ -67,8 +80,26 @@ "by day and month" => "efter dag och månad", "Date" => "Datum", "Cal." => "Kal.", +"Sun." => "Sön.", +"Mon." => "Mån.", +"Tue." => "Tis.", +"Wed." => "Ons.", +"Thu." => "Tor.", +"Fri." => "Fre.", +"Sat." => "Lör.", +"Jan." => "Jan.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Maj.", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Aug.", +"Sep." => "Sep.", +"Oct." => "Okt.", +"Nov." => "Nov.", +"Dec." => "Dec.", "All day" => "Hela dagen", -"New Calendar" => "Ny kalender", "Missing fields" => "Saknade fält", "Title" => "Rubrik", "From Date" => "Från datum", @@ -132,18 +163,17 @@ "Interval" => "Hur ofta", "End" => "Slut", "occurrences" => "Händelser", -"Import a calendar file" => "Importera en kalenderfil", -"Please choose the calendar" => "Välj kalender", "create a new calendar" => "skapa en ny kalender", +"Import a calendar file" => "Importera en kalenderfil", +"Please choose a calendar" => "Välj en kalender", "Name of new calendar" => "Namn på ny kalender", +"Take an available name!" => "Ta ett ledigt namn!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med detta namn finns redan. Om du fortsätter ändå så kommer dessa kalendrar att slås samman.", "Import" => "Importera", -"Importing calendar" => "Importerar kalender", -"Calendar imported successfully" => "Kalender importerades utan problem", "Close Dialog" => "Stäng ", "Create a new event" => "Skapa en ny händelse", "View an event" => "Visa en händelse", "No categories selected" => "Inga kategorier valda", -"Select category" => "Välj kategori", "of" => "av", "at" => "på", "Timezone" => "Tidszon", @@ -152,7 +182,13 @@ "24h" => "24h", "12h" => "12h", "First day of the week" => "Första dagen av veckan", -"Calendar CalDAV syncing address:" => "Synkroniseringsadress för CalDAV kalender:", +"Cache" => "Cache", +"Clear cache for repeating events" => "Töm cache för upprepade händelser", +"Calendar CalDAV syncing addresses" => "Kalender CalDAV synkroniserar adresser", +"more info" => "mer info", +"Primary address (Kontact et al)" => "Primary address (Kontact et al)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Read only iCalendar link(s)", "Users" => "Användare", "select users" => "välj användare", "Editable" => "Redigerbar", diff --git a/apps/calendar/l10n/vi.php b/apps/calendar/l10n/vi.php new file mode 100644 index 00000000000..059b89e1635 --- /dev/null +++ b/apps/calendar/l10n/vi.php @@ -0,0 +1,135 @@ +<?php $TRANSLATIONS = array( +"No calendars found." => "Không tìm thấy lịch.", +"No events found." => "Không tìm thấy sự kiện nào", +"Wrong calendar" => "Sai lịch", +"New Timezone:" => "Múi giờ mới :", +"Timezone changed" => "Thay đổi múi giờ", +"Invalid request" => "Yêu cầu không hợp lệ", +"Calendar" => "Lịch", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", +"Birthday" => "Ngày sinh nhật", +"Business" => "Công việc", +"Call" => "Số điện thoại", +"Clients" => "Máy trạm", +"Holidays" => "Ngày lễ", +"Ideas" => "Ý tưởng", +"Jubilee" => "Lễ kỷ niệm", +"Meeting" => "Hội nghị", +"Other" => "Khác", +"Personal" => "Cá nhân", +"Projects" => "Dự án", +"Questions" => "Câu hỏi", +"Work" => "Công việc", +"New Calendar" => "Lịch mới", +"Does not repeat" => "Không lặp lại", +"Daily" => "Hàng ngày", +"Weekly" => "Hàng tuần", +"Every Weekday" => "Mỗi ngày trong tuần", +"Bi-Weekly" => "Hai tuần một lần", +"Monthly" => "Hàng tháng", +"Yearly" => "Hàng năm", +"never" => "không thay đổi", +"by occurrences" => "bởi xuất hiện", +"by date" => "bởi ngày", +"by monthday" => "bởi ngày trong tháng", +"by weekday" => "bởi ngày trong tuần", +"Monday" => "Thứ 2", +"Tuesday" => "Thứ 3", +"Wednesday" => "Thứ 4", +"Thursday" => "Thứ 5", +"Friday" => "Thứ ", +"Saturday" => "Thứ 7", +"Sunday" => "Chủ nhật", +"events week of month" => "sự kiện trong tuần của tháng", +"first" => "đầu tiên", +"second" => "Thứ hai", +"third" => "Thứ ba", +"fourth" => "Thứ tư", +"fifth" => "Thứ năm", +"January" => "Tháng 1", +"February" => "Tháng 2", +"March" => "Tháng 3", +"April" => "Tháng 4", +"May" => "Tháng 5", +"June" => "Tháng 6", +"July" => "Tháng 7", +"August" => "Tháng 8", +"September" => "Tháng 9", +"October" => "Tháng 10", +"November" => "Tháng 11", +"December" => "Tháng 12", +"by events date" => "Theo ngày tháng sự kiện", +"by weeknumber(s)" => "số tuần", +"by day and month" => "ngày, tháng", +"Date" => "Ngày", +"Cal." => "Cal.", +"All day" => "Tất cả các ngày", +"Title" => "Tiêu đề", +"From Date" => "Từ ngày", +"From Time" => "Từ thời gian", +"To Date" => "Tới ngày", +"To Time" => "Tới thời gian", +"The event ends before it starts" => "Sự kiện này kết thúc trước khi nó bắt đầu", +"Week" => "Tuần", +"Month" => "Tháng", +"List" => "Danh sách", +"Today" => "Hôm nay", +"Calendars" => "Lịch", +"There was a fail, while parsing the file." => "Có một thất bại, trong khi phân tích các tập tin.", +"Choose active calendars" => "Chọn lịch hoạt động", +"Your calendars" => "Lịch của bạn", +"CalDav Link" => "Liên kết CalDav ", +"Shared calendars" => "Chia sẻ lịch", +"No shared calendars" => "Không chia sẻ lcihj", +"Share Calendar" => "Chia sẻ lịch", +"Download" => "Tải về", +"Edit" => "Chỉnh sửa", +"Delete" => "Xóa", +"shared with you by" => "Chia sẻ bởi", +"New calendar" => "Lịch mới", +"Edit calendar" => "sửa Lịch", +"Displayname" => "Hiển thị tên", +"Active" => "Kích hoạt", +"Calendar color" => "Màu lịch", +"Save" => "Lưu", +"Submit" => "Submit", +"Cancel" => "Hủy", +"Edit an event" => "Sửa sự kiện", +"Share" => "Chia sẻ", +"Title of the Event" => "Tên sự kiện", +"Category" => "Danh mục", +"All Day Event" => "Sự kiện trong ngày", +"From" => "Từ", +"To" => "Tới", +"Advanced options" => "Tùy chọn nâng cao", +"Location" => "Nơi", +"Location of the Event" => "Nơi tổ chức sự kiện", +"Description" => "Mô tả", +"Description of the Event" => "Mô tả sự kiện", +"Repeat" => "Lặp lại", +"Advanced" => "Nâng cao", +"Select weekdays" => "Chọn ngày trong tuần", +"Select days" => "Chọn ngày", +"and the events day of year." => "và sự kiện của ngày trong năm", +"and the events day of month." => "và sự kiện của một ngày trong năm", +"Select months" => "Chọn tháng", +"Select weeks" => "Chọn tuần", +"and the events week of year." => "và sự kiện của tuần trong năm.", +"create a new calendar" => "Tạo lịch mới", +"Name of new calendar" => "Tên lịch mới", +"Close Dialog" => "Đóng hộp thoại", +"Create a new event" => "Tạo một sự kiện mới", +"View an event" => "Xem một sự kiện", +"No categories selected" => "Không danh sách nào được chọn", +"of" => "của", +"at" => "tại", +"Timezone" => "Múi giờ", +"Check always for changes of the timezone" => "Luôn kiểm tra múi giờ", +"24h" => "24h", +"12h" => "12h" +); diff --git a/apps/calendar/lib/connector_sabre.php b/apps/calendar/lib/connector_sabre.php index 263fb7ffde5..ac3b26ceb33 100644 --- a/apps/calendar/lib/connector_sabre.php +++ b/apps/calendar/lib/connector_sabre.php @@ -105,6 +105,9 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract { if(!isset($newValues['timezone'])) $newValues['timezone'] = null; if(!isset($newValues['calendarorder'])) $newValues['calendarorder'] = 0; if(!isset($newValues['calendarcolor'])) $newValues['calendarcolor'] = null; + if(!is_null($newValues['calendarcolor']) && strlen($newValues['calendarcolor']) == 9){ + $newValues['calendarcolor'] = substr($newValues['calendarcolor'], 0, 7); + } return OC_Calendar_Calendar::addCalendarFromDAVData($principalUri,$calendarUri,$newValues['displayname'],$newValues['components'],$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']); } @@ -192,7 +195,10 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract { if(!isset($newValues['timezone'])) $newValues['timezone'] = null; if(!isset($newValues['calendarorder'])) $newValues['calendarorder'] = null; if(!isset($newValues['calendarcolor'])) $newValues['calendarcolor'] = null; - + if(!is_null($newValues['calendarcolor']) && strlen($newValues['calendarcolor']) == 9){ + $newValues['calendarcolor'] = substr($newValues['calendarcolor'], 0, 7); + } + OC_Calendar_Calendar::editCalendar($calendarId,$newValues['displayname'],null,$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']); return true; @@ -206,6 +212,10 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract { * @return void */ public function deleteCalendar($calendarId) { + if(preg_match( '=iCal/[1-4]?.*Mac OS X/10.[1-6](.[0-9])?=', $_SERVER['HTTP_USER_AGENT'] )){ + throw new Sabre_DAV_Exception_Forbidden("Action is not possible with OSX 10.6.x", 403); + } + OC_Calendar_Calendar::deleteCalendar($calendarId); } diff --git a/apps/contacts/ajax/currentphoto.php b/apps/contacts/ajax/currentphoto.php index 96080e661ef..c8cccf83a65 100644 --- a/apps/contacts/ajax/currentphoto.php +++ b/apps/contacts/ajax/currentphoto.php @@ -20,8 +20,6 @@ * */ -// Firefox and Konqueror tries to download application/json for me. --Arthur -OCP\JSON::setContentTypeHeader('text/plain'); OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('contacts'); require_once 'loghandler.php'; diff --git a/apps/contacts/ajax/savecrop.php b/apps/contacts/ajax/savecrop.php index 8ee2e46bf0c..07de138757d 100644 --- a/apps/contacts/ajax/savecrop.php +++ b/apps/contacts/ajax/savecrop.php @@ -24,9 +24,6 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('contacts'); OCP\JSON::callCheck(); -// Firefox and Konqueror tries to download application/json for me. --Arthur -OCP\JSON::setContentTypeHeader('text/plain'); - require_once 'loghandler.php'; $image = null; diff --git a/apps/contacts/ajax/uploadphoto.php b/apps/contacts/ajax/uploadphoto.php index 4cd38db8c72..63abeb1fee1 100644 --- a/apps/contacts/ajax/uploadphoto.php +++ b/apps/contacts/ajax/uploadphoto.php @@ -25,8 +25,6 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('contacts'); OCP\JSON::callCheck(); -// Firefox and Konqueror tries to download application/json for me. --Arthur -OCP\JSON::setContentTypeHeader('text/plain'); require_once 'loghandler.php'; $l10n = OC_Contacts_App::$l10n; // If it is a Drag'n'Drop transfer it's handled here. diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js index 4c6c8bf3d93..34961360eea 100644 --- a/apps/contacts/js/contacts.js +++ b/apps/contacts/js/contacts.js @@ -14,17 +14,28 @@ Contacts={ UI:{ /** * Arguments: - * message: The text message to show. The only mandatory parameter. + * message: The text message to show. * timeout: The timeout in seconds before the notification disappears. Default 10. * timeouthandler: A function to run on timeout. * clickhandler: A function to run on click. If a timeouthandler is given it will be cancelled. * data: An object that will be passed as argument to the timeouthandler and clickhandler functions. + * cancel: If set cancel all ongoing timer events and hide the notification. */ notify:function(params) { self = this; if(!self.notifier) { self.notifier = $('#notification'); } + if(params.cancel) { + self.notifier.off('click'); + for(var id in self.notifier.data()) { + if($.isNumeric(id)) { + clearTimeout(parseInt(id)); + } + } + self.notifier.text('').fadeOut().removeData(); + return; + } self.notifier.text(params.message); self.notifier.fadeIn(); self.notifier.on('click', function() { $(this).fadeOut();}); @@ -460,6 +471,11 @@ Contacts={ } $('#rightcontent').data('id', newid); + Contacts.UI.Contacts.deletionQueue.push(this.id); + if(!window.onbeforeunload) { + window.onbeforeunload = Contacts.UI.Contacts.warnNotDeleted; + } + with(this) { delete id; delete fn; delete fullname; delete shortname; delete famname; delete givname; delete addname; delete honpre; delete honsuf; delete data; @@ -483,7 +499,7 @@ Contacts={ data:curlistitem, message:t('contacts','Click to undo deletion of "') + curlistitem.find('a').text() + '"', timeouthandler:function(contact) { - Contacts.UI.Card.doDelete(contact.data('id')); + Contacts.UI.Card.doDelete(contact.data('id'), true); delete contact; }, clickhandler:function(contact) { @@ -492,13 +508,21 @@ Contacts={ } }); }, - doDelete:function(id) { + doDelete:function(id, removeFromQueue) { + if(Contacts.UI.Contacts.deletionQueue.indexOf(id) == -1 && removeFromQueue) { + return; + } $.post(OC.filePath('contacts', 'ajax', 'deletecard.php'),{'id':id},function(jsondata) { if(jsondata.status == 'error'){ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error')); } + if(removeFromQueue) { + Contacts.UI.Contacts.deletionQueue.splice(Contacts.UI.Contacts.deletionQueue.indexOf(id), 1); + } + if(Contacts.UI.Contacts.deletionQueue.length == 0) { + window.onbeforeunload = null; + } }); - return false; }, loadContact:function(jsondata, bookid){ this.data = jsondata; @@ -1477,7 +1501,31 @@ Contacts={ }, Contacts:{ contacts:{}, + deletionQueue:[], batchnum:50, + warnNotDeleted:function(e) { + e = e || window.event; + var warn = t('contacts', 'Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted.'); + if (e) { + e.returnValue = String(warn); + } + if(Contacts.UI.Contacts.deletionQueue.length > 0) { + setTimeout(Contacts.UI.Contacts.deleteFilesInQueue, 1); + } + return warn; + }, + deleteFilesInQueue:function() { + var queue = Contacts.UI.Contacts.deletionQueue; + if(queue.length > 0) { + Contacts.UI.notify({cancel:true}); + while(queue.length > 0) { + var id = queue.pop(); + if(id) { + Contacts.UI.Card.doDelete(id, false); + } + } + } + }, getContact:function(id) { if(!this.contacts[id]) { this.contacts[id] = $('#contacts li[data-id="'+id+'"]'); @@ -1774,7 +1822,9 @@ $(document).ready(function(){ }); - // Load a contact. + //$(window).on('beforeunload', Contacts.UI.Contacts.deleteFilesInQueue); + + // Load a contact. $('.contacts').keydown(function(event) { if(event.which == 13 || event.which == 32) { $('.contacts').click(); diff --git a/apps/contacts/l10n/ca.php b/apps/contacts/l10n/ca.php index 0c95b83d5eb..256182f02cd 100644 --- a/apps/contacts/l10n/ca.php +++ b/apps/contacts/l10n/ca.php @@ -1,10 +1,13 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Error en (des)activar la llibreta d'adreces.", "There was an error adding the contact." => "S'ha produït un error en afegir el contacte.", +"element name is not set." => "no s'ha establert el nom de l'element.", +"id is not set." => "no s'ha establert la id.", +"Could not parse contact: " => "No s'ha pogut processar el contacte:", "Cannot add empty property." => "No es pot afegir una propietat buida.", "At least one of the address fields has to be filled out." => "Almenys heu d'omplir un dels camps d'adreça.", "Trying to add duplicate property: " => "Esteu intentant afegir una propietat duplicada:", -"Error adding contact property." => "Error en afegir la propietat del contacte.", +"Error adding contact property: " => "Error en afegir la propietat del contacte:", "No ID provided" => "No heu facilitat cap ID", "Error setting checksum." => "Error en establir la suma de verificació.", "No categories selected for deletion." => "No heu seleccionat les categories a eliminar.", @@ -12,22 +15,23 @@ "No contacts found." => "No s'han trobat contactes.", "Missing ID" => "Falta la ID", "Error parsing VCard for ID: \"" => "Error en analitzar la ID de la VCard: \"", -"Cannot add addressbook with an empty name." => "No es pot afegir una llibreta d'adreces amb un nom buit.", -"Error adding addressbook." => "Error en afegir la llibreta d'adreces.", -"Error activating addressbook." => "Error en activar la llibreta d'adreces.", "No contact ID was submitted." => "No s'ha tramès cap ID de contacte.", "Error reading contact photo." => "Error en llegir la foto del contacte.", "Error saving temporary file." => "Error en desar el fitxer temporal.", "The loading photo is not valid." => "La foto carregada no és vàlida.", -"id is not set." => "no s'ha establert la id.", "Information about vCard is incorrect. Please reload the page." => "La informació de la vCard és incorrecta. Carregueu la pàgina de nou.", "Error deleting contact property." => "Error en eliminar la propietat del contacte.", "Contact ID is missing." => "falta la ID del contacte.", -"Missing contact id." => "Falta la id del contacte.", "No photo path was submitted." => "No heu tramès el camí de la foto.", "File doesn't exist:" => "El fitxer no existeix:", "Error loading image." => "Error en carregar la imatge.", -"element name is not set." => "no s'ha establert el nom de l'element.", +"Error getting contact object." => "Error en obtenir l'objecte contacte.", +"Error getting PHOTO property." => "Error en obtenir la propietat PHOTO.", +"Error saving contact." => "Error en desar el contacte.", +"Error resizing image" => "Error en modificar la mida de la imatge", +"Error cropping image" => "Error en retallar la imatge", +"Error creating temporary image" => "Error en crear la imatge temporal", +"Error finding image: " => "Error en trobar la imatge:", "checksum is not set." => "no s'ha establert la suma de verificació.", "Information about vCard is incorrect. Please reload the page: " => "La informació de la vCard és incorrecta. Carregueu de nou la pàgina:", "Something went FUBAR. " => "Alguna cosa ha anat FUBAR.", @@ -41,8 +45,27 @@ "The uploaded file was only partially uploaded" => "El fitxer només s'ha carregat parcialment", "No file was uploaded" => "No s'ha carregat cap fitxer", "Missing a temporary folder" => "Falta un fitxer temporal", +"Couldn't save temporary image: " => "No s'ha pogut desar la imatge temporal: ", +"Couldn't load temporary image: " => "No s'ha pogut carregar la imatge temporal: ", +"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut", "Contacts" => "Contactes", -"Drop a VCF file to import contacts." => "Elimina un fitxer VCF per importar contactes.", +"Sorry, this functionality has not been implemented yet" => "Aquesta funcionalitat encara no està implementada", +"Not implemented" => "No implementada", +"Couldn't get a valid address." => "No s'ha pogut obtenir una adreça vàlida.", +"Error" => "Error", +"Contact" => "Contacte", +"New" => "Nou", +"New Contact" => "Contate nou", +"This property has to be non-empty." => "Aquesta propietat no pot ser buida.", +"Couldn't serialize elements." => "No s'han pogut serialitzar els elements.", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' s'ha cridat sense argument de tipus. Informeu-ne a bugs.owncloud.org", +"Edit name" => "Edita el nom", +"No files selected for upload." => "No s'han seleccionat fitxers per a la pujada.", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "El fitxer que intenteu pujar excedeix la mida màxima de pujada en aquest servidor.", +"Select type" => "Seleccioneu un tipus", +"Result: " => "Resultat: ", +" imported, " => " importat, ", +" failed." => " fallada.", "Addressbook not found." => "No s'ha trobat la llibreta d'adreces.", "This is not your addressbook." => "Aquesta no és la vostra llibreta d'adreces", "Contact could not be found." => "No s'ha trobat el contacte.", @@ -60,25 +83,54 @@ "Video" => "Vídeo", "Pager" => "Paginador", "Internet" => "Internet", +"Birthday" => "Aniversari", +"Business" => "Negocis", +"Call" => "Trucada", +"Clients" => "Clients", +"Deliverer" => "Emissari", +"Holidays" => "Vacances", +"Ideas" => "Idees", +"Journey" => "Viatge", +"Jubilee" => "Aniversari", +"Meeting" => "Reunió", +"Other" => "Altres", +"Personal" => "Personal", +"Projects" => "Projectes", +"Questions" => "Preguntes", "{name}'s Birthday" => "Aniversari de {name}", -"Contact" => "Contacte", "Add Contact" => "Afegeix un contacte", +"Import" => "Importa", "Addressbooks" => "Llibretes d'adreces", +"Close" => "Tanca", +"Keyboard shortcuts" => "Dreceres de teclat", +"Navigation" => "Navegació", +"Next contact in list" => "Següent contacte de la llista", +"Previous contact in list" => "Contacte anterior de la llista", +"Expand/collapse current addressbook" => "Expandeix/col·lapsa la llibreta d'adreces", +"Next/previous addressbook" => "Següent/anterior llibreta d'adreces", +"Actions" => "Accions", +"Refresh contacts list" => "Carrega de nou la llista de contactes", +"Add new contact" => "Afegeix un contacte nou", +"Add new addressbook" => "Afegeix una llibreta d'adreces nova", +"Delete current contact" => "Esborra el contacte", "Configure Address Books" => "Configura les llibretes d'adreces", "New Address Book" => "Nova llibreta d'adreces", -"Import from VCF" => "Importa de VFC", "CardDav Link" => "Enllaç CardDav", "Download" => "Baixa", "Edit" => "Edita", "Delete" => "Suprimeix", -"Download contact" => "Baixa el contacte", -"Delete contact" => "Suprimeix el contacte", "Drop photo to upload" => "Elimina la foto a carregar", +"Delete current photo" => "Elimina la foto actual", +"Edit current photo" => "Edita la foto actual", +"Upload new photo" => "Carrega una foto nova", +"Select photo from ownCloud" => "Selecciona una foto de ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format personalitzat, Nom curt, Nom sencer, Invertit o Invertit amb coma", "Edit name details" => "Edita detalls del nom", "Nickname" => "Sobrenom", "Enter nickname" => "Escriviu el sobrenom", -"Birthday" => "Aniversari", +"Web site" => "Adreça web", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Vés a la web", "dd-mm-yyyy" => "dd-mm-yyyy", "Groups" => "Grups", "Separate groups with commas" => "Separeu els grups amb comes", @@ -94,24 +146,24 @@ "Edit address details" => "Edita els detalls de l'adreça", "Add notes here." => "Afegiu notes aquí.", "Add field" => "Afegeix un camp", -"Profile picture" => "Foto de perfil", "Phone" => "Telèfon", "Note" => "Nota", -"Delete current photo" => "Elimina la foto actual", -"Edit current photo" => "Edita la foto actual", -"Upload new photo" => "Carrega una foto nova", -"Select photo from ownCloud" => "Selecciona una foto de ownCloud", +"Download contact" => "Baixa el contacte", +"Delete contact" => "Suprimeix el contacte", +"The temporary image has been removed from cache." => "La imatge temporal ha estat eliminada de la memòria de cau.", "Edit address" => "Edita l'adreça", "Type" => "Tipus", "PO Box" => "Adreça postal", +"Street address" => "Adreça", +"Street and number" => "Carrer i número", "Extended" => "Addicional", -"Street" => "Carrer", +"Apartment number etc." => "Número d'apartament, etc.", "City" => "Ciutat", "Region" => "Comarca", +"E.g. state or province" => "p. ex. Estat o província ", "Zipcode" => "Codi postal", +"Postal code" => "Codi postal", "Country" => "País", -"Edit categories" => "Edita categories", -"Add" => "Afegeix", "Addressbook" => "Llibreta d'adreces", "Hon. prefixes" => "Prefix honorífic:", "Miss" => "Srta", @@ -143,15 +195,16 @@ "Please choose the addressbook" => "Escolliu la llibreta d'adreces", "create a new addressbook" => "crea una llibreta d'adreces nova", "Name of new addressbook" => "Nom de la nova llibreta d'adreces", -"Import" => "Importa", "Importing contacts" => "S'estan important contactes", -"Select address book to import to:" => "Seleccioneu la llibreta d'adreces a la que voleu importar:", -"Select from HD" => "Selecciona de HD", "You have no contacts in your addressbook." => "No teniu contactes a la llibreta d'adreces.", "Add contact" => "Afegeix un contacte", "Configure addressbooks" => "Configura les llibretes d'adreces", +"Select Address Books" => "Selecccioneu llibretes d'adreces", +"Enter name" => "Escriviu un nom", +"Enter description" => "Escriviu una descripció", "CardDAV syncing addresses" => "Adreces de sincronització CardDAV", "more info" => "més informació", "Primary address (Kontact et al)" => "Adreça primària (Kontact i al)", -"iOS/OS X" => "iOS/OS X" +"iOS/OS X" => "iOS/OS X", +"Read only vCard directory link(s)" => "Enllaç(os) vCard només de lectura" ); diff --git a/apps/contacts/l10n/de.php b/apps/contacts/l10n/de.php index 3a1013eb4fc..b76c5ce0716 100644 --- a/apps/contacts/l10n/de.php +++ b/apps/contacts/l10n/de.php @@ -1,10 +1,13 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "(De-)Aktivierung des Adressbuches fehlgeschlagen", "There was an error adding the contact." => "Erstellen des Kontakts fehlgeschlagen", +"element name is not set." => "Kein Name für das Element angegeben.", +"id is not set." => "ID ist nicht angegeben.", +"Could not parse contact: " => "Konnte folgenden Kontakt nicht verarbeiten:", "Cannot add empty property." => "Feld darf nicht leer sein.", "At least one of the address fields has to be filled out." => "Mindestens eines der Adressfelder muss ausgefüllt werden.", "Trying to add duplicate property: " => "Versuche, doppelte Eigenschaft hinzuzufügen: ", -"Error adding contact property." => "Kontakt ändern fehlgeschlagen", +"Error adding contact property: " => "Fehler beim Hinzufügen der Kontakteigenschaft:", "No ID provided" => "Keine ID angegeben", "Error setting checksum." => "Fehler beim Setzen der Prüfsumme.", "No categories selected for deletion." => "Keine Kategorien zum Löschen ausgewählt.", @@ -12,22 +15,23 @@ "No contacts found." => "Keine Kontakte gefunden.", "Missing ID" => "Fehlende ID", "Error parsing VCard for ID: \"" => "Fehler beim Einlesen der VCard für die ID: \"", -"Cannot add addressbook with an empty name." => "Bitte einen Namen für das Adressbuch angeben.", -"Error adding addressbook." => "Adressbuch hinzufügen fehlgeschlagen", -"Error activating addressbook." => "Adressbuchaktivierung fehlgeschlagen", "No contact ID was submitted." => "Es wurde keine Kontakt-ID übermittelt.", -"Error reading contact photo." => "Fehler beim auslesen des Kontaktfotos.", +"Error reading contact photo." => "Fehler beim Auslesen des Kontaktfotos.", "Error saving temporary file." => "Fehler beim Speichern der temporären Datei.", "The loading photo is not valid." => "Das Kontaktfoto ist fehlerhaft.", -"id is not set." => "ID ist nicht angegeben.", "Information about vCard is incorrect. Please reload the page." => "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite.", "Error deleting contact property." => "Kontakteigenschaft löschen fehlgeschlagen", "Contact ID is missing." => "Keine Kontakt-ID angegeben.", -"Missing contact id." => "Fehlende Kontakt-ID.", "No photo path was submitted." => "Kein Foto-Pfad übermittelt.", "File doesn't exist:" => "Datei existiert nicht: ", "Error loading image." => "Fehler beim Laden des Bildes.", -"element name is not set." => "Kein Name für das Element angegeben.", +"Error getting contact object." => "Fehler beim Abruf des Kontakt-Objektes.", +"Error getting PHOTO property." => "Fehler beim Abrufen der PHOTO Eigenschaft.", +"Error saving contact." => "Fehler beim Speichern des Kontaktes", +"Error resizing image" => "Fehler bei der Größenänderung des Bildes", +"Error cropping image" => "Fehler beim Zuschneiden des Bildes", +"Error creating temporary image" => "Fehler beim erstellen des temporären Bildes", +"Error finding image: " => "Fehler beim Suchen des Bildes: ", "checksum is not set." => "Keine Prüfsumme angegeben.", "Information about vCard is incorrect. Please reload the page: " => "Die Informationen zur vCard sind fehlerhaft. Bitte Seite neu laden: ", "Something went FUBAR. " => "Irgendwas ist hier so richtig schief gelaufen. ", @@ -41,14 +45,33 @@ "The uploaded file was only partially uploaded" => "Datei konnte nur teilweise übertragen werden", "No file was uploaded" => "Keine Datei konnte übertragen werden.", "Missing a temporary folder" => "Kein temporärer Ordner vorhanden", +"Couldn't save temporary image: " => "Konnte das temporäre Bild nicht speichern:", +"Couldn't load temporary image: " => "Konnte das temporäre Bild nicht laden:", +"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "Contacts" => "Kontakte", -"Drop a VCF file to import contacts." => "Zieh' eine VCF Datei hierher zum Kontaktimport", +"Sorry, this functionality has not been implemented yet" => "Diese Funktion steht leider noch nicht zur Verfügung", +"Not implemented" => "Nicht Verfügbar", +"Couldn't get a valid address." => "Konnte keine gültige Adresse abrufen", +"Error" => "Fehler", +"Contact" => "Kontakt", +"New" => "Neu", +"New Contact" => "Neuer Kontakt", +"This property has to be non-empty." => "Dieses Feld darf nicht Leer sein.", +"Couldn't serialize elements." => "Konnte Elemente nicht serialisieren", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' wurde ohne Argumente aufgerufen, bitte Melde dies auf bugs.owncloud.org", +"Edit name" => "Name ändern", +"No files selected for upload." => "Keine Datei(en) zum Hochladen ausgewählt", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei, die Sie versuchen hochzuladen, überschreitet die maximale Größe für Datei-Uploads auf diesem Server.", +"Select type" => "Wähle Typ", +"Result: " => "Ergebnis: ", +" imported, " => " importiert, ", +" failed." => " fehlgeschlagen.", "Addressbook not found." => "Adressbuch nicht gefunden.", "This is not your addressbook." => "Dies ist nicht dein Adressbuch.", "Contact could not be found." => "Kontakt konnte nicht gefunden werden.", "Address" => "Adresse", "Telephone" => "Telefon", -"Email" => "Email", +"Email" => "E-Mail", "Organization" => "Organisation", "Work" => "Arbeit", "Home" => "Zuhause", @@ -60,28 +83,57 @@ "Video" => "Video", "Pager" => "Pager", "Internet" => "Internet", +"Birthday" => "Geburtstag", +"Business" => "Geschäftlich", +"Call" => "Anruf", +"Clients" => "Kunden", +"Deliverer" => "Lieferant", +"Holidays" => "Feiertage", +"Ideas" => "Ideen", +"Journey" => "Reise", +"Jubilee" => "Jubiläum", +"Meeting" => "Besprechung", +"Other" => "Andere", +"Personal" => "Persönlich", +"Projects" => "Projekte", +"Questions" => "Fragen", "{name}'s Birthday" => "Geburtstag von {name}", -"Contact" => "Kontakt", "Add Contact" => "Kontakt hinzufügen", +"Import" => "Importieren", "Addressbooks" => "Adressbücher", +"Close" => "Schließen", +"Keyboard shortcuts" => "Tastaturbefehle", +"Navigation" => "Navigation", +"Next contact in list" => "Nächster Kontakt aus der Liste", +"Previous contact in list" => "Vorheriger Kontakt aus der Liste", +"Expand/collapse current addressbook" => "Ausklappen/Einklappen des Adressbuches", +"Next/previous addressbook" => "Nächstes/Vorhergehendes Adressbuch", +"Actions" => "Aktionen", +"Refresh contacts list" => "Kontaktliste neu laden", +"Add new contact" => "Neuen Kontakt hinzufügen", +"Add new addressbook" => "Neues Adressbuch hinzufügen", +"Delete current contact" => "Aktuellen Kontakt löschen", "Configure Address Books" => "Adressbücher konfigurieren", "New Address Book" => "Neues Adressbuch", -"Import from VCF" => "Import von VCF Datei", -"CardDav Link" => "CardDav Link", +"CardDav Link" => "CardDav-Link", "Download" => "Herunterladen", "Edit" => "Bearbeiten", "Delete" => "Löschen", -"Download contact" => "Kontakt herunterladen", -"Delete contact" => "Kontakt löschen", -"Drop photo to upload" => "Zieh' ein Foto hierher zum hochladen", -"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts order Rückwärts mit Komma", -"Edit name details" => "Namen ändern", +"Drop photo to upload" => "Zieh' ein Foto hierher zum Hochladen", +"Delete current photo" => "Derzeitiges Foto löschen", +"Edit current photo" => "Foto ändern", +"Upload new photo" => "Neues Foto hochladen", +"Select photo from ownCloud" => "Foto aus ownCloud auswählen", +"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts oder Rückwärts mit Komma", +"Edit name details" => "Name ändern", "Nickname" => "Spitzname", -"Enter nickname" => "Spitznamen angeben", -"Birthday" => "Geburtstag", -"dd-mm-yyyy" => "TT-MM-JJJJ", +"Enter nickname" => "Spitzname angeben", +"Web site" => "Webseite", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Webseite aufrufen", +"dd-mm-yyyy" => "dd.mm.yyyy", "Groups" => "Gruppen", -"Separate groups with commas" => "Gruppen mit Komma trennt", +"Separate groups with commas" => "Gruppen mit Komma getrennt", "Edit groups" => "Gruppen editieren", "Preferred" => "Bevorzugt", "Please specify a valid email address." => "Bitte eine gültige E-Mail-Adresse angeben.", @@ -94,24 +146,24 @@ "Edit address details" => "Adressinformationen ändern", "Add notes here." => "Füge hier Notizen ein.", "Add field" => "Feld hinzufügen", -"Profile picture" => "Profil Bild", "Phone" => "Telefon", "Note" => "Notiz", -"Delete current photo" => "Derzeitiges Foto löschen", -"Edit current photo" => "Foto ändern", -"Upload new photo" => "Neues Foto hochladen", -"Select photo from ownCloud" => "Foto aus ownCloud auswählen", +"Download contact" => "Kontakt herunterladen", +"Delete contact" => "Kontakt löschen", +"The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.", "Edit address" => "Adresse ändern", "Type" => "Typ", "PO Box" => "Postfach", +"Street address" => "Straßenanschrift", +"Street and number" => "Straße und Nummer", "Extended" => "Erweitert", -"Street" => "Straße", +"Apartment number etc." => "Wohnungsnummer usw.", "City" => "Stadt", "Region" => "Region", +"E.g. state or province" => "Z.B. Staat oder Bezirk", "Zipcode" => "Postleitzahl", +"Postal code" => "PLZ", "Country" => "Land", -"Edit categories" => "Kategorie ändern", -"Add" => "Hinzufügen", "Addressbook" => "Adressbuch", "Hon. prefixes" => "Höflichkeitspräfixe", "Miss" => "Frau", @@ -143,15 +195,16 @@ "Please choose the addressbook" => "Bitte Adressbuch auswählen", "create a new addressbook" => "Neues Adressbuch erstellen", "Name of new addressbook" => "Name des neuen Adressbuchs", -"Import" => "Importieren", "Importing contacts" => "Kontakte werden importiert", -"Select address book to import to:" => "Adressbuch, in das importiert werden soll", -"Select from HD" => "Von der Festplatte auswählen", "You have no contacts in your addressbook." => "Du hast keine Kontakte im Adressbuch.", "Add contact" => "Kontakt hinzufügen", "Configure addressbooks" => "Adressbücher konfigurieren", +"Select Address Books" => "Wähle Adressbuch", +"Enter name" => "Name eingeben", +"Enter description" => "Beschreibung eingeben", "CardDAV syncing addresses" => "CardDAV Sync-Adressen", "more info" => "mehr Info", "Primary address (Kontact et al)" => "primäre Adresse (für Kontact o.ä. Programme)", -"iOS/OS X" => "iOS/OS X" +"iOS/OS X" => "iOS/OS X", +"Read only vCard directory link(s)" => "Nur lesende(r) vCalender-Verzeichnis-Link(s)" ); diff --git a/apps/contacts/l10n/el.php b/apps/contacts/l10n/el.php index f015f0ca363..c67f27ab2aa 100644 --- a/apps/contacts/l10n/el.php +++ b/apps/contacts/l10n/el.php @@ -1,36 +1,40 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Σφάλμα (απ)ενεργοποίησης βιβλίου διευθύνσεων", "There was an error adding the contact." => "Σφάλμα κατά την προσθήκη επαφής.", +"element name is not set." => "δεν ορίστηκε όνομα στοιχείου", +"id is not set." => "δεν ορίστηκε id", +"Could not parse contact: " => "Δε αναγνώστηκε η επαφή", "Cannot add empty property." => "Αδύνατη προσθήκη κενής ιδιότητας.", "At least one of the address fields has to be filled out." => "Πρέπει να συμπληρωθεί τουλάχιστον ένα από τα παιδία διεύθυνσης.", "Trying to add duplicate property: " => "Προσπάθεια προσθήκης διπλότυπης ιδιότητας:", -"Error adding contact property." => "Σφάλμα προσθήκης ιδιότητας επαφής.", -"No ID provided" => "Δε δώθηκε ID", +"Error adding contact property: " => "Σφάλμα στη προσθήκη ιδιότητας επαφής", +"No ID provided" => "Δε δόθηκε ID", "Error setting checksum." => "Λάθος κατά τον ορισμό checksum ", "No categories selected for deletion." => "Δε επελέγησαν κατηγορίες για διαγραφή", "No address books found." => "Δε βρέθηκε βιβλίο διευθύνσεων", "No contacts found." => "Δεν βρέθηκαν επαφές", "Missing ID" => "Λείπει ID", "Error parsing VCard for ID: \"" => "Σφάλμα κατά την ανάγνωση του VCard για το ID:\"", -"Cannot add addressbook with an empty name." => "Δε μπορεί να προστεθεί βιβλίο διευθύνσεων με κενό όνομα", -"Error adding addressbook." => "Σφάλμα προσθήκης βιβλίου διευθύνσεων.", -"Error activating addressbook." => "Σφάλμα ενεργοποίησης βιβλίου διευθύνσεων", "No contact ID was submitted." => "Δε υπεβλήθει ID επαφής", "Error reading contact photo." => "Σφάλμα ανάγνωσης εικόνας επαφής", "Error saving temporary file." => "Σφάλμα αποθήκευσης προσωρινού αρχείου", "The loading photo is not valid." => "Η φορτωμένη φωτογραφία δεν είναι έγκυρη", -"id is not set." => "δεν ορίστηκε id", "Information about vCard is incorrect. Please reload the page." => "Οι πληροφορίες σχετικά με vCard είναι εσφαλμένες. Παρακαλώ επαναφορτώστε τη σελίδα.", "Error deleting contact property." => "Σφάλμα διαγραφής ιδιότητας επαφής.", "Contact ID is missing." => "Λείπει ID επαφής", -"Missing contact id." => "Απουσιαζει ID επαφής", "No photo path was submitted." => "Δε δόθηκε διαδρομή εικόνας", "File doesn't exist:" => "Το αρχείο δεν υπάρχει:", "Error loading image." => "Σφάλμα φόρτωσης εικόνας", -"element name is not set." => "δεν ορίστηκε όνομα στοιχείου", +"Error getting contact object." => "Σφάλμα κατά τη λήψη αντικειμένου επαφής", +"Error getting PHOTO property." => "Σφάλμα κατά τη λήψη ιδιοτήτων ΦΩΤΟΓΡΑΦΙΑΣ.", +"Error saving contact." => "Σφάλμα κατά την αποθήκευση επαφής.", +"Error resizing image" => "Σφάλμα κατά την αλλαγή μεγέθους εικόνας", +"Error cropping image" => "Σφάλμα κατά την περικοπή εικόνας", +"Error creating temporary image" => "Σφάλμα κατά την δημιουργία προσωρινής εικόνας", +"Error finding image: " => "Σφάλμα κατά την εύρεση της εικόνας: ", "checksum is not set." => "δε ορίστηκε checksum ", -"Information about vCard is incorrect. Please reload the page: " => "Οι πληροφορίες για τη vCard είναι λανθασμένες.Παρακαλώ ξαναφορτώστε τη σελίδα:", -"Something went FUBAR. " => "Κάτι χάθηκε στο άγνωστο", +"Information about vCard is incorrect. Please reload the page: " => "Οι πληροφορίες για τη vCard είναι λανθασμένες.Παρακαλώ ξαναφορτώστε τη σελίδα: ", +"Something went FUBAR. " => "Κάτι χάθηκε στο άγνωστο. ", "Error updating contact property." => "Σφάλμα ενημέρωσης ιδιότητας επαφής.", "Cannot update addressbook with an empty name." => "Δε μπορεί να γίνει αλλαγή βιβλίου διευθύνσεων χωρίς όνομα", "Error updating addressbook." => "Σφάλμα ενημέρωσης βιβλίου διευθύνσεων.", @@ -41,8 +45,27 @@ "The uploaded file was only partially uploaded" => "Το αρχείο ανέβηκε μερικώς", "No file was uploaded" => "Δεν ανέβηκε κάποιο αρχείο", "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος", +"Couldn't save temporary image: " => "Δεν ήταν δυνατή η αποθήκευση της προσωρινής εικόνας: ", +"Couldn't load temporary image: " => "Δεν ήταν δυνατή η φόρτωση της προσωρινής εικόνας: ", +"No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα", "Contacts" => "Επαφές", -"Drop a VCF file to import contacts." => "Εισάγεται ένα VCF αρχείο για εισαγωγή επαφών", +"Sorry, this functionality has not been implemented yet" => "Λυπούμαστε, αυτή η λειτουργία δεν έχει υλοποιηθεί ακόμα", +"Not implemented" => "Δεν έχει υλοποιηθεί", +"Couldn't get a valid address." => "Αδυναμία λήψης έγκυρης διεύθυνσης", +"Error" => "Σφάλμα", +"Contact" => "Επαφή", +"New" => "Νέο", +"New Contact" => "Νέα επαφή", +"This property has to be non-empty." => "Το πεδίο δεν πρέπει να είναι άδειο.", +"Couldn't serialize elements." => "Αδύνατο να μπουν σε σειρά τα στοιχεία", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "το 'deleteProperty' καλέστηκε χωρίς without type argument. Παρακαλώ αναφέρατε στο bugs.owncloud.org", +"Edit name" => "Αλλαγή ονόματος", +"No files selected for upload." => "Δεν επιλέχτηκαν αρχεία για μεταφόρτωση", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Το αρχείο που προσπαθείτε να ανεβάσετε υπερβαίνει το μέγιστο μέγεθος για τις προσθήκες αρχείων σε αυτόν τον server.", +"Select type" => "Επιλογή τύπου", +"Result: " => "Αποτέλεσμα: ", +" imported, " => " εισάγεται,", +" failed." => " απέτυχε.", "Addressbook not found." => "Δε βρέθηκε βιβλίο διευθύνσεων", "This is not your addressbook." => "Αυτό δεν είναι το βιβλίο διευθύνσεων σας.", "Contact could not be found." => "Η επαφή δεν μπόρεσε να βρεθεί.", @@ -55,30 +78,59 @@ "Mobile" => "Κινητό", "Text" => "Κείμενο", "Voice" => "Ομιλία", -"Message" => "Μήνυμα ", +"Message" => "Μήνυμα", "Fax" => "Φαξ", "Video" => "Βίντεο", "Pager" => "Βομβητής", "Internet" => "Διαδίκτυο", +"Birthday" => "Γενέθλια", +"Business" => "Επιχείρηση", +"Call" => "Κάλεσε", +"Clients" => "Πελάτες", +"Deliverer" => "Προμηθευτής", +"Holidays" => "Διακοπές", +"Ideas" => "Ιδέες", +"Journey" => "Ταξίδι", +"Jubilee" => "Ιωβηλαίο", +"Meeting" => "Συνάντηση", +"Other" => "Άλλο", +"Personal" => "Προσωπικό", +"Projects" => "Έργα", +"Questions" => "Ερωτήσεις", "{name}'s Birthday" => "{name} έχει Γενέθλια", -"Contact" => "Επαφή", "Add Contact" => "Προσθήκη επαφής", +"Import" => "Εισαγωγή", "Addressbooks" => "Βιβλία διευθύνσεων", +"Close" => "Κλείσιμο ", +"Keyboard shortcuts" => "Συντομεύσεις πλητρολογίου", +"Navigation" => "Πλοήγηση", +"Next contact in list" => "Επόμενη επαφή στη λίστα", +"Previous contact in list" => "Προηγούμενη επαφή στη λίστα", +"Expand/collapse current addressbook" => "Ανάπτυξη/σύμπτυξη τρέχοντος βιβλίου διευθύνσεων", +"Next/previous addressbook" => "Επόμενο/προηγούμενο βιβλίο διευθύνσεων", +"Actions" => "Ενέργειες", +"Refresh contacts list" => "Ανανέωσε τη λίστα επαφών", +"Add new contact" => "Προσθήκη νέας επαφής", +"Add new addressbook" => "Προσθήκη νέου βιβλίου επαφών", +"Delete current contact" => "Διαγραφή τρέχουσας επαφής", "Configure Address Books" => "Ρυθμίστε το βιβλίο διευθύνσεων ", "New Address Book" => "Νέο βιβλίο διευθύνσεων", -"Import from VCF" => "Εισαγωγή από VCF αρχείο", "CardDav Link" => "Σύνδεσμος CardDav", "Download" => "Λήψη", "Edit" => "Επεξεργασία", "Delete" => "Διαγραφή", -"Download contact" => "Λήψη επαφής", -"Delete contact" => "Διαγραφή επαφής", "Drop photo to upload" => "Ρίξε μια φωτογραφία για ανέβασμα", +"Delete current photo" => "Διαγραφή τρέχουσας φωτογραφίας", +"Edit current photo" => "Επεξεργασία τρέχουσας φωτογραφίας", +"Upload new photo" => "Ανέβασε νέα φωτογραφία", +"Select photo from ownCloud" => "Επέλεξε φωτογραφία από το ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Όνομα, Επώνυμο, Αντίστροφο ή Αντίστροφο με κόμμα", "Edit name details" => "Αλλάξτε τις λεπτομέρειες ονόματος", "Nickname" => "Παρατσούκλι", -"Enter nickname" => "Εισάγεται παρατσούκλι", -"Birthday" => "Γενέθλια", +"Enter nickname" => "Εισάγετε παρατσούκλι", +"Web site" => "Ιστότοπος", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Πήγαινε στον ιστότοπο", "dd-mm-yyyy" => "ΗΗ-ΜΜ-ΕΕΕΕ", "Groups" => "Ομάδες", "Separate groups with commas" => "Διαχώρισε τις ομάδες με κόμμα ", @@ -94,24 +146,24 @@ "Edit address details" => "Επεξεργασία λεπτομερειών διεύθυνσης", "Add notes here." => "Πρόσθεσε τις σημειώσεις εδώ", "Add field" => "Προσθήκη πεδίου", -"Profile picture" => "Φωτογραφία προφίλ", "Phone" => "Τηλέφωνο", "Note" => "Σημείωση", -"Delete current photo" => "Διαγραφή τρέχουσας φωτογραφίας", -"Edit current photo" => "Επεξεργασία τρέχουσας φωτογραφίας", -"Upload new photo" => "Ανέβασε νέα φωτογραφία", -"Select photo from ownCloud" => "Επέλεξε φωτογραφία από το ownCloud", +"Download contact" => "Λήψη επαφής", +"Delete contact" => "Διαγραφή επαφής", +"The temporary image has been removed from cache." => "Η προσωρινή εικόνα αφαιρέθηκε από την κρυφή μνήμη.", "Edit address" => "Επεξεργασία διεύθυνσης", "Type" => "Τύπος", "PO Box" => "Ταχ. Θυρίδα", +"Street address" => "Διεύθυνση οδού", +"Street and number" => "Οδός και αριθμός", "Extended" => "Εκτεταμένη", -"Street" => "Οδός", +"Apartment number etc." => "Αριθμός διαμερίσματος", "City" => "Πόλη", "Region" => "Περιοχή", +"E.g. state or province" => "Π.χ. Πολιτεία ή επαρχεία", "Zipcode" => "Τ.Κ.", +"Postal code" => "Ταχυδρομικός Κωδικός", "Country" => "Χώρα", -"Edit categories" => "Επεξεργασία κατηγορίας", -"Add" => "Προσθήκη", "Addressbook" => "Βιβλίο διευθύνσεων", "Hon. prefixes" => "προθέματα", "Miss" => "Δις", @@ -134,7 +186,7 @@ "Sn." => "Sn.", "New Addressbook" => "Νέο βιβλίο διευθύνσεων", "Edit Addressbook" => "Επεξεργασία βιβλίου διευθύνσεων", -"Displayname" => "Προβαλόμενο όνομα", +"Displayname" => "Προβαλλόμενο όνομα", "Active" => "Ενεργό", "Save" => "Αποθήκευση", "Submit" => "Καταχώρηση", @@ -143,15 +195,16 @@ "Please choose the addressbook" => "Παρακαλώ επέλεξε βιβλίο διευθύνσεων", "create a new addressbook" => "Δημιουργία νέου βιβλίου διευθύνσεων", "Name of new addressbook" => "Όνομα νέου βιβλίου διευθύνσεων", -"Import" => "Εισαγωγή", "Importing contacts" => "Εισαγωγή επαφών", -"Select address book to import to:" => "Επέλεξε σε ποιο βιβλίο διευθύνσεων για εισαγωγή:", -"Select from HD" => "Επιλογή από HD", "You have no contacts in your addressbook." => "Δεν έχεις επαφές στο βιβλίο διευθύνσεων", "Add contact" => "Προσθήκη επαφής", "Configure addressbooks" => "Ρύθμισε το βιβλίο διευθύνσεων", +"Select Address Books" => "Επέλεξε βιβλίο διευθύνσεων", +"Enter name" => "Εισαγωγή ονόματος", +"Enter description" => "Εισαγωγή περιγραφής", "CardDAV syncing addresses" => "συγχρονισμός διευθύνσεων μέσω CardDAV ", "more info" => "περισσότερες πληροφορίες", "Primary address (Kontact et al)" => "Κύρια διεύθυνση", -"iOS/OS X" => "iOS/OS X" +"iOS/OS X" => "iOS/OS X", +"Read only vCard directory link(s)" => "vCard σύνδεσμος(οι) φάκελου μόνο για ανάγνωση" ); diff --git a/apps/contacts/l10n/fi_FI.php b/apps/contacts/l10n/fi_FI.php index 2e3e91611bb..5c9a81eba08 100644 --- a/apps/contacts/l10n/fi_FI.php +++ b/apps/contacts/l10n/fi_FI.php @@ -2,18 +2,19 @@ "There was an error adding the contact." => "Virhe yhteystietoa lisättäessä.", "Cannot add empty property." => "Tyhjää ominaisuutta ei voi lisätä.", "At least one of the address fields has to be filled out." => "Vähintään yksi osoitekenttä tulee täyttää.", -"Error adding contact property." => "Virhe lisättäessä ominaisuutta yhteystietoon.", "No categories selected for deletion." => "Luokkia ei ole valittu poistettavaksi.", "No address books found." => "Osoitekirjoja ei löytynyt.", "No contacts found." => "Yhteystietoja ei löytynyt.", "Error parsing VCard for ID: \"" => "Virhe jäsennettäessä vCardia tunnisteelle: \"", -"Cannot add addressbook with an empty name." => "Ilman nimeä olevaa osoitekirjaa ei voi lisätä.", -"Error adding addressbook." => "Virhe lisättäessä osoitekirjaa.", -"Error activating addressbook." => "Virhe aktivoitaessa osoitekirjaa.", "Error saving temporary file." => "Virhe tallennettaessa tilapäistiedostoa.", +"Information about vCard is incorrect. Please reload the page." => "vCardin tiedot eivät kelpaa. Lataa sivu uudelleen.", "Error deleting contact property." => "Virhe poistettaessa yhteystiedon ominaisuutta.", "File doesn't exist:" => "Tiedostoa ei ole olemassa:", "Error loading image." => "Virhe kuvaa ladatessa.", +"Error saving contact." => "Virhe yhteystietoa tallennettaessa.", +"Error resizing image" => "Virhe asettaessa kuvaa uuteen kokoon", +"Error cropping image" => "Virhe rajatessa kuvaa", +"Error creating temporary image" => "Virhe luotaessa väliaikaista kuvaa", "Error updating contact property." => "Virhe päivitettäessä yhteystiedon ominaisuutta.", "Error updating addressbook." => "Virhe päivitettäessä osoitekirjaa.", "There is no error, the file uploaded with success" => "Ei virhettä, tiedosto lähetettiin onnistuneesti", @@ -21,7 +22,17 @@ "The uploaded file was only partially uploaded" => "Lähetetty tiedosto lähetettiin vain osittain", "No file was uploaded" => "Tiedostoa ei lähetetty", "Missing a temporary folder" => "Tilapäiskansio puuttuu", +"No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe", "Contacts" => "Yhteystiedot", +"Error" => "Virhe", +"Contact" => "Yhteystieto", +"New" => "Uusi", +"New Contact" => "Uusi yhteystieto", +"Edit name" => "Muokkaa nimeä", +"No files selected for upload." => "Tiedostoja ei ole valittu lähetettäväksi.", +"Result: " => "Tulos: ", +" imported, " => " tuotu, ", +" failed." => " epäonnistui.", "Addressbook not found." => "Osoitekirjaa ei löytynyt.", "This is not your addressbook." => "Tämä ei ole osoitekirjasi.", "Contact could not be found." => "Yhteystietoa ei löytynyt.", @@ -39,22 +50,36 @@ "Video" => "Video", "Pager" => "Hakulaite", "Internet" => "Internet", +"Birthday" => "Syntymäpäivä", +"Business" => "Työ", +"Other" => "Muu", +"Questions" => "Kysymykset", "{name}'s Birthday" => "Henkilön {name} syntymäpäivä", -"Contact" => "Yhteystieto", "Add Contact" => "Lisää yhteystieto", +"Import" => "Tuo", "Addressbooks" => "Osoitekirjat", +"Close" => "Sulje", +"Actions" => "Toiminnot", +"Refresh contacts list" => "Päivitä yhteystietoluettelo", +"Add new contact" => "Lisää uusi yhteystieto", +"Add new addressbook" => "Lisää uusi osoitekirja", +"Delete current contact" => "Poista nykyinen yhteystieto", "Configure Address Books" => "Muokkaa osoitekirjoja", "New Address Book" => "Uusi osoitekirja", -"Import from VCF" => "Tuo VCF-tiedostosta", "CardDav Link" => "CardDav-linkki", "Download" => "Lataa", "Edit" => "Muokkaa", "Delete" => "Poista", -"Download contact" => "Lataa yhteystieto", -"Delete contact" => "Poista yhteystieto", +"Delete current photo" => "Poista nykyinen valokuva", +"Edit current photo" => "Muokkaa nykyistä valokuvaa", +"Upload new photo" => "Lähetä uusi valokuva", +"Select photo from ownCloud" => "Valitse valokuva ownCloudista", +"Edit name details" => "Muokkaa nimitietoja", "Nickname" => "Kutsumanimi", "Enter nickname" => "Anna kutsumanimi", -"Birthday" => "Syntymäpäivä", +"Web site" => "Verkkosivu", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Siirry verkkosivulle", "Groups" => "Ryhmät", "Separate groups with commas" => "Erota ryhmät pilkuilla", "Edit groups" => "Muokkaa ryhmiä", @@ -64,26 +89,26 @@ "Enter phone number" => "Anna puhelinnumero", "Delete phone number" => "Poista puhelinnumero", "View on map" => "Näytä kartalla", +"Edit address details" => "Muokkaa osoitetietoja", "Add notes here." => "Lisää huomiot tähän.", "Add field" => "Lisää kenttä", -"Profile picture" => "Profiilikuva", "Phone" => "Puhelin", "Note" => "Huomio", -"Delete current photo" => "Poista nykyinen valokuva", -"Edit current photo" => "Muokkaa nykyistä valokuvaa", -"Upload new photo" => "Lähetä uusi valokuva", -"Select photo from ownCloud" => "Valitse valokuva ownCloudista", +"Download contact" => "Lataa yhteystieto", +"Delete contact" => "Poista yhteystieto", +"The temporary image has been removed from cache." => "Väliaikainen kuva on poistettu välimuistista.", "Edit address" => "Muokkaa osoitetta", "Type" => "Tyyppi", "PO Box" => "Postilokero", +"Street address" => "Katuosoite", +"Street and number" => "Katu ja numero", "Extended" => "Laajennettu", -"Street" => "Katuosoite", +"Apartment number etc." => "Asunnon numero jne.", "City" => "Paikkakunta", "Region" => "Alue", "Zipcode" => "Postinumero", +"Postal code" => "Postinumero", "Country" => "Maa", -"Edit categories" => "Muokkaa luokkia", -"Add" => "Lisää", "Addressbook" => "Osoitekirja", "Given name" => "Etunimi", "Additional names" => "Lisänimet", @@ -98,12 +123,13 @@ "Please choose the addressbook" => "Valitse osoitekirja", "create a new addressbook" => "luo uusi osoitekirja", "Name of new addressbook" => "Uuden osoitekirjan nimi", -"Import" => "Tuo", "Importing contacts" => "Tuodaan yhteystietoja", -"Select address book to import to:" => "Valitse osoitekirja, johon yhteystiedot tuodaan:", "You have no contacts in your addressbook." => "Osoitekirjassasi ei ole yhteystietoja.", "Add contact" => "Lisää yhteystieto", "Configure addressbooks" => "Muokkaa osoitekirjoja", +"Select Address Books" => "Valitse osoitekirjat", +"Enter name" => "Anna nimi", +"Enter description" => "Anna kuvaus", "CardDAV syncing addresses" => "CardDAV-synkronointiosoitteet", "iOS/OS X" => "iOS/OS X" ); diff --git a/apps/contacts/l10n/fr.php b/apps/contacts/l10n/fr.php index 0a2a4e58b9f..dd59a68aaf2 100644 --- a/apps/contacts/l10n/fr.php +++ b/apps/contacts/l10n/fr.php @@ -1,10 +1,13 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Des erreurs se sont produites lors de l'activation/désactivation du carnet d'adresses.", "There was an error adding the contact." => "Une erreur s'est produite lors de l'ajout du contact.", +"element name is not set." => "Le champ Nom n'est pas défini.", +"id is not set." => "L'ID n'est pas défini.", +"Could not parse contact: " => "Impossible de lire le contact :", "Cannot add empty property." => "Impossible d'ajouter un champ vide.", "At least one of the address fields has to be filled out." => "Au moins un des champs d'adresses doit être complété.", "Trying to add duplicate property: " => "Ajout d'une propriété en double:", -"Error adding contact property." => "Erreur lors de l'ajout du champ.", +"Error adding contact property: " => "Erreur pendant l'ajout de la propriété du contact :", "No ID provided" => "Aucun ID fourni", "Error setting checksum." => "Erreur lors du paramétrage du hachage.", "No categories selected for deletion." => "Pas de catégories sélectionnées pour la suppression.", @@ -12,22 +15,23 @@ "No contacts found." => "Aucun contact trouvé.", "Missing ID" => "ID manquant", "Error parsing VCard for ID: \"" => "Erreur lors de l'analyse du VCard pour l'ID: \"", -"Cannot add addressbook with an empty name." => "Ne peut être ajouté avec un nom vide.", -"Error adding addressbook." => "Erreur lors de l'ajout du carnet d'adresses.", -"Error activating addressbook." => "Erreur lors de l'activation du carnet d'adresses.", "No contact ID was submitted." => "Aucun ID de contact envoyé", "Error reading contact photo." => "Erreur de lecture de la photo du contact.", "Error saving temporary file." => "Erreur de sauvegarde du fichier temporaire.", "The loading photo is not valid." => "La photo chargée est invalide.", -"id is not set." => "L'ID n'est pas défini.", "Information about vCard is incorrect. Please reload the page." => "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page.", "Error deleting contact property." => "Erreur lors de la suppression du champ.", "Contact ID is missing." => "L'ID du contact est manquant.", -"Missing contact id." => "ID contact manquant.", "No photo path was submitted." => "Le chemin de la photo n'a pas été envoyé.", "File doesn't exist:" => "Fichier inexistant:", "Error loading image." => "Erreur lors du chargement de l'image.", -"element name is not set." => "Le champ Nom n'est pas défini.", +"Error getting contact object." => "Erreur lors de l'obtention de l'objet contact", +"Error getting PHOTO property." => "Erreur lors de l'obtention des propriétés de la photo", +"Error saving contact." => "Erreur de sauvegarde du contact", +"Error resizing image" => "Erreur de redimensionnement de l'image", +"Error cropping image" => "Erreur lors du rognage de l'image", +"Error creating temporary image" => "Erreur de création de l'image temporaire", +"Error finding image: " => "Erreur pour trouver l'image :", "checksum is not set." => "L'hachage n'est pas défini.", "Information about vCard is incorrect. Please reload the page: " => "L'informatiion à propos de la vCard est incorrect. Merci de rafraichir la page:", "Something went FUBAR. " => "Quelque chose est FUBAR.", @@ -41,8 +45,27 @@ "The uploaded file was only partially uploaded" => "Le fichier envoyé n'a été que partiellement envoyé.", "No file was uploaded" => "Pas de fichier envoyé.", "Missing a temporary folder" => "Absence de dossier temporaire.", +"Couldn't save temporary image: " => "Impossible de sauvegarder l'image temporaire :", +"Couldn't load temporary image: " => "Impossible de charger l'image temporaire :", +"No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue", "Contacts" => "Contacts", -"Drop a VCF file to import contacts." => "Glisser un fichier VCF pour importer des contacts.", +"Sorry, this functionality has not been implemented yet" => "Désolé cette fonctionnalité n'a pas encore été implementée", +"Not implemented" => "Pas encore implémenté", +"Couldn't get a valid address." => "Impossible de trouver une adresse valide.", +"Error" => "Erreur", +"Contact" => "Contact", +"New" => "Nouveau", +"New Contact" => "Nouveau Contact", +"This property has to be non-empty." => "Cette valeur ne doit pas être vide", +"Couldn't serialize elements." => "Impossible de sérialiser les éléments", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' a été appelé sans type d'arguments. Merci de rapporter un bug à bugs.owncloud.org", +"Edit name" => "Éditer le nom", +"No files selected for upload." => "Aucun fichiers choisis pour être chargés", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Le fichier que vous tenter de charger dépasse la taille maximum de fichier autorisé sur ce serveur.", +"Select type" => "Sélectionner un type", +"Result: " => "Résultat :", +" imported, " => "importé,", +" failed." => "échoué.", "Addressbook not found." => "Carnet d'adresses introuvable.", "This is not your addressbook." => "Ce n'est pas votre carnet d'adresses.", "Contact could not be found." => "Ce contact n'a pu être trouvé.", @@ -60,25 +83,54 @@ "Video" => "Vidéo", "Pager" => "Bipeur", "Internet" => "Internet", +"Birthday" => "Anniversaire", +"Business" => "Business", +"Call" => "Appel", +"Clients" => "Clients", +"Deliverer" => "Livreur", +"Holidays" => "Vacances", +"Ideas" => "Idées", +"Journey" => "Trajet", +"Jubilee" => "Jubilé", +"Meeting" => "Rendez-vous", +"Other" => "Autre", +"Personal" => "Personnel", +"Projects" => "Projets", +"Questions" => "Questions", "{name}'s Birthday" => "Anniversaire de {name}", -"Contact" => "Contact", "Add Contact" => "Ajouter un Contact", +"Import" => "Importer", "Addressbooks" => "Carnets d'adresses", +"Close" => "Fermer", +"Keyboard shortcuts" => "Raccourcis clavier", +"Navigation" => "Navigation", +"Next contact in list" => "Contact suivant dans la liste", +"Previous contact in list" => "Contact précédent dans la liste", +"Expand/collapse current addressbook" => "Dé/Replier le carnet d'adresses courant", +"Next/previous addressbook" => "Passer au carnet d'adresses suivant/précédent", +"Actions" => "Actions", +"Refresh contacts list" => "Actualiser la liste des contacts", +"Add new contact" => "Ajouter un nouveau contact", +"Add new addressbook" => "Ajouter un nouveau carnet d'adresses", +"Delete current contact" => "Effacer le contact sélectionné", "Configure Address Books" => "Paramétrer carnet d'adresses", "New Address Book" => "Nouveau Carnet d'adresses", -"Import from VCF" => "Importer depuis VCF", "CardDav Link" => "Lien CardDav", "Download" => "Télécharger", "Edit" => "Modifier", "Delete" => "Supprimer", -"Download contact" => "Télécharger le contact", -"Delete contact" => "Supprimer le contact", "Drop photo to upload" => "Glisser une photo pour l'envoi", +"Delete current photo" => "Supprimer la photo actuelle", +"Edit current photo" => "Editer la photo actuelle", +"Upload new photo" => "Envoyer une nouvelle photo", +"Select photo from ownCloud" => "Sélectionner une photo depuis ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formatage personnalisé, Nom court, Nom complet, Inversé, Inversé avec virgule", "Edit name details" => "Editer les noms", "Nickname" => "Surnom", "Enter nickname" => "Entrer un surnom", -"Birthday" => "Anniversaire", +"Web site" => "Page web", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Allez à la page web", "dd-mm-yyyy" => "jj-mm-aaaa", "Groups" => "Groupes", "Separate groups with commas" => "Séparer les groupes avec des virgules", @@ -86,6 +138,7 @@ "Preferred" => "Préféré", "Please specify a valid email address." => "Merci d'entrer une adresse e-mail valide.", "Enter email address" => "Entrer une adresse e-mail", +"Mail to address" => "Envoyer à l'adresse", "Delete email address" => "Supprimer l'adresse e-mail", "Enter phone number" => "Entrer un numéro de téléphone", "Delete phone number" => "Supprimer le numéro de téléphone", @@ -93,24 +146,24 @@ "Edit address details" => "Editer les adresses", "Add notes here." => "Ajouter des notes ici.", "Add field" => "Ajouter un champ.", -"Profile picture" => "Photo de profil", "Phone" => "Téléphone", "Note" => "Note", -"Delete current photo" => "Supprimer la photo actuelle", -"Edit current photo" => "Editer la photo actuelle", -"Upload new photo" => "Envoyer une nouvelle photo", -"Select photo from ownCloud" => "Sélectionner une photo depuis ownCloud", +"Download contact" => "Télécharger le contact", +"Delete contact" => "Supprimer le contact", +"The temporary image has been removed from cache." => "L'image temporaire a été supprimée du cache.", "Edit address" => "Editer l'adresse", "Type" => "Type", "PO Box" => "Boîte postale", +"Street address" => "Adresse postale", +"Street and number" => "Rue et numéro", "Extended" => "Étendu", -"Street" => "Rue", +"Apartment number etc." => "Numéro d'appartement, etc.", "City" => "Ville", "Region" => "Région", +"E.g. state or province" => "Ex: état ou province", "Zipcode" => "Code postal", +"Postal code" => "Code postal", "Country" => "Pays", -"Edit categories" => "Editer les catégories", -"Add" => "Ajouter", "Addressbook" => "Carnet d'adresses", "Hon. prefixes" => "Préfixe hon.", "Miss" => "Mlle", @@ -123,7 +176,14 @@ "Additional names" => "Nom supplémentaires", "Family name" => "Nom de famille", "Hon. suffixes" => "Suffixes hon.", +"J.D." => "J.D.", +"M.D." => "Dr.", +"D.O." => "D.O.", +"D.C." => "D.C.", "Ph.D." => "Dr", +"Esq." => "Esq.", +"Jr." => "Jr.", +"Sn." => "Sn.", "New Addressbook" => "Nouveau carnet d'adresses", "Edit Addressbook" => "Éditer le carnet d'adresses", "Displayname" => "Nom", @@ -135,15 +195,16 @@ "Please choose the addressbook" => "Choisissez le carnet d'adresses SVP", "create a new addressbook" => "Créer un nouveau carnet d'adresses", "Name of new addressbook" => "Nom du nouveau carnet d'adresses", -"Import" => "Importer", "Importing contacts" => "Importation des contacts", -"Select address book to import to:" => "Selectionner le carnet d'adresses à importer vers:", -"Select from HD" => "Selectionner depuis le disque dur", "You have no contacts in your addressbook." => "Il n'y a pas de contact dans votre carnet d'adresses.", "Add contact" => "Ajouter un contact", "Configure addressbooks" => "Paramétrer carnet d'adresses", +"Select Address Books" => "Choix du carnet d'adresses", +"Enter name" => "Saisissez le nom", +"Enter description" => "Saisissez une description", "CardDAV syncing addresses" => "Synchronisation des contacts CardDAV", "more info" => "Plus d'infos", "Primary address (Kontact et al)" => "Adresse principale", -"iOS/OS X" => "iOS/OS X" +"iOS/OS X" => "iOS/OS X", +"Read only vCard directory link(s)" => "Lien(s) vers le répertoire de vCards en lecture seule" ); diff --git a/apps/contacts/l10n/it.php b/apps/contacts/l10n/it.php index 2a5478e6c4b..820104b7774 100644 --- a/apps/contacts/l10n/it.php +++ b/apps/contacts/l10n/it.php @@ -1,10 +1,13 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Errore nel (dis)attivare la rubrica.", "There was an error adding the contact." => "Si è verificato un errore nell'aggiunta del contatto.", +"element name is not set." => "il nome dell'elemento non è impostato.", +"id is not set." => "ID non impostato.", +"Could not parse contact: " => "Impossibile elaborare il contatto: ", "Cannot add empty property." => "Impossibile aggiungere una proprietà vuota.", "At least one of the address fields has to be filled out." => "Deve essere riempito almeno un indirizzo.", "Trying to add duplicate property: " => "P", -"Error adding contact property." => "Errore durante l'aggiunta della proprietà del contatto.", +"Error adding contact property: " => "Errore durante l'aggiunta della proprietà del contatto: ", "No ID provided" => "Nessun ID fornito", "Error setting checksum." => "Errore di impostazione del codice di controllo.", "No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.", @@ -12,22 +15,23 @@ "No contacts found." => "Nessun contatto trovato.", "Missing ID" => "ID mancante", "Error parsing VCard for ID: \"" => "Errore in fase di elaborazione del file VCard per l'ID: \"", -"Cannot add addressbook with an empty name." => "Impossibile aggiungere una rubrica senza nome.", -"Error adding addressbook." => "Errore durante l'aggiunta della rubrica.", -"Error activating addressbook." => "Errore durante l'attivazione della rubrica.", "No contact ID was submitted." => "Nessun ID di contatto inviato.", "Error reading contact photo." => "Errore di lettura della foto del contatto.", "Error saving temporary file." => "Errore di salvataggio del file temporaneo.", "The loading photo is not valid." => "La foto caricata non è valida.", -"id is not set." => "ID non impostato.", "Information about vCard is incorrect. Please reload the page." => "Informazioni sulla vCard non corrette. Ricarica la pagina.", "Error deleting contact property." => "Errore durante l'eliminazione della proprietà del contatto.", "Contact ID is missing." => "Manca l'ID del contatto.", -"Missing contact id." => "ID di contatto mancante.", "No photo path was submitted." => "Non è stato inviato alcun percorso a una foto.", "File doesn't exist:" => "Il file non esiste:", "Error loading image." => "Errore di caricamento immagine.", -"element name is not set." => "il nome dell'elemento non è impostato.", +"Error getting contact object." => "Errore di recupero dell'oggetto contatto.", +"Error getting PHOTO property." => "Errore di recupero della proprietà FOTO.", +"Error saving contact." => "Errore di salvataggio del contatto.", +"Error resizing image" => "Errore di ridimensionamento dell'immagine", +"Error cropping image" => "Errore di ritaglio dell'immagine", +"Error creating temporary image" => "Errore durante la creazione dell'immagine temporanea", +"Error finding image: " => "Errore durante la ricerca dell'immagine: ", "checksum is not set." => "il codice di controllo non è impostato.", "Information about vCard is incorrect. Please reload the page: " => "Le informazioni della vCard non sono corrette. Ricarica la pagina: ", "Something went FUBAR. " => "Qualcosa è andato storto. ", @@ -41,8 +45,27 @@ "The uploaded file was only partially uploaded" => "Il file è stato inviato solo parzialmente", "No file was uploaded" => "Nessun file è stato inviato", "Missing a temporary folder" => "Manca una cartella temporanea", +"Couldn't save temporary image: " => "Impossibile salvare l'immagine temporanea: ", +"Couldn't load temporary image: " => "Impossibile caricare l'immagine temporanea: ", +"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto", "Contacts" => "Contatti", -"Drop a VCF file to import contacts." => "Rilascia un file VCF per importare i contatti.", +"Sorry, this functionality has not been implemented yet" => "Siamo spiacenti, questa funzionalità non è stata ancora implementata", +"Not implemented" => "Non implementata", +"Couldn't get a valid address." => "Impossibile ottenere un indirizzo valido.", +"Error" => "Errore", +"Contact" => "Contatto", +"New" => "Nuovo", +"New Contact" => "Nuovo contatto", +"This property has to be non-empty." => "Questa proprietà non può essere vuota.", +"Couldn't serialize elements." => "Impossibile serializzare gli elementi.", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' invocata senza l'argomento di tipo. Segnalalo a bugs.owncloud.org", +"Edit name" => "Modifica il nome", +"No files selected for upload." => "Nessun file selezionato per l'invio", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Il file che stai cercando di inviare supera la dimensione massima per l'invio dei file su questo server.", +"Select type" => "Seleziona il tipo", +"Result: " => "Risultato: ", +" imported, " => " importato, ", +" failed." => " non riuscito.", "Addressbook not found." => "Rubrica non trovata.", "This is not your addressbook." => "Questa non è la tua rubrica.", "Contact could not be found." => "Il contatto non può essere trovato.", @@ -60,25 +83,54 @@ "Video" => "Video", "Pager" => "Cercapersone", "Internet" => "Internet", +"Birthday" => "Compleanno", +"Business" => "Lavoro", +"Call" => "Chiama", +"Clients" => "Client", +"Deliverer" => "Corriere", +"Holidays" => "Festività", +"Ideas" => "Idee", +"Journey" => "Viaggio", +"Jubilee" => "Anniversario", +"Meeting" => "Riunione", +"Other" => "Altro", +"Personal" => "Personale", +"Projects" => "Progetti", +"Questions" => "Domande", "{name}'s Birthday" => "Data di nascita di {name}", -"Contact" => "Contatto", "Add Contact" => "Aggiungi contatto", +"Import" => "Importa", "Addressbooks" => "Rubriche", +"Close" => "Chiudi", +"Keyboard shortcuts" => "Scorciatoie da tastiera", +"Navigation" => "Navigazione", +"Next contact in list" => "Contatto successivo in elenco", +"Previous contact in list" => "Contatto precedente in elenco", +"Expand/collapse current addressbook" => "Espandi/Contrai la rubrica corrente", +"Next/previous addressbook" => "Rubrica successiva/precedente", +"Actions" => "Azioni", +"Refresh contacts list" => "Aggiorna l'elenco dei contatti", +"Add new contact" => "Aggiungi un nuovo contatto", +"Add new addressbook" => "Aggiungi una nuova rubrica", +"Delete current contact" => "Elimina il contatto corrente", "Configure Address Books" => "Configura rubrica", "New Address Book" => "Nuova rubrica", -"Import from VCF" => "Importa da VCF", "CardDav Link" => "Link CardDav", "Download" => "Scarica", "Edit" => "Modifica", "Delete" => "Elimina", -"Download contact" => "Scarica contatto", -"Delete contact" => "Elimina contatto", "Drop photo to upload" => "Rilascia una foto da inviare", +"Delete current photo" => "Elimina la foto corrente", +"Edit current photo" => "Modifica la foto corrente", +"Upload new photo" => "Invia una nuova foto", +"Select photo from ownCloud" => "Seleziona la foto da ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizzato, nome breve, nome completo, invertito o invertito con virgola", "Edit name details" => "Modifica dettagli del nome", "Nickname" => "Pseudonimo", "Enter nickname" => "Inserisci pseudonimo", -"Birthday" => "Compleanno", +"Web site" => "Sito web", +"http://www.somesite.com" => "http://www.somesite.com", +"Go to web site" => "Vai al sito web", "dd-mm-yyyy" => "gg-mm-aaaa", "Groups" => "Gruppi", "Separate groups with commas" => "Separa i gruppi con virgole", @@ -94,24 +146,24 @@ "Edit address details" => "Modifica dettagli dell'indirizzo", "Add notes here." => "Aggiungi qui le note.", "Add field" => "Aggiungi campo", -"Profile picture" => "Immagine del profilo", "Phone" => "Telefono", "Note" => "Nota", -"Delete current photo" => "Elimina la foto corrente", -"Edit current photo" => "Modifica la foto corrente", -"Upload new photo" => "Invia una nuova foto", -"Select photo from ownCloud" => "Seleziona la foto da ownCloud", +"Download contact" => "Scarica contatto", +"Delete contact" => "Elimina contatto", +"The temporary image has been removed from cache." => "L'immagine temporanea è stata rimossa dalla cache.", "Edit address" => "Modifica indirizzo", "Type" => "Tipo", "PO Box" => "Casella postale", +"Street address" => "Indirizzo", +"Street and number" => "Via e numero", "Extended" => "Esteso", -"Street" => "Via", +"Apartment number etc." => "Numero appartamento ecc.", "City" => "Città", "Region" => "Regione", +"E.g. state or province" => "Ad es. stato o provincia", "Zipcode" => "CAP", +"Postal code" => "CAP", "Country" => "Stato", -"Edit categories" => "Modifica categorie", -"Add" => "Aggiungi", "Addressbook" => "Rubrica", "Hon. prefixes" => "Prefissi onorifici", "Miss" => "Sig.na", @@ -143,15 +195,16 @@ "Please choose the addressbook" => "Scegli la rubrica", "create a new addressbook" => "crea una nuova rubrica", "Name of new addressbook" => "Nome della nuova rubrica", -"Import" => "Importa", "Importing contacts" => "Importazione contatti", -"Select address book to import to:" => "Seleziona la rubrica di destinazione:", -"Select from HD" => "Seleziona da disco", "You have no contacts in your addressbook." => "Non hai contatti nella rubrica.", "Add contact" => "Aggiungi contatto", "Configure addressbooks" => "Configura rubriche", +"Select Address Books" => "Seleziona rubriche", +"Enter name" => "Inserisci il nome", +"Enter description" => "Inserisci una descrizione", "CardDAV syncing addresses" => "Indirizzi di sincronizzazione CardDAV", "more info" => "altre informazioni", "Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)", -"iOS/OS X" => "iOS/OS X" +"iOS/OS X" => "iOS/OS X", +"Read only vCard directory link(s)" => "Collegamento(i) cartella vCard sola lettura" ); diff --git a/apps/contacts/l10n/sk_SK.php b/apps/contacts/l10n/sk_SK.php index 6e5ebe3bd3c..79db2dbcf6e 100644 --- a/apps/contacts/l10n/sk_SK.php +++ b/apps/contacts/l10n/sk_SK.php @@ -1,10 +1,11 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Chyba (de)aktivácie adresára.", "There was an error adding the contact." => "Vyskytla sa chyba pri pridávaní kontaktu.", +"element name is not set." => "meno elementu nie je nastavené.", +"id is not set." => "ID nie je nastavené.", "Cannot add empty property." => "Nemôžem pridať prázdny údaj.", "At least one of the address fields has to be filled out." => "Musí byť uvedený aspoň jeden adresný údaj.", "Trying to add duplicate property: " => "Pokúšate sa pridať rovnaký atribút:", -"Error adding contact property." => "Chyba pridania údaju kontaktu", "No ID provided" => "ID nezadané", "Error setting checksum." => "Chyba pri nastavovaní kontrolného súčtu.", "No categories selected for deletion." => "Žiadne kategórie neboli vybraté na odstránenie.", @@ -12,22 +13,23 @@ "No contacts found." => "Žiadne kontakty nenájdené.", "Missing ID" => "Chýba ID", "Error parsing VCard for ID: \"" => "Chyba pri vyňatí ID z VCard:", -"Cannot add addressbook with an empty name." => "Nedá sa pridať adresár s prázdnym menom.", -"Error adding addressbook." => "Chyba počas pridávania adresára.", -"Error activating addressbook." => "Chyba aktivovania adresára.", "No contact ID was submitted." => "Nebolo nastavené ID kontaktu.", "Error reading contact photo." => "Chyba pri čítaní fotky kontaktu.", "Error saving temporary file." => "Chyba pri ukladaní dočasného súboru.", "The loading photo is not valid." => "Načítaná fotka je vadná.", -"id is not set." => "ID nie je nastavené.", "Information about vCard is incorrect. Please reload the page." => "Informácie o vCard sú neplatné. Prosím obnovte stránku.", "Error deleting contact property." => "Chyba odstránenia údaju kontaktu.", "Contact ID is missing." => "Chýba ID kontaktu.", -"Missing contact id." => "Chýba ID kontaktu.", "No photo path was submitted." => "Žiadna fotka nebola poslaná.", "File doesn't exist:" => "Súbor neexistuje:", "Error loading image." => "Chyba pri nahrávaní obrázka.", -"element name is not set." => "meno elementu nie je nastavené.", +"Error getting contact object." => "Chyba počas prevzatia objektu kontakt.", +"Error getting PHOTO property." => "Chyba počas získavania fotky.", +"Error saving contact." => "Chyba počas ukladania kontaktu.", +"Error resizing image" => "Chyba počas zmeny obrázku.", +"Error cropping image" => "Chyba počas orezania obrázku.", +"Error creating temporary image" => "Chyba počas vytvárania dočasného obrázku.", +"Error finding image: " => "Chyba vyhľadania obrázku: ", "checksum is not set." => "kontrolný súčet nie je nastavený.", "Information about vCard is incorrect. Please reload the page: " => "Informácia o vCard je nesprávna. Obnovte stránku, prosím.", "Something went FUBAR. " => "Niečo sa pokazilo.", @@ -41,8 +43,27 @@ "The uploaded file was only partially uploaded" => "Ukladaný súbor sa nahral len čiastočne", "No file was uploaded" => "Žiadny súbor nebol uložený", "Missing a temporary folder" => "Chýba dočasný priečinok", +"Couldn't save temporary image: " => "Nemôžem uložiť dočasný obrázok: ", +"Couldn't load temporary image: " => "Nemôžem načítať dočasný obrázok: ", +"No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba", "Contacts" => "Kontakty", -"Drop a VCF file to import contacts." => "Pretiahnite VCF súbor pre import kontaktov.", +"Sorry, this functionality has not been implemented yet" => "Bohužiaľ, táto funkcia ešte nebola implementovaná", +"Not implemented" => "Neimplementované", +"Couldn't get a valid address." => "Nemôžem získať platnú adresu.", +"Error" => "Chyba", +"Contact" => "Kontakt", +"New" => "Nový", +"New Contact" => "Nový kontakt", +"This property has to be non-empty." => "Tento parameter nemôže byť prázdny.", +"Couldn't serialize elements." => "Nemôžem previesť prvky.", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' zavolané bez argument. Prosím oznámte chybu na bugs.owncloud.org", +"Edit name" => "Upraviť meno", +"No files selected for upload." => "Žiadne súbory neboli vybrané k nahratiu", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Súbor, ktorý sa pokúšate nahrať, presahuje maximálnu povolenú veľkosť.", +"Select type" => "Vybrať typ", +"Result: " => "Výsledok: ", +" imported, " => " importovaných, ", +" failed." => " zlyhaných.", "Addressbook not found." => "Adresár sa nenašiel.", "This is not your addressbook." => "Toto nie je váš adresár.", "Contact could not be found." => "Kontakt nebol nájdený.", @@ -60,25 +81,44 @@ "Video" => "Video", "Pager" => "Pager", "Internet" => "Internet", +"Birthday" => "Narodeniny", +"Business" => "Biznis", +"Clients" => "Klienti", +"Holidays" => "Prázdniny", +"Meeting" => "Stretnutie", +"Other" => "Iné", +"Projects" => "Projekty", +"Questions" => "Otázky", "{name}'s Birthday" => "Narodeniny {name}", -"Contact" => "Kontakt", "Add Contact" => "Pridať Kontakt.", +"Import" => "Importovať", "Addressbooks" => "Adresáre", +"Close" => "Zatvoriť", +"Keyboard shortcuts" => "Klávesové skratky", +"Navigation" => "Navigácia", +"Next contact in list" => "Ďalší kontakt v zozname", +"Previous contact in list" => "Predchádzajúci kontakt v zozname", +"Next/previous addressbook" => "Ďalší/predošlí adresár", +"Actions" => "Akcie", +"Refresh contacts list" => "Obnov zoznam kontaktov", +"Add new contact" => "Pridaj nový kontakt", +"Add new addressbook" => "Pridaj nový adresár", +"Delete current contact" => "Vymaž súčasný kontakt", "Configure Address Books" => "Nastaviť adresáre", "New Address Book" => "Nový adresár", -"Import from VCF" => "Importovať z VCF", "CardDav Link" => "CardDav odkaz", "Download" => "Stiahnuť", "Edit" => "Upraviť", "Delete" => "Odstrániť", -"Download contact" => "Stiahnuť kontakt", -"Delete contact" => "Odstrániť kontakt", "Drop photo to upload" => "Pretiahnite sem fotku pre nahratie", +"Delete current photo" => "Odstrániť súčasnú fotku", +"Edit current photo" => "Upraviť súčasnú fotku", +"Upload new photo" => "Nahrať novú fotku", +"Select photo from ownCloud" => "Vybrať fotku z ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formát vlastný, krátke meno, celé meno, obrátené alebo obrátené s čiarkami", "Edit name details" => "Upraviť podrobnosti mena", "Nickname" => "Prezývka", "Enter nickname" => "Zadajte prezývku", -"Birthday" => "Narodeniny", "dd-mm-yyyy" => "dd. mm. yyyy", "Groups" => "Skupiny", "Separate groups with commas" => "Oddelte skupiny čiarkami", @@ -94,24 +134,22 @@ "Edit address details" => "Upraviť podrobnosti adresy", "Add notes here." => "Tu môžete pridať poznámky.", "Add field" => "Pridať pole", -"Profile picture" => "Profilová fotka", "Phone" => "Telefón", "Note" => "Poznámka", -"Delete current photo" => "Odstrániť súčasnú fotku", -"Edit current photo" => "Upraviť súčasnú fotku", -"Upload new photo" => "Nahrať novú fotku", -"Select photo from ownCloud" => "Vybrať fotku z ownCloud", +"Download contact" => "Stiahnuť kontakt", +"Delete contact" => "Odstrániť kontakt", +"The temporary image has been removed from cache." => "Dočasný obrázok bol odstránený z cache.", "Edit address" => "Upraviť adresu", "Type" => "Typ", "PO Box" => "PO Box", +"Street address" => "Ulica", +"Street and number" => "Ulica a číslo", "Extended" => "Rozšírené", -"Street" => "Ulica", "City" => "Mesto", "Region" => "Región", "Zipcode" => "PSČ", +"Postal code" => "PSČ", "Country" => "Krajina", -"Edit categories" => "Upraviť kategórie", -"Add" => "Pridať", "Addressbook" => "Adresár", "Hon. prefixes" => "Tituly pred", "Miss" => "Slečna", @@ -126,6 +164,8 @@ "Hon. suffixes" => "Tituly za", "J.D." => "JUDr.", "M.D." => "MUDr.", +"D.O." => "D.O.", +"D.C." => "D.C.", "Ph.D." => "Ph.D.", "Esq." => "Esq.", "Jr." => "ml.", @@ -141,13 +181,11 @@ "Please choose the addressbook" => "Prosím zvolte adresár", "create a new addressbook" => "vytvoriť nový adresár", "Name of new addressbook" => "Meno nového adresára", -"Import" => "Importovať", "Importing contacts" => "Importovanie kontaktov", -"Select address book to import to:" => "Vyberte adresár, do ktorého chcete importovať:", -"Select from HD" => "Vyberte z pevného disku", "You have no contacts in your addressbook." => "Nemáte žiadne kontakty v adresári.", "Add contact" => "Pridať kontakt", "Configure addressbooks" => "Nastaviť adresáre", +"Enter name" => "Zadaj meno", "CardDAV syncing addresses" => "Adresy pre synchronizáciu s CardDAV", "more info" => "viac informácií", "Primary address (Kontact et al)" => "Predvolená adresa (Kontakt etc)", diff --git a/apps/contacts/l10n/sv.php b/apps/contacts/l10n/sv.php index 8d5d37d2484..bb8f0d0a300 100644 --- a/apps/contacts/l10n/sv.php +++ b/apps/contacts/l10n/sv.php @@ -1,30 +1,32 @@ <?php $TRANSLATIONS = array( "Error (de)activating addressbook." => "Fel när (av)aktivera adressbok", "There was an error adding the contact." => "Det uppstod ett fel när kontakt skulle läggas till", +"id is not set." => "ID är inte satt.", +"Could not parse contact: " => "Kunde inte läsa kontakt:", "Cannot add empty property." => "Kan inte lägga till en tom egenskap", "At least one of the address fields has to be filled out." => "Minst ett fält måste fyllas i", -"Error adding contact property." => "Fel när kontaktegenskap skulle läggas till", +"Error adding contact property: " => "Kunde inte lägga till egenskap för kontakt:", "No ID provided" => "Inget ID angett", "Error setting checksum." => "Fel uppstod när kontrollsumma skulle sättas.", "No categories selected for deletion." => "Inga kategorier valda för borttaging", "No address books found." => "Ingen adressbok funnen.", "No contacts found." => "Inga kontakter funna.", "Missing ID" => "ID saknas", -"Cannot add addressbook with an empty name." => "Kan inte lägga till adressbok med ett tomt namn.", -"Error adding addressbook." => "Fel när adressbok skulle läggas till", -"Error activating addressbook." => "Fel uppstod när adressbok skulle aktiveras", "No contact ID was submitted." => "Inget kontakt-ID angavs.", "Error reading contact photo." => "Fel uppstod när ", "Error saving temporary file." => "Fel uppstod när temporär fil skulle sparas.", "The loading photo is not valid." => "Det laddade fotot är inte giltigt.", -"id is not set." => "ID är inte satt.", "Information about vCard is incorrect. Please reload the page." => "Information om vCard är felaktigt. Vänligen ladda om sidan.", "Error deleting contact property." => "Fel uppstod när kontaktegenskap skulle tas bort", "Contact ID is missing." => "Kontakt-ID saknas.", -"Missing contact id." => "Saknar kontakt-ID.", "No photo path was submitted." => "Ingen sökväg till foto angavs.", "File doesn't exist:" => "Filen existerar inte.", "Error loading image." => "Fel uppstod när bild laddades.", +"Error saving contact." => "Fel vid sparande av kontakt.", +"Error resizing image" => "Fel vid storleksförändring av bilden", +"Error cropping image" => "Fel vid beskärning av bilden", +"Error creating temporary image" => "Fel vid skapande av tillfällig bild", +"Error finding image: " => "Kunde inte hitta bild", "checksum is not set." => "kontrollsumma är inte satt.", "Information about vCard is incorrect. Please reload the page: " => "Informationen om vCard är fel. Ladda om sidan:", "Error updating contact property." => "Fel uppstod när kontaktegenskap skulle uppdateras", @@ -37,8 +39,27 @@ "The uploaded file was only partially uploaded" => "Den uppladdade filen var bara delvist uppladdad", "No file was uploaded" => "Ingen fil laddades upp", "Missing a temporary folder" => "En temporär mapp saknas", +"Couldn't save temporary image: " => "Kunde inte spara tillfällig bild:", +"Couldn't load temporary image: " => "Kunde inte ladda tillfällig bild:", +"No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel", "Contacts" => "Kontakter", -"Drop a VCF file to import contacts." => "Släpp en VCF-fil för att importera kontakter.", +"Sorry, this functionality has not been implemented yet" => "Tyvärr är denna funktion inte införd än", +"Not implemented" => "Inte införd", +"Couldn't get a valid address." => "Kunde inte hitta en giltig adress.", +"Error" => "Fel", +"Contact" => "Kontakt", +"New" => "Ny", +"New Contact" => "Ny kontakt", +"This property has to be non-empty." => "Denna egenskap får inte vara tom.", +"Couldn't serialize elements." => "Kunde inte serialisera element.", +"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "\"deleteProperty\" anropades utan typargument. Vänligen rapportera till bugs.owncloud.org", +"Edit name" => "Ändra namn", +"No files selected for upload." => "Inga filer valda för uppladdning", +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Filen du försöker ladda upp är större än den maximala storleken för filuppladdning på denna server.", +"Select type" => "Välj typ", +"Result: " => "Resultat:", +" imported, " => "importerad,", +" failed." => "misslyckades.", "Addressbook not found." => "Hittade inte adressboken", "This is not your addressbook." => "Det här är inte din adressbok.", "Contact could not be found." => "Kontakt kunde inte hittas.", @@ -56,25 +77,33 @@ "Video" => "Video", "Pager" => "Personsökare", "Internet" => "Internet", +"Birthday" => "Födelsedag", +"Business" => "Företag", +"Call" => "Ring", +"Clients" => "Kunder", +"Deliverer" => "Leverera", +"Holidays" => "Helgdagar", +"Ideas" => "Idéer", "{name}'s Birthday" => "{name}'s födelsedag", -"Contact" => "Kontakt", "Add Contact" => "Lägg till kontakt", +"Import" => "Importera", "Addressbooks" => "Adressböcker", +"Close" => "Stäng", "Configure Address Books" => "Konfigurera adressböcker", "New Address Book" => "Ny adressbok", -"Import from VCF" => "Importera från VCF", "CardDav Link" => "CardDAV länk", "Download" => "Nedladdning", "Edit" => "Redigera", "Delete" => "Radera", -"Download contact" => "Ladda ner kontakt", -"Delete contact" => "Radera kontakt", "Drop photo to upload" => "Släpp foto för att ladda upp", +"Delete current photo" => "Ta bort aktuellt foto", +"Edit current photo" => "Redigera aktuellt foto", +"Upload new photo" => "Ladda upp ett nytt foto", +"Select photo from ownCloud" => "Välj foto från ownCloud", "Format custom, Short name, Full name, Reverse or Reverse with comma" => " anpassad, korta namn, hela namn, bakåt eller bakåt med komma", "Edit name details" => "Redigera detaljer för namn", "Nickname" => "Smeknamn", "Enter nickname" => "Ange smeknamn", -"Birthday" => "Födelsedag", "dd-mm-yyyy" => "dd-mm-åååå", "Groups" => "Grupper", "Separate groups with commas" => "Separera grupperna med kommatecken", @@ -90,24 +119,19 @@ "Edit address details" => "Redigera detaljer för adress", "Add notes here." => "Lägg till noteringar här.", "Add field" => "Lägg till fält", -"Profile picture" => "Profilbild", "Phone" => "Telefon", "Note" => "Notering", -"Delete current photo" => "Ta bort aktuellt foto", -"Edit current photo" => "Redigera aktuellt foto", -"Upload new photo" => "Ladda upp ett nytt foto", -"Select photo from ownCloud" => "Välj foto från ownCloud", +"Download contact" => "Ladda ner kontakt", +"Delete contact" => "Radera kontakt", +"The temporary image has been removed from cache." => "Den tillfälliga bilden har raderats från cache.", "Edit address" => "Editera adress", "Type" => "Typ", "PO Box" => "Postbox", "Extended" => "Utökad", -"Street" => "Gata", "City" => "Stad", "Region" => "Län", "Zipcode" => "Postnummer", "Country" => "Land", -"Edit categories" => "Editera kategorier", -"Add" => "Ny", "Addressbook" => "Adressbok", "Miss" => "Herr", "Ms" => "Ingen adressbok funnen.", @@ -129,10 +153,7 @@ "Please choose the addressbook" => "Vänligen välj adressboken", "create a new addressbook" => "skapa en ny adressbok", "Name of new addressbook" => "Namn för ny adressbok", -"Import" => "Importera", "Importing contacts" => "Importerar kontakter", -"Select address book to import to:" => "Importera till adressbok:", -"Select from HD" => "Välj från hårddisk", "You have no contacts in your addressbook." => "Du har inga kontakter i din adressbok.", "Add contact" => "Lägg till en kontakt", "Configure addressbooks" => "Konfigurera adressböcker", diff --git a/apps/contacts/l10n/vi.php b/apps/contacts/l10n/vi.php new file mode 100644 index 00000000000..5713ede7b00 --- /dev/null +++ b/apps/contacts/l10n/vi.php @@ -0,0 +1,48 @@ +<?php $TRANSLATIONS = array( +"element name is not set." => "tên phần tử không được thiết lập.", +"id is not set." => "id không được thiết lập.", +"No ID provided" => "Không có ID được cung cấp", +"No address books found." => "Không tìm thấy sổ địa chỉ.", +"No contacts found." => "Không tìm thấy danh sách", +"Missing ID" => "Missing ID", +"Error reading contact photo." => "Lỗi đọc liên lạc hình ảnh.", +"The loading photo is not valid." => "Các hình ảnh tải không hợp lệ.", +"File doesn't exist:" => "Tập tin không tồn tại", +"Error loading image." => "Lỗi khi tải hình ảnh.", +"Error uploading contacts to storage." => "Lỗi tải lên danh sách địa chỉ để lưu trữ.", +"There is no error, the file uploaded with success" => "Không có lỗi, các tập tin tải lên thành công", +"Contacts" => "Liên lạc", +"Contact" => "Danh sách", +"Address" => "Địa chỉ", +"Telephone" => "Điện thoại bàn", +"Email" => "Email", +"Organization" => "Tổ chức", +"Work" => "Công việc", +"Home" => "Nhà", +"Mobile" => "Di động", +"Fax" => "Fax", +"Video" => "Video", +"Pager" => "số trang", +"Birthday" => "Ngày sinh nhật", +"Add Contact" => "Thêm liên lạc", +"Addressbooks" => "Sổ địa chỉ", +"CardDav Link" => "CardDav Link", +"Download" => "Tải về", +"Edit" => "Sửa", +"Delete" => "Xóa", +"Phone" => "Điện thoại", +"Delete contact" => "Xóa liên lạc", +"PO Box" => "Hòm thư bưu điện", +"City" => "Thành phố", +"Region" => "Vùng/miền", +"Zipcode" => "Mã bưu điện", +"Country" => "Quốc gia", +"Addressbook" => "Sổ địa chỉ", +"New Addressbook" => "Sổ địa chỉ mới", +"Edit Addressbook" => "Sửa sổ địa chỉ", +"Displayname" => "Hiển thị tên", +"Active" => "Kích hoạt", +"Save" => "Lưu", +"Submit" => "Submit", +"Cancel" => "Hủy" +); diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php index 80141bb7240..74464aa718b 100644 --- a/apps/contacts/lib/app.php +++ b/apps/contacts/lib/app.php @@ -26,14 +26,12 @@ class OC_Contacts_App { if ($addressbook === false) { OCP\Util::writeLog('contacts', 'Addressbook not found: '. $id, OCP\Util::ERROR); OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('Addressbook not found.')))); - exit(); } else if ($addressbook['userid'] != OCP\USER::getUser()) { if ($shared = OCP\Share::getItemSharedWithBySource('addressbook', $id)) { $addressbook['displayname'] = $shared['item_target']; } else { OCP\Util::writeLog('contacts', 'Addressbook('.$id.') is not from '.OCP\USER::getUser(), OCP\Util::ERROR); OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('This is not your addressbook.')))); - exit(); } } return $addressbook; @@ -42,8 +40,17 @@ class OC_Contacts_App { public static function getContactObject($id) { $card = OC_Contacts_VCard::find( $id ); if( $card === false ) { - OCP\Util::writeLog('contacts', 'Contact could not be found: '.$id, OCP\Util::ERROR); - OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('Contact could not be found.').' '.print_r($id, true)))); + OCP\Util::writeLog('contacts', + 'Contact could not be found: '.$id, + OCP\Util::ERROR); + OCP\JSON::error( + array( + 'data' => array( + 'message' => self::$l10n->t('Contact could not be found.') + .' '.print_r($id, true) + ) + ) + ); exit(); } @@ -59,22 +66,6 @@ class OC_Contacts_App { $card = self::getContactObject( $id ); $vcard = OC_VObject::parse($card['carddata']); - // Try to fix cards with missing 'N' field from pre ownCloud 4. Hot damn, this is ugly... - if(!is_null($vcard) && !$vcard->__isset('N')) { - $version = OCP\App::getAppVersion('contacts'); - if($version >= 5) { - OCP\Util::writeLog('contacts', 'OC_Contacts_App::getContactVCard. Deprecated check for missing N field', OCP\Util::DEBUG); - } - OCP\Util::writeLog('contacts', 'getContactVCard, Missing N field', OCP\Util::DEBUG); - if($vcard->__isset('FN')) { - OCP\Util::writeLog('contacts', 'getContactVCard, found FN field: '.$vcard->__get('FN'), OCP\Util::DEBUG); - $n = implode(';', array_reverse(array_slice(explode(' ', $vcard->__get('FN')), 0, 2))).';;;'; - $vcard->setString('N', $n); - OC_Contacts_VCard::edit( $id, $vcard); - } else { // Else just add an empty 'N' field :-P - $vcard->setString('N', 'Unknown;Name;;;'); - } - } if (!is_null($vcard) && !isset($vcard->REV)) { $rev = new DateTime('@'.$card['lastmodified']); $vcard->setString('REV', $rev->format(DateTime::W3C)); @@ -112,29 +103,29 @@ class OC_Contacts_App { public static function getTypesOfProperty($prop) { $l = self::$l10n; switch($prop) { - case 'ADR': - return array( - 'WORK' => $l->t('Work'), - 'HOME' => $l->t('Home'), - ); - case 'TEL': - return array( - 'HOME' => $l->t('Home'), - 'CELL' => $l->t('Mobile'), - 'WORK' => $l->t('Work'), - 'TEXT' => $l->t('Text'), - 'VOICE' => $l->t('Voice'), - 'MSG' => $l->t('Message'), - 'FAX' => $l->t('Fax'), - 'VIDEO' => $l->t('Video'), - 'PAGER' => $l->t('Pager'), - ); - case 'EMAIL': - return array( - 'WORK' => $l->t('Work'), - 'HOME' => $l->t('Home'), - 'INTERNET' => $l->t('Internet'), - ); + case 'ADR': + return array( + 'WORK' => $l->t('Work'), + 'HOME' => $l->t('Home'), + ); + case 'TEL': + return array( + 'HOME' => $l->t('Home'), + 'CELL' => $l->t('Mobile'), + 'WORK' => $l->t('Work'), + 'TEXT' => $l->t('Text'), + 'VOICE' => $l->t('Voice'), + 'MSG' => $l->t('Message'), + 'FAX' => $l->t('Fax'), + 'VIDEO' => $l->t('Video'), + 'PAGER' => $l->t('Pager'), + ); + case 'EMAIL': + return array( + 'WORK' => $l->t('Work'), + 'HOME' => $l->t('Home'), + 'INTERNET' => $l->t('Internet'), + ); } } @@ -144,11 +135,13 @@ class OC_Contacts_App { */ protected static function getVCategories() { if (is_null(self::$categories)) { - self::$categories = new OC_VCategories('contacts', null, self::getDefaultCategories()); + self::$categories = new OC_VCategories('contacts', + null, + self::getDefaultCategories()); } return self::$categories; } - + /** * @brief returns the categories for the user * @return (Array) $categories @@ -185,7 +178,7 @@ class OC_Contacts_App { (string)self::$l10n->t('Work'), ); } - + /** * scan vcards for categories. * @param $vccontacts VCards to scan. null to check all vcards for the current user. @@ -200,14 +193,20 @@ class OC_Contacts_App { } $start = 0; $batchsize = 10; - while($vccontacts = OC_Contacts_VCard::all($vcaddressbookids, $start, $batchsize)){ + while($vccontacts = + OC_Contacts_VCard::all($vcaddressbookids, $start, $batchsize)) { $cards = array(); foreach($vccontacts as $vccontact) { $cards[] = $vccontact['carddata']; } - OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', scanning: '.$batchsize.' starting from '.$start, OCP\Util::DEBUG); + OCP\Util::writeLog('contacts', + __CLASS__.'::'.__METHOD__ + .', scanning: '.$batchsize.' starting from '.$start, + OCP\Util::DEBUG); // only reset on first batch. - self::getVCategories()->rescan($cards, true, ($start == 0 ? true : false)); + self::getVCategories()->rescan($cards, + true, + ($start == 0 ? true : false)); $start += $batchsize; } } diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php index ca171e792fc..990e790c035 100644 --- a/apps/contacts/lib/vcard.php +++ b/apps/contacts/lib/vcard.php @@ -79,7 +79,7 @@ class OC_Contacts_VCard{ return false; } } else { - OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.'. Addressbook id(s) argument is empty: '. $id, OCP\Util::DEBUG); + OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.'. Addressbook id(s) argument is empty: '. print_r($id, true), OCP\Util::DEBUG); return false; } $cards = array(); @@ -129,7 +129,7 @@ class OC_Contacts_VCard{ return $result->fetchRow(); } - /** + /** * @brief Format property TYPE parameters for upgrading from v. 2.1 * @param $property Reference to a Sabre_VObject_Property. * In version 2.1 e.g. a phone can be formatted like: TEL;HOME;CELL:123456789 @@ -145,7 +145,7 @@ class OC_Contacts_VCard{ } } - /** + /** * @brief Decode properties for upgrading from v. 2.1 * @param $property Reference to a Sabre_VObject_Property. * The only encoding allowed in version 3.0 is 'b' for binary. All encoded strings diff --git a/apps/files/css/files.css b/apps/files/css/files.css index dc298e4d440..317c0b8a1e2 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -89,3 +89,4 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } #navigation>ul>li:first-child+li { padding-top:2.9em; } #scanning-message{ top:40%; left:40%; position:absolute; display:none; } +#notification span { cursor:pointer; font-weight:bold; margin-left:1em; }
\ No newline at end of file diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index d54dd466469..39e848cec80 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -172,6 +172,7 @@ FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){r }else{ FileList.do_delete(filename); } + $('.tipsy').remove(); }); FileActions.register('all','Rename', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename')},function(filename){ diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 3645258f98f..a414c5f8303 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -136,24 +136,39 @@ FileList={ event.stopPropagation(); event.preventDefault(); var newname=input.val(); - tr.attr('data-file',newname); - td.children('a.name').empty(); + if (newname != name) { + if ($('tr').filterAttr('data-file', newname).length > 0) { + $('#notification').html(newname+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>'); + $('#notification').data('oldName', name); + $('#notification').data('newName', newname); + $('#notification').fadeIn(); + newname = name; + } else { + $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) { + if (!result || result.status == 'error') { + OC.dialogs.alert(result.data.message, 'Error moving file'); + newname = name; + } + }); + } + + } + tr.attr('data-file', newname); var path = td.children('a.name').attr('href'); td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname))); - if(newname.indexOf('.')>0){ - basename=newname.substr(0,newname.lastIndexOf('.')); - }else{ - basename=newname; + if (newname.indexOf('.') > 0) { + var basename=newname.substr(0,newname.lastIndexOf('.')); + } else { + var basename=newname; } + td.children('a.name').empty(); var span=$('<span class="nametext"></span>'); span.text(basename); td.children('a.name').append(span); - if(newname.indexOf('.')>0){ + if (newname.indexOf('.') > 0) { span.append($('<span class="extension">'+newname.substr(newname.lastIndexOf('.'))+'</span>')); } - $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(){ - tr.data('renaming',false); - }); + tr.data('renaming',false); return false; }); input.click(function(event){ @@ -164,12 +179,64 @@ FileList={ form.trigger('submit'); }); }, + replace:function(oldName, newName) { + // Finish any existing actions + if (FileList.lastAction || !FileList.useUndo) { + FileList.lastAction(); + } + var tr = $('tr').filterAttr('data-file', oldName); + tr.hide(); + FileList.replaceCanceled = false; + FileList.replaceOldName = oldName; + FileList.replaceNewName = newName; + FileList.lastAction = function() { + FileList.finishReplace(); + }; + $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>'); + $('#notification').fadeIn(); + }, + finishReplace:function() { + if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) { + // Delete the file being replaced and rename the replacement + FileList.deleteCanceled = false; + FileList.deleteFiles = [FileList.replaceNewName]; + FileList.finishDelete(function() { + $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) { + if (result && result.status == 'success') { + var tr = $('tr').filterAttr('data-file', FileList.replaceOldName); + tr.attr('data-file', FileList.replaceNewName); + var td = tr.children('td.filename'); + td.children('a.name .span').text(FileList.replaceNewName); + var path = td.children('a.name').attr('href'); + td.children('a.name').attr('href', path.replace(encodeURIComponent(FileList.replaceOldName), encodeURIComponent(FileList.replaceNewName))); + if (FileList.replaceNewName.indexOf('.') > 0) { + var basename = FileList.replaceNewName.substr(0, FileList.replaceNewName.lastIndexOf('.')); + } else { + var basename = FileList.replaceNewName; + } + td.children('a.name').empty(); + var span = $('<span class="nametext"></span>'); + span.text(basename); + td.children('a.name').append(span); + if (FileList.replaceNewName.indexOf('.') > 0) { + span.append($('<span class="extension">'+FileList.replaceNewName.substr(FileList.replaceNewName.lastIndexOf('.'))+'</span>')); + } + tr.show(); + } else { + OC.dialogs.alert(result.data.message, 'Error moving file'); + } + FileList.replaceCanceled = true; + FileList.replaceOldName = null; + FileList.replaceNewName = null; + FileList.lastAction = null; + }}); + }, true); + } + }, do_delete:function(files){ - if(FileList.deleteFiles || !FileList.useUndo){//finish any ongoing deletes first - FileList.finishDelete(function(){ - FileList.do_delete(files); - }); - return; + // Finish any existing actions + if (FileList.lastAction || !FileList.useUndo) { + FileList.lastAction(); } if(files.substr){ files=[files]; @@ -183,8 +250,10 @@ FileList={ procesSelection(); FileList.deleteCanceled=false; FileList.deleteFiles=files; - $('#notification').text(t('files','undo deletion')); - $('#notification').data('deletefile',true); + FileList.lastAction = function() { + FileList.finishDelete(null, true); + }; + $('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>'); $('#notification').fadeIn(); }, finishDelete:function(ready,sync){ @@ -202,6 +271,7 @@ FileList={ }); FileList.deleteCanceled=true; FileList.deleteFiles=null; + FileList.lastAction = null; if(ready){ ready(); } @@ -214,20 +284,33 @@ FileList={ $(document).ready(function(){ $('#notification').hide(); - $('#notification').click(function(){ - if($('#notification').data('deletefile')) - { + $('#notification .undo').live('click', function(){ + if (FileList.deleteFiles) { $.each(FileList.deleteFiles,function(index,file){ $('tr').filterAttr('data-file',file).show(); -// alert(file); }); FileList.deleteCanceled=true; FileList.deleteFiles=null; + } else if (FileList.replaceOldName && FileList.replaceNewName) { + $('tr').filterAttr('data-file', FileList.replaceOldName).show(); + FileList.replaceCanceled = true; + FileList.replaceOldName = null; + FileList.replaceNewName = null; } $('#notification').fadeOut(); }); + $('#notification .replace').live('click', function() { + $('#notification').fadeOut('400', function() { + FileList.replace($('#notification').data('oldName'), $('#notification').data('newName')); + }); + }); + $('#notification .cancel').live('click', function() { + $('#notification').fadeOut(); + }); FileList.useUndo=('onbeforeunload' in window) $(window).bind('beforeunload', function (){ - FileList.finishDelete(null,true); + if (FileList.lastAction) { + FileList.lastAction(); + } }); }); diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php index 91e748e3002..52480ce7ff8 100644 --- a/apps/files/l10n/ar.php +++ b/apps/files/l10n/ar.php @@ -6,6 +6,7 @@ "No file was uploaded" => "لم يتم ترفيع أي من الملفات", "Missing a temporary folder" => "المجلد المؤقت غير موجود", "Files" => "الملفات", +"Delete" => "محذوف", "Size" => "حجم", "Modified" => "معدل", "Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها", @@ -16,7 +17,6 @@ "Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!", "Name" => "الاسم", "Download" => "تحميل", -"Delete" => "محذوف", "Upload too large" => "حجم الترفيع أعلى من المسموح", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم." ); diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php index 83b36087310..329f306d9e8 100644 --- a/apps/files/l10n/bg_BG.php +++ b/apps/files/l10n/bg_BG.php @@ -6,6 +6,7 @@ "No file was uploaded" => "Фахлът не бе качен", "Missing a temporary folder" => "Липсва временната папка", "Files" => "Файлове", +"Delete" => "Изтриване", "Size" => "Размер", "Modified" => "Променено", "Maximum upload size" => "Макс. размер за качване", @@ -13,7 +14,6 @@ "Nothing in here. Upload something!" => "Няма нищо, качете нещо!", "Name" => "Име", "Download" => "Изтегляне", -"Delete" => "Изтриване", "Upload too large" => "Файлът е прекалено голям", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файловете които се опитвате да качите са по-големи от позволеното за сървъра." ); diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index baa6b3b7d45..c23746ac5ac 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "S'ha perdut un fitxer temporal", "Failed to write to disk" => "Ha fallat en escriure al disc", "Files" => "Fitxers", +"Unshare" => "Deixa de compartir", +"Delete" => "Suprimeix", +"generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.", +"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes", +"Upload Error" => "Error en la pujada", +"Pending" => "Pendents", +"Upload cancelled." => "La pujada s'ha cancel·lat.", +"Invalid name, '/' is not allowed." => "El nom no és vàlid, no es permet '/'.", "Size" => "Mida", "Modified" => "Modificat", +"folder" => "carpeta", +"folders" => "carpetes", +"file" => "fitxer", +"files" => "fitxers", "File handling" => "Gestió de fitxers", "Maximum upload size" => "Mida màxima de pujada", "max. possible: " => "màxim possible:", @@ -26,7 +38,6 @@ "Name" => "Nom", "Share" => "Comparteix", "Download" => "Baixa", -"Delete" => "Suprimeix", "Upload too large" => "La pujada és massa gran", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor", "Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 9a4be26dadb..ddaf923d1bd 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Chybí adresář pro sočasné soubory", "Failed to write to disk" => "Zápis na disk se nezdařil", "Files" => "Soubory", +"Delete" => "Vymazat", +"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to chvíli trvat", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nemohu nahrát váš soubor neboť to je adresář a nebo má nulovou délku.", +"Upload Error" => "Chyba při nahrávání", +"Pending" => "Očekává se", +"Upload cancelled." => "Nahrávání zrušeno", +"Invalid name, '/' is not allowed." => "Špatné jméno, znak '/' není povolen", "Size" => "Velikost", "Modified" => "Změněno", +"folder" => "adresář", +"folders" => "adresáře", +"file" => "soubor", +"files" => "soubory", "File handling" => "Nastavení chování k souborům", "Maximum upload size" => "Maximální velikost ukládaných souborů", "max. possible: " => "největší možná:", @@ -26,7 +37,6 @@ "Name" => "Název", "Share" => "Sdílet", "Download" => "Stáhnout", -"Delete" => "Vymazat", "Upload too large" => "Příliš velký soubor", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte uložit, překračují maximální velikosti uploadu na tomto serveru.", "Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 3683ab8484d..d24e2a8dcb7 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Mangler en midlertidig mappe", "Failed to write to disk" => "Fejl ved skrivning til disk.", "Files" => "Filer", +"Delete" => "Slet", +"generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom", +"Upload Error" => "Fejl ved upload", +"Pending" => "Afventer", +"Upload cancelled." => "Upload afbrudt.", +"Invalid name, '/' is not allowed." => "Ugyldigt navn, '/' er ikke tilladt.", "Size" => "Størrelse", "Modified" => "Ændret", +"folder" => "mappe", +"folders" => "mapper", +"file" => "fil", +"files" => "filer", "File handling" => "Filhåndtering", "Maximum upload size" => "Maksimal upload-størrelse", "max. possible: " => "max. mulige: ", @@ -26,7 +37,6 @@ "Name" => "Navn", "Share" => "Del", "Download" => "Download", -"Delete" => "Slet", "Upload too large" => "Upload for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", "Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index 9c5310c43b8..ea7ffa5ac54 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -6,11 +6,23 @@ "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Temporärer Ordner fehlt.", "Failed to write to disk" => "Fehler beim Schreiben auf Festplatte", -"Files" => "Files", +"Files" => "Dateien", +"Unshare" => "Nicht mehr teilen", +"Delete" => "Löschen", +"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" => "Datei kann nicht hochgeladen werden da sie ein Verzeichniss ist oder 0 bytes hat.", +"Upload Error" => "Fehler beim Hochladen", +"Pending" => "Anstehend", +"Upload cancelled." => "Hochladen abgebrochen.", +"Invalid name, '/' is not allowed." => "Ungültiger Name, \"/\" ist nicht erlaubt.", "Size" => "Größe", "Modified" => "Bearbeitet", +"folder" => "Ordner", +"folders" => "Ordner", +"file" => "Datei", +"files" => "Dateien", "File handling" => "Dateibehandlung", -"Maximum upload size" => "Maximum upload size", +"Maximum upload size" => "Maximale Upload-Größe", "max. possible: " => "maximal möglich:", "Needed for multi-file and folder downloads." => "Für Mehrfachdateien- und Ordnerdownloads benötigt:", "Enable ZIP-download" => "ZIP-Download aktivieren", @@ -26,7 +38,6 @@ "Name" => "Name", "Share" => "Teilen", "Download" => "Herunterladen", -"Delete" => "Löschen", "Upload too large" => "Upload zu groß", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "Files are being scanned, please wait." => "Daten werden gescannt, bitte warten.", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 93be0246156..ce154bacb7f 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Λείπει ένας προσωρινός φάκελος", "Failed to write to disk" => "Η εγγραφή στο δίσκο απέτυχε", "Files" => "Αρχεία", +"Unshare" => "Ακύρωση Διαμοιρασμού", +"Delete" => "Διαγραφή", +"generating ZIP-file, it may take some time." => "παραγωγή αρχείου ZIP, ίσως διαρκέσει αρκετά.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην μεταφόρτωση του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes", +"Upload Error" => "Σφάλμα Μεταφόρτωσης", +"Pending" => "Εν αναμονή", +"Upload cancelled." => "Η μεταφόρτωση ακυρώθηκε.", +"Invalid name, '/' is not allowed." => "Μη έγκυρο όνομα, το '/' δεν επιτρέπεται.", "Size" => "Μέγεθος", "Modified" => "Τροποποιήθηκε", +"folder" => "φάκελος", +"folders" => "φάκελοι", +"file" => "αρχείο", +"files" => "αρχεία", "File handling" => "Διαχείριση αρχείων", "Maximum upload size" => "Μέγιστο μέγεθος μεταφόρτωσης", "max. possible: " => "μέγιστο δυνατό:", @@ -26,7 +38,6 @@ "Name" => "Όνομα", "Share" => "Διαμοίρασε", "Download" => "Λήψη", -"Delete" => "Διαγραφή", "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." => "Τα αρχεία ανιχνεύονται, παρακαλώ περιμένετε", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index 64c380d600f..fa9e5eca42b 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Mankas tempa dosierujo", "Failed to write to disk" => "Malsukcesis skribo al disko", "Files" => "Dosieroj", +"Delete" => "Forigi", +"generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo", +"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn", +"Upload Error" => "Alŝuta eraro", +"Pending" => "Traktotaj", +"Upload cancelled." => "La alŝuto nuliĝis.", +"Invalid name, '/' is not allowed." => "Nevalida nomo, “/” ne estas permesata.", "Size" => "Grando", "Modified" => "Modifita", +"folder" => "dosierujo", +"folders" => "dosierujoj", +"file" => "dosiero", +"files" => "dosieroj", "File handling" => "Dosieradministro", "Maximum upload size" => "Maksimuma alŝutogrando", "max. possible: " => "maks. ebla: ", @@ -26,7 +37,6 @@ "Name" => "Nomo", "Share" => "Kunhavigi", "Download" => "Elŝuti", -"Delete" => "Forigi", "Upload too large" => "Elŝuto tro larĝa", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.", "Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 67bfb4702e8..e1376aa42b1 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Falta un directorio temporal", "Failed to write to disk" => "La escritura en disco ha fallado", "Files" => "Archivos", +"Unshare" => "No compartir", +"Delete" => "Eliminado", +"generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.", +"Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes", +"Upload Error" => "Error al subir el archivo", +"Pending" => "Pendiente", +"Upload cancelled." => "Subida cancelada.", +"Invalid name, '/' is not allowed." => "Nombre no válido, '/' no está permitido.", "Size" => "Tamaño", "Modified" => "Modificado", +"folder" => "carpeta", +"folders" => "carpetas", +"file" => "archivo", +"files" => "archivos", "File handling" => "Tratamiento de archivos", "Maximum upload size" => "Tamaño máximo de subida", "max. possible: " => "máx. posible:", @@ -26,7 +38,6 @@ "Name" => "Nombre", "Share" => "Compartir", "Download" => "Descargar", -"Delete" => "Eliminado", "Upload too large" => "El archivo es demasiado grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.", "Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 89bb96581c9..a5dd345f8eb 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Ajutiste failide kaust puudub", "Failed to write to disk" => "Kettale kirjutamine ebaõnnestus", "Files" => "Failid", +"Delete" => "Kustuta", +"generating ZIP-file, it may take some time." => "ZIP-faili loomine, see võib veidi aega võtta.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti", +"Upload Error" => "Üleslaadimise viga", +"Pending" => "Ootel", +"Upload cancelled." => "Üleslaadimine tühistati.", +"Invalid name, '/' is not allowed." => "Vigane nimi, '/' pole lubatud.", "Size" => "Suurus", "Modified" => "Muudetud", +"folder" => "kaust", +"folders" => "kausta", +"file" => "fail", +"files" => "faili", "File handling" => "Failide käsitlemine", "Maximum upload size" => "Maksimaalne üleslaadimise suurus", "max. possible: " => "maks. võimalik: ", @@ -26,7 +37,6 @@ "Name" => "Nimi", "Share" => "Jaga", "Download" => "Lae alla", -"Delete" => "Kustuta", "Upload too large" => "Üleslaadimine on liiga suur", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.", "Files are being scanned, please wait." => "Faile skannitakse, palun oota", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index a7ca21f496b..588df210a1c 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Aldi baterako karpeta falta da", "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan", "Files" => "Fitxategiak", +"Delete" => "Ezabatu", +"generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake", +"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu", +"Upload Error" => "Igotzean errore bat suertatu da", +"Pending" => "Zain", +"Upload cancelled." => "Igoera ezeztatuta", +"Invalid name, '/' is not allowed." => "Baliogabeko izena, '/' ezin da erabili. ", "Size" => "Tamaina", "Modified" => "Aldatuta", +"folder" => "karpeta", +"folders" => "Karpetak", +"file" => "fitxategia", +"files" => "fitxategiak", "File handling" => "Fitxategien kudeaketa", "Maximum upload size" => "Igo daitekeen gehienezko tamaina", "max. possible: " => "max, posiblea:", @@ -26,7 +37,6 @@ "Name" => "Izena", "Share" => "Elkarbanatu", "Download" => "Deskargatu", -"Delete" => "Ezabatu", "Upload too large" => "Igotakoa handiegia da", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.", "Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.", diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php index 4bb46e1fcf9..77173d28364 100644 --- a/apps/files/l10n/fa.php +++ b/apps/files/l10n/fa.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "یک پوشه موقت گم شده است", "Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود", "Files" => "فایل ها", +"Delete" => "پاک کردن", +"generating ZIP-file, it may take some time." => "در حال ساخت فایل فشرده ممکن است زمان زیادی به طول بیانجامد", +"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد", +"Upload Error" => "خطا در بار گذاری", +"Pending" => "در انتظار", +"Upload cancelled." => "بار گذاری لغو شد", +"Invalid name, '/' is not allowed." => "نام نامناسب '/' غیرفعال است", "Size" => "اندازه", "Modified" => "تغییر یافته", +"folder" => "پوشه", +"folders" => "پوشه ها", +"file" => "پرونده", +"files" => "پرونده ها", "File handling" => "اداره پرونده ها", "Maximum upload size" => "حداکثر اندازه بارگزاری", "max. possible: " => "حداکثرمقدارممکن:", @@ -26,7 +37,6 @@ "Name" => "نام", "Share" => "به اشتراک گذاری", "Download" => "بارگیری", -"Delete" => "پاک کردن", "Upload too large" => "حجم بارگذاری بسیار زیاد است", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد", "Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند لطفا صبر کنید", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index c99d4408f60..1b1cfd394cc 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa", "Failed to write to disk" => "Levylle kirjoitus epäonnistui", "Files" => "Tiedostot", +"Unshare" => "Lopeta jakaminen", +"Delete" => "Poista", +"generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio", +"Upload Error" => "Lähetysvirhe.", +"Pending" => "Odottaa", +"Upload cancelled." => "Lähetys peruttu.", +"Invalid name, '/' is not allowed." => "Virheellinen nimi, merkki '/' ei ole sallittu.", "Size" => "Koko", "Modified" => "Muutettu", +"folder" => "kansio", +"folders" => "kansiota", +"file" => "tiedosto", +"files" => "tiedostoa", "File handling" => "Tiedostonhallinta", "Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko", "Needed for multi-file and folder downloads." => "Tarvitaan useampien tiedostojen ja kansioiden latausta varten.", @@ -25,7 +37,6 @@ "Name" => "Nimi", "Share" => "Jaa", "Download" => "Lataa", -"Delete" => "Poista", "Upload too large" => "Lähetettävä tiedosto on liian suuri", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.", "Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki." diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index ab2f4ea13df..ca3d03ad6f7 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Il manque un répertoire temporaire", "Failed to write to disk" => "Erreur d'écriture sur le disque", "Files" => "Fichiers", +"Unshare" => "Ne plus partager", +"Delete" => "Supprimer", +"generating ZIP-file, it may take some time." => "Générer un fichier ZIP, cela peut prendre du temps", +"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.", +"Upload Error" => "Erreur de chargement", +"Pending" => "En cours", +"Upload cancelled." => "Chargement annulé", +"Invalid name, '/' is not allowed." => "Nom invalide, '/' n'est pas autorisé.", "Size" => "Taille", "Modified" => "Modifié", +"folder" => "dossier", +"folders" => "dossiers", +"file" => "fichier", +"files" => "fichiers", "File handling" => "Gestion des fichiers", "Maximum upload size" => "Taille max. d'envoi", "max. possible: " => "Max. possible :", @@ -26,7 +38,6 @@ "Name" => "Nom", "Share" => "Partager", "Download" => "Téléchargement", -"Delete" => "Supprimer", "Upload too large" => "Fichier trop volumineux", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.", "Files are being scanned, please wait." => "Les fichiers sont analysés, patientez svp.", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 36eafaefe27..cbbd65217b8 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Falta un cartafol temporal", "Failed to write to disk" => "Erro ao escribir no disco", "Files" => "Ficheiros", +"Delete" => "Eliminar", +"generating ZIP-file, it may take some time." => "xerando ficheiro ZIP, 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", +"Upload Error" => "Erro na subida", +"Pending" => "Pendentes", +"Upload cancelled." => "Subida cancelada.", +"Invalid name, '/' is not allowed." => "Nome non válido, '/' non está permitido.", "Size" => "Tamaño", "Modified" => "Modificado", +"folder" => "cartafol", +"folders" => "cartafoles", +"file" => "ficheiro", +"files" => "ficheiros", "File handling" => "Manexo de ficheiro", "Maximum upload size" => "Tamaño máximo de envío", "max. possible: " => "máx. posible: ", @@ -26,7 +37,6 @@ "Name" => "Nome", "Share" => "Compartir", "Download" => "Descargar", -"Delete" => "Eliminar", "Upload too large" => "Envío demasiado grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor", "Files are being scanned, please wait." => "Estanse analizando os ficheiros, espere por favor.", diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php index 0876eb952c7..65d093e3662 100644 --- a/apps/files/l10n/he.php +++ b/apps/files/l10n/he.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "תיקייה זמנית חסרה", "Failed to write to disk" => "הכתיבה לכונן נכשלה", "Files" => "קבצים", +"Delete" => "מחיקה", +"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" => "שגיאת העלאה", +"Pending" => "ממתין", +"Upload cancelled." => "ההעלאה בוטלה.", +"Invalid name, '/' is not allowed." => "שם לא חוקי, '/' אסור לשימוש.", "Size" => "גודל", "Modified" => "זמן שינוי", +"folder" => "תקיה", +"folders" => "תקיות", +"file" => "קובץ", +"files" => "קבצים", "File handling" => "טיפול בקבצים", "Maximum upload size" => "גודל העלאה מקסימלי", "max. possible: " => "המרבי האפשרי: ", @@ -26,7 +37,6 @@ "Name" => "שם", "Share" => "שיתוף", "Download" => "הורדה", -"Delete" => "מחיקה", "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." => "הקבצים נסרקים, נא להמתין.", diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php index 3281d20a61d..7d5e61b3542 100644 --- a/apps/files/l10n/hr.php +++ b/apps/files/l10n/hr.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Nedostaje privremena mapa", "Failed to write to disk" => "Neuspjelo pisanje na disk", "Files" => "Datoteke", +"Delete" => "Briši", +"generating ZIP-file, it may take some time." => "generiranje ZIP datoteke, ovo može potrajati.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij", +"Upload Error" => "Pogreška pri slanju", +"Pending" => "U tijeku", +"Upload cancelled." => "Slanje poništeno.", +"Invalid name, '/' is not allowed." => "Neispravan naziv, znak '/' nije dozvoljen.", "Size" => "Veličina", "Modified" => "Zadnja promjena", +"folder" => "mapa", +"folders" => "mape", +"file" => "datoteka", +"files" => "datoteke", "File handling" => "datoteka za rukovanje", "Maximum upload size" => "Maksimalna veličina prijenosa", "max. possible: " => "maksimalna moguća: ", @@ -26,7 +37,6 @@ "Name" => "Naziv", "Share" => "podjeli", "Download" => "Preuzmi", -"Delete" => "Briši", "Upload too large" => "Prijenos je preobiman", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju.", "Files are being scanned, please wait." => "Datoteke se skeniraju, molimo pričekajte.", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index 41255cb4096..22d39585167 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Hiányzik az ideiglenes könyvtár", "Failed to write to disk" => "Nem írható lemezre", "Files" => "Fájlok", +"Delete" => "Törlés", +"generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű", +"Upload Error" => "Feltöltési hiba", +"Pending" => "Folyamatban", +"Upload cancelled." => "Feltöltés megszakítva", +"Invalid name, '/' is not allowed." => "Érvénytelen név, a '/' nem megengedett", "Size" => "Méret", "Modified" => "Módosítva", +"folder" => "mappa", +"folders" => "mappák", +"file" => "fájl", +"files" => "fájlok", "File handling" => "Fájlkezelés", "Maximum upload size" => "Maximális feltölthető fájlméret", "max. possible: " => "max. lehetséges", @@ -26,7 +37,6 @@ "Name" => "Név", "Share" => "Megosztás", "Download" => "Letöltés", -"Delete" => "Törlés", "Upload too large" => "Feltöltés túl nagy", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen a szerveren.", "Files are being scanned, please wait." => "File-ok vizsgálata, kis türelmet", diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php index 645eba48a18..f9205cb5f64 100644 --- a/apps/files/l10n/ia.php +++ b/apps/files/l10n/ia.php @@ -2,6 +2,7 @@ "The uploaded file was only partially uploaded" => "Le file incargate solmente esseva incargate partialmente", "No file was uploaded" => "Nulle file esseva incargate", "Files" => "Files", +"Delete" => "Deler", "Size" => "Dimension", "Modified" => "Modificate", "Maximum upload size" => "Dimension maxime de incargamento", @@ -12,6 +13,5 @@ "Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!", "Name" => "Nomine", "Download" => "Discargar", -"Delete" => "Deler", "Upload too large" => "Incargamento troppo longe" ); diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php index 1f9dc3290aa..47ce6429c9f 100644 --- a/apps/files/l10n/id.php +++ b/apps/files/l10n/id.php @@ -5,6 +5,7 @@ "Missing a temporary folder" => "Kehilangan folder temporer", "Failed to write to disk" => "Gagal menulis ke disk", "Files" => "Berkas", +"Delete" => "Hapus", "Size" => "Ukuran", "Modified" => "Dimodifikasi", "File handling" => "Penanganan berkas", @@ -24,7 +25,6 @@ "Name" => "Nama", "Share" => "Bagikan", "Download" => "Unduh", -"Delete" => "Hapus", "Upload too large" => "Unggahan terlalu besar", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini.", "Files are being scanned, please wait." => "Berkas sedang dipindai, silahkan tunggu.", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 82871826c18..35ee7a5fdd1 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Cartella temporanea mancante", "Failed to write to disk" => "Scrittura su disco non riuscita", "Files" => "File", +"Unshare" => "Rimuovi condivisione", +"Delete" => "Elimina", +"generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte", +"Upload Error" => "Errore di invio", +"Pending" => "In corso", +"Upload cancelled." => "Invio annullato", +"Invalid name, '/' is not allowed." => "Nome non valido", "Size" => "Dimensione", "Modified" => "Modificato", +"folder" => "cartella", +"folders" => "cartelle", +"file" => "file", +"files" => "file", "File handling" => "Gestione file", "Maximum upload size" => "Dimensione massima upload", "max. possible: " => "numero mass.: ", @@ -26,7 +38,6 @@ "Name" => "Nome", "Share" => "Condividi", "Download" => "Scarica", -"Delete" => "Elimina", "Upload too large" => "Il file caricato è troppo grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.", "Files are being scanned, please wait." => "Scansione dei file in corso, attendi", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index c04d0836dfb..231bbe3dcb5 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "テンポラリフォルダが見つかりません", "Failed to write to disk" => "ディスクへの書き込みに失敗しました", "Files" => "ファイル", +"Delete" => "削除", +"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" => "アップロードエラー", +"Pending" => "保留", +"Upload cancelled." => "アップロードはキャンセルされました。", +"Invalid name, '/' is not allowed." => "無効な名前、'/' は使用できません。", "Size" => "サイズ", "Modified" => "更新日時", +"folder" => "フォルダ", +"folders" => "フォルダ", +"file" => "ファイル", +"files" => "ファイル", "File handling" => "ファイル操作", "Maximum upload size" => "最大アップロードサイズ", "max. possible: " => "最大容量: ", @@ -26,7 +37,6 @@ "Name" => "名前", "Share" => "共有", "Download" => "ダウンロード", -"Delete" => "削除", "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." => "ファイルをスキャンしています、しばらくお待ちください。", diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index 70575f0975d..218dd0ea2d7 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -7,8 +7,18 @@ "Missing a temporary folder" => "임시 폴더가 사라짐", "Failed to write to disk" => "디스크에 쓰지 못했습니다", "Files" => "파일", +"Delete" => "삭제", +"generating ZIP-file, it may take some time." => "ZIP파일 생성에 시간이 걸릴 수 있습니다.", +"Upload Error" => "업로드 에러", +"Pending" => "보류 중", +"Upload cancelled." => "업로드 취소.", +"Invalid name, '/' is not allowed." => "잘못된 이름, '/' 은 허용이 되지 않습니다.", "Size" => "크기", "Modified" => "수정됨", +"folder" => "폴더", +"folders" => "폴더", +"file" => "파일", +"files" => "파일", "File handling" => "파일 처리", "Maximum upload size" => "최대 업로드 크기", "max. possible: " => "최대. 가능한:", @@ -26,7 +36,6 @@ "Name" => "이름", "Share" => "공유", "Download" => "다운로드", -"Delete" => "삭제", "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." => "파일을 검색중입니다, 기다려 주십시오.", diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php index 548ef4895d4..f7a10fbc5cd 100644 --- a/apps/files/l10n/lb.php +++ b/apps/files/l10n/lb.php @@ -7,6 +7,7 @@ "Missing a temporary folder" => "Et feelt en temporären Dossier", "Failed to write to disk" => "Konnt net op den Disk schreiwen", "Files" => "Dateien", +"Delete" => "Läschen", "Size" => "Gréisst", "Modified" => "Geännert", "File handling" => "Fichier handling", @@ -26,7 +27,6 @@ "Name" => "Numm", "Share" => "Share", "Download" => "Eroflueden", -"Delete" => "Läschen", "Upload too large" => "Upload ze grouss", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.", "Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.", diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php index e876e743a48..14c7a1a6ff6 100644 --- a/apps/files/l10n/lt_LT.php +++ b/apps/files/l10n/lt_LT.php @@ -7,9 +7,22 @@ "Missing a temporary folder" => "Nėra laikinojo katalogo", "Failed to write to disk" => "Nepavyko įrašyti į diską", "Files" => "Failai", +"Delete" => "Ištrinti", +"generating ZIP-file, it may take some time." => "kuriamas ZIP archyvas, tai gali užtrukti šiek tiek laiko.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas", +"Upload Error" => "Įkėlimo klaida", +"Upload cancelled." => "Įkėlimas atšauktas.", +"Invalid name, '/' is not allowed." => "Pavadinime negali būti naudojamas ženklas \"/\".", "Size" => "Dydis", "Modified" => "Pakeista", +"folder" => "katalogas", +"folders" => "katalogai", +"file" => "failas", +"files" => "failai", "Maximum upload size" => "Maksimalus failo dydis", +"Enable ZIP-download" => "Įjungti atsisiuntimą ZIP archyvu", +"0 is unlimited" => "0 yra neribotas", +"Maximum input size for ZIP files" => "Maksimalus ZIP archyvo failo dydis", "New" => "Naujas", "Text file" => "Teksto failas", "Folder" => "Katalogas", @@ -20,7 +33,8 @@ "Name" => "Pavadinimas", "Share" => "Dalintis", "Download" => "Atsisiųsti", -"Delete" => "Ištrinti", "Upload too large" => "Įkėlimui failas per didelis", -"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje" +"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje", +"Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.", +"Current scanning" => "Šiuo metu skenuojama" ); diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php new file mode 100644 index 00000000000..3fa3246d7ca --- /dev/null +++ b/apps/files/l10n/lv.php @@ -0,0 +1,21 @@ +<?php $TRANSLATIONS = array( +"Files" => "Faili", +"Unshare" => "Pārtraukt līdzdalīšanu", +"Delete" => "Izdzēst", +"Upload Error" => "Augšuplādēšanas laikā radās kļūda", +"Pending" => "Gaida savu kārtu", +"Upload cancelled." => "Augšuplāde ir atcelta", +"Invalid name, '/' is not allowed." => "Šis simbols '/', nav atļauts.", +"Size" => "Izmērs", +"Modified" => "Izmainīts", +"folder" => "mape", +"folders" => "mapes", +"file" => "fails", +"files" => "faili", +"Maximum upload size" => "Maksimālais failu augšuplādes apjoms", +"Upload" => "Augšuplādet", +"Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšuplādēt", +"Name" => "Nosaukums", +"Download" => "Lejuplādēt", +"Upload too large" => "Fails ir par lielu lai to augšuplādetu" +); diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php index d3efa4d0225..4e1eccff255 100644 --- a/apps/files/l10n/mk.php +++ b/apps/files/l10n/mk.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Не постои привремена папка", "Failed to write to disk" => "Неуспеав да запишам на диск", "Files" => "Датотеки", +"Delete" => "Избриши", +"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" => "Грешка при преземање", +"Pending" => "Чека", +"Upload cancelled." => "Преземањето е прекинато.", +"Invalid name, '/' is not allowed." => "неисправно име, '/' не е дозволено.", "Size" => "Големина", "Modified" => "Променето", +"folder" => "фолдер", +"folders" => "фолдери", +"file" => "датотека", +"files" => "датотеки", "File handling" => "Ракување со датотеки", "Maximum upload size" => "Максимална големина за подигање", "max. possible: " => "макс. можно:", @@ -26,7 +37,6 @@ "Name" => "Име", "Share" => "Сподели", "Download" => "Преземи", -"Delete" => "Избриши", "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." => "Се скенираат датотеки, ве молам почекајте.", diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php index 1a1d72a01b6..f0870c79ed7 100644 --- a/apps/files/l10n/ms_MY.php +++ b/apps/files/l10n/ms_MY.php @@ -5,18 +5,40 @@ "The uploaded file was only partially uploaded" => "Sebahagian daripada fail telah dimuat naik. ", "No file was uploaded" => "Tiada fail yang dimuat naik", "Missing a temporary folder" => "Folder sementara hilang", +"Failed to write to disk" => "Gagal untuk disimpan", "Files" => "fail", +"Delete" => "Padam", +"generating ZIP-file, it may take some time." => "sedang menghasilkan fail ZIP, mungkin mengambil sedikit masa.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes", +"Upload Error" => "Muat naik ralat", +"Pending" => "Dalam proses", +"Upload cancelled." => "Muatnaik dibatalkan.", +"Invalid name, '/' is not allowed." => "penggunaa nama tidak sah, '/' tidak dibenarkan.", "Size" => "Saiz", "Modified" => "Dimodifikasi", +"folder" => "direktori", +"folders" => "direktori", +"file" => "fail", +"files" => "fail", +"File handling" => "Pengendalian fail", "Maximum upload size" => "Saiz maksimum muat naik", +"max. possible: " => "maksimum:", +"Needed for multi-file and folder downloads." => "Diperlukan untuk muatturun fail pelbagai ", +"Enable ZIP-download" => "Aktifkan muatturun ZIP", +"0 is unlimited" => "0 adalah tanpa had", +"Maximum input size for ZIP files" => "Saiz maksimum input untuk fail ZIP", "New" => "Baru", "Text file" => "Fail teks", "Folder" => "Folder", +"From url" => "Dari url", "Upload" => "Muat naik", +"Cancel upload" => "Batal muat naik", "Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!", "Name" => "Nama ", +"Share" => "Kongsi", "Download" => "Muat turun", -"Delete" => "Padam", "Upload too large" => "Muat naik terlalu besar", -"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server" +"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server", +"Files are being scanned, please wait." => "Fail sedang diimbas, harap bersabar.", +"Current scanning" => "Imbasan semasa" ); diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index 0f4cc33ae38..f02de12615a 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -7,8 +7,15 @@ "Missing a temporary folder" => "Mangler en midlertidig mappe", "Failed to write to disk" => "Klarte ikke å skrive til disk", "Files" => "Filer", +"Delete" => "Slett", +"generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid", +"Pending" => "Ventende", "Size" => "Størrelse", "Modified" => "Endret", +"folder" => "mappe", +"folders" => "mapper", +"file" => "fil", +"files" => "filer", "File handling" => "Filhåndtering", "Maximum upload size" => "Maksimum opplastingsstørrelse", "max. possible: " => "max. mulige:", @@ -26,7 +33,6 @@ "Name" => "Navn", "Share" => "Del", "Download" => "Last ned", -"Delete" => "Slett", "Upload too large" => "Opplasting for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.", "Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index 119f6034f15..b093dc3ce12 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Een tijdelijke map mist", "Failed to write to disk" => "Schrijven naar schijf mislukt", "Files" => "Bestanden", +"Delete" => "Verwijder", +"generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.", +"Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes", +"Upload Error" => "Upload Fout", +"Pending" => "Wachten", +"Upload cancelled." => "Uploaden geannuleerd.", +"Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.", "Size" => "Bestandsgrootte", "Modified" => "Laatst aangepast", +"folder" => "map", +"folders" => "mappen", +"file" => "bestand", +"files" => "bestanden", "File handling" => "Bestand", "Maximum upload size" => "Maximale bestandsgrootte voor uploads", "max. possible: " => "max. mogelijk: ", @@ -26,7 +37,6 @@ "Name" => "Naam", "Share" => "Delen", "Download" => "Download", -"Delete" => "Verwijder", "Upload too large" => "Bestanden te groot", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.", "Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.", diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php index 002e85de5cc..d6af7302494 100644 --- a/apps/files/l10n/nn_NO.php +++ b/apps/files/l10n/nn_NO.php @@ -6,6 +6,7 @@ "No file was uploaded" => "Ingen filer vart lasta opp", "Missing a temporary folder" => "Manglar ei mellombels mappe", "Files" => "Filer", +"Delete" => "Slett", "Size" => "Storleik", "Modified" => "Endra", "Maximum upload size" => "Maksimal opplastingsstorleik", @@ -16,7 +17,6 @@ "Nothing in here. Upload something!" => "Ingenting her. Last noko opp!", "Name" => "Namn", "Download" => "Last ned", -"Delete" => "Slett", "Upload too large" => "For stor opplasting", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren." ); diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index bfdd04659dd..67a29b46613 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Brak katalogu tymczasowego", "Failed to write to disk" => "Błąd zapisu na dysk", "Files" => "Pliki", +"Delete" => "Usuwa element", +"generating ZIP-file, it may take some time." => "Generowanie pliku ZIP, może potrwać pewien czas.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów", +"Upload Error" => "Błąd wczytywania", +"Pending" => "Oczekujące", +"Upload cancelled." => "Wczytywanie anulowane.", +"Invalid name, '/' is not allowed." => "Nieprawidłowa nazwa '/' jest niedozwolone.", "Size" => "Rozmiar", "Modified" => "Czas modyfikacji", +"folder" => "folder", +"folders" => "foldery", +"file" => "plik", +"files" => "pliki", "File handling" => "Zarządzanie plikami", "Maximum upload size" => "Maksymalny rozmiar wysyłanego pliku", "max. possible: " => "max. możliwych", @@ -26,7 +37,6 @@ "Name" => "Nazwa", "Share" => "Współdziel", "Download" => "Pobiera element", -"Delete" => "Usuwa element", "Upload too large" => "Wysyłany plik ma za duży rozmiar", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość.", "Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index b70406f5171..b783c37cb03 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Pasta temporária não encontrada", "Failed to write to disk" => "Falha ao escrever no disco", "Files" => "Arquivos", +"Delete" => "Excluir", +"generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", +"Upload Error" => "Erro de envio", +"Pending" => "Pendente", +"Upload cancelled." => "Envio cancelado.", +"Invalid name, '/' is not allowed." => "Nome inválido, '/' não é permitido.", "Size" => "Tamanho", "Modified" => "Modificado", +"folder" => "pasta", +"folders" => "pastas", +"file" => "arquivo", +"files" => "arquivos", "File handling" => "Tratamento de Arquivo", "Maximum upload size" => "Tamanho máximo para carregar", "max. possible: " => "max. possível:", @@ -26,7 +37,6 @@ "Name" => "Nome", "Share" => "Compartilhar", "Download" => "Baixar", -"Delete" => "Excluir", "Upload too large" => "Arquivo muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.", "Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index ac224302825..6e5ffce797e 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Falta uma pasta temporária", "Failed to write to disk" => "Falhou a escrita no disco", "Files" => "Ficheiros", +"Delete" => "Apagar", +"generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes", +"Upload Error" => "Erro no upload", +"Pending" => "Pendente", +"Upload cancelled." => "O upload foi cancelado.", +"Invalid name, '/' is not allowed." => "nome inválido, '/' não permitido.", "Size" => "Tamanho", "Modified" => "Modificado", +"folder" => "pasta", +"folders" => "pastas", +"file" => "ficheiro", +"files" => "ficheiros", "File handling" => "Manuseamento de ficheiros", "Maximum upload size" => "Tamanho máximo de envio", "max. possible: " => "max. possivel: ", @@ -26,7 +37,6 @@ "Name" => "Nome", "Share" => "Partilhar", "Download" => "Transferir", -"Delete" => "Apagar", "Upload too large" => "Envio muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que estás a tentar enviar excedem o tamanho máximo de envio neste servidor.", "Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.", diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php index e6f0294fd3f..58a6d2454f5 100644 --- a/apps/files/l10n/ro.php +++ b/apps/files/l10n/ro.php @@ -7,6 +7,7 @@ "Missing a temporary folder" => "Lipsește un dosar temporar", "Failed to write to disk" => "Eroare la scriere pe disc", "Files" => "Fișiere", +"Delete" => "Șterge", "Size" => "Dimensiune", "Modified" => "Modificat", "File handling" => "Manipulare fișiere", @@ -26,7 +27,6 @@ "Name" => "Nume", "Share" => "Partajează", "Download" => "Descarcă", -"Delete" => "Șterge", "Upload too large" => "Fișierul încărcat este prea mare", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server.", "Files are being scanned, please wait." => "Fișierele sunt scanate, te rog așteptă.", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index 45648012a14..99bb6df8f87 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Невозможно найти временную папку", "Failed to write to disk" => "Ошибка записи на диск", "Files" => "Файлы", +"Delete" => "Удалить", +"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" => "Ошибка загрузки", +"Pending" => "Ожидание", +"Upload cancelled." => "Загрузка отменена.", +"Invalid name, '/' is not allowed." => "Неверное имя, '/' не допускается.", "Size" => "Размер", "Modified" => "Изменен", +"folder" => "папка", +"folders" => "папки", +"file" => "файл", +"files" => "файлы", "File handling" => "Управление файлами", "Maximum upload size" => "Максимальный размер файла", "max. possible: " => "макс. возможно: ", @@ -26,7 +37,6 @@ "Name" => "Название", "Share" => "Поделиться", "Download" => "Скачать", -"Delete" => "Удалить", "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." => "Подождите, файлы сканируются.", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index 2a7e84af6c4..8a31c550320 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Chýbajúci dočasný priečinok", "Failed to write to disk" => "Zápis na disk sa nepodaril", "Files" => "Súbory", +"Delete" => "Odstrániť", +"generating ZIP-file, it may take some time." => "generujem ZIP-súbor, môže to chvíľu trvať.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov.", +"Upload Error" => "Chyba nahrávania", +"Pending" => "Čaká sa", +"Upload cancelled." => "Nahrávanie zrušené", +"Invalid name, '/' is not allowed." => "Chybný názov, \"/\" nie je povolené", "Size" => "Veľkosť", "Modified" => "Upravené", +"folder" => "priečinok", +"folders" => "priečinky", +"file" => "súbor", +"files" => "súbory", "File handling" => "Nastavenie správanie k súborom", "Maximum upload size" => "Maximálna veľkosť nahratia", "max. possible: " => "najväčšie možné:", @@ -26,7 +37,6 @@ "Name" => "Meno", "Share" => "Zdielať", "Download" => "Stiahnuť", -"Delete" => "Odstrániť", "Upload too large" => "Nahrávanie príliš veľké", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie súborov na tento server.", "Files are being scanned, please wait." => "Súbory sa práve prehľadávajú, prosím čakajte.", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index b0ea2dc373c..a4f3b578885 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Manjka začasna mapa", "Failed to write to disk" => "Pisanje na disk je spodletelo", "Files" => "Datoteke", +"Unshare" => "Vzemi iz souporabe", +"Delete" => "Izbriši", +"generating ZIP-file, it may take some time." => "Ustvarjam ZIP datoteko. To lahko traja nekaj časa.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Nalaganje ni mogoče, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov.", +"Upload Error" => "Napaka pri nalaganju", +"Pending" => "Na čakanju", +"Upload cancelled." => "Nalaganje je bilo preklicano.", +"Invalid name, '/' is not allowed." => "Neveljavno ime. Znak '/' ni dovoljen.", "Size" => "Velikost", "Modified" => "Spremenjeno", +"folder" => "mapa", +"folders" => "mape", +"file" => "datoteka", +"files" => "datoteke", "File handling" => "Rokovanje z datotekami", "Maximum upload size" => "Največja velikost za nalaganje", "max. possible: " => "največ mogoče:", @@ -26,7 +38,6 @@ "Name" => "Ime", "Share" => "Souporaba", "Download" => "Prejmi", -"Delete" => "Izbriši", "Upload too large" => "Nalaganje ni mogoče, ker je preveliko", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo največjo dovoljeno velikost na tem strežniku.", "Files are being scanned, please wait." => "Preiskujem datoteke, prosimo počakajte.", diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php index 68c50d5282a..84164e25c62 100644 --- a/apps/files/l10n/sr.php +++ b/apps/files/l10n/sr.php @@ -6,6 +6,7 @@ "No file was uploaded" => "Ниједан фајл није послат", "Missing a temporary folder" => "Недостаје привремена фасцикла", "Files" => "Фајлови", +"Delete" => "Обриши", "Size" => "Величина", "Modified" => "Задња измена", "Maximum upload size" => "Максимална величина пошиљке", @@ -16,7 +17,6 @@ "Nothing in here. Upload something!" => "Овде нема ничег. Пошаљите нешто!", "Name" => "Име", "Download" => "Преузми", -"Delete" => "Обриши", "Upload too large" => "Пошиљка је превелика", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Фајлови које желите да пошаљете превазилазе ограничење максималне величине пошиљке на овом серверу." ); diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php index 63843fc8b55..96c567aec41 100644 --- a/apps/files/l10n/sr@latin.php +++ b/apps/files/l10n/sr@latin.php @@ -6,6 +6,7 @@ "No file was uploaded" => "Nijedan fajl nije poslat", "Missing a temporary folder" => "Nedostaje privremena fascikla", "Files" => "Fajlovi", +"Delete" => "Obriši", "Size" => "Veličina", "Modified" => "Zadnja izmena", "Maximum upload size" => "Maksimalna veličina pošiljke", @@ -13,7 +14,6 @@ "Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!", "Name" => "Ime", "Download" => "Preuzmi", -"Delete" => "Obriši", "Upload too large" => "Pošiljka je prevelika", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru." ); diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index f508f22f3cf..f3d936ff845 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -7,8 +7,20 @@ "Missing a temporary folder" => "Saknar en tillfällig mapp", "Failed to write to disk" => "Misslyckades spara till disk", "Files" => "Filer", +"Unshare" => "Sluta dela", +"Delete" => "Ta bort", +"generating ZIP-file, it may take some time." => "Gererar ZIP-fil. Det kan ta lite tid.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.", +"Upload Error" => "Uppladdningsfel", +"Pending" => "Väntar", +"Upload cancelled." => "Uppladdning avbruten.", +"Invalid name, '/' is not allowed." => "Ogiltigt namn, '/' är inte tillåten.", "Size" => "Storlek", "Modified" => "Ändrad", +"folder" => "mapp", +"folders" => "mappar", +"file" => "fil", +"files" => "filer", "File handling" => "Filhantering", "Maximum upload size" => "Maximal storlek att ladda upp", "max. possible: " => "max. möjligt:", @@ -26,7 +38,6 @@ "Name" => "Namn", "Share" => "Dela", "Download" => "Ladda ned", -"Delete" => "Ta bort", "Upload too large" => "För stor uppladdning", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", "Files are being scanned, please wait." => "Filerna skannas, var god vänta", diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index ec538262e02..4299c31a45a 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย", "Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว", "Files" => "ไฟล์", +"Delete" => "ลบ", +"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" => "เกิดข้อผิดพลาดในการอัพโหลด", +"Pending" => "อยู่ระหว่างดำเนินการ", +"Upload cancelled." => "การอัพโหลดถูกยกเลิก", +"Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง '/' ไม่อนุญาตให้ใช้งาน", "Size" => "ขนาด", "Modified" => "ปรับปรุงล่าสุด", +"folder" => "โฟลเดอร์", +"folders" => "โฟลเดอร์", +"file" => "ไฟล์", +"files" => "ไฟล์", "File handling" => "การจัดกาไฟล์", "Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้", "max. possible: " => "จำนวนสูงสุดที่สามารถทำได้: ", @@ -26,7 +37,6 @@ "Name" => "ชื่อ", "Share" => "แชร์", "Download" => "ดาวน์โหลด", -"Delete" => "ลบ", "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." => "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index b8de8249a1d..0ecbcadb486 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "Geçici bir klasör eksik", "Failed to write to disk" => "Diske yazılamadı", "Files" => "Dosyalar", +"Delete" => "Sil", +"generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.", +"Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi", +"Upload Error" => "Yükleme hatası", +"Pending" => "Bekliyor", +"Upload cancelled." => "Yükleme iptal edildi.", +"Invalid name, '/' is not allowed." => "Geçersiz isim, '/' işaretine izin verilmiyor.", "Size" => "Boyut", "Modified" => "Değiştirilme", +"folder" => "dizin", +"folders" => "dizinler", +"file" => "dosya", +"files" => "dosyalar", "File handling" => "Dosya taşıma", "Maximum upload size" => "Maksimum yükleme boyutu", "max. possible: " => "mümkün olan en fazla: ", @@ -26,7 +37,6 @@ "Name" => "Ad", "Share" => "Paylaş", "Download" => "İndir", -"Delete" => "Sil", "Upload too large" => "Yüklemeniz çok büyük", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.", "Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.", diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index 8b21cb26a3c..743bc57feeb 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -6,6 +6,7 @@ "No file was uploaded" => "Не відвантажено жодного файлу", "Missing a temporary folder" => "Відсутній тимчасовий каталог", "Files" => "Файли", +"Delete" => "Видалити", "Size" => "Розмір", "Modified" => "Змінено", "Maximum upload size" => "Максимальний розмір відвантажень", @@ -16,7 +17,6 @@ "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!", "Name" => "Ім'я", "Download" => "Завантажити", -"Delete" => "Видалити", "Upload too large" => "Файл занадто великий", "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері." ); diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php new file mode 100644 index 00000000000..c2284d5feb9 --- /dev/null +++ b/apps/files/l10n/vi.php @@ -0,0 +1,31 @@ +<?php $TRANSLATIONS = array( +"Files" => "Tập tin", +"Delete" => "Xóa", +"Upload Error" => "Tải lên lỗi", +"Pending" => "Chờ", +"Upload cancelled." => "Hủy tải lên", +"Invalid name, '/' is not allowed." => "Tên không hợp lệ ,không được phép dùng '/'", +"Size" => "Kích cỡ", +"Modified" => "Thay đổi", +"folder" => "folder", +"folders" => "folders", +"file" => "file", +"files" => "files", +"File handling" => "Xử lý tập tin", +"Maximum upload size" => "Kích thước tối đa ", +"Enable ZIP-download" => "Cho phép ZIP-download", +"0 is unlimited" => "0 là không giới hạn", +"Maximum input size for ZIP files" => "Kích thước tối đa cho các tập tin ZIP", +"New" => "Mới", +"Text file" => "Tập tin văn bản", +"Folder" => "Folder", +"From url" => "Từ url", +"Upload" => "Tải lên", +"Cancel upload" => "Hủy upload", +"Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !", +"Name" => "Tên", +"Share" => "Chia sẻ", +"Download" => "Tải xuống", +"Upload too large" => "File tải lên quá lớn", +"Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ." +); diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index c2e6541f2a2..80693ba1d46 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -7,8 +7,19 @@ "Missing a temporary folder" => "缺少临时目录", "Failed to write to disk" => "写入磁盘失败", "Files" => "文件", +"Delete" => "删除", +"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" => "上传错误", +"Pending" => "操作等待中", +"Upload cancelled." => "上传已取消", +"Invalid name, '/' is not allowed." => "非法的名称,不允许使用‘/’。", "Size" => "大小", "Modified" => "修改日期", +"folder" => "文件夹", +"folders" => "文件夹", +"file" => "文件", +"files" => "文件", "File handling" => "文件处理", "Maximum upload size" => "最大上传大小", "max. possible: " => "最大可能: ", @@ -26,7 +37,6 @@ "Name" => "名称", "Share" => "共享", "Download" => "下载", -"Delete" => "删除", "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." => "文件正在被扫描,请稍候。", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 91a1344ca37..bc8aa4ff892 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -7,6 +7,7 @@ "Missing a temporary folder" => "遺失暫存資料夾", "Failed to write to disk" => "寫入硬碟失敗", "Files" => "檔案", +"Delete" => "刪除", "Size" => "大小", "Modified" => "修改", "File handling" => "檔案處理", @@ -26,7 +27,6 @@ "Name" => "名稱", "Share" => "分享", "Download" => "下載", -"Delete" => "刪除", "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." => "正在掃描檔案,請稍等。", diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index 4d5ae670de5..63f14a28777 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -24,9 +24,10 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ if(!$this->root || $this->root[0]!='/'){ $this->root='/'.$this->root; } - //create the root folder if necesary - mkdir($this->constructUrl('')); + if (!$this->is_dir('')) { + $this->mkdir(''); + } } /** diff --git a/apps/files_imageviewer/js/jquery.fancybox-1.3.4.js b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.js index a1db7b6198c..e5493cd9393 100644 --- a/apps/files_imageviewer/js/jquery.fancybox-1.3.4.js +++ b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.js @@ -124,9 +124,7 @@ } else if (href.indexOf("#") === 0) {
type = 'inline';
- } else {
- type = 'ajax';
- }
+ }
}
if (!type) {
diff --git a/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js index e5ee2ae3595..260f2c2d466 100644 --- a/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js +++ b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js @@ -1 +1 @@ -(function(B){var L,T,Q,M,d,m,J,A,O,z,C=0,H={},j=[],e=0,G={},y=[],f=null,o=new Image(),i=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,k=/[^\.]\.(swf)\s*$/i,p,N=1,h=0,t="",b,c,P=false,s=B.extend(B("<div/>")[0],{prop:0}),S=B.browser.msie&&B.browser.version<7&&!window.XMLHttpRequest,r=function(){T.hide();o.onerror=o.onload=null;if(f){f.abort()}L.empty()},x=function(){if(false===H.onError(j,C,H)){T.hide();P=false;return}H.titleShow=false;H.width="auto";H.height="auto";L.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');n()},w=function(){var Z=j[C],W,Y,ab,aa,V,X;r();H=B.extend({},B.fn.fancybox.defaults,(typeof B(Z).data("fancybox")=="undefined"?H:B(Z).data("fancybox")));X=H.onStart(j,C,H);if(X===false){P=false;return}else{if(typeof X=="object"){H=B.extend(H,X)}}ab=H.title||(Z.nodeName?B(Z).attr("title"):Z.title)||"";if(Z.nodeName&&!H.orig){H.orig=B(Z).children("img:first").length?B(Z).children("img:first"):B(Z)}if(ab===""&&H.orig&&H.titleFromAlt){ab=H.orig.attr("alt")}ab=ab.replace(/</,"<").replace(/>/,">");W=H.href||(Z.nodeName?B(Z).attr("href"):Z.href)||null;if((/^(?:javascript)/i).test(W)||W=="#"){W=null}if(H.type){Y=H.type;if(!W){W=H.content}}else{if(H.content){Y="html"}else{if(W){if(W.match(i)){Y="image"}else{if(W.match(k)){Y="swf"}else{if(B(Z).hasClass("iframe")){Y="iframe"}else{if(W.indexOf("#")===0){Y="inline"}else{Y="ajax"}}}}}}}if(!Y){x();return}if(Y=="inline"){Z=W.substr(W.indexOf("#"));Y=B(Z).length>0?"inline":"ajax"}H.type=Y;H.href=W;H.title=ab;if(H.autoDimensions){if(H.type=="html"||H.type=="inline"||H.type=="ajax"){H.width="auto";H.height="auto"}else{H.autoDimensions=false}}if(H.modal){H.overlayShow=true;H.hideOnOverlayClick=false;H.hideOnContentClick=false;H.enableEscapeButton=false;H.showCloseButton=false}H.padding=parseInt(H.padding,10);H.margin=parseInt(H.margin,10);L.css("padding",(H.padding+H.margin));B(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){B(this).replaceWith(m.children())});switch(Y){case"html":L.html(H.content);n();break;case"inline":if(B(Z).parent().is("#fancybox-content")===true){P=false;return}B('<div class="fancybox-inline-tmp" />').hide().insertBefore(B(Z)).bind("fancybox-cleanup",function(){B(this).replaceWith(m.children())}).bind("fancybox-cancel",function(){B(this).replaceWith(L.children())});B(Z).appendTo(L);n();break;case"image":P=false;B.fancybox.showActivity();o=new Image();o.onerror=function(){x()};o.onload=function(){P=true;o.onerror=o.onload=null;F()};o.src=W;break;case"swf":H.scrolling="no";aa='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+H.width+'" height="'+H.height+'"><param name="movie" value="'+W+'"></param>';V="";B.each(H.swf,function(ac,ad){aa+='<param name="'+ac+'" value="'+ad+'"></param>';V+=" "+ac+'="'+ad+'"'});aa+='<embed src="'+W+'" type="application/x-shockwave-flash" width="'+H.width+'" height="'+H.height+'"'+V+"></embed></object>";L.html(aa);n();break;case"ajax":P=false;B.fancybox.showActivity();H.ajax.win=H.ajax.success;f=B.ajax(B.extend({},H.ajax,{url:W,data:H.ajax.data||{},error:function(ac,ae,ad){if(ac.status>0){x()}},success:function(ad,af,ac){var ae=typeof ac=="object"?ac:f;if(ae.status==200){if(typeof H.ajax.win=="function"){X=H.ajax.win(W,ad,af,ac);if(X===false){T.hide();return}else{if(typeof X=="string"||typeof X=="object"){ad=X}}}L.html(ad);n()}}}));break;case"iframe":E();break}},n=function(){var V=H.width,W=H.height;if(V.toString().indexOf("%")>-1){V=parseInt((B(window).width()-(H.margin*2))*parseFloat(V)/100,10)+"px"}else{V=V=="auto"?"auto":V+"px"}if(W.toString().indexOf("%")>-1){W=parseInt((B(window).height()-(H.margin*2))*parseFloat(W)/100,10)+"px"}else{W=W=="auto"?"auto":W+"px"}L.wrapInner('<div style="width:'+V+";height:"+W+";overflow: "+(H.scrolling=="auto"?"auto":(H.scrolling=="yes"?"scroll":"hidden"))+';position:relative;"></div>');H.width=L.width();H.height=L.height();E()},F=function(){H.width=o.width;H.height=o.height;B("<img />").attr({id:"fancybox-img",src:o.src,alt:H.title}).appendTo(L);E()},E=function(){var W,V;T.hide();if(M.is(":visible")&&false===G.onCleanup(y,e,G)){B.event.trigger("fancybox-cancel");P=false;return}P=true;B(m.add(Q)).unbind();B(window).unbind("resize.fb scroll.fb");B(document).unbind("keydown.fb");if(M.is(":visible")&&G.titlePosition!=="outside"){M.css("height",M.height())}y=j;e=C;G=H;if(G.overlayShow){Q.css({"background-color":G.overlayColor,opacity:G.overlayOpacity,cursor:G.hideOnOverlayClick?"pointer":"auto",height:B(document).height()});if(!Q.is(":visible")){if(S){B("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"})}Q.show()}}else{Q.hide()}c=R();l();if(M.is(":visible")){B(J.add(O).add(z)).hide();W=M.position(),b={top:W.top,left:W.left,width:M.width(),height:M.height()};V=(b.width==c.width&&b.height==c.height);m.fadeTo(G.changeFade,0.3,function(){var X=function(){m.html(L.contents()).fadeTo(G.changeFade,1,v)};B.event.trigger("fancybox-change");m.empty().removeAttr("filter").css({"border-width":G.padding,width:c.width-G.padding*2,height:H.autoDimensions?"auto":c.height-h-G.padding*2});if(V){X()}else{s.prop=0;B(s).animate({prop:1},{duration:G.changeSpeed,easing:G.easingChange,step:U,complete:X})}});return}M.removeAttr("style");m.css("border-width",G.padding);if(G.transitionIn=="elastic"){b=I();m.html(L.contents());M.show();if(G.opacity){c.opacity=0}s.prop=0;B(s).animate({prop:1},{duration:G.speedIn,easing:G.easingIn,step:U,complete:v});return}if(G.titlePosition=="inside"&&h>0){A.show()}m.css({width:c.width-G.padding*2,height:H.autoDimensions?"auto":c.height-h-G.padding*2}).html(L.contents());M.css(c).fadeIn(G.transitionIn=="none"?0:G.speedIn,v)},D=function(V){if(V&&V.length){if(G.titlePosition=="float"){return'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+V+'</td><td id="fancybox-title-float-right"></td></tr></table>'}return'<div id="fancybox-title-'+G.titlePosition+'">'+V+"</div>"}return false},l=function(){t=G.title||"";h=0;A.empty().removeAttr("style").removeClass();if(G.titleShow===false){A.hide();return}t=B.isFunction(G.titleFormat)?G.titleFormat(t,y,e,G):D(t);if(!t||t===""){A.hide();return}A.addClass("fancybox-title-"+G.titlePosition).html(t).appendTo("body").show();switch(G.titlePosition){case"inside":A.css({width:c.width-(G.padding*2),marginLeft:G.padding,marginRight:G.padding});h=A.outerHeight(true);A.appendTo(d);c.height+=h;break;case"over":A.css({marginLeft:G.padding,width:c.width-(G.padding*2),bottom:G.padding}).appendTo(d);break;case"float":A.css("left",parseInt((A.width()-c.width-40)/2,10)*-1).appendTo(M);break;default:A.css({width:c.width-(G.padding*2),paddingLeft:G.padding,paddingRight:G.padding}).appendTo(M);break}A.hide()},g=function(){if(G.enableEscapeButton||G.enableKeyboardNav){B(document).bind("keydown.fb",function(V){if(V.keyCode==27&&G.enableEscapeButton){V.preventDefault();B.fancybox.close()}else{if((V.keyCode==37||V.keyCode==39)&&G.enableKeyboardNav&&V.target.tagName!=="INPUT"&&V.target.tagName!=="TEXTAREA"&&V.target.tagName!=="SELECT"){V.preventDefault();B.fancybox[V.keyCode==37?"prev":"next"]()}}})}if(!G.showNavArrows){O.hide();z.hide();return}if((G.cyclic&&y.length>1)||e!==0){O.show()}if((G.cyclic&&y.length>1)||e!=(y.length-1)){z.show()}},v=function(){if(!B.support.opacity){m.get(0).style.removeAttribute("filter");M.get(0).style.removeAttribute("filter")}if(H.autoDimensions){m.css("height","auto")}M.css("height","auto");if(t&&t.length){A.show()}if(G.showCloseButton){J.show()}g();if(G.hideOnContentClick){m.bind("click",B.fancybox.close)}if(G.hideOnOverlayClick){Q.bind("click",B.fancybox.close)}B(window).bind("resize.fb",B.fancybox.resize);if(G.centerOnScroll){B(window).bind("scroll.fb",B.fancybox.center)}if(G.type=="iframe"){B('<iframe id="fancybox-frame" name="fancybox-frame'+new Date().getTime()+'" frameborder="0" hspace="0" '+(B.browser.msie?'allowtransparency="true""':"")+' scrolling="'+H.scrolling+'" src="'+G.href+'"></iframe>').appendTo(m)}M.show();P=false;B.fancybox.center();G.onComplete(y,e,G);K()},K=function(){var V,W;if((y.length-1)>e){V=y[e+1].href;if(typeof V!=="undefined"&&V.match(i)){W=new Image();W.src=V}}if(e>0){V=y[e-1].href;if(typeof V!=="undefined"&&V.match(i)){W=new Image();W.src=V}}},U=function(W){var V={width:parseInt(b.width+(c.width-b.width)*W,10),height:parseInt(b.height+(c.height-b.height)*W,10),top:parseInt(b.top+(c.top-b.top)*W,10),left:parseInt(b.left+(c.left-b.left)*W,10)};if(typeof c.opacity!=="undefined"){V.opacity=W<0.5?0.5:W}M.css(V);m.css({width:V.width-G.padding*2,height:V.height-(h*W)-G.padding*2})},u=function(){return[B(window).width()-(G.margin*2),B(window).height()-(G.margin*2),B(document).scrollLeft()+G.margin,B(document).scrollTop()+G.margin]},R=function(){var V=u(),Z={},W=G.autoScale,X=G.padding*2,Y;if(G.width.toString().indexOf("%")>-1){Z.width=parseInt((V[0]*parseFloat(G.width))/100,10)}else{Z.width=G.width+X}if(G.height.toString().indexOf("%")>-1){Z.height=parseInt((V[1]*parseFloat(G.height))/100,10)}else{Z.height=G.height+X}if(W&&(Z.width>V[0]||Z.height>V[1])){if(H.type=="image"||H.type=="swf"){Y=(G.width)/(G.height);if((Z.width)>V[0]){Z.width=V[0];Z.height=parseInt(((Z.width-X)/Y)+X,10)}if((Z.height)>V[1]){Z.height=V[1];Z.width=parseInt(((Z.height-X)*Y)+X,10)}}else{Z.width=Math.min(Z.width,V[0]);Z.height=Math.min(Z.height,V[1])}}Z.top=parseInt(Math.max(V[3]-20,V[3]+((V[1]-Z.height-40)*0.5)),10);Z.left=parseInt(Math.max(V[2]-20,V[2]+((V[0]-Z.width-40)*0.5)),10);return Z},q=function(V){var W=V.offset();W.top+=parseInt(V.css("paddingTop"),10)||0;W.left+=parseInt(V.css("paddingLeft"),10)||0;W.top+=parseInt(V.css("border-top-width"),10)||0;W.left+=parseInt(V.css("border-left-width"),10)||0;W.width=V.width();W.height=V.height();return W},I=function(){var Y=H.orig?B(H.orig):false,X={},W,V;if(Y&&Y.length){W=q(Y);X={width:W.width+(G.padding*2),height:W.height+(G.padding*2),top:W.top-G.padding-20,left:W.left-G.padding-20}}else{V=u();X={width:G.padding*2,height:G.padding*2,top:parseInt(V[3]+V[1]*0.5,10),left:parseInt(V[2]+V[0]*0.5,10)}}return X},a=function(){if(!T.is(":visible")){clearInterval(p);return}B("div",T).css("top",(N*-40)+"px");N=(N+1)%12};B.fn.fancybox=function(V){if(!B(this).length){return this}B(this).data("fancybox",B.extend({},V,(B.metadata?B(this).metadata():{}))).unbind("click.fb").bind("click.fb",function(X){X.preventDefault();if(P){return}P=true;B(this).blur();j=[];C=0;var W=B(this).attr("rel")||"";if(!W||W==""||W==="nofollow"){j.push(this)}else{j=B("a[rel="+W+"], area[rel="+W+"]");C=j.index(this)}w();return});return this};B.fancybox=function(Y){var X;if(P){return}P=true;X=typeof arguments[1]!=="undefined"?arguments[1]:{};j=[];C=parseInt(X.index,10)||0;if(B.isArray(Y)){for(var W=0,V=Y.length;W<V;W++){if(typeof Y[W]=="object"){B(Y[W]).data("fancybox",B.extend({},X,Y[W]))}else{Y[W]=B({}).data("fancybox",B.extend({content:Y[W]},X))}}j=jQuery.merge(j,Y)}else{if(typeof Y=="object"){B(Y).data("fancybox",B.extend({},X,Y))}else{Y=B({}).data("fancybox",B.extend({content:Y},X))}j.push(Y)}if(C>j.length||C<0){C=0}w()};B.fancybox.showActivity=function(){clearInterval(p);T.show();p=setInterval(a,66)};B.fancybox.hideActivity=function(){T.hide()};B.fancybox.next=function(){return B.fancybox.pos(e+1)};B.fancybox.prev=function(){return B.fancybox.pos(e-1)};B.fancybox.pos=function(V){if(P){return}V=parseInt(V);j=y;if(V>-1&&V<y.length){C=V;w()}else{if(G.cyclic&&y.length>1){C=V>=y.length?0:y.length-1;w()}}return};B.fancybox.cancel=function(){if(P){return}P=true;B.event.trigger("fancybox-cancel");r();H.onCancel(j,C,H);P=false};B.fancybox.close=function(){if(P||M.is(":hidden")){return}P=true;if(G&&false===G.onCleanup(y,e,G)){P=false;return}r();B(J.add(O).add(z)).hide();B(m.add(Q)).unbind();B(window).unbind("resize.fb scroll.fb");B(document).unbind("keydown.fb");m.find("iframe").attr("src",S&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");if(G.titlePosition!=="inside"){A.empty()}M.stop();function V(){Q.fadeOut("fast");A.empty().hide();M.hide();B.event.trigger("fancybox-cleanup");m.empty();G.onClosed(y,e,G);y=H=[];e=C=0;G=H={};P=false}if(G.transitionOut=="elastic"){b=I();var W=M.position();c={top:W.top,left:W.left,width:M.width(),height:M.height()};if(G.opacity){c.opacity=1}A.empty().hide();s.prop=1;B(s).animate({prop:0},{duration:G.speedOut,easing:G.easingOut,step:U,complete:V})}else{M.fadeOut(G.transitionOut=="none"?0:G.speedOut,V)}};B.fancybox.resize=function(){if(Q.is(":visible")){Q.css("height",B(document).height())}B.fancybox.center(true)};B.fancybox.center=function(){var V,W;if(P){return}W=arguments[0]===true?1:0;V=u();if(!W&&(M.width()>V[0]||M.height()>V[1])){return}M.stop().animate({top:parseInt(Math.max(V[3]-20,V[3]+((V[1]-m.height()-40)*0.5)-G.padding)),left:parseInt(Math.max(V[2]-20,V[2]+((V[0]-m.width()-40)*0.5)-G.padding))},typeof arguments[0]=="number"?arguments[0]:200)};B.fancybox.init=function(){if(B("#fancybox-wrap").length){return}B("body").append(L=B('<div id="fancybox-tmp"></div>'),T=B('<div id="fancybox-loading"><div></div></div>'),Q=B('<div id="fancybox-overlay"></div>'),M=B('<div id="fancybox-wrap"></div>'));d=B('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(M);d.append(m=B('<div id="fancybox-content"></div>'),J=B('<a id="fancybox-close"></a>'),A=B('<div id="fancybox-title"></div>'),O=B('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),z=B('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));J.click(B.fancybox.close);T.click(B.fancybox.cancel);O.click(function(V){V.preventDefault();B.fancybox.prev()});z.click(function(V){V.preventDefault();B.fancybox.next()});if(B.fn.mousewheel){M.bind("mousewheel.fb",function(V,W){if(P){V.preventDefault()}else{if(B(V.target).get(0).clientHeight==0||B(V.target).get(0).scrollHeight===B(V.target).get(0).clientHeight){V.preventDefault();B.fancybox[W>0?"prev":"next"]()}}})}if(!B.support.opacity){M.addClass("fancybox-ie")}if(S){T.addClass("fancybox-ie6");M.addClass("fancybox-ie6");B('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(d)}};B.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};B(document).ready(function(){B.fancybox.init()})})(jQuery);
\ No newline at end of file +(function(B){var L,T,Q,M,d,m,J,A,O,z,C=0,H={},j=[],e=0,G={},y=[],f=null,o=new Image(),i=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,k=/[^\.]\.(swf)\s*$/i,p,N=1,h=0,t="",b,c,P=false,s=B.extend(B("<div/>")[0],{prop:0}),S=B.browser.msie&&B.browser.version<7&&!window.XMLHttpRequest,r=function(){T.hide();o.onerror=o.onload=null;if(f){f.abort()}L.empty()},x=function(){if(false===H.onError(j,C,H)){T.hide();P=false;return}H.titleShow=false;H.width="auto";H.height="auto";L.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');n()},w=function(){var Z=j[C],W,Y,ab,aa,V,X;r();H=B.extend({},B.fn.fancybox.defaults,(typeof B(Z).data("fancybox")=="undefined"?H:B(Z).data("fancybox")));X=H.onStart(j,C,H);if(X===false){P=false;return}else{if(typeof X=="object"){H=B.extend(H,X)}}ab=H.title||(Z.nodeName?B(Z).attr("title"):Z.title)||"";if(Z.nodeName&&!H.orig){H.orig=B(Z).children("img:first").length?B(Z).children("img:first"):B(Z)}if(ab===""&&H.orig&&H.titleFromAlt){ab=H.orig.attr("alt")}ab=ab.replace(/</,"<").replace(/>/,">");W=H.href||(Z.nodeName?B(Z).attr("href"):Z.href)||null;if((/^(?:javascript)/i).test(W)||W=="#"){W=null}if(H.type){Y=H.type;if(!W){W=H.content}}else{if(H.content){Y="html"}else{if(W){if(W.match(i)){Y="image"}else{if(W.match(k)){Y="swf"}else{if(B(Z).hasClass("iframe")){Y="iframe"}else{if(W.indexOf("#")===0){Y="inline"}}}}}}}if(!Y){x();return}if(Y=="inline"){Z=W.substr(W.indexOf("#"));Y=B(Z).length>0?"inline":"ajax"}H.type=Y;H.href=W;H.title=ab;if(H.autoDimensions){if(H.type=="html"||H.type=="inline"||H.type=="ajax"){H.width="auto";H.height="auto"}else{H.autoDimensions=false}}if(H.modal){H.overlayShow=true;H.hideOnOverlayClick=false;H.hideOnContentClick=false;H.enableEscapeButton=false;H.showCloseButton=false}H.padding=parseInt(H.padding,10);H.margin=parseInt(H.margin,10);L.css("padding",(H.padding+H.margin));B(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){B(this).replaceWith(m.children())});switch(Y){case"html":L.html(H.content);n();break;case"inline":if(B(Z).parent().is("#fancybox-content")===true){P=false;return}B('<div class="fancybox-inline-tmp" />').hide().insertBefore(B(Z)).bind("fancybox-cleanup",function(){B(this).replaceWith(m.children())}).bind("fancybox-cancel",function(){B(this).replaceWith(L.children())});B(Z).appendTo(L);n();break;case"image":P=false;B.fancybox.showActivity();o=new Image();o.onerror=function(){x()};o.onload=function(){P=true;o.onerror=o.onload=null;F()};o.src=W;break;case"swf":H.scrolling="no";aa='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+H.width+'" height="'+H.height+'"><param name="movie" value="'+W+'"></param>';V="";B.each(H.swf,function(ac,ad){aa+='<param name="'+ac+'" value="'+ad+'"></param>';V+=" "+ac+'="'+ad+'"'});aa+='<embed src="'+W+'" type="application/x-shockwave-flash" width="'+H.width+'" height="'+H.height+'"'+V+"></embed></object>";L.html(aa);n();break;case"ajax":P=false;B.fancybox.showActivity();H.ajax.win=H.ajax.success;f=B.ajax(B.extend({},H.ajax,{url:W,data:H.ajax.data||{},error:function(ac,ae,ad){if(ac.status>0){x()}},success:function(ad,af,ac){var ae=typeof ac=="object"?ac:f;if(ae.status==200){if(typeof H.ajax.win=="function"){X=H.ajax.win(W,ad,af,ac);if(X===false){T.hide();return}else{if(typeof X=="string"||typeof X=="object"){ad=X}}}L.html(ad);n()}}}));break;case"iframe":E();break}},n=function(){var V=H.width,W=H.height;if(V.toString().indexOf("%")>-1){V=parseInt((B(window).width()-(H.margin*2))*parseFloat(V)/100,10)+"px"}else{V=V=="auto"?"auto":V+"px"}if(W.toString().indexOf("%")>-1){W=parseInt((B(window).height()-(H.margin*2))*parseFloat(W)/100,10)+"px"}else{W=W=="auto"?"auto":W+"px"}L.wrapInner('<div style="width:'+V+";height:"+W+";overflow: "+(H.scrolling=="auto"?"auto":(H.scrolling=="yes"?"scroll":"hidden"))+';position:relative;"></div>');H.width=L.width();H.height=L.height();E()},F=function(){H.width=o.width;H.height=o.height;B("<img />").attr({id:"fancybox-img",src:o.src,alt:H.title}).appendTo(L);E()},E=function(){var W,V;T.hide();if(M.is(":visible")&&false===G.onCleanup(y,e,G)){B.event.trigger("fancybox-cancel");P=false;return}P=true;B(m.add(Q)).unbind();B(window).unbind("resize.fb scroll.fb");B(document).unbind("keydown.fb");if(M.is(":visible")&&G.titlePosition!=="outside"){M.css("height",M.height())}y=j;e=C;G=H;if(G.overlayShow){Q.css({"background-color":G.overlayColor,opacity:G.overlayOpacity,cursor:G.hideOnOverlayClick?"pointer":"auto",height:B(document).height()});if(!Q.is(":visible")){if(S){B("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"})}Q.show()}}else{Q.hide()}c=R();l();if(M.is(":visible")){B(J.add(O).add(z)).hide();W=M.position(),b={top:W.top,left:W.left,width:M.width(),height:M.height()};V=(b.width==c.width&&b.height==c.height);m.fadeTo(G.changeFade,0.3,function(){var X=function(){m.html(L.contents()).fadeTo(G.changeFade,1,v)};B.event.trigger("fancybox-change");m.empty().removeAttr("filter").css({"border-width":G.padding,width:c.width-G.padding*2,height:H.autoDimensions?"auto":c.height-h-G.padding*2});if(V){X()}else{s.prop=0;B(s).animate({prop:1},{duration:G.changeSpeed,easing:G.easingChange,step:U,complete:X})}});return}M.removeAttr("style");m.css("border-width",G.padding);if(G.transitionIn=="elastic"){b=I();m.html(L.contents());M.show();if(G.opacity){c.opacity=0}s.prop=0;B(s).animate({prop:1},{duration:G.speedIn,easing:G.easingIn,step:U,complete:v});return}if(G.titlePosition=="inside"&&h>0){A.show()}m.css({width:c.width-G.padding*2,height:H.autoDimensions?"auto":c.height-h-G.padding*2}).html(L.contents());M.css(c).fadeIn(G.transitionIn=="none"?0:G.speedIn,v)},D=function(V){if(V&&V.length){if(G.titlePosition=="float"){return'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+V+'</td><td id="fancybox-title-float-right"></td></tr></table>'}return'<div id="fancybox-title-'+G.titlePosition+'">'+V+"</div>"}return false},l=function(){t=G.title||"";h=0;A.empty().removeAttr("style").removeClass();if(G.titleShow===false){A.hide();return}t=B.isFunction(G.titleFormat)?G.titleFormat(t,y,e,G):D(t);if(!t||t===""){A.hide();return}A.addClass("fancybox-title-"+G.titlePosition).html(t).appendTo("body").show();switch(G.titlePosition){case"inside":A.css({width:c.width-(G.padding*2),marginLeft:G.padding,marginRight:G.padding});h=A.outerHeight(true);A.appendTo(d);c.height+=h;break;case"over":A.css({marginLeft:G.padding,width:c.width-(G.padding*2),bottom:G.padding}).appendTo(d);break;case"float":A.css("left",parseInt((A.width()-c.width-40)/2,10)*-1).appendTo(M);break;default:A.css({width:c.width-(G.padding*2),paddingLeft:G.padding,paddingRight:G.padding}).appendTo(M);break}A.hide()},g=function(){if(G.enableEscapeButton||G.enableKeyboardNav){B(document).bind("keydown.fb",function(V){if(V.keyCode==27&&G.enableEscapeButton){V.preventDefault();B.fancybox.close()}else{if((V.keyCode==37||V.keyCode==39)&&G.enableKeyboardNav&&V.target.tagName!=="INPUT"&&V.target.tagName!=="TEXTAREA"&&V.target.tagName!=="SELECT"){V.preventDefault();B.fancybox[V.keyCode==37?"prev":"next"]()}}})}if(!G.showNavArrows){O.hide();z.hide();return}if((G.cyclic&&y.length>1)||e!==0){O.show()}if((G.cyclic&&y.length>1)||e!=(y.length-1)){z.show()}},v=function(){if(!B.support.opacity){m.get(0).style.removeAttribute("filter");M.get(0).style.removeAttribute("filter")}if(H.autoDimensions){m.css("height","auto")}M.css("height","auto");if(t&&t.length){A.show()}if(G.showCloseButton){J.show()}g();if(G.hideOnContentClick){m.bind("click",B.fancybox.close)}if(G.hideOnOverlayClick){Q.bind("click",B.fancybox.close)}B(window).bind("resize.fb",B.fancybox.resize);if(G.centerOnScroll){B(window).bind("scroll.fb",B.fancybox.center)}if(G.type=="iframe"){B('<iframe id="fancybox-frame" name="fancybox-frame'+new Date().getTime()+'" frameborder="0" hspace="0" '+(B.browser.msie?'allowtransparency="true""':"")+' scrolling="'+H.scrolling+'" src="'+G.href+'"></iframe>').appendTo(m)}M.show();P=false;B.fancybox.center();G.onComplete(y,e,G);K()},K=function(){var V,W;if((y.length-1)>e){V=y[e+1].href;if(typeof V!=="undefined"&&V.match(i)){W=new Image();W.src=V}}if(e>0){V=y[e-1].href;if(typeof V!=="undefined"&&V.match(i)){W=new Image();W.src=V}}},U=function(W){var V={width:parseInt(b.width+(c.width-b.width)*W,10),height:parseInt(b.height+(c.height-b.height)*W,10),top:parseInt(b.top+(c.top-b.top)*W,10),left:parseInt(b.left+(c.left-b.left)*W,10)};if(typeof c.opacity!=="undefined"){V.opacity=W<0.5?0.5:W}M.css(V);m.css({width:V.width-G.padding*2,height:V.height-(h*W)-G.padding*2})},u=function(){return[B(window).width()-(G.margin*2),B(window).height()-(G.margin*2),B(document).scrollLeft()+G.margin,B(document).scrollTop()+G.margin]},R=function(){var V=u(),Z={},W=G.autoScale,X=G.padding*2,Y;if(G.width.toString().indexOf("%")>-1){Z.width=parseInt((V[0]*parseFloat(G.width))/100,10)}else{Z.width=G.width+X}if(G.height.toString().indexOf("%")>-1){Z.height=parseInt((V[1]*parseFloat(G.height))/100,10)}else{Z.height=G.height+X}if(W&&(Z.width>V[0]||Z.height>V[1])){if(H.type=="image"||H.type=="swf"){Y=(G.width)/(G.height);if((Z.width)>V[0]){Z.width=V[0];Z.height=parseInt(((Z.width-X)/Y)+X,10)}if((Z.height)>V[1]){Z.height=V[1];Z.width=parseInt(((Z.height-X)*Y)+X,10)}}else{Z.width=Math.min(Z.width,V[0]);Z.height=Math.min(Z.height,V[1])}}Z.top=parseInt(Math.max(V[3]-20,V[3]+((V[1]-Z.height-40)*0.5)),10);Z.left=parseInt(Math.max(V[2]-20,V[2]+((V[0]-Z.width-40)*0.5)),10);return Z},q=function(V){var W=V.offset();W.top+=parseInt(V.css("paddingTop"),10)||0;W.left+=parseInt(V.css("paddingLeft"),10)||0;W.top+=parseInt(V.css("border-top-width"),10)||0;W.left+=parseInt(V.css("border-left-width"),10)||0;W.width=V.width();W.height=V.height();return W},I=function(){var Y=H.orig?B(H.orig):false,X={},W,V;if(Y&&Y.length){W=q(Y);X={width:W.width+(G.padding*2),height:W.height+(G.padding*2),top:W.top-G.padding-20,left:W.left-G.padding-20}}else{V=u();X={width:G.padding*2,height:G.padding*2,top:parseInt(V[3]+V[1]*0.5,10),left:parseInt(V[2]+V[0]*0.5,10)}}return X},a=function(){if(!T.is(":visible")){clearInterval(p);return}B("div",T).css("top",(N*-40)+"px");N=(N+1)%12};B.fn.fancybox=function(V){if(!B(this).length){return this}B(this).data("fancybox",B.extend({},V,(B.metadata?B(this).metadata():{}))).unbind("click.fb").bind("click.fb",function(X){X.preventDefault();if(P){return}P=true;B(this).blur();j=[];C=0;var W=B(this).attr("rel")||"";if(!W||W==""||W==="nofollow"){j.push(this)}else{j=B("a[rel="+W+"], area[rel="+W+"]");C=j.index(this)}w();return});return this};B.fancybox=function(Y){var X;if(P){return}P=true;X=typeof arguments[1]!=="undefined"?arguments[1]:{};j=[];C=parseInt(X.index,10)||0;if(B.isArray(Y)){for(var W=0,V=Y.length;W<V;W++){if(typeof Y[W]=="object"){B(Y[W]).data("fancybox",B.extend({},X,Y[W]))}else{Y[W]=B({}).data("fancybox",B.extend({content:Y[W]},X))}}j=jQuery.merge(j,Y)}else{if(typeof Y=="object"){B(Y).data("fancybox",B.extend({},X,Y))}else{Y=B({}).data("fancybox",B.extend({content:Y},X))}j.push(Y)}if(C>j.length||C<0){C=0}w()};B.fancybox.showActivity=function(){clearInterval(p);T.show();p=setInterval(a,66)};B.fancybox.hideActivity=function(){T.hide()};B.fancybox.next=function(){return B.fancybox.pos(e+1)};B.fancybox.prev=function(){return B.fancybox.pos(e-1)};B.fancybox.pos=function(V){if(P){return}V=parseInt(V);j=y;if(V>-1&&V<y.length){C=V;w()}else{if(G.cyclic&&y.length>1){C=V>=y.length?0:y.length-1;w()}}return};B.fancybox.cancel=function(){if(P){return}P=true;B.event.trigger("fancybox-cancel");r();H.onCancel(j,C,H);P=false};B.fancybox.close=function(){if(P||M.is(":hidden")){return}P=true;if(G&&false===G.onCleanup(y,e,G)){P=false;return}r();B(J.add(O).add(z)).hide();B(m.add(Q)).unbind();B(window).unbind("resize.fb scroll.fb");B(document).unbind("keydown.fb");m.find("iframe").attr("src",S&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");if(G.titlePosition!=="inside"){A.empty()}M.stop();function V(){Q.fadeOut("fast");A.empty().hide();M.hide();B.event.trigger("fancybox-cleanup");m.empty();G.onClosed(y,e,G);y=H=[];e=C=0;G=H={};P=false}if(G.transitionOut=="elastic"){b=I();var W=M.position();c={top:W.top,left:W.left,width:M.width(),height:M.height()};if(G.opacity){c.opacity=1}A.empty().hide();s.prop=1;B(s).animate({prop:0},{duration:G.speedOut,easing:G.easingOut,step:U,complete:V})}else{M.fadeOut(G.transitionOut=="none"?0:G.speedOut,V)}};B.fancybox.resize=function(){if(Q.is(":visible")){Q.css("height",B(document).height())}B.fancybox.center(true)};B.fancybox.center=function(){var V,W;if(P){return}W=arguments[0]===true?1:0;V=u();if(!W&&(M.width()>V[0]||M.height()>V[1])){return}M.stop().animate({top:parseInt(Math.max(V[3]-20,V[3]+((V[1]-m.height()-40)*0.5)-G.padding)),left:parseInt(Math.max(V[2]-20,V[2]+((V[0]-m.width()-40)*0.5)-G.padding))},typeof arguments[0]=="number"?arguments[0]:200)};B.fancybox.init=function(){if(B("#fancybox-wrap").length){return}B("body").append(L=B('<div id="fancybox-tmp"></div>'),T=B('<div id="fancybox-loading"><div></div></div>'),Q=B('<div id="fancybox-overlay"></div>'),M=B('<div id="fancybox-wrap"></div>'));d=B('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(M);d.append(m=B('<div id="fancybox-content"></div>'),J=B('<a id="fancybox-close"></a>'),A=B('<div id="fancybox-title"></div>'),O=B('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),z=B('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));J.click(B.fancybox.close);T.click(B.fancybox.cancel);O.click(function(V){V.preventDefault();B.fancybox.prev()});z.click(function(V){V.preventDefault();B.fancybox.next()});if(B.fn.mousewheel){M.bind("mousewheel.fb",function(V,W){if(P){V.preventDefault()}else{if(B(V.target).get(0).clientHeight==0||B(V.target).get(0).scrollHeight===B(V.target).get(0).clientHeight){V.preventDefault();B.fancybox[W>0?"prev":"next"]()}}})}if(!B.support.opacity){M.addClass("fancybox-ie")}if(S){T.addClass("fancybox-ie6");M.addClass("fancybox-ie6");B('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(d)}};B.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};B(document).ready(function(){B.fancybox.init()})})(jQuery);
\ No newline at end of file diff --git a/apps/files_sharing/ajax/email.php b/apps/files_sharing/ajax/email.php index 3026eb74675..aba4f699fa8 100644 --- a/apps/files_sharing/ajax/email.php +++ b/apps/files_sharing/ajax/email.php @@ -10,4 +10,9 @@ $subject = $user.' shared a '.$type.' with you'; $link = $_POST['link']; $text = $user.' shared the '.$type.' '.$_POST['file'].' with you. It is available for download here: '.$link; $fromaddress = OCP\Config::getUserValue($user, 'settings', 'email', 'sharing-noreply@'.OCP\Util::getServerHost()); -OCP\Util::sendMail($_POST['toaddress'], $_POST['toaddress'], $subject, $text, $fromaddress, $user); +try { + OCP\Util::sendMail($_POST['toaddress'], $_POST['toaddress'], $subject, $text, $fromaddress, $user); + OCP\JSON::success(); +} catch (Exception $exception) { + OCP\JSON::error(array('data' => array('message' => $exception->getMessage()))); +} diff --git a/apps/files_sharing/ajax/getitem.php b/apps/files_sharing/ajax/getitem.php index ff6c29b6a0a..06a80102dec 100644 --- a/apps/files_sharing/ajax/getitem.php +++ b/apps/files_sharing/ajax/getitem.php @@ -22,8 +22,13 @@ while ($path != $userDirectory) { } } else { // Check if uid_shared_with is a group - if (($pos = strpos($uid_shared_with, '@')) !== false) { + $pos = strrpos($uid_shared_with, '@'); + if ($pos !== false) { $gid = substr($uid_shared_with, $pos + 1); + } else { + $gid = false; + } + if ($gid && OC_Group::groupExists($gid)) { // Include users in the group so the users can be removed from the list of people to share with if ($path == $source) { $group = array(array('gid' => $gid, 'permissions' => $rows[$i]['permissions'], 'users' => OC_Group::usersInGroup($gid), 'parentFolder' => false)); diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js new file mode 100644 index 00000000000..3cfa3583b13 --- /dev/null +++ b/apps/files_sharing/js/share.js @@ -0,0 +1,375 @@ +OC.Share={ + icons:[], + itemUsers:[], + itemGroups:[], + itemPrivateLink:false, + usersAndGroups:[], + loadIcons:function() { + // Cache all icons for shared files + $.getJSON(OC.filePath('files_sharing', 'ajax', 'getstatuses.php'), function(result) { + if (result && result.status === 'success') { + $.each(result.data, function(item, hasPrivateLink) { + if (hasPrivateLink) { + OC.Share.icons[item] = OC.imagePath('core', 'actions/public'); + } else { + OC.Share.icons[item] = OC.imagePath('core', 'actions/shared'); + } + }); + } + }); + }, + loadItem:function(item) { + $.ajax({type: 'GET', url: OC.filePath('files_sharing', 'ajax', 'getitem.php'), data: { item: item }, async: false, success: function(result) { + if (result && result.status === 'success') { + var item = result.data; + OC.Share.itemUsers = item.users; + OC.Share.itemGroups = item.groups; + OC.Share.itemPrivateLink = item.privateLink; + } + }}); + }, + share:function(source, uid_shared_with, permissions, callback) { + $.post(OC.filePath('files_sharing', 'ajax', 'share.php'), { sources: source, uid_shared_with: uid_shared_with, permissions: permissions }, function(result) { + if (result && result.status === 'success') { + if (callback) { + callback(result.data); + } + } else { + OC.dialogs.alert(result.data.message, 'Error while sharing'); + } + }); + }, + unshare:function(source, uid_shared_with, callback) { + $.post(OC.filePath('files_sharing', 'ajax', 'unshare.php'), { source: source, uid_shared_with: uid_shared_with }, function(result) { + if (result && result.status === 'success') { + if (callback) { + callback(); + } + } else { + OC.dialogs.alert('Error', 'Error while unsharing'); + } + }); + }, + changePermissions:function(source, uid_shared_with, permissions) { + $.post(OC.filePath('files_sharing','ajax','setpermissions.php'), { source: source, uid_shared_with: uid_shared_with, permissions: permissions }, function(result) { + if (!result || result.status !== 'success') { + OC.dialogs.alert('Error', 'Error while changing permissions'); + } + }); + }, + showDropDown:function(item, appendTo) { + OC.Share.loadItem(item); + var html = '<div id="dropdown" class="drop" data-item="'+item+'">'; + html += '<select data-placeholder="User or Group" id="share_with" class="chzen-select">'; + html += '<option value="" selected="selected" disabled="disabled">Your groups & members</option>'; + html += '</select>'; + html += '<div id="sharedWithList">'; + html += '<ul id="userList"></ul>'; + html += '<div id="groups" style="display:none;">'; + html += '<br />'; + html += 'Groups: '; + html += '<ul id="groupList"></ul>'; + html += '</div>'; + html += '</div>'; + html += '<div id="privateLink">'; + html += '<input type="checkbox" name="privateLinkCheckbox" id="privateLinkCheckbox" value="1" /><label for="privateLinkCheckbox">Share with private link</label>'; + html += '<br />'; + html += '<form id="emailPrivateLink">'; + html += '<input id="privateLinkText" style="display:none; width:90%;" />'; + html += '<input id="email" style="display:none; width:65%;" value="" placeholder="Email link to person" />'; + html += '<input id="emailButton" style="display:none;" type="submit" value="Send" />'; + html += '</form>'; + html += '</div>'; + $(html).appendTo(appendTo); + if (OC.Share.usersAndGroups.length < 1) { + $.ajax({type: 'GET', url: OC.filePath('files_sharing', 'ajax', 'userautocomplete.php'), async: false, success: function(users) { + if (users) { + OC.Share.usersAndGroups = users; + $.each(users, function(index, user) { + $(user).appendTo('#share_with'); + }); + $('#share_with').trigger('liszt:updated'); + } + }}); + } else { + $.each(OC.Share.usersAndGroups, function(index, user) { + $(user).appendTo('#share_with'); + }); + $('#share_with').trigger('liszt:updated'); + } + if (OC.Share.itemUsers) { + $.each(OC.Share.itemUsers, function(index, user) { + if (user.parentFolder) { + OC.Share.addSharedWith(user.uid, user.permissions, false, user.parentFolder); + } else { + OC.Share.addSharedWith(user.uid, user.permissions, false, false); + } + }); + } + if (OC.Share.itemGroups) { + $.each(OC.Share.itemGroups, function(index, group) { + if (group.parentFolder) { + OC.Share.addSharedWith(group.gid, group.permissions, group.users, group.parentFolder); + } else { + OC.Share.addSharedWith(group.gid, group.permissions, group.users, false); + } + }); + } + if (OC.Share.itemPrivateLink) { + OC.Share.showPrivateLink(item, OC.Share.itemPrivateLink); + } + $('#dropdown').show('blind'); + $('#share_with').chosen(); + }, + hideDropDown:function(callback) { + $('#dropdown').hide('blind', function() { + $('#dropdown').remove(); + if (callback) { + callback.call(); + } + }); + }, + addSharedWith:function(uid_shared_with, permissions, isGroup, parentFolder) { + if (parentFolder) { + var sharedWith = '<li>Parent folder '+parentFolder+' shared with '+uid_shared_with+'</li>'; + } else { + var checked = ((permissions > 0) ? 'checked="checked"' : 'style="display:none;"'); + var style = ((permissions == 0) ? 'style="display:none;"' : ''); + var sharedWith = '<li data-uid_shared_with="'+uid_shared_with+'">'; + sharedWith += '<a href="" class="unshare" style="display:none;"><img class="svg" alt="Unshare" src="'+OC.imagePath('core','actions/delete')+'"/></a>'; + sharedWith += uid_shared_with; + sharedWith += '<input type="checkbox" name="permissions" id="'+uid_shared_with+'" class="permissions" '+checked+' />'; + sharedWith += '<label class="edit" for="'+uid_shared_with+'" '+style+'>can edit</label>'; + sharedWith += '</li>'; + } + if (isGroup) { + // Groups are added to a different list + $('#groups').show(); + $(sharedWith).appendTo('#groupList'); + // Remove group from select form + $('#share_with option[value="'+uid_shared_with+'(group)"]').remove(); + $('#share_with').trigger('liszt:updated'); + // Remove users in group from select form + $.each(isGroup, function(index, user) { + $('#share_with option[value="'+user+'"]').remove(); + $('#share_with').trigger('liszt:updated'); + }); + } else { + $(sharedWith).appendTo('#userList'); + // Remove user from select form + $('#share_with option[value="'+uid_shared_with+'"]').remove(); + $('#share_with').trigger('liszt:updated'); + } + + }, + removeSharedWith:function(uid_shared_with) { + var option; + if ($('#userList li[data-uid_shared_with="'+uid_shared_with+'"]').length > 0) { + $('#userList li[data-uid_shared_with="'+uid_shared_with+'"]').remove(); + option = '<option value="'+uid_shared_with+'">'+uid_shared_with+'</option>'; + } else if ($('#groupList li[data-uid_shared_with="'+uid_shared_with+'"]').length > 0) { + $('#groupList li[data-uid_shared_with="'+uid_shared_with+'"]').remove(); + if ($('#groupList li').length < 1) { + $('#groups').hide(); + } + option = '<option value="'+uid_shared_with+'(group)">'+uid_shared_with+' (group)</option>'; + } + $(option).appendTo('#share_with'); + $('#share_with').trigger('liszt:updated'); + }, + showPrivateLink:function(item, token) { + $('#privateLinkCheckbox').attr('checked', true); + var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&token='+token; + if (token.indexOf('&path=') == -1) { + link += '&file=' + encodeURIComponent(item).replace(/%2F/g, '/'); + } else { + // Disable checkbox if inside a shared parent folder + $('#privateLinkCheckbox').attr('disabled', 'true'); + } + $('#privateLinkText').val(link); + $('#privateLinkText').show('blind', function() { + $('#privateLinkText').after('<br id="emailBreak" />'); + $('#email').show(); + $('#emailButton').show(); + }); + }, + hidePrivateLink:function() { + $('#privateLinkText').hide('blind'); + $('#emailBreak').remove(); + $('#email').hide(); + $('#emailButton').hide(); + }, + emailPrivateLink:function() { + var link = $('#privateLinkText').val(); + var file = link.substr(link.lastIndexOf('/') + 1).replace(/%20/g, ' '); + var email = $('#email').val(); + if (email != '') { + $.post(OC.filePath('files_sharing', 'ajax', 'email.php'), { toaddress: email, link: link, file: file }, function(result) { + if (result && result.status == 'success') { + $('#email').css('font-weight', 'bold'); + $('#email').animate({ fontWeight: 'normal' }, 2000, function() { + $(this).val(''); + }).val('Email sent'); + } else { + OC.dialogs.alert(result.data.message, 'Error while sharing'); + } + }); + } + }, + dirname:function(path) { + return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, ''); + } +} + +$(document).ready(function() { + + if (typeof FileActions !== 'undefined') { + OC.Share.loadIcons(); + FileActions.register('all', 'Share', function(filename) { + // Return the correct sharing icon + if (scanFiles.scanning) { return; } // workaround to prevent additional http request block scanning feedback + var item = $('#dir').val() + '/' + filename; + // Check if icon is in cache + if (OC.Share.icons[item]) { + return OC.Share.icons[item]; + } else { + var last = ''; + var path = OC.Share.dirname(item); + // Search for possible parent folders that are shared + while (path != last) { + if (OC.Share.icons[path]) { + OC.Share.icons[item] = OC.Share.icons[path]; + return OC.Share.icons[item]; + } + last = path; + path = OC.Share.dirname(path); + } + OC.Share.icons[item] = OC.imagePath('core', 'actions/share'); + return OC.Share.icons[item]; + } + }, function(filename) { + var file = $('#dir').val() + '/' + filename; + var appendTo = $('tr').filterAttr('data-file',filename).find('td.filename'); + // Check if drop down is already visible for a different file + if (($('#dropdown').length > 0)) { + if (file != $('#dropdown').data('item')) { + OC.Share.hideDropDown(function () { + $('tr').removeClass('mouseOver'); + $('tr').filterAttr('data-file',filename).addClass('mouseOver'); + OC.Share.showDropDown(file, appendTo); + }); + } + } else { + $('tr').filterAttr('data-file',filename).addClass('mouseOver'); + OC.Share.showDropDown(file, appendTo); + } + }); + }; + + $(this).click(function(event) { + if (!($(event.target).hasClass('drop')) && $(event.target).parents().index($('#dropdown')) == -1) { + if ($('#dropdown').is(':visible')) { + OC.Share.hideDropDown(function() { + $('tr').removeClass('mouseOver'); + }); + } + } + }); + + $('#sharedWithList li').live('mouseenter', function(event) { + // Show permissions and unshare button + $(':hidden', this).show(); + }); + + $('#sharedWithList li').live('mouseleave', function(event) { + // Hide permissions and unshare button + $('a', this).hide(); + if (!$('input:[type=checkbox]', this).is(':checked')) { + $('input:[type=checkbox]', this).hide(); + $('label', this).hide(); + } + }); + + $('#share_with').live('change', function() { + var item = $('#dropdown').data('item'); + var uid_shared_with = $(this).val(); + var pos = uid_shared_with.indexOf('(group)'); + var isGroup = false; + if (pos != -1) { + // Remove '(group)' from uid_shared_with + uid_shared_with = uid_shared_with.substr(0, pos); + isGroup = true; + } + OC.Share.share(item, uid_shared_with, 0, function() { + if (isGroup) { + // Reload item because we don't know which users are in the group + OC.Share.loadItem(item); + var users; + $.each(OC.Share.itemGroups, function(index, group) { + if (group.gid == uid_shared_with) { + users = group.users; + } + }); + OC.Share.addSharedWith(uid_shared_with, 0, users, false); + } else { + OC.Share.addSharedWith(uid_shared_with, 0, false, false); + } + // Change icon + if (!OC.Share.itemPrivateLink) { + OC.Share.icons[item] = OC.imagePath('core', 'actions/shared'); + } + }); + }); + + $('.unshare').live('click', function() { + var item = $('#dropdown').data('item'); + var uid_shared_with = $(this).parent().data('uid_shared_with'); + OC.Share.unshare(item, uid_shared_with, function() { + OC.Share.removeSharedWith(uid_shared_with); + // Reload item to update cached users and groups for the icon check + OC.Share.loadItem(item); + // Change icon + if (!OC.Share.itemPrivateLink && !OC.Share.itemUsers && !OC.Share.itemGroups) { + OC.Share.icons[item] = OC.imagePath('core', 'actions/share'); + } + }); + }); + + $('.permissions').live('change', function() { + var permissions = (this.checked) ? 1 : 0; + OC.Share.changePermissions($('#dropdown').data('item'), $(this).parent().data('uid_shared_with'), permissions); + }); + + $('#privateLinkCheckbox').live('change', function() { + var item = $('#dropdown').data('item'); + if (this.checked) { + // Create a private link + OC.Share.share(item, 'public', 0, function(token) { + OC.Share.showPrivateLink(item, token); + // Change icon + OC.Share.icons[item] = OC.imagePath('core', 'actions/public'); + }); + } else { + // Delete private link + OC.Share.unshare(item, 'public', function() { + OC.Share.hidePrivateLink(); + // Change icon + if (OC.Share.itemUsers || OC.Share.itemGroups) { + OC.Share.icons[item] = OC.imagePath('core', 'actions/shared'); + } else { + OC.Share.icons[item] = OC.imagePath('core', 'actions/share'); + } + }); + } + }); + + $('#privateLinkText').live('click', function() { + $(this).focus(); + $(this).select(); + }); + + $('#emailPrivateLink').live('submit', function(event) { + event.preventDefault(); + OC.Share.emailPrivateLink(); + }); +});
\ No newline at end of file diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php index 0237acfc1ac..1c061cde07a 100644 --- a/apps/files_sharing/lib_share.php +++ b/apps/files_sharing/lib_share.php @@ -179,10 +179,13 @@ class OC_Share { $uid_shared_with = OC_Group::usersInGroup($uid_shared_with); // Remove the owner from the list of users in the group $uid_shared_with = array_diff($uid_shared_with, array(OCP\USER::getUser())); - } else if ($uid = strstr($uid_shared_with, '@', true)) { - $uid_shared_with = array($uid); } else { - $uid_shared_with = array($uid_shared_with); + $pos = strrpos($uid_shared_with, '@'); + if ($pos !== false && OC_Group::groupExists(substr($uid_shared_with, $pos + 1))) { + $uid_shared_with = array(substr($uid_shared_with, 0, $pos)); + } else { + $uid_shared_with = array($uid_shared_with); + } } foreach ($uid_shared_with as $uid) { $sharedFolder = $uid.'/files/Shared'; diff --git a/apps/gallery/l10n/ca.php b/apps/gallery/l10n/ca.php index 165414fba20..1c5848cee28 100644 --- a/apps/gallery/l10n/ca.php +++ b/apps/gallery/l10n/ca.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Fotos", -"Settings" => "Arranjament", -"Rescan" => "Escaneja de nou", -"Stop" => "Atura", -"Share" => "Comparteix", +"Share gallery" => "Comperteix la galeria", +"Error: " => "Error: ", +"Internal error" => "Error intern", +"Slideshow" => "Passi de diapositives", "Back" => "Enrera", "Remove confirmation" => "Elimina la confirmació", "Do you want to remove album" => "Voleu eliminar l'àlbum", diff --git a/apps/gallery/l10n/el.php b/apps/gallery/l10n/el.php index 3983011a0c0..47bc3af2bb6 100644 --- a/apps/gallery/l10n/el.php +++ b/apps/gallery/l10n/el.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Εικόνες", -"Settings" => "Ρυθμίσεις", -"Rescan" => "Επανασάρωση", -"Stop" => "Διακοπή", -"Share" => "Κοινοποίηση", +"Share gallery" => "Κοινοποίηση συλλογής", +"Error: " => "Σφάλμα: ", +"Internal error" => "Εσωτερικό σφάλμα", +"Slideshow" => "Προβολή Διαφανειών", "Back" => "Επιστροφή", "Remove confirmation" => "Αφαίρεση επιβεβαίωσης", "Do you want to remove album" => "Θέλετε να αφαιρέσετε το άλμπουμ", diff --git a/apps/gallery/l10n/es.php b/apps/gallery/l10n/es.php index 03e8d6a4563..aa425a0bd04 100644 --- a/apps/gallery/l10n/es.php +++ b/apps/gallery/l10n/es.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Imágenes", -"Settings" => "Preferencias", -"Rescan" => "Refrescar", -"Stop" => "Parar", -"Share" => "Compartir", +"Share gallery" => "Compartir galería", +"Error: " => "Fallo ", +"Internal error" => "Fallo interno", +"Slideshow" => "Presentación", "Back" => "Atrás", "Remove confirmation" => "Borrar confirmación", "Do you want to remove album" => "¿Quieres eliminar el álbum", diff --git a/apps/gallery/l10n/fi_FI.php b/apps/gallery/l10n/fi_FI.php index 267bb5e547e..659289ae41f 100644 --- a/apps/gallery/l10n/fi_FI.php +++ b/apps/gallery/l10n/fi_FI.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Kuvat", -"Settings" => "Asetukset", -"Rescan" => "Etsi uusia", -"Stop" => "Pysäytä", -"Share" => "Jaa", +"Share gallery" => "Jaa galleria", +"Error: " => "Virhe: ", +"Internal error" => "Sisäinen virhe", +"Slideshow" => "Diaesitys", "Back" => "Takaisin", "Remove confirmation" => "Poiston vahvistus", "Do you want to remove album" => "Tahdotko poistaa albumin", diff --git a/apps/gallery/l10n/fr.php b/apps/gallery/l10n/fr.php index dfd668ebe89..04421236e10 100644 --- a/apps/gallery/l10n/fr.php +++ b/apps/gallery/l10n/fr.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Images", -"Settings" => "Préférences", -"Rescan" => "Analyser à nouveau", -"Stop" => "Arrêter", -"Share" => "Partager", +"Share gallery" => "Partager la galerie", +"Error: " => "Erreur :", +"Internal error" => "Erreur interne", +"Slideshow" => "Diaporama", "Back" => "Retour", "Remove confirmation" => "Enlever la confirmation", "Do you want to remove album" => "Voulez-vous supprimer l'album", diff --git a/apps/gallery/l10n/it.php b/apps/gallery/l10n/it.php index e21a1d6524b..ef8d596e7eb 100644 --- a/apps/gallery/l10n/it.php +++ b/apps/gallery/l10n/it.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Immagini", -"Settings" => "Impostazioni", -"Rescan" => "Nuova scansione", -"Stop" => "Ferma", -"Share" => "Condividi", +"Share gallery" => "Condividi la galleria", +"Error: " => "Errore: ", +"Internal error" => "Errore interno", +"Slideshow" => "Presentazione", "Back" => "Indietro", "Remove confirmation" => "Rimuovi conferma", "Do you want to remove album" => "Vuoi rimuovere l'album", diff --git a/apps/gallery/l10n/sl.php b/apps/gallery/l10n/sl.php index 5e061239862..8d3bb9f5887 100644 --- a/apps/gallery/l10n/sl.php +++ b/apps/gallery/l10n/sl.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Slike", -"Settings" => "Nastavitve", -"Rescan" => "Ponovno preišči", -"Stop" => "Stop", -"Share" => "Deli", +"Share gallery" => "Daj galerijo v souporabo", +"Error: " => "Napaka: ", +"Internal error" => "Notranja napaka", +"Slideshow" => "predstavitev", "Back" => "Nazaj", "Remove confirmation" => "Odstrani potrditev", "Do you want to remove album" => "Ali želite odstraniti album", diff --git a/apps/gallery/l10n/sv.php b/apps/gallery/l10n/sv.php index 520d271df10..b63a89d90fc 100644 --- a/apps/gallery/l10n/sv.php +++ b/apps/gallery/l10n/sv.php @@ -1,9 +1,9 @@ <?php $TRANSLATIONS = array( "Pictures" => "Bilder", -"Settings" => "Inställningar", -"Rescan" => "Sök igen", -"Stop" => "Stoppa", -"Share" => "Dela", +"Share gallery" => "Dela galleri", +"Error: " => "Fel:", +"Internal error" => "Internt fel", +"Slideshow" => "Bildspel", "Back" => "Tillbaka", "Remove confirmation" => "Vill du säkert ta bort", "Do you want to remove album" => "Vill du ta bort albumet", diff --git a/apps/gallery/l10n/vi.php b/apps/gallery/l10n/vi.php new file mode 100644 index 00000000000..d1d7fc64fca --- /dev/null +++ b/apps/gallery/l10n/vi.php @@ -0,0 +1,11 @@ +<?php $TRANSLATIONS = array( +"Pictures" => "Hình ảnh", +"Share gallery" => "Chia sẻ gallery", +"Error: " => "Lỗi :", +"Internal error" => "Lỗi nội bộ", +"Back" => "Trở lại", +"Remove confirmation" => "Xóa xác nhận", +"Do you want to remove album" => "Bạn muốn xóa album này ", +"Change album name" => "Đổi tên album", +"New album name" => "Tên album mới" +); diff --git a/apps/media/l10n/vi.php b/apps/media/l10n/vi.php new file mode 100644 index 00000000000..01942ba173f --- /dev/null +++ b/apps/media/l10n/vi.php @@ -0,0 +1,14 @@ +<?php $TRANSLATIONS = array( +"Music" => "Âm nhạc", +"Add album to playlist" => "Thêm album vào playlist", +"Play" => "Play", +"Pause" => "Tạm dừng", +"Previous" => "Trang trước", +"Next" => "Tiếp theo", +"Mute" => "Tắt", +"Unmute" => "Bật", +"Rescan Collection" => "Quét lại bộ sưu tập", +"Artist" => "Nghệ sỹ", +"Album" => "Album", +"Title" => "Tiêu đề" +); diff --git a/apps/media/lib_ampache.php b/apps/media/lib_ampache.php index d5a093338cc..4951399fa18 100644 --- a/apps/media/lib_ampache.php +++ b/apps/media/lib_ampache.php @@ -150,6 +150,7 @@ class OC_MEDIA_AMPACHE{ $users=$query->execute(array($auth))->fetchAll(); if(count($users)>0){ OC_MEDIA_COLLECTION::$uid=$users[0]['user_id']; + OC_User::setUserId($users[0]['user_id']); return $users[0]['user_id']; }else{ return false; @@ -271,7 +272,7 @@ class OC_MEDIA_AMPACHE{ </root>"); return; } - $filter=$params['filter']; + $filter = isset($params['filter']) ? $params['filter'] : ''; $albums=OC_MEDIA_COLLECTION::getAlbums($filter); $artist=OC_MEDIA_COLLECTION::getArtistName($filter); echo('<?xml version="1.0" encoding="UTF-8"?>'); @@ -400,7 +401,7 @@ class OC_MEDIA_AMPACHE{ </root>"); return; } - $filter=$params['filter']; + $filter = isset($params['filter']) ? $params['filter'] : ''; $artists=OC_MEDIA_COLLECTION::getArtists($filter); $albums=OC_MEDIA_COLLECTION::getAlbums(0,$filter); $songs=OC_MEDIA_COLLECTION::getSongs(0,0,$filter); diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php new file mode 100644 index 00000000000..a82f7e4c17b --- /dev/null +++ b/apps/user_ldap/ajax/testConfiguration.php @@ -0,0 +1,39 @@ +<?php + +/** + * ownCloud - user_ldap + * + * @author Arthur Schiwon + * @copyright 2012 Arthur Schiwon blizzz@owncloud.com + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +// Check user and app status +OCP\JSON::checkAdminUser(); +OCP\JSON::checkAppEnabled('user_ldap'); +OCP\JSON::callCheck(); + +$connection = new \OCA\user_ldap\lib\Connection(null); +if($connection->setConfiguration($_POST)) { + //Configuration is okay + if($connection->bind()) { + OCP\JSON::success(array('message' => 'The configuration is valid and the connection could be established!')); + } else { + OCP\JSON::error(array('message' => 'The configuration is valid, but the Bind failed. Please check the server settings and credentials.')); + } +} else { + OCP\JSON::error(array('message' => 'The configuration is invalid. Please look in the ownCloud log for further details.')); +} diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index b9f4bdf1990..aff25593ef7 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -26,11 +26,6 @@ namespace OCA\user_ldap; class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { protected $enabled = false; - protected $_group_user = array(); - protected $_user_groups = array(); - protected $_group_users = array(); - protected $_groups = array(); - public function setConnector(lib\Connection &$connection) { parent::setConnector($connection); if(empty($this->connection->ldapGroupFilter) || empty($this->connection->ldapGroupMemberAssocAttr)) { @@ -51,18 +46,20 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { if(!$this->enabled) { return false; } - if(isset($this->_group_user[$gid][$uid])) { - return $this->_group_user[$gid][$uid]; + if($this->connection->isCached('inGroup'.$uid.':'.$gid)) { + return $this->connection->getFromCache('inGroup'.$uid.':'.$gid); } $dn_user = $this->username2dn($uid); $dn_group = $this->groupname2dn($gid); // just in case if(!$dn_group || !$dn_user) { + $this->connection->writeToCache('inGroup'.$uid.':'.$gid, false); return false; } //usually, LDAP attributes are said to be case insensitive. But there are exceptions of course. $members = $this->readAttribute($dn_group, $this->connection->ldapGroupMemberAssocAttr); if(!$members) { + $this->connection->writeToCache('inGroup'.$uid.':'.$gid, false); return false; } @@ -81,8 +78,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { $members = $dns; } - $this->_group_user[$gid][$uid] = in_array($dn_user, $members); - return $this->_group_user[$gid][$uid]; + $isInGroup = in_array($dn_user, $members); + $this->connection->writeToCache('inGroup'.$uid.':'.$gid, $isInGroup); + + return $isInGroup; } /** @@ -97,12 +96,12 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { if(!$this->enabled) { return array(); } - if(isset($this->_user_groups[$uid])) { - return $this->_user_groups[$uid]; + if($this->connection->isCached('getUserGroups'.$uid)) { + return $this->connection->getFromCache('getUserGroups'.$uid); } $userDN = $this->username2dn($uid); if(!$userDN) { - $this->_user_groups[$uid] = array(); + $this->connection->writeToCache('getUserGroups'.$uid, array()); return array(); } @@ -124,9 +123,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { $this->connection->ldapGroupMemberAssocAttr.'='.$uid )); $groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName,'dn')); - $this->_user_groups[$uid] = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING); + $groups = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING); + $this->connection->writeToCache('getUserGroups'.$uid, $groups); - return $this->_user_groups[$uid]; + return $groups; } /** @@ -137,19 +137,19 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { if(!$this->enabled) { return array(); } - if(isset($this->_group_users[$gid])) { - return $this->_group_users[$gid]; + if($this->connection->isCached('usersInGroup'.$gid)) { + return $this->connection->getFromCache('usersInGroup'.$gid); } $groupDN = $this->groupname2dn($gid); if(!$groupDN) { - $this->_group_users[$gid] = array(); + $this->connection->writeToCache('usersInGroup'.$gid, array()); return array(); } $members = $this->readAttribute($groupDN, $this->connection->ldapGroupMemberAssocAttr); if(!$members) { - $this->_group_users[$gid] = array(); + $this->connection->writeToCache('usersInGroup'.$gid, array()); return array(); } @@ -173,8 +173,10 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { if(!$isMemberUid) { $result = array_intersect($result, \OCP\User::getUsers()); } - $this->_group_users[$gid] = array_unique($result, SORT_LOCALE_STRING); - return $this->_group_users[$gid]; + $groupUsers = array_unique($result, SORT_LOCALE_STRING); + $this->connection->writeToCache('usersInGroup'.$gid, $groupUsers); + + return $groupUsers; } /** @@ -187,11 +189,14 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface { if(!$this->enabled) { return array(); } - if(empty($this->_groups)) { - $ldap_groups = $this->fetchListOfGroups($this->connection->ldapGroupFilter, array($this->connection->ldapGroupDisplayName, 'dn')); - $this->_groups = $this->ownCloudGroupNames($ldap_groups); + if($this->connection->isCached('getGroups')) { + return $this->connection->getFromCache('getGroups'); } - return $this->_groups; + $ldap_groups = $this->fetchListOfGroups($this->connection->ldapGroupFilter, array($this->connection->ldapGroupDisplayName, 'dn')); + $ldap_groups = $this->ownCloudGroupNames($ldap_groups); + $this->connection->writeToCache('getGroups', $ldap_groups); + + return $ldap_groups; } /** diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js index cae9655e3df..4e5923406ea 100644 --- a/apps/user_ldap/js/settings.js +++ b/apps/user_ldap/js/settings.js @@ -1,3 +1,25 @@ $(document).ready(function() { $('#ldapSettings').tabs(); + $('#ldap_action_test_connection').button(); + $('#ldap_action_test_connection').click(function(event){ + event.preventDefault(); + $.post( + OC.filePath('user_ldap','ajax','testConfiguration.php'), + $('#ldap').serialize(), + function (result) { + if (result.status == 'success') { + OC.dialogs.alert( + result.message, + 'Connection test succeeded' + ); + } else { + $('#ldap_action_test_connection').css('background-color', 'red'); + OC.dialogs.alert( + result.message, + 'Connection test failed' + ); + } + } + ); + }); });
\ No newline at end of file diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 19122b34c7d..a50afd0d602 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -178,7 +178,7 @@ abstract class Access { * @param $ldapname optional, the display name of the object * @returns string with with the name to use in ownCloud, false on DN outside of search DN * - * returns the internal ownCloud name for the given LDAP DN of the group + * returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure */ public function dn2groupname($dn, $ldapname = null) { if(mb_strripos($dn, $this->connection->ldapBaseGroups, 0, 'UTF-8') !== (mb_strlen($dn, 'UTF-8')-mb_strlen($this->connection->ldapBaseGroups, 'UTF-8'))) { @@ -193,7 +193,7 @@ abstract class Access { * @param $ldapname optional, the display name of the object * @returns string with with the name to use in ownCloud * - * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN + * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN or failure */ public function dn2username($dn, $ldapname = null) { if(mb_strripos($dn, $this->connection->ldapBaseUsers, 0, 'UTF-8') !== (mb_strlen($dn, 'UTF-8')-mb_strlen($this->connection->ldapBaseUsers, 'UTF-8'))) { @@ -233,6 +233,10 @@ abstract class Access { if(is_null($ldapname)) { $ldapname = $this->readAttribute($dn, $nameAttribute); + if(!isset($ldapname[0]) && empty($ldapname[0])) { + \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$dn.'.', \OCP\Util::INFO); + return false; + } $ldapname = $ldapname[0]; } $ldapname = $this->sanitizeUsername($ldapname); @@ -248,9 +252,8 @@ abstract class Access { return $oc_name; } - //TODO: do not simple die away! - //and this of course should never been thrown :) - throw new Exception('LDAP backend: unexpected collision of DN and ownCloud Name.'); + //if everything else did not help.. + OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$dn.'.', \OCP\Util::INFO); } /** @@ -294,6 +297,12 @@ abstract class Access { continue; } + //we do not take empty usernames + if(!isset($ldapObject[$nameAttribute]) || empty($ldapObject[$nameAttribute])) { + \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$ldapObject['dn'].', skipping.', \OCP\Util::INFO); + continue; + } + //a new group! Then let's try to add it. We're shooting into the blue with the group name, assuming that in most cases there will not be a conflict. But first make sure, that the display name contains only allowed characters. $ocname = $this->sanitizeUsername($ldapObject[$nameAttribute]); if($this->mapComponent($ldapObject['dn'], $ocname, $isUsers)) { @@ -308,9 +317,8 @@ abstract class Access { continue; } - //TODO: do not simple die away - //and this of course should never been thrown :) - throw new Exception('LDAP backend: unexpected collision of DN and ownCloud Name.'); + //if everything else did not help.. + \OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$ldapObject['dn'].', skipping.', \OCP\Util::INFO); } return $ownCloudNames; } diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index e54a8e2b241..a84174d1dfd 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -28,7 +28,10 @@ class Connection { private $configID; private $configured = false; - //cached settings + //cache handler + protected $cache; + + //settings protected $config = array( 'ldapHost' => null, 'ldapPort' => null, @@ -48,10 +51,12 @@ class Connection { 'ldapQuotaAttribute' => null, 'ldapQuotaDefault' => null, 'ldapEmailAttribute' => null, + 'ldapCacheTTL' => null, ); public function __construct($configID = 'user_ldap') { $this->configID = $configID; + $this->cache = \OC_Cache::getGlobalCache(); } public function __destruct() { @@ -92,6 +97,57 @@ class Connection { return $this->ldapConnectionRes; } + private function getCacheKey($key) { + $prefix = 'LDAP-'.$this->configID.'-'; + if(is_null($key)) { + return $prefix; + } + return $prefix.md5($key); + } + + public function getFromCache($key) { + if(!$this->configured) { + $this->readConfiguration(); + } + if(!$this->config['ldapCacheTTL']) { + return null; + } + if(!$this->isCached($key)) { + return null; + + } + $key = $this->getCacheKey($key); + + return unserialize(base64_decode($this->cache->get($key))); + } + + public function isCached($key) { + if(!$this->configured) { + $this->readConfiguration(); + } + if(!$this->config['ldapCacheTTL']) { + return false; + } + $key = $this->getCacheKey($key); + return $this->cache->hasKey($key); + } + + public function writeToCache($key, $value) { + if(!$this->configured) { + $this->readConfiguration(); + } + if(!$this->config['ldapCacheTTL']) { + return null; + } + $key = $this->getCacheKey($key); + $value = base64_encode(serialize($value)); + $this->cache->set($key, $value, $this->config['ldapCacheTTL']); + } + + public function clearCache() { + $this->cache->clear($this->getCacheKey(null)); + } + /** * Caches the general LDAP configuration. */ @@ -110,14 +166,15 @@ class Connection { $this->config['ldapNoCase'] = \OCP\Config::getAppValue($this->configID, 'ldap_nocase', 0); $this->config['ldapUserDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_display_name', 'uid'), 'UTF-8'); $this->config['ldapUserFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_userlist_filter','objectClass=person'); - $this->config['ldapGroupFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_filter','(objectClass=posixGroup)'); + $this->config['ldapGroupFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_filter','(objectClass=posixGroup)'); $this->config['ldapLoginFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_login_filter', '(uid=%uid)'); $this->config['ldapGroupDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_group_display_name', 'uid'), 'UTF-8'); $this->config['ldapQuotaAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_attr', ''); $this->config['ldapQuotaDefault'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_def', ''); - $this->config['ldapEmailAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_email_attr', ''); - $this->config['ldapGroupMemberAssocAttr'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_member_assoc_attribute', 'uniqueMember'); + $this->config['ldapEmailAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_email_attr', ''); + $this->config['ldapGroupMemberAssocAttr'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_member_assoc_attribute', 'uniqueMember'); $this->config['ldapIgnoreNamingRules'] = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false); + $this->config['ldapCacheTTL'] = \OCP\Config::getAppValue($this->configID, 'ldap_cache_ttl', 10*60); $this->configured = $this->validateConfiguration(); } @@ -134,12 +191,21 @@ class Connection { return false; } + $params = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', 'ldap_display_name'=>'ldapUserDisplayName', 'ldap_group_display_name'=>'ldapGroupDisplayName', + + 'ldap_tls'=>'ldapTLS', 'ldap_nocase'=>'ldapNoCase', 'ldap_quota_def'=>'ldapQuotaDefault', 'ldap_quota_attr'=>'ldapQuotaAttribute', 'ldap_email_attr'=>'ldapEmailAttribute', 'ldap_group_member_assoc_attribute'=>'ldapGroupMemberAssocAttr', 'ldap_cache_ttl'=>'ldapCacheTTL'); + foreach($config as $parameter => $value) { if(isset($this->config[$parameter])) { $this->config[$parameter] = $value; if(is_array($setParameters)) { $setParameters[] = $parameter; } + } else if(isset($params[$parameter])) { + $this->config[$params[$parameter]] = $value; + if(is_array($setParameters)) { + $setParameters[] = $params[$parameter]; + } } } diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php index 42084855e85..135c735e703 100644 --- a/apps/user_ldap/settings.php +++ b/apps/user_ldap/settings.php @@ -20,7 +20,7 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ -$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password', 'ldap_base', 'ldap_base_users', 'ldap_base_groups', 'ldap_userlist_filter', 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name', 'ldap_group_display_name', 'ldap_tls', 'ldap_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute'); +$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password', 'ldap_base', 'ldap_base_users', 'ldap_base_groups', 'ldap_userlist_filter', 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name', 'ldap_group_display_name', 'ldap_tls', 'ldap_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl'); OCP\Util::addscript('user_ldap', 'settings'); @@ -29,18 +29,23 @@ if ($_POST) { if(isset($_POST[$param])){ if('ldap_agent_password' == $param) { OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param])); + } elseif('ldap_cache_ttl' == $param) { + if(OCP\Config::getAppValue('user_ldap', $param,'') != $_POST[$param]) { + $ldap = new \OCA\user_ldap\lib\Connection('user_ldap'); + $ldap->clearCache(); + OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]); + } } else { OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]); } } elseif('ldap_tls' == $param) { // unchecked checkboxes are not included in the post paramters - OCP\Config::setAppValue('user_ldap', $param, 0); + OCP\Config::setAppValue('user_ldap', $param, 0); } elseif('ldap_nocase' == $param) { OCP\Config::setAppValue('user_ldap', $param, 0); } - } } @@ -57,5 +62,6 @@ $tmpl->assign( 'ldap_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_d $tmpl->assign( 'ldap_group_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_group_display_name', 'cn')); $tmpl->assign( 'ldap_group_member_assoc_attribute', OCP\Config::getAppValue('user_ldap', 'ldap_group_member_assoc_attribute', 'uniqueMember')); $tmpl->assign( 'ldap_agent_password', base64_decode(OCP\Config::getAppValue('user_ldap', 'ldap_agent_password'))); +$tmpl->assign( 'ldap_cache_ttl', OCP\Config::getAppValue('user_ldap', 'ldap_cache_ttl', '600')); return $tmpl->fetchPage(); diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 31f453b5a5a..893d93c3c42 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -26,8 +26,9 @@ <p><label for="ldap_quota_attr">Quota Attribute</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /> <label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" />bytes</p> <p><label for="ldap_email_attr">Email Attribute</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></p> + <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="text" id="ldap_cache_ttl" name="ldap_cache_ttl" value="<?php echo $_['ldap_cache_ttl']; ?>" /><small><?php echo $l->t('in seconds');?></small></p> </fieldset> - <input type="submit" value="Save" /> <a href="http://owncloud.org/support/ldap-backend/" target="_blank"><img src="<?php echo OCP\Util::imagePath('','actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a> + <input type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://owncloud.org/support/ldap-backend/" target="_blank"><img src="<?php echo OCP\Util::imagePath('','actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a> </div> </form> diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index a4a8921d08d..2059d5b0c6d 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -27,12 +27,6 @@ namespace OCA\user_ldap; class USER_LDAP extends lib\Access implements \OCP\UserInterface { - // will be retrieved from LDAP server - protected $ldap_dc = false; - - // cache getUsers() - protected $_users = null; - private function updateQuota($dn) { $quota = null; if(!empty($this->connection->ldapQuotaDefault)) { @@ -85,12 +79,19 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { return false; } - //update some settings, if necessary - $this->updateQuota($dn); - $this->updateEmail($dn); + //do we have a username for him/her? + $ocname = $this->dn2username($dn); + + if($ocname){ + //update some settings, if necessary + $this->updateQuota($dn); + $this->updateEmail($dn); + + //give back the display name + return $ocname; + } - //give back the display name - return $this->dn2username($dn); + return false; } /** @@ -100,11 +101,13 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * Get a list of all users. */ public function getUsers(){ - if(is_null($this->_users)) { + $ldap_users = $this->connection->getFromCache('getUsers'); + if(is_null($ldap_users)) { $ldap_users = $this->fetchListOfUsers($this->connection->ldapUserFilter, array($this->connection->ldapUserDisplayName, 'dn')); - $this->_users = $this->ownCloudUserNames($ldap_users); + $ldap_users = $this->ownCloudUserNames($ldap_users); + $this->connection->writeToCache('getUsers', $ldap_users); } - return $this->_users; + return $ldap_users; } /** @@ -113,18 +116,25 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { * @return boolean */ public function userExists($uid){ + if($this->connection->isCached('userExists'.$uid)) { + return $this->connection->getFromCache('userExists'.$uid); + } + //getting dn, if false the user does not exist. If dn, he may be mapped only, requires more checking. $dn = $this->username2dn($uid); if(!$dn) { + $this->connection->writeToCache('userExists'.$uid, false); return false; } //if user really still exists, we will be able to read his cn $cn = $this->readAttribute($dn, 'cn'); if(!$cn || empty($cn)) { + $this->connection->writeToCache('userExists'.$uid, false); return false; } + $this->connection->writeToCache('userExists'.$uid, true); return true; } |