diff options
author | Faraz Samapoor <f.samapoor@gmail.com> | 2023-06-12 16:52:06 +0330 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-12 16:52:06 +0330 |
commit | 8778f2912f259a5eef7e4ec6a09a38e9748c1b70 (patch) | |
tree | 225dc635ab758512d9d2bc7b5ea100d6b3d86ccf /apps | |
parent | ff0b3feb2ed58da2af7fd53d741d2f4b2581af58 (diff) | |
parent | 63bf207ca7a18dd50ce3aeaea42e53f4ee400fc0 (diff) | |
download | nextcloud-server-8778f2912f259a5eef7e4ec6a09a38e9748c1b70.tar.gz nextcloud-server-8778f2912f259a5eef7e4ec6a09a38e9748c1b70.zip |
Merge branch 'master' into replace_strpos_calls_in_settings_app
Signed-off-by: Faraz Samapoor <f.samapoor@gmail.com>
Diffstat (limited to 'apps')
174 files changed, 2160 insertions, 1423 deletions
diff --git a/apps/cloud_federation_api/l10n/uk.js b/apps/cloud_federation_api/l10n/uk.js index 2336ba8813c..f36557632ac 100644 --- a/apps/cloud_federation_api/l10n/uk.js +++ b/apps/cloud_federation_api/l10n/uk.js @@ -2,7 +2,7 @@ OC.L10N.register( "cloud_federation_api", { "Cloud Federation API" : "Cloud Federation API", - "Enable clouds to communicate with each other and exchange data" : "Увімкніть хмари для спілкування один з одним і обміну даними", - "The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "API Cloud Federation дозволяє різним примірникам Nextcloud спілкуватися один з одним і обмінюватися даними." + "Enable clouds to communicate with each other and exchange data" : "Увімкніть хмари аби спілкуватися один з одним і обмінюватися даними", + "The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API дозволяє різним екземплярам Nextcloud спілкуватися між собою та обмінюватися даними." }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/cloud_federation_api/l10n/uk.json b/apps/cloud_federation_api/l10n/uk.json index afb0dd841c0..d12fa272328 100644 --- a/apps/cloud_federation_api/l10n/uk.json +++ b/apps/cloud_federation_api/l10n/uk.json @@ -1,6 +1,6 @@ { "translations": { "Cloud Federation API" : "Cloud Federation API", - "Enable clouds to communicate with each other and exchange data" : "Увімкніть хмари для спілкування один з одним і обміну даними", - "The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "API Cloud Federation дозволяє різним примірникам Nextcloud спілкуватися один з одним і обмінюватися даними." + "Enable clouds to communicate with each other and exchange data" : "Увімкніть хмари аби спілкуватися один з одним і обмінюватися даними", + "The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API дозволяє різним екземплярам Nextcloud спілкуватися між собою та обмінюватися даними." },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" }
\ No newline at end of file diff --git a/apps/comments/l10n/fi.js b/apps/comments/l10n/fi.js index 13431bec3c5..60e0931eaad 100644 --- a/apps/comments/l10n/fi.js +++ b/apps/comments/l10n/fi.js @@ -17,6 +17,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Ei kommentteja vielä. Aloita keskustelu!", "No more messages" : "Ei enempää viestejä", "Retry" : "Yritä uudelleen", + "Failed to mark comments as read" : "Kommenttien merkitseminen luetuksi epäonnistui", "Unable to load the comments list" : "Kommenttilistaa ei voitu ladata", "_%n unread comment_::_%n unread comments_" : ["%n lukematon kommentti","%n lukematonta kommenttia"], "_1 new comment_::_{unread} new comments_" : ["1 uusi kommentti","{unread} uutta kommenttia"], diff --git a/apps/comments/l10n/fi.json b/apps/comments/l10n/fi.json index 09e2cc28b34..54cd17e2456 100644 --- a/apps/comments/l10n/fi.json +++ b/apps/comments/l10n/fi.json @@ -15,6 +15,7 @@ "No comments yet, start the conversation!" : "Ei kommentteja vielä. Aloita keskustelu!", "No more messages" : "Ei enempää viestejä", "Retry" : "Yritä uudelleen", + "Failed to mark comments as read" : "Kommenttien merkitseminen luetuksi epäonnistui", "Unable to load the comments list" : "Kommenttilistaa ei voitu ladata", "_%n unread comment_::_%n unread comments_" : ["%n lukematon kommentti","%n lukematonta kommenttia"], "_1 new comment_::_{unread} new comments_" : ["1 uusi kommentti","{unread} uutta kommenttia"], diff --git a/apps/comments/l10n/hu.js b/apps/comments/l10n/hu.js index 94607b24250..ff2a217646e 100644 --- a/apps/comments/l10n/hu.js +++ b/apps/comments/l10n/hu.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Még nincsenek hozzászólások, kezdje el a beszélgetést!", "No more messages" : "Nincs több üzenet", "Retry" : "Újra", + "Failed to mark comments as read" : "A hozzászólások olvasottnak jelölése sikertelen", "Unable to load the comments list" : "A hozzászólások betöltése sikertelen", "_%n unread comment_::_%n unread comments_" : ["%n olvasatlan hozzászólás","%n olvasatlan hozzászólás"], "_1 new comment_::_{unread} new comments_" : ["1 új hozzászólás","{unread} új hozzászólás"], diff --git a/apps/comments/l10n/hu.json b/apps/comments/l10n/hu.json index be60ab8bea6..5f4ccd754bb 100644 --- a/apps/comments/l10n/hu.json +++ b/apps/comments/l10n/hu.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Még nincsenek hozzászólások, kezdje el a beszélgetést!", "No more messages" : "Nincs több üzenet", "Retry" : "Újra", + "Failed to mark comments as read" : "A hozzászólások olvasottnak jelölése sikertelen", "Unable to load the comments list" : "A hozzászólások betöltése sikertelen", "_%n unread comment_::_%n unread comments_" : ["%n olvasatlan hozzászólás","%n olvasatlan hozzászólás"], "_1 new comment_::_{unread} new comments_" : ["1 új hozzászólás","{unread} új hozzászólás"], diff --git a/apps/dashboard/l10n/ar.js b/apps/dashboard/l10n/ar.js index 133847d43d4..6c7e3e94240 100644 --- a/apps/dashboard/l10n/ar.js +++ b/apps/dashboard/l10n/ar.js @@ -1,8 +1,8 @@ OC.L10N.register( "dashboard", { - "Dashboard" : "لوحة التحكم", - "Dashboard app" : "تطبيق لوحة التحكم", + "Dashboard" : "الرئيسية", + "Dashboard app" : "تطبيق الصفحة الرئيسية", "Customize" : "تعديل", "Edit widgets" : "تعديل الودجات", "Weather service" : "خدمة احوال الطقس", diff --git a/apps/dashboard/l10n/ar.json b/apps/dashboard/l10n/ar.json index 77a25c8a0ca..924951fab62 100644 --- a/apps/dashboard/l10n/ar.json +++ b/apps/dashboard/l10n/ar.json @@ -1,6 +1,6 @@ { "translations": { - "Dashboard" : "لوحة التحكم", - "Dashboard app" : "تطبيق لوحة التحكم", + "Dashboard" : "الرئيسية", + "Dashboard app" : "تطبيق الصفحة الرئيسية", "Customize" : "تعديل", "Edit widgets" : "تعديل الودجات", "Weather service" : "خدمة احوال الطقس", diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js index ebecf28a986..8c5a24aa162 100644 --- a/apps/dav/l10n/ca.js +++ b/apps/dav/l10n/ca.js @@ -13,52 +13,52 @@ OC.L10N.register( "{actor} restored calendar {calendar}" : "{actor} ha restaurat el calendari {calendar}", "You restored calendar {calendar}" : "Heu restaurat el calendari {calendar}", "You shared calendar {calendar} as public link" : "Heu compartit el calendari {calendar} amb un enllaç públic", - "You removed public link for calendar {calendar}" : "Heu eliminat l'enllaç públic del calendari {calendar}", + "You removed public link for calendar {calendar}" : "Heu suprimit l'enllaç públic del calendari {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} ha compartit el calendari {calendar} amb vós", "You shared calendar {calendar} with {user}" : "Heu compartit el calendari {calendar} amb {user}", "{actor} shared calendar {calendar} with {user}" : "{actor} ha compartit el calendari {calendar} amb {user}", "{actor} unshared calendar {calendar} from you" : "{actor} ha deixat de compartir el calendari {calendar} amb vós", "You unshared calendar {calendar} from {user}" : "Heu deixat de compartir el calendari {calendar} amb {user}", - "{actor} unshared calendar {calendar} from {user}" : "{actor} no ha compartit el calendari {calendar} amb {user}", - "{actor} unshared calendar {calendar} from themselves" : "{actor} no comparteixen el calendari {calendar} de si mateixos", + "{actor} unshared calendar {calendar} from {user}" : "{actor} ha deixat de compartir el calendari {calendar} amb {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} ha deixat de compartir el calendari {calendar} amb si mateix", "You shared calendar {calendar} with group {group}" : "Heu compartit el calendari {calendar} amb el grup {group}", "{actor} shared calendar {calendar} with group {group}" : "{actor} ha compartit el calendari {calendar} amb el grup {group}", - "You unshared calendar {calendar} from group {group}" : "Heu desactivat el calendari {calendar} del grup {group}", - "{actor} unshared calendar {calendar} from group {group}" : "{actor} calendari no publicat {calendar} del grup {grup}", + "You unshared calendar {calendar} from group {group}" : "Heu deixat de compartir el calendari {calendar} amb el grup {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} ha deixat de compartir el calendari {calendar} amb el grup {grup}", "Untitled event" : "Esdeveniment sense títol", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creat l'esdeveniment {event} al calendari {calendar}", "You created event {event} in calendar {calendar}" : "Heu creat l'esdeveniment {event} al calendari {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha suprimit l'esdeveniment {esdeveniment} del calendari {calendar}", "You deleted event {event} from calendar {calendar}" : "Heu suprimit l'esdeveniment {event} del calendari {calendar}", - "{actor} updated event {event} in calendar {calendar}" : "{actor} esdeveniment actualitzat {esdeveniment} al calendari {calendar}", - "You updated event {event} in calendar {calendar}" : "Heu actualitzat l'esdeveniment {event} al calendari {calendar}", - "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha mogut l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Heu mogut l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", - "{actor} restored event {event} of calendar {calendar}" : "{actor} esdeveniment restaurat {event} del calendari {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} ha actualitzat l'esdeveniment {esdeveniment} del calendari {calendar}", + "You updated event {event} in calendar {calendar}" : "Heu actualitzat l'esdeveniment {event} del calendari {calendar}", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha desplaçat l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Heu desplaçat l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restaurat l'esdeveniment {event} del calendari {calendar}", "You restored event {event} of calendar {calendar}" : "Heu restaurat l'esdeveniment {event} del calendari {calendar}", "Busy" : "Ocupat", - "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creat la tasca pendent {todo} a la llista {calendar}", - "You created to-do {todo} in list {calendar}" : "Heu creat la tasca pendent {todo} a la llista {calendar}", - "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha suprimit tasques pendents {todo} de la llista {calendar}", + "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creat la tasca pendent {todo} en la llista {calendar}", + "You created to-do {todo} in list {calendar}" : "Heu creat la tasca pendent {todo} en la llista {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha suprimit la tasca pendent {todo} de la llista {calendar}", "You deleted to-do {todo} from list {calendar}" : "Heu suprimit la tasca pendent {todo} de la llista {calendar}", - "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualitzat tasques pendents {todo} a la llista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Heu actualitzat la tasca pendent {todo} a la llista {calendar}", - "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resolt la tasca pendent {todo} a la llista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Heu resolt la tasca pendent {todo} a la llista {calendar}", - "{actor} reopened to-do {todo} in list {calendar}" : "{actor} va reobrir tasques pendents {todo} a la llista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Heu reobert les tasques pendents {todo} a la llista {calendar}", - "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha mogut la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Heu mogut la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualitzat la tasca pendent {todo} de la llista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Heu actualitzat la tasca pendent {todo} de la llista {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resolt la tasca pendent {todo} de la llista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Heu resolt la tasca pendent {todo} de la llista {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} ha tornat a obrir la tasca pendent {todo} de la llista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Heu tornat a obrir la tasca pendent {todo} de la llista {calendar}", + "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha desplaçat la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Heu desplaçat la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", "Calendar, contacts and tasks" : "Calendari, contactes i tasques", - "A <strong>calendar</strong> was modified" : "El <strong>calendari</strong> has estat modificat", - "A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari", + "A <strong>calendar</strong> was modified" : "S'ha modificat un <strong>calendari</strong>", + "A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong>esdeveniment</strong> del calendari", "A calendar <strong>to-do</strong> was modified" : "S'ha modificat una <strong>tasca pendent</strong> del calendari", "Contact birthdays" : "Aniversaris dels contactes", "Death of %s" : "Mort de %s", "Untitled calendar" : "Calendari sense títol", "Calendar:" : "Calendari:", "Date:" : "Data:", - "Where:" : "On:", + "Where:" : "Ubicació:", "Description:" : "Descripció:", "_%n year_::_%n years_" : ["%n any","%n anys"], "_%n month_::_%n months_" : ["%n mes","%n mesos"], @@ -70,91 +70,96 @@ OC.L10N.register( "Calendar: %s" : "Calendari: %s", "Date: %s" : "Data: %s", "Description: %s" : "Descripció: %s", - "Where: %s" : "On: %s", + "Where: %s" : "Ubicació: %s", "%1$s via %2$s" : "%1$s mitjançant %2$s", - "Cancelled: %1$s" : "Cancel·lat: %1$s", - "\"%1$s\" has been canceled" : "\"%1$s\" s'ha cancel·lat", + "Cancelled: %1$s" : "S'ha cancel·lat: %1$s", + "\"%1$s\" has been canceled" : "S'ha cancel·lat «%1$s»", "Re: %1$s" : "Re: %1$s", - "%1$s has responded to your invitation" : "%1$s ha respost a la teva invitació", - "Invitation updated: %1$s" : "Invitació actualitzada: %1$s", - "%1$s updated the event \"%2$s\"" : "%1$s ha actualitzat l'esdeveniment \"%2$s\"", + "%1$s has accepted your invitation" : "%1$s ha acceptat la vostra invitació", + "%1$s has tentatively accepted your invitation" : "%1$s ha acceptat provisionalment la vostra invitació", + "%1$s has declined your invitation" : "%1$s ha rebutjat la vostra invitació", + "%1$s has responded to your invitation" : "%1$s ha respost a la vostra invitació", + "Invitation updated: %1$s" : "S'ha actualitzat la invitació: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s ha actualitzat l'esdeveniment «%2$s»", "Invitation: %1$s" : "Invitació: %1$s", - "%1$s would like to invite you to \"%2$s\"" : "%1$s vol convidar-vos a \"%2$s\"", - "Organizer:" : "Organitzador:", + "%1$s would like to invite you to \"%2$s\"" : "%1$s vol convidar-vos a «%2$s»", + "Organizer:" : "Organització:", "Attendees:" : "Assistents:", "Title:" : "Títol:", "Time:" : "Hora:", "Location:" : "Ubicació:", "Link:" : "Enllaç:", "Accept" : "Accepta", - "Decline" : "Declina", - "More options …" : "Més opcions …", + "Decline" : "Rebutja", + "More options …" : "Més opcions…", "More options at %s" : "Més opcions a %s", "Contacts" : "Contactes", "{actor} created address book {addressbook}" : "{actor} ha creat la llibreta d'adreces {addressbook}", "You created address book {addressbook}" : "Heu creat la llibreta d'adreces {addressbook}", - "{actor} deleted address book {addressbook}" : "{actor} llibreta d'adreces suprimida {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} ha suprimit la llibreta d'adreces {addressbook}", "You deleted address book {addressbook}" : "Heu suprimit la llibreta d'adreces {addressbook}", - "{actor} updated address book {addressbook}" : "{actor} llibreta d'adreces actualitzada {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} ha actualitzat la llibreta d'adreces {addressbook}", "You updated address book {addressbook}" : "Heu actualitzat la llibreta d'adreces {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb vostè", + "{actor} shared address book {addressbook} with you" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb vós", "You shared address book {addressbook} with {user}" : "Heu compartit la llibreta d'adreces {addressbook} amb {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb vostè", + "{actor} unshared address book {addressbook} from you" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb vós", "You unshared address book {addressbook} from {user}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} de {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} de {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} d'ells mateixos", + "{actor} unshared address book {addressbook} from {user}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb si mateix", "You shared address book {addressbook} with group {group}" : "Heu compartit la llibreta d'adreces {addressbook} amb el grup {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb el grup {group}", - "You unshared address book {addressbook} from group {group}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} del grup {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} del grup {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creat el contacte {card} a la llibreta d'adreces {addressbook}", - "You created contact {card} in address book {addressbook}" : "Heu creat el contacte {card} a la llibreta d'adreces {addressbook}", + "You unshared address book {addressbook} from group {group}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} amb el grup {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb el grup {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creat el contacte {card} en la llibreta d'adreces {addressbook}", + "You created contact {card} in address book {addressbook}" : "Heu creat el contacte {card} en la llibreta d'adreces {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha suprimit el contacte {card} de la llibreta d'adreces {addressbook}", "You deleted contact {card} from address book {addressbook}" : "Heu suprimit el contacte {card} de la llibreta d'adreces {addressbook}", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualitzat el contacte {card} a la llibreta d'adreces {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Heu actualitzat el contacte {card} a la llibreta d'adreces {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualitzat el contacte {card} de la llibreta d'adreces {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Heu actualitzat el contacte {card} de la llibreta d'adreces {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "S'ha modificat un <strong>contacte</strong> o una <strong>llibreta d'adreces</strong>", + "Accounts" : "Comptes", + "System address book which holds all accounts" : "Llibreta d'adreces del sistema que conté tots els comptes", "File is not updatable: %1$s" : "El fitxer no es pot actualitzar: %1$s", - "Could not write to final file, canceled by hook" : "No s'ha pogut escriure al fitxer final, cancel·lat per ganxo", + "Could not write to final file, canceled by hook" : "No s'ha pogut escriure el fitxer final perquè el ganxo ho ha cancel·lat", "Could not write file contents" : "No s'ha pogut escriure el contingut del fitxer", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error en copiar el fitxer a la ubicació de destí (copiat: %1$s, mida esperada del fitxer: %2$s)", - "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "S'esperava una mida de fitxer de %1$s però llegit (des del client Nextcloud) i escrit (a l'emmagatzematge de Nextcloud) %2$s. Pot ser un problema de xarxa al costat d'enviament o un problema d'escriptura a l'emmagatzematge del costat del servidor.", - "Could not rename part file to final file, canceled by hook" : "No s'ha pogut canviar el nom del fitxer de la part al fitxer final, cancel·lat per ganxo", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "S'ha produït un error en copiar el fitxer a la ubicació de destinació (dades copiades: %1$s, mida esperada del fitxer: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "S'esperava una mida de fitxer de %1$s, però s'han llegit (des del client del Nextcloud) i s'han escrit (a l'emmagatzematge del Nextcloud) %2$s. Pot ser un problema de xarxa del costat d'enviament o un problema d'escriptura a l'emmagatzematge del costat del servidor.", + "Could not rename part file to final file, canceled by hook" : "No s'ha pogut canviar el nom del fitxer de part al fitxer final perquè el ganxo ho ha cancel·lat", "Could not rename part file to final file" : "No s'ha pogut canviar el nom del fitxer de part al fitxer final", "Failed to check file size: %1$s" : "No s'ha pogut comprovar la mida del fitxer: %1$s", - "Could not open file" : "No s’ha pogut obrir el fitxer", + "Could not open file" : "No s'ha pogut obrir el fitxer", "Encryption not ready: %1$s" : "El xifratge no està preparat: %1$s", "Failed to open file: %1$s" : "No s'ha pogut obrir el fitxer: %1$s", "Failed to unlink: %1$s" : "No s'ha pogut desenllaçar: %1$s", - "Invalid chunk name" : "Nom del fragment no vàlid", - "Could not rename part file assembled from chunks" : "No s'ha pogut canviar el nom del fitxer de peces muntat a partir de fragments", + "Invalid chunk name" : "El nom del fragment no és vàlid", + "Could not rename part file assembled from chunks" : "No s'ha pogut canviar el nom del fitxer de part muntat a partir de fragments", "Failed to write file contents: %1$s" : "No s'ha pogut escriure el contingut del fitxer: %1$s", "File not found: %1$s" : "No s'ha trobat el fitxer: %1$s", - "System is in maintenance mode." : "Sistema en mode de manteniment.", - "Upgrade needed" : "Fa falta l'actualització", - "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "El vostre %s cal configurar-se per utilitzar HTTPS per poder fer servir CalDAV i CardDAV amb iOS/macOS.", + "System is in maintenance mode." : "El sistema és en mode de manteniment.", + "Upgrade needed" : "Cal actualitzar", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Cal que configureu el %s perquè utilitzi HTTPS per a poder utilitzar CalDAV i CardDAV amb l'iOS/macOS.", "Configures a CalDAV account" : "Configura un compte CalDAV", "Configures a CardDAV account" : "Configura un compte CardDAV", "Events" : "Esdeveniments", "Tasks" : "Tasques", "Untitled task" : "Tasca sense títol", - "Completed on %s" : "Completat a %s", - "Due on %s by %s" : "Venciment a %s per %s", - "Due on %s" : "Venç en %s", + "Completed on %s" : "Completada el %s", + "Due on %s by %s" : "Venç el %s a les %s", + "Due on %s" : "Venç el %s", "Migrated calendar (%1$s)" : "Calendari migrat (%1$s)", - "Calendars including events, details and attendees" : "Calendaris que inclouen esdeveniments, detalls i assistents", + "Calendars including events, details and attendees" : "Calendaris amb esdeveniments, detalls i assistents", "Contacts and groups" : "Contactes i grups", "WebDAV" : "WebDAV", - "WebDAV endpoint" : "Punt final de WebDAV", + "WebDAV endpoint" : "Extrem WebDAV", "Availability" : "Disponibilitat", - "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, els altres usuaris veuran quan sou fora de l'oficina quan reserven una reunió.", - "Time zone:" : "Zona horària:", + "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta d'usuaris veuran quan sou fora de l'oficina quan planifiquin una reunió.", + "Time zone:" : "Fus horari:", "to" : "a", - "Delete slot" : "Suprimeix forat", - "No working hours set" : "Sense horari de treball establert", - "Add slot" : "Afegeix una forat", + "Delete slot" : "Suprimeix la franja", + "No working hours set" : "No s'ha definit cap horari laboral", + "Add slot" : "Afegeix una franja", "Monday" : "Dilluns", "Tuesday" : "Dimarts", "Wednesday" : "Dimecres", @@ -162,30 +167,30 @@ OC.L10N.register( "Friday" : "Divendres", "Saturday" : "Dissabte", "Sunday" : "Diumenge", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari a \"No molestar\" fora de la disponibilitat per silenciar totes les notificacions.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari com a «No molesteu» fora de la disponibilitat per a silenciar totes les notificacions", "Save" : "Desa", "Failed to load availability" : "No s'ha pogut carregar la disponibilitat", - "Saved availability" : "Disponibilitat guardada", + "Saved availability" : "S'ha desat la disponibilitat", "Failed to save availability" : "No s'ha pogut desar la disponibilitat", "Calendar server" : "Servidor de calendari", "Send invitations to attendees" : "Envia invitacions als assistents", - "Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversari", - "Birthday calendars will be generated by a background job." : "Els calendaris d'aniversari es generaran per un procés en segon pla..", - "Hence they will not be available immediately after enabling but will show up after some time." : "Per tant, no estaran disponibles immediatament després d'habilitar-los, però apareixeran d'aquí una estona.", + "Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversaris", + "Birthday calendars will be generated by a background job." : "Un procés en segon pla generarà els calendaris d'aniversaris.", + "Hence they will not be available immediately after enabling but will show up after some time." : "Per tant, no estaran disponibles immediatament després d'habilitar-los, però apareixeran després d'una estona.", "Send notifications for events" : "Envia notificacions per als esdeveniments", - "Notifications are sent via background jobs, so these must occur often enough." : "Les notificacions s'envien per feines en segon pla, així que això ha de succeir bastant sovint.", - "Send reminder notifications to calendar sharees as well" : "També envieu notificacions de recordatoris als recursos compartits del calendari", + "Notifications are sent via background jobs, so these must occur often enough." : "Les notificacions les envien feines en segon pla, de manera que han d'ocórrer prou sovint.", + "Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari", "Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.", - "Enable notifications for events via push" : "Habiliteu les notificacions per a esdeveniments mitjançant l’empenyiment", - "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l’aplicació de Calendari{linkclose} o {calendardocopen}connecteu el vostre escriptori i el mòbil per sincronitzar ↗{linkclose}.", - "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Si us plau, assegureu-vos de configurar correctament {emailopen}el servidor de correu electrònic{linkclose}.", - "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat de la vostra assistència.", - "Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.", + "Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments", + "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l'aplicació Calendari{linkclose} o {calendardocopen}connecteu el vostre dispositiu d'escriptori i el mòbil per a sincronitzar-los ↗{linkclose}.", + "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assegureu-vos de configurar correctament el{emailopen}servidor de correu electrònic{linkclose}.", + "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.", + "Please contact the organizer directly." : "Contacteu amb l'organització directament.", "Are you accepting the invitation?" : "Accepteu la invitació?", "Tentative" : "Provisional", - "Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.", - "Invitation canceled" : "Invitació cancel·lada", - "Invitation updated" : "Invitació actualitzada", + "Your attendance was updated successfully." : "S'ha actualitzat correctament l'assistència.", + "Invitation canceled" : "S'ha cancel·lat la invitació", + "Invitation updated" : "S'ha actualitzat la invitació", "Invitation" : "Invitació" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json index ca4dcc31a15..6b92dedc53e 100644 --- a/apps/dav/l10n/ca.json +++ b/apps/dav/l10n/ca.json @@ -11,52 +11,52 @@ "{actor} restored calendar {calendar}" : "{actor} ha restaurat el calendari {calendar}", "You restored calendar {calendar}" : "Heu restaurat el calendari {calendar}", "You shared calendar {calendar} as public link" : "Heu compartit el calendari {calendar} amb un enllaç públic", - "You removed public link for calendar {calendar}" : "Heu eliminat l'enllaç públic del calendari {calendar}", + "You removed public link for calendar {calendar}" : "Heu suprimit l'enllaç públic del calendari {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} ha compartit el calendari {calendar} amb vós", "You shared calendar {calendar} with {user}" : "Heu compartit el calendari {calendar} amb {user}", "{actor} shared calendar {calendar} with {user}" : "{actor} ha compartit el calendari {calendar} amb {user}", "{actor} unshared calendar {calendar} from you" : "{actor} ha deixat de compartir el calendari {calendar} amb vós", "You unshared calendar {calendar} from {user}" : "Heu deixat de compartir el calendari {calendar} amb {user}", - "{actor} unshared calendar {calendar} from {user}" : "{actor} no ha compartit el calendari {calendar} amb {user}", - "{actor} unshared calendar {calendar} from themselves" : "{actor} no comparteixen el calendari {calendar} de si mateixos", + "{actor} unshared calendar {calendar} from {user}" : "{actor} ha deixat de compartir el calendari {calendar} amb {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} ha deixat de compartir el calendari {calendar} amb si mateix", "You shared calendar {calendar} with group {group}" : "Heu compartit el calendari {calendar} amb el grup {group}", "{actor} shared calendar {calendar} with group {group}" : "{actor} ha compartit el calendari {calendar} amb el grup {group}", - "You unshared calendar {calendar} from group {group}" : "Heu desactivat el calendari {calendar} del grup {group}", - "{actor} unshared calendar {calendar} from group {group}" : "{actor} calendari no publicat {calendar} del grup {grup}", + "You unshared calendar {calendar} from group {group}" : "Heu deixat de compartir el calendari {calendar} amb el grup {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} ha deixat de compartir el calendari {calendar} amb el grup {grup}", "Untitled event" : "Esdeveniment sense títol", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creat l'esdeveniment {event} al calendari {calendar}", "You created event {event} in calendar {calendar}" : "Heu creat l'esdeveniment {event} al calendari {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha suprimit l'esdeveniment {esdeveniment} del calendari {calendar}", "You deleted event {event} from calendar {calendar}" : "Heu suprimit l'esdeveniment {event} del calendari {calendar}", - "{actor} updated event {event} in calendar {calendar}" : "{actor} esdeveniment actualitzat {esdeveniment} al calendari {calendar}", - "You updated event {event} in calendar {calendar}" : "Heu actualitzat l'esdeveniment {event} al calendari {calendar}", - "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha mogut l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Heu mogut l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", - "{actor} restored event {event} of calendar {calendar}" : "{actor} esdeveniment restaurat {event} del calendari {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} ha actualitzat l'esdeveniment {esdeveniment} del calendari {calendar}", + "You updated event {event} in calendar {calendar}" : "Heu actualitzat l'esdeveniment {event} del calendari {calendar}", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha desplaçat l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Heu desplaçat l'esdeveniment {event} del calendari {sourceCalendar} al calendari {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restaurat l'esdeveniment {event} del calendari {calendar}", "You restored event {event} of calendar {calendar}" : "Heu restaurat l'esdeveniment {event} del calendari {calendar}", "Busy" : "Ocupat", - "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creat la tasca pendent {todo} a la llista {calendar}", - "You created to-do {todo} in list {calendar}" : "Heu creat la tasca pendent {todo} a la llista {calendar}", - "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha suprimit tasques pendents {todo} de la llista {calendar}", + "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creat la tasca pendent {todo} en la llista {calendar}", + "You created to-do {todo} in list {calendar}" : "Heu creat la tasca pendent {todo} en la llista {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha suprimit la tasca pendent {todo} de la llista {calendar}", "You deleted to-do {todo} from list {calendar}" : "Heu suprimit la tasca pendent {todo} de la llista {calendar}", - "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualitzat tasques pendents {todo} a la llista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Heu actualitzat la tasca pendent {todo} a la llista {calendar}", - "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resolt la tasca pendent {todo} a la llista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Heu resolt la tasca pendent {todo} a la llista {calendar}", - "{actor} reopened to-do {todo} in list {calendar}" : "{actor} va reobrir tasques pendents {todo} a la llista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Heu reobert les tasques pendents {todo} a la llista {calendar}", - "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha mogut la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Heu mogut la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualitzat la tasca pendent {todo} de la llista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Heu actualitzat la tasca pendent {todo} de la llista {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resolt la tasca pendent {todo} de la llista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Heu resolt la tasca pendent {todo} de la llista {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} ha tornat a obrir la tasca pendent {todo} de la llista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Heu tornat a obrir la tasca pendent {todo} de la llista {calendar}", + "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha desplaçat la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Heu desplaçat la tasca pendent {todo} de la llista {sourceCalendar} a la llista {targetCalendar}", "Calendar, contacts and tasks" : "Calendari, contactes i tasques", - "A <strong>calendar</strong> was modified" : "El <strong>calendari</strong> has estat modificat", - "A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari", + "A <strong>calendar</strong> was modified" : "S'ha modificat un <strong>calendari</strong>", + "A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong>esdeveniment</strong> del calendari", "A calendar <strong>to-do</strong> was modified" : "S'ha modificat una <strong>tasca pendent</strong> del calendari", "Contact birthdays" : "Aniversaris dels contactes", "Death of %s" : "Mort de %s", "Untitled calendar" : "Calendari sense títol", "Calendar:" : "Calendari:", "Date:" : "Data:", - "Where:" : "On:", + "Where:" : "Ubicació:", "Description:" : "Descripció:", "_%n year_::_%n years_" : ["%n any","%n anys"], "_%n month_::_%n months_" : ["%n mes","%n mesos"], @@ -68,91 +68,96 @@ "Calendar: %s" : "Calendari: %s", "Date: %s" : "Data: %s", "Description: %s" : "Descripció: %s", - "Where: %s" : "On: %s", + "Where: %s" : "Ubicació: %s", "%1$s via %2$s" : "%1$s mitjançant %2$s", - "Cancelled: %1$s" : "Cancel·lat: %1$s", - "\"%1$s\" has been canceled" : "\"%1$s\" s'ha cancel·lat", + "Cancelled: %1$s" : "S'ha cancel·lat: %1$s", + "\"%1$s\" has been canceled" : "S'ha cancel·lat «%1$s»", "Re: %1$s" : "Re: %1$s", - "%1$s has responded to your invitation" : "%1$s ha respost a la teva invitació", - "Invitation updated: %1$s" : "Invitació actualitzada: %1$s", - "%1$s updated the event \"%2$s\"" : "%1$s ha actualitzat l'esdeveniment \"%2$s\"", + "%1$s has accepted your invitation" : "%1$s ha acceptat la vostra invitació", + "%1$s has tentatively accepted your invitation" : "%1$s ha acceptat provisionalment la vostra invitació", + "%1$s has declined your invitation" : "%1$s ha rebutjat la vostra invitació", + "%1$s has responded to your invitation" : "%1$s ha respost a la vostra invitació", + "Invitation updated: %1$s" : "S'ha actualitzat la invitació: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s ha actualitzat l'esdeveniment «%2$s»", "Invitation: %1$s" : "Invitació: %1$s", - "%1$s would like to invite you to \"%2$s\"" : "%1$s vol convidar-vos a \"%2$s\"", - "Organizer:" : "Organitzador:", + "%1$s would like to invite you to \"%2$s\"" : "%1$s vol convidar-vos a «%2$s»", + "Organizer:" : "Organització:", "Attendees:" : "Assistents:", "Title:" : "Títol:", "Time:" : "Hora:", "Location:" : "Ubicació:", "Link:" : "Enllaç:", "Accept" : "Accepta", - "Decline" : "Declina", - "More options …" : "Més opcions …", + "Decline" : "Rebutja", + "More options …" : "Més opcions…", "More options at %s" : "Més opcions a %s", "Contacts" : "Contactes", "{actor} created address book {addressbook}" : "{actor} ha creat la llibreta d'adreces {addressbook}", "You created address book {addressbook}" : "Heu creat la llibreta d'adreces {addressbook}", - "{actor} deleted address book {addressbook}" : "{actor} llibreta d'adreces suprimida {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} ha suprimit la llibreta d'adreces {addressbook}", "You deleted address book {addressbook}" : "Heu suprimit la llibreta d'adreces {addressbook}", - "{actor} updated address book {addressbook}" : "{actor} llibreta d'adreces actualitzada {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} ha actualitzat la llibreta d'adreces {addressbook}", "You updated address book {addressbook}" : "Heu actualitzat la llibreta d'adreces {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb vostè", + "{actor} shared address book {addressbook} with you" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb vós", "You shared address book {addressbook} with {user}" : "Heu compartit la llibreta d'adreces {addressbook} amb {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb vostè", + "{actor} unshared address book {addressbook} from you" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb vós", "You unshared address book {addressbook} from {user}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} de {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} de {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} d'ells mateixos", + "{actor} unshared address book {addressbook} from {user}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb si mateix", "You shared address book {addressbook} with group {group}" : "Heu compartit la llibreta d'adreces {addressbook} amb el grup {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartit la llibreta d'adreces {addressbook} amb el grup {group}", - "You unshared address book {addressbook} from group {group}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} del grup {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} del grup {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creat el contacte {card} a la llibreta d'adreces {addressbook}", - "You created contact {card} in address book {addressbook}" : "Heu creat el contacte {card} a la llibreta d'adreces {addressbook}", + "You unshared address book {addressbook} from group {group}" : "Heu deixat de compartir la llibreta d'adreces {addressbook} amb el grup {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha deixat de compartir la llibreta d'adreces {addressbook} amb el grup {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creat el contacte {card} en la llibreta d'adreces {addressbook}", + "You created contact {card} in address book {addressbook}" : "Heu creat el contacte {card} en la llibreta d'adreces {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha suprimit el contacte {card} de la llibreta d'adreces {addressbook}", "You deleted contact {card} from address book {addressbook}" : "Heu suprimit el contacte {card} de la llibreta d'adreces {addressbook}", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualitzat el contacte {card} a la llibreta d'adreces {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Heu actualitzat el contacte {card} a la llibreta d'adreces {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualitzat el contacte {card} de la llibreta d'adreces {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Heu actualitzat el contacte {card} de la llibreta d'adreces {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "S'ha modificat un <strong>contacte</strong> o una <strong>llibreta d'adreces</strong>", + "Accounts" : "Comptes", + "System address book which holds all accounts" : "Llibreta d'adreces del sistema que conté tots els comptes", "File is not updatable: %1$s" : "El fitxer no es pot actualitzar: %1$s", - "Could not write to final file, canceled by hook" : "No s'ha pogut escriure al fitxer final, cancel·lat per ganxo", + "Could not write to final file, canceled by hook" : "No s'ha pogut escriure el fitxer final perquè el ganxo ho ha cancel·lat", "Could not write file contents" : "No s'ha pogut escriure el contingut del fitxer", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error en copiar el fitxer a la ubicació de destí (copiat: %1$s, mida esperada del fitxer: %2$s)", - "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "S'esperava una mida de fitxer de %1$s però llegit (des del client Nextcloud) i escrit (a l'emmagatzematge de Nextcloud) %2$s. Pot ser un problema de xarxa al costat d'enviament o un problema d'escriptura a l'emmagatzematge del costat del servidor.", - "Could not rename part file to final file, canceled by hook" : "No s'ha pogut canviar el nom del fitxer de la part al fitxer final, cancel·lat per ganxo", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "S'ha produït un error en copiar el fitxer a la ubicació de destinació (dades copiades: %1$s, mida esperada del fitxer: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "S'esperava una mida de fitxer de %1$s, però s'han llegit (des del client del Nextcloud) i s'han escrit (a l'emmagatzematge del Nextcloud) %2$s. Pot ser un problema de xarxa del costat d'enviament o un problema d'escriptura a l'emmagatzematge del costat del servidor.", + "Could not rename part file to final file, canceled by hook" : "No s'ha pogut canviar el nom del fitxer de part al fitxer final perquè el ganxo ho ha cancel·lat", "Could not rename part file to final file" : "No s'ha pogut canviar el nom del fitxer de part al fitxer final", "Failed to check file size: %1$s" : "No s'ha pogut comprovar la mida del fitxer: %1$s", - "Could not open file" : "No s’ha pogut obrir el fitxer", + "Could not open file" : "No s'ha pogut obrir el fitxer", "Encryption not ready: %1$s" : "El xifratge no està preparat: %1$s", "Failed to open file: %1$s" : "No s'ha pogut obrir el fitxer: %1$s", "Failed to unlink: %1$s" : "No s'ha pogut desenllaçar: %1$s", - "Invalid chunk name" : "Nom del fragment no vàlid", - "Could not rename part file assembled from chunks" : "No s'ha pogut canviar el nom del fitxer de peces muntat a partir de fragments", + "Invalid chunk name" : "El nom del fragment no és vàlid", + "Could not rename part file assembled from chunks" : "No s'ha pogut canviar el nom del fitxer de part muntat a partir de fragments", "Failed to write file contents: %1$s" : "No s'ha pogut escriure el contingut del fitxer: %1$s", "File not found: %1$s" : "No s'ha trobat el fitxer: %1$s", - "System is in maintenance mode." : "Sistema en mode de manteniment.", - "Upgrade needed" : "Fa falta l'actualització", - "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "El vostre %s cal configurar-se per utilitzar HTTPS per poder fer servir CalDAV i CardDAV amb iOS/macOS.", + "System is in maintenance mode." : "El sistema és en mode de manteniment.", + "Upgrade needed" : "Cal actualitzar", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Cal que configureu el %s perquè utilitzi HTTPS per a poder utilitzar CalDAV i CardDAV amb l'iOS/macOS.", "Configures a CalDAV account" : "Configura un compte CalDAV", "Configures a CardDAV account" : "Configura un compte CardDAV", "Events" : "Esdeveniments", "Tasks" : "Tasques", "Untitled task" : "Tasca sense títol", - "Completed on %s" : "Completat a %s", - "Due on %s by %s" : "Venciment a %s per %s", - "Due on %s" : "Venç en %s", + "Completed on %s" : "Completada el %s", + "Due on %s by %s" : "Venç el %s a les %s", + "Due on %s" : "Venç el %s", "Migrated calendar (%1$s)" : "Calendari migrat (%1$s)", - "Calendars including events, details and attendees" : "Calendaris que inclouen esdeveniments, detalls i assistents", + "Calendars including events, details and attendees" : "Calendaris amb esdeveniments, detalls i assistents", "Contacts and groups" : "Contactes i grups", "WebDAV" : "WebDAV", - "WebDAV endpoint" : "Punt final de WebDAV", + "WebDAV endpoint" : "Extrem WebDAV", "Availability" : "Disponibilitat", - "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, els altres usuaris veuran quan sou fora de l'oficina quan reserven una reunió.", - "Time zone:" : "Zona horària:", + "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta d'usuaris veuran quan sou fora de l'oficina quan planifiquin una reunió.", + "Time zone:" : "Fus horari:", "to" : "a", - "Delete slot" : "Suprimeix forat", - "No working hours set" : "Sense horari de treball establert", - "Add slot" : "Afegeix una forat", + "Delete slot" : "Suprimeix la franja", + "No working hours set" : "No s'ha definit cap horari laboral", + "Add slot" : "Afegeix una franja", "Monday" : "Dilluns", "Tuesday" : "Dimarts", "Wednesday" : "Dimecres", @@ -160,30 +165,30 @@ "Friday" : "Divendres", "Saturday" : "Dissabte", "Sunday" : "Diumenge", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari a \"No molestar\" fora de la disponibilitat per silenciar totes les notificacions.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari com a «No molesteu» fora de la disponibilitat per a silenciar totes les notificacions", "Save" : "Desa", "Failed to load availability" : "No s'ha pogut carregar la disponibilitat", - "Saved availability" : "Disponibilitat guardada", + "Saved availability" : "S'ha desat la disponibilitat", "Failed to save availability" : "No s'ha pogut desar la disponibilitat", "Calendar server" : "Servidor de calendari", "Send invitations to attendees" : "Envia invitacions als assistents", - "Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversari", - "Birthday calendars will be generated by a background job." : "Els calendaris d'aniversari es generaran per un procés en segon pla..", - "Hence they will not be available immediately after enabling but will show up after some time." : "Per tant, no estaran disponibles immediatament després d'habilitar-los, però apareixeran d'aquí una estona.", + "Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversaris", + "Birthday calendars will be generated by a background job." : "Un procés en segon pla generarà els calendaris d'aniversaris.", + "Hence they will not be available immediately after enabling but will show up after some time." : "Per tant, no estaran disponibles immediatament després d'habilitar-los, però apareixeran després d'una estona.", "Send notifications for events" : "Envia notificacions per als esdeveniments", - "Notifications are sent via background jobs, so these must occur often enough." : "Les notificacions s'envien per feines en segon pla, així que això ha de succeir bastant sovint.", - "Send reminder notifications to calendar sharees as well" : "També envieu notificacions de recordatoris als recursos compartits del calendari", + "Notifications are sent via background jobs, so these must occur often enough." : "Les notificacions les envien feines en segon pla, de manera que han d'ocórrer prou sovint.", + "Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari", "Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.", - "Enable notifications for events via push" : "Habiliteu les notificacions per a esdeveniments mitjançant l’empenyiment", - "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l’aplicació de Calendari{linkclose} o {calendardocopen}connecteu el vostre escriptori i el mòbil per sincronitzar ↗{linkclose}.", - "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Si us plau, assegureu-vos de configurar correctament {emailopen}el servidor de correu electrònic{linkclose}.", - "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat de la vostra assistència.", - "Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.", + "Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments", + "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l'aplicació Calendari{linkclose} o {calendardocopen}connecteu el vostre dispositiu d'escriptori i el mòbil per a sincronitzar-los ↗{linkclose}.", + "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assegureu-vos de configurar correctament el{emailopen}servidor de correu electrònic{linkclose}.", + "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.", + "Please contact the organizer directly." : "Contacteu amb l'organització directament.", "Are you accepting the invitation?" : "Accepteu la invitació?", "Tentative" : "Provisional", - "Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.", - "Invitation canceled" : "Invitació cancel·lada", - "Invitation updated" : "Invitació actualitzada", + "Your attendance was updated successfully." : "S'ha actualitzat correctament l'assistència.", + "Invitation canceled" : "S'ha cancel·lat la invitació", + "Invitation updated" : "S'ha actualitzat la invitació", "Invitation" : "Invitació" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/dav/l10n/fi.js b/apps/dav/l10n/fi.js index 43c1c87d79a..a466283cb28 100644 --- a/apps/dav/l10n/fi.js +++ b/apps/dav/l10n/fi.js @@ -56,7 +56,11 @@ OC.L10N.register( "%1$s via %2$s" : "%1$s palvelun %2$s kautta", "Cancelled: %1$s" : "Peruutettu: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" on peruttu", + "%1$s has accepted your invitation" : "%1$s on hyväksynyt kutsusi", + "%1$s has declined your invitation" : "%1$s on kieltäytynyt kutsustasi", "%1$s has responded to your invitation" : "%1$s on vastannut kutsuusi", + "Invitation updated: %1$s" : "Kutsu päivitetty: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s päivitti tapahtuman \"%2$s\"", "Invitation: %1$s" : "Kutsu: %1$s", "Organizer:" : "Järjestäjä:", "Attendees:" : "Osallistujat:", @@ -92,6 +96,7 @@ OC.L10N.register( "{actor} updated contact {card} in address book {addressbook}" : "{actor} päivitti yhteystietoa {card} osoitekirjassa {addressbook}", "You updated contact {card} in address book {addressbook}" : "Päivitit yhteystiedon {card} osoitekirjassa {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Yhteystietoa</strong> tai <strong>osoitekirjaa</strong> muokattiin", + "Accounts" : "Tilit", "File is not updatable: %1$s" : "Tiedosto ei ole päivitettävissä: %1$s", "_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"], "Failed to check file size: %1$s" : "Tiedoston koon tarkistaminen epäonnistui: %1$s", diff --git a/apps/dav/l10n/fi.json b/apps/dav/l10n/fi.json index bf09a1f29d7..4d66dd2266f 100644 --- a/apps/dav/l10n/fi.json +++ b/apps/dav/l10n/fi.json @@ -54,7 +54,11 @@ "%1$s via %2$s" : "%1$s palvelun %2$s kautta", "Cancelled: %1$s" : "Peruutettu: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" on peruttu", + "%1$s has accepted your invitation" : "%1$s on hyväksynyt kutsusi", + "%1$s has declined your invitation" : "%1$s on kieltäytynyt kutsustasi", "%1$s has responded to your invitation" : "%1$s on vastannut kutsuusi", + "Invitation updated: %1$s" : "Kutsu päivitetty: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s päivitti tapahtuman \"%2$s\"", "Invitation: %1$s" : "Kutsu: %1$s", "Organizer:" : "Järjestäjä:", "Attendees:" : "Osallistujat:", @@ -90,6 +94,7 @@ "{actor} updated contact {card} in address book {addressbook}" : "{actor} päivitti yhteystietoa {card} osoitekirjassa {addressbook}", "You updated contact {card} in address book {addressbook}" : "Päivitit yhteystiedon {card} osoitekirjassa {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Yhteystietoa</strong> tai <strong>osoitekirjaa</strong> muokattiin", + "Accounts" : "Tilit", "File is not updatable: %1$s" : "Tiedosto ei ole päivitettävissä: %1$s", "_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"], "Failed to check file size: %1$s" : "Tiedoston koon tarkistaminen epäonnistui: %1$s", diff --git a/apps/dav/l10n/gl.js b/apps/dav/l10n/gl.js index b83187896bc..1bbc6a1afb5 100644 --- a/apps/dav/l10n/gl.js +++ b/apps/dav/l10n/gl.js @@ -130,7 +130,7 @@ OC.L10N.register( "Could not open file" : "Non se puido abrir o ficheiro", "Encryption not ready: %1$s" : "O cifrado non está listo: %1$s", "Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s", - "Failed to unlink: %1$s" : "Produciuse un erro ao desvincular: %1$s", + "Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s", "Invalid chunk name" : "O nome do fragmento non é válido", "Could not rename part file assembled from chunks" : "Non se puido cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", "Failed to write file contents: %1$s" : "Produciuse un erro ao escribir o contido do ficheiro: %1$s", @@ -155,9 +155,9 @@ OC.L10N.register( "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configuras o teu horario de traballo, outros usuarios verán cando estás fóra da oficina cando reserven unha reunión.", "Time zone:" : "Franxa horaria:", "to" : "para", - "Delete slot" : "Eliminar slot", + "Delete slot" : "Eliminar franxa horaria", "No working hours set" : "Sen horario de traballo establecido", - "Add slot" : "Engadir slot", + "Add slot" : "Engadir franxa horaria", "Monday" : "luns", "Tuesday" : "martes", "Wednesday" : "mércores", @@ -185,7 +185,7 @@ OC.L10N.register( "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", "Are you accepting the invitation?" : "Acepta vostede o convite?", - "Tentative" : "Tentativa", + "Tentative" : "Provisional", "Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.", "Invitation canceled" : "Convite cancelado", "Invitation updated" : "Convite actualizado", diff --git a/apps/dav/l10n/gl.json b/apps/dav/l10n/gl.json index b897ba7df4b..87296f5f364 100644 --- a/apps/dav/l10n/gl.json +++ b/apps/dav/l10n/gl.json @@ -128,7 +128,7 @@ "Could not open file" : "Non se puido abrir o ficheiro", "Encryption not ready: %1$s" : "O cifrado non está listo: %1$s", "Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s", - "Failed to unlink: %1$s" : "Produciuse un erro ao desvincular: %1$s", + "Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s", "Invalid chunk name" : "O nome do fragmento non é válido", "Could not rename part file assembled from chunks" : "Non se puido cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", "Failed to write file contents: %1$s" : "Produciuse un erro ao escribir o contido do ficheiro: %1$s", @@ -153,9 +153,9 @@ "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configuras o teu horario de traballo, outros usuarios verán cando estás fóra da oficina cando reserven unha reunión.", "Time zone:" : "Franxa horaria:", "to" : "para", - "Delete slot" : "Eliminar slot", + "Delete slot" : "Eliminar franxa horaria", "No working hours set" : "Sen horario de traballo establecido", - "Add slot" : "Engadir slot", + "Add slot" : "Engadir franxa horaria", "Monday" : "luns", "Tuesday" : "martes", "Wednesday" : "mércores", @@ -183,7 +183,7 @@ "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", "Are you accepting the invitation?" : "Acepta vostede o convite?", - "Tentative" : "Tentativa", + "Tentative" : "Provisional", "Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.", "Invitation canceled" : "Convite cancelado", "Invitation updated" : "Convite actualizado", diff --git a/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php b/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php index 2ae47ee89ea..a2607ca13c4 100644 --- a/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php +++ b/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php @@ -105,9 +105,9 @@ class BuildReminderIndexBackgroundJob extends QueuedJob { ->andWhere($query->expr()->gt('id', $query->createNamedParameter($offset))) ->orderBy('id', 'ASC'); - $stmt = $query->execute(); - while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { - $offset = $row['id']; + $result = $query->executeQuery(); + while ($row = $result->fetch(\PDO::FETCH_ASSOC)) { + $offset = (int) $row['id']; if (is_resource($row['calendardata'])) { $row['calendardata'] = stream_get_contents($row['calendardata']); } @@ -120,10 +120,12 @@ class BuildReminderIndexBackgroundJob extends QueuedJob { } if (($this->timeFactory->getTime() - $startTime) > 15) { + $result->closeCursor(); return $offset; } } + $result->closeCursor(); return $stopAt; } } diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index b7ee8bee971..a3b172681f0 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -23,7 +23,7 @@ OC.L10N.register( "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde aktualisiert.", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisiere deinen privaten Schlüssel in deinen persönlichen Einstellungen, um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte melde dich ab und wieder an.", - "Please enable server side encryption in the admin settings in order to use the encryption module." : "Bitte aktiviere server-seitige Verschlüsselung in den Administrationseinstellungen, um das Verschlüsselungsmodul nutzen zu können.", + "Please enable server side encryption in the admin settings in order to use the encryption module." : "Bitte aktiviere server-seitige Verschlüsselung in den Verwaltungs-Einstellungen, um das Verschlüsselungsmodul nutzen zu können.", "Encryption app is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", @@ -36,7 +36,7 @@ OC.L10N.register( "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.", "Default encryption module" : "Standard-Verschlüsselungsmodul", "Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung", - "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.", + "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungs-Einstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde dich ab und wieder an", "Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index 152e557d8cf..787adab043c 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -21,7 +21,7 @@ "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde aktualisiert.", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisiere deinen privaten Schlüssel in deinen persönlichen Einstellungen, um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte melde dich ab und wieder an.", - "Please enable server side encryption in the admin settings in order to use the encryption module." : "Bitte aktiviere server-seitige Verschlüsselung in den Administrationseinstellungen, um das Verschlüsselungsmodul nutzen zu können.", + "Please enable server side encryption in the admin settings in order to use the encryption module." : "Bitte aktiviere server-seitige Verschlüsselung in den Verwaltungs-Einstellungen, um das Verschlüsselungsmodul nutzen zu können.", "Encryption app is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", @@ -34,7 +34,7 @@ "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.", "Default encryption module" : "Standard-Verschlüsselungsmodul", "Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung", - "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.", + "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungs-Einstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde dich ab und wieder an", "Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", diff --git a/apps/encryption/l10n/fi.js b/apps/encryption/l10n/fi.js index d1a180040b5..9c11f3b40eb 100644 --- a/apps/encryption/l10n/fi.js +++ b/apps/encryption/l10n/fi.js @@ -28,6 +28,7 @@ OC.L10N.register( "Bad Signature" : "Virheellinen allekirjoitus", "Missing Signature" : "Puuttuva allekirjoitus", "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", + "Encryption password" : "Salauksen salasana", "Default encryption module" : "Oletus salausmoduuli", "Default encryption module for server-side encryption" : "Oletusarvoinen salausmoduuli palvelimella tehtävään salaukseen", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään", diff --git a/apps/encryption/l10n/fi.json b/apps/encryption/l10n/fi.json index df1e558e5a3..c7a6e99a562 100644 --- a/apps/encryption/l10n/fi.json +++ b/apps/encryption/l10n/fi.json @@ -26,6 +26,7 @@ "Bad Signature" : "Virheellinen allekirjoitus", "Missing Signature" : "Puuttuva allekirjoitus", "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", + "Encryption password" : "Salauksen salasana", "Default encryption module" : "Oletus salausmoduuli", "Default encryption module for server-side encryption" : "Oletusarvoinen salausmoduuli palvelimella tehtävään salaukseen", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään", diff --git a/apps/encryption/l10n/hu.js b/apps/encryption/l10n/hu.js index 7b863df581a..f54c2ee0367 100644 --- a/apps/encryption/l10n/hu.js +++ b/apps/encryption/l10n/hu.js @@ -28,10 +28,15 @@ OC.L10N.register( "Bad Signature" : "Hibás aláírás", "Missing Signature" : "Hiányzó aláírás", "one-time password for server-side-encryption" : "kiszolgálóoldali titkosítás egyszer használatos jelszava", + "Encryption password" : "Titkosítási jelszó", + "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "A rendszergazda bekapcsolta a kiszolgálóoldali titkosítást. A fájljai a következő jelszóval lettek titkosítva: <strong>%s</strong>.", + "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "A rendszergazda bekapcsolta a kiszolgálóoldali titkosítást. A fájljai a következő jelszóval lettek titkosítva: „%s”.", + "Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old log-in password\" field and your current login-password." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.", "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.", "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.", "Default encryption module" : "Alapértelmezett titkosítási modul", "Default encryption module for server-side encryption" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz", + "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Ahhoz, hogy ezt a titkosítási modult használhassa, be kell kapcsolnia a kiszolgálóoldali titkosítást az adminisztrációs felületen. Engedélyezést követően a modul minden fájlt transzparensen titkosít. A titkosítás AES 256 kulcsokon alapul.\nA modul nem módosítja a meglévő fájlokat, csak az újakat titkosítja, miután bekapcsolta a kiszolgálóoldali titkosítást. Nem lehet kikapcsolni a titkosítást, hogy titkosítatlan rendszerre váltson vissza.\nOlvassa el a dokumentációt, hogy minden következménnyel tisztában legyen, mielőtt úgy dönt, hogy engedélyezi a kiszolgálóoldali titkosítást.", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.", "Encrypt the home storage" : "Helyi tároló titkosítása", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva", diff --git a/apps/encryption/l10n/hu.json b/apps/encryption/l10n/hu.json index c15c5900b02..48bbd4d6963 100644 --- a/apps/encryption/l10n/hu.json +++ b/apps/encryption/l10n/hu.json @@ -26,10 +26,15 @@ "Bad Signature" : "Hibás aláírás", "Missing Signature" : "Hiányzó aláírás", "one-time password for server-side-encryption" : "kiszolgálóoldali titkosítás egyszer használatos jelszava", + "Encryption password" : "Titkosítási jelszó", + "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "A rendszergazda bekapcsolta a kiszolgálóoldali titkosítást. A fájljai a következő jelszóval lettek titkosítva: <strong>%s</strong>.", + "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "A rendszergazda bekapcsolta a kiszolgálóoldali titkosítást. A fájljai a következő jelszóval lettek titkosítva: „%s”.", + "Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old log-in password\" field and your current login-password." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.", "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.", "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.", "Default encryption module" : "Alapértelmezett titkosítási modul", "Default encryption module for server-side encryption" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz", + "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Ahhoz, hogy ezt a titkosítási modult használhassa, be kell kapcsolnia a kiszolgálóoldali titkosítást az adminisztrációs felületen. Engedélyezést követően a modul minden fájlt transzparensen titkosít. A titkosítás AES 256 kulcsokon alapul.\nA modul nem módosítja a meglévő fájlokat, csak az újakat titkosítja, miután bekapcsolta a kiszolgálóoldali titkosítást. Nem lehet kikapcsolni a titkosítást, hogy titkosítatlan rendszerre váltson vissza.\nOlvassa el a dokumentációt, hogy minden következménnyel tisztában legyen, mielőtt úgy dönt, hogy engedélyezi a kiszolgálóoldali titkosítást.", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.", "Encrypt the home storage" : "Helyi tároló titkosítása", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva", diff --git a/apps/federatedfilesharing/l10n/gl.js b/apps/federatedfilesharing/l10n/gl.js index 3476aacba27..c296317a12b 100644 --- a/apps/federatedfilesharing/l10n/gl.js +++ b/apps/federatedfilesharing/l10n/gl.js @@ -50,7 +50,7 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Comparte comigo a través do meu ID da nube federada do #Nextcloud", "Cloud ID copied to the clipboard" : "Cloud ID copiouse no portapapeis", "Copy to clipboard" : "Copiar no portapapeis.", - "Clipboard is not available" : "O portapapeis non está dispoñible", + "Clipboard is not available" : "O portapapeis non está dispoñíbel", "Copied!" : "Copiado!", "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", diff --git a/apps/federatedfilesharing/l10n/gl.json b/apps/federatedfilesharing/l10n/gl.json index 7eed2163f6e..d27194964b0 100644 --- a/apps/federatedfilesharing/l10n/gl.json +++ b/apps/federatedfilesharing/l10n/gl.json @@ -48,7 +48,7 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Comparte comigo a través do meu ID da nube federada do #Nextcloud", "Cloud ID copied to the clipboard" : "Cloud ID copiouse no portapapeis", "Copy to clipboard" : "Copiar no portapapeis.", - "Clipboard is not available" : "O portapapeis non está dispoñible", + "Clipboard is not available" : "O portapapeis non está dispoñíbel", "Copied!" : "Copiado!", "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index 29f0a3d5ba5..202d8e3ffda 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -38,6 +38,9 @@ <command>OCA\Files\Command\Get</command> <command>OCA\Files\Command\Put</command> <command>OCA\Files\Command\Delete</command> + <command>OCA\Files\Command\Object\Delete</command> + <command>OCA\Files\Command\Object\Get</command> + <command>OCA\Files\Command\Object\Put</command> </commands> <activity> diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php index 2f99d4a88de..88d3ae10413 100644 --- a/apps/files/composer/composer/autoload_classmap.php +++ b/apps/files/composer/composer/autoload_classmap.php @@ -30,6 +30,10 @@ return array( 'OCA\\Files\\Command\\Delete' => $baseDir . '/../lib/Command/Delete.php', 'OCA\\Files\\Command\\DeleteOrphanedFiles' => $baseDir . '/../lib/Command/DeleteOrphanedFiles.php', 'OCA\\Files\\Command\\Get' => $baseDir . '/../lib/Command/Get.php', + 'OCA\\Files\\Command\\Object\\Delete' => $baseDir . '/../lib/Command/Object/Delete.php', + 'OCA\\Files\\Command\\Object\\Get' => $baseDir . '/../lib/Command/Object/Get.php', + 'OCA\\Files\\Command\\Object\\ObjectUtil' => $baseDir . '/../lib/Command/Object/ObjectUtil.php', + 'OCA\\Files\\Command\\Object\\Put' => $baseDir . '/../lib/Command/Object/Put.php', 'OCA\\Files\\Command\\Put' => $baseDir . '/../lib/Command/Put.php', 'OCA\\Files\\Command\\RepairTree' => $baseDir . '/../lib/Command/RepairTree.php', 'OCA\\Files\\Command\\Scan' => $baseDir . '/../lib/Command/Scan.php', diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php index e7b822e386d..c27db581e61 100644 --- a/apps/files/composer/composer/autoload_static.php +++ b/apps/files/composer/composer/autoload_static.php @@ -45,6 +45,10 @@ class ComposerStaticInitFiles 'OCA\\Files\\Command\\Delete' => __DIR__ . '/..' . '/../lib/Command/Delete.php', 'OCA\\Files\\Command\\DeleteOrphanedFiles' => __DIR__ . '/..' . '/../lib/Command/DeleteOrphanedFiles.php', 'OCA\\Files\\Command\\Get' => __DIR__ . '/..' . '/../lib/Command/Get.php', + 'OCA\\Files\\Command\\Object\\Delete' => __DIR__ . '/..' . '/../lib/Command/Object/Delete.php', + 'OCA\\Files\\Command\\Object\\Get' => __DIR__ . '/..' . '/../lib/Command/Object/Get.php', + 'OCA\\Files\\Command\\Object\\ObjectUtil' => __DIR__ . '/..' . '/../lib/Command/Object/ObjectUtil.php', + 'OCA\\Files\\Command\\Object\\Put' => __DIR__ . '/..' . '/../lib/Command/Object/Put.php', 'OCA\\Files\\Command\\Put' => __DIR__ . '/..' . '/../lib/Command/Put.php', 'OCA\\Files\\Command\\RepairTree' => __DIR__ . '/..' . '/../lib/Command/RepairTree.php', 'OCA\\Files\\Command\\Scan' => __DIR__ . '/..' . '/../lib/Command/Scan.php', diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 566f300893a..957d77a3e6a 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -1 +1 @@ -.actions{padding:3px;height:100%;display:inline-block;float:left}.actions input,.actions button,.actions .button{margin:0;float:left}.actions .button a{color:#555}.actions .button a:hover,.actions .button a:focus{background-color:var(--color-background-hover)}.actions .button a:active{background-color:var(--color-primary-element-light)}.actions.creatable{position:relative;display:flex;flex:1 1}.actions.creatable .button:not(:last-child){margin-right:3px}.actions.hidden{display:none}#trash{margin-right:8px;float:right;z-index:1010;padding:10px;font-weight:normal}.newFileMenu .error,.newFileMenu .error+.icon-confirm,.files-fileList .error{color:var(--color-error);border-color:var(--color-error)}.files-filestable{position:relative;width:100%;min-width:250px;display:block;flex-direction:column}.emptycontent:not(.hidden)~.files-filestable{display:none}.files-filestable thead{position:-webkit-sticky;position:sticky;top:44px;z-index:60;display:block;background-color:var(--color-main-background-translucent)}.files-filestable tbody{display:table;width:100%}.files-filestable tbody tr[data-permissions="0"],.files-filestable tbody tr[data-permissions="16"]{background-color:var(--color-background-dark)}.files-filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,.files-filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext{color:var(--color-text-maxcontrast)}.files-filestable tbody tr[data-e2eencrypted=true] .selection{pointer-events:none}.files-filestable.hidden{display:none}.app-files #app-content>.viewcontainer{min-height:0%;width:100%}.app-files #app-content{width:calc(100% - 300px);overflow-anchor:none}.file-drag,.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:var(--color-primary-element-light) !important}.app-files #app-content.dir-drop{background-color:var(--color-main-background) !important}.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:rgba(0,0,0,0) !important}.app-files #app-content.dir-drop .files-filestable tbody tr.dropping-to-dir{background-color:var(--color-primary-element-light) !important}.nav-icon-files{background-image:var(--icon-folder-dark)}.nav-icon-recent{background-image:var(--icon-recent-dark)}.nav-icon-favorites{background-image:var(--icon-starred-dark)}.nav-icon-sharingin,.nav-icon-sharingout,.nav-icon-pendingshares,.nav-icon-shareoverview{background-image:var(--icon-share-dark)}.nav-icon-sharinglinks{background-image:var(--icon-public-dark)}.nav-icon-extstoragemounts{background-image:var(--icon-external-dark)}.nav-icon-trashbin{background-image:var(--icon-delete-dark)}.nav-icon-trashbin-starred{background-image:var(--icon-delete-#ff0000)}.nav-icon-deletedshares{background-image:var(--icon-unshare-dark)}.nav-icon-favorites-starred{background-image:var(--icon-starred-yellow)}#app-navigation .nav-files a.nav-icon-files{width:auto}#app-navigation .nav-files a.new{width:40px;height:32px;padding:0 10px;margin:0;cursor:pointer}#app-navigation .nav-files a.new.hidden{display:none}#app-navigation .nav-files a.new.disabled{opacity:.3}.files-filestable tbody tr{height:51px}.files-filestable tbody tr:hover,.files-filestable tbody tr:focus,.files-filestable tbody .name:focus,.files-filestable tbody tr:hover .filename form,table tr.mouseOver td{background-color:var(--color-background-hover)}.files-filestable tbody tr:active,.files-filestable tbody tr.highlighted,.files-filestable tbody tr.highlighted .name:focus,.files-filestable tbody tr.selected,.files-filestable tbody tr.searchresult{background-color:var(--color-primary-element-light)}tbody a{color:var(--color-main-text)}span.conflict-path,span.extension,span.uploading,td.date{color:var(--color-text-maxcontrast)}span.conflict-path,span.extension{-webkit-transition:opacity 300ms;-moz-transition:opacity 300ms;-o-transition:opacity 300ms;transition:opacity 300ms;vertical-align:top}tr:hover span.conflict-path,tr:focus span.conflict-path,tr:hover span.extension,tr:focus span.extension{opacity:1;color:var(--color-text-maxcontrast)}table th,table th a{color:var(--color-text-maxcontrast)}table.multiselect th a{color:var(--color-main-text)}table th .columntitle{display:block;padding:15px;height:50px;box-sizing:border-box;-moz-box-sizing:border-box;vertical-align:middle}table th .columntitle:focus-visible{border-radius:2px}table.multiselect th .columntitle{display:inline-block;margin-right:-20px}table th .columntitle.name{padding-left:0;margin-left:44px}table.multiselect th .columntitle.name{margin-left:0}table th .sort-indicator{width:10px;height:8px;margin-left:5px;display:inline-block;vertical-align:text-bottom;opacity:.3}.sort-indicator.hidden,.multiselect .sort-indicator,table.multiselect th:hover .sort-indicator.hidden,table.multiselect th:focus .sort-indicator.hidden{visibility:hidden}.multiselect .sort,.multiselect .sort span{cursor:default}table th:hover .sort-indicator.hidden,table th:focus .sort-indicator.hidden{visibility:visible}table th,table td{border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table td{padding:0 15px;font-style:normal;background-position:8px center;background-repeat:no-repeat}table th.column-name{position:relative;width:9999px;padding:0}.column-name-container{position:relative;height:50px}table th.column-selection{padding-top:2px}table th.column-size,table td.filesize{text-align:right}table th.column-mtime,table td.date,table th.column-last,table td.column-last{-moz-box-sizing:border-box;box-sizing:border-box;position:relative;min-width:130px}#app-content-recent,#app-content-favorites,#app-content-shareoverview,#app-content-sharingout,#app-content-sharingin,#app-content-sharinglinks,#app-content-deletedshares,#app-content-pendingshares{margin-top:22px}#app-content-recent thead,#app-content-favorites thead,#app-content-shareoverview thead,#app-content-sharingout thead,#app-content-sharingin thead,#app-content-sharinglinks thead,#app-content-deletedshares thead,#app-content-pendingshares thead{top:0}table.multiselect thead th{background-color:var(--color-main-background-translucent);font-weight:bold}#app-content.with-app-sidebar table.multiselect thead{margin-right:27%}table.multiselect .column-name{position:relative;width:9999px}table.multiselect .column-mtime>a{display:none}table td.selection,table th.selection,table td.fileaction{width:32px;text-align:center}table td.filename a.name,table td.filename p.name{display:flex;position:relative;-moz-box-sizing:border-box;box-sizing:border-box;height:50px;line-height:50px;padding:0}table td.filename .thumbnail-wrapper{width:0;min-width:50px;max-width:50px;height:50px}table td.filename .thumbnail-wrapper.icon-loading-small:after{z-index:10}table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail{opacity:.2}table td.filename .thumbnail{display:inline-block;width:32px;height:32px;background-size:contain;background-position:center;background-repeat:no-repeat;margin-left:9px;margin-top:9px;border-radius:var(--border-radius);cursor:pointer;position:absolute;z-index:4}table td.filename p.name .thumbnail{cursor:default}table tr[data-has-preview=true] .thumbnail{border:1px solid var(--color-border)}table:not(.view-grid) td.filename input.filename{width:70% !important;margin-left:48px !important;cursor:text}table td.filename form{margin-top:-40px;position:relative;top:-6px}table td.filename a,table td.login,table td.logout,table td.download,table td.upload,table td.create,table td.delete{padding:3px 8px 8px 3px}table td.filename .nametext,.modified,.column-last>span:first-child{float:left;padding:15px 0}.modified,.column-last>span:first-child{position:relative;overflow:hidden;text-overflow:ellipsis;width:110px}table td.filename{max-width:0}table td.filename .nametext{width:0;flex-grow:1;display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:100%;z-index:10;padding:0 20px 0 0}table td.filename .system-tags{--min-size: 32px;display:flex;justify-content:center;align-items:center;flex:1 1 100%;min-width:calc(var(--min-size)*2);max-width:300px}table td.filename .system-tags .system-tags__tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}table td.filename .system-tags .system-tags__tag--more{overflow:visible;text-overflow:initial}table td.filename .system-tags .system-tags__tag+.system-tags__tag{margin-left:5px}.hide-hidden-files .files-filestable .files-fileList tr.hidden-file,.hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging{display:none !important}.files-fileList tr.animate-opacity{-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.files-fileList tr.dragging{opacity:.2}table td.filename .nametext .innernametext{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top}table td.filename .uploadtext{position:absolute;font-weight:normal;margin-left:50px;left:0;bottom:0;height:20px;padding:0 4px;padding-left:1px;font-size:11px;line-height:22px;color:var(--color-text-maxcontrast);text-overflow:ellipsis;white-space:nowrap}table td.selection{padding:0}.files-fileList tr td.selection>.selectCheckBox+label:before{opacity:.3;margin-right:0}.files-fileList tr:hover td.selection>.selectCheckBox+label:before,.files-fileList tr:focus td.selection>.selectCheckBox+label:before,.files-fileList tr td.selection>.selectCheckBox:checked+label:before,.files-fileList tr.selected td.selection>.selectCheckBox+label:before{opacity:1}.files-fileList tr.halfselected td.selection>.selectCheckBox+label:before{opacity:.5}.files-fileList tr td.selection>.selectCheckBox+label,.select-all+label{padding:16px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill);outline:none !important;border:2px solid var(--color-primary-element) !important;padding:14px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{outline-offset:0px}.files-fileList tr td.filename{position:relative;width:100%;padding-left:0;padding-right:0;-webkit-transition:background-image 500ms;-moz-transition:background-image 500ms;-o-transition:background-image 500ms;transition:background-image 500ms}.files-fileList tr td.filename a.name label,.files-fileList tr td.filename p.name label{position:absolute;width:80%;height:50px}.files-fileList tr td.filename .favorite{display:inline-block;float:left}.files-fileList tr td.filename .favorite-mark{position:absolute;display:block;top:-6px;right:-6px;line-height:100%;text-align:center}#uploadsize-message,#delete-confirm{display:none}.fileactions{z-index:50}.busy .fileactions,.busy .action{visibility:hidden}.bubble,#app-navigation .app-navigation-entry-menu{min-width:100px}.files-fileList .icon-loading-small{opacity:1 !important;display:inline !important}.files-fileList .action.action-share-notification span,.files-fileList a.name{cursor:default !important}.files-fileList a.name.disabled *{cursor:default}.files-fileList a.name.disabled a,.files-fileList a.name.disabled a *{cursor:pointer}.files-fileList a.name.disabled:focus{background:none}a.action>img{height:16px;width:16px;vertical-align:text-bottom}a.action.action-editlocally img.icon{filter:var(--background-invert-if-dark)}.selectedActions{position:relative;display:inline-block;vertical-align:middle}.selectedActions.hidden{display:none}.selectedActions a{display:inline;line-height:50px;padding:16px 5px}.selectedActions a.hidden{display:none}.selectedActions a img{position:relative;vertical-align:text-bottom;margin-bottom:-1px}.selectedActions .actions-selected .icon-more{margin-top:-3px}.files-fileList td a a.action{display:inline;padding:17px 8px;line-height:50px;opacity:.3}.files-fileList td a a.action.action-share{padding:17px 14px}.files-fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared+span{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.files-fileList td a a.action.action-share .avatar{display:inline-block;vertical-align:middle}.files-fileList td a a.action.action-menu{padding-top:17px;padding-bottom:17px;padding-left:14px;padding-right:14px}.files-fileList td a a.action.no-permission:hover,.files-fileList td a a.action.no-permission:focus{opacity:.3}.files-fileList td a a.action.disabled:hover,.files-fileList td a a.action.disabled:focus,.files-fileList td a a.action.disabled img{opacity:.3}.files-fileList td a a.action.disabled.action-download{opacity:.7}.files-fileList td a a.action.disabled.action-download:hover,.files-fileList td a a.action.disabled.action-download:focus{opacity:.7}.files-fileList td a a.action:hover,.files-fileList td a a.action:focus{opacity:1}.files-fileList td a a.action:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.files-fileList td a .fileActionsMenu a.action,.files-fileList td a a.action.action-share.shared-style{opacity:.7}.files-fileList td a .fileActionsMenu .action.permanent{opacity:1}.files-fileList .action.action-share.permanent.shared-style span:not(.icon){display:inline-block;max-width:70px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin-left:6px}.files-fileList .remoteAddress .userDomain{margin-left:0 !important}.files-fileList .favorite-mark.permanent{opacity:1}.files-fileList .fileActionsMenu a.action:hover,.files-fileList .fileActionsMenu a.action:focus,.files-fileList a.action.action-share.shared-style:hover,.files-fileList a.action.action-share.shared-style:focus{opacity:1}.files-fileList tr a.action.disabled{background:none}.selectedActions a.download.disabled,.files-fileList tr a.action.action-download.disabled{color:#000}.files-fileList tr:hover a.action.disabled:hover *{cursor:default}.summary{color:var(--color-text-maxcontrast);height:330px}.files-filestable .summary .filesummary{width:100%;padding-left:101px}#body-public .summary{height:180px}.summary:hover,.summary:focus,.summary,table tr.summary td{background-color:rgba(0,0,0,0)}.summary td{border-bottom:none;vertical-align:top;padding-top:20px}.summary td:first-child{padding:0}.hiddeninfo{white-space:pre-line}table.dragshadow{width:auto;z-index:2000}table.dragshadow td.filename{padding-left:60px;padding-right:16px;height:36px;max-width:unset}table.dragshadow td.size{padding-right:8px}.mask{z-index:50;position:absolute;top:0;left:0;right:0;bottom:0;background-color:var(--color-main-background);background-repeat:no-repeat no-repeat;background-position:50%;opacity:.7;transition:opacity 100ms;-moz-transition:opacity 100ms;-o-transition:opacity 100ms;-ms-transition:opacity 100ms;-webkit-transition:opacity 100ms}.mask.transparent{opacity:0}.newFileMenu{font-weight:300;top:100%;left:-48px !important;margin-top:4px;min-width:100px;z-index:1001}.newFileMenu::after{left:61px !important}.files-controls{box-sizing:border-box;position:-webkit-sticky;position:sticky;height:50px;padding:0;margin:0;background-color:var(--color-main-background-translucent);z-index:62;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;top:0;padding-left:50px}.files-controls .actions>div>.button,.files-controls .actions>div button,.files-controls .actions>.button,.files-controls .actions button{box-sizing:border-box;display:inline-block;display:flex;height:44px;width:44px;padding:9px;align-items:center;justify-content:center}.files-controls .actions>div .button.hidden,.files-controls .actions .button.hidden{display:none}.viewer-mode #app-navigation+#app-content .files-controls{left:0}.files-filestable .filename .action .icon,.files-filestable .selectedActions a .icon,.files-filestable .filename .favorite-mark .icon,.files-controls .actions .button .icon{display:inline-block;vertical-align:middle;background-size:16px 16px}.files-filestable .filename .favorite-mark .icon-star{background-image:none}.files-filestable .filename .favorite-mark .icon-starred{background-image:var(--icon-starred-yellow) !important}.files-filestable .filename .action .icon.hidden,.files-filestable .selectedActions a .icon.hidden,.files-controls .actions .button .icon.hidden{display:none}.files-filestable .filename .action .icon.loading,.files-filestable .selectedActions a .icon.loading,.files-controls .actions .button .icon.loading{width:15px;height:15px}.app-files .actions .button.new{position:relative}.breadcrumb{align-items:center}.breadcrumb .icon-home{border-radius:var(--border-radius)}.breadcrumb .canDrop>a,.files-filestable tbody tr.canDrop{background-color:rgba(0,130,201,.3)}.dropzone-background{background-color:rgba(0,130,201,.3)}.dropzone-background :hover{box-shadow:none !important}.notCreatable{margin-left:12px;margin-right:44px;margin-top:12px;color:var(--color-main-text);overflow:auto;min-width:160px;height:54px}.notCreatable:not(.hidden){display:flex}.notCreatable .icon-alert-outline{top:-15px;position:relative;margin-right:4px}.quota-navigation-item{margin:0 !important;border:none;border-radius:0;background-color:rgba(0,0,0,0);z-index:1;height:44px;display:flex !important;flex-direction:column}.quota-navigation-item__text{height:30px}.quota-navigation-item[href="#"],.quota-navigation-item[href="#"] *{cursor:default !important}.quota-navigation-item__container{height:5px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) thead tr{display:block;border-bottom:1px solid var(--color-border);background-color:var(--color-main-background-translucent)}.files-filestable.view-grid:not(.hidden) thead tr th{width:auto;border:none}.files-filestable.view-grid:not(.hidden) tbody{display:grid;grid-template-columns:repeat(auto-fill, 160px);justify-content:space-around;row-gap:15px;margin:15px 0}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden){display:block;position:relative;height:190px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted{background-color:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions{background-color:var(--color-background-hover)}.files-filestable.view-grid:not(.hidden) tbody td{display:inline;border-bottom:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper{min-width:0;max-width:none;position:absolute;width:160px;height:160px;padding:14px;top:0;left:0;z-index:-1}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail{width:calc(100% - 2 * 14px);height:calc(100% - 2 * 14px);background-size:contain;margin:0;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark{padding:14px;left:auto;top:-22px;right:-22px}.files-filestable.view-grid:not(.hidden) tbody td.filename .uploadtext{width:100%;margin:0;top:0;bottom:auto;height:28px;padding-top:4px;padding-left:28px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name{height:100%;border-radius:var(--border-radius);overflow:hidden;cursor:pointer !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext{display:flex;height:44px;margin-top:146px;text-align:center;line-height:44px;padding:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{display:inline-block;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before{content:"";flex:1;min-width:14px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after{content:"";flex:1;min-width:44px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .system-tags{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions{height:initial;margin-top:146px;display:flex;align-items:center;position:absolute;right:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action{padding:14px;width:44px;height:44px;display:flex;align-items:center;justify-content:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu){display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img{padding:6px;border-radius:50%}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename form{padding:3px 14px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody td.filename form input.filename{width:100%;margin-left:0;cursor:text}.files-filestable.view-grid:not(.hidden) tbody td.filesize,.files-filestable.view-grid:not(.hidden) tbody td.date{display:none}.files-filestable.view-grid:not(.hidden) tbody td.selection,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark{position:absolute;top:-8px;left:-8px;display:flex;width:44px;height:44px;z-index:10;background:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody td.selection label,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label{width:44px;height:44px;display:inline-flex;padding:14px}.files-filestable.view-grid:not(.hidden) tbody td.selection label::before,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before{margin:0;width:14px;height:14px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:0;width:150px;margin:0 5px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon){overflow:hidden;text-overflow:ellipsis}.files-filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension{display:block}.files-filestable.view-grid:not(.hidden) tfoot{display:grid}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden){display:inline-block;margin:0 auto;height:418px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td{padding-top:50px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child,.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date{display:none}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info{margin-left:0}#view-toggle{background-color:var(--color-main-background-translucent);border:none;margin:0;padding:22px;opacity:.5;float:right;right:var(--default-grid-baseline);top:var(--default-grid-baseline);z-index:100;position:sticky}#view-toggle:hover,#view-toggle:focus,#showgridview:focus+#view-toggle{opacity:1}#view-toggle:focus-visible,#showgridview:focus-visible+#view-toggle{box-shadow:inset 0 0 0 2px var(--color-primary-element) !important}#showgridview{position:fixed;top:0}#body-public .files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{max-width:124px}#body-public .files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:-80px}#body-public #view-toggle{position:absolute;right:0;top:0}#gallery-button{display:none}#tag_multiple_files_container{overflow:hidden;background-color:#fff;border-radius:3px;position:relative;display:flex;flex-wrap:wrap;margin-bottom:10px}#tag_multiple_files_container h3{width:100%;padding:0 18px}#tag_multiple_files_container .systemTagsInputFieldContainer{flex:1 1 80%;min-width:0;margin:0 12px}/*# sourceMappingURL=files.css.map */ +.actions{padding:3px;height:100%;display:inline-block;float:left}.actions input,.actions button,.actions .button{margin:0;float:left}.actions .button a{color:#555}.actions .button a:hover,.actions .button a:focus{background-color:var(--color-background-hover)}.actions .button a:active{background-color:var(--color-primary-element-light)}.actions.creatable{position:relative;display:flex;flex:1 1}.actions.creatable .button:not(:last-child){margin-right:3px}.actions.hidden{display:none}#trash{margin-right:8px;float:right;z-index:1010;padding:10px;font-weight:normal}.newFileMenu .error,.newFileMenu .error+.icon-confirm,.files-fileList .error{color:var(--color-error);border-color:var(--color-error)}.files-filestable{position:relative;width:100%;min-width:250px;display:block;flex-direction:column}.emptycontent:not(.hidden)~.files-filestable{display:none}.files-filestable thead{position:-webkit-sticky;position:sticky;top:44px;z-index:60;display:block;background-color:var(--color-main-background-translucent)}.files-filestable tbody{display:table;width:100%}.files-filestable tbody tr[data-permissions="0"],.files-filestable tbody tr[data-permissions="16"]{background-color:var(--color-background-dark)}.files-filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,.files-filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext{color:var(--color-text-maxcontrast)}.files-filestable tbody tr[data-e2eencrypted=true] .selection{pointer-events:none}.files-filestable.hidden{display:none}.app-files #app-content>.viewcontainer{min-height:0%;width:100%}.app-files #app-content{width:calc(100% - 300px);overflow-anchor:none}.file-drag,.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:var(--color-primary-element-light) !important}.app-files #app-content.dir-drop{background-color:var(--color-main-background) !important}.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:rgba(0,0,0,0) !important}.app-files #app-content.dir-drop .files-filestable tbody tr.dropping-to-dir{background-color:var(--color-primary-element-light) !important}.nav-icon-files{background-image:var(--icon-folder-dark)}.nav-icon-recent{background-image:var(--icon-recent-dark)}.nav-icon-favorites{background-image:var(--icon-starred-dark)}.nav-icon-sharingin,.nav-icon-sharingout,.nav-icon-pendingshares,.nav-icon-shareoverview{background-image:var(--icon-share-dark)}.nav-icon-sharinglinks{background-image:var(--icon-public-dark)}.nav-icon-extstoragemounts{background-image:var(--icon-external-dark)}.nav-icon-trashbin{background-image:var(--icon-delete-dark)}.nav-icon-trashbin-starred{background-image:var(--icon-delete-#ff0000)}.nav-icon-deletedshares{background-image:var(--icon-unshare-dark)}.nav-icon-favorites-starred{background-image:var(--icon-starred-yellow)}#app-navigation .nav-files a.nav-icon-files{width:auto}#app-navigation .nav-files a.new{width:40px;height:32px;padding:0 10px;margin:0;cursor:pointer}#app-navigation .nav-files a.new.hidden{display:none}#app-navigation .nav-files a.new.disabled{opacity:.3}.files-filestable tbody tr{height:51px}.files-filestable tbody tr:hover,.files-filestable tbody tr:focus,.files-filestable tbody .name:focus,.files-filestable tbody tr:hover .filename form,table tr.mouseOver td{background-color:var(--color-background-hover)}.files-filestable tbody tr:active,.files-filestable tbody tr.highlighted,.files-filestable tbody tr.highlighted .name:focus,.files-filestable tbody tr.selected,.files-filestable tbody tr.searchresult{background-color:var(--color-primary-element-light)}tbody a{color:var(--color-main-text)}span.conflict-path,span.extension,span.uploading,td.date{color:var(--color-text-maxcontrast)}span.conflict-path,span.extension{-webkit-transition:opacity 300ms;-moz-transition:opacity 300ms;-o-transition:opacity 300ms;transition:opacity 300ms;vertical-align:top}tr:hover span.conflict-path,tr:focus span.conflict-path,tr:hover span.extension,tr:focus span.extension{opacity:1;color:var(--color-text-maxcontrast)}table th,table th a{color:var(--color-text-maxcontrast)}table.multiselect th a{color:var(--color-main-text)}table th .columntitle{display:block;padding:15px;height:50px;box-sizing:border-box;-moz-box-sizing:border-box;vertical-align:middle}table th .columntitle:focus-visible{border-radius:2px}table.multiselect th .columntitle{display:inline-block;margin-right:-20px}table th .columntitle.name{padding-left:0;margin-left:44px}table.multiselect th .columntitle.name{margin-left:0}table th .sort-indicator{width:10px;height:8px;margin-left:5px;display:inline-block;vertical-align:text-bottom;opacity:.3}.sort-indicator.hidden,.multiselect .sort-indicator,table.multiselect th:hover .sort-indicator.hidden,table.multiselect th:focus .sort-indicator.hidden{visibility:hidden}.multiselect .sort,.multiselect .sort span{cursor:default}table th:hover .sort-indicator.hidden,table th:focus .sort-indicator.hidden{visibility:visible}table th,table td{border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table td{padding:0 15px;font-style:normal;background-position:8px center;background-repeat:no-repeat}table th.column-name{position:relative;width:9999px;padding:0}.column-name-container{position:relative;height:50px}table th.column-selection{padding-top:2px}table th.column-size,table td.filesize{text-align:right}table th.column-mtime,table td.date,table th.column-last,table td.column-last{-moz-box-sizing:border-box;box-sizing:border-box;position:relative;min-width:130px}#app-content-recent,#app-content-favorites,#app-content-shareoverview,#app-content-sharingout,#app-content-sharingin,#app-content-sharinglinks,#app-content-deletedshares,#app-content-pendingshares{margin-top:22px}#app-content-recent thead,#app-content-favorites thead,#app-content-shareoverview thead,#app-content-sharingout thead,#app-content-sharingin thead,#app-content-sharinglinks thead,#app-content-deletedshares thead,#app-content-pendingshares thead{top:0}table.multiselect thead th{background-color:var(--color-main-background-translucent);font-weight:bold}#app-content.with-app-sidebar table.multiselect thead{margin-right:27%}table.multiselect .column-name{position:relative;width:9999px}table.multiselect .column-mtime>a{display:none}table td.selection,table th.selection,table td.fileaction{width:32px;text-align:center}table td.filename a.name,table td.filename p.name{display:flex;position:relative;-moz-box-sizing:border-box;box-sizing:border-box;height:50px;line-height:50px;padding:0}table td.filename .thumbnail-wrapper{width:0;min-width:50px;max-width:50px;height:50px}table td.filename .thumbnail-wrapper.icon-loading-small:after{z-index:10}table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail{opacity:.2}table td.filename .thumbnail{display:inline-block;width:32px;height:32px;background-size:contain;background-position:center;background-repeat:no-repeat;margin-left:9px;margin-top:9px;border-radius:var(--border-radius);cursor:pointer;position:absolute;z-index:4}table td.filename p.name .thumbnail{cursor:default}table tr[data-has-preview=true] .thumbnail{border:1px solid var(--color-border)}table:not(.view-grid) td.filename input.filename{width:70% !important;margin-left:48px !important;cursor:text}table td.filename form{margin-top:-40px;position:relative;top:-6px}table td.filename a,table td.login,table td.logout,table td.download,table td.upload,table td.create,table td.delete{padding:3px 8px 8px 3px}table td.filename .nametext,.modified,.column-last>span:first-child{float:left;padding:15px 0}.modified,.column-last>span:first-child{position:relative;overflow:hidden;text-overflow:ellipsis;width:110px}table td.filename{max-width:0}table td.filename .nametext{width:0;flex-grow:1;display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:100%;z-index:10;padding:0 20px 0 0}table td.filename .system-tags{--min-size: 32px;display:flex;justify-content:center;align-items:center;flex:1 1 100%;min-width:calc(var(--min-size)*2);max-width:300px}table td.filename .system-tags .system-tags__tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}table td.filename .system-tags .system-tags__tag--more{overflow:visible;text-overflow:initial}table td.filename .system-tags .system-tags__tag+.system-tags__tag{margin-left:5px}.hide-hidden-files .files-filestable .files-fileList tr.hidden-file,.hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging{display:none !important}.files-fileList tr.animate-opacity{-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.files-fileList tr.dragging{opacity:.2}table td.filename .nametext .innernametext{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top}table td.filename .uploadtext{position:absolute;font-weight:normal;margin-left:50px;left:0;bottom:0;height:20px;padding:0 4px;padding-left:1px;font-size:11px;line-height:22px;color:var(--color-text-maxcontrast);text-overflow:ellipsis;white-space:nowrap}table td.selection{padding:0}.files-fileList tr td.selection>.selectCheckBox+label:before{opacity:.3;margin-right:0}.files-fileList tr:hover td.selection>.selectCheckBox+label:before,.files-fileList tr:focus td.selection>.selectCheckBox+label:before,.files-fileList tr td.selection>.selectCheckBox:checked+label:before,.files-fileList tr.selected td.selection>.selectCheckBox+label:before{opacity:1}.files-fileList tr.halfselected td.selection>.selectCheckBox+label:before{opacity:.5}.files-fileList tr td.selection>.selectCheckBox+label,.select-all+label{padding:16px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill);outline:none !important;border:2px solid var(--color-primary-element) !important;padding:14px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{outline-offset:0px}.files-fileList tr td.filename{position:relative;width:100%;padding-left:0;padding-right:0;-webkit-transition:background-image 500ms;-moz-transition:background-image 500ms;-o-transition:background-image 500ms;transition:background-image 500ms}.files-fileList tr td.filename a.name label,.files-fileList tr td.filename p.name label{position:absolute;width:80%;height:50px}.files-fileList tr td.filename .favorite{display:inline-block;float:left}.files-fileList tr td.filename .favorite-mark{position:absolute;display:block;top:-8px;right:-8px;line-height:100%;text-align:center}.files-fileList tr td.filename .favorite-mark.permanent{background-color:var(--color-main-background);mask:var(--icon-star-rounded-white) no-repeat;mask-size:22px 22px;width:22px;height:22px;display:flex;align-content:center;justify-content:center}.files-fileList tr:hover td.filename .favorite-mark.permanent{background-color:var(--color-background-hover)}#uploadsize-message,#delete-confirm{display:none}.fileactions{z-index:50}.busy .fileactions,.busy .action{visibility:hidden}.bubble,#app-navigation .app-navigation-entry-menu{min-width:100px}.files-fileList .icon-loading-small{opacity:1 !important;display:inline !important}.files-fileList .action.action-share-notification span,.files-fileList a.name{cursor:default !important}.files-fileList a.name.disabled *{cursor:default}.files-fileList a.name.disabled a,.files-fileList a.name.disabled a *{cursor:pointer}.files-fileList a.name.disabled:focus{background:none}a.action>img{height:16px;width:16px;vertical-align:text-bottom}a.action.action-editlocally img.icon{filter:var(--background-invert-if-dark)}.selectedActions{position:relative;display:inline-block;vertical-align:middle}.selectedActions.hidden{display:none}.selectedActions a{display:inline;line-height:50px;padding:16px 5px}.selectedActions a.hidden{display:none}.selectedActions a img{position:relative;vertical-align:text-bottom;margin-bottom:-1px}.selectedActions .actions-selected .icon-more{margin-top:-3px}.files-fileList td a a.action{display:inline;padding:17px 8px;line-height:50px;opacity:.3}.files-fileList td a a.action.action-share{padding:17px 14px}.files-fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared+span{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.files-fileList td a a.action.action-share .avatar{display:inline-block;vertical-align:middle}.files-fileList td a a.action.action-menu{padding-top:17px;padding-bottom:17px;padding-left:14px;padding-right:14px}.files-fileList td a a.action.no-permission:hover,.files-fileList td a a.action.no-permission:focus{opacity:.3}.files-fileList td a a.action.disabled:hover,.files-fileList td a a.action.disabled:focus,.files-fileList td a a.action.disabled img{opacity:.3}.files-fileList td a a.action.disabled.action-download{opacity:.7}.files-fileList td a a.action.disabled.action-download:hover,.files-fileList td a a.action.disabled.action-download:focus{opacity:.7}.files-fileList td a a.action:hover,.files-fileList td a a.action:focus{opacity:1}.files-fileList td a a.action:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.files-fileList td a .fileActionsMenu a.action,.files-fileList td a a.action.action-share.shared-style{opacity:.7}.files-fileList td a .fileActionsMenu .action.permanent{opacity:1}.files-fileList .action.action-share.permanent.shared-style span:not(.icon){display:inline-block;max-width:70px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin-left:6px}.files-fileList .remoteAddress .userDomain{margin-left:0 !important}.files-fileList .favorite-mark.permanent{opacity:1}.files-fileList .fileActionsMenu a.action:hover,.files-fileList .fileActionsMenu a.action:focus,.files-fileList a.action.action-share.shared-style:hover,.files-fileList a.action.action-share.shared-style:focus{opacity:1}.files-fileList tr a.action.disabled{background:none}.selectedActions a.download.disabled,.files-fileList tr a.action.action-download.disabled{color:#000}.files-fileList tr:hover a.action.disabled:hover *{cursor:default}.summary{color:var(--color-text-maxcontrast);height:330px}.files-filestable .summary .filesummary{width:100%;padding-left:101px}#body-public .summary{height:180px}.summary:hover,.summary:focus,.summary,table tr.summary td{background-color:rgba(0,0,0,0)}.summary td{border-bottom:none;vertical-align:top;padding-top:20px}.summary td:first-child{padding:0}.hiddeninfo{white-space:pre-line}table.dragshadow{width:auto;z-index:2000}table.dragshadow td.filename{padding-left:60px;padding-right:16px;height:36px;max-width:unset}table.dragshadow td.size{padding-right:8px}.mask{z-index:50;position:absolute;top:0;left:0;right:0;bottom:0;background-color:var(--color-main-background);background-repeat:no-repeat no-repeat;background-position:50%;opacity:.7;transition:opacity 100ms;-moz-transition:opacity 100ms;-o-transition:opacity 100ms;-ms-transition:opacity 100ms;-webkit-transition:opacity 100ms}.mask.transparent{opacity:0}.newFileMenu{font-weight:300;top:100%;left:-48px !important;margin-top:4px;min-width:100px;z-index:1001}.newFileMenu::after{left:61px !important}.files-controls{box-sizing:border-box;position:-webkit-sticky;position:sticky;height:50px;padding:0;margin:0;background-color:var(--color-main-background-translucent);z-index:62;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;top:0;padding-left:50px}.files-controls .actions>div>.button,.files-controls .actions>div button,.files-controls .actions>.button,.files-controls .actions button{box-sizing:border-box;display:inline-block;display:flex;height:44px;width:44px;padding:9px;align-items:center;justify-content:center}.files-controls .actions>div .button.hidden,.files-controls .actions .button.hidden{display:none}.viewer-mode #app-navigation+#app-content .files-controls{left:0}.files-filestable .filename .action .icon,.files-filestable .selectedActions a .icon,.files-filestable .filename .favorite-mark .icon,.files-controls .actions .button .icon{display:inline-block;vertical-align:middle;background-size:16px 16px}.files-filestable .filename .favorite-mark .icon-star{background-image:none}.files-filestable .filename .favorite-mark .icon-starred{background-image:var(--icon-starred-yellow) !important}.files-filestable .filename .action .icon.hidden,.files-filestable .selectedActions a .icon.hidden,.files-controls .actions .button .icon.hidden{display:none}.files-filestable .filename .action .icon.loading,.files-filestable .selectedActions a .icon.loading,.files-controls .actions .button .icon.loading{width:15px;height:15px}.app-files .actions .button.new{position:relative}.breadcrumb{align-items:center}.breadcrumb .icon-home{border-radius:var(--border-radius)}.breadcrumb .canDrop>a,.files-filestable tbody tr.canDrop{background-color:rgba(0,130,201,.3)}.dropzone-background{background-color:rgba(0,130,201,.3)}.dropzone-background :hover{box-shadow:none !important}.notCreatable{margin-left:12px;margin-right:44px;margin-top:12px;color:var(--color-main-text);overflow:auto;min-width:160px;height:54px}.notCreatable:not(.hidden){display:flex}.notCreatable .icon-alert-outline{top:-15px;position:relative;margin-right:4px}.quota-navigation-item{margin:0 !important;border:none;border-radius:0;background-color:rgba(0,0,0,0);z-index:1;height:44px;display:flex !important;flex-direction:column}.quota-navigation-item__text{height:30px}.quota-navigation-item[href="#"],.quota-navigation-item[href="#"] *{cursor:default !important}.quota-navigation-item__container{height:5px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) thead tr{display:block;border-bottom:1px solid var(--color-border);background-color:var(--color-main-background-translucent)}.files-filestable.view-grid:not(.hidden) thead tr th{width:auto;border:none}.files-filestable.view-grid:not(.hidden) tbody{display:grid;grid-template-columns:repeat(auto-fill, 160px);justify-content:space-around;row-gap:15px;margin:15px 0}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden){display:block;position:relative;height:190px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted{background-color:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions{background-color:var(--color-background-hover)}.files-filestable.view-grid:not(.hidden) tbody td{display:inline;border-bottom:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper{min-width:0;max-width:none;position:absolute;width:160px;height:160px;padding:14px;top:0;left:0;z-index:-1}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail{width:calc(100% - 2 * 14px);height:calc(100% - 2 * 14px);background-size:contain;margin:0;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark{left:auto;top:-11px;right:-11px}.files-filestable.view-grid:not(.hidden) tbody td.filename .uploadtext{width:100%;margin:0;top:0;bottom:auto;height:28px;padding-top:4px;padding-left:28px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name{height:100%;border-radius:var(--border-radius);overflow:hidden;cursor:pointer !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext{display:flex;height:44px;margin-top:146px;text-align:center;line-height:44px;padding:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{display:inline-block;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before{content:"";flex:1;min-width:14px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after{content:"";flex:1;min-width:44px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .system-tags{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions{height:initial;margin-top:146px;display:flex;align-items:center;position:absolute;right:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action{padding:14px;width:44px;height:44px;display:flex;align-items:center;justify-content:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu){display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img{padding:6px;border-radius:50%}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename form{padding:3px 14px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody td.filename form input.filename{width:100%;margin-left:0;cursor:text}.files-filestable.view-grid:not(.hidden) tbody td.filesize,.files-filestable.view-grid:not(.hidden) tbody td.date{display:none}.files-filestable.view-grid:not(.hidden) tbody td.selection,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark{position:absolute;top:-8px;left:-8px;display:flex;z-index:10}.files-filestable.view-grid:not(.hidden) tbody td.selection label,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label{width:44px;height:44px;display:inline-flex;padding:14px}.files-filestable.view-grid:not(.hidden) tbody td.selection label::before,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before{margin:0;width:14px;height:14px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:0;width:150px;margin:0 5px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon){overflow:hidden;text-overflow:ellipsis}.files-filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension{display:block}.files-filestable.view-grid:not(.hidden) tfoot{display:grid}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden){display:inline-block;margin:0 auto;height:418px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td{padding-top:50px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child,.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date{display:none}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info{margin-left:0}#view-toggle{background-color:var(--color-main-background-translucent);border:none;margin:0;padding:22px;opacity:.5;float:right;right:var(--default-grid-baseline);top:var(--default-grid-baseline);z-index:100;position:sticky}#view-toggle:hover,#view-toggle:focus,#showgridview:focus+#view-toggle{opacity:1}#view-toggle:focus-visible,#showgridview:focus-visible+#view-toggle{box-shadow:inset 0 0 0 2px var(--color-primary-element) !important}#showgridview{position:fixed;top:0}#body-public .files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{max-width:124px}#body-public .files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:-80px}#body-public #view-toggle{position:absolute;right:0;top:0}#gallery-button{display:none}#tag_multiple_files_container{overflow:hidden;background-color:#fff;border-radius:3px;position:relative;display:flex;flex-wrap:wrap;margin-bottom:10px}#tag_multiple_files_container h3{width:100%;padding:0 18px}#tag_multiple_files_container .systemTagsInputFieldContainer{flex:1 1 80%;min-width:0;margin:0 12px}/*# sourceMappingURL=files.css.map */ diff --git a/apps/files/css/files.css.map b/apps/files/css/files.css.map index 20549fb0065..0da56c7206b 100644 --- a/apps/files/css/files.css.map +++ b/apps/files/css/files.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,yFCjFC,wCDuFD,uBCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,wBCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,cACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,QA1EK,KA2EL,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAzJK,KA0JL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WACA,YACA,WACA,yBAEA,kJACC,WACA,YACA,oBACA,QA7NO,KA8NP,kKACC,SACA,MAhOM,KAiON,OAjOM,KAuOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA","file":"files.css"}
\ No newline at end of file +{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,yFCjFC,wCDuFD,uBCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,wBCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,cACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBACA,wDAEC,8CACA,8CACA,oBAEA,WACA,YACA,aACA,qBACA,uBAGF,8DACC,+CAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAxJK,KAyJL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WAEA,kJACC,WACA,YACA,oBACA,QAzNO,KA0NP,kKACC,SACA,MA5NM,KA6NN,OA7NM,KAmOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA","file":"files.css"}
\ No newline at end of file diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss index 09c0cd97913..0bd8495c9ac 100644 --- a/apps/files/css/files.scss +++ b/apps/files/css/files.scss @@ -585,10 +585,25 @@ table td.selection { .files-fileList tr td.filename .favorite-mark { position: absolute; display: block; - top: -6px; - right: -6px; + top: -8px; + right: -8px; line-height: 100%; text-align: center; + &.permanent { + // Create background around the favorite marker to ensure there is enough contrast + background-color: var(--color-main-background); + mask: var(--icon-star-rounded-white) no-repeat; + mask-size: 22px 22px; + + width: 22px; + height: 22px; + display: flex; + align-content: center; + justify-content: center; + } +} +.files-fileList tr:hover td.filename .favorite-mark.permanent { + background-color: var(--color-background-hover); } #uploadsize-message,#delete-confirm { display:none; } @@ -1083,10 +1098,9 @@ table.dragshadow td.size { * Position is inherited from the selection while in grid view */ .favorite-mark { - padding: $grid-pad; left: auto; - top: -22px; // center in corner of thumbnail - right: -22px; // center in corner of thumbnail + top: -11px; // center in corner of thumbnail + right: -11px; // center in corner of thumbnail } } } @@ -1221,10 +1235,7 @@ table.dragshadow td.size { top: -8px; // half the checkbox width, center on corner of thumbnail left: -8px; // half the checkbox width, center on corner of thumbnail display: flex; - width: 44px; - height: 44px; z-index: 10; - background: transparent; label { width: 44px; diff --git a/apps/files/css/merged.css b/apps/files/css/merged.css index 06568800042..c567f17a1c0 100644 --- a/apps/files/css/merged.css +++ b/apps/files/css/merged.css @@ -1 +1 @@ -.actions{padding:3px;height:100%;display:inline-block;float:left}.actions input,.actions button,.actions .button{margin:0;float:left}.actions .button a{color:#555}.actions .button a:hover,.actions .button a:focus{background-color:var(--color-background-hover)}.actions .button a:active{background-color:var(--color-primary-element-light)}.actions.creatable{position:relative;display:flex;flex:1 1}.actions.creatable .button:not(:last-child){margin-right:3px}.actions.hidden{display:none}#trash{margin-right:8px;float:right;z-index:1010;padding:10px;font-weight:normal}.newFileMenu .error,.newFileMenu .error+.icon-confirm,.files-fileList .error{color:var(--color-error);border-color:var(--color-error)}.files-filestable{position:relative;width:100%;min-width:250px;display:block;flex-direction:column}.emptycontent:not(.hidden)~.files-filestable{display:none}.files-filestable thead{position:-webkit-sticky;position:sticky;top:44px;z-index:60;display:block;background-color:var(--color-main-background-translucent)}.files-filestable tbody{display:table;width:100%}.files-filestable tbody tr[data-permissions="0"],.files-filestable tbody tr[data-permissions="16"]{background-color:var(--color-background-dark)}.files-filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,.files-filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext{color:var(--color-text-maxcontrast)}.files-filestable tbody tr[data-e2eencrypted=true] .selection{pointer-events:none}.files-filestable.hidden{display:none}.app-files #app-content>.viewcontainer{min-height:0%;width:100%}.app-files #app-content{width:calc(100% - 300px);overflow-anchor:none}.file-drag,.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:var(--color-primary-element-light) !important}.app-files #app-content.dir-drop{background-color:var(--color-main-background) !important}.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:rgba(0,0,0,0) !important}.app-files #app-content.dir-drop .files-filestable tbody tr.dropping-to-dir{background-color:var(--color-primary-element-light) !important}.nav-icon-files{background-image:var(--icon-folder-dark)}.nav-icon-recent{background-image:var(--icon-recent-dark)}.nav-icon-favorites{background-image:var(--icon-starred-dark)}.nav-icon-sharingin,.nav-icon-sharingout,.nav-icon-pendingshares,.nav-icon-shareoverview{background-image:var(--icon-share-dark)}.nav-icon-sharinglinks{background-image:var(--icon-public-dark)}.nav-icon-extstoragemounts{background-image:var(--icon-external-dark)}.nav-icon-trashbin{background-image:var(--icon-delete-dark)}.nav-icon-trashbin-starred{background-image:var(--icon-delete-#ff0000)}.nav-icon-deletedshares{background-image:var(--icon-unshare-dark)}.nav-icon-favorites-starred{background-image:var(--icon-starred-yellow)}#app-navigation .nav-files a.nav-icon-files{width:auto}#app-navigation .nav-files a.new{width:40px;height:32px;padding:0 10px;margin:0;cursor:pointer}#app-navigation .nav-files a.new.hidden{display:none}#app-navigation .nav-files a.new.disabled{opacity:.3}.files-filestable tbody tr{height:51px}.files-filestable tbody tr:hover,.files-filestable tbody tr:focus,.files-filestable tbody .name:focus,.files-filestable tbody tr:hover .filename form,table tr.mouseOver td{background-color:var(--color-background-hover)}.files-filestable tbody tr:active,.files-filestable tbody tr.highlighted,.files-filestable tbody tr.highlighted .name:focus,.files-filestable tbody tr.selected,.files-filestable tbody tr.searchresult{background-color:var(--color-primary-element-light)}tbody a{color:var(--color-main-text)}span.conflict-path,span.extension,span.uploading,td.date{color:var(--color-text-maxcontrast)}span.conflict-path,span.extension{-webkit-transition:opacity 300ms;-moz-transition:opacity 300ms;-o-transition:opacity 300ms;transition:opacity 300ms;vertical-align:top}tr:hover span.conflict-path,tr:focus span.conflict-path,tr:hover span.extension,tr:focus span.extension{opacity:1;color:var(--color-text-maxcontrast)}table th,table th a{color:var(--color-text-maxcontrast)}table.multiselect th a{color:var(--color-main-text)}table th .columntitle{display:block;padding:15px;height:50px;box-sizing:border-box;-moz-box-sizing:border-box;vertical-align:middle}table th .columntitle:focus-visible{border-radius:2px}table.multiselect th .columntitle{display:inline-block;margin-right:-20px}table th .columntitle.name{padding-left:0;margin-left:44px}table.multiselect th .columntitle.name{margin-left:0}table th .sort-indicator{width:10px;height:8px;margin-left:5px;display:inline-block;vertical-align:text-bottom;opacity:.3}.sort-indicator.hidden,.multiselect .sort-indicator,table.multiselect th:hover .sort-indicator.hidden,table.multiselect th:focus .sort-indicator.hidden{visibility:hidden}.multiselect .sort,.multiselect .sort span{cursor:default}table th:hover .sort-indicator.hidden,table th:focus .sort-indicator.hidden{visibility:visible}table th,table td{border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table td{padding:0 15px;font-style:normal;background-position:8px center;background-repeat:no-repeat}table th.column-name{position:relative;width:9999px;padding:0}.column-name-container{position:relative;height:50px}table th.column-selection{padding-top:2px}table th.column-size,table td.filesize{text-align:right}table th.column-mtime,table td.date,table th.column-last,table td.column-last{-moz-box-sizing:border-box;box-sizing:border-box;position:relative;min-width:130px}#app-content-recent,#app-content-favorites,#app-content-shareoverview,#app-content-sharingout,#app-content-sharingin,#app-content-sharinglinks,#app-content-deletedshares,#app-content-pendingshares{margin-top:22px}#app-content-recent thead,#app-content-favorites thead,#app-content-shareoverview thead,#app-content-sharingout thead,#app-content-sharingin thead,#app-content-sharinglinks thead,#app-content-deletedshares thead,#app-content-pendingshares thead{top:0}table.multiselect thead th{background-color:var(--color-main-background-translucent);font-weight:bold}#app-content.with-app-sidebar table.multiselect thead{margin-right:27%}table.multiselect .column-name{position:relative;width:9999px}table.multiselect .column-mtime>a{display:none}table td.selection,table th.selection,table td.fileaction{width:32px;text-align:center}table td.filename a.name,table td.filename p.name{display:flex;position:relative;-moz-box-sizing:border-box;box-sizing:border-box;height:50px;line-height:50px;padding:0}table td.filename .thumbnail-wrapper{width:0;min-width:50px;max-width:50px;height:50px}table td.filename .thumbnail-wrapper.icon-loading-small:after{z-index:10}table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail{opacity:.2}table td.filename .thumbnail{display:inline-block;width:32px;height:32px;background-size:contain;background-position:center;background-repeat:no-repeat;margin-left:9px;margin-top:9px;border-radius:var(--border-radius);cursor:pointer;position:absolute;z-index:4}table td.filename p.name .thumbnail{cursor:default}table tr[data-has-preview=true] .thumbnail{border:1px solid var(--color-border)}table:not(.view-grid) td.filename input.filename{width:70% !important;margin-left:48px !important;cursor:text}table td.filename form{margin-top:-40px;position:relative;top:-6px}table td.filename a,table td.login,table td.logout,table td.download,table td.upload,table td.create,table td.delete{padding:3px 8px 8px 3px}table td.filename .nametext,.modified,.column-last>span:first-child{float:left;padding:15px 0}.modified,.column-last>span:first-child{position:relative;overflow:hidden;text-overflow:ellipsis;width:110px}table td.filename{max-width:0}table td.filename .nametext{width:0;flex-grow:1;display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:100%;z-index:10;padding:0 20px 0 0}table td.filename .system-tags{--min-size: 32px;display:flex;justify-content:center;align-items:center;flex:1 1 100%;min-width:calc(var(--min-size)*2);max-width:300px}table td.filename .system-tags .system-tags__tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}table td.filename .system-tags .system-tags__tag--more{overflow:visible;text-overflow:initial}table td.filename .system-tags .system-tags__tag+.system-tags__tag{margin-left:5px}.hide-hidden-files .files-filestable .files-fileList tr.hidden-file,.hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging{display:none !important}.files-fileList tr.animate-opacity{-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.files-fileList tr.dragging{opacity:.2}table td.filename .nametext .innernametext{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top}table td.filename .uploadtext{position:absolute;font-weight:normal;margin-left:50px;left:0;bottom:0;height:20px;padding:0 4px;padding-left:1px;font-size:11px;line-height:22px;color:var(--color-text-maxcontrast);text-overflow:ellipsis;white-space:nowrap}table td.selection{padding:0}.files-fileList tr td.selection>.selectCheckBox+label:before{opacity:.3;margin-right:0}.files-fileList tr:hover td.selection>.selectCheckBox+label:before,.files-fileList tr:focus td.selection>.selectCheckBox+label:before,.files-fileList tr td.selection>.selectCheckBox:checked+label:before,.files-fileList tr.selected td.selection>.selectCheckBox+label:before{opacity:1}.files-fileList tr.halfselected td.selection>.selectCheckBox+label:before{opacity:.5}.files-fileList tr td.selection>.selectCheckBox+label,.select-all+label{padding:16px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill);outline:none !important;border:2px solid var(--color-primary-element) !important;padding:14px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{outline-offset:0px}.files-fileList tr td.filename{position:relative;width:100%;padding-left:0;padding-right:0;-webkit-transition:background-image 500ms;-moz-transition:background-image 500ms;-o-transition:background-image 500ms;transition:background-image 500ms}.files-fileList tr td.filename a.name label,.files-fileList tr td.filename p.name label{position:absolute;width:80%;height:50px}.files-fileList tr td.filename .favorite{display:inline-block;float:left}.files-fileList tr td.filename .favorite-mark{position:absolute;display:block;top:-6px;right:-6px;line-height:100%;text-align:center}#uploadsize-message,#delete-confirm{display:none}.fileactions{z-index:50}.busy .fileactions,.busy .action{visibility:hidden}.bubble,#app-navigation .app-navigation-entry-menu{min-width:100px}.files-fileList .icon-loading-small{opacity:1 !important;display:inline !important}.files-fileList .action.action-share-notification span,.files-fileList a.name{cursor:default !important}.files-fileList a.name.disabled *{cursor:default}.files-fileList a.name.disabled a,.files-fileList a.name.disabled a *{cursor:pointer}.files-fileList a.name.disabled:focus{background:none}a.action>img{height:16px;width:16px;vertical-align:text-bottom}a.action.action-editlocally img.icon{filter:var(--background-invert-if-dark)}.selectedActions{position:relative;display:inline-block;vertical-align:middle}.selectedActions.hidden{display:none}.selectedActions a{display:inline;line-height:50px;padding:16px 5px}.selectedActions a.hidden{display:none}.selectedActions a img{position:relative;vertical-align:text-bottom;margin-bottom:-1px}.selectedActions .actions-selected .icon-more{margin-top:-3px}.files-fileList td a a.action{display:inline;padding:17px 8px;line-height:50px;opacity:.3}.files-fileList td a a.action.action-share{padding:17px 14px}.files-fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared+span{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.files-fileList td a a.action.action-share .avatar{display:inline-block;vertical-align:middle}.files-fileList td a a.action.action-menu{padding-top:17px;padding-bottom:17px;padding-left:14px;padding-right:14px}.files-fileList td a a.action.no-permission:hover,.files-fileList td a a.action.no-permission:focus{opacity:.3}.files-fileList td a a.action.disabled:hover,.files-fileList td a a.action.disabled:focus,.files-fileList td a a.action.disabled img{opacity:.3}.files-fileList td a a.action.disabled.action-download{opacity:.7}.files-fileList td a a.action.disabled.action-download:hover,.files-fileList td a a.action.disabled.action-download:focus{opacity:.7}.files-fileList td a a.action:hover,.files-fileList td a a.action:focus{opacity:1}.files-fileList td a a.action:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.files-fileList td a .fileActionsMenu a.action,.files-fileList td a a.action.action-share.shared-style{opacity:.7}.files-fileList td a .fileActionsMenu .action.permanent{opacity:1}.files-fileList .action.action-share.permanent.shared-style span:not(.icon){display:inline-block;max-width:70px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin-left:6px}.files-fileList .remoteAddress .userDomain{margin-left:0 !important}.files-fileList .favorite-mark.permanent{opacity:1}.files-fileList .fileActionsMenu a.action:hover,.files-fileList .fileActionsMenu a.action:focus,.files-fileList a.action.action-share.shared-style:hover,.files-fileList a.action.action-share.shared-style:focus{opacity:1}.files-fileList tr a.action.disabled{background:none}.selectedActions a.download.disabled,.files-fileList tr a.action.action-download.disabled{color:#000}.files-fileList tr:hover a.action.disabled:hover *{cursor:default}.summary{color:var(--color-text-maxcontrast);height:330px}.files-filestable .summary .filesummary{width:100%;padding-left:101px}#body-public .summary{height:180px}.summary:hover,.summary:focus,.summary,table tr.summary td{background-color:rgba(0,0,0,0)}.summary td{border-bottom:none;vertical-align:top;padding-top:20px}.summary td:first-child{padding:0}.hiddeninfo{white-space:pre-line}table.dragshadow{width:auto;z-index:2000}table.dragshadow td.filename{padding-left:60px;padding-right:16px;height:36px;max-width:unset}table.dragshadow td.size{padding-right:8px}.mask{z-index:50;position:absolute;top:0;left:0;right:0;bottom:0;background-color:var(--color-main-background);background-repeat:no-repeat no-repeat;background-position:50%;opacity:.7;transition:opacity 100ms;-moz-transition:opacity 100ms;-o-transition:opacity 100ms;-ms-transition:opacity 100ms;-webkit-transition:opacity 100ms}.mask.transparent{opacity:0}.newFileMenu{font-weight:300;top:100%;left:-48px !important;margin-top:4px;min-width:100px;z-index:1001}.newFileMenu::after{left:61px !important}.files-controls{box-sizing:border-box;position:-webkit-sticky;position:sticky;height:50px;padding:0;margin:0;background-color:var(--color-main-background-translucent);z-index:62;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;top:0;padding-left:50px}.files-controls .actions>div>.button,.files-controls .actions>div button,.files-controls .actions>.button,.files-controls .actions button{box-sizing:border-box;display:inline-block;display:flex;height:44px;width:44px;padding:9px;align-items:center;justify-content:center}.files-controls .actions>div .button.hidden,.files-controls .actions .button.hidden{display:none}.viewer-mode #app-navigation+#app-content .files-controls{left:0}.files-filestable .filename .action .icon,.files-filestable .selectedActions a .icon,.files-filestable .filename .favorite-mark .icon,.files-controls .actions .button .icon{display:inline-block;vertical-align:middle;background-size:16px 16px}.files-filestable .filename .favorite-mark .icon-star{background-image:none}.files-filestable .filename .favorite-mark .icon-starred{background-image:var(--icon-starred-yellow) !important}.files-filestable .filename .action .icon.hidden,.files-filestable .selectedActions a .icon.hidden,.files-controls .actions .button .icon.hidden{display:none}.files-filestable .filename .action .icon.loading,.files-filestable .selectedActions a .icon.loading,.files-controls .actions .button .icon.loading{width:15px;height:15px}.app-files .actions .button.new{position:relative}.breadcrumb{align-items:center}.breadcrumb .icon-home{border-radius:var(--border-radius)}.breadcrumb .canDrop>a,.files-filestable tbody tr.canDrop{background-color:rgba(0,130,201,.3)}.dropzone-background{background-color:rgba(0,130,201,.3)}.dropzone-background :hover{box-shadow:none !important}.notCreatable{margin-left:12px;margin-right:44px;margin-top:12px;color:var(--color-main-text);overflow:auto;min-width:160px;height:54px}.notCreatable:not(.hidden){display:flex}.notCreatable .icon-alert-outline{top:-15px;position:relative;margin-right:4px}.quota-navigation-item{margin:0 !important;border:none;border-radius:0;background-color:rgba(0,0,0,0);z-index:1;height:44px;display:flex !important;flex-direction:column}.quota-navigation-item__text{height:30px}.quota-navigation-item[href="#"],.quota-navigation-item[href="#"] *{cursor:default !important}.quota-navigation-item__container{height:5px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) thead tr{display:block;border-bottom:1px solid var(--color-border);background-color:var(--color-main-background-translucent)}.files-filestable.view-grid:not(.hidden) thead tr th{width:auto;border:none}.files-filestable.view-grid:not(.hidden) tbody{display:grid;grid-template-columns:repeat(auto-fill, 160px);justify-content:space-around;row-gap:15px;margin:15px 0}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden){display:block;position:relative;height:190px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted{background-color:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions{background-color:var(--color-background-hover)}.files-filestable.view-grid:not(.hidden) tbody td{display:inline;border-bottom:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper{min-width:0;max-width:none;position:absolute;width:160px;height:160px;padding:14px;top:0;left:0;z-index:-1}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail{width:calc(100% - 2 * 14px);height:calc(100% - 2 * 14px);background-size:contain;margin:0;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark{padding:14px;left:auto;top:-22px;right:-22px}.files-filestable.view-grid:not(.hidden) tbody td.filename .uploadtext{width:100%;margin:0;top:0;bottom:auto;height:28px;padding-top:4px;padding-left:28px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name{height:100%;border-radius:var(--border-radius);overflow:hidden;cursor:pointer !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext{display:flex;height:44px;margin-top:146px;text-align:center;line-height:44px;padding:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{display:inline-block;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before{content:"";flex:1;min-width:14px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after{content:"";flex:1;min-width:44px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .system-tags{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions{height:initial;margin-top:146px;display:flex;align-items:center;position:absolute;right:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action{padding:14px;width:44px;height:44px;display:flex;align-items:center;justify-content:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu){display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img{padding:6px;border-radius:50%}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename form{padding:3px 14px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody td.filename form input.filename{width:100%;margin-left:0;cursor:text}.files-filestable.view-grid:not(.hidden) tbody td.filesize,.files-filestable.view-grid:not(.hidden) tbody td.date{display:none}.files-filestable.view-grid:not(.hidden) tbody td.selection,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark{position:absolute;top:-8px;left:-8px;display:flex;width:44px;height:44px;z-index:10;background:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody td.selection label,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label{width:44px;height:44px;display:inline-flex;padding:14px}.files-filestable.view-grid:not(.hidden) tbody td.selection label::before,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before{margin:0;width:14px;height:14px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:0;width:150px;margin:0 5px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon){overflow:hidden;text-overflow:ellipsis}.files-filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension{display:block}.files-filestable.view-grid:not(.hidden) tfoot{display:grid}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden){display:inline-block;margin:0 auto;height:418px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td{padding-top:50px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child,.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date{display:none}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info{margin-left:0}#view-toggle{background-color:var(--color-main-background-translucent);border:none;margin:0;padding:22px;opacity:.5;float:right;right:var(--default-grid-baseline);top:var(--default-grid-baseline);z-index:100;position:sticky}#view-toggle:hover,#view-toggle:focus,#showgridview:focus+#view-toggle{opacity:1}#view-toggle:focus-visible,#showgridview:focus-visible+#view-toggle{box-shadow:inset 0 0 0 2px var(--color-primary-element) !important}#showgridview{position:fixed;top:0}#body-public .files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{max-width:124px}#body-public .files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:-80px}#body-public #view-toggle{position:absolute;right:0;top:0}#gallery-button{display:none}#tag_multiple_files_container{overflow:hidden;background-color:#fff;border-radius:3px;position:relative;display:flex;flex-wrap:wrap;margin-bottom:10px}#tag_multiple_files_container h3{width:100%;padding:0 18px}#tag_multiple_files_container .systemTagsInputFieldContainer{flex:1 1 80%;min-width:0;margin:0 12px}#upload{box-sizing:border-box;height:36px;width:39px;padding:0 !important;margin-left:3px;overflow:hidden;vertical-align:top;position:relative;z-index:-20}#upload .icon-upload{position:relative;display:block;width:100%;height:44px;width:44px;margin:-5px -3px;cursor:pointer;z-index:10;opacity:.65}.file_upload_target{display:none}.file_upload_form{display:inline;float:left;margin:0;padding:0;cursor:pointer;overflow:visible}.uploadprogresswrapper,.uploadprogresswrapper *{box-sizing:border-box}.uploadprogresswrapper{display:inline-block;vertical-align:top;height:36px;margin-left:3px}.uploadprogresswrapper>input[type=button]{height:36px;margin-left:3px}#uploadprogressbar{border-color:var(--color-border-dark);border-radius:var(--border-radius-pill) 0 0 var(--border-radius-pill);border-right:0;position:relative;float:left;width:200px;height:44px;display:inline-block;text-align:center}#uploadprogressbar .ui-progressbar-value{margin-top:.1em}#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left{height:calc(100% + 2px);top:-1px;left:-1px;position:absolute;overflow:hidden;background-color:var(--color-primary-element)}#uploadprogressbar .label{top:8px;opacity:1;overflow:hidden;white-space:nowrap;font-weight:normal}#uploadprogressbar .label.inner{color:var(--color-primary-element-text);position:absolute;display:block;width:200px}#uploadprogressbar .label.outer{position:relative;color:var(--color-main-text)}#uploadprogressbar .desktop{display:block}#uploadprogressbar .mobile{display:none}#uploadprogressbar+.stop{border-top-left-radius:0;border-bottom-left-radius:0}.oc-dialog .fileexists{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:30px}.oc-dialog .fileexists .conflict .filename,.oc-dialog .fileexists .conflict .mtime,.oc-dialog .fileexists .conflict .size{-webkit-touch-callout:initial;-webkit-user-select:initial;-khtml-user-select:initial;-moz-user-select:initial;-ms-user-select:initial;user-select:initial}.oc-dialog .fileexists .conflict .message{color:#e9322d}.oc-dialog .fileexists table{width:100%}.oc-dialog .fileexists th{padding-left:0;padding-right:0}.oc-dialog .fileexists th input[type=checkbox]{margin-right:3px}.oc-dialog .fileexists th:first-child{width:225px}.oc-dialog .fileexists th label{font-weight:normal;color:var(--color-main-text)}.oc-dialog .fileexists th .count{margin-left:3px}.oc-dialog .fileexists .conflicts .template{display:none}.oc-dialog .fileexists .conflict{width:100%;height:85px}.oc-dialog .fileexists .conflict .filename{color:#777;word-break:break-all;clear:left}.oc-dialog .fileexists .icon{width:64px;height:64px;margin:0px 5px 5px 5px;background-repeat:no-repeat;background-size:64px 64px;float:left}.oc-dialog .fileexists .original,.oc-dialog .fileexists .replacement{float:left;width:50%}.oc-dialog .fileexists .conflicts{overflow-y:auto;max-height:225px}.oc-dialog .fileexists .conflict input[type=checkbox]{float:left}.oc-dialog .fileexists #allfileslabel{float:right}.oc-dialog .fileexists #allfiles{vertical-align:bottom;position:relative;top:-3px}.oc-dialog .fileexists #allfiles+span{vertical-align:bottom}.oc-dialog .oc-dialog-buttonrow{width:100%;text-align:right}.oc-dialog .oc-dialog-buttonrow .cancel{float:left}.highlightUploaded{-webkit-animation:highlightAnimation 2s 1;-moz-animation:highlightAnimation 2s 1;-o-animation:highlightAnimation 2s 1;animation:highlightAnimation 2s 1}@-webkit-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@-moz-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@-o-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@media only screen and (max-width: 988px)and (min-width: 1025px),only screen and (max-width: 688px){.app-files #app-content.dir-drop{background-color:#fff !important}table th.column-size,table td.filesize,table th.column-mtime,table td.date{display:none}table td{padding:0}table.multiselect thead{padding-left:0}.fileList a.action.action-menu img{padding-left:0}.fileList .fileActionsMenu{margin-right:6px}.fileList a.action-share span:not(.icon):not(.avatar){position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}td.filename a.name .system-tags{display:none}#uploadprogressbar,#uploadprogressbar .label.inner{width:50px}#uploadprogressbar .desktop{display:none !important}#uploadprogressbar .mobile{display:block !important}table.dragshadow{z-index:1000}}@media only screen and (max-width: 480px){table th .selectedActions{float:right}table th .selectedActions>a span:not(.icon){display:none}table th .selectedActions a{padding:17px 14px}table.multiselect th .columntitle.name{margin-left:0}}.app-sidebar .detailFileInfoContainer{min-height:50px;padding:15px}.app-sidebar .detailFileInfoContainer>div{clear:both}.app-sidebar .mainFileInfoView .icon{display:inline-block;background-size:16px 16px}.app-sidebar .mainFileInfoView .permalink{padding:6px 10px;vertical-align:top;opacity:.6}.app-sidebar .mainFileInfoView .permalink:hover,.app-sidebar .mainFileInfoView .permalink:focus{opacity:1}.app-sidebar .mainFileInfoView .permalink-field>input{clear:both;width:90%}.app-sidebar .thumbnailContainer.large{margin-left:-15px;margin-right:-35px;margin-top:-15px}.app-sidebar .thumbnailContainer.large.portrait{margin:0}.app-sidebar .large .thumbnail{width:100%;display:block;background-repeat:no-repeat;background-position:center;background-size:100%;float:none;margin:0;height:auto}.app-sidebar .large .thumbnail .stretcher{content:"";display:block;padding-bottom:56.25%}.app-sidebar .large.portrait .thumbnail{background-position:50% top}.app-sidebar .large.portrait .thumbnail{background-size:contain}.app-sidebar .large.text{overflow-y:scroll;overflow-x:hidden;padding-top:14px;font-size:80%;margin-left:0}.app-sidebar .thumbnail{width:100%;min-height:75px;display:inline-block;float:left;margin-right:10px;background-size:contain;background-repeat:no-repeat}.app-sidebar .ellipsis{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.app-sidebar .fileName{font-size:16px;padding-top:13px;padding-bottom:3px}.app-sidebar .fileName h3{width:calc(100% - 42px);display:inline-block;padding:5px 0;margin:-5px 0}.app-sidebar .file-details{color:var(--color-text-maxcontrast)}.app-sidebar .action-favorite{vertical-align:sub;padding:10px;margin:-10px}.app-sidebar .action-favorite>span{opacity:.7 !important}.app-sidebar .detailList{float:left}.app-sidebar .close{position:absolute;top:0;right:0;opacity:.5;z-index:1;width:44px;height:44px}.whatsNewPopover{bottom:35px !important;left:15px !important;width:270px;z-index:700}.whatsNewPopover p{width:auto !important}.whatsNewPopover .caption{font-weight:bold;cursor:auto !important}.whatsNewPopover .icon-close{position:absolute;right:0}.whatsNewPopover::after{content:none}/*# sourceMappingURL=merged.css.map */ +.actions{padding:3px;height:100%;display:inline-block;float:left}.actions input,.actions button,.actions .button{margin:0;float:left}.actions .button a{color:#555}.actions .button a:hover,.actions .button a:focus{background-color:var(--color-background-hover)}.actions .button a:active{background-color:var(--color-primary-element-light)}.actions.creatable{position:relative;display:flex;flex:1 1}.actions.creatable .button:not(:last-child){margin-right:3px}.actions.hidden{display:none}#trash{margin-right:8px;float:right;z-index:1010;padding:10px;font-weight:normal}.newFileMenu .error,.newFileMenu .error+.icon-confirm,.files-fileList .error{color:var(--color-error);border-color:var(--color-error)}.files-filestable{position:relative;width:100%;min-width:250px;display:block;flex-direction:column}.emptycontent:not(.hidden)~.files-filestable{display:none}.files-filestable thead{position:-webkit-sticky;position:sticky;top:44px;z-index:60;display:block;background-color:var(--color-main-background-translucent)}.files-filestable tbody{display:table;width:100%}.files-filestable tbody tr[data-permissions="0"],.files-filestable tbody tr[data-permissions="16"]{background-color:var(--color-background-dark)}.files-filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext,.files-filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext{color:var(--color-text-maxcontrast)}.files-filestable tbody tr[data-e2eencrypted=true] .selection{pointer-events:none}.files-filestable.hidden{display:none}.app-files #app-content>.viewcontainer{min-height:0%;width:100%}.app-files #app-content{width:calc(100% - 300px);overflow-anchor:none}.file-drag,.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:var(--color-primary-element-light) !important}.app-files #app-content.dir-drop{background-color:var(--color-main-background) !important}.file-drag .files-filestable tbody tr,.file-drag .files-filestable tbody tr:hover{background-color:rgba(0,0,0,0) !important}.app-files #app-content.dir-drop .files-filestable tbody tr.dropping-to-dir{background-color:var(--color-primary-element-light) !important}.nav-icon-files{background-image:var(--icon-folder-dark)}.nav-icon-recent{background-image:var(--icon-recent-dark)}.nav-icon-favorites{background-image:var(--icon-starred-dark)}.nav-icon-sharingin,.nav-icon-sharingout,.nav-icon-pendingshares,.nav-icon-shareoverview{background-image:var(--icon-share-dark)}.nav-icon-sharinglinks{background-image:var(--icon-public-dark)}.nav-icon-extstoragemounts{background-image:var(--icon-external-dark)}.nav-icon-trashbin{background-image:var(--icon-delete-dark)}.nav-icon-trashbin-starred{background-image:var(--icon-delete-#ff0000)}.nav-icon-deletedshares{background-image:var(--icon-unshare-dark)}.nav-icon-favorites-starred{background-image:var(--icon-starred-yellow)}#app-navigation .nav-files a.nav-icon-files{width:auto}#app-navigation .nav-files a.new{width:40px;height:32px;padding:0 10px;margin:0;cursor:pointer}#app-navigation .nav-files a.new.hidden{display:none}#app-navigation .nav-files a.new.disabled{opacity:.3}.files-filestable tbody tr{height:51px}.files-filestable tbody tr:hover,.files-filestable tbody tr:focus,.files-filestable tbody .name:focus,.files-filestable tbody tr:hover .filename form,table tr.mouseOver td{background-color:var(--color-background-hover)}.files-filestable tbody tr:active,.files-filestable tbody tr.highlighted,.files-filestable tbody tr.highlighted .name:focus,.files-filestable tbody tr.selected,.files-filestable tbody tr.searchresult{background-color:var(--color-primary-element-light)}tbody a{color:var(--color-main-text)}span.conflict-path,span.extension,span.uploading,td.date{color:var(--color-text-maxcontrast)}span.conflict-path,span.extension{-webkit-transition:opacity 300ms;-moz-transition:opacity 300ms;-o-transition:opacity 300ms;transition:opacity 300ms;vertical-align:top}tr:hover span.conflict-path,tr:focus span.conflict-path,tr:hover span.extension,tr:focus span.extension{opacity:1;color:var(--color-text-maxcontrast)}table th,table th a{color:var(--color-text-maxcontrast)}table.multiselect th a{color:var(--color-main-text)}table th .columntitle{display:block;padding:15px;height:50px;box-sizing:border-box;-moz-box-sizing:border-box;vertical-align:middle}table th .columntitle:focus-visible{border-radius:2px}table.multiselect th .columntitle{display:inline-block;margin-right:-20px}table th .columntitle.name{padding-left:0;margin-left:44px}table.multiselect th .columntitle.name{margin-left:0}table th .sort-indicator{width:10px;height:8px;margin-left:5px;display:inline-block;vertical-align:text-bottom;opacity:.3}.sort-indicator.hidden,.multiselect .sort-indicator,table.multiselect th:hover .sort-indicator.hidden,table.multiselect th:focus .sort-indicator.hidden{visibility:hidden}.multiselect .sort,.multiselect .sort span{cursor:default}table th:hover .sort-indicator.hidden,table th:focus .sort-indicator.hidden{visibility:visible}table th,table td{border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table td{padding:0 15px;font-style:normal;background-position:8px center;background-repeat:no-repeat}table th.column-name{position:relative;width:9999px;padding:0}.column-name-container{position:relative;height:50px}table th.column-selection{padding-top:2px}table th.column-size,table td.filesize{text-align:right}table th.column-mtime,table td.date,table th.column-last,table td.column-last{-moz-box-sizing:border-box;box-sizing:border-box;position:relative;min-width:130px}#app-content-recent,#app-content-favorites,#app-content-shareoverview,#app-content-sharingout,#app-content-sharingin,#app-content-sharinglinks,#app-content-deletedshares,#app-content-pendingshares{margin-top:22px}#app-content-recent thead,#app-content-favorites thead,#app-content-shareoverview thead,#app-content-sharingout thead,#app-content-sharingin thead,#app-content-sharinglinks thead,#app-content-deletedshares thead,#app-content-pendingshares thead{top:0}table.multiselect thead th{background-color:var(--color-main-background-translucent);font-weight:bold}#app-content.with-app-sidebar table.multiselect thead{margin-right:27%}table.multiselect .column-name{position:relative;width:9999px}table.multiselect .column-mtime>a{display:none}table td.selection,table th.selection,table td.fileaction{width:32px;text-align:center}table td.filename a.name,table td.filename p.name{display:flex;position:relative;-moz-box-sizing:border-box;box-sizing:border-box;height:50px;line-height:50px;padding:0}table td.filename .thumbnail-wrapper{width:0;min-width:50px;max-width:50px;height:50px}table td.filename .thumbnail-wrapper.icon-loading-small:after{z-index:10}table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail{opacity:.2}table td.filename .thumbnail{display:inline-block;width:32px;height:32px;background-size:contain;background-position:center;background-repeat:no-repeat;margin-left:9px;margin-top:9px;border-radius:var(--border-radius);cursor:pointer;position:absolute;z-index:4}table td.filename p.name .thumbnail{cursor:default}table tr[data-has-preview=true] .thumbnail{border:1px solid var(--color-border)}table:not(.view-grid) td.filename input.filename{width:70% !important;margin-left:48px !important;cursor:text}table td.filename form{margin-top:-40px;position:relative;top:-6px}table td.filename a,table td.login,table td.logout,table td.download,table td.upload,table td.create,table td.delete{padding:3px 8px 8px 3px}table td.filename .nametext,.modified,.column-last>span:first-child{float:left;padding:15px 0}.modified,.column-last>span:first-child{position:relative;overflow:hidden;text-overflow:ellipsis;width:110px}table td.filename{max-width:0}table td.filename .nametext{width:0;flex-grow:1;display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:100%;z-index:10;padding:0 20px 0 0}table td.filename .system-tags{--min-size: 32px;display:flex;justify-content:center;align-items:center;flex:1 1 100%;min-width:calc(var(--min-size)*2);max-width:300px}table td.filename .system-tags .system-tags__tag{padding:5px 10px;border:1px solid;border-radius:var(--border-radius-pill);border-color:var(--color-border);color:var(--color-text-maxcontrast);height:var(--min-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:22px;text-align:center}table td.filename .system-tags .system-tags__tag--more{overflow:visible;text-overflow:initial}table td.filename .system-tags .system-tags__tag+.system-tags__tag{margin-left:5px}.hide-hidden-files .files-filestable .files-fileList tr.hidden-file,.hide-hidden-files .files-filestable .files-fileList tr.hidden-file.dragging{display:none !important}.files-fileList tr.animate-opacity{-webkit-transition:opacity 250ms;-moz-transition:opacity 250ms;-o-transition:opacity 250ms;transition:opacity 250ms}.files-fileList tr.dragging{opacity:.2}table td.filename .nametext .innernametext{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top}table td.filename .uploadtext{position:absolute;font-weight:normal;margin-left:50px;left:0;bottom:0;height:20px;padding:0 4px;padding-left:1px;font-size:11px;line-height:22px;color:var(--color-text-maxcontrast);text-overflow:ellipsis;white-space:nowrap}table td.selection{padding:0}.files-fileList tr td.selection>.selectCheckBox+label:before{opacity:.3;margin-right:0}.files-fileList tr:hover td.selection>.selectCheckBox+label:before,.files-fileList tr:focus td.selection>.selectCheckBox+label:before,.files-fileList tr td.selection>.selectCheckBox:checked+label:before,.files-fileList tr.selected td.selection>.selectCheckBox+label:before{opacity:1}.files-fileList tr.halfselected td.selection>.selectCheckBox+label:before{opacity:.5}.files-fileList tr td.selection>.selectCheckBox+label,.select-all+label{padding:16px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill);outline:none !important;border:2px solid var(--color-primary-element) !important;padding:14px}.files-fileList tr td.selection>.selectCheckBox:focus-visible+label,.select-all:focus-visible+label{outline-offset:0px}.files-fileList tr td.filename{position:relative;width:100%;padding-left:0;padding-right:0;-webkit-transition:background-image 500ms;-moz-transition:background-image 500ms;-o-transition:background-image 500ms;transition:background-image 500ms}.files-fileList tr td.filename a.name label,.files-fileList tr td.filename p.name label{position:absolute;width:80%;height:50px}.files-fileList tr td.filename .favorite{display:inline-block;float:left}.files-fileList tr td.filename .favorite-mark{position:absolute;display:block;top:-8px;right:-8px;line-height:100%;text-align:center}.files-fileList tr td.filename .favorite-mark.permanent{background-color:var(--color-main-background);mask:var(--icon-star-rounded-white) no-repeat;mask-size:22px 22px;width:22px;height:22px;display:flex;align-content:center;justify-content:center}.files-fileList tr:hover td.filename .favorite-mark.permanent{background-color:var(--color-background-hover)}#uploadsize-message,#delete-confirm{display:none}.fileactions{z-index:50}.busy .fileactions,.busy .action{visibility:hidden}.bubble,#app-navigation .app-navigation-entry-menu{min-width:100px}.files-fileList .icon-loading-small{opacity:1 !important;display:inline !important}.files-fileList .action.action-share-notification span,.files-fileList a.name{cursor:default !important}.files-fileList a.name.disabled *{cursor:default}.files-fileList a.name.disabled a,.files-fileList a.name.disabled a *{cursor:pointer}.files-fileList a.name.disabled:focus{background:none}a.action>img{height:16px;width:16px;vertical-align:text-bottom}a.action.action-editlocally img.icon{filter:var(--background-invert-if-dark)}.selectedActions{position:relative;display:inline-block;vertical-align:middle}.selectedActions.hidden{display:none}.selectedActions a{display:inline;line-height:50px;padding:16px 5px}.selectedActions a.hidden{display:none}.selectedActions a img{position:relative;vertical-align:text-bottom;margin-bottom:-1px}.selectedActions .actions-selected .icon-more{margin-top:-3px}.files-fileList td a a.action{display:inline;padding:17px 8px;line-height:50px;opacity:.3}.files-fileList td a a.action.action-share{padding:17px 14px}.files-fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared+span{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.files-fileList td a a.action.action-share .avatar{display:inline-block;vertical-align:middle}.files-fileList td a a.action.action-menu{padding-top:17px;padding-bottom:17px;padding-left:14px;padding-right:14px}.files-fileList td a a.action.no-permission:hover,.files-fileList td a a.action.no-permission:focus{opacity:.3}.files-fileList td a a.action.disabled:hover,.files-fileList td a a.action.disabled:focus,.files-fileList td a a.action.disabled img{opacity:.3}.files-fileList td a a.action.disabled.action-download{opacity:.7}.files-fileList td a a.action.disabled.action-download:hover,.files-fileList td a a.action.disabled.action-download:focus{opacity:.7}.files-fileList td a a.action:hover,.files-fileList td a a.action:focus{opacity:1}.files-fileList td a a.action:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.files-fileList td a .fileActionsMenu a.action,.files-fileList td a a.action.action-share.shared-style{opacity:.7}.files-fileList td a .fileActionsMenu .action.permanent{opacity:1}.files-fileList .action.action-share.permanent.shared-style span:not(.icon){display:inline-block;max-width:70px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin-left:6px}.files-fileList .remoteAddress .userDomain{margin-left:0 !important}.files-fileList .favorite-mark.permanent{opacity:1}.files-fileList .fileActionsMenu a.action:hover,.files-fileList .fileActionsMenu a.action:focus,.files-fileList a.action.action-share.shared-style:hover,.files-fileList a.action.action-share.shared-style:focus{opacity:1}.files-fileList tr a.action.disabled{background:none}.selectedActions a.download.disabled,.files-fileList tr a.action.action-download.disabled{color:#000}.files-fileList tr:hover a.action.disabled:hover *{cursor:default}.summary{color:var(--color-text-maxcontrast);height:330px}.files-filestable .summary .filesummary{width:100%;padding-left:101px}#body-public .summary{height:180px}.summary:hover,.summary:focus,.summary,table tr.summary td{background-color:rgba(0,0,0,0)}.summary td{border-bottom:none;vertical-align:top;padding-top:20px}.summary td:first-child{padding:0}.hiddeninfo{white-space:pre-line}table.dragshadow{width:auto;z-index:2000}table.dragshadow td.filename{padding-left:60px;padding-right:16px;height:36px;max-width:unset}table.dragshadow td.size{padding-right:8px}.mask{z-index:50;position:absolute;top:0;left:0;right:0;bottom:0;background-color:var(--color-main-background);background-repeat:no-repeat no-repeat;background-position:50%;opacity:.7;transition:opacity 100ms;-moz-transition:opacity 100ms;-o-transition:opacity 100ms;-ms-transition:opacity 100ms;-webkit-transition:opacity 100ms}.mask.transparent{opacity:0}.newFileMenu{font-weight:300;top:100%;left:-48px !important;margin-top:4px;min-width:100px;z-index:1001}.newFileMenu::after{left:61px !important}.files-controls{box-sizing:border-box;position:-webkit-sticky;position:sticky;height:50px;padding:0;margin:0;background-color:var(--color-main-background-translucent);z-index:62;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;top:0;padding-left:50px}.files-controls .actions>div>.button,.files-controls .actions>div button,.files-controls .actions>.button,.files-controls .actions button{box-sizing:border-box;display:inline-block;display:flex;height:44px;width:44px;padding:9px;align-items:center;justify-content:center}.files-controls .actions>div .button.hidden,.files-controls .actions .button.hidden{display:none}.viewer-mode #app-navigation+#app-content .files-controls{left:0}.files-filestable .filename .action .icon,.files-filestable .selectedActions a .icon,.files-filestable .filename .favorite-mark .icon,.files-controls .actions .button .icon{display:inline-block;vertical-align:middle;background-size:16px 16px}.files-filestable .filename .favorite-mark .icon-star{background-image:none}.files-filestable .filename .favorite-mark .icon-starred{background-image:var(--icon-starred-yellow) !important}.files-filestable .filename .action .icon.hidden,.files-filestable .selectedActions a .icon.hidden,.files-controls .actions .button .icon.hidden{display:none}.files-filestable .filename .action .icon.loading,.files-filestable .selectedActions a .icon.loading,.files-controls .actions .button .icon.loading{width:15px;height:15px}.app-files .actions .button.new{position:relative}.breadcrumb{align-items:center}.breadcrumb .icon-home{border-radius:var(--border-radius)}.breadcrumb .canDrop>a,.files-filestable tbody tr.canDrop{background-color:rgba(0,130,201,.3)}.dropzone-background{background-color:rgba(0,130,201,.3)}.dropzone-background :hover{box-shadow:none !important}.notCreatable{margin-left:12px;margin-right:44px;margin-top:12px;color:var(--color-main-text);overflow:auto;min-width:160px;height:54px}.notCreatable:not(.hidden){display:flex}.notCreatable .icon-alert-outline{top:-15px;position:relative;margin-right:4px}.quota-navigation-item{margin:0 !important;border:none;border-radius:0;background-color:rgba(0,0,0,0);z-index:1;height:44px;display:flex !important;flex-direction:column}.quota-navigation-item__text{height:30px}.quota-navigation-item[href="#"],.quota-navigation-item[href="#"] *{cursor:default !important}.quota-navigation-item__container{height:5px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) thead tr{display:block;border-bottom:1px solid var(--color-border);background-color:var(--color-main-background-translucent)}.files-filestable.view-grid:not(.hidden) thead tr th{width:auto;border:none}.files-filestable.view-grid:not(.hidden) tbody{display:grid;grid-template-columns:repeat(auto-fill, 160px);justify-content:space-around;row-gap:15px;margin:15px 0}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden){display:block;position:relative;height:190px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted{background-color:rgba(0,0,0,0)}.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext,.files-filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions{background-color:var(--color-background-hover)}.files-filestable.view-grid:not(.hidden) tbody td{display:inline;border-bottom:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper{min-width:0;max-width:none;position:absolute;width:160px;height:160px;padding:14px;top:0;left:0;z-index:-1}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail{width:calc(100% - 2 * 14px);height:calc(100% - 2 * 14px);background-size:contain;margin:0;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark{left:auto;top:-11px;right:-11px}.files-filestable.view-grid:not(.hidden) tbody td.filename .uploadtext{width:100%;margin:0;top:0;bottom:auto;height:28px;padding-top:4px;padding-left:28px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name{height:100%;border-radius:var(--border-radius);overflow:hidden;cursor:pointer !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext{display:flex;height:44px;margin-top:146px;text-align:center;line-height:44px;padding:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{display:inline-block;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before{content:"";flex:1;min-width:14px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after{content:"";flex:1;min-width:44px}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .system-tags{display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions{height:initial;margin-top:146px;display:flex;align-items:center;position:absolute;right:0}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action{padding:14px;width:44px;height:44px;display:flex;align-items:center;justify-content:center}.files-filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu){display:none}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img{padding:6px;border-radius:50%}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden{display:block !important}.files-filestable.view-grid:not(.hidden) tbody td.filename form{padding:3px 14px;border-radius:var(--border-radius)}.files-filestable.view-grid:not(.hidden) tbody td.filename form input.filename{width:100%;margin-left:0;cursor:text}.files-filestable.view-grid:not(.hidden) tbody td.filesize,.files-filestable.view-grid:not(.hidden) tbody td.date{display:none}.files-filestable.view-grid:not(.hidden) tbody td.selection,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark{position:absolute;top:-8px;left:-8px;display:flex;z-index:10}.files-filestable.view-grid:not(.hidden) tbody td.selection label,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label{width:44px;height:44px;display:inline-flex;padding:14px}.files-filestable.view-grid:not(.hidden) tbody td.selection label::before,.files-filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before{margin:0;width:14px;height:14px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:0;width:150px;margin:0 5px}.files-filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon){overflow:hidden;text-overflow:ellipsis}.files-filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension{display:block}.files-filestable.view-grid:not(.hidden) tfoot{display:grid}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden){display:inline-block;margin:0 auto;height:418px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td{padding-top:50px}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child,.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date{display:none}.files-filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info{margin-left:0}#view-toggle{background-color:var(--color-main-background-translucent);border:none;margin:0;padding:22px;opacity:.5;float:right;right:var(--default-grid-baseline);top:var(--default-grid-baseline);z-index:100;position:sticky}#view-toggle:hover,#view-toggle:focus,#showgridview:focus+#view-toggle{opacity:1}#view-toggle:focus-visible,#showgridview:focus-visible+#view-toggle{box-shadow:inset 0 0 0 2px var(--color-primary-element) !important}#showgridview{position:fixed;top:0}#body-public .files-filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext{max-width:124px}#body-public .files-filestable.view-grid:not(.hidden) tbody td .popovermenu{left:-80px}#body-public #view-toggle{position:absolute;right:0;top:0}#gallery-button{display:none}#tag_multiple_files_container{overflow:hidden;background-color:#fff;border-radius:3px;position:relative;display:flex;flex-wrap:wrap;margin-bottom:10px}#tag_multiple_files_container h3{width:100%;padding:0 18px}#tag_multiple_files_container .systemTagsInputFieldContainer{flex:1 1 80%;min-width:0;margin:0 12px}#upload{box-sizing:border-box;height:36px;width:39px;padding:0 !important;margin-left:3px;overflow:hidden;vertical-align:top;position:relative;z-index:-20}#upload .icon-upload{position:relative;display:block;width:100%;height:44px;width:44px;margin:-5px -3px;cursor:pointer;z-index:10;opacity:.65}.file_upload_target{display:none}.file_upload_form{display:inline;float:left;margin:0;padding:0;cursor:pointer;overflow:visible}.uploadprogresswrapper,.uploadprogresswrapper *{box-sizing:border-box}.uploadprogresswrapper{display:inline-block;vertical-align:top;height:36px;margin-left:3px}.uploadprogresswrapper>input[type=button]{height:36px;margin-left:3px}#uploadprogressbar{border-color:var(--color-border-dark);border-radius:var(--border-radius-pill) 0 0 var(--border-radius-pill);border-right:0;position:relative;float:left;width:200px;height:44px;display:inline-block;text-align:center}#uploadprogressbar .ui-progressbar-value{margin-top:.1em}#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left{height:calc(100% + 2px);top:-1px;left:-1px;position:absolute;overflow:hidden;background-color:var(--color-primary-element)}#uploadprogressbar .label{top:8px;opacity:1;overflow:hidden;white-space:nowrap;font-weight:normal}#uploadprogressbar .label.inner{color:var(--color-primary-element-text);position:absolute;display:block;width:200px}#uploadprogressbar .label.outer{position:relative;color:var(--color-main-text)}#uploadprogressbar .desktop{display:block}#uploadprogressbar .mobile{display:none}#uploadprogressbar+.stop{border-top-left-radius:0;border-bottom-left-radius:0}.oc-dialog .fileexists{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:30px}.oc-dialog .fileexists .conflict .filename,.oc-dialog .fileexists .conflict .mtime,.oc-dialog .fileexists .conflict .size{-webkit-touch-callout:initial;-webkit-user-select:initial;-khtml-user-select:initial;-moz-user-select:initial;-ms-user-select:initial;user-select:initial}.oc-dialog .fileexists .conflict .message{color:#e9322d}.oc-dialog .fileexists table{width:100%}.oc-dialog .fileexists th{padding-left:0;padding-right:0}.oc-dialog .fileexists th input[type=checkbox]{margin-right:3px}.oc-dialog .fileexists th:first-child{width:225px}.oc-dialog .fileexists th label{font-weight:normal;color:var(--color-main-text)}.oc-dialog .fileexists th .count{margin-left:3px}.oc-dialog .fileexists .conflicts .template{display:none}.oc-dialog .fileexists .conflict{width:100%;height:85px}.oc-dialog .fileexists .conflict .filename{color:#777;word-break:break-all;clear:left}.oc-dialog .fileexists .icon{width:64px;height:64px;margin:0px 5px 5px 5px;background-repeat:no-repeat;background-size:64px 64px;float:left}.oc-dialog .fileexists .original,.oc-dialog .fileexists .replacement{float:left;width:50%}.oc-dialog .fileexists .conflicts{overflow-y:auto;max-height:225px}.oc-dialog .fileexists .conflict input[type=checkbox]{float:left}.oc-dialog .fileexists #allfileslabel{float:right}.oc-dialog .fileexists #allfiles{vertical-align:bottom;position:relative;top:-3px}.oc-dialog .fileexists #allfiles+span{vertical-align:bottom}.oc-dialog .oc-dialog-buttonrow{width:100%;text-align:right}.oc-dialog .oc-dialog-buttonrow .cancel{float:left}.highlightUploaded{-webkit-animation:highlightAnimation 2s 1;-moz-animation:highlightAnimation 2s 1;-o-animation:highlightAnimation 2s 1;animation:highlightAnimation 2s 1}@-webkit-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@-moz-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@-o-keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@keyframes highlightAnimation{0%{background-color:#ffff8c}100%{background-color:rgba(0,0,0,0)}}@media only screen and (max-width: 988px)and (min-width: 1025px),only screen and (max-width: 688px){.app-files #app-content.dir-drop{background-color:#fff !important}table th.column-size,table td.filesize,table th.column-mtime,table td.date{display:none}table td{padding:0}table.multiselect thead{padding-left:0}.fileList a.action.action-menu img{padding-left:0}.fileList .fileActionsMenu{margin-right:6px}.fileList a.action-share span:not(.icon):not(.avatar){position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}td.filename a.name .system-tags{display:none}#uploadprogressbar,#uploadprogressbar .label.inner{width:50px}#uploadprogressbar .desktop{display:none !important}#uploadprogressbar .mobile{display:block !important}table.dragshadow{z-index:1000}}@media only screen and (max-width: 480px){table th .selectedActions{float:right}table th .selectedActions>a span:not(.icon){display:none}table th .selectedActions a{padding:17px 14px}table.multiselect th .columntitle.name{margin-left:0}}.app-sidebar .detailFileInfoContainer{min-height:50px;padding:15px}.app-sidebar .detailFileInfoContainer>div{clear:both}.app-sidebar .mainFileInfoView .icon{display:inline-block;background-size:16px 16px}.app-sidebar .mainFileInfoView .permalink{padding:6px 10px;vertical-align:top;opacity:.6}.app-sidebar .mainFileInfoView .permalink:hover,.app-sidebar .mainFileInfoView .permalink:focus{opacity:1}.app-sidebar .mainFileInfoView .permalink-field>input{clear:both;width:90%}.app-sidebar .thumbnailContainer.large{margin-left:-15px;margin-right:-35px;margin-top:-15px}.app-sidebar .thumbnailContainer.large.portrait{margin:0}.app-sidebar .large .thumbnail{width:100%;display:block;background-repeat:no-repeat;background-position:center;background-size:100%;float:none;margin:0;height:auto}.app-sidebar .large .thumbnail .stretcher{content:"";display:block;padding-bottom:56.25%}.app-sidebar .large.portrait .thumbnail{background-position:50% top}.app-sidebar .large.portrait .thumbnail{background-size:contain}.app-sidebar .large.text{overflow-y:scroll;overflow-x:hidden;padding-top:14px;font-size:80%;margin-left:0}.app-sidebar .thumbnail{width:100%;min-height:75px;display:inline-block;float:left;margin-right:10px;background-size:contain;background-repeat:no-repeat}.app-sidebar .ellipsis{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.app-sidebar .fileName{font-size:16px;padding-top:13px;padding-bottom:3px}.app-sidebar .fileName h3{width:calc(100% - 42px);display:inline-block;padding:5px 0;margin:-5px 0}.app-sidebar .file-details{color:var(--color-text-maxcontrast)}.app-sidebar .action-favorite{vertical-align:sub;padding:10px;margin:-10px}.app-sidebar .action-favorite>span{opacity:.7 !important}.app-sidebar .detailList{float:left}.app-sidebar .close{position:absolute;top:0;right:0;opacity:.5;z-index:1;width:44px;height:44px}.whatsNewPopover{bottom:35px !important;left:15px !important;width:270px;z-index:700}.whatsNewPopover p{width:auto !important}.whatsNewPopover .caption{font-weight:bold;cursor:auto !important}.whatsNewPopover .icon-close{position:absolute;right:0}.whatsNewPopover::after{content:none}/*# sourceMappingURL=merged.css.map */ diff --git a/apps/files/css/merged.css.map b/apps/files/css/merged.css.map index 578030adef8..91abbce0af1 100644 --- a/apps/files/css/merged.css.map +++ b/apps/files/css/merged.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss","upload.scss","mobile.scss","detailsView.scss","../../../core/css/whatsnew.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,yFCjFC,wCDuFD,uBCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,wBCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,cACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,QA1EK,KA2EL,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAzJK,KA0JL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WACA,YACA,WACA,yBAEA,kJACC,WACA,YACA,oBACA,QA7NO,KA8NP,kKACC,SACA,MAhOM,KAiON,OAjOM,KAuOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA,cEr1CF,QACC,sBACA,YACA,WACA,qBACA,gBACA,gBACA,mBACA,kBACA,YAED,qBACC,kBACA,cACA,WACA,YACA,WACA,iBACA,eACA,WACA,YAED,iCACA,+FAEA,gDACC,sBAGD,uBACC,qBACA,mBACA,YACA,gBAED,0CACC,YACA,gBAED,mBACC,sCACA,sEACA,eACA,kBACA,WACA,YACA,YACA,qBACA,kBAEA,yCACC,gBAGF,yEACC,wBACA,SACA,UACA,kBACA,gBACA,8CAED,0BACC,QACA,UACA,gBACA,mBACA,mBAED,gCACC,wCACA,kBACA,cACA,YAED,gCACC,kBACA,6BAED,4BACC,cAED,2BACC,aAGD,yBACC,yBACA,4BAGD,uBACC,2BACA,yBACA,wBACA,sBACA,qBACA,iBACA,mBAGD,0HAGC,8BACA,4BACA,2BACA,yBACA,wBACA,oBAED,0CACC,cAED,6BACC,WAED,0BACC,eACA,gBAED,+CACC,iBAED,sCACC,YAED,gCACC,mBACA,6BAED,iCACC,gBAED,4CACC,aAED,iCACC,WACA,YAED,2CACC,WACA,qBACA,WAED,6BACC,WACA,YACA,uBACA,4BACA,0BACA,WAGD,qEAEC,WACA,UAED,kCACC,gBACA,iBAED,sDACC,WAED,sCACC,YAED,iCACC,sBACA,kBACA,SAED,sCACC,sBAGD,gCACC,WACA,iBAEA,wCACC,WAIF,mBACC,0CACA,uCACA,qCACA,kCAGD,sCACE,4BACA,qCAEF,mCACE,4BACA,qCAEF,iCACE,4BACA,qCAEF,8BACE,4BACA,qCC3MF,oGAEA,iCACC,iCAGD,2EAIC,aAID,SACC,UAID,wBACC,eAGD,mCACC,eAGD,2BACC,iBAID,sDACC,kBACA,cACA,SACA,UACA,WACA,gBAID,gCACC,aAKD,mDACC,WAGD,4BACC,wBAED,2BACC,yBAID,iBACC,cAID,0CAEC,0BACC,YAED,4CACC,aAID,4BACC,kBAID,uCACC,eCvFF,sCACC,gBACA,aAGD,0CACC,WAID,qCACC,qBACA,0BAGD,0CACC,iBACA,mBACA,WAEA,gGAEC,UAGF,sDACC,WACA,UAGD,uCACC,kBACA,mBACA,iBAGD,gDACC,SAGD,+BACC,WACA,cACA,4BACA,2BACA,qBACA,WACA,SACA,YAGD,0CACC,WACA,cACA,sBAGD,wCACC,4BAGD,wCACC,wBAGD,yBACC,kBACA,kBACA,iBACA,cACA,cAGD,wBACC,WACA,gBACA,qBACA,WACA,kBACA,wBACA,4BAGD,uBACC,mBACA,uBACA,gBAGD,uBACC,eACA,iBACA,mBAGD,0BACC,wBACA,qBACA,cACA,cAGD,2BACC,oCAGD,8BACC,mBACA,aACA,aAGD,mCACC,sBAGD,yBACC,WAGD,oBACC,kBACA,MACA,QACA,WACA,UACA,WACA,YCxHD,iBACE,uBACA,qBACA,YACA,YAGF,mBACE,sBAGF,0BACE,iBACA,uBAGF,6BACE,kBACA,QAGF,wBACE","file":"merged.css"}
\ No newline at end of file +{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss","upload.scss","mobile.scss","detailsView.scss","../../../core/css/whatsnew.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,yFCjFC,wCDuFD,uBCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,wBCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,cACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBACA,wDAEC,8CACA,8CACA,oBAEA,WACA,YACA,aACA,qBACA,uBAGF,8DACC,+CAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAxJK,KAyJL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WAEA,kJACC,WACA,YACA,oBACA,QAzNO,KA0NP,kKACC,SACA,MA5NM,KA6NN,OA7NM,KAmOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA,cEh2CF,QACC,sBACA,YACA,WACA,qBACA,gBACA,gBACA,mBACA,kBACA,YAED,qBACC,kBACA,cACA,WACA,YACA,WACA,iBACA,eACA,WACA,YAED,iCACA,+FAEA,gDACC,sBAGD,uBACC,qBACA,mBACA,YACA,gBAED,0CACC,YACA,gBAED,mBACC,sCACA,sEACA,eACA,kBACA,WACA,YACA,YACA,qBACA,kBAEA,yCACC,gBAGF,yEACC,wBACA,SACA,UACA,kBACA,gBACA,8CAED,0BACC,QACA,UACA,gBACA,mBACA,mBAED,gCACC,wCACA,kBACA,cACA,YAED,gCACC,kBACA,6BAED,4BACC,cAED,2BACC,aAGD,yBACC,yBACA,4BAGD,uBACC,2BACA,yBACA,wBACA,sBACA,qBACA,iBACA,mBAGD,0HAGC,8BACA,4BACA,2BACA,yBACA,wBACA,oBAED,0CACC,cAED,6BACC,WAED,0BACC,eACA,gBAED,+CACC,iBAED,sCACC,YAED,gCACC,mBACA,6BAED,iCACC,gBAED,4CACC,aAED,iCACC,WACA,YAED,2CACC,WACA,qBACA,WAED,6BACC,WACA,YACA,uBACA,4BACA,0BACA,WAGD,qEAEC,WACA,UAED,kCACC,gBACA,iBAED,sDACC,WAED,sCACC,YAED,iCACC,sBACA,kBACA,SAED,sCACC,sBAGD,gCACC,WACA,iBAEA,wCACC,WAIF,mBACC,0CACA,uCACA,qCACA,kCAGD,sCACE,4BACA,qCAEF,mCACE,4BACA,qCAEF,iCACE,4BACA,qCAEF,8BACE,4BACA,qCC3MF,oGAEA,iCACC,iCAGD,2EAIC,aAID,SACC,UAID,wBACC,eAGD,mCACC,eAGD,2BACC,iBAID,sDACC,kBACA,cACA,SACA,UACA,WACA,gBAID,gCACC,aAKD,mDACC,WAGD,4BACC,wBAED,2BACC,yBAID,iBACC,cAID,0CAEC,0BACC,YAED,4CACC,aAID,4BACC,kBAID,uCACC,eCvFF,sCACC,gBACA,aAGD,0CACC,WAID,qCACC,qBACA,0BAGD,0CACC,iBACA,mBACA,WAEA,gGAEC,UAGF,sDACC,WACA,UAGD,uCACC,kBACA,mBACA,iBAGD,gDACC,SAGD,+BACC,WACA,cACA,4BACA,2BACA,qBACA,WACA,SACA,YAGD,0CACC,WACA,cACA,sBAGD,wCACC,4BAGD,wCACC,wBAGD,yBACC,kBACA,kBACA,iBACA,cACA,cAGD,wBACC,WACA,gBACA,qBACA,WACA,kBACA,wBACA,4BAGD,uBACC,mBACA,uBACA,gBAGD,uBACC,eACA,iBACA,mBAGD,0BACC,wBACA,qBACA,cACA,cAGD,2BACC,oCAGD,8BACC,mBACA,aACA,aAGD,mCACC,sBAGD,yBACC,WAGD,oBACC,kBACA,MACA,QACA,WACA,UACA,WACA,YCxHD,iBACE,uBACA,qBACA,YACA,YAGF,mBACE,sBAGF,0BACE,iBACA,uBAGF,6BACE,kBACA,QAGF,wBACE","file":"merged.css"}
\ No newline at end of file diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index ce05b2c7289..04b53a4f67a 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -6,23 +6,23 @@ OC.L10N.register( "Download" : "Baixa", "Delete" : "Suprimeix", "Tags" : "Etiquetes", - "Show list view" : "Mostra en vista de llista", - "Show grid view" : "Mostra en vista de graella", + "Show list view" : "Mostra la visualització de llista", + "Show grid view" : "Mostra la visualització de graella", "Home" : "Inici", "Close" : "Tanca", "Favorites" : "Preferits", "Could not create folder \"{dir}\"" : "No s'ha pogut crear la carpeta «{dir}»", "This will stop your current uploads." : "Això aturarà les pujades actuals.", "Upload cancelled." : "S'ha cancel·lat la pujada.", - "Processing files …" : "S'estan processant els fitxers …", + "Processing files …" : "S'estan processant els fitxers…", "…" : "…", "Unable to upload {filename} as it is a directory or has 0 bytes" : "No s'ha pogut pujar {filename} perquè és una carpeta o té 0 bytes", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, esteu pujant {size1} però només teniu {size2} lliures", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, esteu pujant {size1}, però només teniu {size2} lliures", "Target folder \"{dir}\" does not exist any more" : "La carpeta de destinació «{dir}» ja no existeix", "Not enough free space" : "No hi ha prou espai lliure", "An unknown error has occurred" : "S'ha produït un error desconegut", "File could not be uploaded" : "No s'ha pogut pujar el fitxer", - "Uploading …" : "S'està pujant …", + "Uploading …" : "S'està pujant…", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})", "Uploading that item is not supported" : "No s'admet la pujada aquest element", "Target folder does not exist any more" : "La carpeta de destinació ja no existeix", @@ -33,7 +33,7 @@ OC.L10N.register( "Move" : "Mou", "Copy" : "Copia", "Choose target folder" : "Trieu la carpeta de destinació", - "Edit locally" : "Edició local", + "Edit locally" : "Edita localment", "Open" : "Obre", "Delete file" : "Suprimeix el fitxer", "Delete folder" : "Suprimeix la carpeta", @@ -49,7 +49,7 @@ OC.L10N.register( "Pending" : "Pendent", "Unable to determine date" : "No s'ha pogut determinar la data", "This operation is forbidden" : "Aquesta operació no està permesa", - "This directory is unavailable, please check the logs or contact the administrator" : "Aquest directori no està disponible. Consulteu els registres o contacteu amb l'administrador", + "This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Consulteu els registres o contacteu amb l'administrador", "Storage is temporarily not available" : "L'emmagatzematge no està disponible temporalment", "Could not move \"{file}\", target exists" : "No s'ha pogut desplaçar «{file}», el fitxer de destinació ja existeix", "Could not move \"{file}\"" : "No s'ha pogut desplaçar «{file}»", @@ -79,7 +79,7 @@ OC.L10N.register( "_including %n hidden_::_including %n hidden_" : ["incloent-hi %n element ocult","incloent-hi %n elements ocults"], "You do not have permission to upload or create files here" : "No teniu permís per a pujar o crear fitxers aquí", "_Uploading %n file_::_Uploading %n files_" : ["S'està pujant %n fitxer","S'estan pujant %n fitxers"], - "New file/folder menu" : "Nou menú fitxer/carpeta", + "New file/folder menu" : "Menú de fitxer o carpeta nova", "Select file range" : "Selecciona un interval de fitxers", "{used}%" : "{used}%", "{used} of {quota} used" : "{used} de {quota} en ús", @@ -97,19 +97,21 @@ OC.L10N.register( "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "L'emmagatzematge extern «{mountPoint}» està gairebé ple ({usedSpacePercent}%).", "Your storage is almost full ({usedSpacePercent}%)." : "L'emmagatzematge està gairebé ple ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["coincideix amb «{filter}»","coincideixen amb «{filter}»"], - "View in folder" : "Visualitza-ho a la carpeta", - "Direct link was copied (only works for users who have access to this file/folder)" : "S'ha copiat l'enllaç directe (només funciona per als usuaris que tenen accés a aquest fitxer/carpeta)", - "Path" : "Ruta", + "View in folder" : "Visualitza-ho en la carpeta", + "Direct link was copied (only works for users who have access to this file/folder)" : "S'ha copiat l'enllaç directe (només funciona per als usuaris que tenen accés a aquest fitxer o carpeta)", + "Path" : "Camí", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Favorited" : "S'ha afegit als preferits", - "Favorite" : "Preferits", + "Favorited" : "En els preferits", + "Favorite" : "En els preferits", "Copy direct link (only works for users who have access to this file/folder)" : "Copia l'enllaç directe (només funciona per als usuaris que tinguin accés a aquest fitxer o carpeta)", "You can only favorite a single file or folder at a time" : "Només podeu afegir als preferits un fitxer o carpeta alhora", - "New folder" : "Crea una carpeta", - "Create new folder" : "Crea una nova carpeta", + "New folder" : "Carpeta nova", + "Create new folder" : "Crea una carpeta", "Upload file" : "Puja un fitxer", "Recent" : "Recents", - "Not favorited" : "S'ha suprimit dels preferits", + "This file has the tag {tag}" : "Aquest fitxer té l'etiqueta {tag}", + "This file has the tags {firstTags} and {lastTag}" : "Aquest fitxer té les etiquetes {firstTags} i {lastTag}", + "Not favorited" : "No s'inclou en els preferits", "Remove from favorites" : "Suprimeix dels preferits", "Add to favorites" : "Afegeix als preferits", "An error occurred while trying to update the tags" : "S'ha produït un error en intentar actualitzar les etiquetes", @@ -117,27 +119,27 @@ OC.L10N.register( "Removed from favorites" : "S'ha suprimit dels preferits", "You added {file} to your favorites" : "Heu afegit {file} als preferits", "You removed {file} from your favorites" : "Heu suprimit {file} dels preferits", - "File changes" : "Canvis al fitxer", - "Created by {user}" : "Creat per {user}", - "Changed by {user}" : "Modificat per {user}", - "Deleted by {user}" : "Suprimit per {user}", - "Restored by {user}" : "Restaurat per {user}", - "Renamed by {user}" : "Canvi de nom per {user}", - "Moved by {user}" : "Desplaçat per {user}", + "File changes" : "Canvis del fitxer", + "Created by {user}" : "{user} l'ha creat", + "Changed by {user}" : "{user} l'ha modificat", + "Deleted by {user}" : "{user} l'ha suprimit", + "Restored by {user}" : "{user} l'ha restaurat", + "Renamed by {user}" : "{user} n'ha canviat el nom", + "Moved by {user}" : "{user} l'ha desplaçat", "\"remote user\"" : "«usuari remot»", "You created {file}" : "Heu creat {file}", - "You created an encrypted file in {file}" : "Heu creat un fitxer xifrat a {file}", + "You created an encrypted file in {file}" : "Heu creat el fitxer xifrat {file}", "{user} created {file}" : "{user} ha creat {file}", - "{user} created an encrypted file in {file}" : "{user} ha creat un fitxer xifrat a {file}", + "{user} created an encrypted file in {file}" : "{user} ha creat el fitxer xifrat {file}", "{file} was created in a public folder" : "S'ha creat {file} en una carpeta pública", "You changed {file}" : "Heu modificat {file}", - "You changed an encrypted file in {file}" : "Heu modificat un fitxer xifrat a {file}", + "You changed an encrypted file in {file}" : "Heu modificat el fitxer xifrat {file}", "{user} changed {file}" : "{user} ha modificat {file}", - "{user} changed an encrypted file in {file}" : "{user} ha modificat un fitxer xifrat a {file}", + "{user} changed an encrypted file in {file}" : "{user} ha modificat el fitxer xifrat {file}", "You deleted {file}" : "Heu suprimit {file}", - "You deleted an encrypted file in {file}" : "Heu suprimit un fitxer xifrat a {file}", + "You deleted an encrypted file in {file}" : "Heu suprimit el fitxer xifrat {file}", "{user} deleted {file}" : "{user} ha suprimit {file}", - "{user} deleted an encrypted file in {file}" : "{user} ha suprimit un fitxer xifrat a {file}", + "{user} deleted an encrypted file in {file}" : "{user} ha suprimit el fitxer xifrat {file}", "You restored {file}" : "Heu restaurat {file}", "{user} restored {file}" : "{user} ha restaurat {file}", "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Heu canviat el nom de {oldfile} (ocult) a {newfile} (ocult)", @@ -167,38 +169,56 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "S'ha completat la transferència de propietat de {path} de {user}.", "in %s" : "%s", "File Management" : "Gestió de fitxers", + "Reload current directory" : "Torna a carregar la carpeta actual", + "Go to the \"{dir}\" directory" : "Ves a la carpeta «{dir}»", + "Select the row for {displayName}" : "Selecciona la fila per a {displayName}", + "Open folder {name}" : "Obre la carpeta {name}", + "Download file {name}" : "Baixa el fitxer {name}", + "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament", + "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»", + "Total rows summary" : "Resum de totes les files", "Select all" : "Selecciona-ho tot", + "Unselect all" : "Anul·la tota la selecció", + "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements", + "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament", + "ascending" : "ascendent", + "descending" : "descendent", + "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.", "Storage informations" : "Informació d'emmagatzematge", - "{usedQuotaByte} used" : "{usedQuotaByte} utilitzat", - "{relative}% used" : "{relative}% used", + "{usedQuotaByte} used" : "{usedQuotaByte} en ús", + "{relative}% used" : "{relative}% en ús", "Could not refresh storage stats" : "No s'han pogut actualitzar les estadístiques d'emmagatzematge", - "Transfer ownership of a file or folder" : "Transferiu la propietat d'un fitxer o carpeta", - "Choose file or folder to transfer" : "Tria el fitxer o carpeta que s'ha de transferir", + "Transfer ownership of a file or folder" : "Transferència de la propietat d'un fitxer o carpeta", + "Choose file or folder to transfer" : "Tria el fitxer o carpeta que voleu transferir", "Change" : "Canvia", "New owner" : "Propietari nou", - "Choose a file or folder to transfer" : "Trieu el fitxer o carpeta que vulgueu transferir", + "Choose a file or folder to transfer" : "Trieu el fitxer o carpeta que voleu transferir", "Transfer" : "Transfereix", "Transfer {path} to {userid}" : "Transfereix {path} a {userid}", "Invalid path selected" : "El camí seleccionat no és vàlid", "Unknown error" : "Error desconegut", "Ownership transfer request sent" : "S'ha enviat la sol·licitud de transferència de propietat", "Cannot transfer ownership of a file or folder you do not own" : "No es pot transferir la propietat d'un fitxer o carpeta que no és vostre", - "Select file or folder to link to" : "Seleccioneu el fitxer o la carpeta per enllaçar", - "No files in here" : "No hi ha fitxers aquí", - "Go back" : "Torna enrere", - "Open the files app settings" : "Obriu la configuració de l'aplicació de fitxers", + "Select file or folder to link to" : "Seleccioneu el fitxer o la carpeta que voleu enllaçar", + "Loading current folder" : "S'està carregant la carpeta actual", + "No files in here" : "No hi ha cap fitxer aquí", + "No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta", + "Go to the previous folder" : "Torna a la carpeta anterior", + "Go back" : "Torna", + "Open the files app settings" : "Obriu els paràmetres de l'aplicació Fitxers", "Files settings" : "Paràmetres dels fitxers", "File cannot be accessed" : "No es pot accedir al fitxer", - "You might not have have permissions to view it, ask the sender to share it" : "És possible que no tingueu permisos per veure'l, demaneu al remitent que el comparteixi", + "You might not have have permissions to view it, ask the sender to share it" : "És possible que no tingueu permisos per a visualitzar-lo; demaneu al remitent que el comparteixi", "Show hidden files" : "Mostra els fitxers ocults", "Crop image previews" : "Retalla les previsualitzacions de les imatges", "Additional settings" : "Paràmetres addicionals", "WebDAV" : "WebDAV", "Copy to clipboard" : "Copia-ho al porta-retalls", "Use this address to access your Files via WebDAV" : "Utilitzeu aquesta adreça per a accedir als vostres fitxers mitjançant WebDAV", - "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si has habilitat l'autenticació en dos factors 2FA, crea i utilitza una nova contrasenya d'aplicació clicant aquí", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si heu habilitat l'autenticació de doble factor, podeu crear i utilitzar una nova contrasenya d'aplicació fent clic aquí.", "Clipboard is not available" : "El porta-retalls no està disponible", - "WebDAV URL copied to clipboard" : "URL de WebDAV copiat al porta-retalls", + "WebDAV URL copied to clipboard" : "S'ha copiat l'URL de WebDAV al porta-retalls", "Unable to change the favourite state of the file" : "No s'ha pogut canviar l'estat de preferit del fitxer", "Error while loading the file data" : "S'ha produït un error en carregar la informació del fitxer", "Pick a template for {name}" : "Trieu una plantilla per a {name}", @@ -207,12 +227,14 @@ OC.L10N.register( "Creating file" : "S'està creant el fitxer", "Blank" : "En blanc", "Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla", - "Delete permanently" : "Esborrar permanentment", + "Delete permanently" : "Suprimeix permanentment", + "Open folder {displayName}" : "Obre la carpeta {displayName}", "Set up templates folder" : "Configura la carpeta de plantilles", "Templates" : "Plantilles", + "Create new templates folder" : "Crea la carpeta de plantilles", "Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles", - "Toggle %1$s sublist" : "Commuta la subllista de %1$s", - "Toggle grid view" : "Canvia la vista de quadrícula", + "Toggle %1$s sublist" : "Canvia la subllista de %1$s", + "Toggle grid view" : "Canvia la visualització de quadrícula", "Upload some content or sync with your devices!" : "Pugeu contingut o sincronitzeu els vostres dispositius!", "No entries found in this folder" : "No s'ha trobat cap entrada en aquesta carpeta", "Upload too large" : "La pujada és massa gran", @@ -234,6 +256,7 @@ OC.L10N.register( "%s used" : "%s en ús", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s en ús", - "Deleted files" : "Fitxers suprimits" + "Deleted files" : "Fitxers suprimits", + "Search for an account" : "Cerqueu un compte" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index ff3a15df102..68f43c7f899 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -4,23 +4,23 @@ "Download" : "Baixa", "Delete" : "Suprimeix", "Tags" : "Etiquetes", - "Show list view" : "Mostra en vista de llista", - "Show grid view" : "Mostra en vista de graella", + "Show list view" : "Mostra la visualització de llista", + "Show grid view" : "Mostra la visualització de graella", "Home" : "Inici", "Close" : "Tanca", "Favorites" : "Preferits", "Could not create folder \"{dir}\"" : "No s'ha pogut crear la carpeta «{dir}»", "This will stop your current uploads." : "Això aturarà les pujades actuals.", "Upload cancelled." : "S'ha cancel·lat la pujada.", - "Processing files …" : "S'estan processant els fitxers …", + "Processing files …" : "S'estan processant els fitxers…", "…" : "…", "Unable to upload {filename} as it is a directory or has 0 bytes" : "No s'ha pogut pujar {filename} perquè és una carpeta o té 0 bytes", - "Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, esteu pujant {size1} però només teniu {size2} lliures", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, esteu pujant {size1}, però només teniu {size2} lliures", "Target folder \"{dir}\" does not exist any more" : "La carpeta de destinació «{dir}» ja no existeix", "Not enough free space" : "No hi ha prou espai lliure", "An unknown error has occurred" : "S'ha produït un error desconegut", "File could not be uploaded" : "No s'ha pogut pujar el fitxer", - "Uploading …" : "S'està pujant …", + "Uploading …" : "S'està pujant…", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})", "Uploading that item is not supported" : "No s'admet la pujada aquest element", "Target folder does not exist any more" : "La carpeta de destinació ja no existeix", @@ -31,7 +31,7 @@ "Move" : "Mou", "Copy" : "Copia", "Choose target folder" : "Trieu la carpeta de destinació", - "Edit locally" : "Edició local", + "Edit locally" : "Edita localment", "Open" : "Obre", "Delete file" : "Suprimeix el fitxer", "Delete folder" : "Suprimeix la carpeta", @@ -47,7 +47,7 @@ "Pending" : "Pendent", "Unable to determine date" : "No s'ha pogut determinar la data", "This operation is forbidden" : "Aquesta operació no està permesa", - "This directory is unavailable, please check the logs or contact the administrator" : "Aquest directori no està disponible. Consulteu els registres o contacteu amb l'administrador", + "This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Consulteu els registres o contacteu amb l'administrador", "Storage is temporarily not available" : "L'emmagatzematge no està disponible temporalment", "Could not move \"{file}\", target exists" : "No s'ha pogut desplaçar «{file}», el fitxer de destinació ja existeix", "Could not move \"{file}\"" : "No s'ha pogut desplaçar «{file}»", @@ -77,7 +77,7 @@ "_including %n hidden_::_including %n hidden_" : ["incloent-hi %n element ocult","incloent-hi %n elements ocults"], "You do not have permission to upload or create files here" : "No teniu permís per a pujar o crear fitxers aquí", "_Uploading %n file_::_Uploading %n files_" : ["S'està pujant %n fitxer","S'estan pujant %n fitxers"], - "New file/folder menu" : "Nou menú fitxer/carpeta", + "New file/folder menu" : "Menú de fitxer o carpeta nova", "Select file range" : "Selecciona un interval de fitxers", "{used}%" : "{used}%", "{used} of {quota} used" : "{used} de {quota} en ús", @@ -95,19 +95,21 @@ "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "L'emmagatzematge extern «{mountPoint}» està gairebé ple ({usedSpacePercent}%).", "Your storage is almost full ({usedSpacePercent}%)." : "L'emmagatzematge està gairebé ple ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["coincideix amb «{filter}»","coincideixen amb «{filter}»"], - "View in folder" : "Visualitza-ho a la carpeta", - "Direct link was copied (only works for users who have access to this file/folder)" : "S'ha copiat l'enllaç directe (només funciona per als usuaris que tenen accés a aquest fitxer/carpeta)", - "Path" : "Ruta", + "View in folder" : "Visualitza-ho en la carpeta", + "Direct link was copied (only works for users who have access to this file/folder)" : "S'ha copiat l'enllaç directe (només funciona per als usuaris que tenen accés a aquest fitxer o carpeta)", + "Path" : "Camí", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Favorited" : "S'ha afegit als preferits", - "Favorite" : "Preferits", + "Favorited" : "En els preferits", + "Favorite" : "En els preferits", "Copy direct link (only works for users who have access to this file/folder)" : "Copia l'enllaç directe (només funciona per als usuaris que tinguin accés a aquest fitxer o carpeta)", "You can only favorite a single file or folder at a time" : "Només podeu afegir als preferits un fitxer o carpeta alhora", - "New folder" : "Crea una carpeta", - "Create new folder" : "Crea una nova carpeta", + "New folder" : "Carpeta nova", + "Create new folder" : "Crea una carpeta", "Upload file" : "Puja un fitxer", "Recent" : "Recents", - "Not favorited" : "S'ha suprimit dels preferits", + "This file has the tag {tag}" : "Aquest fitxer té l'etiqueta {tag}", + "This file has the tags {firstTags} and {lastTag}" : "Aquest fitxer té les etiquetes {firstTags} i {lastTag}", + "Not favorited" : "No s'inclou en els preferits", "Remove from favorites" : "Suprimeix dels preferits", "Add to favorites" : "Afegeix als preferits", "An error occurred while trying to update the tags" : "S'ha produït un error en intentar actualitzar les etiquetes", @@ -115,27 +117,27 @@ "Removed from favorites" : "S'ha suprimit dels preferits", "You added {file} to your favorites" : "Heu afegit {file} als preferits", "You removed {file} from your favorites" : "Heu suprimit {file} dels preferits", - "File changes" : "Canvis al fitxer", - "Created by {user}" : "Creat per {user}", - "Changed by {user}" : "Modificat per {user}", - "Deleted by {user}" : "Suprimit per {user}", - "Restored by {user}" : "Restaurat per {user}", - "Renamed by {user}" : "Canvi de nom per {user}", - "Moved by {user}" : "Desplaçat per {user}", + "File changes" : "Canvis del fitxer", + "Created by {user}" : "{user} l'ha creat", + "Changed by {user}" : "{user} l'ha modificat", + "Deleted by {user}" : "{user} l'ha suprimit", + "Restored by {user}" : "{user} l'ha restaurat", + "Renamed by {user}" : "{user} n'ha canviat el nom", + "Moved by {user}" : "{user} l'ha desplaçat", "\"remote user\"" : "«usuari remot»", "You created {file}" : "Heu creat {file}", - "You created an encrypted file in {file}" : "Heu creat un fitxer xifrat a {file}", + "You created an encrypted file in {file}" : "Heu creat el fitxer xifrat {file}", "{user} created {file}" : "{user} ha creat {file}", - "{user} created an encrypted file in {file}" : "{user} ha creat un fitxer xifrat a {file}", + "{user} created an encrypted file in {file}" : "{user} ha creat el fitxer xifrat {file}", "{file} was created in a public folder" : "S'ha creat {file} en una carpeta pública", "You changed {file}" : "Heu modificat {file}", - "You changed an encrypted file in {file}" : "Heu modificat un fitxer xifrat a {file}", + "You changed an encrypted file in {file}" : "Heu modificat el fitxer xifrat {file}", "{user} changed {file}" : "{user} ha modificat {file}", - "{user} changed an encrypted file in {file}" : "{user} ha modificat un fitxer xifrat a {file}", + "{user} changed an encrypted file in {file}" : "{user} ha modificat el fitxer xifrat {file}", "You deleted {file}" : "Heu suprimit {file}", - "You deleted an encrypted file in {file}" : "Heu suprimit un fitxer xifrat a {file}", + "You deleted an encrypted file in {file}" : "Heu suprimit el fitxer xifrat {file}", "{user} deleted {file}" : "{user} ha suprimit {file}", - "{user} deleted an encrypted file in {file}" : "{user} ha suprimit un fitxer xifrat a {file}", + "{user} deleted an encrypted file in {file}" : "{user} ha suprimit el fitxer xifrat {file}", "You restored {file}" : "Heu restaurat {file}", "{user} restored {file}" : "{user} ha restaurat {file}", "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Heu canviat el nom de {oldfile} (ocult) a {newfile} (ocult)", @@ -165,38 +167,56 @@ "The ownership transfer of {path} from {user} has completed." : "S'ha completat la transferència de propietat de {path} de {user}.", "in %s" : "%s", "File Management" : "Gestió de fitxers", + "Reload current directory" : "Torna a carregar la carpeta actual", + "Go to the \"{dir}\" directory" : "Ves a la carpeta «{dir}»", + "Select the row for {displayName}" : "Selecciona la fila per a {displayName}", + "Open folder {name}" : "Obre la carpeta {name}", + "Download file {name}" : "Baixa el fitxer {name}", + "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament", + "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»", + "Total rows summary" : "Resum de totes les files", "Select all" : "Selecciona-ho tot", + "Unselect all" : "Anul·la tota la selecció", + "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements", + "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament", + "ascending" : "ascendent", + "descending" : "descendent", + "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.", "Storage informations" : "Informació d'emmagatzematge", - "{usedQuotaByte} used" : "{usedQuotaByte} utilitzat", - "{relative}% used" : "{relative}% used", + "{usedQuotaByte} used" : "{usedQuotaByte} en ús", + "{relative}% used" : "{relative}% en ús", "Could not refresh storage stats" : "No s'han pogut actualitzar les estadístiques d'emmagatzematge", - "Transfer ownership of a file or folder" : "Transferiu la propietat d'un fitxer o carpeta", - "Choose file or folder to transfer" : "Tria el fitxer o carpeta que s'ha de transferir", + "Transfer ownership of a file or folder" : "Transferència de la propietat d'un fitxer o carpeta", + "Choose file or folder to transfer" : "Tria el fitxer o carpeta que voleu transferir", "Change" : "Canvia", "New owner" : "Propietari nou", - "Choose a file or folder to transfer" : "Trieu el fitxer o carpeta que vulgueu transferir", + "Choose a file or folder to transfer" : "Trieu el fitxer o carpeta que voleu transferir", "Transfer" : "Transfereix", "Transfer {path} to {userid}" : "Transfereix {path} a {userid}", "Invalid path selected" : "El camí seleccionat no és vàlid", "Unknown error" : "Error desconegut", "Ownership transfer request sent" : "S'ha enviat la sol·licitud de transferència de propietat", "Cannot transfer ownership of a file or folder you do not own" : "No es pot transferir la propietat d'un fitxer o carpeta que no és vostre", - "Select file or folder to link to" : "Seleccioneu el fitxer o la carpeta per enllaçar", - "No files in here" : "No hi ha fitxers aquí", - "Go back" : "Torna enrere", - "Open the files app settings" : "Obriu la configuració de l'aplicació de fitxers", + "Select file or folder to link to" : "Seleccioneu el fitxer o la carpeta que voleu enllaçar", + "Loading current folder" : "S'està carregant la carpeta actual", + "No files in here" : "No hi ha cap fitxer aquí", + "No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta", + "Go to the previous folder" : "Torna a la carpeta anterior", + "Go back" : "Torna", + "Open the files app settings" : "Obriu els paràmetres de l'aplicació Fitxers", "Files settings" : "Paràmetres dels fitxers", "File cannot be accessed" : "No es pot accedir al fitxer", - "You might not have have permissions to view it, ask the sender to share it" : "És possible que no tingueu permisos per veure'l, demaneu al remitent que el comparteixi", + "You might not have have permissions to view it, ask the sender to share it" : "És possible que no tingueu permisos per a visualitzar-lo; demaneu al remitent que el comparteixi", "Show hidden files" : "Mostra els fitxers ocults", "Crop image previews" : "Retalla les previsualitzacions de les imatges", "Additional settings" : "Paràmetres addicionals", "WebDAV" : "WebDAV", "Copy to clipboard" : "Copia-ho al porta-retalls", "Use this address to access your Files via WebDAV" : "Utilitzeu aquesta adreça per a accedir als vostres fitxers mitjançant WebDAV", - "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si has habilitat l'autenticació en dos factors 2FA, crea i utilitza una nova contrasenya d'aplicació clicant aquí", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si heu habilitat l'autenticació de doble factor, podeu crear i utilitzar una nova contrasenya d'aplicació fent clic aquí.", "Clipboard is not available" : "El porta-retalls no està disponible", - "WebDAV URL copied to clipboard" : "URL de WebDAV copiat al porta-retalls", + "WebDAV URL copied to clipboard" : "S'ha copiat l'URL de WebDAV al porta-retalls", "Unable to change the favourite state of the file" : "No s'ha pogut canviar l'estat de preferit del fitxer", "Error while loading the file data" : "S'ha produït un error en carregar la informació del fitxer", "Pick a template for {name}" : "Trieu una plantilla per a {name}", @@ -205,12 +225,14 @@ "Creating file" : "S'està creant el fitxer", "Blank" : "En blanc", "Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla", - "Delete permanently" : "Esborrar permanentment", + "Delete permanently" : "Suprimeix permanentment", + "Open folder {displayName}" : "Obre la carpeta {displayName}", "Set up templates folder" : "Configura la carpeta de plantilles", "Templates" : "Plantilles", + "Create new templates folder" : "Crea la carpeta de plantilles", "Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles", - "Toggle %1$s sublist" : "Commuta la subllista de %1$s", - "Toggle grid view" : "Canvia la vista de quadrícula", + "Toggle %1$s sublist" : "Canvia la subllista de %1$s", + "Toggle grid view" : "Canvia la visualització de quadrícula", "Upload some content or sync with your devices!" : "Pugeu contingut o sincronitzeu els vostres dispositius!", "No entries found in this folder" : "No s'ha trobat cap entrada en aquesta carpeta", "Upload too large" : "La pujada és massa gran", @@ -232,6 +254,7 @@ "%s used" : "%s en ús", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s en ús", - "Deleted files" : "Fitxers suprimits" + "Deleted files" : "Fitxers suprimits", + "Search for an account" : "Cerqueu un compte" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index f6f613325c0..920f61d8fcd 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -178,7 +178,7 @@ OC.L10N.register( "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló", "Total rows summary" : "Resumen de filas totales", "Select all" : "Seleccionar todo", - "Unselect all" : "Deseleccionar todos", + "Unselect all" : "Desmarrcar todos", "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos", "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente", "ascending" : "ascendente", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 42f23162712..962d1301a6e 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -176,7 +176,7 @@ "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló", "Total rows summary" : "Resumen de filas totales", "Select all" : "Seleccionar todo", - "Unselect all" : "Deseleccionar todos", + "Unselect all" : "Desmarrcar todos", "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos", "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente", "ascending" : "ascendente", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index fb003916917..67f9e5a5977 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -209,7 +209,7 @@ OC.L10N.register( "Open the files app settings" : "Abre a configuración da aplicación de ficheiros", "Files settings" : "Axustes de ficheiros", "File cannot be accessed" : "Non se pode acceder ao ficheiro", - "You might not have have permissions to view it, ask the sender to share it" : "É posible que non teñas permisos para velo, pídelle ao remitente que o comparta", + "You might not have have permissions to view it, ask the sender to share it" : "É posíbel que non teña permisos para velo, pídalle ao remitente que o comparta", "Show hidden files" : "Amosar os ficheiros agochados", "Crop image previews" : "Recortar a vista previa das imaxes", "Additional settings" : "Axustes adicionais", @@ -217,7 +217,7 @@ OC.L10N.register( "Copy to clipboard" : "Copiar no portapapeis.", "Use this address to access your Files via WebDAV" : "Empregue este enderezo para acceder ao seu Ficheiros mediante WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Se activaches 2FA, debes crear e utilizar un novo contrasinal da aplicación facendo clic aquí.", - "Clipboard is not available" : "O portapapeis non está dispoñible", + "Clipboard is not available" : "O portapapeis non está dispoñíbel", "WebDAV URL copied to clipboard" : "A URL de WebDAV copiouse no portapapeis", "Unable to change the favourite state of the file" : "Non é posíbel cambiar o estado favorito do ficheiro", "Error while loading the file data" : "Produciuse un erro ao cargar os datos do ficheiro", @@ -228,6 +228,7 @@ OC.L10N.register( "Blank" : "Baleiro", "Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo", "Delete permanently" : "Eliminar de xeito permanente", + "Open folder {displayName}" : "Abrir o cartafol {displayName}", "Set up templates folder" : "Estabelecer un cartafol de modelos", "Templates" : "Modelos", "Create new templates folder" : "Crear un novo cartafol de modelos", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index c5d956586e6..aa1473c0071 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -207,7 +207,7 @@ "Open the files app settings" : "Abre a configuración da aplicación de ficheiros", "Files settings" : "Axustes de ficheiros", "File cannot be accessed" : "Non se pode acceder ao ficheiro", - "You might not have have permissions to view it, ask the sender to share it" : "É posible que non teñas permisos para velo, pídelle ao remitente que o comparta", + "You might not have have permissions to view it, ask the sender to share it" : "É posíbel que non teña permisos para velo, pídalle ao remitente que o comparta", "Show hidden files" : "Amosar os ficheiros agochados", "Crop image previews" : "Recortar a vista previa das imaxes", "Additional settings" : "Axustes adicionais", @@ -215,7 +215,7 @@ "Copy to clipboard" : "Copiar no portapapeis.", "Use this address to access your Files via WebDAV" : "Empregue este enderezo para acceder ao seu Ficheiros mediante WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Se activaches 2FA, debes crear e utilizar un novo contrasinal da aplicación facendo clic aquí.", - "Clipboard is not available" : "O portapapeis non está dispoñible", + "Clipboard is not available" : "O portapapeis non está dispoñíbel", "WebDAV URL copied to clipboard" : "A URL de WebDAV copiouse no portapapeis", "Unable to change the favourite state of the file" : "Non é posíbel cambiar o estado favorito do ficheiro", "Error while loading the file data" : "Produciuse un erro ao cargar os datos do ficheiro", @@ -226,6 +226,7 @@ "Blank" : "Baleiro", "Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo", "Delete permanently" : "Eliminar de xeito permanente", + "Open folder {displayName}" : "Abrir o cartafol {displayName}", "Set up templates folder" : "Estabelecer un cartafol de modelos", "Templates" : "Modelos", "Create new templates folder" : "Crear un novo cartafol de modelos", diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js index c22ada18ccb..fec4708c5da 100644 --- a/apps/files/l10n/hu.js +++ b/apps/files/l10n/hu.js @@ -109,6 +109,8 @@ OC.L10N.register( "Create new folder" : "Új mappa létrehozása", "Upload file" : "Fájl feltöltése", "Recent" : "Legutóbbi", + "This file has the tag {tag}" : "Ennek a fájlnak ez a címkéje: {tag}", + "This file has the tags {firstTags} and {lastTag}" : "Ennek a fájlnak ezek a címkéi: {firstTags} és {lastTag}", "Not favorited" : "Nincs a kedvencek között", "Remove from favorites" : "Eltávolítás a kedvencekből", "Add to favorites" : "Hozzáadás a kedvencekhez", @@ -226,8 +228,10 @@ OC.L10N.register( "Blank" : "Üres", "Unable to create new file from template" : "Nem lehet új fájlt létrehozni a sablonból", "Delete permanently" : "Végleges törlés", + "Open folder {displayName}" : "A(z) {displayName} mappa megnyitása", "Set up templates folder" : "Személyes sablonmappa beállítása", "Templates" : "Sablonok", + "Create new templates folder" : "Új sablonmappa létrehozása", "Unable to initialize the templates directory" : "A sablonkönyvtár előkészítése sikertelen", "Toggle %1$s sublist" : "%1$s allista be/ki", "Toggle grid view" : "Rácsnézet be/ki", @@ -252,6 +256,7 @@ OC.L10N.register( "%s used" : "%s használt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s felhasználva", - "Deleted files" : "Törölt fájlok" + "Deleted files" : "Törölt fájlok", + "Search for an account" : "Fiók keresése" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json index dff88c355af..78cdb466c22 100644 --- a/apps/files/l10n/hu.json +++ b/apps/files/l10n/hu.json @@ -107,6 +107,8 @@ "Create new folder" : "Új mappa létrehozása", "Upload file" : "Fájl feltöltése", "Recent" : "Legutóbbi", + "This file has the tag {tag}" : "Ennek a fájlnak ez a címkéje: {tag}", + "This file has the tags {firstTags} and {lastTag}" : "Ennek a fájlnak ezek a címkéi: {firstTags} és {lastTag}", "Not favorited" : "Nincs a kedvencek között", "Remove from favorites" : "Eltávolítás a kedvencekből", "Add to favorites" : "Hozzáadás a kedvencekhez", @@ -224,8 +226,10 @@ "Blank" : "Üres", "Unable to create new file from template" : "Nem lehet új fájlt létrehozni a sablonból", "Delete permanently" : "Végleges törlés", + "Open folder {displayName}" : "A(z) {displayName} mappa megnyitása", "Set up templates folder" : "Személyes sablonmappa beállítása", "Templates" : "Sablonok", + "Create new templates folder" : "Új sablonmappa létrehozása", "Unable to initialize the templates directory" : "A sablonkönyvtár előkészítése sikertelen", "Toggle %1$s sublist" : "%1$s allista be/ki", "Toggle grid view" : "Rácsnézet be/ki", @@ -250,6 +254,7 @@ "%s used" : "%s használt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s felhasználva", - "Deleted files" : "Törölt fájlok" + "Deleted files" : "Törölt fájlok", + "Search for an account" : "Fiók keresése" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index f2fbde8c02a..e02391603d8 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -248,7 +248,7 @@ OC.L10N.register( "Deleted shares" : "Compartilhamentos apagados", "Pending shares" : "Compartilhamentos pendentes", "Text file" : "Arquivo texto", - "New text file.txt" : "Novo arquivo.txt", + "New text file.txt" : "Novo arquivo de texto arquivo.txt", "Storage invalid" : "Armazenamento inválido", "Unlimited" : "Ilimitado", "Search users" : "Procurar usuários", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 8728d86d558..60cc7c14230 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -246,7 +246,7 @@ "Deleted shares" : "Compartilhamentos apagados", "Pending shares" : "Compartilhamentos pendentes", "Text file" : "Arquivo texto", - "New text file.txt" : "Novo arquivo.txt", + "New text file.txt" : "Novo arquivo de texto arquivo.txt", "Storage invalid" : "Armazenamento inválido", "Unlimited" : "Ilimitado", "Search users" : "Procurar usuários", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index e138a2b6f9b..3205d89b082 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -184,6 +184,7 @@ OC.L10N.register( "ascending" : "naraščajoče", "descending" : "padajoče", "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.", "Storage informations" : "Podrobnosti shrambe", "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", "{relative}% used" : "Zasedeno {relative} %", @@ -215,6 +216,7 @@ OC.L10N.register( "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopiraj v odložišče", "Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Če je omogočen sistem dvostopenjskega overjanja 2FA, je treba ustvariti in uporabiti novo geslo programa s klikom na to mesto.", "Clipboard is not available" : "Odložišče ni na voljo", "WebDAV URL copied to clipboard" : "Naslov URL WebDAV je kopiran v odložišče", "Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index 725d6b10864..b53ccdca2b4 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -182,6 +182,7 @@ "ascending" : "naraščajoče", "descending" : "padajoče", "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.", "Storage informations" : "Podrobnosti shrambe", "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", "{relative}% used" : "Zasedeno {relative} %", @@ -213,6 +214,7 @@ "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopiraj v odložišče", "Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Če je omogočen sistem dvostopenjskega overjanja 2FA, je treba ustvariti in uporabiti novo geslo programa s klikom na to mesto.", "Clipboard is not available" : "Odložišče ni na voljo", "WebDAV URL copied to clipboard" : "Naslov URL WebDAV je kopiran v odložišče", "Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index bf140acf5e3..6016fea7aa5 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -101,8 +101,8 @@ OC.L10N.register( "Direct link was copied (only works for users who have access to this file/folder)" : "Пряме посилання скопійовано (застосовується у разі, якщо користувач має доступ до ресурсу)", "Path" : "Шлях", "_%n byte_::_%n bytes_" : ["%n байт","%n байти","%n байт","%n байт(ів)"], - "Favorited" : "Вподобано", - "Favorite" : "Вподобати", + "Favorited" : "Із зірочкою", + "Favorite" : "Додати зірочку", "Copy direct link (only works for users who have access to this file/folder)" : "Копіювати пряме посилання (користувачі мають мати доступ до цього файлу чи каталогу)", "You can only favorite a single file or folder at a time" : "Одночасно можна вподобати лише один файл або каталог", "New folder" : "Новий каталог", @@ -112,13 +112,13 @@ OC.L10N.register( "This file has the tag {tag}" : "Цей файл має тег {tag}", "This file has the tags {firstTags} and {lastTag}" : "Цей файл має теги {firstTags} та {lastTag}", "Not favorited" : "Без зірочки", - "Remove from favorites" : "Прибрати з вподобаного", - "Add to favorites" : "Вподобати", + "Remove from favorites" : "Прибрати зірочку", + "Add to favorites" : "Додати зірочку", "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "Added to favorites" : "Вподобано", - "Removed from favorites" : "Вилучено із вподобаного", - "You added {file} to your favorites" : "Ви вподобали {file}", - "You removed {file} from your favorites" : "Ви вилучили {file} із вподобаного", + "Removed from favorites" : "Вилучено зірочку", + "You added {file} to your favorites" : "Ви додали зірочку для {file}", + "You removed {file} from your favorites" : "Ви прибрали зірочку для {file}", "File changes" : "Зміни у файлах", "Created by {user}" : "Створено користувачем {user}", "Changed by {user}" : "Змінено користувачем {user}", @@ -211,15 +211,15 @@ OC.L10N.register( "File cannot be accessed" : "Неможливо отримати доступ до файлу", "You might not have have permissions to view it, ask the sender to share it" : "Ймовірно у вас відсутні права на перегляд. Попросіть відправника поділитися доступом.", "Show hidden files" : "Показувати приховані файли", - "Crop image previews" : "Кадрування попереднього перегляду зображень", - "Additional settings" : "Додаткові налаштування", + "Crop image previews" : "Попередній перегляд перед кадруванням", + "Additional settings" : "Додаткові", "WebDAV" : "WebDAV", "Copy to clipboard" : "Копіювати до буферу обміну", "Use this address to access your Files via WebDAV" : "Адреса для доступу до файлів за допомогою протоколу WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Якщо увімкнено двофакторної авторизацію, вам потрібно створити та використовувати окремий пароль на застосунок. Для цього клацніть тут.", "Clipboard is not available" : "Буфер обміну недоступний", "WebDAV URL copied to clipboard" : "Послиання WebDAV скопійовано до буферу обміну", - "Unable to change the favourite state of the file" : "Неможливо змінити стан \"вподобано\" для цього файла", + "Unable to change the favourite state of the file" : "Неможливо змінити стан \"зірочка\" для цього файла", "Error while loading the file data" : "Помилка під час завантаження даних про файл", "Pick a template for {name}" : "Вибрати шаблон для {name}", "Create" : "Створити", diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index ef10da2f478..9747ed1d763 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -99,8 +99,8 @@ "Direct link was copied (only works for users who have access to this file/folder)" : "Пряме посилання скопійовано (застосовується у разі, якщо користувач має доступ до ресурсу)", "Path" : "Шлях", "_%n byte_::_%n bytes_" : ["%n байт","%n байти","%n байт","%n байт(ів)"], - "Favorited" : "Вподобано", - "Favorite" : "Вподобати", + "Favorited" : "Із зірочкою", + "Favorite" : "Додати зірочку", "Copy direct link (only works for users who have access to this file/folder)" : "Копіювати пряме посилання (користувачі мають мати доступ до цього файлу чи каталогу)", "You can only favorite a single file or folder at a time" : "Одночасно можна вподобати лише один файл або каталог", "New folder" : "Новий каталог", @@ -110,13 +110,13 @@ "This file has the tag {tag}" : "Цей файл має тег {tag}", "This file has the tags {firstTags} and {lastTag}" : "Цей файл має теги {firstTags} та {lastTag}", "Not favorited" : "Без зірочки", - "Remove from favorites" : "Прибрати з вподобаного", - "Add to favorites" : "Вподобати", + "Remove from favorites" : "Прибрати зірочку", + "Add to favorites" : "Додати зірочку", "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "Added to favorites" : "Вподобано", - "Removed from favorites" : "Вилучено із вподобаного", - "You added {file} to your favorites" : "Ви вподобали {file}", - "You removed {file} from your favorites" : "Ви вилучили {file} із вподобаного", + "Removed from favorites" : "Вилучено зірочку", + "You added {file} to your favorites" : "Ви додали зірочку для {file}", + "You removed {file} from your favorites" : "Ви прибрали зірочку для {file}", "File changes" : "Зміни у файлах", "Created by {user}" : "Створено користувачем {user}", "Changed by {user}" : "Змінено користувачем {user}", @@ -209,15 +209,15 @@ "File cannot be accessed" : "Неможливо отримати доступ до файлу", "You might not have have permissions to view it, ask the sender to share it" : "Ймовірно у вас відсутні права на перегляд. Попросіть відправника поділитися доступом.", "Show hidden files" : "Показувати приховані файли", - "Crop image previews" : "Кадрування попереднього перегляду зображень", - "Additional settings" : "Додаткові налаштування", + "Crop image previews" : "Попередній перегляд перед кадруванням", + "Additional settings" : "Додаткові", "WebDAV" : "WebDAV", "Copy to clipboard" : "Копіювати до буферу обміну", "Use this address to access your Files via WebDAV" : "Адреса для доступу до файлів за допомогою протоколу WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Якщо увімкнено двофакторної авторизацію, вам потрібно створити та використовувати окремий пароль на застосунок. Для цього клацніть тут.", "Clipboard is not available" : "Буфер обміну недоступний", "WebDAV URL copied to clipboard" : "Послиання WebDAV скопійовано до буферу обміну", - "Unable to change the favourite state of the file" : "Неможливо змінити стан \"вподобано\" для цього файла", + "Unable to change the favourite state of the file" : "Неможливо змінити стан \"зірочка\" для цього файла", "Error while loading the file data" : "Помилка під час завантаження даних про файл", "Pick a template for {name}" : "Вибрати шаблон для {name}", "Create" : "Створити", diff --git a/apps/files/lib/Command/Object/Delete.php b/apps/files/lib/Command/Object/Delete.php new file mode 100644 index 00000000000..9742778e271 --- /dev/null +++ b/apps/files/lib/Command/Object/Delete.php @@ -0,0 +1,78 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Command\Object; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class Delete extends Command { + private ObjectUtil $objectUtils; + + public function __construct(ObjectUtil $objectUtils) { + $this->objectUtils = $objectUtils; + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('files:object:delete') + ->setDescription('Delete an object from the object store') + ->addArgument('object', InputArgument::REQUIRED, "Object to delete") + ->addOption('bucket', 'b', InputOption::VALUE_REQUIRED, "Bucket to delete the object from, only required in cases where it can't be determined from the config"); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $object = $input->getArgument('object'); + $objectStore = $this->objectUtils->getObjectStore($input->getOption("bucket"), $output); + if (!$objectStore) { + return -1; + } + + if ($fileId = $this->objectUtils->objectExistsInDb($object)) { + $output->writeln("<error>Warning, object $object belongs to an existing file, deleting the object will lead to unexpected behavior if not replaced</error>"); + $output->writeln(" Note: use <info>occ files:delete $fileId</info> to delete the file cleanly or <info>occ info:file $fileId</info> for more information about the file"); + $output->writeln(""); + } + + if (!$objectStore->objectExists($object)) { + $output->writeln("<error>Object $object does not exist</error>"); + return -1; + } + + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $question = new ConfirmationQuestion("Delete $object? [y/N] ", false); + if ($helper->ask($input, $output, $question)) { + $objectStore->deleteObject($object); + } + return 0; + } +} diff --git a/apps/files/lib/Command/Object/Get.php b/apps/files/lib/Command/Object/Get.php new file mode 100644 index 00000000000..c07a64b20e2 --- /dev/null +++ b/apps/files/lib/Command/Object/Get.php @@ -0,0 +1,80 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Command\Object; + +use OCP\Files\File; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class Get extends Command { + private ObjectUtil $objectUtils; + + public function __construct(ObjectUtil $objectUtils) { + $this->objectUtils = $objectUtils; + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('files:object:get') + ->setDescription('Get the contents of an object') + ->addArgument('object', InputArgument::REQUIRED, "Object to get") + ->addArgument('output', InputArgument::REQUIRED, "Target local file to output to, use - for STDOUT") + ->addOption('bucket', 'b', InputOption::VALUE_REQUIRED, "Bucket to get the object from, only required in cases where it can't be determined from the config"); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $object = $input->getArgument('object'); + $outputName = $input->getArgument('output'); + $objectStore = $this->objectUtils->getObjectStore($input->getOption("bucket"), $output); + if (!$objectStore) { + return 1; + } + + if (!$objectStore->objectExists($object)) { + $output->writeln("<error>Object $object does not exist</error>"); + return 1; + } else { + try { + $source = $objectStore->readObject($object); + } catch (\Exception $e) { + $msg = $e->getMessage(); + $output->writeln("<error>Failed to read $object from object store: $msg</error>"); + return 1; + } + $target = $outputName === '-' ? STDOUT : fopen($outputName, 'w'); + if (!$target) { + $output->writeln("<error>Failed to open $outputName for writing</error>"); + return 1; + } + + stream_copy_to_stream($source, $target); + return 0; + } + } + +} diff --git a/apps/files/lib/Command/Object/ObjectUtil.php b/apps/files/lib/Command/Object/ObjectUtil.php new file mode 100644 index 00000000000..b7359dfa193 --- /dev/null +++ b/apps/files/lib/Command/Object/ObjectUtil.php @@ -0,0 +1,110 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Command\Object; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Files\ObjectStore\IObjectStore; +use OCP\IConfig; +use OCP\IDBConnection; +use Symfony\Component\Console\Output\OutputInterface; + +class ObjectUtil { + private IConfig $config; + private IDBConnection $connection; + + public function __construct(IConfig $config, IDBConnection $connection) { + $this->config = $config; + $this->connection = $connection; + } + + private function getObjectStoreConfig(): ?array { + $config = $this->config->getSystemValue('objectstore_multibucket'); + if (is_array($config)) { + $config['multibucket'] = true; + return $config; + } + $config = $this->config->getSystemValue('objectstore'); + if (is_array($config)) { + if (!isset($config['multibucket'])) { + $config['multibucket'] = false; + } + return $config; + } else { + return null; + } + } + + public function getObjectStore(?string $bucket, OutputInterface $output): ?IObjectStore { + $config = $this->getObjectStoreConfig(); + if (!$config) { + $output->writeln("<error>Instance is not using primary object store</error>"); + return null; + } + if ($config['multibucket'] && !$bucket) { + $output->writeln("<error>--bucket option required</error> because <info>multi bucket</info> is enabled."); + return null; + } + + if (!isset($config['arguments'])) { + throw new \Exception("no arguments configured for object store configuration"); + } + if (!isset($config['class'])) { + throw new \Exception("no class configured for object store configuration"); + } + + if ($bucket) { + // s3, swift + $config['arguments']['bucket'] = $bucket; + // azure + $config['arguments']['container'] = $bucket; + } + + $store = new $config['class']($config['arguments']); + if (!$store instanceof IObjectStore) { + throw new \Exception("configured object store class is not an object store implementation"); + } + return $store; + } + + /** + * Check if an object is referenced in the database + */ + public function objectExistsInDb(string $object): int|false { + if (str_starts_with($object, 'urn:oid:')) { + $fileId = (int)substr($object, strlen('urn:oid:')); + $query = $this->connection->getQueryBuilder(); + $query->select('fileid') + ->from('filecache') + ->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT))); + $result = $query->executeQuery(); + if ($result->fetchOne() !== false) { + return $fileId; + } else { + return false; + } + } else { + return false; + } + } +} diff --git a/apps/files/lib/Command/Object/Put.php b/apps/files/lib/Command/Object/Put.php new file mode 100644 index 00000000000..dabc2b1ffc3 --- /dev/null +++ b/apps/files/lib/Command/Object/Put.php @@ -0,0 +1,84 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Command\Object; + +use OCP\Files\IMimeTypeDetector; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class Put extends Command { + private ObjectUtil $objectUtils; + private IMimeTypeDetector $mimeTypeDetector; + + public function __construct(ObjectUtil $objectUtils, IMimeTypeDetector $mimeTypeDetector) { + $this->objectUtils = $objectUtils; + $this->mimeTypeDetector = $mimeTypeDetector; + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('files:object:put') + ->setDescription('Write a file to the object store') + ->addArgument('input', InputArgument::REQUIRED, "Source local path, use - to read from STDIN") + ->addArgument('object', InputArgument::REQUIRED, "Object to write") + ->addOption('bucket', 'b', InputOption::VALUE_REQUIRED, "Bucket where to store the object, only required in cases where it can't be determined from the config");; + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $object = $input->getArgument('object'); + $inputName = (string)$input->getArgument('input'); + $objectStore = $this->objectUtils->getObjectStore($input->getOption("bucket"), $output); + if (!$objectStore) { + return -1; + } + + if ($fileId = $this->objectUtils->objectExistsInDb($object)) { + $output->writeln("<error>Warning, object $object belongs to an existing file, overwriting the object contents can lead to unexpected behavior.</error>"); + $output->writeln("You can use <info>occ files:put $inputName $fileId</info> to write to the file safely."); + $output->writeln(""); + + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $question = new ConfirmationQuestion("Write to the object anyway? [y/N] ", false); + if (!$helper->ask($input, $output, $question)) { + return -1; + } + } + + $source = $inputName === '-' ? STDIN : fopen($inputName, 'r'); + if (!$source) { + $output->writeln("<error>Failed to open $inputName</error>"); + return 1; + } + $objectStore->writeObject($object, $source, $this->mimeTypeDetector->detectPath($inputName)); + return 0; + } + +} diff --git a/apps/files/src/views/Sidebar.vue b/apps/files/src/views/Sidebar.vue index 9b43570e345..915c8765b6c 100644 --- a/apps/files/src/views/Sidebar.vue +++ b/apps/files/src/views/Sidebar.vue @@ -470,6 +470,7 @@ export default { */ close() { this.Sidebar.file = '' + this.showTags = false this.resetData() }, diff --git a/apps/files_external/l10n/ca.js b/apps/files_external/l10n/ca.js index da2860fffd0..3f2abfc1d36 100644 --- a/apps/files_external/l10n/ca.js +++ b/apps/files_external/l10n/ca.js @@ -5,140 +5,140 @@ OC.L10N.register( "Personal" : "Personal", "System" : "Sistema", "Grant access" : "Concedeix accés", - "Error configuring OAuth1" : "S'ha produït un error en configurar OAuth1", - "Please provide a valid app key and secret." : "Si us plau, proporcioneu una clau d’aplicació vàlida i secreta.", - "Error configuring OAuth2" : "S'ha produït un error en configurar OAuth2", + "Error configuring OAuth1" : "S'ha produït un error en configurar l'OAuth1", + "Please provide a valid app key and secret." : "Proporcioneu una clau d'aplicació i un secret vàlids.", + "Error configuring OAuth2" : "S'ha produït un error en configurar l'OAuth2", "Generate keys" : "Genera les claus", - "Error generating key pair" : "Error en generar el parell de claus", - "Type to select user or group." : "Escriviu per seleccionar usuari o grup.", - "(Group)" : "(Grup)", + "Error generating key pair" : "S'ha produït un error en generar el parell de claus", + "Type to select user or group." : "Escriviu per a seleccionar un usuari o grup.", + "(Group)" : "(grup)", "Compatibility with Mac NFD encoding (slow)" : "Compatibilitat amb la codificació de Mac NFD (lent)", "Enable encryption" : "Habilita el xifratge", - "Enable previews" : "Habilita les vistes prèvies", - "Enable sharing" : "Habilita la compartició", + "Enable previews" : "Habilita les previsualitzacions", + "Enable sharing" : "Habilita l'ús compartit", "Check for changes" : "Comprova si hi ha canvis", "Never" : "Mai", - "Once every direct access" : "Un cop cada accés directe", + "Once every direct access" : "Una vegada cada accés directe", "Read only" : "Només lectura", "Disconnect" : "Desconnecta", - "Admin defined" : "Administrador definit", - "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "La comprovació automàtica de l'estat està inhabilitada a causa del gran nombre d'emmagatzematges configurats, feu clic per comprovar l'estat", - "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Segur que voleu desconnectar aquest mitjà extern? Això farà que l'emmagatzematge no es trobi disponible a Nextcloud i provocarà l'eliminació d'aquests fitxers i carpetes en qualsevol client que s'hi sincronitze, però no eliminarà cap fitxer ni carpeta en el mitjà d'emmagatzematge extern.", - "Delete storage?" : "Suprimeix-ho l'emmagatzematge?", - "Saved" : "Desat", - "Saving …" : "S'està desant …", + "Admin defined" : "S'ha definit l'administrador", + "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "La comprovació automàtica de l'estat està inhabilitada a causa del gran nombre d'emmagatzematges configurats; feu clic per a comprovar l'estat", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Segur que voleu desconnectar aquest emmagatzematge extern? Això farà que l'emmagatzematge no estigui disponible en el Nextcloud i provocarà la supressió d'aquests fitxers i carpetes en qualsevol client que s'hi sincronitzi, però no se suprimirà cap fitxer ni carpeta en l'emmagatzematge extern en si.", + "Delete storage?" : "Voleu suprimir l'emmagatzematge?", + "Saved" : "S'ha desat", + "Saving …" : "S'està desant…", "Save" : "Desa", - "Empty response from the server" : "Resposta buida del servidor", - "Couldn't access. Please log out and in again to activate this mount point" : "No s'ha pogut accedir. Si us plau, tanqueu la sessió i torneu a iniciar-la per activar aquest punt de muntatge", - "Couldn't get the information from the remote server: {code} {type}" : "No s’ha pogut obtenir la informació del servidor remot: {code} {type}", - "Couldn't get the list of external mount points: {type}" : "No s’ha pogut obtenir la llista de punts de muntatge externs: {type}", + "Empty response from the server" : "El servidor ha enviat una resposta buida", + "Couldn't access. Please log out and in again to activate this mount point" : "No s'ha pogut accedir. Tanqueu la sessió i torneu a iniciar-la per a activar aquest punt de muntatge", + "Couldn't get the information from the remote server: {code} {type}" : "No s'ha pogut obtenir la informació del servidor remot: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "No s'ha pogut obtenir la llista de punts de muntatge externs: {type}", "There was an error with message: " : "S'ha produït un error amb el missatge: ", "External mount error" : "Error de muntatge extern", "external-storage" : "emmagatzematge-extern", - "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No s’ha pogut obtenir la llista de punts de muntatge de la unitat de xarxa de Windows: resposta buida del servidor", - "Please enter the credentials for the {mount} mount" : "Si us plau, introduïu les credencials per al muntatge {mount}", + "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No s'ha pogut obtenir la llista de punts de muntatge de la unitat de xarxa del Windows: el servidor ha enviat una resposta buida", + "Please enter the credentials for the {mount} mount" : "Introduïu les credencials per al muntatge {mount}", "Username" : "Nom d'usuari", "Password" : "Contrasenya", - "Credentials saved" : "Credencials desades", - "Credentials saving failed" : "Error en desar les credencials", - "Credentials required" : "Es necessiten credencials", - "Forbidden to manage local mounts" : "Prohibit gestionar volums locals", - "Storage with ID \"%d\" not found" : "No s’ha trobat l’emmagatzematge amb ID \"%d\"", - "Invalid backend or authentication mechanism class" : "Classe de mecanisme d'autenticació o rerefons no vàlids", - "Invalid mount point" : "Punt de muntatge no vàlid", - "Objectstore forbidden" : "Objectstore prohibit", - "Invalid storage backend \"%s\"" : "Rerefons d'emmagatzematge no vàlid \"%s\"", - "Not permitted to use backend \"%s\"" : "No s'ha permès l’ús del rerefons \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "No es permet l’ús del mecanisme d’autenticació \"%s\"", - "Unsatisfied backend parameters" : "Paràmetres del rerefons incomplerts", - "Unsatisfied authentication mechanism parameters" : "Paràmetres del mecanisme d'autenticació incomplerts", + "Credentials saved" : "S'han desat les credencials", + "Credentials saving failed" : "S'ha produït un error en desar les credencials", + "Credentials required" : "Calen credencials", + "Forbidden to manage local mounts" : "Està prohibit gestionar muntatges locals", + "Storage with ID \"%d\" not found" : "No s'ha trobat l'emmagatzematge amb l'ID «%d»", + "Invalid backend or authentication mechanism class" : "La classe de rerefons o de mecanisme d'autenticació no és vàlida", + "Invalid mount point" : "El punt de muntatge no és vàlid", + "Objectstore forbidden" : "ObjectStore prohibit", + "Invalid storage backend \"%s\"" : "El rerefons d'emmagatzematge «%s» no és vàlid", + "Not permitted to use backend \"%s\"" : "No es permet l'ús del rerefons «%s»", + "Not permitted to use authentication mechanism \"%s\"" : "No es permet l'ús del mecanisme d'autenticació «%s»", + "Unsatisfied backend parameters" : "Falten paràmetres del rerefons", + "Unsatisfied authentication mechanism parameters" : "Falten paràmetres del mecanisme d'autenticació", "Insufficient data: %s" : "Dades insuficients: %s", "%s" : "%s", - "Storage with ID \"%d\" is not user editable" : "L’emmagatzematge amb l’ID \"%d\" no és editable per l’usuari", + "Storage with ID \"%d\" is not user editable" : "L'emmagatzematge amb l'ID «%d» no és editable per l'usuari", "Access key" : "Clau d'accés", "Secret key" : "Clau secreta", "Builtin" : "Integrat", "None" : "Cap", "OAuth1" : "OAuth1", - "App key" : "Clau de l'aplicació", + "App key" : "Clau d'aplicació", "App secret" : "Secret d'aplicació", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", + "Client ID" : "ID del client", "Client secret" : "Secret del client", "OpenStack v2" : "OpenStack v2", - "Tenant name" : "Nom del llogater", - "Identity endpoint URL" : "URL del punt final d’identitat", + "Tenant name" : "Nom de l'inquilí", + "Identity endpoint URL" : "URL de l'extrem d'identitat", "OpenStack v3" : "OpenStack v3", "Domain" : "Domini", "Rackspace" : "Rackspace", "API key" : "Clau de l'API", "Global credentials" : "Credencials globals", - "Log-in credentials, save in database" : "Credencials d'inici de sessió, desades a la base de dades", + "Log-in credentials, save in database" : "Credencials d'inici de sessió, desades en la base de dades", "Username and password" : "Nom d'usuari i contrasenya", - "Log-in credentials, save in session" : "Credencials d'inici de sessió, desades a la sessió", - "Global credentials, user entered" : "Credencials globals, l'usuari ha entrat", - "User entered, store in database" : "Usuari introduït, emmagatzemat a la base de dades", + "Log-in credentials, save in session" : "Credencials d'inici de sessió, desades en la sessió", + "Global credentials, user entered" : "Credencials globals, introduïdes per l'usuari", + "User entered, store in database" : "Introduït per l'usuari, emmagatzemat en la base de dades", "RSA public key" : "Clau pública RSA", "Public key" : "Clau pública", "RSA private key" : "Clau privada RSA", "Private key" : "Clau privada", - "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domini predeterminat de Kerberos, per defecte «WORKGROUP»", - "Kerberos ticket Apache mode" : "Mode Apache d'entrada a Kerberos", - "Kerberos ticket" : "Tiquet Kerberos", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domini per defecte del Kerberos, per defecte és «WORKGROUP»", + "Kerberos ticket Apache mode" : "Mode Apache de tiquet del Kerberos", + "Kerberos ticket" : "Tiquet del Kerberos", "Amazon S3" : "Amazon S3", - "Bucket" : "Galleda", + "Bucket" : "Bucket", "Hostname" : "Nom del servidor", "Port" : "Port", "Region" : "Regió", "Storage Class" : "Classe d'emmagatzematge", - "Enable SSL" : "Habilita SSL", - "Enable Path Style" : "Habilita l'estil del camí", - "Legacy (v2) authentication" : "Autenticació heretada (v2)", + "Enable SSL" : "Habilita l'SSL", + "Enable Path Style" : "Habilita l'estil de camí", + "Legacy (v2) authentication" : "Autenticació antiga (v2)", "WebDAV" : "WebDAV", "URL" : "URL", "Remote subfolder" : "Subcarpeta remota", - "Secure https://" : "Protocol segur https://", + "Secure https://" : "https:// segur", "FTP" : "FTP", "Host" : "Servidor", - "Secure ftps://" : "Protocol segur ftps://", + "Secure ftps://" : "ftps:// segur", "Local" : "Local", "Location" : "Ubicació", "Nextcloud" : "Nextcloud", "SFTP" : "SFTP", "Root" : "Arrel", - "SFTP with secret key login" : "Inici de sessió SFTP amb clau secreta", + "SFTP with secret key login" : "SFTP amb inici de sessió amb clau secreta", "SMB/CIFS" : "SMB/CIFS", - "Share" : "Comparteix", + "Share" : "Element compartit", "Show hidden files" : "Mostra els fitxers ocults", - "Verify ACL access when listing files" : "Verificar accés ACL quan es llistin fitxers", - "Check the ACL's of each file or folder inside a directory to filter out items where the user has no read permissions, comes with a performance penalty" : "Comprovar els ACLs de cada fitxer o carpeta a dins d'un directori per filtrar els elements pels que l'usuari no tingui permís, provoca una disminució del rendiment", - "Timeout" : "Sense temps", - "SMB/CIFS using OC login" : "SMB/CIFS utilitzant l'inici de sessió OC", - "Username as share" : "Nom d'usuari amb que es comparteix", + "Verify ACL access when listing files" : "Comprova l'accés ACL quan s'enumerin els fitxers", + "Check the ACL's of each file or folder inside a directory to filter out items where the user has no read permissions, comes with a performance penalty" : "Comprova els ACL de cada fitxer o carpeta d'una carpeta per a filtrar els elements per als quals l'usuari no té permís de lectura; provoca una disminució del rendiment", + "Timeout" : "Temps d'espera", + "SMB/CIFS using OC login" : "SMB/CIFS amb inici de sessió OC", + "Username as share" : "Nom d'usuari com a element compartit", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nom del servei", - "Request timeout (seconds)" : "Temps d'espera de sol·licitud (segons)", - "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El suport de cURL a PHP no està activat o instal·lat. El muntatge de %s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El suport d'FTP a PHP no està activat o instal·lat. El muntatge de %s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "\"%1$s\" no està instal·lat. El muntatge de %2$s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "External storage support" : "Suport d'emmagatzematge extern", - "Adds basic external storage support" : "Afegeix suport d’emmagatzematge extern bàsic", - "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Aquesta aplicació permet als administradors configurar les connexions amb proveïdors d'emmagatzematge externs, com ara servidors FTP, botigues d'objectes S3 o SWIFT, altres servidors Nextcloud, servidors WebDAV i molt més. Els administradors poden triar quins tipus d’emmagatzematge permeten i poden muntar aquestes ubicacions d’emmagatzematge per a un usuari, un grup o tot el sistema. Els usuaris veuran que apareixerà una nova carpeta al directori arrel de Nextcloud, que podran accedir i fer servir com qualsevol altra carpeta Nextcloud. L’emmagatzematge extern també permet als usuaris compartir fitxers emmagatzemats en aquestes ubicacions externes. En aquests casos, les credencials per al propietari del fitxer s’utilitzen quan el destinatari sol·licita el fitxer des d'un emmagatzematge extern, garantint així que el destinatari pugui accedir al fitxer compartit.\n\nL’emmagatzematge extern es pot configurar mitjançant la interfície gràfica d’usuari (GUI) o des de la línia d’ordres. Aquesta segona opció proporciona a l’usuari avançat més flexibilitat per configurar muntatges d’emmagatzematge externs a granel i establir prioritats de muntatge. Podeu obtenir més informació a la documentació de la GUI d’emmagatzematge extern i la documentació del fitxer de configuració de l’emmagatzematge extern.", - "No external storage configured or you don't have the permission to configure them" : "No hi ha cap emmagatzematge extern configurat o no teniu permís per configurar-los", + "Request timeout (seconds)" : "Temps d'espera de les sol·licituds (segons)", + "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "La compatibilitat amb cURL del PHP no està habilitada o instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "La compatibilitat amb FTP del PHP no està habilitada o instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "«%1$s» no està instal·lat. No es pot muntar %2$s. Demaneu a l'administrador del sistema que l'instal·li.", + "External storage support" : "Compatibilitat amb emmagatzematge extern", + "Adds basic external storage support" : "Afegeix compatibilitat bàsica amb emmagatzematge extern", + "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Aquesta aplicació permet als administradors configurar les connexions amb proveïdors d'emmagatzematge externs, com ara servidors FTP, magatzems d'objectes S3 o SWIFT, altres servidors del Nextcloud, servidors WebDAV i molt més. Els administradors poden triar quins tipus d'emmagatzematge permeten i poden muntar aquestes ubicacions d'emmagatzematge per a un usuari, un grup o tot el sistema. Els usuaris veuran que apareixerà una nova carpeta en la carpeta arrel del Nextcloud, que podran obrir i utilitzar com qualsevol altra carpeta del Nextcloud. L'emmagatzematge extern també permet als usuaris compartir fitxers emmagatzemats en aquestes ubicacions externes. En aquests casos, s'utilitzen les credencials del propietari del fitxer quan el destinatari sol·licita el fitxer des d'un emmagatzematge extern, de manera que es garanteix que el destinatari pot accedir al fitxer compartit.\n\nL'emmagatzematge extern es pot configurar mitjançant la interfície gràfica d'usuari o des de la línia d'ordres. Aquesta segona opció proporciona als usuaris avançats més flexibilitat per a configurar muntatges d'emmagatzematge extern en massa i establir prioritats de muntatge. Podeu obtenir més informació en la documentació de la GUI d'emmagatzematge extern i la documentació del fitxer de configuració de l'emmagatzematge extern.", + "No external storage configured or you don't have the permission to configure them" : "No hi ha cap emmagatzematge extern configurat o no teniu permís per a configurar-lo", "Name" : "Nom", "Storage type" : "Tipus d'emmagatzematge", "Scope" : "Abast", "Open documentation" : "Obre la documentació", - "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "L’emmagatzematge extern us permet muntar serveis i dispositius d’emmagatzematge externs com a dispositius d’emmagatzematge secundaris de Nextcloud. També podeu permetre als usuaris muntar els seus propis serveis d’emmagatzematge extern.", + "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "L'emmagatzematge extern us permet muntar serveis i dispositius d'emmagatzematge externs com a dispositius d'emmagatzematge secundaris del Nextcloud. També podeu permetre que els usuaris muntin els seus propis serveis d'emmagatzematge extern.", "Folder name" : "Nom de la carpeta", "Authentication" : "Autenticació", "Configuration" : "Configuració", - "Available for" : "Disponible per", - "Click to recheck the configuration" : "Feu clic per tornar a comprovar la configuració", - "Add storage" : "Afegeix emmagatzematge", + "Available for" : "Disponibilitat", + "Click to recheck the configuration" : "Feu clic per a tornar a comprovar la configuració", + "Add storage" : "Afegeix un emmagatzematge", "All users" : "Tots els usuaris", "Advanced settings" : "Paràmetres avançats", - "Allow users to mount external storage" : "Permet als usuaris muntar emmagatzematge extern", - "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Les credencials globals es poden utilitzar per autenticar-se amb múltiples emmagatzematges externs que tenen les mateixes credencials." + "Allow users to mount external storage" : "Permet que els usuaris muntin emmagatzematge extern", + "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Les credencials globals es poden utilitzar per a autenticar-se amb diversos emmagatzematges externs que tinguin les mateixes credencials." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/ca.json b/apps/files_external/l10n/ca.json index fede6957d39..f2e7f456db8 100644 --- a/apps/files_external/l10n/ca.json +++ b/apps/files_external/l10n/ca.json @@ -3,140 +3,140 @@ "Personal" : "Personal", "System" : "Sistema", "Grant access" : "Concedeix accés", - "Error configuring OAuth1" : "S'ha produït un error en configurar OAuth1", - "Please provide a valid app key and secret." : "Si us plau, proporcioneu una clau d’aplicació vàlida i secreta.", - "Error configuring OAuth2" : "S'ha produït un error en configurar OAuth2", + "Error configuring OAuth1" : "S'ha produït un error en configurar l'OAuth1", + "Please provide a valid app key and secret." : "Proporcioneu una clau d'aplicació i un secret vàlids.", + "Error configuring OAuth2" : "S'ha produït un error en configurar l'OAuth2", "Generate keys" : "Genera les claus", - "Error generating key pair" : "Error en generar el parell de claus", - "Type to select user or group." : "Escriviu per seleccionar usuari o grup.", - "(Group)" : "(Grup)", + "Error generating key pair" : "S'ha produït un error en generar el parell de claus", + "Type to select user or group." : "Escriviu per a seleccionar un usuari o grup.", + "(Group)" : "(grup)", "Compatibility with Mac NFD encoding (slow)" : "Compatibilitat amb la codificació de Mac NFD (lent)", "Enable encryption" : "Habilita el xifratge", - "Enable previews" : "Habilita les vistes prèvies", - "Enable sharing" : "Habilita la compartició", + "Enable previews" : "Habilita les previsualitzacions", + "Enable sharing" : "Habilita l'ús compartit", "Check for changes" : "Comprova si hi ha canvis", "Never" : "Mai", - "Once every direct access" : "Un cop cada accés directe", + "Once every direct access" : "Una vegada cada accés directe", "Read only" : "Només lectura", "Disconnect" : "Desconnecta", - "Admin defined" : "Administrador definit", - "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "La comprovació automàtica de l'estat està inhabilitada a causa del gran nombre d'emmagatzematges configurats, feu clic per comprovar l'estat", - "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Segur que voleu desconnectar aquest mitjà extern? Això farà que l'emmagatzematge no es trobi disponible a Nextcloud i provocarà l'eliminació d'aquests fitxers i carpetes en qualsevol client que s'hi sincronitze, però no eliminarà cap fitxer ni carpeta en el mitjà d'emmagatzematge extern.", - "Delete storage?" : "Suprimeix-ho l'emmagatzematge?", - "Saved" : "Desat", - "Saving …" : "S'està desant …", + "Admin defined" : "S'ha definit l'administrador", + "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "La comprovació automàtica de l'estat està inhabilitada a causa del gran nombre d'emmagatzematges configurats; feu clic per a comprovar l'estat", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Segur que voleu desconnectar aquest emmagatzematge extern? Això farà que l'emmagatzematge no estigui disponible en el Nextcloud i provocarà la supressió d'aquests fitxers i carpetes en qualsevol client que s'hi sincronitzi, però no se suprimirà cap fitxer ni carpeta en l'emmagatzematge extern en si.", + "Delete storage?" : "Voleu suprimir l'emmagatzematge?", + "Saved" : "S'ha desat", + "Saving …" : "S'està desant…", "Save" : "Desa", - "Empty response from the server" : "Resposta buida del servidor", - "Couldn't access. Please log out and in again to activate this mount point" : "No s'ha pogut accedir. Si us plau, tanqueu la sessió i torneu a iniciar-la per activar aquest punt de muntatge", - "Couldn't get the information from the remote server: {code} {type}" : "No s’ha pogut obtenir la informació del servidor remot: {code} {type}", - "Couldn't get the list of external mount points: {type}" : "No s’ha pogut obtenir la llista de punts de muntatge externs: {type}", + "Empty response from the server" : "El servidor ha enviat una resposta buida", + "Couldn't access. Please log out and in again to activate this mount point" : "No s'ha pogut accedir. Tanqueu la sessió i torneu a iniciar-la per a activar aquest punt de muntatge", + "Couldn't get the information from the remote server: {code} {type}" : "No s'ha pogut obtenir la informació del servidor remot: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "No s'ha pogut obtenir la llista de punts de muntatge externs: {type}", "There was an error with message: " : "S'ha produït un error amb el missatge: ", "External mount error" : "Error de muntatge extern", "external-storage" : "emmagatzematge-extern", - "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No s’ha pogut obtenir la llista de punts de muntatge de la unitat de xarxa de Windows: resposta buida del servidor", - "Please enter the credentials for the {mount} mount" : "Si us plau, introduïu les credencials per al muntatge {mount}", + "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No s'ha pogut obtenir la llista de punts de muntatge de la unitat de xarxa del Windows: el servidor ha enviat una resposta buida", + "Please enter the credentials for the {mount} mount" : "Introduïu les credencials per al muntatge {mount}", "Username" : "Nom d'usuari", "Password" : "Contrasenya", - "Credentials saved" : "Credencials desades", - "Credentials saving failed" : "Error en desar les credencials", - "Credentials required" : "Es necessiten credencials", - "Forbidden to manage local mounts" : "Prohibit gestionar volums locals", - "Storage with ID \"%d\" not found" : "No s’ha trobat l’emmagatzematge amb ID \"%d\"", - "Invalid backend or authentication mechanism class" : "Classe de mecanisme d'autenticació o rerefons no vàlids", - "Invalid mount point" : "Punt de muntatge no vàlid", - "Objectstore forbidden" : "Objectstore prohibit", - "Invalid storage backend \"%s\"" : "Rerefons d'emmagatzematge no vàlid \"%s\"", - "Not permitted to use backend \"%s\"" : "No s'ha permès l’ús del rerefons \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "No es permet l’ús del mecanisme d’autenticació \"%s\"", - "Unsatisfied backend parameters" : "Paràmetres del rerefons incomplerts", - "Unsatisfied authentication mechanism parameters" : "Paràmetres del mecanisme d'autenticació incomplerts", + "Credentials saved" : "S'han desat les credencials", + "Credentials saving failed" : "S'ha produït un error en desar les credencials", + "Credentials required" : "Calen credencials", + "Forbidden to manage local mounts" : "Està prohibit gestionar muntatges locals", + "Storage with ID \"%d\" not found" : "No s'ha trobat l'emmagatzematge amb l'ID «%d»", + "Invalid backend or authentication mechanism class" : "La classe de rerefons o de mecanisme d'autenticació no és vàlida", + "Invalid mount point" : "El punt de muntatge no és vàlid", + "Objectstore forbidden" : "ObjectStore prohibit", + "Invalid storage backend \"%s\"" : "El rerefons d'emmagatzematge «%s» no és vàlid", + "Not permitted to use backend \"%s\"" : "No es permet l'ús del rerefons «%s»", + "Not permitted to use authentication mechanism \"%s\"" : "No es permet l'ús del mecanisme d'autenticació «%s»", + "Unsatisfied backend parameters" : "Falten paràmetres del rerefons", + "Unsatisfied authentication mechanism parameters" : "Falten paràmetres del mecanisme d'autenticació", "Insufficient data: %s" : "Dades insuficients: %s", "%s" : "%s", - "Storage with ID \"%d\" is not user editable" : "L’emmagatzematge amb l’ID \"%d\" no és editable per l’usuari", + "Storage with ID \"%d\" is not user editable" : "L'emmagatzematge amb l'ID «%d» no és editable per l'usuari", "Access key" : "Clau d'accés", "Secret key" : "Clau secreta", "Builtin" : "Integrat", "None" : "Cap", "OAuth1" : "OAuth1", - "App key" : "Clau de l'aplicació", + "App key" : "Clau d'aplicació", "App secret" : "Secret d'aplicació", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", + "Client ID" : "ID del client", "Client secret" : "Secret del client", "OpenStack v2" : "OpenStack v2", - "Tenant name" : "Nom del llogater", - "Identity endpoint URL" : "URL del punt final d’identitat", + "Tenant name" : "Nom de l'inquilí", + "Identity endpoint URL" : "URL de l'extrem d'identitat", "OpenStack v3" : "OpenStack v3", "Domain" : "Domini", "Rackspace" : "Rackspace", "API key" : "Clau de l'API", "Global credentials" : "Credencials globals", - "Log-in credentials, save in database" : "Credencials d'inici de sessió, desades a la base de dades", + "Log-in credentials, save in database" : "Credencials d'inici de sessió, desades en la base de dades", "Username and password" : "Nom d'usuari i contrasenya", - "Log-in credentials, save in session" : "Credencials d'inici de sessió, desades a la sessió", - "Global credentials, user entered" : "Credencials globals, l'usuari ha entrat", - "User entered, store in database" : "Usuari introduït, emmagatzemat a la base de dades", + "Log-in credentials, save in session" : "Credencials d'inici de sessió, desades en la sessió", + "Global credentials, user entered" : "Credencials globals, introduïdes per l'usuari", + "User entered, store in database" : "Introduït per l'usuari, emmagatzemat en la base de dades", "RSA public key" : "Clau pública RSA", "Public key" : "Clau pública", "RSA private key" : "Clau privada RSA", "Private key" : "Clau privada", - "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domini predeterminat de Kerberos, per defecte «WORKGROUP»", - "Kerberos ticket Apache mode" : "Mode Apache d'entrada a Kerberos", - "Kerberos ticket" : "Tiquet Kerberos", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domini per defecte del Kerberos, per defecte és «WORKGROUP»", + "Kerberos ticket Apache mode" : "Mode Apache de tiquet del Kerberos", + "Kerberos ticket" : "Tiquet del Kerberos", "Amazon S3" : "Amazon S3", - "Bucket" : "Galleda", + "Bucket" : "Bucket", "Hostname" : "Nom del servidor", "Port" : "Port", "Region" : "Regió", "Storage Class" : "Classe d'emmagatzematge", - "Enable SSL" : "Habilita SSL", - "Enable Path Style" : "Habilita l'estil del camí", - "Legacy (v2) authentication" : "Autenticació heretada (v2)", + "Enable SSL" : "Habilita l'SSL", + "Enable Path Style" : "Habilita l'estil de camí", + "Legacy (v2) authentication" : "Autenticació antiga (v2)", "WebDAV" : "WebDAV", "URL" : "URL", "Remote subfolder" : "Subcarpeta remota", - "Secure https://" : "Protocol segur https://", + "Secure https://" : "https:// segur", "FTP" : "FTP", "Host" : "Servidor", - "Secure ftps://" : "Protocol segur ftps://", + "Secure ftps://" : "ftps:// segur", "Local" : "Local", "Location" : "Ubicació", "Nextcloud" : "Nextcloud", "SFTP" : "SFTP", "Root" : "Arrel", - "SFTP with secret key login" : "Inici de sessió SFTP amb clau secreta", + "SFTP with secret key login" : "SFTP amb inici de sessió amb clau secreta", "SMB/CIFS" : "SMB/CIFS", - "Share" : "Comparteix", + "Share" : "Element compartit", "Show hidden files" : "Mostra els fitxers ocults", - "Verify ACL access when listing files" : "Verificar accés ACL quan es llistin fitxers", - "Check the ACL's of each file or folder inside a directory to filter out items where the user has no read permissions, comes with a performance penalty" : "Comprovar els ACLs de cada fitxer o carpeta a dins d'un directori per filtrar els elements pels que l'usuari no tingui permís, provoca una disminució del rendiment", - "Timeout" : "Sense temps", - "SMB/CIFS using OC login" : "SMB/CIFS utilitzant l'inici de sessió OC", - "Username as share" : "Nom d'usuari amb que es comparteix", + "Verify ACL access when listing files" : "Comprova l'accés ACL quan s'enumerin els fitxers", + "Check the ACL's of each file or folder inside a directory to filter out items where the user has no read permissions, comes with a performance penalty" : "Comprova els ACL de cada fitxer o carpeta d'una carpeta per a filtrar els elements per als quals l'usuari no té permís de lectura; provoca una disminució del rendiment", + "Timeout" : "Temps d'espera", + "SMB/CIFS using OC login" : "SMB/CIFS amb inici de sessió OC", + "Username as share" : "Nom d'usuari com a element compartit", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nom del servei", - "Request timeout (seconds)" : "Temps d'espera de sol·licitud (segons)", - "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El suport de cURL a PHP no està activat o instal·lat. El muntatge de %s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El suport d'FTP a PHP no està activat o instal·lat. El muntatge de %s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "\"%1$s\" no està instal·lat. El muntatge de %2$s no és possible. Si us plau, demaneu a l'administrador del sistema que l'instal·li.", - "External storage support" : "Suport d'emmagatzematge extern", - "Adds basic external storage support" : "Afegeix suport d’emmagatzematge extern bàsic", - "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Aquesta aplicació permet als administradors configurar les connexions amb proveïdors d'emmagatzematge externs, com ara servidors FTP, botigues d'objectes S3 o SWIFT, altres servidors Nextcloud, servidors WebDAV i molt més. Els administradors poden triar quins tipus d’emmagatzematge permeten i poden muntar aquestes ubicacions d’emmagatzematge per a un usuari, un grup o tot el sistema. Els usuaris veuran que apareixerà una nova carpeta al directori arrel de Nextcloud, que podran accedir i fer servir com qualsevol altra carpeta Nextcloud. L’emmagatzematge extern també permet als usuaris compartir fitxers emmagatzemats en aquestes ubicacions externes. En aquests casos, les credencials per al propietari del fitxer s’utilitzen quan el destinatari sol·licita el fitxer des d'un emmagatzematge extern, garantint així que el destinatari pugui accedir al fitxer compartit.\n\nL’emmagatzematge extern es pot configurar mitjançant la interfície gràfica d’usuari (GUI) o des de la línia d’ordres. Aquesta segona opció proporciona a l’usuari avançat més flexibilitat per configurar muntatges d’emmagatzematge externs a granel i establir prioritats de muntatge. Podeu obtenir més informació a la documentació de la GUI d’emmagatzematge extern i la documentació del fitxer de configuració de l’emmagatzematge extern.", - "No external storage configured or you don't have the permission to configure them" : "No hi ha cap emmagatzematge extern configurat o no teniu permís per configurar-los", + "Request timeout (seconds)" : "Temps d'espera de les sol·licituds (segons)", + "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "La compatibilitat amb cURL del PHP no està habilitada o instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "La compatibilitat amb FTP del PHP no està habilitada o instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "«%1$s» no està instal·lat. No es pot muntar %2$s. Demaneu a l'administrador del sistema que l'instal·li.", + "External storage support" : "Compatibilitat amb emmagatzematge extern", + "Adds basic external storage support" : "Afegeix compatibilitat bàsica amb emmagatzematge extern", + "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Aquesta aplicació permet als administradors configurar les connexions amb proveïdors d'emmagatzematge externs, com ara servidors FTP, magatzems d'objectes S3 o SWIFT, altres servidors del Nextcloud, servidors WebDAV i molt més. Els administradors poden triar quins tipus d'emmagatzematge permeten i poden muntar aquestes ubicacions d'emmagatzematge per a un usuari, un grup o tot el sistema. Els usuaris veuran que apareixerà una nova carpeta en la carpeta arrel del Nextcloud, que podran obrir i utilitzar com qualsevol altra carpeta del Nextcloud. L'emmagatzematge extern també permet als usuaris compartir fitxers emmagatzemats en aquestes ubicacions externes. En aquests casos, s'utilitzen les credencials del propietari del fitxer quan el destinatari sol·licita el fitxer des d'un emmagatzematge extern, de manera que es garanteix que el destinatari pot accedir al fitxer compartit.\n\nL'emmagatzematge extern es pot configurar mitjançant la interfície gràfica d'usuari o des de la línia d'ordres. Aquesta segona opció proporciona als usuaris avançats més flexibilitat per a configurar muntatges d'emmagatzematge extern en massa i establir prioritats de muntatge. Podeu obtenir més informació en la documentació de la GUI d'emmagatzematge extern i la documentació del fitxer de configuració de l'emmagatzematge extern.", + "No external storage configured or you don't have the permission to configure them" : "No hi ha cap emmagatzematge extern configurat o no teniu permís per a configurar-lo", "Name" : "Nom", "Storage type" : "Tipus d'emmagatzematge", "Scope" : "Abast", "Open documentation" : "Obre la documentació", - "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "L’emmagatzematge extern us permet muntar serveis i dispositius d’emmagatzematge externs com a dispositius d’emmagatzematge secundaris de Nextcloud. També podeu permetre als usuaris muntar els seus propis serveis d’emmagatzematge extern.", + "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "L'emmagatzematge extern us permet muntar serveis i dispositius d'emmagatzematge externs com a dispositius d'emmagatzematge secundaris del Nextcloud. També podeu permetre que els usuaris muntin els seus propis serveis d'emmagatzematge extern.", "Folder name" : "Nom de la carpeta", "Authentication" : "Autenticació", "Configuration" : "Configuració", - "Available for" : "Disponible per", - "Click to recheck the configuration" : "Feu clic per tornar a comprovar la configuració", - "Add storage" : "Afegeix emmagatzematge", + "Available for" : "Disponibilitat", + "Click to recheck the configuration" : "Feu clic per a tornar a comprovar la configuració", + "Add storage" : "Afegeix un emmagatzematge", "All users" : "Tots els usuaris", "Advanced settings" : "Paràmetres avançats", - "Allow users to mount external storage" : "Permet als usuaris muntar emmagatzematge extern", - "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Les credencials globals es poden utilitzar per autenticar-se amb múltiples emmagatzematges externs que tenen les mateixes credencials." + "Allow users to mount external storage" : "Permet que els usuaris muntin emmagatzematge extern", + "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Les credencials globals es poden utilitzar per a autenticar-se amb diversos emmagatzematges externs que tinguin les mateixes credencials." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js index 1548b81aa05..e26c708be21 100644 --- a/apps/files_external/l10n/gl.js +++ b/apps/files_external/l10n/gl.js @@ -23,7 +23,7 @@ OC.L10N.register( "Disconnect" : "Desconectar", "Admin defined" : "Definido polo administrador", "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "A comprobación automática do estado está desactivada debido á gran cantidade de almacenamentos configurados. Fai clic para comprobar o estado", - "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Estás seguro de que queres desconectar este almacenamento externo? Fará que o almacenamento non estea dispoñible en Nextcloud e provocará a eliminación destes ficheiros e cartafoles en calquera cliente de sincronización que estea conectado actualmente, pero non eliminará ningún ficheiro e cartafol do propio almacenamento externo.", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Confirma que quere desconectar este almacenamento externo? Fará que o almacenamento non estea dispoñíbel en Nextcloud e provocará a eliminación destes ficheiros e cartafoles en calquera cliente de sincronización que estea conectado actualmente, mais non eliminará ningún ficheiro e cartafol do propio almacenamento externo.", "Delete storage?" : "Eliminar o almacenamento?", "Saved" : "Gardado", "Saving …" : "Gardando…", diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json index c8c28fa34a3..4fa05c5d1df 100644 --- a/apps/files_external/l10n/gl.json +++ b/apps/files_external/l10n/gl.json @@ -21,7 +21,7 @@ "Disconnect" : "Desconectar", "Admin defined" : "Definido polo administrador", "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "A comprobación automática do estado está desactivada debido á gran cantidade de almacenamentos configurados. Fai clic para comprobar o estado", - "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Estás seguro de que queres desconectar este almacenamento externo? Fará que o almacenamento non estea dispoñible en Nextcloud e provocará a eliminación destes ficheiros e cartafoles en calquera cliente de sincronización que estea conectado actualmente, pero non eliminará ningún ficheiro e cartafol do propio almacenamento externo.", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Confirma que quere desconectar este almacenamento externo? Fará que o almacenamento non estea dispoñíbel en Nextcloud e provocará a eliminación destes ficheiros e cartafoles en calquera cliente de sincronización que estea conectado actualmente, mais non eliminará ningún ficheiro e cartafol do propio almacenamento externo.", "Delete storage?" : "Eliminar o almacenamento?", "Saved" : "Gardado", "Saving …" : "Gardando…", diff --git a/apps/files_external/l10n/uk.js b/apps/files_external/l10n/uk.js index b0ce54f9b72..16f029d1aed 100644 --- a/apps/files_external/l10n/uk.js +++ b/apps/files_external/l10n/uk.js @@ -44,14 +44,14 @@ OC.L10N.register( "Credentials required" : "Потрібно зазначити дані авторизації", "Forbidden to manage local mounts" : "Заборонено керувати місцевими кріпленнями", "Storage with ID \"%d\" not found" : "Сховище з ідентифікатором \"%d\" не знайдено", - "Invalid backend or authentication mechanism class" : "Недійсний сервер або клас механізму автентифікації", + "Invalid backend or authentication mechanism class" : "Недійсний бекенд серверу або клас методу авторизації", "Invalid mount point" : "Невірна точка монтування", "Objectstore forbidden" : "Objectstore заборонено", "Invalid storage backend \"%s\"" : "Невірне сховище \"%s\"", "Not permitted to use backend \"%s\"" : "Не дозволено використовувати бекенд \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "Не дозволено використовувати механізм автентифікації \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Не дозволено використовувати метод авторизації \"%s\"", "Unsatisfied backend parameters" : "Незадоволені параметри серверної частини", - "Unsatisfied authentication mechanism parameters" : "Незадоволені параметри механізму автентифікації", + "Unsatisfied authentication mechanism parameters" : "Умови методу авторизації не виконано", "Insufficient data: %s" : "Недостатні дані: %s", "%s" : "%s ", "Storage with ID \"%d\" is not user editable" : "У користувачів відсутній доступ на запис до сховища з ідентифікатором \"%d\"", @@ -93,7 +93,7 @@ OC.L10N.register( "Storage Class" : "Клас сховища", "Enable SSL" : "Включити SSL", "Enable Path Style" : "Включити стиль шляху", - "Legacy (v2) authentication" : "Legacy (v2) автентифікація", + "Legacy (v2) authentication" : "Застарілий метод авторизації (v2) ", "WebDAV" : "WebDAV", "URL" : "URL", "Remote subfolder" : "Віддалений підкаталог", @@ -131,14 +131,14 @@ OC.L10N.register( "Open documentation" : "Відкрити документацію", "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Зовнішня пам’ять дає змогу підключати зовнішні служби зберігання та пристрої як додаткові пристрої зберігання даних Nextcloud. Ви також можете дозволити користувачам монтувати власні зовнішні служби зберігання.", "Folder name" : "Назва каталогу", - "Authentication" : "Автентифікація", + "Authentication" : "Авторизація", "Configuration" : "Налаштування", "Available for" : "Доступний для", "Click to recheck the configuration" : "Клацніть для повторної перевірки налаштувань", "Add storage" : "Додати сховище", "All users" : "Всі користувачі", - "Advanced settings" : "Розширені налаштування", + "Advanced settings" : "Розширені", "Allow users to mount external storage" : "Дозволити користувачам монтувати зовнішні сховища", - "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Глобальні облікові дані можна використовувати для автентифікації з кількома зовнішніми сховищами, які мають однакові облікові дані." + "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Універсальні облікові дані можна використовувати для авторизації з кількома зовнішніми сховищами, які мають тотодні облікові дані." }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/files_external/l10n/uk.json b/apps/files_external/l10n/uk.json index 6cf09ba4b1d..f03f9ab96e8 100644 --- a/apps/files_external/l10n/uk.json +++ b/apps/files_external/l10n/uk.json @@ -42,14 +42,14 @@ "Credentials required" : "Потрібно зазначити дані авторизації", "Forbidden to manage local mounts" : "Заборонено керувати місцевими кріпленнями", "Storage with ID \"%d\" not found" : "Сховище з ідентифікатором \"%d\" не знайдено", - "Invalid backend or authentication mechanism class" : "Недійсний сервер або клас механізму автентифікації", + "Invalid backend or authentication mechanism class" : "Недійсний бекенд серверу або клас методу авторизації", "Invalid mount point" : "Невірна точка монтування", "Objectstore forbidden" : "Objectstore заборонено", "Invalid storage backend \"%s\"" : "Невірне сховище \"%s\"", "Not permitted to use backend \"%s\"" : "Не дозволено використовувати бекенд \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "Не дозволено використовувати механізм автентифікації \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Не дозволено використовувати метод авторизації \"%s\"", "Unsatisfied backend parameters" : "Незадоволені параметри серверної частини", - "Unsatisfied authentication mechanism parameters" : "Незадоволені параметри механізму автентифікації", + "Unsatisfied authentication mechanism parameters" : "Умови методу авторизації не виконано", "Insufficient data: %s" : "Недостатні дані: %s", "%s" : "%s ", "Storage with ID \"%d\" is not user editable" : "У користувачів відсутній доступ на запис до сховища з ідентифікатором \"%d\"", @@ -91,7 +91,7 @@ "Storage Class" : "Клас сховища", "Enable SSL" : "Включити SSL", "Enable Path Style" : "Включити стиль шляху", - "Legacy (v2) authentication" : "Legacy (v2) автентифікація", + "Legacy (v2) authentication" : "Застарілий метод авторизації (v2) ", "WebDAV" : "WebDAV", "URL" : "URL", "Remote subfolder" : "Віддалений підкаталог", @@ -129,14 +129,14 @@ "Open documentation" : "Відкрити документацію", "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Зовнішня пам’ять дає змогу підключати зовнішні служби зберігання та пристрої як додаткові пристрої зберігання даних Nextcloud. Ви також можете дозволити користувачам монтувати власні зовнішні служби зберігання.", "Folder name" : "Назва каталогу", - "Authentication" : "Автентифікація", + "Authentication" : "Авторизація", "Configuration" : "Налаштування", "Available for" : "Доступний для", "Click to recheck the configuration" : "Клацніть для повторної перевірки налаштувань", "Add storage" : "Додати сховище", "All users" : "Всі користувачі", - "Advanced settings" : "Розширені налаштування", + "Advanced settings" : "Розширені", "Allow users to mount external storage" : "Дозволити користувачам монтувати зовнішні сховища", - "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Глобальні облікові дані можна використовувати для автентифікації з кількома зовнішніми сховищами, які мають однакові облікові дані." + "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Універсальні облікові дані можна використовувати для авторизації з кількома зовнішніми сховищами, які мають тотодні облікові дані." },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files_external/lib/Command/Create.php b/apps/files_external/lib/Command/Create.php index 17e4731a2d6..6208ac0da07 100644 --- a/apps/files_external/lib/Command/Create.php +++ b/apps/files_external/lib/Command/Create.php @@ -134,7 +134,7 @@ class Create extends Base { $config = []; foreach ($configInput as $configOption) { - if (!strpos($configOption, '=')) { + if (!str_contains($configOption, '=')) { $output->writeln('<error>Invalid mount configuration option "' . $configOption . '"</error>'); return 1; } diff --git a/apps/files_external/lib/Lib/Storage/FtpConnection.php b/apps/files_external/lib/Lib/Storage/FtpConnection.php index f183a5a52de..cca03ddda65 100644 --- a/apps/files_external/lib/Lib/Storage/FtpConnection.php +++ b/apps/files_external/lib/Lib/Storage/FtpConnection.php @@ -110,7 +110,7 @@ class FtpConnection { public function nlist(string $path) { $files = @ftp_nlist($this->connection, $path); return array_map(function ($name) { - if (strpos($name, '/') !== false) { + if (str_contains($name, '/')) { $name = basename($name); } return $name; @@ -122,7 +122,7 @@ class FtpConnection { if ($files !== false) { return array_map(function ($file) { - if (strpos($file['name'], '/') !== false) { + if (str_contains($file['name'], '/')) { $file['name'] = basename($file['name']); } return $file; diff --git a/apps/files_external/lib/Lib/Storage/OwnCloud.php b/apps/files_external/lib/Lib/Storage/OwnCloud.php index d5926008f62..ba7ae1c36a9 100644 --- a/apps/files_external/lib/Lib/Storage/OwnCloud.php +++ b/apps/files_external/lib/Lib/Storage/OwnCloud.php @@ -60,7 +60,7 @@ class OwnCloud extends \OC\Files\Storage\DAV implements IDisableEncryptionStorag $host = substr($host, 0, $hostSlashPos); } - if (substr($contextPath, -1) !== '/') { + if (!str_ends_with($contextPath, '/')) { $contextPath .= '/'; } diff --git a/apps/files_external/lib/Lib/Storage/SFTP.php b/apps/files_external/lib/Lib/Storage/SFTP.php index e46f60d0be4..532c50808db 100644 --- a/apps/files_external/lib/Lib/Storage/SFTP.php +++ b/apps/files_external/lib/Lib/Storage/SFTP.php @@ -63,7 +63,7 @@ class SFTP extends \OC\Files\Storage\Common { */ private function splitHost($host) { $input = $host; - if (strpos($host, '://') === false) { + if (!str_contains($host, '://')) { // add a protocol to fix parse_url behavior with ipv6 $host = 'http://' . $host; } diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php index e0e4659e668..66319d66770 100644 --- a/apps/files_external/lib/Lib/Storage/SMB.php +++ b/apps/files_external/lib/Lib/Storage/SMB.php @@ -139,13 +139,13 @@ class SMB extends Common implements INotifyStorage { } private function splitUser($user) { - if (strpos($user, '/')) { + if (str_contains($user, '/')) { return explode('/', $user, 2); - } elseif (strpos($user, '\\')) { + } elseif (str_contains($user, '\\')) { return explode('\\', $user); - } else { - return [null, $user]; } + + return [null, $user]; } /** diff --git a/apps/files_external/lib/Lib/Storage/Swift.php b/apps/files_external/lib/Lib/Storage/Swift.php index 85b3727f4db..26e6c5315cb 100644 --- a/apps/files_external/lib/Lib/Storage/Swift.php +++ b/apps/files_external/lib/Lib/Storage/Swift.php @@ -126,9 +126,10 @@ class Swift extends \OC\Files\Storage\Common { * @throws \OCP\Files\StorageNotAvailableException */ private function fetchObject(string $path) { - if ($this->objectCache->hasKey($path)) { + $cached = $this->objectCache->get($path); + if ($cached !== null) { // might be "false" if object did not exist from last check - return $this->objectCache->get($path); + return $cached; } try { $object = $this->getContainer()->getObject($path); diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 70a69e06e25..ec8c6586173 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -1,278 +1,280 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartit amb tu", - "Nothing shared with you yet" : "No se us ha compartit res encara", - "Files and folders others share with you will show up here" : "Els fitxers i carpetes que altres us comparteixin es mostraran aquí", - "Shared with others" : "Heu compartit amb altres", - "Nothing shared yet" : "No s'ha compartit res, encara", + "Shared with you" : "Compartit amb vós", + "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", + "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", + "Shared with others" : "Compartit amb altres", + "Nothing shared yet" : "Encara no heu compartit res", "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", - "Shared by link" : "Compartit amb enllaç", - "No shared links" : "No hi ha enllaços compartits", - "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu mitjançant un enllaç es mostraran aquí", - "Deleted shares" : "Comparticions suprimides", - "No deleted shares" : "No hi ha cap compartició suprimida", - "Shares you deleted will show up here" : "Les comparticions que heu suprimit es mostraran aquí", - "Pending shares" : "Comparticions pendents", - "No pending shares" : "Sense comparticions pendents", - "Shares you have received but not confirmed will show up here" : "Les comparticions que heu rebut però no confirmades es mostraran aquí", - "Shares" : "Comparticions", - "No shares" : "No hi ha comparticions", - "Shares will show up here" : "Les comparticions es mostraran aquí", + "Shared by link" : "Compartit amb un enllaç", + "No shared links" : "No hi ha cap enllaç compartit", + "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", + "Deleted shares" : "Suprimit", + "No deleted shares" : "No hi ha cap element compartit suprimit", + "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", + "Pending shares" : "Pendent", + "No pending shares" : "No hi ha cap element compartit pendent", + "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", + "Shares" : "Element compartits", + "No shares" : "No hi ha cap element compartit", + "Shares will show up here" : "Els elements compartits es mostraran aquí", "Restore" : "Restaura", - "Restore share" : "Restaura una compartició", - "Something happened. Unable to restore the share." : "Alguna cosa ha passat. No es pot restaurar la compartició.", - "Accept share" : "Accepta compartició", - "Something happened. Unable to accept the share." : "Ha passat alguna cosa. No es pot acceptar la compartició.", - "Reject share" : "Rebutja la compartició", - "Something happened. Unable to reject the share." : "Ha passat alguna cosa. No es pot rebutjar la compartició.", + "Restore share" : "Restaura l'element compartit", + "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", + "Accept share" : "Accepta l'element compartit", + "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", + "Reject share" : "Rebutja l'element compartit", + "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", "Waiting…" : "S'està esperant…", "error" : "error", - "finished" : "finalitzat", - "This will stop your current uploads." : "Això aturarà les càrregues actuals.", + "finished" : "ha finalitzat", + "This will stop your current uploads." : "Això aturarà les pujades actuals.", "Move or copy" : "Mou o copia", - "Download" : "Baixada", + "Download" : "Baixa", "Delete" : "Suprimeix", - "You can upload into this folder" : "Podeu pujar dins d'aquesta carpeta", + "You can upload into this folder" : "Podeu pujar elements a aquesta carpeta", "Terms of service" : "Condicions del servei", - "Show list view" : "Mostra en vista de llista", - "Show grid view" : "Mostra en vista de graella", + "Show list view" : "Mostra la visualització de llista", + "Show grid view" : "Mostra la visualització de graella", "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "L'URL del servidor no és vàlida", "Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud", "No expiration date set" : "No s'ha establert cap data de caducitat", "Shared by" : "Compartit per", "File shares" : "Fitxers compartits", - "Downloaded via public link" : "Descarregat mitjançant enllaç públic", - "Downloaded by {email}" : "Descarregat per {email}", - "{file} downloaded via public link" : "{file} descarregat mitjançant enllaç públic", - "{email} downloaded {file}" : "{email} descarregat {file}", - "Shared with group {group}" : "Compartit amb el grup {group}", - "Removed share for group {group}" : "S'ha suprimit la compartició per al grup {group}", - "{actor} shared with group {group}" : "{actor} ha compartit amb el grup {group}", - "{actor} removed share for group {group}" : "{actor} ha suprimit la participació del grup {grup}", - "Share for group {group} expired" : "Ha caducat la compartició per al grup {group}", + "Downloaded via public link" : "S'ha baixat mitjançant un enllaç públic", + "Downloaded by {email}" : "{email} l'ha baixat", + "{file} downloaded via public link" : "S'ha baixat {file} mitjançant un enllaç públic", + "{email} downloaded {file}" : "{email} ha baixat {file}", + "Shared with group {group}" : "S'ha compartit amb el grup {group}", + "Removed share for group {group}" : "S'ha deixat de compartir amb el grup {group}", + "{actor} shared with group {group}" : "{actor} l'ha compartit amb el grup {group}", + "{actor} removed share for group {group}" : "{actor} l'ha deixat de compartir amb el grup {grup}", + "Share for group {group} expired" : "Ha caducat l'ús compartit per al grup {group}", "You shared {file} with group {group}" : "Heu compartit {file} amb el grup {group}", "You removed group {group} from {file}" : "Heu suprimit el grup {group} de {file}", "{actor} shared {file} with group {group}" : "{actor} ha compartit {file} amb el grup {group}", "{actor} removed group {group} from {file}" : "{actor} ha suprimit el grup {group} de {file}", - "Share for file {file} with group {group} expired" : "Ha caducat la compartició per al fitxer {file} amb el grup {group}", - "Shared as public link" : "Compartit com a enllaç públic", + "Share for file {file} with group {group} expired" : "Ha caducat l'ús compartit per al fitxer {file} amb el grup {group}", + "Shared as public link" : "S'ha compartit amb un enllaç públic", "Removed public link" : "S'ha suprimit l'enllaç públic", "Public link expired" : "L'enllaç públic ha caducat", - "{actor} shared as public link" : "{actor} ha compartit com a enllaç públic", + "{actor} shared as public link" : "{actor} l'ha compartit amb un enllaç públic", "{actor} removed public link" : "{actor} ha suprimit l'enllaç públic", "Public link of {actor} expired" : "L'enllaç públic de {actor} ha caducat", - "You shared {file} as public link" : "Heu compartit {file} com a enllaç públic", + "You shared {file} as public link" : "Heu compartit {file} amb un enllaç públic", "You removed public link for {file}" : "Heu suprimit l'enllaç públic per a {file}", - "Public link expired for {file}" : "L'enllaç públic ha caducat per {file}", - "{actor} shared {file} as public link" : "{actor} ha compartit {file} com a enllaç públic", + "Public link expired for {file}" : "L'enllaç públic per a {file} ha caducat", + "{actor} shared {file} as public link" : "{actor} ha compartit {file} amb un enllaç públic", "{actor} removed public link for {file}" : "{actor} ha suprimit l'enllaç públic per a {file}", - "Public link of {actor} for {file} expired" : "L'enllaç públic de {actor} per {file} ha caducat", - "{user} accepted the remote share" : "{usuari} ha acceptat la compartició remota", - "{user} declined the remote share" : "{usuari} ha rebutjat la compartició remota", - "You received a new remote share {file} from {user}" : "Heu rebut una nova compartició remota {file} de {user}", - "{user} accepted the remote share of {file}" : "{usuari} ha acceptat la compartició remota de {file}", - "{user} declined the remote share of {file}" : "{usuari} ha rebutjat la compartició remota de {file}", - "{user} unshared {file} from you" : "{user} us ha deixat de compartir {file}", - "Shared with {user}" : "Compartit amb {user}", - "Removed share for {user}" : "S'ha suprimit la compartició per {user}", + "Public link of {actor} for {file} expired" : "L'enllaç públic de {actor} per a {file} ha caducat", + "{user} accepted the remote share" : "{usuari} ha acceptat l'element compartit remot", + "{user} declined the remote share" : "{usuari} ha rebutjat l'element compartit remot", + "You received a new remote share {file} from {user}" : "Heu rebut l'element compartit nou {file} de {user}", + "{user} accepted the remote share of {file}" : "{usuari} ha acceptat l'element compartit remot {file}", + "{user} declined the remote share of {file}" : "{usuari} ha rebutjat l'element compartit remot {file}", + "{user} unshared {file} from you" : "{user} ha deixat de compartir {file} amb vós", + "Shared with {user}" : "S'ha compartit amb {user}", + "Removed share for {user}" : "S'ha deixat de compartir amb {user}", "You removed yourself" : "Us heu suprimit", - "{actor} removed themselves" : "{actor} s'ha suprimit ell mateix", - "{actor} shared with {user}" : "{actor} ha compartit amb {usuari}", - "{actor} removed share for {user}" : "{actor} ha suprimit la compartició per {user}", - "Shared by {actor}" : "Compartit per {actor}", - "{actor} removed share" : "{actor} ha suprimit la compartició", - "Share for {user} expired" : "Ha caducat la compartició per a {user}", - "Share expired" : "La compartició ha caducat", + "{actor} removed themselves" : "{actor} s'ha suprimit", + "{actor} shared with {user}" : "{actor} l'ha compartit amb {usuari}", + "{actor} removed share for {user}" : "{actor} l'ha deixat de compartir amb {user}", + "Shared by {actor}" : "{actor} l'ha compartit", + "{actor} removed share" : "{actor} l'ha deixat de compartir", + "Share for {user} expired" : "Ha caducat l'ús compartit per a {user}", + "Share expired" : "L'element compartit ha caducat", "You shared {file} with {user}" : "Heu compartit {file} amb {user}", "You removed {user} from {file}" : "Heu suprimit {user} de {file}", "You removed yourself from {file}" : "Us heu suprimit de {file}", - "{actor} removed themselves from {file}" : "{actor} s'ha suprimit ell mateix de {file}", + "{actor} removed themselves from {file}" : "{actor} s'ha suprimit de {file}", "{actor} shared {file} with {user}" : "{actor} ha compartit {file} amb {usuari}", "{actor} removed {user} from {file}" : "{actor} ha suprimit {user} de {file}", - "{actor} shared {file} with you" : "{actor} us ha compartit {file}", - "{actor} removed you from the share named {file}" : "{actor} us ha suprimit de la compartició anomenada {file}", - "Share for file {file} with {user} expired" : "Ha caducat la compartició per al fitxer {file} amb {user}", - "Share for file {file} expired" : "Ha caducat la compartició per al fitxer {file}", - "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "S'ha <strong>descarregat</strong> un fitxer compartit o carpeta compartida per correu o per enllaç públic", + "{actor} shared {file} with you" : "{actor} ha compartit {file} amb vós", + "{actor} removed you from the share named {file}" : "{actor} us ha suprimit de l'element compartit {file}", + "Share for file {file} with {user} expired" : "Ha caducat l'ús compartit del fitxer {file} per a {user}", + "Share for file {file} expired" : "Ha caducat l'ús compartit per al fitxer {file}", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "S'ha <strong>baixat</strong> un fitxer o una carpeta compartit per correu o per enllaç públic", "A file or folder was shared from <strong>another server</strong>" : "S'ha compartit un fitxer o una carpeta d'un <strong>altre servidor</strong>", "Files" : "Fitxers", "A file or folder has been <strong>shared</strong>" : "S'ha <strong>compartit</strong> un fitxer o una carpeta", "Shared link" : "Enllaç compartit", - "Wrong share ID, share does not exist" : "Identificador de compartició incorrecte, la compartició no existeix", - "Could not delete share" : "No s'ha pogut suprimir la compartició", - "Please specify a file or folder path" : "Si us plau, especifiqueu un camí de fitxer o carpeta", - "Wrong path, file/folder does not exist" : "Camí incorrecte, fitxer/carpeta no existeix", - "Could not create share" : "No s'ha pogut crear la compartició", - "Invalid permissions" : "Permisos no vàlids", - "Please specify a valid user" : "Si us plau, especifiqueu un usuari vàlid", - "Group sharing is disabled by the administrator" : "L'administrador ha desactivat l'opció per compartir grups", - "Please specify a valid group" : "Si us plau, especifiqueu un grup vàlid", - "Public link sharing is disabled by the administrator" : "L'administrador ha desactivat l'intercanvi d'enllaços públics", - "Public upload disabled by the administrator" : "S'ha desactivat la càrrega pública per part de l'administrador", - "Public upload is only possible for publicly shared folders" : "La càrrega pública només és possible per a carpetes compartides públicament", - "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "No s'ha pogut compartir %s enviant la contrasenya per Nextcloud Talk perquè Nextcloud Talk no està activat", - "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "No s'ha pogut compartir %1$s perquè l'aplicació de fons no permet comparticions de tipus %2$s", - "Please specify a valid federated user ID" : "Especifiqueu un identificador d'usuari federat vàlid", + "Wrong share ID, share does not exist" : "L'ID de l'element compartit és incorrecte, l'element compartit no existeix", + "Could not delete share" : "No s'ha pogut suprimir l'element compartit", + "Please specify a file or folder path" : "Especifiqueu un camí de fitxer o carpeta", + "Wrong path, file/folder does not exist" : "El camí és incorrecte, el fitxer o la carpeta no existeix", + "Could not create share" : "No s'ha pogut crear l'element compartit", + "Invalid permissions" : "Els permisos no són vàlids", + "Please specify a valid user" : "Especifiqueu un usuari vàlid", + "Group sharing is disabled by the administrator" : "L'administrador ha inhabilitat l'ús compartit en grup", + "Please specify a valid group" : "Especifiqueu un grup vàlid", + "Public link sharing is disabled by the administrator" : "L'administrador ha inhabilitat l'ús compartit amb enllaç públic", + "Public upload disabled by the administrator" : "L'administrador ha inhabilitat la pujada pública", + "Public upload is only possible for publicly shared folders" : "La pujada pública només és possible per a carpetes compartides públicament", + "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "No s'ha pogut compartir %s enviant la contrasenya per Converses del Nextcloud perquè l'aplicació Converses del Nextcloud no està habilitada", + "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "No s'ha pogut compartir %1$s perquè el rerefons no permet elements compartits de tipus %2$s", + "Please specify a valid federated user ID" : "Especifiqueu un ID d'usuari federat vàlid", "Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser AAAA-MM-DD", - "Please specify a valid federated group ID" : "Especifiqueu un identificador de grup federat vàlid", - "You cannot share to a Circle if the app is not enabled" : "No podeu compartir en un cercle si l'aplicació no està activada", + "Please specify a valid federated group ID" : "Especifiqueu un ID de grup federat vàlid", + "You cannot share to a Circle if the app is not enabled" : "No podeu compartir-ho en un cercle si l'aplicació no està habilitada", "Please specify a valid circle" : "Especifiqueu un cercle vàlid", - "Sharing %s failed because the back end does not support room shares" : "No s'ha pogut compartir %s perquè l'aplicació de fons no permet compartir canals", - "Unknown share type" : "Tipus de compartició desconegut", - "Not a directory" : "No és un directori", - "Could not lock node" : "No s'ha pogut bloquejar el node", - "Could not lock path" : "No s'ha pogut bloquejar la ruta d'accés", - "Wrong or no update parameter given" : "S'ha donat un paràmetre o un paràmetre d'actualització incorrecte", - "Share must at least have READ or CREATE permissions" : "La compartició ha de tenir almenys permisos LLEGIR o CREAR", - "Share must have READ permission if UPDATE or DELETE permission is set" : "La compartició ha de tenir permís de LECTURA si s'ha definit el permís ACTUALITZAR o ELIMINAR", - "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "No s'ha pogut “Enviar la contrasenya per Nextcloud Talk/Parla” per compartir un fitxer o una carpeta perquè Nextcloud Talk/Parla no està habilitat.", + "Sharing %s failed because the back end does not support room shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit en sales", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", + "Unknown share type" : "Tipus d'element compartit desconegut", + "Not a directory" : "No és una carpeta", + "Could not lock node" : "No s'ha pogut blocar el node", + "Could not lock path" : "No s'ha pogut blocar la ruta d'accés", + "Wrong or no update parameter given" : "S'ha proporcionat un paràmetre d'actualització incorrecte o no s'ha proporcionat", + "Share must at least have READ or CREATE permissions" : "L'element compartit ha de tenir almenys permisos de lectura o creació", + "Share must have READ permission if UPDATE or DELETE permission is set" : "L'element compartit ha de tenir permís de lectura si s'ha establert permís d'actualització o supressió", + "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "No s'ha pogut enviar la contrasenya per Converses del Nextcloud per a compartir un fitxer o una carpeta perquè l'aplicació Converses del Nextcloud no està habilitada.", "shared by %s" : "compartit per %s", - "Download all files" : "Descarrega tots els fitxers", + "Download all files" : "Baixa tots els fitxers", "Direct link" : "Enllaç directe", - "Add to your %s" : "Afegeix al teu %s", - "Share API is disabled" : "Compartir l'API està desactivat", - "File sharing" : "Compartició de fitxers", - "Share will expire tomorrow" : "La compartició caducarà demà", - "Your share of {node} will expire tomorrow" : "La teva compartició de {node} caducarà demà", - "You received {share} as a share by {user}" : "Heu rebut {share} com a compartició per {user}", - "You received {share} to group {group} as a share by {user}" : "Heu rebut {share} pel grup {group} com a compartició per {user}", + "Add to your %s" : "Afegeix al %s", + "Share API is disabled" : "L'API d'ús compartit està inhabilitada", + "File sharing" : "Fitxers compartits", + "Share will expire tomorrow" : "L'ús compartit caducarà demà", + "Your share of {node} will expire tomorrow" : "L'ús compartit de {node} caducarà demà", + "You received {share} as a share by {user}" : "Heu rebut l'element compartit {share} de {user}", + "You received {share} to group {group} as a share by {user}" : "Heu rebut l'element compartit {share} del grup {group} de {user}", "Accept" : "Accepta", "Reject" : "Rebutja", - "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers a Nextcloud. Si està activat, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris aplicables poden compartir fitxers i carpetes amb altres usuaris i grups de Nextcloud. A més, si l’administrador activa la funció d’enllaç compartit, es pot fer servir un enllaç extern per compartir fitxers amb altres usuaris fora de Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i activar la compartició de servidor a servidor mitjançant enllaços compartits, així com la compartició de dispositius mòbils.\nDesactivant la funcionalitat suprimirà els fitxers compartits i les carpetes del servidor per a tots els destinataris compartits i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació a la documentació de Nextcloud.", + "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers en el Nextcloud. Si està habilitada, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris amb permís poden compartir fitxers i carpetes amb altres usuaris i grups del Nextcloud. A més, si l'administrador activa la característica de compartir enllaços, es poden utilitzar enllaços externs per a compartir fitxers amb altres usuaris fora del Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i habilitar l'ús compartit entre servidors mitjançant enllaços d'ús compartit, així com l'ús compartit des de dispositius mòbils.\nSi inhabiliteu la característica, se suprimiran els fitxers i les carpetes compartides del servidor per a tots els destinataris i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació en la documentació del Nextcloud.", "Sharing" : "Ús compartit", - "Accept user and group shares by default" : "Acceptar les comparticions d'usuari i de grup de manera predeterminada", + "Accept user and group shares by default" : "Accepta els elements compartits d'usuari i en grup per defecte", "Error while toggling options" : "S'ha produït un error en canviar les opcions", - "Set default folder for accepted shares" : "Estableix la carpeta predeterminada per a les comparticions acceptades", - "Reset" : "Restableix", - "Reset folder to system default" : "Carpeta de documents per defecte del sistema", - "Choose a default folder for accepted shares" : "Trieu una carpeta predeterminada per als recursos compartits acceptats", + "Set default folder for accepted shares" : "Estableix la carpeta per defecte per als elements compartits acceptats", + "Reset" : "Reinicialitza", + "Reset folder to system default" : "Reinicialitza la carpeta per defecte del sistema", + "Choose a default folder for accepted shares" : "Trieu una carpeta per defecte per als elements compartits acceptats", "Invalid path selected" : "El camí seleccionat no és vàlid", "Unknown error" : "Error desconegut", "Allow editing" : "Permet l'edició", "Read only" : "Només de lectura", "Allow upload and editing" : "Permet la pujada i l'edició", - "File drop (upload only)" : "Deixa anar el fitxer (només càrrega)", + "File drop (upload only)" : "Tramesa de fitxers (només pujada)", "Custom permissions" : "Permisos personalitzats", - "Read" : "Llegeix", + "Read" : "Lectura", "Upload" : "Pujada", - "Edit" : "Edita", + "Edit" : "Edició", "Bundled permissions" : "Permisos agrupats", - "Allow creating" : "Permet crear", - "Allow deleting" : "Permet suprimir", - "Allow resharing" : "Permet compartir de nou", - "Expiration date enforced" : "Data de venciment obligatòria", - "Set expiration date" : "Establiu una data de caducitat", + "Allow creating" : "Permet la creació", + "Allow deleting" : "Permet la supressió", + "Allow resharing" : "Permet l'ús compartit derivat", + "Expiration date enforced" : "Data de caducitat", + "Set expiration date" : "Estableix la data de caducitat", "Enter a date" : "Introduïu una data", - "Note to recipient" : "Nota al destinatari", + "Note to recipient" : "Nota per al destinatari", "Unshare" : "Deixa de compartir", "group" : "grup", "conversation" : "conversa", - "remote" : "remot", + "remote" : "element remot", "remote group" : "grup remot", "guest" : "convidat", - "Shared with the group {user} by {owner}" : "Compartit amb el grup {user} per {owner}", - "Shared with the conversation {user} by {owner}" : "Compartit amb la conversa {usuari} per {owner}", - "Shared with {user} by {owner}" : "Compartit amb {user} per {owner}", + "Shared with the group {user} by {owner}" : "{owner} l'ha compartit amb el grup {user}", + "Shared with the conversation {user} by {owner}" : "{owner} l'ha compartit amb la conversa {usuari}", + "Shared with {user} by {owner}" : "{owner} l'ha compartit amb {user}", "Allow download" : "Permet la baixada", - "Added by {initiator}" : "Afegit per {initiator}", - "Via “{folder}”" : "Mitjançant “{folder}”", + "Added by {initiator}" : "{initiator} l'ha afegit", + "Via “{folder}”" : "Mitjançant «{folder}»", "Internal link" : "Enllaç intern", - "Cannot copy, please copy the link manually" : "No es pot copiar, si us plau, copieu l'enllaç manualment", + "Cannot copy, please copy the link manually" : "No es pot copiar; copieu l'enllaç manualment", "Copy internal link to clipboard" : "Copia l'enllaç intern al porta-retalls", - "Only works for users with access to this folder" : "Només funciona per a usuaris amb accés a aquesta carpeta", - "Only works for users with access to this file" : "Només funciona per a usuaris amb accés a aquest fitxer", - "Link copied" : "Enllaç copiat", - "Please enter the following required information before creating the share" : "Introduïu la informació necessària següent abans de crear la compartició", - "Password protection (enforced)" : "Protecció amb contrasenya (obligatòri)", + "Only works for users with access to this folder" : "Només funciona per als usuaris amb accés a aquesta carpeta", + "Only works for users with access to this file" : "Només funciona per als usuaris amb accés a aquest fitxer", + "Link copied" : "S'ha copiat l'enllaç", + "Please enter the following required information before creating the share" : "Introduïu la informació obligatòria següent abans de crear l'element compartit", + "Password protection (enforced)" : "Protecció amb contrasenya (obligatori)", "Password protection" : "Protecció amb contrasenya", "Enter a password" : "Introduïu una contrasenya", - "Expiration date (enforced)" : "Data de venciment (obligatòri)", - "Create share" : "Crea una compartició", + "Expiration date (enforced)" : "Data de venciment (obligatori)", + "Create share" : "Crea l'element compartit", "Cancel" : "Cancel·la", - "Share label" : "Comparteix l'etiqueta", + "Share label" : "Etiqueta d'ús compartit", "Hide download" : "Amaga la baixada", "Password protect" : "Protegeix amb contrasenya", - "Password expires {passwordExpirationTime}" : "La contrasenya caduca {passwordExpirationTime}", - "Password expired" : "La contrasenya ha expirat", + "Password expires {passwordExpirationTime}" : "La contrasenya caduca el {passwordExpirationTime}", + "Password expired" : "La contrasenya ha caducat", "Video verification" : "Verificació de vídeo", - "Enter a note for the share recipient" : "Introduïu una nota per al destinatari de la compartició", + "Enter a note for the share recipient" : "Introduïu una nota per al destinatari de l'element compartit", "Add another link" : "Afegeix un altre enllaç", - "Create a new share link" : "Crear un enllaç de compartició nou", + "Create a new share link" : "Crear un enllaç d'ús compartit nou", "{shareWith} by {initiator}" : "{shareWith} per {initiator}", - "Shared via link by {initiator}" : "Compartit a través de l'enllaç per {initiator}", - "Mail share ({label})" : "Compartició de correu ({label})", - "Share link ({label})" : "Comparteix l'enllaç ({label})", - "Share link ({index})" : "Comparteix l'enllaç ({index})", - "Share link" : "Enllaç de compartició", - "Actions for \"{title}\"" : "Accions per a \"{title}\"", - "Copy public link of \"{title}\" to clipboard" : "Copia l'enllaç públic de \"{title}\" al porta-retalls", - "Error, please enter proper password and/or expiration date" : "Error, introduïu la contrasenya i/o data de caducitat adequades", + "Shared via link by {initiator}" : "Compartit amb un enllaç per {initiator}", + "Mail share ({label})" : "Comparteix per correu ({label})", + "Share link ({label})" : "Comparteix un enllaç ({label})", + "Share link ({index})" : "Comparteix un enllaç ({index})", + "Share link" : "Comparteix un enllaç", + "Actions for \"{title}\"" : "Accions per a «{title}»", + "Copy public link of \"{title}\" to clipboard" : "Copia l'enllaç públic de «{title}» al porta-retalls", + "Error, please enter proper password and/or expiration date" : "S'ha produït un error, introduïu la contrasenya o la data de caducitat adequada", "Link share created" : "S'ha creat l'enllaç compartit", - "Error while creating the share" : "S'ha produït un error en crear la compartició", - "Search for share recipients" : "Cerca destinataris compartits", - "No recommendations. Start typing." : "No hi ha recomanacions. Comenceu a escriure.", - "Resharing is not allowed" : "No està permesa la re-compartició", - "Name or email …" : "Nom o correu …", - "Name, email, or Federated Cloud ID …" : "Nom, correu o ID de Núvol federat …", - "Searching …" : "Cercant …", - "No elements found." : "No s’han trobat elements.", + "Error while creating the share" : "S'ha produït un error en crear l'element compartit", + "Search for share recipients" : "Cerqueu destinataris de l'element compartit", + "No recommendations. Start typing." : "No hi ha cap recomanació. Comenceu a escriure.", + "Resharing is not allowed" : "No es permet l'ús compartit derivat", + "Name or email …" : "Nom o adreça electrònica…", + "Name, email, or Federated Cloud ID …" : "Nom, adreça electrònica o ID de núvol federat…", + "Searching …" : "S'està cercant…", + "No elements found." : "No s'ha trobat cap element.", "Search globally" : "Cerca globalment", "Guest" : "Convidat", "Group" : "Grup", - "Email" : "Correu", + "Email" : "Adreça electrònica", "Circle" : "Cercle", - "Talk conversation" : "Conversa de Talk", - "Deck board" : "Tauler de Deck", + "Talk conversation" : "Conversa", + "Deck board" : "Tauler de Targetes", + "ScienceMesh" : "ScienceMesh", "on {server}" : "a {server}", - "Others with access" : "Altres amb accés", + "Others with access" : "Altres usuaris amb accés", "No other users with access found" : "No s'ha trobat cap altre usuari amb accés", - "Toggle list of others with access to this directory" : "Commuta la llista d'altres persones amb accés a aquest directori", - "Toggle list of others with access to this file" : "Commuta la llista d'altres persones amb accés a aquest fitxer", - "Unable to fetch inherited shares" : "No s'han pogut obtenir les comparticions heretades", - "Unable to load the shares list" : "No es pot carregar la llista de comparticions", - "Expires {relativetime}" : "Caduca a {relativetime}", - "this share just expired." : "aquesta compartició acaba de caducar.", - "Shared with you by {owner}" : "Compartit amb tu per {owner}", - "Link to a file" : "Enllaça a un fitxer", - "Error creating the share: {errorMessage}" : "S'ha produït un error en crear la compartició: {errorMessage}", - "Error creating the share" : "S'ha produït un error en crear la compartició", - "Error updating the share: {errorMessage}" : "Error en actualitzar la compartició: {errorMessage}", - "Error updating the share" : "S'ha produït un error en actualitzar la compartició", - "File \"{path}\" has been unshared" : "El fitxer “{path}” s’ha deixat de compartir", - "Folder \"{path}\" has been unshared" : "La carpeta \"{path}\" s'ha deixat de compartir", - "Share {propertyName} saved" : "Comparteix {propertyName} desat", - "Shared" : "Compartit", + "Toggle list of others with access to this directory" : "Canvia la llista d'altres usuaris amb accés a aquesta carpeta", + "Toggle list of others with access to this file" : "Canvia la llista d'altres usuaris amb accés a aquest fitxer", + "Unable to fetch inherited shares" : "No s'han pogut obtenir els elements compartits heretats", + "Unable to load the shares list" : "No s'ha pogut carregar la llista d'elements compartits", + "Expires {relativetime}" : "Caduca {relativetime}", + "this share just expired." : "aquest element compartit acaba de caducar.", + "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", + "Link to a file" : "Enllaç a un fitxer", + "Error creating the share: {errorMessage}" : "S'ha produït un error en crear l'element compartit: {errorMessage}", + "Error creating the share" : "S'ha produït un error en crear l'element compartit", + "Error updating the share: {errorMessage}" : "S'ha produït un error en actualitzar l'element compartit: {errorMessage}", + "Error updating the share" : "S'ha produït un error en actualitzar l'element compartit", + "File \"{path}\" has been unshared" : "El fitxer «{path}» s'ha deixat de compartir", + "Folder \"{path}\" has been unshared" : "La carpeta «{path}» s'ha deixat de compartir", + "Share {propertyName} saved" : "S'ha desat l'element compartit {propertyName}", + "Shared" : "S'ha compartit", "Share" : "Comparteix", - "Shared with" : "Compartit amb", + "Shared with" : "S'ha compartit amb", "Password created successfully" : "La contrasenya s'ha creat correctament", - "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya des de la política de contrasenyes", - "Shared with you and the group {group} by {owner}" : "Compartit amb tu i amb el grup {group} per {owner}", - "Shared with you and {circle} by {owner}" : "Compartit amb tu i {circle} per {owner}", - "Shared with you and the conversation {conversation} by {owner}" : "Compartit amb tu i amb la conversa {conversation} per {owner}", - "Shared with you in a conversation by {owner}" : "Compartit amb tu en una conversa per {owner}", - "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya a partir de la política de contrasenyes", + "Shared with you and the group {group} by {owner}" : "{owner} l'ha compartit amb vós i amb el grup {group}", + "Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}", + "Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}", + "Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa", + "No entries found in this folder" : "No hi ha cap entrada en aquesta carpeta", "Name" : "Nom", - "Share time" : "Temps de compartició", + "Share time" : "Temps d'ús compartit", "Expiration date" : "Data de caducitat", - "Sorry, this link does not seem to work anymore." : "Ho sentim, sembla que aquest enllaç ja no funciona.", + "Sorry, this link does not seem to work anymore." : "Sembla que aquest enllaç ja no funciona.", "Reasons might be:" : "Les raons podrien ser:", - "the item was removed" : "s'ha suprimit l'element", - "the link expired" : "l'enllaç ha vençut", - "sharing is disabled" : "s'ha desactivat la compartició", - "For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.", - "Share note" : "Comparteix nota", - "Upload files to %s" : "Carrega fitxers a %s", + "the item was removed" : "S'ha suprimit l'element.", + "the link expired" : "L'enllaç ha caducat.", + "sharing is disabled" : "S'ha inhabilitat l'ús compartit.", + "For more info, please ask the person who sent this link." : "Per a més informació, contacteu amb qui us hagi enviat l'enllaç.", + "Share note" : "Nota de l'element compartit", + "Upload files to %s" : "Puja fitxers a %s", "Note" : "Nota", - "Select or drop files" : "Selecciona o deixa anar els fitxers", - "Uploading files" : "Càrregant fitxers", - "Uploaded files:" : "Fitxers carregats:", - "By uploading files, you agree to the %1$sterms of service%2$s." : "Si carregueu els fitxers accepteu les %1$scondicions del servei%2$s.", - "Add to your Nextcloud" : "Afegiu al vostre NextCloud", - "Sharing %s failed because the back end does not support sciencemesh shares" : "S'ha produït un error en compartir %s perquè el rerefons no admet comparticions de sciencemesh", - "One or more of your shares will expire tomorrow" : "Una o més de les teves compartició caducaran demà", - "Science Mesh" : "Science Mesh", - "Error generating password from password_policy" : "S'ha produït un error en generar la contrasenya des de password_policy" + "Select or drop files" : "Seleccioneu o deixeu anar fitxers", + "Uploading files" : "S'estan pujant els fitxers", + "Uploaded files:" : "Fitxers pujats:", + "By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.", + "Add to your Nextcloud" : "Afegeix al Nextcloud", + "Sharing %s failed because the back end does not support sciencemesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", + "One or more of your shares will expire tomorrow" : "Una o més dels vostres elements compartits caducaran demà", + "Science Mesh" : "ScienceMesh", + "Error generating password from password_policy" : "S'ha produït un error en generar la contrasenya a partir de password_policy" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index b3202dc601f..539cff80fb0 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -1,276 +1,278 @@ { "translations": { - "Shared with you" : "Compartit amb tu", - "Nothing shared with you yet" : "No se us ha compartit res encara", - "Files and folders others share with you will show up here" : "Els fitxers i carpetes que altres us comparteixin es mostraran aquí", - "Shared with others" : "Heu compartit amb altres", - "Nothing shared yet" : "No s'ha compartit res, encara", + "Shared with you" : "Compartit amb vós", + "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", + "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", + "Shared with others" : "Compartit amb altres", + "Nothing shared yet" : "Encara no heu compartit res", "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", - "Shared by link" : "Compartit amb enllaç", - "No shared links" : "No hi ha enllaços compartits", - "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu mitjançant un enllaç es mostraran aquí", - "Deleted shares" : "Comparticions suprimides", - "No deleted shares" : "No hi ha cap compartició suprimida", - "Shares you deleted will show up here" : "Les comparticions que heu suprimit es mostraran aquí", - "Pending shares" : "Comparticions pendents", - "No pending shares" : "Sense comparticions pendents", - "Shares you have received but not confirmed will show up here" : "Les comparticions que heu rebut però no confirmades es mostraran aquí", - "Shares" : "Comparticions", - "No shares" : "No hi ha comparticions", - "Shares will show up here" : "Les comparticions es mostraran aquí", + "Shared by link" : "Compartit amb un enllaç", + "No shared links" : "No hi ha cap enllaç compartit", + "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", + "Deleted shares" : "Suprimit", + "No deleted shares" : "No hi ha cap element compartit suprimit", + "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", + "Pending shares" : "Pendent", + "No pending shares" : "No hi ha cap element compartit pendent", + "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", + "Shares" : "Element compartits", + "No shares" : "No hi ha cap element compartit", + "Shares will show up here" : "Els elements compartits es mostraran aquí", "Restore" : "Restaura", - "Restore share" : "Restaura una compartició", - "Something happened. Unable to restore the share." : "Alguna cosa ha passat. No es pot restaurar la compartició.", - "Accept share" : "Accepta compartició", - "Something happened. Unable to accept the share." : "Ha passat alguna cosa. No es pot acceptar la compartició.", - "Reject share" : "Rebutja la compartició", - "Something happened. Unable to reject the share." : "Ha passat alguna cosa. No es pot rebutjar la compartició.", + "Restore share" : "Restaura l'element compartit", + "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", + "Accept share" : "Accepta l'element compartit", + "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", + "Reject share" : "Rebutja l'element compartit", + "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", "Waiting…" : "S'està esperant…", "error" : "error", - "finished" : "finalitzat", - "This will stop your current uploads." : "Això aturarà les càrregues actuals.", + "finished" : "ha finalitzat", + "This will stop your current uploads." : "Això aturarà les pujades actuals.", "Move or copy" : "Mou o copia", - "Download" : "Baixada", + "Download" : "Baixa", "Delete" : "Suprimeix", - "You can upload into this folder" : "Podeu pujar dins d'aquesta carpeta", + "You can upload into this folder" : "Podeu pujar elements a aquesta carpeta", "Terms of service" : "Condicions del servei", - "Show list view" : "Mostra en vista de llista", - "Show grid view" : "Mostra en vista de graella", + "Show list view" : "Mostra la visualització de llista", + "Show grid view" : "Mostra la visualització de graella", "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "L'URL del servidor no és vàlida", "Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud", "No expiration date set" : "No s'ha establert cap data de caducitat", "Shared by" : "Compartit per", "File shares" : "Fitxers compartits", - "Downloaded via public link" : "Descarregat mitjançant enllaç públic", - "Downloaded by {email}" : "Descarregat per {email}", - "{file} downloaded via public link" : "{file} descarregat mitjançant enllaç públic", - "{email} downloaded {file}" : "{email} descarregat {file}", - "Shared with group {group}" : "Compartit amb el grup {group}", - "Removed share for group {group}" : "S'ha suprimit la compartició per al grup {group}", - "{actor} shared with group {group}" : "{actor} ha compartit amb el grup {group}", - "{actor} removed share for group {group}" : "{actor} ha suprimit la participació del grup {grup}", - "Share for group {group} expired" : "Ha caducat la compartició per al grup {group}", + "Downloaded via public link" : "S'ha baixat mitjançant un enllaç públic", + "Downloaded by {email}" : "{email} l'ha baixat", + "{file} downloaded via public link" : "S'ha baixat {file} mitjançant un enllaç públic", + "{email} downloaded {file}" : "{email} ha baixat {file}", + "Shared with group {group}" : "S'ha compartit amb el grup {group}", + "Removed share for group {group}" : "S'ha deixat de compartir amb el grup {group}", + "{actor} shared with group {group}" : "{actor} l'ha compartit amb el grup {group}", + "{actor} removed share for group {group}" : "{actor} l'ha deixat de compartir amb el grup {grup}", + "Share for group {group} expired" : "Ha caducat l'ús compartit per al grup {group}", "You shared {file} with group {group}" : "Heu compartit {file} amb el grup {group}", "You removed group {group} from {file}" : "Heu suprimit el grup {group} de {file}", "{actor} shared {file} with group {group}" : "{actor} ha compartit {file} amb el grup {group}", "{actor} removed group {group} from {file}" : "{actor} ha suprimit el grup {group} de {file}", - "Share for file {file} with group {group} expired" : "Ha caducat la compartició per al fitxer {file} amb el grup {group}", - "Shared as public link" : "Compartit com a enllaç públic", + "Share for file {file} with group {group} expired" : "Ha caducat l'ús compartit per al fitxer {file} amb el grup {group}", + "Shared as public link" : "S'ha compartit amb un enllaç públic", "Removed public link" : "S'ha suprimit l'enllaç públic", "Public link expired" : "L'enllaç públic ha caducat", - "{actor} shared as public link" : "{actor} ha compartit com a enllaç públic", + "{actor} shared as public link" : "{actor} l'ha compartit amb un enllaç públic", "{actor} removed public link" : "{actor} ha suprimit l'enllaç públic", "Public link of {actor} expired" : "L'enllaç públic de {actor} ha caducat", - "You shared {file} as public link" : "Heu compartit {file} com a enllaç públic", + "You shared {file} as public link" : "Heu compartit {file} amb un enllaç públic", "You removed public link for {file}" : "Heu suprimit l'enllaç públic per a {file}", - "Public link expired for {file}" : "L'enllaç públic ha caducat per {file}", - "{actor} shared {file} as public link" : "{actor} ha compartit {file} com a enllaç públic", + "Public link expired for {file}" : "L'enllaç públic per a {file} ha caducat", + "{actor} shared {file} as public link" : "{actor} ha compartit {file} amb un enllaç públic", "{actor} removed public link for {file}" : "{actor} ha suprimit l'enllaç públic per a {file}", - "Public link of {actor} for {file} expired" : "L'enllaç públic de {actor} per {file} ha caducat", - "{user} accepted the remote share" : "{usuari} ha acceptat la compartició remota", - "{user} declined the remote share" : "{usuari} ha rebutjat la compartició remota", - "You received a new remote share {file} from {user}" : "Heu rebut una nova compartició remota {file} de {user}", - "{user} accepted the remote share of {file}" : "{usuari} ha acceptat la compartició remota de {file}", - "{user} declined the remote share of {file}" : "{usuari} ha rebutjat la compartició remota de {file}", - "{user} unshared {file} from you" : "{user} us ha deixat de compartir {file}", - "Shared with {user}" : "Compartit amb {user}", - "Removed share for {user}" : "S'ha suprimit la compartició per {user}", + "Public link of {actor} for {file} expired" : "L'enllaç públic de {actor} per a {file} ha caducat", + "{user} accepted the remote share" : "{usuari} ha acceptat l'element compartit remot", + "{user} declined the remote share" : "{usuari} ha rebutjat l'element compartit remot", + "You received a new remote share {file} from {user}" : "Heu rebut l'element compartit nou {file} de {user}", + "{user} accepted the remote share of {file}" : "{usuari} ha acceptat l'element compartit remot {file}", + "{user} declined the remote share of {file}" : "{usuari} ha rebutjat l'element compartit remot {file}", + "{user} unshared {file} from you" : "{user} ha deixat de compartir {file} amb vós", + "Shared with {user}" : "S'ha compartit amb {user}", + "Removed share for {user}" : "S'ha deixat de compartir amb {user}", "You removed yourself" : "Us heu suprimit", - "{actor} removed themselves" : "{actor} s'ha suprimit ell mateix", - "{actor} shared with {user}" : "{actor} ha compartit amb {usuari}", - "{actor} removed share for {user}" : "{actor} ha suprimit la compartició per {user}", - "Shared by {actor}" : "Compartit per {actor}", - "{actor} removed share" : "{actor} ha suprimit la compartició", - "Share for {user} expired" : "Ha caducat la compartició per a {user}", - "Share expired" : "La compartició ha caducat", + "{actor} removed themselves" : "{actor} s'ha suprimit", + "{actor} shared with {user}" : "{actor} l'ha compartit amb {usuari}", + "{actor} removed share for {user}" : "{actor} l'ha deixat de compartir amb {user}", + "Shared by {actor}" : "{actor} l'ha compartit", + "{actor} removed share" : "{actor} l'ha deixat de compartir", + "Share for {user} expired" : "Ha caducat l'ús compartit per a {user}", + "Share expired" : "L'element compartit ha caducat", "You shared {file} with {user}" : "Heu compartit {file} amb {user}", "You removed {user} from {file}" : "Heu suprimit {user} de {file}", "You removed yourself from {file}" : "Us heu suprimit de {file}", - "{actor} removed themselves from {file}" : "{actor} s'ha suprimit ell mateix de {file}", + "{actor} removed themselves from {file}" : "{actor} s'ha suprimit de {file}", "{actor} shared {file} with {user}" : "{actor} ha compartit {file} amb {usuari}", "{actor} removed {user} from {file}" : "{actor} ha suprimit {user} de {file}", - "{actor} shared {file} with you" : "{actor} us ha compartit {file}", - "{actor} removed you from the share named {file}" : "{actor} us ha suprimit de la compartició anomenada {file}", - "Share for file {file} with {user} expired" : "Ha caducat la compartició per al fitxer {file} amb {user}", - "Share for file {file} expired" : "Ha caducat la compartició per al fitxer {file}", - "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "S'ha <strong>descarregat</strong> un fitxer compartit o carpeta compartida per correu o per enllaç públic", + "{actor} shared {file} with you" : "{actor} ha compartit {file} amb vós", + "{actor} removed you from the share named {file}" : "{actor} us ha suprimit de l'element compartit {file}", + "Share for file {file} with {user} expired" : "Ha caducat l'ús compartit del fitxer {file} per a {user}", + "Share for file {file} expired" : "Ha caducat l'ús compartit per al fitxer {file}", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "S'ha <strong>baixat</strong> un fitxer o una carpeta compartit per correu o per enllaç públic", "A file or folder was shared from <strong>another server</strong>" : "S'ha compartit un fitxer o una carpeta d'un <strong>altre servidor</strong>", "Files" : "Fitxers", "A file or folder has been <strong>shared</strong>" : "S'ha <strong>compartit</strong> un fitxer o una carpeta", "Shared link" : "Enllaç compartit", - "Wrong share ID, share does not exist" : "Identificador de compartició incorrecte, la compartició no existeix", - "Could not delete share" : "No s'ha pogut suprimir la compartició", - "Please specify a file or folder path" : "Si us plau, especifiqueu un camí de fitxer o carpeta", - "Wrong path, file/folder does not exist" : "Camí incorrecte, fitxer/carpeta no existeix", - "Could not create share" : "No s'ha pogut crear la compartició", - "Invalid permissions" : "Permisos no vàlids", - "Please specify a valid user" : "Si us plau, especifiqueu un usuari vàlid", - "Group sharing is disabled by the administrator" : "L'administrador ha desactivat l'opció per compartir grups", - "Please specify a valid group" : "Si us plau, especifiqueu un grup vàlid", - "Public link sharing is disabled by the administrator" : "L'administrador ha desactivat l'intercanvi d'enllaços públics", - "Public upload disabled by the administrator" : "S'ha desactivat la càrrega pública per part de l'administrador", - "Public upload is only possible for publicly shared folders" : "La càrrega pública només és possible per a carpetes compartides públicament", - "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "No s'ha pogut compartir %s enviant la contrasenya per Nextcloud Talk perquè Nextcloud Talk no està activat", - "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "No s'ha pogut compartir %1$s perquè l'aplicació de fons no permet comparticions de tipus %2$s", - "Please specify a valid federated user ID" : "Especifiqueu un identificador d'usuari federat vàlid", + "Wrong share ID, share does not exist" : "L'ID de l'element compartit és incorrecte, l'element compartit no existeix", + "Could not delete share" : "No s'ha pogut suprimir l'element compartit", + "Please specify a file or folder path" : "Especifiqueu un camí de fitxer o carpeta", + "Wrong path, file/folder does not exist" : "El camí és incorrecte, el fitxer o la carpeta no existeix", + "Could not create share" : "No s'ha pogut crear l'element compartit", + "Invalid permissions" : "Els permisos no són vàlids", + "Please specify a valid user" : "Especifiqueu un usuari vàlid", + "Group sharing is disabled by the administrator" : "L'administrador ha inhabilitat l'ús compartit en grup", + "Please specify a valid group" : "Especifiqueu un grup vàlid", + "Public link sharing is disabled by the administrator" : "L'administrador ha inhabilitat l'ús compartit amb enllaç públic", + "Public upload disabled by the administrator" : "L'administrador ha inhabilitat la pujada pública", + "Public upload is only possible for publicly shared folders" : "La pujada pública només és possible per a carpetes compartides públicament", + "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "No s'ha pogut compartir %s enviant la contrasenya per Converses del Nextcloud perquè l'aplicació Converses del Nextcloud no està habilitada", + "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "No s'ha pogut compartir %1$s perquè el rerefons no permet elements compartits de tipus %2$s", + "Please specify a valid federated user ID" : "Especifiqueu un ID d'usuari federat vàlid", "Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser AAAA-MM-DD", - "Please specify a valid federated group ID" : "Especifiqueu un identificador de grup federat vàlid", - "You cannot share to a Circle if the app is not enabled" : "No podeu compartir en un cercle si l'aplicació no està activada", + "Please specify a valid federated group ID" : "Especifiqueu un ID de grup federat vàlid", + "You cannot share to a Circle if the app is not enabled" : "No podeu compartir-ho en un cercle si l'aplicació no està habilitada", "Please specify a valid circle" : "Especifiqueu un cercle vàlid", - "Sharing %s failed because the back end does not support room shares" : "No s'ha pogut compartir %s perquè l'aplicació de fons no permet compartir canals", - "Unknown share type" : "Tipus de compartició desconegut", - "Not a directory" : "No és un directori", - "Could not lock node" : "No s'ha pogut bloquejar el node", - "Could not lock path" : "No s'ha pogut bloquejar la ruta d'accés", - "Wrong or no update parameter given" : "S'ha donat un paràmetre o un paràmetre d'actualització incorrecte", - "Share must at least have READ or CREATE permissions" : "La compartició ha de tenir almenys permisos LLEGIR o CREAR", - "Share must have READ permission if UPDATE or DELETE permission is set" : "La compartició ha de tenir permís de LECTURA si s'ha definit el permís ACTUALITZAR o ELIMINAR", - "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "No s'ha pogut “Enviar la contrasenya per Nextcloud Talk/Parla” per compartir un fitxer o una carpeta perquè Nextcloud Talk/Parla no està habilitat.", + "Sharing %s failed because the back end does not support room shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit en sales", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", + "Unknown share type" : "Tipus d'element compartit desconegut", + "Not a directory" : "No és una carpeta", + "Could not lock node" : "No s'ha pogut blocar el node", + "Could not lock path" : "No s'ha pogut blocar la ruta d'accés", + "Wrong or no update parameter given" : "S'ha proporcionat un paràmetre d'actualització incorrecte o no s'ha proporcionat", + "Share must at least have READ or CREATE permissions" : "L'element compartit ha de tenir almenys permisos de lectura o creació", + "Share must have READ permission if UPDATE or DELETE permission is set" : "L'element compartit ha de tenir permís de lectura si s'ha establert permís d'actualització o supressió", + "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "No s'ha pogut enviar la contrasenya per Converses del Nextcloud per a compartir un fitxer o una carpeta perquè l'aplicació Converses del Nextcloud no està habilitada.", "shared by %s" : "compartit per %s", - "Download all files" : "Descarrega tots els fitxers", + "Download all files" : "Baixa tots els fitxers", "Direct link" : "Enllaç directe", - "Add to your %s" : "Afegeix al teu %s", - "Share API is disabled" : "Compartir l'API està desactivat", - "File sharing" : "Compartició de fitxers", - "Share will expire tomorrow" : "La compartició caducarà demà", - "Your share of {node} will expire tomorrow" : "La teva compartició de {node} caducarà demà", - "You received {share} as a share by {user}" : "Heu rebut {share} com a compartició per {user}", - "You received {share} to group {group} as a share by {user}" : "Heu rebut {share} pel grup {group} com a compartició per {user}", + "Add to your %s" : "Afegeix al %s", + "Share API is disabled" : "L'API d'ús compartit està inhabilitada", + "File sharing" : "Fitxers compartits", + "Share will expire tomorrow" : "L'ús compartit caducarà demà", + "Your share of {node} will expire tomorrow" : "L'ús compartit de {node} caducarà demà", + "You received {share} as a share by {user}" : "Heu rebut l'element compartit {share} de {user}", + "You received {share} to group {group} as a share by {user}" : "Heu rebut l'element compartit {share} del grup {group} de {user}", "Accept" : "Accepta", "Reject" : "Rebutja", - "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers a Nextcloud. Si està activat, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris aplicables poden compartir fitxers i carpetes amb altres usuaris i grups de Nextcloud. A més, si l’administrador activa la funció d’enllaç compartit, es pot fer servir un enllaç extern per compartir fitxers amb altres usuaris fora de Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i activar la compartició de servidor a servidor mitjançant enllaços compartits, així com la compartició de dispositius mòbils.\nDesactivant la funcionalitat suprimirà els fitxers compartits i les carpetes del servidor per a tots els destinataris compartits i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació a la documentació de Nextcloud.", + "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers en el Nextcloud. Si està habilitada, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris amb permís poden compartir fitxers i carpetes amb altres usuaris i grups del Nextcloud. A més, si l'administrador activa la característica de compartir enllaços, es poden utilitzar enllaços externs per a compartir fitxers amb altres usuaris fora del Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i habilitar l'ús compartit entre servidors mitjançant enllaços d'ús compartit, així com l'ús compartit des de dispositius mòbils.\nSi inhabiliteu la característica, se suprimiran els fitxers i les carpetes compartides del servidor per a tots els destinataris i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació en la documentació del Nextcloud.", "Sharing" : "Ús compartit", - "Accept user and group shares by default" : "Acceptar les comparticions d'usuari i de grup de manera predeterminada", + "Accept user and group shares by default" : "Accepta els elements compartits d'usuari i en grup per defecte", "Error while toggling options" : "S'ha produït un error en canviar les opcions", - "Set default folder for accepted shares" : "Estableix la carpeta predeterminada per a les comparticions acceptades", - "Reset" : "Restableix", - "Reset folder to system default" : "Carpeta de documents per defecte del sistema", - "Choose a default folder for accepted shares" : "Trieu una carpeta predeterminada per als recursos compartits acceptats", + "Set default folder for accepted shares" : "Estableix la carpeta per defecte per als elements compartits acceptats", + "Reset" : "Reinicialitza", + "Reset folder to system default" : "Reinicialitza la carpeta per defecte del sistema", + "Choose a default folder for accepted shares" : "Trieu una carpeta per defecte per als elements compartits acceptats", "Invalid path selected" : "El camí seleccionat no és vàlid", "Unknown error" : "Error desconegut", "Allow editing" : "Permet l'edició", "Read only" : "Només de lectura", "Allow upload and editing" : "Permet la pujada i l'edició", - "File drop (upload only)" : "Deixa anar el fitxer (només càrrega)", + "File drop (upload only)" : "Tramesa de fitxers (només pujada)", "Custom permissions" : "Permisos personalitzats", - "Read" : "Llegeix", + "Read" : "Lectura", "Upload" : "Pujada", - "Edit" : "Edita", + "Edit" : "Edició", "Bundled permissions" : "Permisos agrupats", - "Allow creating" : "Permet crear", - "Allow deleting" : "Permet suprimir", - "Allow resharing" : "Permet compartir de nou", - "Expiration date enforced" : "Data de venciment obligatòria", - "Set expiration date" : "Establiu una data de caducitat", + "Allow creating" : "Permet la creació", + "Allow deleting" : "Permet la supressió", + "Allow resharing" : "Permet l'ús compartit derivat", + "Expiration date enforced" : "Data de caducitat", + "Set expiration date" : "Estableix la data de caducitat", "Enter a date" : "Introduïu una data", - "Note to recipient" : "Nota al destinatari", + "Note to recipient" : "Nota per al destinatari", "Unshare" : "Deixa de compartir", "group" : "grup", "conversation" : "conversa", - "remote" : "remot", + "remote" : "element remot", "remote group" : "grup remot", "guest" : "convidat", - "Shared with the group {user} by {owner}" : "Compartit amb el grup {user} per {owner}", - "Shared with the conversation {user} by {owner}" : "Compartit amb la conversa {usuari} per {owner}", - "Shared with {user} by {owner}" : "Compartit amb {user} per {owner}", + "Shared with the group {user} by {owner}" : "{owner} l'ha compartit amb el grup {user}", + "Shared with the conversation {user} by {owner}" : "{owner} l'ha compartit amb la conversa {usuari}", + "Shared with {user} by {owner}" : "{owner} l'ha compartit amb {user}", "Allow download" : "Permet la baixada", - "Added by {initiator}" : "Afegit per {initiator}", - "Via “{folder}”" : "Mitjançant “{folder}”", + "Added by {initiator}" : "{initiator} l'ha afegit", + "Via “{folder}”" : "Mitjançant «{folder}»", "Internal link" : "Enllaç intern", - "Cannot copy, please copy the link manually" : "No es pot copiar, si us plau, copieu l'enllaç manualment", + "Cannot copy, please copy the link manually" : "No es pot copiar; copieu l'enllaç manualment", "Copy internal link to clipboard" : "Copia l'enllaç intern al porta-retalls", - "Only works for users with access to this folder" : "Només funciona per a usuaris amb accés a aquesta carpeta", - "Only works for users with access to this file" : "Només funciona per a usuaris amb accés a aquest fitxer", - "Link copied" : "Enllaç copiat", - "Please enter the following required information before creating the share" : "Introduïu la informació necessària següent abans de crear la compartició", - "Password protection (enforced)" : "Protecció amb contrasenya (obligatòri)", + "Only works for users with access to this folder" : "Només funciona per als usuaris amb accés a aquesta carpeta", + "Only works for users with access to this file" : "Només funciona per als usuaris amb accés a aquest fitxer", + "Link copied" : "S'ha copiat l'enllaç", + "Please enter the following required information before creating the share" : "Introduïu la informació obligatòria següent abans de crear l'element compartit", + "Password protection (enforced)" : "Protecció amb contrasenya (obligatori)", "Password protection" : "Protecció amb contrasenya", "Enter a password" : "Introduïu una contrasenya", - "Expiration date (enforced)" : "Data de venciment (obligatòri)", - "Create share" : "Crea una compartició", + "Expiration date (enforced)" : "Data de venciment (obligatori)", + "Create share" : "Crea l'element compartit", "Cancel" : "Cancel·la", - "Share label" : "Comparteix l'etiqueta", + "Share label" : "Etiqueta d'ús compartit", "Hide download" : "Amaga la baixada", "Password protect" : "Protegeix amb contrasenya", - "Password expires {passwordExpirationTime}" : "La contrasenya caduca {passwordExpirationTime}", - "Password expired" : "La contrasenya ha expirat", + "Password expires {passwordExpirationTime}" : "La contrasenya caduca el {passwordExpirationTime}", + "Password expired" : "La contrasenya ha caducat", "Video verification" : "Verificació de vídeo", - "Enter a note for the share recipient" : "Introduïu una nota per al destinatari de la compartició", + "Enter a note for the share recipient" : "Introduïu una nota per al destinatari de l'element compartit", "Add another link" : "Afegeix un altre enllaç", - "Create a new share link" : "Crear un enllaç de compartició nou", + "Create a new share link" : "Crear un enllaç d'ús compartit nou", "{shareWith} by {initiator}" : "{shareWith} per {initiator}", - "Shared via link by {initiator}" : "Compartit a través de l'enllaç per {initiator}", - "Mail share ({label})" : "Compartició de correu ({label})", - "Share link ({label})" : "Comparteix l'enllaç ({label})", - "Share link ({index})" : "Comparteix l'enllaç ({index})", - "Share link" : "Enllaç de compartició", - "Actions for \"{title}\"" : "Accions per a \"{title}\"", - "Copy public link of \"{title}\" to clipboard" : "Copia l'enllaç públic de \"{title}\" al porta-retalls", - "Error, please enter proper password and/or expiration date" : "Error, introduïu la contrasenya i/o data de caducitat adequades", + "Shared via link by {initiator}" : "Compartit amb un enllaç per {initiator}", + "Mail share ({label})" : "Comparteix per correu ({label})", + "Share link ({label})" : "Comparteix un enllaç ({label})", + "Share link ({index})" : "Comparteix un enllaç ({index})", + "Share link" : "Comparteix un enllaç", + "Actions for \"{title}\"" : "Accions per a «{title}»", + "Copy public link of \"{title}\" to clipboard" : "Copia l'enllaç públic de «{title}» al porta-retalls", + "Error, please enter proper password and/or expiration date" : "S'ha produït un error, introduïu la contrasenya o la data de caducitat adequada", "Link share created" : "S'ha creat l'enllaç compartit", - "Error while creating the share" : "S'ha produït un error en crear la compartició", - "Search for share recipients" : "Cerca destinataris compartits", - "No recommendations. Start typing." : "No hi ha recomanacions. Comenceu a escriure.", - "Resharing is not allowed" : "No està permesa la re-compartició", - "Name or email …" : "Nom o correu …", - "Name, email, or Federated Cloud ID …" : "Nom, correu o ID de Núvol federat …", - "Searching …" : "Cercant …", - "No elements found." : "No s’han trobat elements.", + "Error while creating the share" : "S'ha produït un error en crear l'element compartit", + "Search for share recipients" : "Cerqueu destinataris de l'element compartit", + "No recommendations. Start typing." : "No hi ha cap recomanació. Comenceu a escriure.", + "Resharing is not allowed" : "No es permet l'ús compartit derivat", + "Name or email …" : "Nom o adreça electrònica…", + "Name, email, or Federated Cloud ID …" : "Nom, adreça electrònica o ID de núvol federat…", + "Searching …" : "S'està cercant…", + "No elements found." : "No s'ha trobat cap element.", "Search globally" : "Cerca globalment", "Guest" : "Convidat", "Group" : "Grup", - "Email" : "Correu", + "Email" : "Adreça electrònica", "Circle" : "Cercle", - "Talk conversation" : "Conversa de Talk", - "Deck board" : "Tauler de Deck", + "Talk conversation" : "Conversa", + "Deck board" : "Tauler de Targetes", + "ScienceMesh" : "ScienceMesh", "on {server}" : "a {server}", - "Others with access" : "Altres amb accés", + "Others with access" : "Altres usuaris amb accés", "No other users with access found" : "No s'ha trobat cap altre usuari amb accés", - "Toggle list of others with access to this directory" : "Commuta la llista d'altres persones amb accés a aquest directori", - "Toggle list of others with access to this file" : "Commuta la llista d'altres persones amb accés a aquest fitxer", - "Unable to fetch inherited shares" : "No s'han pogut obtenir les comparticions heretades", - "Unable to load the shares list" : "No es pot carregar la llista de comparticions", - "Expires {relativetime}" : "Caduca a {relativetime}", - "this share just expired." : "aquesta compartició acaba de caducar.", - "Shared with you by {owner}" : "Compartit amb tu per {owner}", - "Link to a file" : "Enllaça a un fitxer", - "Error creating the share: {errorMessage}" : "S'ha produït un error en crear la compartició: {errorMessage}", - "Error creating the share" : "S'ha produït un error en crear la compartició", - "Error updating the share: {errorMessage}" : "Error en actualitzar la compartició: {errorMessage}", - "Error updating the share" : "S'ha produït un error en actualitzar la compartició", - "File \"{path}\" has been unshared" : "El fitxer “{path}” s’ha deixat de compartir", - "Folder \"{path}\" has been unshared" : "La carpeta \"{path}\" s'ha deixat de compartir", - "Share {propertyName} saved" : "Comparteix {propertyName} desat", - "Shared" : "Compartit", + "Toggle list of others with access to this directory" : "Canvia la llista d'altres usuaris amb accés a aquesta carpeta", + "Toggle list of others with access to this file" : "Canvia la llista d'altres usuaris amb accés a aquest fitxer", + "Unable to fetch inherited shares" : "No s'han pogut obtenir els elements compartits heretats", + "Unable to load the shares list" : "No s'ha pogut carregar la llista d'elements compartits", + "Expires {relativetime}" : "Caduca {relativetime}", + "this share just expired." : "aquest element compartit acaba de caducar.", + "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", + "Link to a file" : "Enllaç a un fitxer", + "Error creating the share: {errorMessage}" : "S'ha produït un error en crear l'element compartit: {errorMessage}", + "Error creating the share" : "S'ha produït un error en crear l'element compartit", + "Error updating the share: {errorMessage}" : "S'ha produït un error en actualitzar l'element compartit: {errorMessage}", + "Error updating the share" : "S'ha produït un error en actualitzar l'element compartit", + "File \"{path}\" has been unshared" : "El fitxer «{path}» s'ha deixat de compartir", + "Folder \"{path}\" has been unshared" : "La carpeta «{path}» s'ha deixat de compartir", + "Share {propertyName} saved" : "S'ha desat l'element compartit {propertyName}", + "Shared" : "S'ha compartit", "Share" : "Comparteix", - "Shared with" : "Compartit amb", + "Shared with" : "S'ha compartit amb", "Password created successfully" : "La contrasenya s'ha creat correctament", - "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya des de la política de contrasenyes", - "Shared with you and the group {group} by {owner}" : "Compartit amb tu i amb el grup {group} per {owner}", - "Shared with you and {circle} by {owner}" : "Compartit amb tu i {circle} per {owner}", - "Shared with you and the conversation {conversation} by {owner}" : "Compartit amb tu i amb la conversa {conversation} per {owner}", - "Shared with you in a conversation by {owner}" : "Compartit amb tu en una conversa per {owner}", - "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya a partir de la política de contrasenyes", + "Shared with you and the group {group} by {owner}" : "{owner} l'ha compartit amb vós i amb el grup {group}", + "Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}", + "Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}", + "Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa", + "No entries found in this folder" : "No hi ha cap entrada en aquesta carpeta", "Name" : "Nom", - "Share time" : "Temps de compartició", + "Share time" : "Temps d'ús compartit", "Expiration date" : "Data de caducitat", - "Sorry, this link does not seem to work anymore." : "Ho sentim, sembla que aquest enllaç ja no funciona.", + "Sorry, this link does not seem to work anymore." : "Sembla que aquest enllaç ja no funciona.", "Reasons might be:" : "Les raons podrien ser:", - "the item was removed" : "s'ha suprimit l'element", - "the link expired" : "l'enllaç ha vençut", - "sharing is disabled" : "s'ha desactivat la compartició", - "For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.", - "Share note" : "Comparteix nota", - "Upload files to %s" : "Carrega fitxers a %s", + "the item was removed" : "S'ha suprimit l'element.", + "the link expired" : "L'enllaç ha caducat.", + "sharing is disabled" : "S'ha inhabilitat l'ús compartit.", + "For more info, please ask the person who sent this link." : "Per a més informació, contacteu amb qui us hagi enviat l'enllaç.", + "Share note" : "Nota de l'element compartit", + "Upload files to %s" : "Puja fitxers a %s", "Note" : "Nota", - "Select or drop files" : "Selecciona o deixa anar els fitxers", - "Uploading files" : "Càrregant fitxers", - "Uploaded files:" : "Fitxers carregats:", - "By uploading files, you agree to the %1$sterms of service%2$s." : "Si carregueu els fitxers accepteu les %1$scondicions del servei%2$s.", - "Add to your Nextcloud" : "Afegiu al vostre NextCloud", - "Sharing %s failed because the back end does not support sciencemesh shares" : "S'ha produït un error en compartir %s perquè el rerefons no admet comparticions de sciencemesh", - "One or more of your shares will expire tomorrow" : "Una o més de les teves compartició caducaran demà", - "Science Mesh" : "Science Mesh", - "Error generating password from password_policy" : "S'ha produït un error en generar la contrasenya des de password_policy" + "Select or drop files" : "Seleccioneu o deixeu anar fitxers", + "Uploading files" : "S'estan pujant els fitxers", + "Uploaded files:" : "Fitxers pujats:", + "By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.", + "Add to your Nextcloud" : "Afegeix al Nextcloud", + "Sharing %s failed because the back end does not support sciencemesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", + "One or more of your shares will expire tomorrow" : "Una o més dels vostres elements compartits caducaran demà", + "Science Mesh" : "ScienceMesh", + "Error generating password from password_policy" : "S'ha produït un error en generar la contrasenya a partir de password_policy" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js index d62d14ec6e0..21a1b7fd08e 100644 --- a/apps/files_sharing/l10n/fa.js +++ b/apps/files_sharing/l10n/fa.js @@ -177,7 +177,7 @@ OC.L10N.register( "Create share" : "ساختن اشتراک", "Cancel" : "لغو", "Hide download" : "پنهان کردن بارگیری", - "Password protect" : "نگهداری کردن رمز عبور", + "Password protect" : "محافظت با گذرواژه", "Video verification" : "تأیید صحت ویدیو", "Enter a note for the share recipient" : "برای دریافت کننده اشتراک یک یادداشت وارد کنید", "Add another link" : "پیوند دیگری اضافه کنید", diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json index 9d4094836d6..b6dc2d456ca 100644 --- a/apps/files_sharing/l10n/fa.json +++ b/apps/files_sharing/l10n/fa.json @@ -175,7 +175,7 @@ "Create share" : "ساختن اشتراک", "Cancel" : "لغو", "Hide download" : "پنهان کردن بارگیری", - "Password protect" : "نگهداری کردن رمز عبور", + "Password protect" : "محافظت با گذرواژه", "Video verification" : "تأیید صحت ویدیو", "Enter a note for the share recipient" : "برای دریافت کننده اشتراک یک یادداشت وارد کنید", "Add another link" : "پیوند دیگری اضافه کنید", diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index e0362b8cce6..e8de67ab031 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -147,7 +147,7 @@ OC.L10N.register( "Error while toggling options" : "Produciuse un erro ao alternar as opcións", "Set default folder for accepted shares" : "Establece o cartafol predeterminado para os recursos compartidos aceptados", "Reset" : "Restabelecer", - "Reset folder to system default" : "Restablecer o cartafol ao predeterminado do sistema", + "Reset folder to system default" : "Restabelecer o cartafol ao predeterminado do sistema", "Choose a default folder for accepted shares" : "Escolla un cartafol predeterminado para os recursos compartidos aceptados", "Invalid path selected" : "Seleccionou unha ruta incorrecta.", "Unknown error" : "Erro descoñecido", diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index 94ed8d57852..211c297aa50 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -145,7 +145,7 @@ "Error while toggling options" : "Produciuse un erro ao alternar as opcións", "Set default folder for accepted shares" : "Establece o cartafol predeterminado para os recursos compartidos aceptados", "Reset" : "Restabelecer", - "Reset folder to system default" : "Restablecer o cartafol ao predeterminado do sistema", + "Reset folder to system default" : "Restabelecer o cartafol ao predeterminado do sistema", "Choose a default folder for accepted shares" : "Escolla un cartafol predeterminado para os recursos compartidos aceptados", "Invalid path selected" : "Seleccionou unha ruta incorrecta.", "Unknown error" : "Erro descoñecido", diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js index a4a6eb05550..02e4cb2031f 100644 --- a/apps/files_sharing/l10n/hu.js +++ b/apps/files_sharing/l10n/hu.js @@ -120,6 +120,7 @@ OC.L10N.register( "You cannot share to a Circle if the app is not enabled" : "Nem tudja megosztani egy Kör számára, ha az alkalmazás nem engedélyezett", "Please specify a valid circle" : "Adjon meg egy érvényes Kört", "Sharing %s failed because the back end does not support room shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a szobamegosztásokat", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a ScienceMesh megosztásokat", "Unknown share type" : "Ismeretlen megosztástípus", "Not a directory" : "Nem könyvtár", "Could not lock node" : "Nem sikerült zárolni a csomópontot", @@ -225,6 +226,7 @@ OC.L10N.register( "Circle" : "Kör", "Talk conversation" : "Beszélgetés", "Deck board" : "Kártyatábla", + "ScienceMesh" : "ScienceMesh", "on {server}" : "{server} kiszolgálón", "Others with access" : "Mások, akik hozzáféréssel rendelkeznek", "No other users with access found" : "Nincs más felhasználó, aki hozzáféréssel rendelkezik", diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json index 0675c5ee2db..2bdd46013ba 100644 --- a/apps/files_sharing/l10n/hu.json +++ b/apps/files_sharing/l10n/hu.json @@ -118,6 +118,7 @@ "You cannot share to a Circle if the app is not enabled" : "Nem tudja megosztani egy Kör számára, ha az alkalmazás nem engedélyezett", "Please specify a valid circle" : "Adjon meg egy érvényes Kört", "Sharing %s failed because the back end does not support room shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a szobamegosztásokat", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a ScienceMesh megosztásokat", "Unknown share type" : "Ismeretlen megosztástípus", "Not a directory" : "Nem könyvtár", "Could not lock node" : "Nem sikerült zárolni a csomópontot", @@ -223,6 +224,7 @@ "Circle" : "Kör", "Talk conversation" : "Beszélgetés", "Deck board" : "Kártyatábla", + "ScienceMesh" : "ScienceMesh", "on {server}" : "{server} kiszolgálón", "Others with access" : "Mások, akik hozzáféréssel rendelkeznek", "No other users with access found" : "Nincs más felhasználó, aki hozzáféréssel rendelkezik", diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php index 506a2f83c2d..9e6c169e140 100644 --- a/apps/files_sharing/lib/External/Storage.php +++ b/apps/files_sharing/lib/External/Storage.php @@ -265,8 +265,9 @@ class Storage extends DAV implements ISharedStorage, IDisableEncryptionStorage, private function testRemoteUrl(string $url): bool { $cache = $this->memcacheFactory->createDistributed('files_sharing_remote_url'); - if ($cache->hasKey($url)) { - return (bool)$cache->get($url); + $cached = $cache->get($url); + if ($cached !== null) { + return (bool)$cached; } $client = $this->httpClient->newClient(); diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 943f14dc2bd..6cde9f82bec 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -117,8 +117,9 @@ class SharedMount extends MountPoint implements MoveableMount { $this->eventDispatcher->dispatchTyped($event); $parent = $event->getParent(); - if ($folderExistCache->hasKey($parent)) { - $parentExists = $folderExistCache->get($parent); + $cached = $folderExistCache->get($parent); + if ($cached) { + $parentExists = $cached; } else { $parentExists = $this->recipientView->is_dir($parent); $folderExistCache->set($parent, $parentExists); diff --git a/apps/files_trashbin/l10n/fi.js b/apps/files_trashbin/l10n/fi.js index 04c394844c8..84107f03c91 100644 --- a/apps/files_trashbin/l10n/fi.js +++ b/apps/files_trashbin/l10n/fi.js @@ -6,6 +6,7 @@ OC.L10N.register( "This application enables users to restore files that were deleted from the system." : "Tämä sovellus mahdollistaa käyttäjien palauttaa järjestelmästä poistamiaan tiedostoja.", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Tämä sovellus mahdollistaa käyttäjien palauttaa poistettuja tiedostoja. Se näyttää listan poistetuista tiedostoista nettikäyttöliittymässä ja tarjoaa mahdollisuudet palauttaa niitä takaisin käyttäjän hakemistoihin tai poistaa niitä lopullisesti. Tiedoston palauttaminen palauttaa myös sen versiohistorian, jos Versiot-sovellus on asennettuna. Jaetut tiedostot voidaan palauttaa samalla tavalla, mutta niiden jakamistilaa ei palauteta. Oletusarvoisesti poistetut tiedostot säilyvät roskakorissa 30 päivää.\nJotta käyttäjän tallennustila ei loppuisi, Poistetut tiedostot -sovellus käyttää enintään 50% käyttäjän vapaasta tallennustilasta poistetuille tiedostoille ja poistaa niitä vanhimmasta lähtien, jos raja ylittyy. Lisää tietoa on saatavilla Poistetut tiedostot -sovelluksen dokumentaatiosta.", "Restore" : "Palauta", + "List of files that have been deleted." : "Luettelo poistetuista tiedostoista.", "Deleted" : "Poistettu", "No deleted files" : "Ei poistettuja tiedostoja", "You will be able to recover deleted files from here" : "Voit palauttaa poistettuja tiedostoja tätä kautta", diff --git a/apps/files_trashbin/l10n/fi.json b/apps/files_trashbin/l10n/fi.json index 40123643f0d..c20fff2d8ef 100644 --- a/apps/files_trashbin/l10n/fi.json +++ b/apps/files_trashbin/l10n/fi.json @@ -4,6 +4,7 @@ "This application enables users to restore files that were deleted from the system." : "Tämä sovellus mahdollistaa käyttäjien palauttaa järjestelmästä poistamiaan tiedostoja.", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Tämä sovellus mahdollistaa käyttäjien palauttaa poistettuja tiedostoja. Se näyttää listan poistetuista tiedostoista nettikäyttöliittymässä ja tarjoaa mahdollisuudet palauttaa niitä takaisin käyttäjän hakemistoihin tai poistaa niitä lopullisesti. Tiedoston palauttaminen palauttaa myös sen versiohistorian, jos Versiot-sovellus on asennettuna. Jaetut tiedostot voidaan palauttaa samalla tavalla, mutta niiden jakamistilaa ei palauteta. Oletusarvoisesti poistetut tiedostot säilyvät roskakorissa 30 päivää.\nJotta käyttäjän tallennustila ei loppuisi, Poistetut tiedostot -sovellus käyttää enintään 50% käyttäjän vapaasta tallennustilasta poistetuille tiedostoille ja poistaa niitä vanhimmasta lähtien, jos raja ylittyy. Lisää tietoa on saatavilla Poistetut tiedostot -sovelluksen dokumentaatiosta.", "Restore" : "Palauta", + "List of files that have been deleted." : "Luettelo poistetuista tiedostoista.", "Deleted" : "Poistettu", "No deleted files" : "Ei poistettuja tiedostoja", "You will be able to recover deleted files from here" : "Voit palauttaa poistettuja tiedostoja tätä kautta", diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php index db6109e62f3..90f74e51e81 100644 --- a/apps/files_trashbin/lib/Trashbin.php +++ b/apps/files_trashbin/lib/Trashbin.php @@ -59,12 +59,12 @@ use OCP\Files\File; use OCP\Files\Folder; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; +use OCP\IConfig; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; use Psr\Log\LoggerInterface; class Trashbin { - // unit: percentage; 50% of available disk space/quota public const DEFAULTMAXSIZE = 50; @@ -191,7 +191,7 @@ class Trashbin { * @param string $owner * @param string $targetPath * @param $user - * @param integer $timestamp + * @param int $timestamp */ private static function copyFilesToUser($sourcePath, $owner, $targetPath, $user, $timestamp) { self::setUpTrash($owner); @@ -305,10 +305,7 @@ class Trashbin { $trashStorage->unlink($trashInternalPath); } - $config = \OC::$server->getConfig(); - $systemTrashbinSize = (int)$config->getAppValue('files_trashbin', 'trashbin_size', '-1'); - $userTrashbinSize = (int)$config->getUserValue($owner, 'files_trashbin', 'trashbin_size', '-1'); - $configuredTrashbinSize = ($userTrashbinSize < 0) ? $systemTrashbinSize : $userTrashbinSize; + $configuredTrashbinSize = static::getConfiguredTrashbinSize($owner); if ($configuredTrashbinSize >= 0 && $sourceInfo->getSize() >= $configuredTrashbinSize) { return false; } @@ -380,13 +377,26 @@ class Trashbin { return $moveSuccessful; } + private static function getConfiguredTrashbinSize(string $user): int|float { + $config = \OC::$server->get(IConfig::class); + $userTrashbinSize = $config->getUserValue($user, 'files_trashbin', 'trashbin_size', '-1'); + if (is_numeric($userTrashbinSize) && ($userTrashbinSize > -1)) { + return \OCP\Util::numericToNumber($userTrashbinSize); + } + $systemTrashbinSize = $config->getAppValue('files_trashbin', 'trashbin_size', '-1'); + if (is_numeric($systemTrashbinSize)) { + return \OCP\Util::numericToNumber($systemTrashbinSize); + } + return -1; + } + /** * Move file versions to trash so that they can be restored later * * @param string $filename of deleted file * @param string $owner owner user id * @param string $ownerPath path relative to the owner's home storage - * @param integer $timestamp when the file was deleted + * @param int $timestamp when the file was deleted */ private static function retainVersions($filename, $owner, $ownerPath, $timestamp) { if (\OCP\Server::get(IAppManager::class)->isEnabledForUser('files_versions') && !empty($ownerPath)) { @@ -647,7 +657,7 @@ class Trashbin { * @param string $user * @param int $timestamp of deletion time * - * @return int size of deleted files + * @return int|float size of deleted files */ public static function delete($filename, $user, $timestamp = null) { $userRoot = \OC::$server->getUserFolder($user)->getParent(); @@ -689,14 +699,11 @@ class Trashbin { } /** - * @param View $view * @param string $file * @param string $filename - * @param integer|null $timestamp - * @param string $user - * @return int + * @param ?int $timestamp */ - private static function deleteVersions(View $view, $file, $filename, $timestamp, $user) { + private static function deleteVersions(View $view, $file, $filename, $timestamp, string $user): int|float { $size = 0; if (\OCP\Server::get(IAppManager::class)->isEnabledForUser('files_versions')) { if ($view->is_dir('files_trashbin/versions/' . $file)) { @@ -752,26 +759,21 @@ class Trashbin { /** * calculate remaining free space for trash bin * - * @param integer $trashbinSize current size of the trash bin + * @param int|float $trashbinSize current size of the trash bin * @param string $user - * @return int available free space for trash bin + * @return int|float available free space for trash bin */ - private static function calculateFreeSpace($trashbinSize, $user) { - $config = \OC::$server->getConfig(); - $userTrashbinSize = (int)$config->getUserValue($user, 'files_trashbin', 'trashbin_size', '-1'); - if ($userTrashbinSize > -1) { - return $userTrashbinSize - $trashbinSize; - } - $systemTrashbinSize = (int)$config->getAppValue('files_trashbin', 'trashbin_size', '-1'); - if ($systemTrashbinSize > -1) { - return $systemTrashbinSize - $trashbinSize; + private static function calculateFreeSpace(int|float $trashbinSize, string $user): int|float { + $configuredTrashbinSize = static::getConfiguredTrashbinSize($user); + if ($configuredTrashbinSize > -1) { + return $configuredTrashbinSize - $trashbinSize; } - $softQuota = true; $userObject = \OC::$server->getUserManager()->get($user); if (is_null($userObject)) { return 0; } + $softQuota = true; $quota = $userObject->getQuota(); if ($quota === null || $quota === 'none') { $quota = Filesystem::free_space('/'); @@ -782,6 +784,10 @@ class Trashbin { } } else { $quota = \OCP\Util::computerFileSize($quota); + // invalid quota + if ($quota === false) { + $quota = PHP_INT_MAX; + } } // calculate available space for trash bin @@ -801,7 +807,7 @@ class Trashbin { $availableSpace = $quota; } - return (int)$availableSpace; + return \OCP\Util::numericToNumber($availableSpace); } /** @@ -858,10 +864,10 @@ class Trashbin { * * @param array $files * @param string $user - * @param int $availableSpace available disc space - * @return int size of deleted files + * @param int|float $availableSpace available disc space + * @return int|float size of deleted files */ - protected static function deleteFiles($files, $user, $availableSpace) { + protected static function deleteFiles(array $files, string $user, int|float $availableSpace): int|float { /** @var Application $application */ $application = \OC::$server->query(Application::class); $expiration = $application->getContainer()->query('Expiration'); @@ -887,7 +893,7 @@ class Trashbin { * * @param array $files list of files sorted by mtime * @param string $user - * @return integer[] size of deleted files and number of deleted files + * @return array{int|float, int} size of deleted files and number of deleted files */ public static function deleteExpiredFiles($files, $user) { /** @var Expiration $expiration */ @@ -927,10 +933,10 @@ class Trashbin { * @param string $source source path, relative to the users files directory * @param string $destination destination path relative to the users root directory * @param View $view file view for the users root directory - * @return int + * @return int|float * @throws Exceptions\CopyRecursiveException */ - private static function copy_recursive($source, $destination, View $view) { + private static function copy_recursive($source, $destination, View $view): int|float { $size = 0; if ($view->is_dir($source)) { $view->mkdir($destination); @@ -964,9 +970,8 @@ class Trashbin { * * @param string $filename name of the file which should be restored * @param int $timestamp timestamp when the file was deleted - * @return array */ - private static function getVersionsFromTrash($filename, $timestamp, $user) { + private static function getVersionsFromTrash($filename, $timestamp, string $user): array { $view = new View('/' . $user . '/files_trashbin/versions'); $versions = []; @@ -1061,9 +1066,9 @@ class Trashbin { * get the size from a given root folder * * @param View $view file view on the root folder - * @return integer size of the folder + * @return int|float size of the folder */ - private static function calculateSize($view) { + private static function calculateSize(View $view): int|float { $root = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . $view->getAbsolutePath(''); if (!file_exists($root)) { return 0; @@ -1092,9 +1097,9 @@ class Trashbin { * get current size of trash bin from a given user * * @param string $user user who owns the trash bin - * @return integer trash bin size + * @return int|float trash bin size */ - private static function getTrashbinSize($user) { + private static function getTrashbinSize(string $user): int|float { $view = new View('/' . $user); $fileInfo = $view->getFileInfo('/files_trashbin'); return isset($fileInfo['size']) ? $fileInfo['size'] : 0; diff --git a/apps/files_versions/l10n/gl.js b/apps/files_versions/l10n/gl.js index 1ee4cc9c2cb..37571f730a7 100644 --- a/apps/files_versions/l10n/gl.js +++ b/apps/files_versions/l10n/gl.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Versions" : "Versións", "This application automatically maintains older versions of files that are changed." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que cambian.", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que se modifican. Cando está activado, aprovisionase un cartafol de versións ocultas no directorio de cada usuario e utilízase para almacenar versións de ficheiros antigas. Un usuario pode volver a unha versión anterior a través da interface web en calquera momento, co ficheiro substituído converténdose nunha versión. A aplicación xestiona automaticamente o cartafol de versións para garantir que o usuario non se quede sen cota por mor das versións.\nAdemais da caducidade das versións, a aplicación de versións asegura que nunca usará máis do 50 % do espazo libre actualmente dispoñible do usuario. Se as versións almacenadas superan este límite, a aplicación eliminará primeiro as versións máis antigas ata que cumpra este límite. Hai máis información dispoñible na documentación de versións.", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que cambian. Ao activarse, crease un cartafol agochado de versións que se emprega para almacenar versións antigas de ficheiros. Un usuario pode reverter cara a unha versión anterior a través da interface web en calquera momento, co ficheiro substituído converténdose nunha versión. A aplicación xestiona automaticamente o cartafol de versións para asegurarse de que o usuario non queda sen espazo por mor das versións.\n\t\tAdemais da caducidade de versións, a aplicación de versións asegurase de non empregar nunca máis do 50% do espazo libre actualmente dispoñíbel para un usuario. Se as versións almacenadas exceden este límite, a aplicación eliminará as versións máis antigas ata acadar este límite. Hai máis información dispoñíbel na documentación de Versións.", "Name this version" : "Nomea esta versión", "Edit version name" : "Editar o nome da versión", "Restore version" : "Restaurar versión", diff --git a/apps/files_versions/l10n/gl.json b/apps/files_versions/l10n/gl.json index 69f86331a04..4fbdb71a947 100644 --- a/apps/files_versions/l10n/gl.json +++ b/apps/files_versions/l10n/gl.json @@ -1,7 +1,7 @@ { "translations": { "Versions" : "Versións", "This application automatically maintains older versions of files that are changed." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que cambian.", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que se modifican. Cando está activado, aprovisionase un cartafol de versións ocultas no directorio de cada usuario e utilízase para almacenar versións de ficheiros antigas. Un usuario pode volver a unha versión anterior a través da interface web en calquera momento, co ficheiro substituído converténdose nunha versión. A aplicación xestiona automaticamente o cartafol de versións para garantir que o usuario non se quede sen cota por mor das versións.\nAdemais da caducidade das versións, a aplicación de versións asegura que nunca usará máis do 50 % do espazo libre actualmente dispoñible do usuario. Se as versións almacenadas superan este límite, a aplicación eliminará primeiro as versións máis antigas ata que cumpra este límite. Hai máis información dispoñible na documentación de versións.", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Esta aplicación mantén automaticamente versións antigas dos ficheiros que cambian. Ao activarse, crease un cartafol agochado de versións que se emprega para almacenar versións antigas de ficheiros. Un usuario pode reverter cara a unha versión anterior a través da interface web en calquera momento, co ficheiro substituído converténdose nunha versión. A aplicación xestiona automaticamente o cartafol de versións para asegurarse de que o usuario non queda sen espazo por mor das versións.\n\t\tAdemais da caducidade de versións, a aplicación de versións asegurase de non empregar nunca máis do 50% do espazo libre actualmente dispoñíbel para un usuario. Se as versións almacenadas exceden este límite, a aplicación eliminará as versións máis antigas ata acadar este límite. Hai máis información dispoñíbel na documentación de Versións.", "Name this version" : "Nomea esta versión", "Edit version name" : "Editar o nome da versión", "Restore version" : "Restaurar versión", diff --git a/apps/oauth2/appinfo/info.xml b/apps/oauth2/appinfo/info.xml index e45168da6e9..3d18f936da8 100644 --- a/apps/oauth2/appinfo/info.xml +++ b/apps/oauth2/appinfo/info.xml @@ -5,7 +5,7 @@ <name>OAuth 2.0</name> <summary>Allows OAuth2 compatible authentication from other web applications.</summary> <description>The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications.</description> - <version>1.16.0</version> + <version>1.16.1</version> <licence>agpl</licence> <author>Lukas Reschke</author> <namespace>OAuth2</namespace> diff --git a/apps/oauth2/composer/composer/LICENSE b/apps/oauth2/composer/composer/LICENSE index f27399a042d..62ecfd8d004 100644 --- a/apps/oauth2/composer/composer/LICENSE +++ b/apps/oauth2/composer/composer/LICENSE @@ -1,4 +1,3 @@ - Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/apps/oauth2/composer/composer/autoload_classmap.php b/apps/oauth2/composer/composer/autoload_classmap.php index d760d7cd579..09cacb20335 100644 --- a/apps/oauth2/composer/composer/autoload_classmap.php +++ b/apps/oauth2/composer/composer/autoload_classmap.php @@ -19,5 +19,6 @@ return array( 'OCA\\OAuth2\\Migration\\SetTokenExpiration' => $baseDir . '/../lib/Migration/SetTokenExpiration.php', 'OCA\\OAuth2\\Migration\\Version010401Date20181207190718' => $baseDir . '/../lib/Migration/Version010401Date20181207190718.php', 'OCA\\OAuth2\\Migration\\Version010402Date20190107124745' => $baseDir . '/../lib/Migration/Version010402Date20190107124745.php', + 'OCA\\OAuth2\\Migration\\Version011601Date20230522143227' => $baseDir . '/../lib/Migration/Version011601Date20230522143227.php', 'OCA\\OAuth2\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php', ); diff --git a/apps/oauth2/composer/composer/autoload_static.php b/apps/oauth2/composer/composer/autoload_static.php index c8f3a388c78..1442093e32f 100644 --- a/apps/oauth2/composer/composer/autoload_static.php +++ b/apps/oauth2/composer/composer/autoload_static.php @@ -34,6 +34,7 @@ class ComposerStaticInitOAuth2 'OCA\\OAuth2\\Migration\\SetTokenExpiration' => __DIR__ . '/..' . '/../lib/Migration/SetTokenExpiration.php', 'OCA\\OAuth2\\Migration\\Version010401Date20181207190718' => __DIR__ . '/..' . '/../lib/Migration/Version010401Date20181207190718.php', 'OCA\\OAuth2\\Migration\\Version010402Date20190107124745' => __DIR__ . '/..' . '/../lib/Migration/Version010402Date20190107124745.php', + 'OCA\\OAuth2\\Migration\\Version011601Date20230522143227' => __DIR__ . '/..' . '/../lib/Migration/Version011601Date20230522143227.php', 'OCA\\OAuth2\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php', ); diff --git a/apps/oauth2/l10n/fr.js b/apps/oauth2/l10n/fr.js index d2ddb02a9cf..67cf2e73fbc 100644 --- a/apps/oauth2/l10n/fr.js +++ b/apps/oauth2/l10n/fr.js @@ -1,11 +1,11 @@ OC.L10N.register( "oauth2", { - "Your client is not authorized to connect. Please inform the administrator of your client." : "Votre client n'est pas autoriser à se connecter. Veuillez informer l'administrateur de votre client.", + "Your client is not authorized to connect. Please inform the administrator of your client." : "Votre client n'est pas autorisé à se connecter. Veuillez en informer l'administrateur.", "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "Votre adresse de redirection doit être une URL complète, par exemple: https://example.com/chemin", "OAuth 2.0" : "OAuth 2.0", "Allows OAuth2 compatible authentication from other web applications." : "Autoriser l'authentification compatible OAuth2 depuis d'autres applications web.", - "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "L'application OAuth2 permet aux administrateurs de configurer le processus d'authentification intégrée afin d'autoriser l'authentification compatible OAuth2 depuis d'autres applications web.", + "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "L'application OAuth2 permet aux administrateurs de configurer le processus d'authentification intégré afin d'autoriser une authentification compatible OAuth2 depuis d'autres applications web.", "OAuth 2.0 clients" : "Clients OAuth 2.0", "OAuth 2.0 allows external services to request access to {instanceName}." : "OAuth 2.0 permet à des services externes de demander l'accès à {instanceName}.", "Add client" : "Ajouter un client", @@ -13,8 +13,8 @@ OC.L10N.register( "Redirection URI" : "URI de redirection", "Add" : "Ajouter", "Client Identifier" : "Identifiant du client", - "Secret" : "Secret", - "Show client secret" : "Afficher client secret", + "Secret" : "Code secret", + "Show client secret" : "Afficher le code secret du client", "Delete" : "Supprimer" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/oauth2/l10n/fr.json b/apps/oauth2/l10n/fr.json index 38af84dd1c4..3b4691d960d 100644 --- a/apps/oauth2/l10n/fr.json +++ b/apps/oauth2/l10n/fr.json @@ -1,9 +1,9 @@ { "translations": { - "Your client is not authorized to connect. Please inform the administrator of your client." : "Votre client n'est pas autoriser à se connecter. Veuillez informer l'administrateur de votre client.", + "Your client is not authorized to connect. Please inform the administrator of your client." : "Votre client n'est pas autorisé à se connecter. Veuillez en informer l'administrateur.", "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "Votre adresse de redirection doit être une URL complète, par exemple: https://example.com/chemin", "OAuth 2.0" : "OAuth 2.0", "Allows OAuth2 compatible authentication from other web applications." : "Autoriser l'authentification compatible OAuth2 depuis d'autres applications web.", - "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "L'application OAuth2 permet aux administrateurs de configurer le processus d'authentification intégrée afin d'autoriser l'authentification compatible OAuth2 depuis d'autres applications web.", + "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "L'application OAuth2 permet aux administrateurs de configurer le processus d'authentification intégré afin d'autoriser une authentification compatible OAuth2 depuis d'autres applications web.", "OAuth 2.0 clients" : "Clients OAuth 2.0", "OAuth 2.0 allows external services to request access to {instanceName}." : "OAuth 2.0 permet à des services externes de demander l'accès à {instanceName}.", "Add client" : "Ajouter un client", @@ -11,8 +11,8 @@ "Redirection URI" : "URI de redirection", "Add" : "Ajouter", "Client Identifier" : "Identifiant du client", - "Secret" : "Secret", - "Show client secret" : "Afficher client secret", + "Secret" : "Code secret", + "Show client secret" : "Afficher le code secret du client", "Delete" : "Supprimer" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/oauth2/l10n/uk.js b/apps/oauth2/l10n/uk.js index fe23bda5602..751f65e83e3 100644 --- a/apps/oauth2/l10n/uk.js +++ b/apps/oauth2/l10n/uk.js @@ -4,8 +4,8 @@ OC.L10N.register( "Your client is not authorized to connect. Please inform the administrator of your client." : "Ваш клієнт не авторизований для підключення. Будь ласка, повідомте адміністратора вашого клієнта.", "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "Ваша URL-адреса переспрямування має бути повною URL-адресою, наприклад: https://yourdomain.com/path", "OAuth 2.0" : "OAuth 2.0", - "Allows OAuth2 compatible authentication from other web applications." : "Дозволяє автентифікацію, сумісну з OAuth2, з інших веб-програм.", - "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "Програма OAuth2 дозволяє адміністраторам налаштувати вбудований робочий процес автентифікації, щоб також дозволити сумісну з OAuth2 автентифікацію з інших веб-програм.", + "Allows OAuth2 compatible authentication from other web applications." : "Дозволяє авторизацію OAuth2, яка підтримується іншими вебзастосунками.", + "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "Програма OAuth2 дозволяє адміністраторам налаштувати вбудований процес авторизації, який дозволить використовувати сумісний з OAuth2 метод авторизації для сторонніз вебзастосунків.", "OAuth 2.0 clients" : "Клієнти OAuth 2.0", "OAuth 2.0 allows external services to request access to {instanceName}." : "OAuth 2.0 дозволяє зовнішнім службам запитувати доступ до {instanceName}.", "Add client" : "Додати клієнта", diff --git a/apps/oauth2/l10n/uk.json b/apps/oauth2/l10n/uk.json index f749a3bf6bb..e28dd7f193b 100644 --- a/apps/oauth2/l10n/uk.json +++ b/apps/oauth2/l10n/uk.json @@ -2,8 +2,8 @@ "Your client is not authorized to connect. Please inform the administrator of your client." : "Ваш клієнт не авторизований для підключення. Будь ласка, повідомте адміністратора вашого клієнта.", "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "Ваша URL-адреса переспрямування має бути повною URL-адресою, наприклад: https://yourdomain.com/path", "OAuth 2.0" : "OAuth 2.0", - "Allows OAuth2 compatible authentication from other web applications." : "Дозволяє автентифікацію, сумісну з OAuth2, з інших веб-програм.", - "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "Програма OAuth2 дозволяє адміністраторам налаштувати вбудований робочий процес автентифікації, щоб також дозволити сумісну з OAuth2 автентифікацію з інших веб-програм.", + "Allows OAuth2 compatible authentication from other web applications." : "Дозволяє авторизацію OAuth2, яка підтримується іншими вебзастосунками.", + "The OAuth2 app allows administrators to configure the built-in authentication workflow to also allow OAuth2 compatible authentication from other web applications." : "Програма OAuth2 дозволяє адміністраторам налаштувати вбудований процес авторизації, який дозволить використовувати сумісний з OAuth2 метод авторизації для сторонніз вебзастосунків.", "OAuth 2.0 clients" : "Клієнти OAuth 2.0", "OAuth 2.0 allows external services to request access to {instanceName}." : "OAuth 2.0 дозволяє зовнішнім службам запитувати доступ до {instanceName}.", "Add client" : "Додати клієнта", diff --git a/apps/oauth2/lib/Controller/OauthApiController.php b/apps/oauth2/lib/Controller/OauthApiController.php index 910fdc99432..badafd3bb77 100644 --- a/apps/oauth2/lib/Controller/OauthApiController.php +++ b/apps/oauth2/lib/Controller/OauthApiController.php @@ -42,40 +42,23 @@ use OCP\AppFramework\Utility\ITimeFactory; use OCP\IRequest; use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; +use Psr\Log\LoggerInterface; class OauthApiController extends Controller { - /** @var AccessTokenMapper */ - private $accessTokenMapper; - /** @var ClientMapper */ - private $clientMapper; - /** @var ICrypto */ - private $crypto; - /** @var TokenProvider */ - private $tokenProvider; - /** @var ISecureRandom */ - private $secureRandom; - /** @var ITimeFactory */ - private $time; - /** @var Throttler */ - private $throttler; - - public function __construct(string $appName, - IRequest $request, - ICrypto $crypto, - AccessTokenMapper $accessTokenMapper, - ClientMapper $clientMapper, - TokenProvider $tokenProvider, - ISecureRandom $secureRandom, - ITimeFactory $time, - Throttler $throttler) { + + public function __construct( + string $appName, + IRequest $request, + private ICrypto $crypto, + private AccessTokenMapper $accessTokenMapper, + private ClientMapper $clientMapper, + private TokenProvider $tokenProvider, + private ISecureRandom $secureRandom, + private ITimeFactory $time, + private LoggerInterface $logger, + private Throttler $throttler + ) { parent::__construct($appName, $request); - $this->crypto = $crypto; - $this->accessTokenMapper = $accessTokenMapper; - $this->clientMapper = $clientMapper; - $this->tokenProvider = $tokenProvider; - $this->secureRandom = $secureRandom; - $this->time = $time; - $this->throttler = $throttler; } /** @@ -124,8 +107,16 @@ class OauthApiController extends Controller { $client_secret = $this->request->server['PHP_AUTH_PW']; } + try { + $storedClientSecret = $this->crypto->decrypt($client->getSecret()); + } catch (\Exception $e) { + $this->logger->error('OAuth client secret decryption error', ['exception' => $e]); + return new JSONResponse([ + 'error' => 'invalid_client', + ], Http::STATUS_BAD_REQUEST); + } // The client id and secret must match. Else we don't provide an access token! - if ($client->getClientIdentifier() !== $client_id || $client->getSecret() !== $client_secret) { + if ($client->getClientIdentifier() !== $client_id || $storedClientSecret !== $client_secret) { return new JSONResponse([ 'error' => 'invalid_client', ], Http::STATUS_BAD_REQUEST); diff --git a/apps/oauth2/lib/Controller/SettingsController.php b/apps/oauth2/lib/Controller/SettingsController.php index c24308140ec..3dcda337917 100644 --- a/apps/oauth2/lib/Controller/SettingsController.php +++ b/apps/oauth2/lib/Controller/SettingsController.php @@ -41,41 +41,25 @@ use OCP\IL10N; use OCP\IRequest; use OCP\IUser; use OCP\IUserManager; +use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; class SettingsController extends Controller { - /** @var ClientMapper */ - private $clientMapper; - /** @var ISecureRandom */ - private $secureRandom; - /** @var AccessTokenMapper */ - private $accessTokenMapper; - /** @var IL10N */ - private $l; - /** @var IAuthTokenProvider */ - private $tokenProvider; - /** - * @var IUserManager - */ - private $userManager; + public const validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - public function __construct(string $appName, - IRequest $request, - ClientMapper $clientMapper, - ISecureRandom $secureRandom, - AccessTokenMapper $accessTokenMapper, - IL10N $l, - IAuthTokenProvider $tokenProvider, - IUserManager $userManager + public function __construct( + string $appName, + IRequest $request, + private ClientMapper $clientMapper, + private ISecureRandom $secureRandom, + private AccessTokenMapper $accessTokenMapper, + private IL10N $l, + private IAuthTokenProvider $tokenProvider, + private IUserManager $userManager, + private ICrypto $crypto ) { parent::__construct($appName, $request); - $this->secureRandom = $secureRandom; - $this->clientMapper = $clientMapper; - $this->accessTokenMapper = $accessTokenMapper; - $this->l = $l; - $this->tokenProvider = $tokenProvider; - $this->userManager = $userManager; } public function addClient(string $name, @@ -87,7 +71,9 @@ class SettingsController extends Controller { $client = new Client(); $client->setName($name); $client->setRedirectUri($redirectUri); - $client->setSecret($this->secureRandom->generate(64, self::validChars)); + $secret = $this->secureRandom->generate(64, self::validChars); + $encryptedSecret = $this->crypto->encrypt($secret); + $client->setSecret($encryptedSecret); $client->setClientIdentifier($this->secureRandom->generate(64, self::validChars)); $client = $this->clientMapper->insert($client); @@ -96,7 +82,7 @@ class SettingsController extends Controller { 'name' => $client->getName(), 'redirectUri' => $client->getRedirectUri(), 'clientId' => $client->getClientIdentifier(), - 'clientSecret' => $client->getSecret(), + 'clientSecret' => $secret, ]; return new JSONResponse($result); diff --git a/apps/oauth2/lib/Migration/Version011601Date20230522143227.php b/apps/oauth2/lib/Migration/Version011601Date20230522143227.php new file mode 100644 index 00000000000..e258224bb39 --- /dev/null +++ b/apps/oauth2/lib/Migration/Version011601Date20230522143227.php @@ -0,0 +1,82 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright 2023, Julien Veyssier <julien-nc@posteo.net> + * + * @author Julien Veyssier <julien-nc@posteo.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\OAuth2\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; +use OCP\Security\ICrypto; + +class Version011601Date20230522143227 extends SimpleMigrationStep { + + public function __construct( + private IDBConnection $connection, + private ICrypto $crypto, + ) { + } + + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('oauth2_clients')) { + $table = $schema->getTable('oauth2_clients'); + if ($table->hasColumn('secret')) { + $column = $table->getColumn('secret'); + $column->setLength(256); + return $schema; + } + } + + return null; + } + + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { + $qbUpdate = $this->connection->getQueryBuilder(); + $qbUpdate->update('oauth2_clients') + ->set('secret', $qbUpdate->createParameter('updateSecret')) + ->where( + $qbUpdate->expr()->eq('id', $qbUpdate->createParameter('updateId')) + ); + + $qbSelect = $this->connection->getQueryBuilder(); + $qbSelect->select('id', 'secret') + ->from('oauth2_clients'); + $req = $qbSelect->executeQuery(); + while ($row = $req->fetch()) { + $id = $row['id']; + $secret = $row['secret']; + $encryptedSecret = $this->crypto->encrypt($secret); + $qbUpdate->setParameter('updateSecret', $encryptedSecret, IQueryBuilder::PARAM_STR); + $qbUpdate->setParameter('updateId', $id, IQueryBuilder::PARAM_INT); + $qbUpdate->executeStatement(); + } + $req->closeCursor(); + } +} diff --git a/apps/oauth2/lib/Settings/Admin.php b/apps/oauth2/lib/Settings/Admin.php index aa2bd6db012..7b297116a77 100644 --- a/apps/oauth2/lib/Settings/Admin.php +++ b/apps/oauth2/lib/Settings/Admin.php @@ -29,22 +29,20 @@ namespace OCA\OAuth2\Settings; use OCA\OAuth2\Db\ClientMapper; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; +use OCP\Security\ICrypto; use OCP\Settings\ISettings; use OCP\IURLGenerator; +use Psr\Log\LoggerInterface; class Admin implements ISettings { - private IInitialState $initialState; - private ClientMapper $clientMapper; - private IURLGenerator $urlGenerator; public function __construct( - IInitialState $initialState, - ClientMapper $clientMapper, - IURLGenerator $urlGenerator + private IInitialState $initialState, + private ClientMapper $clientMapper, + private IURLGenerator $urlGenerator, + private ICrypto $crypto, + private LoggerInterface $logger, ) { - $this->initialState = $initialState; - $this->clientMapper = $clientMapper; - $this->urlGenerator = $urlGenerator; } public function getForm(): TemplateResponse { @@ -52,13 +50,18 @@ class Admin implements ISettings { $result = []; foreach ($clients as $client) { - $result[] = [ - 'id' => $client->getId(), - 'name' => $client->getName(), - 'redirectUri' => $client->getRedirectUri(), - 'clientId' => $client->getClientIdentifier(), - 'clientSecret' => $client->getSecret(), - ]; + try { + $secret = $this->crypto->decrypt($client->getSecret()); + $result[] = [ + 'id' => $client->getId(), + 'name' => $client->getName(), + 'redirectUri' => $client->getRedirectUri(), + 'clientId' => $client->getClientIdentifier(), + 'clientSecret' => $secret, + ]; + } catch (\Exception $e) { + $this->logger->error('[Settings] OAuth client secret decryption error', ['exception' => $e]); + } } $this->initialState->provideInitialState('clients', $result); $this->initialState->provideInitialState('oauth2-doc-link', $this->urlGenerator->linkToDocs('admin-oauth2')); diff --git a/apps/oauth2/tests/Controller/OauthApiControllerTest.php b/apps/oauth2/tests/Controller/OauthApiControllerTest.php index 8977f6a2b66..eb9311dbbc7 100644 --- a/apps/oauth2/tests/Controller/OauthApiControllerTest.php +++ b/apps/oauth2/tests/Controller/OauthApiControllerTest.php @@ -43,6 +43,7 @@ use OCP\AppFramework\Utility\ITimeFactory; use OCP\IRequest; use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; +use Psr\Log\LoggerInterface; use Test\TestCase; /* We have to use this to add a property to the mocked request and avoid warnings about dynamic properties on PHP>=8.2 */ @@ -67,6 +68,8 @@ class OauthApiControllerTest extends TestCase { private $time; /** @var Throttler|\PHPUnit\Framework\MockObject\MockObject */ private $throttler; + /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */ + private $logger; /** @var OauthApiController */ private $oauthApiController; @@ -81,6 +84,7 @@ class OauthApiControllerTest extends TestCase { $this->secureRandom = $this->createMock(ISecureRandom::class); $this->time = $this->createMock(ITimeFactory::class); $this->throttler = $this->createMock(Throttler::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->oauthApiController = new OauthApiController( 'oauth2', @@ -91,6 +95,7 @@ class OauthApiControllerTest extends TestCase { $this->tokenProvider, $this->secureRandom, $this->time, + $this->logger, $this->throttler ); } @@ -198,16 +203,21 @@ class OauthApiControllerTest extends TestCase { $client = new Client(); $client->setClientIdentifier('clientId'); - $client->setSecret('clientSecret'); + $client->setSecret('encryptedClientSecret'); $this->clientMapper->method('getByUid') ->with(42) ->willReturn($client); - $this->crypto->method('decrypt') - ->with( - 'encryptedToken', - 'validrefresh' - )->willReturn('decryptedToken'); + $this->crypto + ->method('decrypt') + ->with($this->callback(function (string $text) { + return $text === 'encryptedClientSecret' || $text === 'encryptedToken'; + })) + ->willReturnCallback(function (string $text) { + return $text === 'encryptedClientSecret' + ? 'clientSecret' + : ($text === 'encryptedToken' ? 'decryptedToken' : ''); + }); $this->tokenProvider->method('getTokenById') ->with(1337) @@ -232,16 +242,21 @@ class OauthApiControllerTest extends TestCase { $client = new Client(); $client->setClientIdentifier('clientId'); - $client->setSecret('clientSecret'); + $client->setSecret('encryptedClientSecret'); $this->clientMapper->method('getByUid') ->with(42) ->willReturn($client); - $this->crypto->method('decrypt') - ->with( - 'encryptedToken', - 'validrefresh' - )->willReturn('decryptedToken'); + $this->crypto + ->method('decrypt') + ->with($this->callback(function (string $text) { + return $text === 'encryptedClientSecret' || $text === 'encryptedToken'; + })) + ->willReturnCallback(function (string $text) { + return $text === 'encryptedClientSecret' + ? 'clientSecret' + : ($text === 'encryptedToken' ? 'decryptedToken' : ''); + }); $appToken = new PublicKeyToken(); $appToken->setUid('userId'); @@ -324,16 +339,21 @@ class OauthApiControllerTest extends TestCase { $client = new Client(); $client->setClientIdentifier('clientId'); - $client->setSecret('clientSecret'); + $client->setSecret('encryptedClientSecret'); $this->clientMapper->method('getByUid') ->with(42) ->willReturn($client); - $this->crypto->method('decrypt') - ->with( - 'encryptedToken', - 'validrefresh' - )->willReturn('decryptedToken'); + $this->crypto + ->method('decrypt') + ->with($this->callback(function (string $text) { + return $text === 'encryptedClientSecret' || $text === 'encryptedToken'; + })) + ->willReturnCallback(function (string $text) { + return $text === 'encryptedClientSecret' + ? 'clientSecret' + : ($text === 'encryptedToken' ? 'decryptedToken' : ''); + }); $appToken = new PublicKeyToken(); $appToken->setUid('userId'); @@ -419,16 +439,21 @@ class OauthApiControllerTest extends TestCase { $client = new Client(); $client->setClientIdentifier('clientId'); - $client->setSecret('clientSecret'); + $client->setSecret('encryptedClientSecret'); $this->clientMapper->method('getByUid') ->with(42) ->willReturn($client); - $this->crypto->method('decrypt') - ->with( - 'encryptedToken', - 'validrefresh' - )->willReturn('decryptedToken'); + $this->crypto + ->method('decrypt') + ->with($this->callback(function (string $text) { + return $text === 'encryptedClientSecret' || $text === 'encryptedToken'; + })) + ->willReturnCallback(function (string $text) { + return $text === 'encryptedClientSecret' + ? 'clientSecret' + : ($text === 'encryptedToken' ? 'decryptedToken' : ''); + }); $appToken = new PublicKeyToken(); $appToken->setUid('userId'); diff --git a/apps/oauth2/tests/Controller/SettingsControllerTest.php b/apps/oauth2/tests/Controller/SettingsControllerTest.php index e79d7cbe34e..817747599b7 100644 --- a/apps/oauth2/tests/Controller/SettingsControllerTest.php +++ b/apps/oauth2/tests/Controller/SettingsControllerTest.php @@ -38,6 +38,7 @@ use OCP\IL10N; use OCP\IRequest; use OCP\IUser; use OCP\IUserManager; +use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; use Test\TestCase; @@ -61,6 +62,8 @@ class SettingsControllerTest extends TestCase { private $settingsController; /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */ private $l; + /** @var ICrypto|\PHPUnit\Framework\MockObject\MockObject */ + private $crypto; protected function setUp(): void { parent::setUp(); @@ -71,6 +74,7 @@ class SettingsControllerTest extends TestCase { $this->accessTokenMapper = $this->createMock(AccessTokenMapper::class); $this->authTokenProvider = $this->createMock(IAuthTokenProvider::class); $this->userManager = $this->createMock(IUserManager::class); + $this->crypto = $this->createMock(ICrypto::class); $this->l = $this->createMock(IL10N::class); $this->l->method('t') ->willReturnArgument(0); @@ -82,7 +86,8 @@ class SettingsControllerTest extends TestCase { $this->accessTokenMapper, $this->l, $this->authTokenProvider, - $this->userManager + $this->userManager, + $this->crypto ); } @@ -96,6 +101,11 @@ class SettingsControllerTest extends TestCase { 'MySecret', 'MyClientIdentifier'); + $this->crypto + ->expects($this->once()) + ->method('encrypt') + ->willReturn('MyEncryptedSecret'); + $client = new Client(); $client->setName('My Client Name'); $client->setRedirectUri('https://example.com/'); @@ -108,7 +118,7 @@ class SettingsControllerTest extends TestCase { ->with($this->callback(function (Client $c) { return $c->getName() === 'My Client Name' && $c->getRedirectUri() === 'https://example.com/' && - $c->getSecret() === 'MySecret' && + $c->getSecret() === 'MyEncryptedSecret' && $c->getClientIdentifier() === 'MyClientIdentifier'; }))->willReturnCallback(function (Client $c) { $c->setId(42); @@ -175,7 +185,8 @@ class SettingsControllerTest extends TestCase { $this->accessTokenMapper, $this->l, $tokenProviderMock, - $userManager + $userManager, + $this->crypto ); $result = $settingsController->deleteClient(123); diff --git a/apps/oauth2/tests/Settings/AdminTest.php b/apps/oauth2/tests/Settings/AdminTest.php index fc5ebbb8365..fb19a9fc6d1 100644 --- a/apps/oauth2/tests/Settings/AdminTest.php +++ b/apps/oauth2/tests/Settings/AdminTest.php @@ -28,7 +28,9 @@ use OCA\OAuth2\Settings\Admin; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; use OCP\IURLGenerator; +use OCP\Security\ICrypto; use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class AdminTest extends TestCase { @@ -48,7 +50,13 @@ class AdminTest extends TestCase { $this->initialState = $this->createMock(IInitialState::class); $this->clientMapper = $this->createMock(ClientMapper::class); - $this->admin = new Admin($this->initialState, $this->clientMapper, $this->createMock(IURLGenerator::class)); + $this->admin = new Admin( + $this->initialState, + $this->clientMapper, + $this->createMock(IURLGenerator::class), + $this->createMock(ICrypto::class), + $this->createMock(LoggerInterface::class) + ); } public function testGetForm() { diff --git a/apps/provisioning_api/l10n/gl.js b/apps/provisioning_api/l10n/gl.js index 5cd7afb12b3..945316fe1ac 100644 --- a/apps/provisioning_api/l10n/gl.js +++ b/apps/provisioning_api/l10n/gl.js @@ -1,16 +1,16 @@ OC.L10N.register( "provisioning_api", { - "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario iniciado debe ser un administrador ou ter autorización para editar esta configuración.", + "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario que accede debe ser un administrador ou ter autorización para editar esta configuración.", "User already exists" : "O usuario xa existe", - "Email confirmation" : "Confirmación de correo electrónico", - "To enable the email address %s please click the button below." : "Para activar o enderezo de correo electrónico %s, faga clic no botón de abaixo.", + "Email confirmation" : "Confirmación do correo", + "To enable the email address %s please click the button below." : "Para activar o enderezo de correo %s, prema no botón de embaixo.", "Confirm" : "Confirmar", - "Email was already removed from account and cannot be confirmed anymore." : "O correo electrónico xa se eliminou da conta e xa non se pode confirmar.", + "Email was already removed from account and cannot be confirmed anymore." : "O correo foi eliminado da conta e xa non se pode confirmar.", "Could not verify mail because the token is expired." : "Non foi posíbel verificar o correo porque o testemuño caducou.", "Could not verify mail because the token is invalid." : "Non foi posíbel verificar o correo porque o testemuño non é válido.", - "An unexpected error occurred. Please contact your admin." : "Produciuse un erro inesperado. Ponte en contacto co teu administrador.", - "Email confirmation successful" : "Confirmación do correo electrónico exitosa", + "An unexpected error occurred. Please contact your admin." : "Produciuse un erro non agardado. Póñase en contacto cun administrador.", + "Email confirmation successful" : "Confirmación de correo satisfactoria", "Provisioning API" : "API de aprovisionamento", "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar usuarios, grupos e aplicacións.", "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar os\n\t\tatributos do usuario, consultar, estabelecer e eliminar grupos, estabelecer cota e consultar o almacenamento total\n\t\tutilizado no Nextcloud. Os usuarios administradores de grupos tamén poden consultar o Nextcloud e\n\t\trealizar as mesmas funcións que un administrador para os grupos que xestionan. A API tamén permite a un administrador\n\t\tconsultar aplicacións activas do Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira Basic Auth para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor." diff --git a/apps/provisioning_api/l10n/gl.json b/apps/provisioning_api/l10n/gl.json index 5714dac5304..22f0bd16571 100644 --- a/apps/provisioning_api/l10n/gl.json +++ b/apps/provisioning_api/l10n/gl.json @@ -1,14 +1,14 @@ { "translations": { - "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario iniciado debe ser un administrador ou ter autorización para editar esta configuración.", + "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario que accede debe ser un administrador ou ter autorización para editar esta configuración.", "User already exists" : "O usuario xa existe", - "Email confirmation" : "Confirmación de correo electrónico", - "To enable the email address %s please click the button below." : "Para activar o enderezo de correo electrónico %s, faga clic no botón de abaixo.", + "Email confirmation" : "Confirmación do correo", + "To enable the email address %s please click the button below." : "Para activar o enderezo de correo %s, prema no botón de embaixo.", "Confirm" : "Confirmar", - "Email was already removed from account and cannot be confirmed anymore." : "O correo electrónico xa se eliminou da conta e xa non se pode confirmar.", + "Email was already removed from account and cannot be confirmed anymore." : "O correo foi eliminado da conta e xa non se pode confirmar.", "Could not verify mail because the token is expired." : "Non foi posíbel verificar o correo porque o testemuño caducou.", "Could not verify mail because the token is invalid." : "Non foi posíbel verificar o correo porque o testemuño non é válido.", - "An unexpected error occurred. Please contact your admin." : "Produciuse un erro inesperado. Ponte en contacto co teu administrador.", - "Email confirmation successful" : "Confirmación do correo electrónico exitosa", + "An unexpected error occurred. Please contact your admin." : "Produciuse un erro non agardado. Póñase en contacto cun administrador.", + "Email confirmation successful" : "Confirmación de correo satisfactoria", "Provisioning API" : "API de aprovisionamento", "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar usuarios, grupos e aplicacións.", "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar os\n\t\tatributos do usuario, consultar, estabelecer e eliminar grupos, estabelecer cota e consultar o almacenamento total\n\t\tutilizado no Nextcloud. Os usuarios administradores de grupos tamén poden consultar o Nextcloud e\n\t\trealizar as mesmas funcións que un administrador para os grupos que xestionan. A API tamén permite a un administrador\n\t\tconsultar aplicacións activas do Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira Basic Auth para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor." diff --git a/apps/settings/l10n/ca.js b/apps/settings/l10n/ca.js index 555a794779b..356a1d98b28 100644 --- a/apps/settings/l10n/ca.js +++ b/apps/settings/l10n/ca.js @@ -312,7 +312,7 @@ OC.L10N.register( "Help translate" : "Ajudeu-nos amb la traducció", "Unable to update language" : "No es pot actualitzar la llengua", "No language set" : "No s'ha establert cap idioma", - "Locale" : "Configuració local", + "Locale" : "Configuració regional", "Week starts on {firstDayOfWeek}" : "La setmana comença el {firstDayOfWeek}", "Unable to update locale" : "No es pot actualitzar la configuració local", "No locale set" : "No s'ha establert cap configuració local", diff --git a/apps/settings/l10n/ca.json b/apps/settings/l10n/ca.json index 93c37b0e028..e7adc45691a 100644 --- a/apps/settings/l10n/ca.json +++ b/apps/settings/l10n/ca.json @@ -310,7 +310,7 @@ "Help translate" : "Ajudeu-nos amb la traducció", "Unable to update language" : "No es pot actualitzar la llengua", "No language set" : "No s'ha establert cap idioma", - "Locale" : "Configuració local", + "Locale" : "Configuració regional", "Week starts on {firstDayOfWeek}" : "La setmana comença el {firstDayOfWeek}", "Unable to update locale" : "No es pot actualitzar la configuració local", "No locale set" : "No s'ha establert cap configuració local", diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index 5b7182243bd..f23481a73b6 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -148,7 +148,7 @@ OC.L10N.register( "Profile information" : "Profilinformation", "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilbild, vollständiger Name, E-Mail-Adresse, Telefonnummer, Adresse, Webseite, Twitter, Organisation, Rolle, Überschrift, Biografie und ob dein Profil aktiviert ist", "Nextcloud settings" : "Nextcloud-Einstellungen", - "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst du festlegen, welche Gruppe auf bestimmte Bereiche der Administrationseinstellungen zugreifen kann.", + "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst du festlegen, welche Gruppe auf bestimmte Bereiche der Verwaltungs-Einstellungen zugreifen kann.", "None" : "Keine", "Unable to modify setting" : "Einstellung konnte nicht geändert werden", "Two-Factor Authentication" : "Zwei-Faktor-Authentifizierung", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index 01c5d0f9115..74b75f8cbec 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -146,7 +146,7 @@ "Profile information" : "Profilinformation", "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilbild, vollständiger Name, E-Mail-Adresse, Telefonnummer, Adresse, Webseite, Twitter, Organisation, Rolle, Überschrift, Biografie und ob dein Profil aktiviert ist", "Nextcloud settings" : "Nextcloud-Einstellungen", - "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst du festlegen, welche Gruppe auf bestimmte Bereiche der Administrationseinstellungen zugreifen kann.", + "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst du festlegen, welche Gruppe auf bestimmte Bereiche der Verwaltungs-Einstellungen zugreifen kann.", "None" : "Keine", "Unable to modify setting" : "Einstellung konnte nicht geändert werden", "Two-Factor Authentication" : "Zwei-Faktor-Authentifizierung", diff --git a/apps/settings/l10n/fa.js b/apps/settings/l10n/fa.js index 0a418e895fe..56a7bb24a2d 100644 --- a/apps/settings/l10n/fa.js +++ b/apps/settings/l10n/fa.js @@ -146,8 +146,8 @@ OC.L10N.register( "Developer documentation" : "مستندات توسعهدهندگان", "This app is supported via your current Nextcloud subscription." : "این کاره از طریق اشتراک فعلی نکست کلودتان پشتیبانی می شود.", "Supported" : "پشتیبانی شده", - "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "برنامه های ویژه توسط و در داخل جامعه توسعه داده می شوند. آنها عملکردهای مرکزی را ارائه می دهند و برای استفاده در تولید آماده هستند.", - "Featured" : "معرّفی شده", + "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "برنامههای برگزیده توسط و در داخل جامعه توسعه داده میشوند. این برنامهها، عملکردهای مرکزی را ارائه میدهند و برای استفاده نهایی آماده هستند.", + "Featured" : "برگزیده", "Update to {update}" : "بهروز رسانی به {update} ", "All apps are up-to-date." : "تمامی کارهها بهروزند.", "Results from other categories" : "نتایج از دیگر دستهها", @@ -310,6 +310,7 @@ OC.L10N.register( "Disabled apps" : "برنامه های غیرفعال شده است", "Updates" : "به روز رسانی ها", "App bundles" : "بسته های برنامه", + "Featured apps" : "برنامههای برگزیده", "Hide" : "پنهان کردن", "Download and enable" : "بارگیری و فعال سازی", "Enable untested app" : "برنامه آزمایش نشده را فعال کنید", diff --git a/apps/settings/l10n/fa.json b/apps/settings/l10n/fa.json index 7a68a236909..454003e4f2f 100644 --- a/apps/settings/l10n/fa.json +++ b/apps/settings/l10n/fa.json @@ -144,8 +144,8 @@ "Developer documentation" : "مستندات توسعهدهندگان", "This app is supported via your current Nextcloud subscription." : "این کاره از طریق اشتراک فعلی نکست کلودتان پشتیبانی می شود.", "Supported" : "پشتیبانی شده", - "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "برنامه های ویژه توسط و در داخل جامعه توسعه داده می شوند. آنها عملکردهای مرکزی را ارائه می دهند و برای استفاده در تولید آماده هستند.", - "Featured" : "معرّفی شده", + "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "برنامههای برگزیده توسط و در داخل جامعه توسعه داده میشوند. این برنامهها، عملکردهای مرکزی را ارائه میدهند و برای استفاده نهایی آماده هستند.", + "Featured" : "برگزیده", "Update to {update}" : "بهروز رسانی به {update} ", "All apps are up-to-date." : "تمامی کارهها بهروزند.", "Results from other categories" : "نتایج از دیگر دستهها", @@ -308,6 +308,7 @@ "Disabled apps" : "برنامه های غیرفعال شده است", "Updates" : "به روز رسانی ها", "App bundles" : "بسته های برنامه", + "Featured apps" : "برنامههای برگزیده", "Hide" : "پنهان کردن", "Download and enable" : "بارگیری و فعال سازی", "Enable untested app" : "برنامه آزمایش نشده را فعال کنید", diff --git a/apps/settings/l10n/fi.js b/apps/settings/l10n/fi.js index 0f0614ccd73..9f57d596339 100644 --- a/apps/settings/l10n/fi.js +++ b/apps/settings/l10n/fi.js @@ -36,6 +36,8 @@ OC.L10N.register( "{actor} changed your email address" : "{actor} muutti sähköpostiosoitteesi", "You changed your email address" : "Muutit sähköpostiosoitteesi", "Your email address was changed by an administrator" : "Ylläpitäjä muutti sähköpostiosoitteesi", + "You created an app password for a session named \"{token}\"" : "Loit sovellussalasanan istunnolle nimeltä \"{token}\"", + "An administrator created an app password for a session named \"{token}\"" : "Ylläpitäjä loi sovellussalasanan istunnolle nimeltä \"{token}\"", "You deleted app password \"{token}\"" : "Poistit sovellussalasanan \"{token}\"", "You renamed app password \"{token}\" to \"{newToken}\"" : "Nimesit sovellussalasanan \"{token}\" uudelleen muotoon \"{newToken}\"", "You granted filesystem access to app password \"{token}\"" : "Annoit pääsyn tiedostojärjestelmään sovellussalasanalle \"{token}\"", @@ -398,6 +400,7 @@ OC.L10N.register( "Server address" : "Palvelimen osoite", "Port" : "Portti", "Authentication method" : "Tunnistautumistapa", + "Only applies when authentication is required" : "Sovelletaan vain kun tunnistautuminen vaaditaan", "Authentication required" : "Tunnistautuminen vaaditaan", "Credentials" : "Tilitiedot", "SMTP Username" : "SMTP-käyttäjätunnus", @@ -452,6 +455,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "Ota käyttöön käyttäjänimen automaattitäyttö jakolomakkeessa", "Allow username autocompletion to users within the same groups" : "Ota käyttöön käyttäjänimen automaattitäyttö saman ryhmän käyttäjille", - "Avatar" : "Profiilikuva" + "Avatar" : "Profiilikuva", + "User actions" : "Käyttäjätoiminnot" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/settings/l10n/fi.json b/apps/settings/l10n/fi.json index 05d8aa6145e..77b716f732f 100644 --- a/apps/settings/l10n/fi.json +++ b/apps/settings/l10n/fi.json @@ -34,6 +34,8 @@ "{actor} changed your email address" : "{actor} muutti sähköpostiosoitteesi", "You changed your email address" : "Muutit sähköpostiosoitteesi", "Your email address was changed by an administrator" : "Ylläpitäjä muutti sähköpostiosoitteesi", + "You created an app password for a session named \"{token}\"" : "Loit sovellussalasanan istunnolle nimeltä \"{token}\"", + "An administrator created an app password for a session named \"{token}\"" : "Ylläpitäjä loi sovellussalasanan istunnolle nimeltä \"{token}\"", "You deleted app password \"{token}\"" : "Poistit sovellussalasanan \"{token}\"", "You renamed app password \"{token}\" to \"{newToken}\"" : "Nimesit sovellussalasanan \"{token}\" uudelleen muotoon \"{newToken}\"", "You granted filesystem access to app password \"{token}\"" : "Annoit pääsyn tiedostojärjestelmään sovellussalasanalle \"{token}\"", @@ -396,6 +398,7 @@ "Server address" : "Palvelimen osoite", "Port" : "Portti", "Authentication method" : "Tunnistautumistapa", + "Only applies when authentication is required" : "Sovelletaan vain kun tunnistautuminen vaaditaan", "Authentication required" : "Tunnistautuminen vaaditaan", "Credentials" : "Tilitiedot", "SMTP Username" : "SMTP-käyttäjätunnus", @@ -450,6 +453,7 @@ "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "Ota käyttöön käyttäjänimen automaattitäyttö jakolomakkeessa", "Allow username autocompletion to users within the same groups" : "Ota käyttöön käyttäjänimen automaattitäyttö saman ryhmän käyttäjille", - "Avatar" : "Profiilikuva" + "Avatar" : "Profiilikuva", + "User actions" : "Käyttäjätoiminnot" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js index ebb7ae92bfe..33935fd88ed 100644 --- a/apps/settings/l10n/fr.js +++ b/apps/settings/l10n/fr.js @@ -358,6 +358,7 @@ OC.L10N.register( "Welcome mail sent!" : "E-mail de bienvenue envoyé !", "Edit User" : "Modifier l'utilisateur", "{size} used" : "{size} utilisés", + "User's table" : "Tableau des utilisateurs", "New user" : "Nouvel utilisateur", "Will be autogenerated" : "Sera généré automatiquement", "Display name" : "Nom d'affichage", @@ -490,6 +491,8 @@ OC.L10N.register( "Restrict users to only share with users in their groups" : "N'autoriser les partages qu'entre membres de mêmes groupes", "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", + "Allow username autocompletion in share dialog and allow access to the system address book" : "Autoriser l'autocomplétion du nom d'utilisateur dans le dialogue de partage et permettre l'accès au carnet d'adresses du système", + "Allow username autocompletion to users within the same groups and limit system address books to users in the same groups" : "Autoriser l'autocomplétion du nom d'utilisateur aux utilisateurs appartenant aux mêmes groupes et limiter les carnets d'adresses du système aux utilisateurs appartenant aux mêmes groupes.", "Allow username autocompletion to users based on phone number integration" : "Autoriser l'autocomplétion du nom d'utilisateur aux utilisateurs selon l'intégration du numéro de téléphone", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Si les autocomplétions \"même groupe\" et \"intégration du numéro de téléphone\" sont activées, une correspondance avec l'une ou l'autre de ces conditions est suffisante pour afficher l'utilisateur.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Autoriser l'autocomplétion lorsque le nom d'utilisateur ou l'adresse e-mail est totalement saisi⋅e (en ignorant les correspondances manquantes dans le répertoire téléphonique et le fait d'appartenir au même groupe)", @@ -515,6 +518,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "Autoriser l'autocomplétion du nom d'utilisateur dans la boite de dialogue de partage", "Allow username autocompletion to users within the same groups" : "Autoriser l'autocomplétion du nom d'utilisateur pour les utilisateurs du même groupe", - "Avatar" : "Avatar" + "Avatar" : "Avatar", + "User actions" : "Actions de l'utilisateur" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json index ccee2f164d8..7f06424cdcf 100644 --- a/apps/settings/l10n/fr.json +++ b/apps/settings/l10n/fr.json @@ -356,6 +356,7 @@ "Welcome mail sent!" : "E-mail de bienvenue envoyé !", "Edit User" : "Modifier l'utilisateur", "{size} used" : "{size} utilisés", + "User's table" : "Tableau des utilisateurs", "New user" : "Nouvel utilisateur", "Will be autogenerated" : "Sera généré automatiquement", "Display name" : "Nom d'affichage", @@ -488,6 +489,8 @@ "Restrict users to only share with users in their groups" : "N'autoriser les partages qu'entre membres de mêmes groupes", "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", + "Allow username autocompletion in share dialog and allow access to the system address book" : "Autoriser l'autocomplétion du nom d'utilisateur dans le dialogue de partage et permettre l'accès au carnet d'adresses du système", + "Allow username autocompletion to users within the same groups and limit system address books to users in the same groups" : "Autoriser l'autocomplétion du nom d'utilisateur aux utilisateurs appartenant aux mêmes groupes et limiter les carnets d'adresses du système aux utilisateurs appartenant aux mêmes groupes.", "Allow username autocompletion to users based on phone number integration" : "Autoriser l'autocomplétion du nom d'utilisateur aux utilisateurs selon l'intégration du numéro de téléphone", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Si les autocomplétions \"même groupe\" et \"intégration du numéro de téléphone\" sont activées, une correspondance avec l'une ou l'autre de ces conditions est suffisante pour afficher l'utilisateur.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Autoriser l'autocomplétion lorsque le nom d'utilisateur ou l'adresse e-mail est totalement saisi⋅e (en ignorant les correspondances manquantes dans le répertoire téléphonique et le fait d'appartenir au même groupe)", @@ -513,6 +516,7 @@ "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "Autoriser l'autocomplétion du nom d'utilisateur dans la boite de dialogue de partage", "Allow username autocompletion to users within the same groups" : "Autoriser l'autocomplétion du nom d'utilisateur pour les utilisateurs du même groupe", - "Avatar" : "Avatar" + "Avatar" : "Avatar", + "User actions" : "Actions de l'utilisateur" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/settings/l10n/gl.js b/apps/settings/l10n/gl.js index bf4b1bd6db8..1bbceafdfcc 100644 --- a/apps/settings/l10n/gl.js +++ b/apps/settings/l10n/gl.js @@ -38,8 +38,8 @@ OC.L10N.register( "{actor} changed your email address" : "{actor} cambiou o seu enderezo de correo", "You changed your email address" : "Vostede cambiou o seu enderezo de correo", "Your email address was changed by an administrator" : "O seu enderezo de correo foi cambiado por un administrador", - "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada \"{token}\"", - "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada \"{token}\"", + "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada «{token}»", + "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada «{token}»", "You deleted app password \"{token}\"" : "Vostede eliminou o contrasinal da aplicación «{token}»", "You renamed app password \"{token}\" to \"{newToken}\"" : "Vostede renomeou o contrasinal da aplicación «{token}» como «{newToken}»", "You granted filesystem access to app password \"{token}\"" : "Vostede concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", @@ -91,7 +91,7 @@ OC.L10N.register( "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Unable to change email address" : "Non é posíbel cambiar o enderezo de correo.", "Unable to set invalid phone number" : "Non é posíbel estabelecer un número de teléfono non válido", - "Unable to set invalid website" : "Non se puido establecer o sitio web non válido", + "Unable to set invalid website" : "Non é posíbel estabelecer o sitio web non válido", "Some account data was invalid" : "Algúns datos da conta non eran válidos", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Para poder verificar a súa conta de Twitter, publique o seguinte chío en Twitter (asegúrese de publicar sen ningún salto de liña):", "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Para poder verificar o seu sitio Web, engada o seguinte contido ao seu web-root en «.well-known/CloudIdVerificationCode.txt» (asegúrese de que o texto completo estea só nunha liña):", @@ -140,11 +140,11 @@ OC.L10N.register( "Verifying" : "Verificando", "A background job is pending that checks for user imported SSL certificates. Please check back later." : "Está pendente un traballo en segundo plano que comprobe os certificados SSL importados polo usuario. Volva comprobar máis adiante.", "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Hai algúns certificados SSL importados polo usuario, que xa non se usan con Nextcloud 21. Pódense importar coa liña de ordes mediante a orde «occ security:certificates:import». As súas rutas dentro do directorio de datos amosanse deseguido.", - "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID non válidos de usuarios ou grupos LDAP. Revisa a túa configuración de \"Anular detección de UUID\" na parte Experto da configuración LDAP e utiliza \"occ ldap:update-uuid\" para actualizalos.", + "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID incorrectos de usuarios ou grupos LDAP. Revise a súa configuración de «Anular a detección de UUID» na parte Experto da configuración LDAP e utilice «occ ldap:update-uuid» para actualizalos.", "The old server-side-encryption format is enabled. We recommend disabling this." : "O antigo formato de cifrado de lado do servidor está activado. Recomendámoslle desactivalo.", - "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Utilízase a versión \"%s\" de MariaDB. Nextcloud 21 ou superior non admite esta versión e require MariaDB 10.2 ou superior.", - "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Utilízase a versión de MySQL \"%s\". Nextcloud 21 e superior non admite esta versión e requiren MySQL 8.0 ou MariaDB 10.2 ou superior.", - "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Utilízase a versión de PostgreSQL \"%s\". Nextcloud 21 ou superior non admite esta versión e require PostgreSQL 9.6 ou superior.", + "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Utilízase a versión «%s» de MariaDB. Nextcloud 21 ou superior non admite esta versión e require MariaDB 10.2 ou superior.", + "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Utilízase a versión «%s» de MySQL. Nextcloud 21 e superior non admite esta versión e requiren MySQL 8.0 ou MariaDB 10.2 ou superior.", + "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Utilízase a versión «%s» de PostgreSQL. Nextcloud 21 ou superior non admite esta versión e require PostgreSQL 9.6 ou superior.", "Profile information" : "Información do perfil", "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Imaxe de perfil, nome completo, correo electrónico, número de teléfono, enderezo, sitio web, Twitter, organización, función, título, biografía e se o teu perfil está activado", "Nextcloud settings" : "Axustes do Nextcloud", @@ -242,7 +242,7 @@ OC.L10N.register( "Cron (Recommended)" : "Cron (Recomendado)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para executar isto necesitase a extensión POSIX de PHP. Vexa a {linkstart}documentación de PHP{linkend} para obter máis detalles. ", "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Use o servizo cron do sistema para chamar ao ficheiro cron.php cada 5 minutos. Recomendado para todos os casos.", - "The cron.php needs to be executed by the system user \"{user}\"." : "O cron.php debe ser executado polo usuario do sistema \"{user}\".", + "The cron.php needs to be executed by the system user \"{user}\"." : "O cron.php debe ser executado polo usuario do sistema «{user}».", "Unable to update background job mode" : "Non se puido actualizar o modo de traballo en segundo plano", "Profile" : "Perfil", "Enable or disable profile by default for new users." : "Activa ou desactiva o perfil por defecto para os novos usuarios.", @@ -259,7 +259,7 @@ OC.L10N.register( "This is the final warning: Do you really want to enable encryption?" : "Esta é a advertencia final. Confirma que quere activar o cifrado?", "No encryption module loaded, please enable an encryption module in the app menu." : "Non hai cargado ningún módulo de cifrado, active un módulo de cifrado no menú de aplicacións.", "Select default encryption module:" : "Seleccionar o módulo predeterminado de cifrado:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "Debes migrar as túas claves de cifrado do cifrado antigo (ownCloud <= 8.0) ao novo. Activa o \"Módulo de cifrado predeterminado\" e executa {command}", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "É necesario migrar as súas claves de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Active o «Módulo predeterminado de cifrado» e execute {command}", "Unable to update server side encryption config" : "Non se puido actualizar a configuración de cifrado do servidor", "Rename group" : "Cambiar o nome do grupo", "Remove group" : "Retirar o grupo", @@ -276,7 +276,7 @@ OC.L10N.register( "The file must be a PNG or JPG" : "O ficheiro debe ser PNG ou JPG", "Picture provided by original account" : "Imaxe fornecida pola conta orixinal ", "Cancel" : "Cancelar", - "Set as profile picture" : "Establecer como imaxe de perfil", + "Set as profile picture" : "Estabelecer como imaxe de perfil", "Please note that it can take up to 24 hours for your profile picture to be updated everywhere." : "Ten en conta que pode tardar ata 24 horas en actualizar a túa foto de perfil en todas partes.", "Choose your profile picture" : "Escolle a túa imaxe de perfil", "Please select a valid png or jpg file" : "Seleccione un ficheiro png ou jpg válido", @@ -289,40 +289,39 @@ OC.L10N.register( "You are a member of the following groups:" : "Vostede é membro dos seguintes grupos: ", "You are using <strong>{usage}</strong>" : "Estás usando <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Estás usando <strong>{usage}</strong> de <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", - "Your full name" : "O teu nome completo", - "Email options" : "Opcións de correo electrónico", - "Primary email for password reset and notifications" : "Correo electrónico principal para restablecer o contrasinal e notificacións", - "Remove primary email" : "Eliminar o correo electrónico principal", - "Delete email" : "Eliminar o correo electrónico", - "Unset as primary email" : "Desactivar como correo electrónico principal", + "Your full name" : "O seu nome completo", + "Email options" : "Opcións de correo -e", + "Primary email for password reset and notifications" : "Correo-e principal para restabelecer o contrasinal e notificacións", + "Remove primary email" : "Retirar o correo-e principal", + "Delete email" : "Eliminar o correo-e", + "Unset as primary email" : "Desactivar como correo principal", "This address is not confirmed" : "Este enderezo non está confirmado", - "Set as primary email" : "Establecer como correo electrónico principal", + "Set as primary email" : "Estabelecer como correo principal", "Your email address" : "O seu enderezo de correo", - "Additional email address {index}" : "Enderezo de correo electrónico adicional {index}", - "Unable to delete primary email address" : "Non se puido eliminar o enderezo de correo electrónico principal", - "Unable to update primary email address" : "Non se puido actualizar o enderezo de correo electrónico principal", - "Unable to add additional email address" : "Non se puido engadir un enderezo de correo electrónico adicional", - "Unable to update additional email address" : "Non se puido actualizar o enderezo de correo electrónico adicional", - "Unable to delete additional email address" : "Non se puido eliminar o enderezo de correo electrónico adicional", + "Additional email address {index}" : "Enderezo de correo adicional {index}", + "Unable to delete primary email address" : "Non foi posíbel eliminar o enderezo de correo principal", + "Unable to update primary email address" : "Non foi posíbel actualizar o enderezo de correo principal", + "Unable to add additional email address" : "Non foi posíbel engadir un o enderezo de correo adicional", + "Unable to update additional email address" : "Non foi posíbel actualizar o enderezo de correo adicional", + "Unable to delete additional email address" : "Non foi posíbel eliminar o enderezo de correo adicional", "No email address set" : "Non hai un enderezo de correo definido", - "Additional emails" : "Correos electrónicos adicionais", - "Your handle" : "O teu apodo", + "Additional emails" : "Correos adicionais", "Your headline" : "O teu titular", "Language" : "Idioma", "Help translate" : "Axude na tradución", - "Unable to update language" : "Non se puido actualizar o idioma", + "Unable to update language" : "Non foi posíbel actualizar o idioma", "No language set" : "Non foi estabelecido ningún idioma", "Locale" : "Configuración rexional", "Week starts on {firstDayOfWeek}" : "A semana comeza o {firstDayOfWeek}", - "Unable to update locale" : "Non se puido actualizar a configuración rexional", + "Unable to update locale" : "Non foi posíbel actualizar a configuración rexional", "No locale set" : "Non se definiu ningunha configuración rexional", - "Your location" : "A túa localización", + "Your location" : "A súa localización", "Your organisation" : "A súa organización", "Your phone number" : "O seu número de teléfono", "Edit your Profile visibility" : "Edita a visibilidade do teu Perfil", "Enable Profile" : "Activar o Perfil", "Unable to update profile enabled state" : "Non se puido actualizar o estado activado do perfil", - "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "A configuración máis restritiva de visibilidade ou alcance é respectada no teu Perfil. Por exemplo, se a visibilidade está definida como \"Mostrar a todos\" e o ámbito está configurado como \"Privado\", respéctase \"Privado\".", + "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "No seu perfil respectase a configuración máis restritiva de visibilidade ou ambito. Por exemplo, se a visibilidade está definida como«Amosar a todos» e o ámbito está configurado como «Privado», respéctase «Privado».", "Unable to update visibility of {displayId}" : "Non se puido actualizar a visibilidade de {displayId}", "Your role" : "O teu cargo", "Your Twitter handle" : "O seu usuario do Twitter", @@ -332,7 +331,7 @@ OC.L10N.register( "Change scope level of {property}, current scope is {scope}" : "Cambiar o nivel de ámbito de {property}, o ámbito actual é {scope}", "Unable to update federation scope of the primary {property}" : "Non se puido actualizar o ámbito de federación da {property} principal", "Unable to update federation scope of additional {property}" : "Non se puido actualizar o ámbito da federación de {property} adicional", - "Add additional email" : "Engade correo electrónico adicional", + "Add additional email" : "Engadir un correo adicional", "Add" : "Engadir", "You do not have permissions to see the details of this user" : "Vostede non ten permisos para ver os detalles deste usuario", "Add new password" : "Engadir un novo contrasinal", @@ -407,7 +406,7 @@ OC.L10N.register( "Profile picture" : "Imaxe do perfil", "About" : "Sobre", "Full name" : "Nome completo", - "Additional email" : "Correo electrónico adicional", + "Additional email" : "Correo-e adicional", "Headline" : "Titular", "Organisation" : "Organización", "Phone number" : "Número de teléfono", @@ -416,20 +415,20 @@ OC.L10N.register( "Fediverse (e.g. Mastodon)" : "Fediverso (por exemplo, Mastodon)", "Website" : "Sitio web", "Profile visibility" : "Visibilidade do perfil", - "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Non dispoñible, xa que esta propiedade é necesaria para as funcións básicas, como compartir ficheiros e invitacións de calendario", - "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Non dispoñible porque a federación foi desactivada para a túa conta, ponte en contacto co administrador do sistema se tes algunha dúbida", - "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Non está dispoñible xa que non se permite publicar datos específicos do usuario no servidor de busca, póñase en contacto co administrador do sistema se tes algunha dúbida", - "Active apps" : "Aplcativos activos", + "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Non está dispoñíbel porque esta propiedade é necesaria para as funcións básicas, como compartir ficheiros e convites de calendario", + "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Non está dispoñíbel porque a federación foi desactivada para a súa conta, póñase en contacto co administrador do sistema se ten algunha dúbida", + "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Non está dispoñíbel porque non se permite publicar datos específicos do usuario no servidor de buscas, póñase en contacto co administrador do sistema se ten algunha dúbida", + "Active apps" : "Aplicacións activas", "Disabled apps" : "Aplicacións desactivadas", "Updates" : "Actualizacións", "App bundles" : "Paquetes de aplicacións", "Featured apps" : "Aplis destacadas", - "Show to everyone" : "Mostrar a todos", - "Show to logged in users only" : "Mostrar só a usuarios que iniciaron sesión", + "Show to everyone" : "Amosar a todos", + "Show to logged in users only" : "Amosar só aos usuarios que iniciaron sesión", "Hide" : "Agochar", "Download and enable" : "Descargar e activar", "Enable untested app" : "Activar a aplicación sen probar", - "The app will be downloaded from the App Store" : "A aplicación descargarase da Tenda de Aplicacións", + "The app will be downloaded from the App Store" : "A aplicación descargarase da tenda de aplicacións", "This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected." : "Esta aplicación non está marcado como compatíbel coa súa versión do Nextcloud. Se continúa, poderá instalar a aplicación. Teña en conta que é probábel que a aplicación non funcione como se agarda.", "Never" : "Nunca", "An error occurred during the request. Unable to proceed." : "Produciuse un erro durante a solicitude. Non se pode continuar.", @@ -455,7 +454,7 @@ OC.L10N.register( "SMTP Username" : "Nome de usuario SMTP", "SMTP Password" : "Contrasinal SMTP", "Save" : "Gardar", - "Test and verify email settings" : "Proba e verifica a configuración do correo electrónico", + "Test and verify email settings" : "Probe e verifique os axustes do correo", "Send email" : "Enviar o correo", "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "É importante para a seguridade e o bo funcionamento da súa instancia que todo estea configurado correctamente. Para axudarlle niso, imos facer algunhas comprobacións automáticas. Vexa a documentación ligada para obter máis información. ", "All checks passed." : "Pasáronse todas as verificacións.", @@ -486,7 +485,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Excluír grupos da compartición", "These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.", "Allow username autocompletion to users based on phone number integration" : "Permitir o autocompletado do nome de usuario aos usuarios en función da integración do número de teléfono", - "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se está activado o autocompletado \"mesmo grupo\" e a \"integración do número de teléfono\", unha coincidencia en calquera é suficiente para mostrar ao usuario.", + "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se está activado o autocompletado «mesmo grupo» e a «integración do número de teléfono», unha coincidencia en calquera é abondo para amosar o usuario.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir o autocompletado ao introducir o nome completo ou o enderezo de correo electrónico (ignorando a coincidencia que falta na axenda telefónica e estar no mesmo grupo)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas (amosarase só cando a lista de ficheiros estea agochada)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto amosarase na páxina de envío das ligazóns públicas cando a lista de ficheiros estea agochada.", @@ -502,7 +501,7 @@ OC.L10N.register( "Use a second factor besides your password to increase security for your account." : "Empregue un segundo factor ademais do seu contrasinal para aumentar a seguridade da súa conta.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.", "You created app password \"{token}\"" : "Vostede creou o contrasinal da aplicación «{token}»", - "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación \"{token}\"", + "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación «{token}»", "Choose profile picture from files" : "Escolle a imaxe de perfil dende Ficheiros", "png or jpg, max. 20 MB" : "png ou jpg, max. 20 MB", "Plain" : "Simple", diff --git a/apps/settings/l10n/gl.json b/apps/settings/l10n/gl.json index ee4129a4f27..a7c8f962610 100644 --- a/apps/settings/l10n/gl.json +++ b/apps/settings/l10n/gl.json @@ -36,8 +36,8 @@ "{actor} changed your email address" : "{actor} cambiou o seu enderezo de correo", "You changed your email address" : "Vostede cambiou o seu enderezo de correo", "Your email address was changed by an administrator" : "O seu enderezo de correo foi cambiado por un administrador", - "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada \"{token}\"", - "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada \"{token}\"", + "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada «{token}»", + "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada «{token}»", "You deleted app password \"{token}\"" : "Vostede eliminou o contrasinal da aplicación «{token}»", "You renamed app password \"{token}\" to \"{newToken}\"" : "Vostede renomeou o contrasinal da aplicación «{token}» como «{newToken}»", "You granted filesystem access to app password \"{token}\"" : "Vostede concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", @@ -89,7 +89,7 @@ "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Unable to change email address" : "Non é posíbel cambiar o enderezo de correo.", "Unable to set invalid phone number" : "Non é posíbel estabelecer un número de teléfono non válido", - "Unable to set invalid website" : "Non se puido establecer o sitio web non válido", + "Unable to set invalid website" : "Non é posíbel estabelecer o sitio web non válido", "Some account data was invalid" : "Algúns datos da conta non eran válidos", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Para poder verificar a súa conta de Twitter, publique o seguinte chío en Twitter (asegúrese de publicar sen ningún salto de liña):", "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Para poder verificar o seu sitio Web, engada o seguinte contido ao seu web-root en «.well-known/CloudIdVerificationCode.txt» (asegúrese de que o texto completo estea só nunha liña):", @@ -138,11 +138,11 @@ "Verifying" : "Verificando", "A background job is pending that checks for user imported SSL certificates. Please check back later." : "Está pendente un traballo en segundo plano que comprobe os certificados SSL importados polo usuario. Volva comprobar máis adiante.", "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Hai algúns certificados SSL importados polo usuario, que xa non se usan con Nextcloud 21. Pódense importar coa liña de ordes mediante a orde «occ security:certificates:import». As súas rutas dentro do directorio de datos amosanse deseguido.", - "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID non válidos de usuarios ou grupos LDAP. Revisa a túa configuración de \"Anular detección de UUID\" na parte Experto da configuración LDAP e utiliza \"occ ldap:update-uuid\" para actualizalos.", + "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Atopáronse UUID incorrectos de usuarios ou grupos LDAP. Revise a súa configuración de «Anular a detección de UUID» na parte Experto da configuración LDAP e utilice «occ ldap:update-uuid» para actualizalos.", "The old server-side-encryption format is enabled. We recommend disabling this." : "O antigo formato de cifrado de lado do servidor está activado. Recomendámoslle desactivalo.", - "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Utilízase a versión \"%s\" de MariaDB. Nextcloud 21 ou superior non admite esta versión e require MariaDB 10.2 ou superior.", - "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Utilízase a versión de MySQL \"%s\". Nextcloud 21 e superior non admite esta versión e requiren MySQL 8.0 ou MariaDB 10.2 ou superior.", - "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Utilízase a versión de PostgreSQL \"%s\". Nextcloud 21 ou superior non admite esta versión e require PostgreSQL 9.6 ou superior.", + "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Utilízase a versión «%s» de MariaDB. Nextcloud 21 ou superior non admite esta versión e require MariaDB 10.2 ou superior.", + "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Utilízase a versión «%s» de MySQL. Nextcloud 21 e superior non admite esta versión e requiren MySQL 8.0 ou MariaDB 10.2 ou superior.", + "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Utilízase a versión «%s» de PostgreSQL. Nextcloud 21 ou superior non admite esta versión e require PostgreSQL 9.6 ou superior.", "Profile information" : "Información do perfil", "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Imaxe de perfil, nome completo, correo electrónico, número de teléfono, enderezo, sitio web, Twitter, organización, función, título, biografía e se o teu perfil está activado", "Nextcloud settings" : "Axustes do Nextcloud", @@ -240,7 +240,7 @@ "Cron (Recommended)" : "Cron (Recomendado)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para executar isto necesitase a extensión POSIX de PHP. Vexa a {linkstart}documentación de PHP{linkend} para obter máis detalles. ", "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Use o servizo cron do sistema para chamar ao ficheiro cron.php cada 5 minutos. Recomendado para todos os casos.", - "The cron.php needs to be executed by the system user \"{user}\"." : "O cron.php debe ser executado polo usuario do sistema \"{user}\".", + "The cron.php needs to be executed by the system user \"{user}\"." : "O cron.php debe ser executado polo usuario do sistema «{user}».", "Unable to update background job mode" : "Non se puido actualizar o modo de traballo en segundo plano", "Profile" : "Perfil", "Enable or disable profile by default for new users." : "Activa ou desactiva o perfil por defecto para os novos usuarios.", @@ -257,7 +257,7 @@ "This is the final warning: Do you really want to enable encryption?" : "Esta é a advertencia final. Confirma que quere activar o cifrado?", "No encryption module loaded, please enable an encryption module in the app menu." : "Non hai cargado ningún módulo de cifrado, active un módulo de cifrado no menú de aplicacións.", "Select default encryption module:" : "Seleccionar o módulo predeterminado de cifrado:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "Debes migrar as túas claves de cifrado do cifrado antigo (ownCloud <= 8.0) ao novo. Activa o \"Módulo de cifrado predeterminado\" e executa {command}", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "É necesario migrar as súas claves de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Active o «Módulo predeterminado de cifrado» e execute {command}", "Unable to update server side encryption config" : "Non se puido actualizar a configuración de cifrado do servidor", "Rename group" : "Cambiar o nome do grupo", "Remove group" : "Retirar o grupo", @@ -274,7 +274,7 @@ "The file must be a PNG or JPG" : "O ficheiro debe ser PNG ou JPG", "Picture provided by original account" : "Imaxe fornecida pola conta orixinal ", "Cancel" : "Cancelar", - "Set as profile picture" : "Establecer como imaxe de perfil", + "Set as profile picture" : "Estabelecer como imaxe de perfil", "Please note that it can take up to 24 hours for your profile picture to be updated everywhere." : "Ten en conta que pode tardar ata 24 horas en actualizar a túa foto de perfil en todas partes.", "Choose your profile picture" : "Escolle a túa imaxe de perfil", "Please select a valid png or jpg file" : "Seleccione un ficheiro png ou jpg válido", @@ -287,40 +287,39 @@ "You are a member of the following groups:" : "Vostede é membro dos seguintes grupos: ", "You are using <strong>{usage}</strong>" : "Estás usando <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Estás usando <strong>{usage}</strong> de <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", - "Your full name" : "O teu nome completo", - "Email options" : "Opcións de correo electrónico", - "Primary email for password reset and notifications" : "Correo electrónico principal para restablecer o contrasinal e notificacións", - "Remove primary email" : "Eliminar o correo electrónico principal", - "Delete email" : "Eliminar o correo electrónico", - "Unset as primary email" : "Desactivar como correo electrónico principal", + "Your full name" : "O seu nome completo", + "Email options" : "Opcións de correo -e", + "Primary email for password reset and notifications" : "Correo-e principal para restabelecer o contrasinal e notificacións", + "Remove primary email" : "Retirar o correo-e principal", + "Delete email" : "Eliminar o correo-e", + "Unset as primary email" : "Desactivar como correo principal", "This address is not confirmed" : "Este enderezo non está confirmado", - "Set as primary email" : "Establecer como correo electrónico principal", + "Set as primary email" : "Estabelecer como correo principal", "Your email address" : "O seu enderezo de correo", - "Additional email address {index}" : "Enderezo de correo electrónico adicional {index}", - "Unable to delete primary email address" : "Non se puido eliminar o enderezo de correo electrónico principal", - "Unable to update primary email address" : "Non se puido actualizar o enderezo de correo electrónico principal", - "Unable to add additional email address" : "Non se puido engadir un enderezo de correo electrónico adicional", - "Unable to update additional email address" : "Non se puido actualizar o enderezo de correo electrónico adicional", - "Unable to delete additional email address" : "Non se puido eliminar o enderezo de correo electrónico adicional", + "Additional email address {index}" : "Enderezo de correo adicional {index}", + "Unable to delete primary email address" : "Non foi posíbel eliminar o enderezo de correo principal", + "Unable to update primary email address" : "Non foi posíbel actualizar o enderezo de correo principal", + "Unable to add additional email address" : "Non foi posíbel engadir un o enderezo de correo adicional", + "Unable to update additional email address" : "Non foi posíbel actualizar o enderezo de correo adicional", + "Unable to delete additional email address" : "Non foi posíbel eliminar o enderezo de correo adicional", "No email address set" : "Non hai un enderezo de correo definido", - "Additional emails" : "Correos electrónicos adicionais", - "Your handle" : "O teu apodo", + "Additional emails" : "Correos adicionais", "Your headline" : "O teu titular", "Language" : "Idioma", "Help translate" : "Axude na tradución", - "Unable to update language" : "Non se puido actualizar o idioma", + "Unable to update language" : "Non foi posíbel actualizar o idioma", "No language set" : "Non foi estabelecido ningún idioma", "Locale" : "Configuración rexional", "Week starts on {firstDayOfWeek}" : "A semana comeza o {firstDayOfWeek}", - "Unable to update locale" : "Non se puido actualizar a configuración rexional", + "Unable to update locale" : "Non foi posíbel actualizar a configuración rexional", "No locale set" : "Non se definiu ningunha configuración rexional", - "Your location" : "A túa localización", + "Your location" : "A súa localización", "Your organisation" : "A súa organización", "Your phone number" : "O seu número de teléfono", "Edit your Profile visibility" : "Edita a visibilidade do teu Perfil", "Enable Profile" : "Activar o Perfil", "Unable to update profile enabled state" : "Non se puido actualizar o estado activado do perfil", - "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "A configuración máis restritiva de visibilidade ou alcance é respectada no teu Perfil. Por exemplo, se a visibilidade está definida como \"Mostrar a todos\" e o ámbito está configurado como \"Privado\", respéctase \"Privado\".", + "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "No seu perfil respectase a configuración máis restritiva de visibilidade ou ambito. Por exemplo, se a visibilidade está definida como«Amosar a todos» e o ámbito está configurado como «Privado», respéctase «Privado».", "Unable to update visibility of {displayId}" : "Non se puido actualizar a visibilidade de {displayId}", "Your role" : "O teu cargo", "Your Twitter handle" : "O seu usuario do Twitter", @@ -330,7 +329,7 @@ "Change scope level of {property}, current scope is {scope}" : "Cambiar o nivel de ámbito de {property}, o ámbito actual é {scope}", "Unable to update federation scope of the primary {property}" : "Non se puido actualizar o ámbito de federación da {property} principal", "Unable to update federation scope of additional {property}" : "Non se puido actualizar o ámbito da federación de {property} adicional", - "Add additional email" : "Engade correo electrónico adicional", + "Add additional email" : "Engadir un correo adicional", "Add" : "Engadir", "You do not have permissions to see the details of this user" : "Vostede non ten permisos para ver os detalles deste usuario", "Add new password" : "Engadir un novo contrasinal", @@ -405,7 +404,7 @@ "Profile picture" : "Imaxe do perfil", "About" : "Sobre", "Full name" : "Nome completo", - "Additional email" : "Correo electrónico adicional", + "Additional email" : "Correo-e adicional", "Headline" : "Titular", "Organisation" : "Organización", "Phone number" : "Número de teléfono", @@ -414,20 +413,20 @@ "Fediverse (e.g. Mastodon)" : "Fediverso (por exemplo, Mastodon)", "Website" : "Sitio web", "Profile visibility" : "Visibilidade do perfil", - "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Non dispoñible, xa que esta propiedade é necesaria para as funcións básicas, como compartir ficheiros e invitacións de calendario", - "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Non dispoñible porque a federación foi desactivada para a túa conta, ponte en contacto co administrador do sistema se tes algunha dúbida", - "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Non está dispoñible xa que non se permite publicar datos específicos do usuario no servidor de busca, póñase en contacto co administrador do sistema se tes algunha dúbida", - "Active apps" : "Aplcativos activos", + "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Non está dispoñíbel porque esta propiedade é necesaria para as funcións básicas, como compartir ficheiros e convites de calendario", + "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Non está dispoñíbel porque a federación foi desactivada para a súa conta, póñase en contacto co administrador do sistema se ten algunha dúbida", + "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Non está dispoñíbel porque non se permite publicar datos específicos do usuario no servidor de buscas, póñase en contacto co administrador do sistema se ten algunha dúbida", + "Active apps" : "Aplicacións activas", "Disabled apps" : "Aplicacións desactivadas", "Updates" : "Actualizacións", "App bundles" : "Paquetes de aplicacións", "Featured apps" : "Aplis destacadas", - "Show to everyone" : "Mostrar a todos", - "Show to logged in users only" : "Mostrar só a usuarios que iniciaron sesión", + "Show to everyone" : "Amosar a todos", + "Show to logged in users only" : "Amosar só aos usuarios que iniciaron sesión", "Hide" : "Agochar", "Download and enable" : "Descargar e activar", "Enable untested app" : "Activar a aplicación sen probar", - "The app will be downloaded from the App Store" : "A aplicación descargarase da Tenda de Aplicacións", + "The app will be downloaded from the App Store" : "A aplicación descargarase da tenda de aplicacións", "This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected." : "Esta aplicación non está marcado como compatíbel coa súa versión do Nextcloud. Se continúa, poderá instalar a aplicación. Teña en conta que é probábel que a aplicación non funcione como se agarda.", "Never" : "Nunca", "An error occurred during the request. Unable to proceed." : "Produciuse un erro durante a solicitude. Non se pode continuar.", @@ -453,7 +452,7 @@ "SMTP Username" : "Nome de usuario SMTP", "SMTP Password" : "Contrasinal SMTP", "Save" : "Gardar", - "Test and verify email settings" : "Proba e verifica a configuración do correo electrónico", + "Test and verify email settings" : "Probe e verifique os axustes do correo", "Send email" : "Enviar o correo", "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "É importante para a seguridade e o bo funcionamento da súa instancia que todo estea configurado correctamente. Para axudarlle niso, imos facer algunhas comprobacións automáticas. Vexa a documentación ligada para obter máis información. ", "All checks passed." : "Pasáronse todas as verificacións.", @@ -484,7 +483,7 @@ "Exclude groups from sharing" : "Excluír grupos da compartición", "These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.", "Allow username autocompletion to users based on phone number integration" : "Permitir o autocompletado do nome de usuario aos usuarios en función da integración do número de teléfono", - "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se está activado o autocompletado \"mesmo grupo\" e a \"integración do número de teléfono\", unha coincidencia en calquera é suficiente para mostrar ao usuario.", + "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se está activado o autocompletado «mesmo grupo» e a «integración do número de teléfono», unha coincidencia en calquera é abondo para amosar o usuario.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Permitir o autocompletado ao introducir o nome completo ou o enderezo de correo electrónico (ignorando a coincidencia que falta na axenda telefónica e estar no mesmo grupo)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Amosar o texto de exención de responsabilidade na páxina de envío de ligazóns publicas (amosarase só cando a lista de ficheiros estea agochada)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto amosarase na páxina de envío das ligazóns públicas cando a lista de ficheiros estea agochada.", @@ -500,7 +499,7 @@ "Use a second factor besides your password to increase security for your account." : "Empregue un segundo factor ademais do seu contrasinal para aumentar a seguridade da súa conta.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.", "You created app password \"{token}\"" : "Vostede creou o contrasinal da aplicación «{token}»", - "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación \"{token}\"", + "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación «{token}»", "Choose profile picture from files" : "Escolle a imaxe de perfil dende Ficheiros", "png or jpg, max. 20 MB" : "png ou jpg, max. 20 MB", "Plain" : "Simple", diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js index 34eb2514106..dda84fe0d4e 100644 --- a/apps/settings/l10n/hu.js +++ b/apps/settings/l10n/hu.js @@ -273,7 +273,7 @@ OC.L10N.register( "Upload profile picture" : "Profilkép feltöltése", "Choose profile picture from Files" : "Válasszon profilképet a Fájlokból", "Remove profile picture" : "Profilkép eltávolítása", - "The file must be a PNG or JPG" : "A képnek PNG-nek vagy JPG-nek kell lennie", + "The file must be a PNG or JPG" : "A fájlnak PNG-nek vagy JPG-nek kell lennie", "Picture provided by original account" : "Az eredeti fiók által biztosított kép.", "Cancel" : "Mégse", "Set as profile picture" : "Beállítás profilképként", @@ -335,11 +335,14 @@ OC.L10N.register( "Add additional email" : "További e-mail hozzáadása", "Add" : "Hozzáadás", "You do not have permissions to see the details of this user" : "Nincs jogosultsága megnézni a felhasználó részletes adatait", + "Edit display name" : "Megjelenítendő név szerkesztése", "Add new password" : "Új jelszó hozzáadása", "Add new email address" : "Új e-mail-cím hozzáadása", "Add user to group" : "Felhasználó hozzáadása egy csoporthoz", "Set user as admin for" : "Felhasználó beállítása rendszergazdaként itt:", "Select user quota" : "Válasszon felhasználói kvótát", + "Set the language" : "Nyelv beállítása", + "Select manager" : "Kezelő kiválasztása", "Toggle user actions menu" : "Felhasználói műveletek menü be/ki", "Delete user" : "Felhasználó törlése", "Wipe all devices" : "Összes eszköz törlése", @@ -355,17 +358,20 @@ OC.L10N.register( "Welcome mail sent!" : "Üdvözlő üzenet elküldve!", "Edit User" : "Felhasználó szerkesztése", "{size} used" : "{size} felhasználva", + "User's table" : "A felhasználó táblázata", "New user" : "Új felhasználó", "Will be autogenerated" : "Automatikusan lesz elkészítve", "Display name" : "Megjelenítendő név", "Email" : "E-mail", "Default language" : "Alapértelmezett nyelv", + "Select user manager" : "Felhasználókezelő kiválasztása", "Add a new user" : "Új felhasználó felvétele", "Group admin for" : "Csoport rendszergazda itt:", "Quota" : "Kvóta", "User backend" : "Felhasználói háttérszolgáltatás", "Storage location" : "Háttértár helye", "Last login" : "Utolsó bejelentkezés", + "Manager" : "Kezelő", "No users in here" : "Nincsenek felhasználók", "Default quota" : "Alapértelmezett kvóta", "Common languages" : "Alapvető nyelvek", @@ -485,6 +491,8 @@ OC.L10N.register( "Restrict users to only share with users in their groups" : "A felhasználók korlátozása, hogy csak a csoportjaikban lévő felhasználókkal oszthassanak meg dolgokat", "Exclude groups from sharing" : "Csoportok megosztási jogának tiltása", "These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.", + "Allow username autocompletion in share dialog and allow access to the system address book" : "Felhasználónév automatikus kiegészítésének bekapcsolása a megosztási párbeszédablakban, és hozzáférés engedélyezése a rendszer címjegyzékéhez", + "Allow username autocompletion to users within the same groups and limit system address books to users in the same groups" : "Felhasználónév automatikus kiegészítésének bekapcsolása az ugyanabban a csoportban lévő felhasználók számára, és a rendszer címjegyzékének ugyanezekre a felhasználókra korlátozása", "Allow username autocompletion to users based on phone number integration" : "A felhasználónév automatikus kiegészítésének engedélyezése a felhasználók számára a telefonszám integráció alapján ", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Ha az „ugyanazon csoport” és a „telefonszám integráció” engedélyezett, akkor bármelyik egyezés elegendő a felhasználó megjelenítéséhez. ", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Az automatikus kiegészítés engedélyezése a teljes név vagy e-mail-cím megadásakor (figyelmen kívül hagyva a hiányzó telefonkönyves egyezést és az ugyanabba a csoportba tartozást)", @@ -510,6 +518,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "A felhasználónév automatikus kiegészítésének engedélyezése a megosztás párbeszédpanelen ", "Allow username autocompletion to users within the same groups" : "A felhasználónév automatikus kiegészítésének engedélyezése az azonos csoportokba tartozó felhasználók számára ", - "Avatar" : "Profilkép" + "Avatar" : "Profilkép", + "User actions" : "Felhasználói műveletek" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json index 71b36fab997..a98324042d8 100644 --- a/apps/settings/l10n/hu.json +++ b/apps/settings/l10n/hu.json @@ -271,7 +271,7 @@ "Upload profile picture" : "Profilkép feltöltése", "Choose profile picture from Files" : "Válasszon profilképet a Fájlokból", "Remove profile picture" : "Profilkép eltávolítása", - "The file must be a PNG or JPG" : "A képnek PNG-nek vagy JPG-nek kell lennie", + "The file must be a PNG or JPG" : "A fájlnak PNG-nek vagy JPG-nek kell lennie", "Picture provided by original account" : "Az eredeti fiók által biztosított kép.", "Cancel" : "Mégse", "Set as profile picture" : "Beállítás profilképként", @@ -333,11 +333,14 @@ "Add additional email" : "További e-mail hozzáadása", "Add" : "Hozzáadás", "You do not have permissions to see the details of this user" : "Nincs jogosultsága megnézni a felhasználó részletes adatait", + "Edit display name" : "Megjelenítendő név szerkesztése", "Add new password" : "Új jelszó hozzáadása", "Add new email address" : "Új e-mail-cím hozzáadása", "Add user to group" : "Felhasználó hozzáadása egy csoporthoz", "Set user as admin for" : "Felhasználó beállítása rendszergazdaként itt:", "Select user quota" : "Válasszon felhasználói kvótát", + "Set the language" : "Nyelv beállítása", + "Select manager" : "Kezelő kiválasztása", "Toggle user actions menu" : "Felhasználói műveletek menü be/ki", "Delete user" : "Felhasználó törlése", "Wipe all devices" : "Összes eszköz törlése", @@ -353,17 +356,20 @@ "Welcome mail sent!" : "Üdvözlő üzenet elküldve!", "Edit User" : "Felhasználó szerkesztése", "{size} used" : "{size} felhasználva", + "User's table" : "A felhasználó táblázata", "New user" : "Új felhasználó", "Will be autogenerated" : "Automatikusan lesz elkészítve", "Display name" : "Megjelenítendő név", "Email" : "E-mail", "Default language" : "Alapértelmezett nyelv", + "Select user manager" : "Felhasználókezelő kiválasztása", "Add a new user" : "Új felhasználó felvétele", "Group admin for" : "Csoport rendszergazda itt:", "Quota" : "Kvóta", "User backend" : "Felhasználói háttérszolgáltatás", "Storage location" : "Háttértár helye", "Last login" : "Utolsó bejelentkezés", + "Manager" : "Kezelő", "No users in here" : "Nincsenek felhasználók", "Default quota" : "Alapértelmezett kvóta", "Common languages" : "Alapvető nyelvek", @@ -483,6 +489,8 @@ "Restrict users to only share with users in their groups" : "A felhasználók korlátozása, hogy csak a csoportjaikban lévő felhasználókkal oszthassanak meg dolgokat", "Exclude groups from sharing" : "Csoportok megosztási jogának tiltása", "These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.", + "Allow username autocompletion in share dialog and allow access to the system address book" : "Felhasználónév automatikus kiegészítésének bekapcsolása a megosztási párbeszédablakban, és hozzáférés engedélyezése a rendszer címjegyzékéhez", + "Allow username autocompletion to users within the same groups and limit system address books to users in the same groups" : "Felhasználónév automatikus kiegészítésének bekapcsolása az ugyanabban a csoportban lévő felhasználók számára, és a rendszer címjegyzékének ugyanezekre a felhasználókra korlátozása", "Allow username autocompletion to users based on phone number integration" : "A felhasználónév automatikus kiegészítésének engedélyezése a felhasználók számára a telefonszám integráció alapján ", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Ha az „ugyanazon csoport” és a „telefonszám integráció” engedélyezett, akkor bármelyik egyezés elegendő a felhasználó megjelenítéséhez. ", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Az automatikus kiegészítés engedélyezése a teljes név vagy e-mail-cím megadásakor (figyelmen kívül hagyva a hiányzó telefonkönyves egyezést és az ugyanabba a csoportba tartozást)", @@ -508,6 +516,7 @@ "STARTTLS" : "STARTTLS", "Allow username autocompletion in share dialog" : "A felhasználónév automatikus kiegészítésének engedélyezése a megosztás párbeszédpanelen ", "Allow username autocompletion to users within the same groups" : "A felhasználónév automatikus kiegészítésének engedélyezése az azonos csoportokba tartozó felhasználók számára ", - "Avatar" : "Profilkép" + "Avatar" : "Profilkép", + "User actions" : "Felhasználói műveletek" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/settings/l10n/uk.js b/apps/settings/l10n/uk.js index 39462321c0e..2bf2f6907c8 100644 --- a/apps/settings/l10n/uk.js +++ b/apps/settings/l10n/uk.js @@ -45,8 +45,8 @@ OC.L10N.register( "You granted filesystem access to app password \"{token}\"" : "Ви надали доступ до файлової системи паролю програми \"{token}\"", "You revoked filesystem access from app password \"{token}\"" : "Ви скасували доступ до файлової системи з паролем програми \"{token}\"", "Security" : "Безпека", - "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли з використанням двофакторної автентифікації (%1$s)", - "A login attempt using two-factor authentication failed (%1$s)" : "Помилка спроби входу в систему з використанням двофакторної автентифікації (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли з використанням двофакторної авторизації (%1$s)", + "A login attempt using two-factor authentication failed (%1$s)" : "Помилка під час здійснення входу з використанням двофакторної авторизації (%1$s)", "Remote wipe was started on %1$s" : "Розпочато віддалене стирання на %1$s", "Remote wipe has finished on %1$s" : "Віддалене стирання на %1$s завершено", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ваш <strong>пароль</strong> чи <strong>електронна пошта</strong> було змінено", @@ -58,7 +58,7 @@ OC.L10N.register( "Saved" : "Збережено", "No user supplied" : "Користувача не вказано", "Unable to change password. Password too long." : "Неможливо змінити пароль. Пароль задовгий.", - "Authentication error" : "Помилка автентифікації", + "Authentication error" : "Помилка авторизації", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Будь ласка, введіть пароль відновлення адміністратора; інакше всі дані користувача будуть втрачені.", "Wrong admin recovery password. Please check the password and try again." : "Невірний пароль відновлення адміністратора. Будь ласка, перевірте пароль та спробуйте ще раз.", "Backend does not support password change, but the user's encryption key was updated." : "Сервер не підтримує зміну пароля, але ключ шифрування користувача було оновлено.", @@ -119,7 +119,7 @@ OC.L10N.register( "Settings" : "Налаштування", "Personal" : "Особисте", "Administration" : "Адміністрування", - "Additional settings" : "Додаткові налаштування", + "Additional settings" : "Додаткові", "Administration privileges" : "Права адміністратора", "Groupware" : "Робочі групи", "Overview" : "Огляд", @@ -151,14 +151,14 @@ OC.L10N.register( "Here you can decide which group can access certain sections of the administration settings." : "Тут ви можете вирішити, яка група матиме доступ до певних розділів налаштувань адміністрування.", "None" : "Відсутній", "Unable to modify setting" : "Неможливо змінити налаштування", - "Two-Factor Authentication" : "Двофакторна аутентифікація", - "Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Двофакторну автентифікацію можна застосувати для всіх користувачів і окремих груп. Якщо у них не налаштовано двофакторний провайдер, вони не зможуть увійти в систему.", - "Enforce two-factor authentication" : "Примусова двофакторна аутентифікація", + "Two-Factor Authentication" : "Двофакторна авторизація", + "Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Двофакторну авторизацію можна примусово визначити як для всіх користувачів, так й для окремих груп. Якщо такі користувачі не визначили постачальника двофакторної авторизації, то вони не зможуть увійти до хмари.", + "Enforce two-factor authentication" : "Примусово увімкнути двофакторну авторизацію", "Limit to groups" : "Обмежити групами", - "Enforcement of two-factor authentication can be set for certain groups only." : "Примусову двофакторну автентифікацію можна встановити лише для певних груп.", - "Two-factor authentication is enforced for all members of the following groups." : "Двофакторна автентифікація застосовується для всіх учасників наступних груп.", + "Enforcement of two-factor authentication can be set for certain groups only." : "Примусову двофакторну авторизацію можна встановити лише для певних груп.", + "Two-factor authentication is enforced for all members of the following groups." : "Двофакторна авторизація застосовуватиметься для всіх учасників таких груп.", "Enforced groups" : "Примусові групи", - "Two-factor authentication is not enforced for members of the following groups." : "Двофакторна автентифікація не застосовується для учасників наведених нижче груп.", + "Two-factor authentication is not enforced for members of the following groups." : "Двофакторна авторизації не застосовуватиметься для учасників таких груп.", "Excluded groups" : "Виключені групи", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Коли групи вибрано/виключено, вони використовують таку логіку, щоб визначити, чи застосовано для користувача 2FA: якщо не вибрано жодної групи, 2FA ввімкнено для всіх, крім членів виключених груп. Якщо вибрано групи, для всіх учасників увімкнено 2FA. Якщо користувач одночасно входить до вибраної та виключеної групи, вибраний має пріоритет і застосовується 2FA.", "Save changes" : "Зберегти зміни", @@ -305,7 +305,7 @@ OC.L10N.register( "Unable to update additional email address" : "Не вдалося оновити додаткову електронну адресу", "Unable to delete additional email address" : "Не вдалося вилучити додаткову електронну адресу", "No email address set" : "E-mail не вказано", - "Additional emails" : "Додаткові електронні листи", + "Additional emails" : "Додаткові ел. адреси", "Your handle" : "Ви керуєте", "Your headline" : "Ваш заголовок", "Language" : "Мова", @@ -313,7 +313,7 @@ OC.L10N.register( "Unable to update language" : "Не вдалося оновити мову", "No language set" : "Мову не визначено", "Locale" : "Локаль", - "Week starts on {firstDayOfWeek}" : "Тиждень починається {firstDayOfWeek}", + "Week starts on {firstDayOfWeek}" : "Тиждень починається у {firstDayOfWeek}", "Unable to update locale" : "Не вдалося оновити мову", "No locale set" : "Мову не визначено", "Your location" : "Ваше місце розташування", @@ -448,15 +448,15 @@ OC.L10N.register( "From address" : "Адреса відправника", "Server address" : "Адреса сервера", "Port" : "Порт", - "Authentication method" : "Спосіб аутентифікації", + "Authentication method" : "Спосіб авторизації", "Only applies when authentication is required" : "Застосовується, коли вимагається авторизація", - "Authentication required" : "Потрібна аутентифікація", + "Authentication required" : "Потрібно авторизуватися", "Credentials" : "Облікові дані", "SMTP Username" : "Ім'я користувача SMTP", "SMTP Password" : "Пароль SMTP", "Save" : "Зберегти", - "Test and verify email settings" : "Перевірте та перевірте налаштування електронної пошти", - "Send email" : "Надіслати листа", + "Test and verify email settings" : "Перевірити налаштування електронної пошти", + "Send email" : "Надіслати повідомлення", "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Для безпеки та продуктивності вашого сервера важливо, щоб все було налаштовано правильно. Щоб допомогти вам, ми робимо деякі автоматичні перевірки. Будь ласка, перегляньте пов'язану документацію для отримання додаткової інформації.", "All checks passed." : "Всі перевірки виконано.", "There are some errors regarding your setup." : "У ваших налаштуваннях є деякі помилки.", @@ -500,7 +500,7 @@ OC.L10N.register( "Subscribe to our newsletter" : "Підпишіться на нашу розсилку", "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Цей випуск спільноти Nextcloud не підтримується, і миттєві сповіщення недоступні.", "Use a second factor besides your password to increase security for your account." : "Використовуйте другий фактор, крім пароля, щоб підвищити безпеку свого облікового запису.", - "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Якщо ви використовуєте програми сторонніх розробників для підключення до Nextcloud, переконайтеся, що ви створили та налаштували пароль програми для кожної з них, перш ніж увімкнути автентифікацію за другим фактором.", + "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Якщо ви використовуєте застосунки сторонніх розробників, які з'єднуються з хмарою Nextcloud, будь ласа, переконайтеся, що ви створили та налаштували паролі на кожен окреми застосунок, перш ніж вмикати двофакторну авторизацію.", "You created app password \"{token}\"" : "Ви створили пароль програми \"{token}\"", "An administrator created app password \"{token}\"" : "Адміністратор створив пароль програми \"{token}\"", "Choose profile picture from files" : "Виберіть зображення профілю з файлів", diff --git a/apps/settings/l10n/uk.json b/apps/settings/l10n/uk.json index 57dd18e0efe..6a59f2e4df0 100644 --- a/apps/settings/l10n/uk.json +++ b/apps/settings/l10n/uk.json @@ -43,8 +43,8 @@ "You granted filesystem access to app password \"{token}\"" : "Ви надали доступ до файлової системи паролю програми \"{token}\"", "You revoked filesystem access from app password \"{token}\"" : "Ви скасували доступ до файлової системи з паролем програми \"{token}\"", "Security" : "Безпека", - "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли з використанням двофакторної автентифікації (%1$s)", - "A login attempt using two-factor authentication failed (%1$s)" : "Помилка спроби входу в систему з використанням двофакторної автентифікації (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли з використанням двофакторної авторизації (%1$s)", + "A login attempt using two-factor authentication failed (%1$s)" : "Помилка під час здійснення входу з використанням двофакторної авторизації (%1$s)", "Remote wipe was started on %1$s" : "Розпочато віддалене стирання на %1$s", "Remote wipe has finished on %1$s" : "Віддалене стирання на %1$s завершено", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ваш <strong>пароль</strong> чи <strong>електронна пошта</strong> було змінено", @@ -56,7 +56,7 @@ "Saved" : "Збережено", "No user supplied" : "Користувача не вказано", "Unable to change password. Password too long." : "Неможливо змінити пароль. Пароль задовгий.", - "Authentication error" : "Помилка автентифікації", + "Authentication error" : "Помилка авторизації", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Будь ласка, введіть пароль відновлення адміністратора; інакше всі дані користувача будуть втрачені.", "Wrong admin recovery password. Please check the password and try again." : "Невірний пароль відновлення адміністратора. Будь ласка, перевірте пароль та спробуйте ще раз.", "Backend does not support password change, but the user's encryption key was updated." : "Сервер не підтримує зміну пароля, але ключ шифрування користувача було оновлено.", @@ -117,7 +117,7 @@ "Settings" : "Налаштування", "Personal" : "Особисте", "Administration" : "Адміністрування", - "Additional settings" : "Додаткові налаштування", + "Additional settings" : "Додаткові", "Administration privileges" : "Права адміністратора", "Groupware" : "Робочі групи", "Overview" : "Огляд", @@ -149,14 +149,14 @@ "Here you can decide which group can access certain sections of the administration settings." : "Тут ви можете вирішити, яка група матиме доступ до певних розділів налаштувань адміністрування.", "None" : "Відсутній", "Unable to modify setting" : "Неможливо змінити налаштування", - "Two-Factor Authentication" : "Двофакторна аутентифікація", - "Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Двофакторну автентифікацію можна застосувати для всіх користувачів і окремих груп. Якщо у них не налаштовано двофакторний провайдер, вони не зможуть увійти в систему.", - "Enforce two-factor authentication" : "Примусова двофакторна аутентифікація", + "Two-Factor Authentication" : "Двофакторна авторизація", + "Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Двофакторну авторизацію можна примусово визначити як для всіх користувачів, так й для окремих груп. Якщо такі користувачі не визначили постачальника двофакторної авторизації, то вони не зможуть увійти до хмари.", + "Enforce two-factor authentication" : "Примусово увімкнути двофакторну авторизацію", "Limit to groups" : "Обмежити групами", - "Enforcement of two-factor authentication can be set for certain groups only." : "Примусову двофакторну автентифікацію можна встановити лише для певних груп.", - "Two-factor authentication is enforced for all members of the following groups." : "Двофакторна автентифікація застосовується для всіх учасників наступних груп.", + "Enforcement of two-factor authentication can be set for certain groups only." : "Примусову двофакторну авторизацію можна встановити лише для певних груп.", + "Two-factor authentication is enforced for all members of the following groups." : "Двофакторна авторизація застосовуватиметься для всіх учасників таких груп.", "Enforced groups" : "Примусові групи", - "Two-factor authentication is not enforced for members of the following groups." : "Двофакторна автентифікація не застосовується для учасників наведених нижче груп.", + "Two-factor authentication is not enforced for members of the following groups." : "Двофакторна авторизації не застосовуватиметься для учасників таких груп.", "Excluded groups" : "Виключені групи", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Коли групи вибрано/виключено, вони використовують таку логіку, щоб визначити, чи застосовано для користувача 2FA: якщо не вибрано жодної групи, 2FA ввімкнено для всіх, крім членів виключених груп. Якщо вибрано групи, для всіх учасників увімкнено 2FA. Якщо користувач одночасно входить до вибраної та виключеної групи, вибраний має пріоритет і застосовується 2FA.", "Save changes" : "Зберегти зміни", @@ -303,7 +303,7 @@ "Unable to update additional email address" : "Не вдалося оновити додаткову електронну адресу", "Unable to delete additional email address" : "Не вдалося вилучити додаткову електронну адресу", "No email address set" : "E-mail не вказано", - "Additional emails" : "Додаткові електронні листи", + "Additional emails" : "Додаткові ел. адреси", "Your handle" : "Ви керуєте", "Your headline" : "Ваш заголовок", "Language" : "Мова", @@ -311,7 +311,7 @@ "Unable to update language" : "Не вдалося оновити мову", "No language set" : "Мову не визначено", "Locale" : "Локаль", - "Week starts on {firstDayOfWeek}" : "Тиждень починається {firstDayOfWeek}", + "Week starts on {firstDayOfWeek}" : "Тиждень починається у {firstDayOfWeek}", "Unable to update locale" : "Не вдалося оновити мову", "No locale set" : "Мову не визначено", "Your location" : "Ваше місце розташування", @@ -446,15 +446,15 @@ "From address" : "Адреса відправника", "Server address" : "Адреса сервера", "Port" : "Порт", - "Authentication method" : "Спосіб аутентифікації", + "Authentication method" : "Спосіб авторизації", "Only applies when authentication is required" : "Застосовується, коли вимагається авторизація", - "Authentication required" : "Потрібна аутентифікація", + "Authentication required" : "Потрібно авторизуватися", "Credentials" : "Облікові дані", "SMTP Username" : "Ім'я користувача SMTP", "SMTP Password" : "Пароль SMTP", "Save" : "Зберегти", - "Test and verify email settings" : "Перевірте та перевірте налаштування електронної пошти", - "Send email" : "Надіслати листа", + "Test and verify email settings" : "Перевірити налаштування електронної пошти", + "Send email" : "Надіслати повідомлення", "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Для безпеки та продуктивності вашого сервера важливо, щоб все було налаштовано правильно. Щоб допомогти вам, ми робимо деякі автоматичні перевірки. Будь ласка, перегляньте пов'язану документацію для отримання додаткової інформації.", "All checks passed." : "Всі перевірки виконано.", "There are some errors regarding your setup." : "У ваших налаштуваннях є деякі помилки.", @@ -498,7 +498,7 @@ "Subscribe to our newsletter" : "Підпишіться на нашу розсилку", "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Цей випуск спільноти Nextcloud не підтримується, і миттєві сповіщення недоступні.", "Use a second factor besides your password to increase security for your account." : "Використовуйте другий фактор, крім пароля, щоб підвищити безпеку свого облікового запису.", - "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Якщо ви використовуєте програми сторонніх розробників для підключення до Nextcloud, переконайтеся, що ви створили та налаштували пароль програми для кожної з них, перш ніж увімкнути автентифікацію за другим фактором.", + "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Якщо ви використовуєте застосунки сторонніх розробників, які з'єднуються з хмарою Nextcloud, будь ласа, переконайтеся, що ви створили та налаштували паролі на кожен окреми застосунок, перш ніж вмикати двофакторну авторизацію.", "You created app password \"{token}\"" : "Ви створили пароль програми \"{token}\"", "An administrator created app password \"{token}\"" : "Адміністратор створив пароль програми \"{token}\"", "Choose profile picture from files" : "Виберіть зображення профілю з файлів", diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php index d0ed408df02..bc84e17535e 100644 --- a/apps/settings/lib/Controller/AppSettingsController.php +++ b/apps/settings/lib/Controller/AppSettingsController.php @@ -187,7 +187,7 @@ class AppSettingsController extends Controller { $formattedCategories[] = [ 'id' => $category['id'], 'ident' => $category['id'], - 'displayName' => isset($category['translations'][$currentLanguage]['name']) ? $category['translations'][$currentLanguage]['name'] : $category['translations']['en']['name'], + 'displayName' => $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'], ]; } @@ -370,9 +370,9 @@ class AppSettingsController extends Controller { $formattedApps[] = [ 'id' => $app['id'], - 'name' => isset($app['translations'][$currentLanguage]['name']) ? $app['translations'][$currentLanguage]['name'] : $app['translations']['en']['name'], - 'description' => isset($app['translations'][$currentLanguage]['description']) ? $app['translations'][$currentLanguage]['description'] : $app['translations']['en']['description'], - 'summary' => isset($app['translations'][$currentLanguage]['summary']) ? $app['translations'][$currentLanguage]['summary'] : $app['translations']['en']['summary'], + 'name' => $app['translations'][$currentLanguage]['name'] ?? $app['translations']['en']['name'], + 'description' => $app['translations'][$currentLanguage]['description'] ?? $app['translations']['en']['description'], + 'summary' => $app['translations'][$currentLanguage]['summary'] ?? $app['translations']['en']['summary'], 'license' => $app['releases'][0]['licenses'], 'author' => $authors, 'shipped' => false, diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php index 2aceeae1016..5d2f4236a84 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -290,17 +290,6 @@ class CheckSetupController extends Controller { $features = $this->l10n->t('Federated Cloud Sharing'); } - // Check if at least OpenSSL after 1.01d or 1.0.2b - if (str_starts_with($versionString, 'OpenSSL/')) { - $majorVersion = substr($versionString, 8, 5); - $patchRelease = substr($versionString, 13, 6); - - if (($majorVersion === '1.0.1' && ord($patchRelease) < ord('d')) || - ($majorVersion === '1.0.2' && ord($patchRelease) < ord('b'))) { - return $this->l10n->t('cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably.', ['OpenSSL', $versionString, $features]); - } - } - // Check if NSS and perform heuristic check if (str_starts_with($versionString, 'NSS/')) { try { diff --git a/apps/settings/tests/Controller/CheckSetupControllerTest.php b/apps/settings/tests/Controller/CheckSetupControllerTest.php index 2b074d24c39..d129850f29e 100644 --- a/apps/settings/tests/Controller/CheckSetupControllerTest.php +++ b/apps/settings/tests/Controller/CheckSetupControllerTest.php @@ -716,43 +716,6 @@ class CheckSetupControllerTest extends TestCase { $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); } - public function testIsUsedTlsLibOutdatedWithOlderOpenSsl() { - $this->config->expects($this->any()) - ->method('getSystemValue') - ->willReturn(true); - $this->checkSetupController - ->expects($this->once()) - ->method('getCurlVersion') - ->willReturn(['ssl_version' => 'OpenSSL/1.0.1c']); - $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.1c). Please update your operating system or features such as installing and updating apps via the App Store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); - } - - public function testIsUsedTlsLibOutdatedWithOlderOpenSslAndWithoutAppstore() { - $this->config - ->expects($this->any()) - ->method('getSystemValue') - ->willReturnMap([ - ['has_internet_connection', true, true], - ['appstoreenabled', true, false], - ]); - $this->checkSetupController - ->expects($this->once()) - ->method('getCurlVersion') - ->willReturn(['ssl_version' => 'OpenSSL/1.0.1c']); - $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.1c). Please update your operating system or features such as Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); - } - - public function testIsUsedTlsLibOutdatedWithOlderOpenSsl1() { - $this->config->expects($this->any()) - ->method('getSystemValue') - ->willReturn(true); - $this->checkSetupController - ->expects($this->once()) - ->method('getCurlVersion') - ->willReturn(['ssl_version' => 'OpenSSL/1.0.2a']); - $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.2a). Please update your operating system or features such as installing and updating apps via the App Store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); - } - public function testIsUsedTlsLibOutdatedWithMatchingOpenSslVersion() { $this->config->expects($this->any()) ->method('getSystemValue') diff --git a/apps/sharebymail/l10n/gl.js b/apps/sharebymail/l10n/gl.js index 605636662de..734d5936534 100644 --- a/apps/sharebymail/l10n/gl.js +++ b/apps/sharebymail/l10n/gl.js @@ -2,7 +2,7 @@ OC.L10N.register( "sharebymail", { "Shared with {email}" : "Compartido con {email}", - "Shared with {email} by {actor}" : "Compartido con {email} por {actor}Compartido con {email} por {actor}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", "Unshared from {email}" : "Recurso compartido eliminado dende {email}", "Unshared from {email} by {actor}" : "Recurso compartido eliminado dende {email} por {actor}", "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}", @@ -15,8 +15,8 @@ OC.L10N.register( "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}", "Share by mail" : "Compartido por correo", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", - "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non podemos enviarche o contrasinal xerado automaticamente. Establece un enderezo de correo electrónico válido na túa configuración persoal e téntao de novo.", - "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo electrónico. O enderezo de correo electrónico non é válido", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", + "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo. O enderezo de correo non é válido", "Failed to send share by email" : "Produciuse un fallo ao enviar o recurso compartido por correo", "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", @@ -28,7 +28,7 @@ OC.L10N.register( "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con vostede por %2$s", "Password to access »%s«" : "Contrasinal para acceder a «%s»", "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", - "This password will expire at %s" : "Este contrasinal caducará ás %s", + "This password will expire at %s" : "Este contrasinal caducará o %s", "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", @@ -41,7 +41,7 @@ OC.L10N.register( "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuarios compartan unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.", "Send password by mail" : "Enviar contrasinal por correo", "Reply to initiator" : "Resposta ao iniciador", - "Unable to update share by mail config" : "Non se puido actualizar a configuración de compartir por correo electrónico", + "Unable to update share by mail config" : "Non foi posíbel actualizar a configuración para compartir por correo", "Shared with %1$s" : "Compartido con %1$s", "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s", "Unshared from %1$s" : "Recurso compartido eliminado dende %1$s", diff --git a/apps/sharebymail/l10n/gl.json b/apps/sharebymail/l10n/gl.json index 99b32692a23..c6c6deb8bfb 100644 --- a/apps/sharebymail/l10n/gl.json +++ b/apps/sharebymail/l10n/gl.json @@ -1,6 +1,6 @@ { "translations": { "Shared with {email}" : "Compartido con {email}", - "Shared with {email} by {actor}" : "Compartido con {email} por {actor}Compartido con {email} por {actor}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", "Unshared from {email}" : "Recurso compartido eliminado dende {email}", "Unshared from {email} by {actor}" : "Recurso compartido eliminado dende {email} por {actor}", "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}", @@ -13,8 +13,8 @@ "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}", "Share by mail" : "Compartido por correo", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", - "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non podemos enviarche o contrasinal xerado automaticamente. Establece un enderezo de correo electrónico válido na túa configuración persoal e téntao de novo.", - "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo electrónico. O enderezo de correo electrónico non é válido", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", + "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo. O enderezo de correo non é válido", "Failed to send share by email" : "Produciuse un fallo ao enviar o recurso compartido por correo", "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", @@ -26,7 +26,7 @@ "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con vostede por %2$s", "Password to access »%s«" : "Contrasinal para acceder a «%s»", "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", - "This password will expire at %s" : "Este contrasinal caducará ás %s", + "This password will expire at %s" : "Este contrasinal caducará o %s", "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", @@ -39,7 +39,7 @@ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuarios compartan unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.", "Send password by mail" : "Enviar contrasinal por correo", "Reply to initiator" : "Resposta ao iniciador", - "Unable to update share by mail config" : "Non se puido actualizar a configuración de compartir por correo electrónico", + "Unable to update share by mail config" : "Non foi posíbel actualizar a configuración para compartir por correo", "Shared with %1$s" : "Compartido con %1$s", "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s", "Unshared from %1$s" : "Recurso compartido eliminado dende %1$s", diff --git a/apps/systemtags/l10n/ca.js b/apps/systemtags/l10n/ca.js index 78ee706f7a9..b8c11d5ebc9 100644 --- a/apps/systemtags/l10n/ca.js +++ b/apps/systemtags/l10n/ca.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Etiquetes col·laboratives", "Collaborative tagging functionality which shares tags among users." : "Funcionalitat d'etiquetatge col·laboratiu que permet compartir etiquetes entre usuaris.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalitat d'etiquetatge col·laboratiu que permet compartir etiquetes entre usuaris. Fantàstica per a equips.\n\t(Si sou un proveïdor amb una instància del Nextcloud per a diversos clients, s'aconsella inhabilitar aquesta aplicació perquè les etiquetes es comparteixen amb tothom.)", + "Loading collaborative tags …" : "S'estan carregant les etiquetes col·laboratives…", "Search or create collaborative tags" : "Cerqueu o creeu etiquetes col·laboratives", "Collaborative tags …" : "Etiquetes col·laboratives…", "No tags to select, type to create a new tag" : "No hi ha cap etiqueta per seleccionar, escriviu per a crear una etiqueta nova", diff --git a/apps/systemtags/l10n/ca.json b/apps/systemtags/l10n/ca.json index d4432abbd03..ba27535e13e 100644 --- a/apps/systemtags/l10n/ca.json +++ b/apps/systemtags/l10n/ca.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Etiquetes col·laboratives", "Collaborative tagging functionality which shares tags among users." : "Funcionalitat d'etiquetatge col·laboratiu que permet compartir etiquetes entre usuaris.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalitat d'etiquetatge col·laboratiu que permet compartir etiquetes entre usuaris. Fantàstica per a equips.\n\t(Si sou un proveïdor amb una instància del Nextcloud per a diversos clients, s'aconsella inhabilitar aquesta aplicació perquè les etiquetes es comparteixen amb tothom.)", + "Loading collaborative tags …" : "S'estan carregant les etiquetes col·laboratives…", "Search or create collaborative tags" : "Cerqueu o creeu etiquetes col·laboratives", "Collaborative tags …" : "Etiquetes col·laboratives…", "No tags to select, type to create a new tag" : "No hi ha cap etiqueta per seleccionar, escriviu per a crear una etiqueta nova", diff --git a/apps/systemtags/l10n/cs.js b/apps/systemtags/l10n/cs.js index b16bf069521..462361b88ce 100644 --- a/apps/systemtags/l10n/cs.js +++ b/apps/systemtags/l10n/cs.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Štítky pro spolupráci", "Collaborative tagging functionality which shares tags among users." : "Funkce opatřování štítky pro spolupráci, sdílenými mezi uživateli.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funkce pro opatřování štítky pro spolupráci, sdílenými mezi uživateli. Skvělé pro týmy.\n\t(Pokud jste poskytovateli instalace, sloužící více subjektům, je doporučeno tuto aplikaci vypnout, protože štítky jsou sdílené.)", + "Loading collaborative tags …" : "Načítání štítků pro spolupráci…", "Search or create collaborative tags" : "Hledat nebo vytvořit štítky pro spolupráci", "Collaborative tags …" : "Štítky pro spolupráci…", "No tags to select, type to create a new tag" : "Nevybrány žádné štítky k výběru – psaním vytvořte nový", diff --git a/apps/systemtags/l10n/cs.json b/apps/systemtags/l10n/cs.json index 746dba25411..7bea81dcef1 100644 --- a/apps/systemtags/l10n/cs.json +++ b/apps/systemtags/l10n/cs.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Štítky pro spolupráci", "Collaborative tagging functionality which shares tags among users." : "Funkce opatřování štítky pro spolupráci, sdílenými mezi uživateli.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funkce pro opatřování štítky pro spolupráci, sdílenými mezi uživateli. Skvělé pro týmy.\n\t(Pokud jste poskytovateli instalace, sloužící více subjektům, je doporučeno tuto aplikaci vypnout, protože štítky jsou sdílené.)", + "Loading collaborative tags …" : "Načítání štítků pro spolupráci…", "Search or create collaborative tags" : "Hledat nebo vytvořit štítky pro spolupráci", "Collaborative tags …" : "Štítky pro spolupráci…", "No tags to select, type to create a new tag" : "Nevybrány žádné štítky k výběru – psaním vytvořte nový", diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index 8484ea09c2e..97eb09385ba 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Kollaborative Schlagworte", "Collaborative tagging functionality which shares tags among users." : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n\t(Wenn Sie ein Anbieter mit einer Mehrkundeninstallation sind, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)", + "Loading collaborative tags …" : "Lade kollaborative Schlagworte …", "Search or create collaborative tags" : "Suchen oder erstellen von kollaborativen Schlagworten", "Collaborative tags …" : "Kollaborative Schlagworte ...", "No tags to select, type to create a new tag" : "Keine Schlagworte zur Auswahl, geben Sie ein, um ein neues Schlagwort zu erstellen", diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index 9a1eedc8f34..bbe5e96835b 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Kollaborative Schlagworte", "Collaborative tagging functionality which shares tags among users." : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n\t(Wenn Sie ein Anbieter mit einer Mehrkundeninstallation sind, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)", + "Loading collaborative tags …" : "Lade kollaborative Schlagworte …", "Search or create collaborative tags" : "Suchen oder erstellen von kollaborativen Schlagworten", "Collaborative tags …" : "Kollaborative Schlagworte ...", "No tags to select, type to create a new tag" : "Keine Schlagworte zur Auswahl, geben Sie ein, um ein neues Schlagwort zu erstellen", diff --git a/apps/systemtags/l10n/en_GB.js b/apps/systemtags/l10n/en_GB.js index 3389ccc476c..7ed06ca69e9 100644 --- a/apps/systemtags/l10n/en_GB.js +++ b/apps/systemtags/l10n/en_GB.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Collaborative tags", "Collaborative tagging functionality which shares tags among users." : "Collaborative tagging functionality which shares tags among users.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)", + "Loading collaborative tags …" : "Loading collaborative tags …", "Search or create collaborative tags" : "Search or create collaborative tags", "Collaborative tags …" : "Collaborative tags …", "No tags to select, type to create a new tag" : "No tags to select, type to create a new tag", diff --git a/apps/systemtags/l10n/en_GB.json b/apps/systemtags/l10n/en_GB.json index 504325c64ae..d6616f76771 100644 --- a/apps/systemtags/l10n/en_GB.json +++ b/apps/systemtags/l10n/en_GB.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Collaborative tags", "Collaborative tagging functionality which shares tags among users." : "Collaborative tagging functionality which shares tags among users.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)", + "Loading collaborative tags …" : "Loading collaborative tags …", "Search or create collaborative tags" : "Search or create collaborative tags", "Collaborative tags …" : "Collaborative tags …", "No tags to select, type to create a new tag" : "No tags to select, type to create a new tag", diff --git a/apps/systemtags/l10n/es.js b/apps/systemtags/l10n/es.js index 7fa778defbf..8d5adaaee69 100644 --- a/apps/systemtags/l10n/es.js +++ b/apps/systemtags/l10n/es.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidad de etiquetado colaborativo que comparte las etiquetas entre usuarios.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidad de etiquetado colaborativo que comparte las etiquetas entre usuarios. Adecuado para equipos.\n\n(Si eres un proveedor con una instalación en multitenencia), se aconseja desactivar esta app pues las etiquetas se comparten).", + "Loading collaborative tags …" : "Cargando etiquetas colaborativas …", "Search or create collaborative tags" : "Buscar o crear etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas ...", "No tags to select, type to create a new tag" : "No hay etiquetas para seleccionar, escriba para crear una etiqueta nueva", diff --git a/apps/systemtags/l10n/es.json b/apps/systemtags/l10n/es.json index fe37b48c7bd..c1fc2b188dc 100644 --- a/apps/systemtags/l10n/es.json +++ b/apps/systemtags/l10n/es.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidad de etiquetado colaborativo que comparte las etiquetas entre usuarios.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidad de etiquetado colaborativo que comparte las etiquetas entre usuarios. Adecuado para equipos.\n\n(Si eres un proveedor con una instalación en multitenencia), se aconseja desactivar esta app pues las etiquetas se comparten).", + "Loading collaborative tags …" : "Cargando etiquetas colaborativas …", "Search or create collaborative tags" : "Buscar o crear etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas ...", "No tags to select, type to create a new tag" : "No hay etiquetas para seleccionar, escriba para crear una etiqueta nueva", diff --git a/apps/systemtags/l10n/fr.js b/apps/systemtags/l10n/fr.js index 2569ab6f1c7..61c9b5e39e4 100644 --- a/apps/systemtags/l10n/fr.js +++ b/apps/systemtags/l10n/fr.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Étiquettes collaboratives ", "Collaborative tagging functionality which shares tags among users." : "Fonctionnalité d'étiquettes collaboratives qui partage les étiquettes entre les utilisateurs.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Fonctionnalité d'étiquettes collaboratives qui partage les tags entre les utilisateurs. Génial pour les équipes.\n\t(Si vous êtes un fournisseur avec plusieurs installations, il est conseillé de désactiver cette application, car sinon les tags seront partagés)", + "Loading collaborative tags …" : "Chargement des étiquettes collaboratives...", "Search or create collaborative tags" : "Rechercher ou créer des étiquettes collaboratives", "Collaborative tags …" : "Étiquettes collaboratives ...", "No tags to select, type to create a new tag" : "Aucune étiquette à sélectionner, entrez une nouvelle étiquette", diff --git a/apps/systemtags/l10n/fr.json b/apps/systemtags/l10n/fr.json index ecde82c9740..b8da8d82c5f 100644 --- a/apps/systemtags/l10n/fr.json +++ b/apps/systemtags/l10n/fr.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Étiquettes collaboratives ", "Collaborative tagging functionality which shares tags among users." : "Fonctionnalité d'étiquettes collaboratives qui partage les étiquettes entre les utilisateurs.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Fonctionnalité d'étiquettes collaboratives qui partage les tags entre les utilisateurs. Génial pour les équipes.\n\t(Si vous êtes un fournisseur avec plusieurs installations, il est conseillé de désactiver cette application, car sinon les tags seront partagés)", + "Loading collaborative tags …" : "Chargement des étiquettes collaboratives...", "Search or create collaborative tags" : "Rechercher ou créer des étiquettes collaboratives", "Collaborative tags …" : "Étiquettes collaboratives ...", "No tags to select, type to create a new tag" : "Aucune étiquette à sélectionner, entrez une nouvelle étiquette", diff --git a/apps/systemtags/l10n/hu.js b/apps/systemtags/l10n/hu.js index 0c99b13e7f5..28347dce8f0 100644 --- a/apps/systemtags/l10n/hu.js +++ b/apps/systemtags/l10n/hu.js @@ -48,7 +48,17 @@ OC.L10N.register( "Collaborative tags" : "Együttműködési címkék", "Collaborative tagging functionality which shares tags among users." : "Együttműködő címkézési funkció, amely megosztja a címkéket a felhasználók között.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Együttműködő címkézési funkció, amely megosztja a címkéket a felhasználók között. Nagyszerű a csapatok számára.\n\t(Ha Ön több szervezet számára szolgáltatást nyújtó szolgáltató, akkor ajánlott deaktiválni ezt az alkalmazást, mivel a címkék meg vannak osztva.)", - "Failed to load tags" : "A könyvjelző címkéinek betöltése sikertelen", + "Loading collaborative tags …" : "Együttműködési címkék betöltése…", + "Search or create collaborative tags" : "Együttműködési címkék keresése és létrehozása", + "Collaborative tags …" : "Együttműködési címkék…", + "No tags to select, type to create a new tag" : "Nincs kiválasztható címke, gépeljen egy új címke létrehozásához", + "Failed to load tags" : "A címkék betöltése sikertelen", + "Failed to load selected tags" : "A kiválasztott címkék betöltése sikertelen", + "Failed to select tag" : "A címke kiválasztása sikertelen", + "Failed to create tag" : "A címke létrehozása sikertelen", + "Failed to delete tag" : "A címke törlése sikertelen", + "Failed to load last used tags" : "A legutóbb használt címkék betöltése sikertelen", + "Missing \"Content-Location\" header" : "Hiányzó „Content-Location” fejléc", "Tagged files" : "Címkézett fájlok", "Select tags to filter by" : "Válasszon címkéket a szűréshez:", "No tags found" : "Nem találhatók címkék", diff --git a/apps/systemtags/l10n/hu.json b/apps/systemtags/l10n/hu.json index 2d7c5b67922..67331477cca 100644 --- a/apps/systemtags/l10n/hu.json +++ b/apps/systemtags/l10n/hu.json @@ -46,7 +46,17 @@ "Collaborative tags" : "Együttműködési címkék", "Collaborative tagging functionality which shares tags among users." : "Együttműködő címkézési funkció, amely megosztja a címkéket a felhasználók között.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Együttműködő címkézési funkció, amely megosztja a címkéket a felhasználók között. Nagyszerű a csapatok számára.\n\t(Ha Ön több szervezet számára szolgáltatást nyújtó szolgáltató, akkor ajánlott deaktiválni ezt az alkalmazást, mivel a címkék meg vannak osztva.)", - "Failed to load tags" : "A könyvjelző címkéinek betöltése sikertelen", + "Loading collaborative tags …" : "Együttműködési címkék betöltése…", + "Search or create collaborative tags" : "Együttműködési címkék keresése és létrehozása", + "Collaborative tags …" : "Együttműködési címkék…", + "No tags to select, type to create a new tag" : "Nincs kiválasztható címke, gépeljen egy új címke létrehozásához", + "Failed to load tags" : "A címkék betöltése sikertelen", + "Failed to load selected tags" : "A kiválasztott címkék betöltése sikertelen", + "Failed to select tag" : "A címke kiválasztása sikertelen", + "Failed to create tag" : "A címke létrehozása sikertelen", + "Failed to delete tag" : "A címke törlése sikertelen", + "Failed to load last used tags" : "A legutóbb használt címkék betöltése sikertelen", + "Missing \"Content-Location\" header" : "Hiányzó „Content-Location” fejléc", "Tagged files" : "Címkézett fájlok", "Select tags to filter by" : "Válasszon címkéket a szűréshez:", "No tags found" : "Nem találhatók címkék", diff --git a/apps/systemtags/l10n/pt_BR.js b/apps/systemtags/l10n/pt_BR.js index 6056253a500..023b4bad563 100644 --- a/apps/systemtags/l10n/pt_BR.js +++ b/apps/systemtags/l10n/pt_BR.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidade de marcação colaborativa que compartilha rótulos entre usuários.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de marcação colaborativa que compartilha rótulos entre usuários. Ótimo para equipes.\n\t(Se você for um provedor de uma instalação de multilocação, é aconselhável desativar isso, pois os rótulos são compartilhados.)", + "Loading collaborative tags …" : "Carregando etiquetas,s colaborativas…", "Search or create collaborative tags" : "Pesquise ou crie etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas…", "No tags to select, type to create a new tag" : "Nenhuma etiqueta para selecionar, digite para criar uma nova etiqueta", diff --git a/apps/systemtags/l10n/pt_BR.json b/apps/systemtags/l10n/pt_BR.json index 11b533c7efa..4c79d142d67 100644 --- a/apps/systemtags/l10n/pt_BR.json +++ b/apps/systemtags/l10n/pt_BR.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidade de marcação colaborativa que compartilha rótulos entre usuários.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de marcação colaborativa que compartilha rótulos entre usuários. Ótimo para equipes.\n\t(Se você for um provedor de uma instalação de multilocação, é aconselhável desativar isso, pois os rótulos são compartilhados.)", + "Loading collaborative tags …" : "Carregando etiquetas,s colaborativas…", "Search or create collaborative tags" : "Pesquise ou crie etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas…", "No tags to select, type to create a new tag" : "Nenhuma etiqueta para selecionar, digite para criar uma nova etiqueta", diff --git a/apps/systemtags/l10n/sr.js b/apps/systemtags/l10n/sr.js index d8ef28fdddc..3322db8e62f 100644 --- a/apps/systemtags/l10n/sr.js +++ b/apps/systemtags/l10n/sr.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Тимске ознаке", "Collaborative tagging functionality which shares tags among users." : "Могућност заједничког означавања којим се деле ознаке међу корисницима.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Могућност заједничког означавања којим се деле ознаке међу корисницима. Сјајно за тимове.\n\t(ако сте провајдер инсталације за одвојене кориснике/предузећа, саветује се да иксључите ову апликацију пошто су ознаке дељене.)", + "Loading collaborative tags …" : "Учитавају се ознаке сарадње…", "Search or create collaborative tags" : "Претражите или креирајте ознаке за сарадњу", "Collaborative tags …" : "Ознаке сарадње...", "No tags to select, type to create a new tag" : "Није изабрана ниједна ознака, куцајте да креирате нову ознаку", diff --git a/apps/systemtags/l10n/sr.json b/apps/systemtags/l10n/sr.json index 45697914f16..266cd4db5c2 100644 --- a/apps/systemtags/l10n/sr.json +++ b/apps/systemtags/l10n/sr.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Тимске ознаке", "Collaborative tagging functionality which shares tags among users." : "Могућност заједничког означавања којим се деле ознаке међу корисницима.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Могућност заједничког означавања којим се деле ознаке међу корисницима. Сјајно за тимове.\n\t(ако сте провајдер инсталације за одвојене кориснике/предузећа, саветује се да иксључите ову апликацију пошто су ознаке дељене.)", + "Loading collaborative tags …" : "Учитавају се ознаке сарадње…", "Search or create collaborative tags" : "Претражите или креирајте ознаке за сарадњу", "Collaborative tags …" : "Ознаке сарадње...", "No tags to select, type to create a new tag" : "Није изабрана ниједна ознака, куцајте да креирате нову ознаку", diff --git a/apps/systemtags/l10n/sv.js b/apps/systemtags/l10n/sv.js index c0fdc3f9f53..adf0ec8a672 100644 --- a/apps/systemtags/l10n/sv.js +++ b/apps/systemtags/l10n/sv.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Samarbetstaggar", "Collaborative tagging functionality which shares tags among users." : "Samarbetande tagg-funktionalitet som delar taggar bland användare.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Samarbetande tagg-funktionalitet som delar taggar bland användare. Utmärkt för arbetsgrupper.\n\t(Om du är en leverantör med flera kunder, rekommenderas att deaktivera den här appen eftersom taggar delas.)", + "Loading collaborative tags …" : "Läser in samarbetstaggar …", "Search or create collaborative tags" : "Sök eller skapa samarbetstaggar", "Collaborative tags …" : "Samarbetstaggar ...", "No tags to select, type to create a new tag" : "Inga taggar att välja, skriv för att skapa en ny tagg", diff --git a/apps/systemtags/l10n/sv.json b/apps/systemtags/l10n/sv.json index ef41702d676..1d6048be4e5 100644 --- a/apps/systemtags/l10n/sv.json +++ b/apps/systemtags/l10n/sv.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Samarbetstaggar", "Collaborative tagging functionality which shares tags among users." : "Samarbetande tagg-funktionalitet som delar taggar bland användare.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Samarbetande tagg-funktionalitet som delar taggar bland användare. Utmärkt för arbetsgrupper.\n\t(Om du är en leverantör med flera kunder, rekommenderas att deaktivera den här appen eftersom taggar delas.)", + "Loading collaborative tags …" : "Läser in samarbetstaggar …", "Search or create collaborative tags" : "Sök eller skapa samarbetstaggar", "Collaborative tags …" : "Samarbetstaggar ...", "No tags to select, type to create a new tag" : "Inga taggar att välja, skriv för att skapa en ny tagg", diff --git a/apps/systemtags/l10n/tr.js b/apps/systemtags/l10n/tr.js index 5aacc0ed5b0..0dc654ebb34 100644 --- a/apps/systemtags/l10n/tr.js +++ b/apps/systemtags/l10n/tr.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "İş birlikli etiketler", "Collaborative tagging functionality which shares tags among users." : "Etiketlerin kullanıcılar arasında paylaşılabilmesini sağlayan iş birlikli etiketleme özelliği.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "İş birlikli etiketler özelliği etiketlerin kullanıcılar arasında paylaşılabilmesini sağlar. Takımlar için harikadır. \n\t(Birden çok kuruluşun olduğu bir kurulumda etiketler zaten paylaşıldığı için bu uygulamanın devre dışı bırakılması önerilir).", + "Loading collaborative tags …" : "İş birlikli etiketler yükleniyor…", "Search or create collaborative tags" : "İş birlikli etiket ara ya da ekle", "Collaborative tags …" : "İş birlikli etiketler…", "No tags to select, type to create a new tag" : "Seçilebilecek herhangi bir etiket yok. Yazarak yeni bir etiket ekleyin", diff --git a/apps/systemtags/l10n/tr.json b/apps/systemtags/l10n/tr.json index a27c217420a..041b6743acf 100644 --- a/apps/systemtags/l10n/tr.json +++ b/apps/systemtags/l10n/tr.json @@ -46,6 +46,7 @@ "Collaborative tags" : "İş birlikli etiketler", "Collaborative tagging functionality which shares tags among users." : "Etiketlerin kullanıcılar arasında paylaşılabilmesini sağlayan iş birlikli etiketleme özelliği.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "İş birlikli etiketler özelliği etiketlerin kullanıcılar arasında paylaşılabilmesini sağlar. Takımlar için harikadır. \n\t(Birden çok kuruluşun olduğu bir kurulumda etiketler zaten paylaşıldığı için bu uygulamanın devre dışı bırakılması önerilir).", + "Loading collaborative tags …" : "İş birlikli etiketler yükleniyor…", "Search or create collaborative tags" : "İş birlikli etiket ara ya da ekle", "Collaborative tags …" : "İş birlikli etiketler…", "No tags to select, type to create a new tag" : "Seçilebilecek herhangi bir etiket yok. Yazarak yeni bir etiket ekleyin", diff --git a/apps/systemtags/l10n/zh_HK.js b/apps/systemtags/l10n/zh_HK.js index 26b08af88a7..e345b1e6617 100644 --- a/apps/systemtags/l10n/zh_HK.js +++ b/apps/systemtags/l10n/zh_HK.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "協作標籤", "Collaborative tagging functionality which shares tags among users." : "協作標記允許用戶分享標記。", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "協作標記允許用戶分享標記。適合團隊使用。\n\t(如果您是多租戶安裝的提供商,由於標籤是共享的,因此建議您停用此應用程序。)", + "Loading collaborative tags …" : "正在載入協作標籤 ...", "Search or create collaborative tags" : "搜索或創建協作標籤", "Collaborative tags …" : "協作的標籤 ...", "No tags to select, type to create a new tag" : "沒有可供選擇的標籤,鍵入以創建新標籤", diff --git a/apps/systemtags/l10n/zh_HK.json b/apps/systemtags/l10n/zh_HK.json index 31df77ce8b6..80357c996e2 100644 --- a/apps/systemtags/l10n/zh_HK.json +++ b/apps/systemtags/l10n/zh_HK.json @@ -46,6 +46,7 @@ "Collaborative tags" : "協作標籤", "Collaborative tagging functionality which shares tags among users." : "協作標記允許用戶分享標記。", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "協作標記允許用戶分享標記。適合團隊使用。\n\t(如果您是多租戶安裝的提供商,由於標籤是共享的,因此建議您停用此應用程序。)", + "Loading collaborative tags …" : "正在載入協作標籤 ...", "Search or create collaborative tags" : "搜索或創建協作標籤", "Collaborative tags …" : "協作的標籤 ...", "No tags to select, type to create a new tag" : "沒有可供選擇的標籤,鍵入以創建新標籤", diff --git a/apps/systemtags/l10n/zh_TW.js b/apps/systemtags/l10n/zh_TW.js index fe50344e3d0..8708e3c8493 100644 --- a/apps/systemtags/l10n/zh_TW.js +++ b/apps/systemtags/l10n/zh_TW.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "協作標籤", "Collaborative tagging functionality which shares tags among users." : "可在使用者間分享標籤的協作標籤功能。", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "可在使用者間分享標籤的協作標籤功能。對團隊來說很有用。\n\t(如果您是有多租戶安裝的提供商,則建議在分享標籤時停用此應用程式。)", + "Loading collaborative tags …" : "正在載入協作標籤……", "Search or create collaborative tags" : "搜尋或建立協作標籤", "Collaborative tags …" : "協作標籤……", "No tags to select, type to create a new tag" : "無可供選取的標籤,輸入以建立新標籤", diff --git a/apps/systemtags/l10n/zh_TW.json b/apps/systemtags/l10n/zh_TW.json index ce0caaa1ef1..7f7d7be7e4a 100644 --- a/apps/systemtags/l10n/zh_TW.json +++ b/apps/systemtags/l10n/zh_TW.json @@ -46,6 +46,7 @@ "Collaborative tags" : "協作標籤", "Collaborative tagging functionality which shares tags among users." : "可在使用者間分享標籤的協作標籤功能。", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "可在使用者間分享標籤的協作標籤功能。對團隊來說很有用。\n\t(如果您是有多租戶安裝的提供商,則建議在分享標籤時停用此應用程式。)", + "Loading collaborative tags …" : "正在載入協作標籤……", "Search or create collaborative tags" : "搜尋或建立協作標籤", "Collaborative tags …" : "協作標籤……", "No tags to select, type to create a new tag" : "無可供選取的標籤,輸入以建立新標籤", diff --git a/apps/systemtags/src/components/SystemTags.vue b/apps/systemtags/src/components/SystemTags.vue index c518dfd18d1..9315d0eb6c0 100644 --- a/apps/systemtags/src/components/SystemTags.vue +++ b/apps/systemtags/src/components/SystemTags.vue @@ -22,25 +22,30 @@ <template> <div class="system-tags"> - <label for="system-tags-input">{{ t('systemtags', 'Search or create collaborative tags') }}</label> - <NcSelectTags class="system-tags__select" - input-id="system-tags-input" - :placeholder="t('systemtags', 'Collaborative tags …')" - :options="sortedTags" - :value="selectedTags" - :create-option="createOption" - :taggable="true" - :passthru="true" - :fetch-tags="false" - :loading="loading" - @input="handleInput" - @option:selected="handleSelect" - @option:created="handleCreate" - @option:deselected="handleDeselect"> - <template #no-options> - {{ t('systemtags', 'No tags to select, type to create a new tag') }} - </template> - </NcSelectTags> + <NcLoadingIcon v-if="loadingTags" + :name="t('systemtags', 'Loading collaborative tags …')" + :size="32" /> + <template v-else> + <label for="system-tags-input">{{ t('systemtags', 'Search or create collaborative tags') }}</label> + <NcSelectTags class="system-tags__select" + input-id="system-tags-input" + :placeholder="t('systemtags', 'Collaborative tags …')" + :options="sortedTags" + :value="selectedTags" + :create-option="createOption" + :taggable="true" + :passthru="true" + :fetch-tags="false" + :loading="loading" + @input="handleInput" + @option:selected="handleSelect" + @option:created="handleCreate" + @option:deselected="handleDeselect"> + <template #no-options> + {{ t('systemtags', 'No tags to select, type to create a new tag') }} + </template> + </NcSelectTags> + </template> </div> </template> @@ -48,6 +53,7 @@ // FIXME Vue TypeScript ESLint errors /* eslint-disable */ import Vue from 'vue' +import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js' import NcSelectTags from '@nextcloud/vue/dist/Components/NcSelectTags.js' import { translate as t } from '@nextcloud/l10n' @@ -74,6 +80,7 @@ export default Vue.extend({ name: 'SystemTags', components: { + NcLoadingIcon, NcSelectTags, }, @@ -88,6 +95,7 @@ export default Vue.extend({ return { sortedTags: [] as TagWithId[], selectedTags: [] as TagWithId[], + loadingTags: false, loading: false, } }, @@ -123,12 +131,14 @@ export default Vue.extend({ fileId: { immediate: true, async handler() { + this.loadingTags = true try { this.selectedTags = await fetchSelectedTags(this.fileId) this.$emit('has-tags', this.selectedTags.length > 0) } catch (error) { showError(t('systemtags', 'Failed to load selected tags')) } + this.loadingTags = false }, }, }, diff --git a/apps/theming/css/default.css b/apps/theming/css/default.css index e97e4e98216..e4f0652472d 100644 --- a/apps/theming/css/default.css +++ b/apps/theming/css/default.css @@ -20,15 +20,19 @@ --color-error: #e9322d; --color-error-rgb: 233,50,45; --color-error-hover: #ed5a56; - --color-warning: #eca700; - --color-warning-rgb: 236,167,0; - --color-warning-hover: #efb832; - --color-success: #46ba61; - --color-success-rgb: 70,186,97; - --color-success-hover: #6ac780; + --color-error-text: #e7201b; + --color-warning: #c28900; + --color-warning-rgb: 194,137,0; + --color-warning-hover: #cea032; + --color-warning-text: #996c00; + --color-success: #3fa857; + --color-success-rgb: 63,168,87; + --color-success-hover: #65b978; + --color-success-text: #318344; --color-info: #006aa3; --color-info-rgb: 0,106,163; --color-info-hover: #3287b5; + --color-info-text: #006aa3; --color-loading-light: #cccccc; --color-loading-dark: #444444; --color-box-shadow-rgb: 77,77,77; diff --git a/apps/theming/l10n/fi.js b/apps/theming/l10n/fi.js index 229186f2407..b2512b7a9d3 100644 --- a/apps/theming/l10n/fi.js +++ b/apps/theming/l10n/fi.js @@ -73,6 +73,7 @@ OC.L10N.register( "Custom background" : "Mukautettu taustakuva", "Default background" : "Oletustausta", "Change color" : "Vaihda väriä", + "No background" : "Ei taustakuvaa", "Select a background from your files" : "Valitse taustakuva tiedostoista", "Theme selection is enforced" : "Teemavalinta on pakotettu", "Select a custom color" : "Valitse mukautettu väri", diff --git a/apps/theming/l10n/fi.json b/apps/theming/l10n/fi.json index bf7dc5b38a1..c0045eed587 100644 --- a/apps/theming/l10n/fi.json +++ b/apps/theming/l10n/fi.json @@ -71,6 +71,7 @@ "Custom background" : "Mukautettu taustakuva", "Default background" : "Oletustausta", "Change color" : "Vaihda väriä", + "No background" : "Ei taustakuvaa", "Select a background from your files" : "Valitse taustakuva tiedostoista", "Theme selection is enforced" : "Teemavalinta on pakotettu", "Select a custom color" : "Valitse mukautettu väri", diff --git a/apps/theming/l10n/uk.js b/apps/theming/l10n/uk.js index e8d2f5a9469..23395a6fde7 100644 --- a/apps/theming/l10n/uk.js +++ b/apps/theming/l10n/uk.js @@ -57,7 +57,7 @@ OC.L10N.register( "Color" : "Колір", "Logo" : "Логотип", "Upload new logo" : "Завантажити новий логотип", - "Background and login image" : "Зображення тла та логотипу авторизації", + "Background and login image" : "Зображення тла та логотипу організації на сторінці авторизації", "Upload new background and login image" : "Завантажити нове зображення тла та логотип сторінки авторизації", "Legal notice link" : "Посилання на правову інформацію", "Privacy policy link" : "Посилання на політику конфіденційності", diff --git a/apps/theming/l10n/uk.json b/apps/theming/l10n/uk.json index a0586d559d9..4b3eb894648 100644 --- a/apps/theming/l10n/uk.json +++ b/apps/theming/l10n/uk.json @@ -55,7 +55,7 @@ "Color" : "Колір", "Logo" : "Логотип", "Upload new logo" : "Завантажити новий логотип", - "Background and login image" : "Зображення тла та логотипу авторизації", + "Background and login image" : "Зображення тла та логотипу організації на сторінці авторизації", "Upload new background and login image" : "Завантажити нове зображення тла та логотип сторінки авторизації", "Legal notice link" : "Посилання на правову інформацію", "Privacy policy link" : "Посилання на політику конфіденційності", diff --git a/apps/theming/lib/Command/UpdateConfig.php b/apps/theming/lib/Command/UpdateConfig.php index 58dfcff8a8e..de180db6ce9 100644 --- a/apps/theming/lib/Command/UpdateConfig.php +++ b/apps/theming/lib/Command/UpdateConfig.php @@ -111,8 +111,13 @@ class UpdateConfig extends Command { return 0; } + if ($key === 'background' && $value === 'backgroundColor') { + $this->themingDefaults->undo($key); + $key = $key . 'Mime'; + } + if (in_array($key, ImageManager::SUPPORTED_IMAGE_KEYS, true)) { - if (strpos($value, '/') !== 0) { + if (!str_starts_with($value, '/')) { $output->writeln('<error>The image file needs to be provided as an absolute path: ' . $value . '.</error>'); return 1; } diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index a323bac180b..c247f2c9d56 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -182,7 +182,7 @@ class ThemingController extends Controller { * Check that a string is a valid http/https url */ private function isValidUrl(string $url): bool { - return ((strpos($url, 'http://') === 0 || strpos($url, 'https://') === 0) && + return ((str_starts_with($url, 'http://') || str_starts_with($url, 'https://')) && filter_var($url, FILTER_VALIDATE_URL) !== false); } @@ -400,7 +400,7 @@ class ThemingController extends Controller { $info = $this->appManager->getAppInfo($app, false, $this->l10n->getLanguageCode()); $name = $info['name'] . ' - ' . $this->themingDefaults->getName(); $shortName = $info['name']; - if (strpos($this->request->getRequestUri(), '/index.php/') !== false) { + if (str_contains($this->request->getRequestUri(), '/index.php/')) { $startUrl = $this->urlGenerator->getBaseUrl() . '/index.php/apps/' . $app . '/'; } else { $startUrl = $this->urlGenerator->getBaseUrl() . '/apps/' . $app . '/'; diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php index d088699fd3c..87123a6f7c9 100644 --- a/apps/theming/lib/ImageManager.php +++ b/apps/theming/lib/ImageManager.php @@ -266,7 +266,7 @@ class ImageManager { $newTmpFile = $this->tempManager->getTemporaryFile(); imageinterlace($outputImage, 1); // Keep jpeg images encoded as jpeg - if (strpos($detectedMimeType, 'image/jpeg') !== false) { + if (str_contains($detectedMimeType, 'image/jpeg')) { if (!imagejpeg($outputImage, $newTmpFile, 90)) { throw new \Exception('Could not recompress background image as JPEG'); } @@ -300,16 +300,16 @@ class ImageManager { */ private function shouldOptimizeBackgroundImage(string $mimeType, int $contentSize): bool { // Do not touch SVGs - if (strpos($mimeType, 'image/svg') !== false) { + if (str_contains($mimeType, 'image/svg')) { return false; } // GIF does not benefit from converting - if (strpos($mimeType, 'image/gif') !== false) { + if (str_contains($mimeType, 'image/gif')) { return false; } // WebP also does not benefit from converting // We could possibly try to convert to progressive image, but normally webP images are quite small - if (strpos($mimeType, 'image/webp') !== false) { + if (str_contains($mimeType, 'image/webp')) { return false; } // As a rule of thumb background images should be max. 150-300 KiB, small images do not benefit from converting diff --git a/apps/theming/lib/Themes/DarkTheme.php b/apps/theming/lib/Themes/DarkTheme.php index 588f8f5a8a6..5500bae3b6d 100644 --- a/apps/theming/lib/Themes/DarkTheme.php +++ b/apps/theming/lib/Themes/DarkTheme.php @@ -59,6 +59,11 @@ class DarkTheme extends DefaultTheme implements ITheme { $colorBoxShadow = $this->util->darken($colorMainBackground, 70); $colorBoxShadowRGB = join(',', $this->util->hexToRGB($colorBoxShadow)); + $colorError = '#e9322d'; + $colorWarning = '#c28900'; + $colorSuccess = '#3fa857'; + $colorInfo = '#006aa3'; + return array_merge( $defaultVariables, $this->generatePrimaryVariables($colorMainBackground, $colorMainText), @@ -82,6 +87,23 @@ class DarkTheme extends DefaultTheme implements ITheme { '--color-text-light' => $this->util->darken($colorMainText, 10), '--color-text-lighter' => $this->util->darken($colorMainText, 20), + '--color-error' => $colorError, + '--color-error-rgb' => join(',', $this->util->hexToRGB($colorError)), + '--color-error-hover' => $this->util->mix($colorError, $colorMainBackground, 60), + '--color-error-text' => $this->util->lighten($colorError, 3), + '--color-warning' => $colorWarning, + '--color-warning-rgb' => join(',', $this->util->hexToRGB($colorWarning)), + '--color-warning-hover' => $this->util->mix($colorWarning, $colorMainBackground, 60), + '--color-warning-text' => $colorWarning, + '--color-success' => $colorSuccess, + '--color-success-rgb' => join(',', $this->util->hexToRGB($colorSuccess)), + '--color-success-hover' => $this->util->mix($colorSuccess, $colorMainBackground, 60), + '--color-success-text' => $colorSuccess, + '--color-info' => $colorInfo, + '--color-info-rgb' => join(',', $this->util->hexToRGB($colorInfo)), + '--color-info-hover' => $this->util->mix($colorInfo, $colorMainBackground, 60), + '--color-info-text' => $this->util->lighten($colorInfo, 9), + // used for the icon loading animation '--color-loading-light' => '#777', '--color-loading-dark' => '#CCC', diff --git a/apps/theming/lib/Themes/DefaultTheme.php b/apps/theming/lib/Themes/DefaultTheme.php index 3fcaa7cf58f..e73b2c03fda 100644 --- a/apps/theming/lib/Themes/DefaultTheme.php +++ b/apps/theming/lib/Themes/DefaultTheme.php @@ -109,6 +109,11 @@ class DefaultTheme implements ITheme { $colorBoxShadow = $this->util->darken($colorMainBackground, 70); $colorBoxShadowRGB = join(',', $this->util->hexToRGB($colorBoxShadow)); + $colorError = '#e9322d'; + $colorWarning = '#c28900'; + $colorSuccess = '#3fa857'; + $colorInfo = '#006aa3'; + $variables = [ '--color-main-background' => $colorMainBackground, '--color-main-background-rgb' => $colorMainBackgroundRGB, @@ -137,19 +142,23 @@ class DefaultTheme implements ITheme { '--color-scrollbar' => 'rgba(' . $colorMainTextRgb . ', .15)', - // info/warning/success feedback colours - '--color-error' => '#e9322d', - '--color-error-rgb' => join(',', $this->util->hexToRGB('#e9322d')), - '--color-error-hover' => $this->util->mix('#e9322d', $colorMainBackground, 60), - '--color-warning' => '#eca700', - '--color-warning-rgb' => join(',', $this->util->hexToRGB('#eca700')), - '--color-warning-hover' => $this->util->mix('#eca700', $colorMainBackground, 60), - '--color-success' => '#46ba61', - '--color-success-rgb' => join(',', $this->util->hexToRGB('#46ba61')), - '--color-success-hover' => $this->util->mix('#46ba61', $colorMainBackground, 60), - '--color-info' => '#006aa3', - '--color-info-rgb' => join(',', $this->util->hexToRGB('#006aa3')), - '--color-info-hover' => $this->util->mix('#006aa3', $colorMainBackground, 60), + // error/warning/success/info feedback colours + '--color-error' => $colorError, + '--color-error-rgb' => join(',', $this->util->hexToRGB($colorError)), + '--color-error-hover' => $this->util->mix($colorError, $colorMainBackground, 60), + '--color-error-text' => $this->util->darken($colorError, 4), + '--color-warning' => $colorWarning, + '--color-warning-rgb' => join(',', $this->util->hexToRGB($colorWarning)), + '--color-warning-hover' => $this->util->mix($colorWarning, $colorMainBackground, 60), + '--color-warning-text' => $this->util->darken($colorWarning, 8), + '--color-success' => $colorSuccess, + '--color-success-rgb' => join(',', $this->util->hexToRGB($colorSuccess)), + '--color-success-hover' => $this->util->mix($colorSuccess, $colorMainBackground, 60), + '--color-success-text' => $this->util->darken($colorSuccess, 10), + '--color-info' => $colorInfo, + '--color-info-rgb' => join(',', $this->util->hexToRGB($colorInfo)), + '--color-info-hover' => $this->util->mix($colorInfo, $colorMainBackground, 60), + '--color-info-text' => $colorInfo, // used for the icon loading animation '--color-loading-light' => '#cccccc', diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 6cb204d1b1b..454e0505543 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -404,7 +404,7 @@ class ThemingDefaults extends \OC_Defaults { } $route = $this->urlGenerator->linkToRoute('theming.Theming.getManifest', ['app' => $app ]); } - if (strpos($image, 'filetypes/') === 0 && file_exists(\OC::$SERVERROOT . '/core/img/' . $image)) { + if (str_starts_with($image, 'filetypes/') && file_exists(\OC::$SERVERROOT . '/core/img/' . $image)) { $route = $this->urlGenerator->linkToRoute('theming.Icon.getThemedIcon', ['app' => $app, 'image' => $image]); } diff --git a/apps/twofactor_backupcodes/l10n/uk.js b/apps/twofactor_backupcodes/l10n/uk.js index 5782d4e38a1..3556b189ed9 100644 --- a/apps/twofactor_backupcodes/l10n/uk.js +++ b/apps/twofactor_backupcodes/l10n/uk.js @@ -1,23 +1,23 @@ OC.L10N.register( "twofactor_backupcodes", { - "You created two-factor backup codes for your account" : "Ви створили резервні коди для двофакторної автентифікації у вашому обліковому записі", + "You created two-factor backup codes for your account" : "Ви створили резервні коди для двофакторної авторизації у вашому обліковому записі", "Second-factor backup codes" : "Резервні коди другого фактору", "Generate backup codes" : "Створити резервні коди", - "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ви увімкнули двофакторну автентифікацію, але поки не створили резервні коди. Резервні коди потрібні для відновлення доступу до вашого облікового запису, якщо ви втратите доступ до другого фактору.", + "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ви увімкнули двофакторну авторизацію, але поки не створили резервні коди. Резервні коди потрібні для відновлення доступу до вашого облікового запису, якщо буде втрачено доступ до другого фактору.", "Backup code" : "Резервні коди", "Use backup code" : "Використати резервний код", - "Two factor backup codes" : "Резервні коди двофакторної автентифікації", - "A two-factor auth backup codes provider" : "Провайдер резервних кодів двофакторної автентифікації", - "Backup codes have been generated. {used} of {total} codes have been used." : "Створено резервні коди. Вже використано {used} із {total} кодів.", - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Це ваші резервні коди. Будь ласка, збережіть їх та у разі потреби роздрукуйте, оскільки подалі вони ніде не будуть показуватися.", + "Two factor backup codes" : "Резервні коди двофакторної авторизації", + "A two-factor auth backup codes provider" : "Постачальник резервних кодів двофакторної авторизації", + "Backup codes have been generated. {used} of {total} codes have been used." : "Створено резервні коди. Ви вже використали {used} із {total} кодів.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Це ваші резервні коди. Будь ласка, збережіть їх, у разі потреби роздрукуйте, оскільки подалі вони ніде не будуть показуватися.", "Save backup codes" : "Зберегти резервні коди", "Print backup codes" : "Друк резервних кодів", "Regenerate backup codes" : "Перестворити резервні коди", "If you regenerate backup codes, you automatically invalidate old codes." : "Після повторного створення резервних кодів попередні автоматично стануть недійсними", "An error occurred while generating your backup codes" : "Помилка під час створення резервних кодів", "{name} backup codes" : "Резервні коди {name}", - "Use one of the backup codes you saved when setting up two-factor authentication." : "Скористайтеся одним з резервних кодів, які ви зберегли під час встановлення двофакторної автентифікації.", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Скористайтеся одним з резервних кодів, які ви зберегли під час встановлення двофакторної авторизації.", "Submit" : "Гаразд" }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/twofactor_backupcodes/l10n/uk.json b/apps/twofactor_backupcodes/l10n/uk.json index ee5aeef3b73..a4f5818bbd1 100644 --- a/apps/twofactor_backupcodes/l10n/uk.json +++ b/apps/twofactor_backupcodes/l10n/uk.json @@ -1,21 +1,21 @@ { "translations": { - "You created two-factor backup codes for your account" : "Ви створили резервні коди для двофакторної автентифікації у вашому обліковому записі", + "You created two-factor backup codes for your account" : "Ви створили резервні коди для двофакторної авторизації у вашому обліковому записі", "Second-factor backup codes" : "Резервні коди другого фактору", "Generate backup codes" : "Створити резервні коди", - "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ви увімкнули двофакторну автентифікацію, але поки не створили резервні коди. Резервні коди потрібні для відновлення доступу до вашого облікового запису, якщо ви втратите доступ до другого фактору.", + "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ви увімкнули двофакторну авторизацію, але поки не створили резервні коди. Резервні коди потрібні для відновлення доступу до вашого облікового запису, якщо буде втрачено доступ до другого фактору.", "Backup code" : "Резервні коди", "Use backup code" : "Використати резервний код", - "Two factor backup codes" : "Резервні коди двофакторної автентифікації", - "A two-factor auth backup codes provider" : "Провайдер резервних кодів двофакторної автентифікації", - "Backup codes have been generated. {used} of {total} codes have been used." : "Створено резервні коди. Вже використано {used} із {total} кодів.", - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Це ваші резервні коди. Будь ласка, збережіть їх та у разі потреби роздрукуйте, оскільки подалі вони ніде не будуть показуватися.", + "Two factor backup codes" : "Резервні коди двофакторної авторизації", + "A two-factor auth backup codes provider" : "Постачальник резервних кодів двофакторної авторизації", + "Backup codes have been generated. {used} of {total} codes have been used." : "Створено резервні коди. Ви вже використали {used} із {total} кодів.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Це ваші резервні коди. Будь ласка, збережіть їх, у разі потреби роздрукуйте, оскільки подалі вони ніде не будуть показуватися.", "Save backup codes" : "Зберегти резервні коди", "Print backup codes" : "Друк резервних кодів", "Regenerate backup codes" : "Перестворити резервні коди", "If you regenerate backup codes, you automatically invalidate old codes." : "Після повторного створення резервних кодів попередні автоматично стануть недійсними", "An error occurred while generating your backup codes" : "Помилка під час створення резервних кодів", "{name} backup codes" : "Резервні коди {name}", - "Use one of the backup codes you saved when setting up two-factor authentication." : "Скористайтеся одним з резервних кодів, які ви зберегли під час встановлення двофакторної автентифікації.", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Скористайтеся одним з резервних кодів, які ви зберегли під час встановлення двофакторної авторизації.", "Submit" : "Гаразд" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/gl.js b/apps/updatenotification/l10n/gl.js index f675a73e05d..659e0e841cf 100644 --- a/apps/updatenotification/l10n/gl.js +++ b/apps/updatenotification/l10n/gl.js @@ -8,7 +8,7 @@ OC.L10N.register( "The update server could not be reached since %d days to check for new updates." : "Non foi posíbel acadar o servidor de actualizacións dende hai %d días para comprobar se hai novas actualizacións.", "Please check the Nextcloud and server log files for errors." : "Revise os ficheiros de rexistro de Nextcloud e do servidor na busca de erros.", "Update to %1$s is available." : "Está dispoñíbel unha actualización para %1$s.", - "Update to {serverAndVersion} is available." : "A actualización para {serverAndVersion} está dispoñible.", + "Update to {serverAndVersion} is available." : "Está dispoñíbel a actualización para {serverAndVersion}.", "Update for {app} to version %s is available." : "Está dispoñíbel unha actualización para {app} á versión %s.", "Update notification" : "Notificación de actualización", "Displays update notifications for Nextcloud and provides the SSO for the updater." : "Amosa as notificacións de actualizacións para o Nexcloud e fornece o SSO para o actualizador.", @@ -17,7 +17,7 @@ OC.L10N.register( "Apps missing compatible version" : "Aplicacións que carecen de versión compatíbel", "View in store" : "Ver na tenda", "Apps with compatible version" : "Aplicacións con versión compatíbel", - "Please note that the web updater is not recommended with more than 100 users! Please use the command line updater instead!" : "Ten en conta que o actualizador web non se recomenda con máis de 100 usuarios! Por favor, use o actualizador da liña de comandos.", + "Please note that the web updater is not recommended with more than 100 users! Please use the command line updater instead!" : "Teña en conta que o actualizador web non está recomendado con máis de 100 usuarios! Empregue o actualizador da liña de ordes.", "Open updater" : "Abrir o actualizador", "Download now" : "Descargar agora", "Please use the command line updater to update." : "Utilice o actualizador de liña de ordes para actualizar.", @@ -25,7 +25,7 @@ OC.L10N.register( "The update check is not yet finished. Please refresh the page." : "A comprobación de actualización aínda non rematou. Recargue a páxina.", "Your version is up to date." : "A súa versión está actualizada.", "A non-default update server is in use to be checked for updates:" : "Está en uso un servidor de actualizacións que non é o predeterminado para comprobar as actualizacións:", - "You can change the update channel below which also affects the apps management page. E.g. after switching to the beta channel, beta app updates will be offered to you in the apps management page." : "Podes cambiar a canle de actualización a continuación, o que tamén afecta á páxina de xestión de aplicacións. p.ex. despois de cambiar á canle beta, ofreceranse actualizacións da aplicación beta na páxina de xestión de aplicacións.", + "You can change the update channel below which also affects the apps management page. E.g. after switching to the beta channel, beta app updates will be offered to you in the apps management page." : "Pode cambiar a canle de actualización a seguir, o que tamén afecta á páxina de xestión de aplicacións. p.ex. após cambiar á canle beta, ofreceranse actualizacións da aplicación beta na páxina de xestión de aplicacións.", "Update channel:" : "Canle de actualización:", "You can always update to a newer version. But you can never downgrade to a more stable version." : "Sempre poderá actualizar á versión más recente, mais nunca poderá volver a unha canle máis estábel.", "Notify members of the following groups about available updates:" : "Notificar aos membros dos seguintes grupos sobre actualizacións dispoñíbeis:", @@ -38,8 +38,8 @@ OC.L10N.register( "Checked on {lastCheckedDate}" : "Comprobado o {lastCheckedDate}", "Checking apps for compatible versions" : "Comprobando as versións compatíbeis das aplicacións", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Asegúrese de que o seu config.php non ten configurado <samp>appstoreenabled</samp> como «false».", - "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Non se puido conectar á Tenda de Aplicacións ou non se devolveu ningunha actualización. Busca actualizacións manualmente ou asegúrate de que o teu servidor ten acceso a Internet e pode conectarse á Tenda de Aplicacións.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available." : "<strong>Todas</strong> as aplicacións teñen dispoñible unha versión compatible para esta versión de Nextcloud.", + "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Non foi posíbel conectar á Tenda de aplicacións ou non se devolveu ningunha actualización. Busque actualizacións manualmente ou asegúrese de que o seu servidor ten acceso a Internet e pode conectarse á Tenda de aplicacións.", + "<strong>All</strong> apps have a compatible version for this Nextcloud version available." : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatíbel para esta versión de Nextcloud.", "View changelog" : "Ver o rexistro de cambios", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Ofrece sempre o último nivel de parches, pero non se actualizará inmediatamente á seguinte versión principal. Esta actualización prodúcese unha vez que Nextcloud GmbH teña feitas as probas e reforzos para implementacións a gran escala e de obxectivos críticos. Esta canle só está dispoñíbel para os clientes e fornece o paquete Nextcloud empresarial.", @@ -47,7 +47,7 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versión estábel máis recente. É axeitada para uso en produción e actualizarase sempre á última versión maior.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Unha versión preliminar só para probar funcionalidades novas, non para contornos de produción", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["<strong>%n</strong> aplicación non ten unha versión compatible para esta versión de Nextcloud dispoñible.","<strong>%n</strong> aplicacións non teñen unha versión compatible para esta versión de Nextcloud dispoñible."], + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["<strong>%n</strong> aplicación non ten dispoñíbel unha versión compatíbel para esta versión de Nextcloud.","<strong>%n</strong> aplicacións non teñen dispoñíbel unha versión compatíbel para esta versión de Nextcloud."], "Update for %1$s to version %2$s is available." : "Está dispoñíbel unha actualización para %1$s á versión %2$s." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/gl.json b/apps/updatenotification/l10n/gl.json index 30c49262a75..27f59f6346d 100644 --- a/apps/updatenotification/l10n/gl.json +++ b/apps/updatenotification/l10n/gl.json @@ -6,7 +6,7 @@ "The update server could not be reached since %d days to check for new updates." : "Non foi posíbel acadar o servidor de actualizacións dende hai %d días para comprobar se hai novas actualizacións.", "Please check the Nextcloud and server log files for errors." : "Revise os ficheiros de rexistro de Nextcloud e do servidor na busca de erros.", "Update to %1$s is available." : "Está dispoñíbel unha actualización para %1$s.", - "Update to {serverAndVersion} is available." : "A actualización para {serverAndVersion} está dispoñible.", + "Update to {serverAndVersion} is available." : "Está dispoñíbel a actualización para {serverAndVersion}.", "Update for {app} to version %s is available." : "Está dispoñíbel unha actualización para {app} á versión %s.", "Update notification" : "Notificación de actualización", "Displays update notifications for Nextcloud and provides the SSO for the updater." : "Amosa as notificacións de actualizacións para o Nexcloud e fornece o SSO para o actualizador.", @@ -15,7 +15,7 @@ "Apps missing compatible version" : "Aplicacións que carecen de versión compatíbel", "View in store" : "Ver na tenda", "Apps with compatible version" : "Aplicacións con versión compatíbel", - "Please note that the web updater is not recommended with more than 100 users! Please use the command line updater instead!" : "Ten en conta que o actualizador web non se recomenda con máis de 100 usuarios! Por favor, use o actualizador da liña de comandos.", + "Please note that the web updater is not recommended with more than 100 users! Please use the command line updater instead!" : "Teña en conta que o actualizador web non está recomendado con máis de 100 usuarios! Empregue o actualizador da liña de ordes.", "Open updater" : "Abrir o actualizador", "Download now" : "Descargar agora", "Please use the command line updater to update." : "Utilice o actualizador de liña de ordes para actualizar.", @@ -23,7 +23,7 @@ "The update check is not yet finished. Please refresh the page." : "A comprobación de actualización aínda non rematou. Recargue a páxina.", "Your version is up to date." : "A súa versión está actualizada.", "A non-default update server is in use to be checked for updates:" : "Está en uso un servidor de actualizacións que non é o predeterminado para comprobar as actualizacións:", - "You can change the update channel below which also affects the apps management page. E.g. after switching to the beta channel, beta app updates will be offered to you in the apps management page." : "Podes cambiar a canle de actualización a continuación, o que tamén afecta á páxina de xestión de aplicacións. p.ex. despois de cambiar á canle beta, ofreceranse actualizacións da aplicación beta na páxina de xestión de aplicacións.", + "You can change the update channel below which also affects the apps management page. E.g. after switching to the beta channel, beta app updates will be offered to you in the apps management page." : "Pode cambiar a canle de actualización a seguir, o que tamén afecta á páxina de xestión de aplicacións. p.ex. após cambiar á canle beta, ofreceranse actualizacións da aplicación beta na páxina de xestión de aplicacións.", "Update channel:" : "Canle de actualización:", "You can always update to a newer version. But you can never downgrade to a more stable version." : "Sempre poderá actualizar á versión más recente, mais nunca poderá volver a unha canle máis estábel.", "Notify members of the following groups about available updates:" : "Notificar aos membros dos seguintes grupos sobre actualizacións dispoñíbeis:", @@ -36,8 +36,8 @@ "Checked on {lastCheckedDate}" : "Comprobado o {lastCheckedDate}", "Checking apps for compatible versions" : "Comprobando as versións compatíbeis das aplicacións", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Asegúrese de que o seu config.php non ten configurado <samp>appstoreenabled</samp> como «false».", - "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Non se puido conectar á Tenda de Aplicacións ou non se devolveu ningunha actualización. Busca actualizacións manualmente ou asegúrate de que o teu servidor ten acceso a Internet e pode conectarse á Tenda de Aplicacións.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available." : "<strong>Todas</strong> as aplicacións teñen dispoñible unha versión compatible para esta versión de Nextcloud.", + "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Non foi posíbel conectar á Tenda de aplicacións ou non se devolveu ningunha actualización. Busque actualizacións manualmente ou asegúrese de que o seu servidor ten acceso a Internet e pode conectarse á Tenda de aplicacións.", + "<strong>All</strong> apps have a compatible version for this Nextcloud version available." : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatíbel para esta versión de Nextcloud.", "View changelog" : "Ver o rexistro de cambios", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Ofrece sempre o último nivel de parches, pero non se actualizará inmediatamente á seguinte versión principal. Esta actualización prodúcese unha vez que Nextcloud GmbH teña feitas as probas e reforzos para implementacións a gran escala e de obxectivos críticos. Esta canle só está dispoñíbel para os clientes e fornece o paquete Nextcloud empresarial.", @@ -45,7 +45,7 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versión estábel máis recente. É axeitada para uso en produción e actualizarase sempre á última versión maior.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Unha versión preliminar só para probar funcionalidades novas, non para contornos de produción", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["<strong>%n</strong> aplicación non ten unha versión compatible para esta versión de Nextcloud dispoñible.","<strong>%n</strong> aplicacións non teñen unha versión compatible para esta versión de Nextcloud dispoñible."], + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["<strong>%n</strong> aplicación non ten dispoñíbel unha versión compatíbel para esta versión de Nextcloud.","<strong>%n</strong> aplicacións non teñen dispoñíbel unha versión compatíbel para esta versión de Nextcloud."], "Update for %1$s to version %2$s is available." : "Está dispoñíbel unha actualización para %1$s á versión %2$s." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index 3d54d82d95d..f857d32236f 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -50,8 +50,8 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.\n", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", - "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique o host, o porto e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de posición \"%u id\". Substitúese polo nome de inicio de sesión ao consultar LDAP/AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de posición «%u id». Substitúese polo nome de acceso ao consultar LDAP/AD.", "Please provide a login name to test against" : "Forneza o nome de acceso para facer a proba", "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Desactivouse a caixa de grupo porque o servidor LDAP/AD non admite memberOf.", "Password change rejected. Hint: " : "Contrasinal rexeitado. Consello:", @@ -85,13 +85,13 @@ OC.L10N.register( "Verify settings and count the groups" : "Verificar os axustes e contar os grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao acceder, %s atopa o usuario en función dos seguintes atributos:", "LDAP/AD Username:" : "Nome de usuario LDAP/AD:", - "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión co nome de usuario LDAP/AD, que é \"uid\" ou \"sAMAccountName\" e que se detectará.", - "LDAP/AD Email Address:" : "Enderezo de correo electrónico LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión co nome de usuario LDAP/AD, que é «uid» ou «sAMAccountName» e será detectado.", + "LDAP/AD Email Address:" : "Enderezo de correo LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite o acceso contra un atributo de correo-e. Permitirase «mail» e «mailPrimaryAddress».", "Other Attributes:" : "Outros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro que se aplica cando se intenta o acceso. «%%uid» substitúe o nome de usuario e a acción de acceso. Exemplo: «uid=%%uid» ", "Test Loginname" : "Probar o nome de acceso", - "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta recibir un DN para o nome de inicio de sesión indicado e o filtro de inicio de sesión actual", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta recibir un DN para o nome de acceso indicado e o filtro de acceso actual", "Verify settings" : "Verificar os axustes", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Engadir unha configuración nova", @@ -183,27 +183,27 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Nunha configuración de almacenamento externo substituirase $home polo valor do atributo especificado", - "User Profile Attributes" : "Atributos do Perfil de Usuario", - "Phone Field" : "Campo de Teléfono", - "User profile Phone will be set from the specified attribute" : "O Teléfono do perfil de usuario establecerase a partir do atributo especificado", - "Website Field" : "Campo do Sitio Web", - "User profile Website will be set from the specified attribute" : "O Sitio Web do perfil de usuario establecerase a partir do atributo especificado", - "Address Field" : "Campo de Enderezo", - "User profile Address will be set from the specified attribute" : "O Enderezo do perfil de usuario establecerase a partir do atributo especificado", + "User Profile Attributes" : "Atributos do perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "O teléfono do perfil de usuario estabelecerase a partir do atributo especificado", + "Website Field" : "Campo do sitio web", + "User profile Website will be set from the specified attribute" : "O sitio web do perfil de usuario estabelecerase a partir do atributo especificado", + "Address Field" : "Campo de enderezo", + "User profile Address will be set from the specified attribute" : "O enderezo do perfil de usuario estabelecerase a partir do atributo especificado", "Twitter Field" : "Campo de Twitter", - "User profile Twitter will be set from the specified attribute" : "O perfil de usuario Twitter establecerase a partir do atributo especificado", + "User profile Twitter will be set from the specified attribute" : "O perfil de usuario Twitter estabelecerase a partir do atributo especificado", "Fediverse Field" : "Campo Fediverso", - "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario Fediverso establecerase a partir do atributo especificado", - "Organisation Field" : "Campo da Organización", - "User profile Organisation will be set from the specified attribute" : "A Organización do perfil de usuario establecerase a partir do atributo especificado", - "Role Field" : "Campo de Rol", - "User profile Role will be set from the specified attribute" : "O Rol do perfil de usuario establecerase a partir do atributo especificado", - "Headline Field" : "Campo de Título", - "User profile Headline will be set from the specified attribute" : "O Título do perfil de usuario establecerase a partir do atributo especificado", - "Biography Field" : "Campo da Biografía", - "User profile Biography will be set from the specified attribute" : "A Biografía do perfil do usuario establecerase a partir do atributo especificado", + "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario Fediverso estabelecerase a partir do atributo especificado", + "Organisation Field" : "Campo da organización", + "User profile Organisation will be set from the specified attribute" : "A organización do perfil de usuario estabelecerase a partir do atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "O rol do perfil de usuario estabelecerase a partir do atributo especificado", + "Headline Field" : "Campo de título", + "User profile Headline will be set from the specified attribute" : "O título do perfil de usuario estabelecerase a partir do atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "A biografía do perfil do usuario estabelecerase a partir do atributo especificado", "Internal Username" : "Nome interno de usuario", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por defecto, o nome de usuario interno crearase a partir do atributo UUID. Asegúrase de que o nome de usuario é único e non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nas colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén mapeados (engadidos). Déixao baleiro para o comportamento predeterminado.", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index c3339c69f7f..0d41c65fe1d 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -48,8 +48,8 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considere restrinxir a súa busca, pois abrange moitos usuarios, apenas o primeiro deles poderá acceder.\n", "An unspecified error occurred. Please check log and settings." : "Produciuse un erro non especificado. Comprobe o rexistro e os axustes.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.", - "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique o host, o porto e as credenciais.", - "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de posición \"%u id\". Substitúese polo nome de inicio de sesión ao consultar LDAP/AD.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Produciuse un erro de conexión a LDAP/AD. Verifique a máquina, o porto e as credenciais.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Falta o marcador de posición «%u id». Substitúese polo nome de acceso ao consultar LDAP/AD.", "Please provide a login name to test against" : "Forneza o nome de acceso para facer a proba", "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Desactivouse a caixa de grupo porque o servidor LDAP/AD non admite memberOf.", "Password change rejected. Hint: " : "Contrasinal rexeitado. Consello:", @@ -83,13 +83,13 @@ "Verify settings and count the groups" : "Verificar os axustes e contar os grupos", "When logging in, %s will find the user based on the following attributes:" : "Ao acceder, %s atopa o usuario en función dos seguintes atributos:", "LDAP/AD Username:" : "Nome de usuario LDAP/AD:", - "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión co nome de usuario LDAP/AD, que é \"uid\" ou \"sAMAccountName\" e que se detectará.", - "LDAP/AD Email Address:" : "Enderezo de correo electrónico LDAP/AD:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión co nome de usuario LDAP/AD, que é «uid» ou «sAMAccountName» e será detectado.", + "LDAP/AD Email Address:" : "Enderezo de correo LDAP/AD:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite o acceso contra un atributo de correo-e. Permitirase «mail» e «mailPrimaryAddress».", "Other Attributes:" : "Outros atributos:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define o filtro que se aplica cando se intenta o acceso. «%%uid» substitúe o nome de usuario e a acción de acceso. Exemplo: «uid=%%uid» ", "Test Loginname" : "Probar o nome de acceso", - "Attempts to receive a DN for the given loginname and the current login filter" : "Intenta recibir un DN para o nome de inicio de sesión indicado e o filtro de inicio de sesión actual", + "Attempts to receive a DN for the given loginname and the current login filter" : "Tenta recibir un DN para o nome de acceso indicado e o filtro de acceso actual", "Verify settings" : "Verificar os axustes", "%s. Server:" : "%s. Servidor:", "Add a new configuration" : "Engadir unha configuración nova", @@ -181,27 +181,27 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.", "\"$home\" Placeholder Field" : "Campo de marcador de posición «$home»", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Nunha configuración de almacenamento externo substituirase $home polo valor do atributo especificado", - "User Profile Attributes" : "Atributos do Perfil de Usuario", - "Phone Field" : "Campo de Teléfono", - "User profile Phone will be set from the specified attribute" : "O Teléfono do perfil de usuario establecerase a partir do atributo especificado", - "Website Field" : "Campo do Sitio Web", - "User profile Website will be set from the specified attribute" : "O Sitio Web do perfil de usuario establecerase a partir do atributo especificado", - "Address Field" : "Campo de Enderezo", - "User profile Address will be set from the specified attribute" : "O Enderezo do perfil de usuario establecerase a partir do atributo especificado", + "User Profile Attributes" : "Atributos do perfil de usuario", + "Phone Field" : "Campo de teléfono", + "User profile Phone will be set from the specified attribute" : "O teléfono do perfil de usuario estabelecerase a partir do atributo especificado", + "Website Field" : "Campo do sitio web", + "User profile Website will be set from the specified attribute" : "O sitio web do perfil de usuario estabelecerase a partir do atributo especificado", + "Address Field" : "Campo de enderezo", + "User profile Address will be set from the specified attribute" : "O enderezo do perfil de usuario estabelecerase a partir do atributo especificado", "Twitter Field" : "Campo de Twitter", - "User profile Twitter will be set from the specified attribute" : "O perfil de usuario Twitter establecerase a partir do atributo especificado", + "User profile Twitter will be set from the specified attribute" : "O perfil de usuario Twitter estabelecerase a partir do atributo especificado", "Fediverse Field" : "Campo Fediverso", - "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario Fediverso establecerase a partir do atributo especificado", - "Organisation Field" : "Campo da Organización", - "User profile Organisation will be set from the specified attribute" : "A Organización do perfil de usuario establecerase a partir do atributo especificado", - "Role Field" : "Campo de Rol", - "User profile Role will be set from the specified attribute" : "O Rol do perfil de usuario establecerase a partir do atributo especificado", - "Headline Field" : "Campo de Título", - "User profile Headline will be set from the specified attribute" : "O Título do perfil de usuario establecerase a partir do atributo especificado", - "Biography Field" : "Campo da Biografía", - "User profile Biography will be set from the specified attribute" : "A Biografía do perfil do usuario establecerase a partir do atributo especificado", + "User profile Fediverse will be set from the specified attribute" : "O perfil de usuario Fediverso estabelecerase a partir do atributo especificado", + "Organisation Field" : "Campo da organización", + "User profile Organisation will be set from the specified attribute" : "A organización do perfil de usuario estabelecerase a partir do atributo especificado", + "Role Field" : "Campo de rol", + "User profile Role will be set from the specified attribute" : "O rol do perfil de usuario estabelecerase a partir do atributo especificado", + "Headline Field" : "Campo de título", + "User profile Headline will be set from the specified attribute" : "O título do perfil de usuario estabelecerase a partir do atributo especificado", + "Biography Field" : "Campo de biografía", + "User profile Biography will be set from the specified attribute" : "A biografía do perfil do usuario estabelecerase a partir do atributo especificado", "Internal Username" : "Nome interno de usuario", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Por defecto, o nome de usuario interno crearase a partir do atributo UUID. Asegúrase de que o nome de usuario é único e non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nas colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén mapeados (engadidos). Déixao baleiro para o comportamento predeterminado.", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", diff --git a/apps/user_ldap/l10n/hu.js b/apps/user_ldap/l10n/hu.js index 7b854778055..aa099b6d462 100644 --- a/apps/user_ldap/l10n/hu.js +++ b/apps/user_ldap/l10n/hu.js @@ -183,6 +183,25 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD attribútumot.", "\"$home\" Placeholder Field" : "„$home” helykitöltő mező", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Külső tárhely beállítása esetén a $home a megadott tulajdonság értékére lesz cserélve", + "User Profile Attributes" : "Felhasználói profil attribútumai", + "Phone Field" : "Telefonszám mező", + "User profile Phone will be set from the specified attribute" : "A felhasználói profil Telefonszám mezője a megadott attribútumból lesz beállítva", + "Website Field" : "Webhely mező", + "User profile Website will be set from the specified attribute" : "A felhasználói profil Webhely mezője a megadott attribútumból lesz beállítva", + "Address Field" : "Cím mező", + "User profile Address will be set from the specified attribute" : "A felhasználói profil Cím mezője a megadott attribútumból lesz beállítva", + "Twitter Field" : "Twitter mező", + "User profile Twitter will be set from the specified attribute" : "A felhasználói profil Twitter mezője a megadott attribútumból lesz beállítva", + "Fediverse Field" : "Födiverzum mező", + "User profile Fediverse will be set from the specified attribute" : "A felhasználói profil Födiverzum mezője a megadott attribútumból lesz beállítva", + "Organisation Field" : "Szervezet mező", + "User profile Organisation will be set from the specified attribute" : "A felhasználói profil Szervezet mezője a megadott attribútumból lesz beállítva", + "Role Field" : "Szerepkör mező", + "User profile Role will be set from the specified attribute" : "A felhasználói profil Szerepkör mezője a megadott attribútumból lesz beállítva", + "Headline Field" : "Szalagcím mező", + "User profile Headline will be set from the specified attribute" : "A felhasználói profil Szalagcím mezője a megadott attribútumból lesz beállítva", + "Biography Field" : "Életrajz mező", + "User profile Biography will be set from the specified attribute" : "A felhasználói profil Életrajz mezője a megadott attribútumból lesz beállítva", "Internal Username" : "Belső felhasználónév", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [a-zA-Z0-9_.@-]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés esetén egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Ez része a távoli URL-eknek, például az összes *DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. A változások csak újonnan hozzárendelt (hozzáadott) LDAP felhasználóknál kerül alkalmazásra. Hagyja üresen az alapértelmezett viselkedéshez.", "Internal Username Attribute:" : "Belső felhasználónév attribútuma:", diff --git a/apps/user_ldap/l10n/hu.json b/apps/user_ldap/l10n/hu.json index 2ed54b03334..aa3578a87ec 100644 --- a/apps/user_ldap/l10n/hu.json +++ b/apps/user_ldap/l10n/hu.json @@ -181,6 +181,25 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Hagyja üresen a felhasználónévhez (alapértelmezett). Egyéb esetben adjon meg egy LDAP/AD attribútumot.", "\"$home\" Placeholder Field" : "„$home” helykitöltő mező", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "Külső tárhely beállítása esetén a $home a megadott tulajdonság értékére lesz cserélve", + "User Profile Attributes" : "Felhasználói profil attribútumai", + "Phone Field" : "Telefonszám mező", + "User profile Phone will be set from the specified attribute" : "A felhasználói profil Telefonszám mezője a megadott attribútumból lesz beállítva", + "Website Field" : "Webhely mező", + "User profile Website will be set from the specified attribute" : "A felhasználói profil Webhely mezője a megadott attribútumból lesz beállítva", + "Address Field" : "Cím mező", + "User profile Address will be set from the specified attribute" : "A felhasználói profil Cím mezője a megadott attribútumból lesz beállítva", + "Twitter Field" : "Twitter mező", + "User profile Twitter will be set from the specified attribute" : "A felhasználói profil Twitter mezője a megadott attribútumból lesz beállítva", + "Fediverse Field" : "Födiverzum mező", + "User profile Fediverse will be set from the specified attribute" : "A felhasználói profil Födiverzum mezője a megadott attribútumból lesz beállítva", + "Organisation Field" : "Szervezet mező", + "User profile Organisation will be set from the specified attribute" : "A felhasználói profil Szervezet mezője a megadott attribútumból lesz beállítva", + "Role Field" : "Szerepkör mező", + "User profile Role will be set from the specified attribute" : "A felhasználói profil Szerepkör mezője a megadott attribútumból lesz beállítva", + "Headline Field" : "Szalagcím mező", + "User profile Headline will be set from the specified attribute" : "A felhasználói profil Szalagcím mezője a megadott attribútumból lesz beállítva", + "Biography Field" : "Életrajz mező", + "User profile Biography will be set from the specified attribute" : "A felhasználói profil Életrajz mezője a megadott attribútumból lesz beállítva", "Internal Username" : "Belső felhasználónév", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Alapértelmezetten egy belső felhasználónév jön létre a UUID attribútumból. Gondoskodik róla, hogy a felhasználónév egyedi legyen és ne kelljen a karaktereket konvertálni. A belső felhasználónév csak a következő karakterekből állhat: [a-zA-Z0-9_.@-]. Más karakterek az ASCII megfelelőikre lesznek cserélve, vagy csak simán ki lesznek hagyva. Ütközés esetén egy szám lesz hozzáadva, vagy növelve. A belső felhasználónév a felhasználó belső azonosítására szolgál. Egyben a felhasználó saját mappájának neveként is szolgál. Ez része a távoli URL-eknek, például az összes *DAV szolgáltatásnál. Ezzel a beállítással az alapértelmezett működés felülírható. A változások csak újonnan hozzárendelt (hozzáadott) LDAP felhasználóknál kerül alkalmazásra. Hagyja üresen az alapértelmezett viselkedéshez.", "Internal Username Attribute:" : "Belső felhasználónév attribútuma:", diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js index 577275b34ae..391f41ff995 100644 --- a/apps/user_ldap/l10n/uk.js +++ b/apps/user_ldap/l10n/uk.js @@ -69,7 +69,7 @@ OC.L10N.register( "Invalid Host" : "Невірний Host", "LDAP user and group backend" : "Інтерфейс керування користувачами та групами LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для автентифікації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цю програму для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту автентифікації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для автентифікації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для авторизації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цю програму для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту авторизації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для авторизації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", "Test Configuration" : "Тестове налаштування", "Help" : "Допомога", "Groups meeting these criteria are available in %s:" : "Групи, що відповідають цим критеріям доступні в %s:", diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json index a8cf11199d7..3894b315880 100644 --- a/apps/user_ldap/l10n/uk.json +++ b/apps/user_ldap/l10n/uk.json @@ -67,7 +67,7 @@ "Invalid Host" : "Невірний Host", "LDAP user and group backend" : "Інтерфейс керування користувачами та групами LDAP", "This application enables administrators to connect Nextcloud to an LDAP-based user directory." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP.", - "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для автентифікації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цю програму для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту автентифікації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для автентифікації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", + "This application enables administrators to connect Nextcloud to an LDAP-based user directory for authentication and provisioning users, groups and user attributes. Admins can configure this application to connect to one or more LDAP directories or Active Directories via an LDAP interface. Attributes such as user quota, email, avatar pictures, group memberships and more can be pulled into Nextcloud from a directory with the appropriate queries and filters.\n\nA user logs into Nextcloud with their LDAP or AD credentials, and is granted access based on an authentication request handled by the LDAP or AD server. Nextcloud does not store LDAP or AD passwords, rather these credentials are used to authenticate a user and then Nextcloud uses a session for the user ID. More information is available in the LDAP User and Group Backend documentation." : "Ця програма дозволяє адміністраторам підключати Nextcloud до каталогу користувачів на основі LDAP для авторизації та ініціалізації користувачів, груп і атрибутів користувачів. Адміністратори можуть налаштувати цю програму для підключення до одного або кількох каталогів LDAP або Active Directory через інтерфейс LDAP. Такі атрибути, як квота користувача, електронна пошта, зображення аватара, членство в групах тощо, можна отримати в Nextcloud із каталогу з відповідними запитами та фільтрами. \n\nКористувач входить у Nextcloud за допомогою своїх облікових даних LDAP або AD і отримує доступ на основі запиту авторизації, який обробляється сервером LDAP або AD. Nextcloud не зберігає паролі LDAP або AD, натомість ці облікові дані використовуються для авторизації користувача, а потім Nextcloud використовує сеанс для ідентифікатора користувача. Більше інформації доступно в документації користувача та групи LDAP Backend.", "Test Configuration" : "Тестове налаштування", "Help" : "Допомога", "Groups meeting these criteria are available in %s:" : "Групи, що відповідають цим критеріям доступні в %s:", diff --git a/apps/user_status/l10n/ca.js b/apps/user_status/l10n/ca.js index fe6a86676c1..95d76044ceb 100644 --- a/apps/user_status/l10n/ca.js +++ b/apps/user_status/l10n/ca.js @@ -42,7 +42,7 @@ OC.L10N.register( "30 minutes" : "30 minuts", "1 hour" : "1 hora", "4 hours" : "4 hores", - "Mute all notifications" : "Silencia totes les notificacions", - "Appear offline" : "Apareix fora de línia" + "Mute all notifications" : "Silencieu totes les notificacions", + "Appear offline" : "Apareixeu fora de línia" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_status/l10n/ca.json b/apps/user_status/l10n/ca.json index ce95a78c06c..0bddb6cdf99 100644 --- a/apps/user_status/l10n/ca.json +++ b/apps/user_status/l10n/ca.json @@ -40,7 +40,7 @@ "30 minutes" : "30 minuts", "1 hour" : "1 hora", "4 hours" : "4 hores", - "Mute all notifications" : "Silencia totes les notificacions", - "Appear offline" : "Apareix fora de línia" + "Mute all notifications" : "Silencieu totes les notificacions", + "Appear offline" : "Apareixeu fora de línia" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_status/l10n/gl.js b/apps/user_status/l10n/gl.js index 175f6a77327..4e0fbae4f47 100644 --- a/apps/user_status/l10n/gl.js +++ b/apps/user_status/l10n/gl.js @@ -11,18 +11,20 @@ OC.L10N.register( "User status" : "Estado do usuario", "View profile" : "Ver o perfil", "Clear status after" : "Limpar o estado após", + "Emoji for your status message" : "«Emoji» para a súa mensaxe de estado", "What is your status?" : "Cal é o seu estado?", - "Previously set" : "Previamente configurado", - "Reset status" : "Restablecer o estado", + "Predefined statuses" : "Estados predefinidos", + "Previously set" : "Estabelecido previamente", + "Reset status" : "Restabelecer o estado", "Set status" : "Estabelecer o estado", "Online status" : "Estado en liña", "Status message" : "Mensaxe de estado", - "Your status was set automatically" : "O teu estado estableceuse automaticamente", + "Your status was set automatically" : "O seu estado foi estabelecido automaticamente", "Clear status message" : "Limpar a mensaxe de estado", - "Set status message" : "Establecer a mensaxe de estado", - "Reset status to \"{icon} {message}\"" : "Restablecer o estado a \"{icon} {mensaxe}\"", - "Reset status to \"{message}\"" : "Restablecer o estado a \"{message}\"", - "Reset status to \"{icon}\"" : "Restablecer o estado a \"{icon}\"", + "Set status message" : "Estabelecer a mensaxe de estado", + "Reset status to \"{icon} {message}\"" : "Restabelecer o estado a «{icon} {mensaxe}¢", + "Reset status to \"{message}\"" : "Restabelecer o estado a «{message}»", + "Reset status to \"{icon}\"" : "Restabelecer o estado a «{icon}»", "There was an error saving the status" : "Produciuse un erro ao gardar o estado", "There was an error clearing the status" : "Produciuse un erro ao limpar o estado", "There was an error reverting the status" : "Produciuse un erro ao reverter o estado", diff --git a/apps/user_status/l10n/gl.json b/apps/user_status/l10n/gl.json index 212b3c894b0..bb78ff5102c 100644 --- a/apps/user_status/l10n/gl.json +++ b/apps/user_status/l10n/gl.json @@ -9,18 +9,20 @@ "User status" : "Estado do usuario", "View profile" : "Ver o perfil", "Clear status after" : "Limpar o estado após", + "Emoji for your status message" : "«Emoji» para a súa mensaxe de estado", "What is your status?" : "Cal é o seu estado?", - "Previously set" : "Previamente configurado", - "Reset status" : "Restablecer o estado", + "Predefined statuses" : "Estados predefinidos", + "Previously set" : "Estabelecido previamente", + "Reset status" : "Restabelecer o estado", "Set status" : "Estabelecer o estado", "Online status" : "Estado en liña", "Status message" : "Mensaxe de estado", - "Your status was set automatically" : "O teu estado estableceuse automaticamente", + "Your status was set automatically" : "O seu estado foi estabelecido automaticamente", "Clear status message" : "Limpar a mensaxe de estado", - "Set status message" : "Establecer a mensaxe de estado", - "Reset status to \"{icon} {message}\"" : "Restablecer o estado a \"{icon} {mensaxe}\"", - "Reset status to \"{message}\"" : "Restablecer o estado a \"{message}\"", - "Reset status to \"{icon}\"" : "Restablecer o estado a \"{icon}\"", + "Set status message" : "Estabelecer a mensaxe de estado", + "Reset status to \"{icon} {message}\"" : "Restabelecer o estado a «{icon} {mensaxe}¢", + "Reset status to \"{message}\"" : "Restabelecer o estado a «{message}»", + "Reset status to \"{icon}\"" : "Restabelecer o estado a «{icon}»", "There was an error saving the status" : "Produciuse un erro ao gardar o estado", "There was an error clearing the status" : "Produciuse un erro ao limpar o estado", "There was an error reverting the status" : "Produciuse un erro ao reverter o estado", diff --git a/apps/user_status/l10n/hu.js b/apps/user_status/l10n/hu.js index a07e37ca86b..f0f6ac9b103 100644 --- a/apps/user_status/l10n/hu.js +++ b/apps/user_status/l10n/hu.js @@ -11,14 +11,23 @@ OC.L10N.register( "User status" : "Felhasználói állapot", "View profile" : "Profil megtekintése", "Clear status after" : "Állapot törlése ennyi idő után", + "Emoji for your status message" : "Emodzsi az állapotüzenetéhez", "What is your status?" : "Mi az állapota?", + "Predefined statuses" : "Előre meghatározott állapotok", + "Previously set" : "Előzőleg beállított", + "Reset status" : "Állapot visszaállítása", "Set status" : "Állapot beállítása", "Online status" : "Elérhető állapot", "Status message" : "Állapotüzenet", + "Your status was set automatically" : "Az állapota automatikusan lett beállítva", "Clear status message" : "Állapotüzenet törlése", "Set status message" : "Állapotüzenet beállítása", + "Reset status to \"{icon} {message}\"" : "Állapot visszaállítása erre: „{icon} {message}”", + "Reset status to \"{message}\"" : "Állapot visszaállítása erre: „{message}”", + "Reset status to \"{icon}\"" : "Állapot visszaállítása erre: „{icon}”", "There was an error saving the status" : "Hiba történt az állapot mentése során", "There was an error clearing the status" : "Hiba történt az állapot törlése sorá", + "There was an error reverting the status" : "Hiba történt az állapot visszaállítása során", "No recent status changes" : "Nincsenek legutóbbi állapotváltozások", "Away" : "Távol", "Do not disturb" : "Ne zavarjanak", diff --git a/apps/user_status/l10n/hu.json b/apps/user_status/l10n/hu.json index f0186deaf17..051a402e6bc 100644 --- a/apps/user_status/l10n/hu.json +++ b/apps/user_status/l10n/hu.json @@ -9,14 +9,23 @@ "User status" : "Felhasználói állapot", "View profile" : "Profil megtekintése", "Clear status after" : "Állapot törlése ennyi idő után", + "Emoji for your status message" : "Emodzsi az állapotüzenetéhez", "What is your status?" : "Mi az állapota?", + "Predefined statuses" : "Előre meghatározott állapotok", + "Previously set" : "Előzőleg beállított", + "Reset status" : "Állapot visszaállítása", "Set status" : "Állapot beállítása", "Online status" : "Elérhető állapot", "Status message" : "Állapotüzenet", + "Your status was set automatically" : "Az állapota automatikusan lett beállítva", "Clear status message" : "Állapotüzenet törlése", "Set status message" : "Állapotüzenet beállítása", + "Reset status to \"{icon} {message}\"" : "Állapot visszaállítása erre: „{icon} {message}”", + "Reset status to \"{message}\"" : "Állapot visszaállítása erre: „{message}”", + "Reset status to \"{icon}\"" : "Állapot visszaállítása erre: „{icon}”", "There was an error saving the status" : "Hiba történt az állapot mentése során", "There was an error clearing the status" : "Hiba történt az állapot törlése sorá", + "There was an error reverting the status" : "Hiba történt az állapot visszaállítása során", "No recent status changes" : "Nincsenek legutóbbi állapotváltozások", "Away" : "Távol", "Do not disturb" : "Ne zavarjanak", diff --git a/apps/weather_status/src/App.vue b/apps/weather_status/src/App.vue index a5844e2f3ed..ed4aed27ab5 100644 --- a/apps/weather_status/src/App.vue +++ b/apps/weather_status/src/App.vue @@ -64,21 +64,18 @@ @submit="onAddressSubmit"> {{ t('weather_status', 'Set custom address') }} </NcActionInput> - <NcActionButton v-show="favorites.length > 0" - :icon="toggleFavoritesIcon" - :aria-hidden="true" - @click="showFavorites = !showFavorites"> - {{ t('weather_status', 'Favorites') }} - </NcActionButton> - <NcActionButton v-for="favorite in displayedFavorites" - :key="favorite" - :aria-hidden="true" - @click="onFavoriteClick($event, favorite)"> - <template #icon> - <IconStar :size="20" :class="{'favorite-color': address === favorite}" /> - </template> - {{ favorite }} - </NcActionButton> + <template v-if="favorites.length > 0"> + <NcActionCaption :title="t('weather_status', 'Favorites')" /> + <NcActionButton v-for="favorite in favorites" + :key="favorite" + :aria-hidden="true" + @click="onFavoriteClick($event, favorite)"> + <template #icon> + <IconStar :size="20" :class="{'favorite-color': address === favorite}" /> + </template> + {{ favorite }} + </NcActionButton> + </template> </NcActions> </div> </li> @@ -92,6 +89,7 @@ import IconStar from 'vue-material-design-icons/Star.vue' import IconStarOutline from 'vue-material-design-icons/StarOutline.vue' import NcActions from '@nextcloud/vue/dist/Components/NcActions.js' import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js' +import NcActionCaption from '@nextcloud/vue/dist/Components/NcActionCaption.js' import NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js' import NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js' import NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js' @@ -211,6 +209,7 @@ export default { IconStar, NcActions, NcActionButton, + NcActionCaption, NcActionInput, NcActionLink, NcActionSeparator, @@ -236,7 +235,6 @@ export default { forecasts: [], loop: null, favorites: [], - showFavorites: false, } }, computed: { @@ -309,16 +307,6 @@ export default { return f === this.address }) }, - toggleFavoritesIcon() { - return this.showFavorites - ? 'icon-triangle-s' - : 'icon-triangle-e' - }, - displayedFavorites() { - return this.showFavorites - ? this.favorites - : [] - }, }, mounted() { this.initWeatherStatus() diff --git a/apps/workflowengine/l10n/fr.js b/apps/workflowengine/l10n/fr.js index b188430f429..caeac79b650 100644 --- a/apps/workflowengine/l10n/fr.js +++ b/apps/workflowengine/l10n/fr.js @@ -48,6 +48,7 @@ OC.L10N.register( "Nextcloud workflow engine" : "Moteur de workflow Nextcloud", "Select a filter" : "Sélectionner un filtre", "Select a comparator" : "Sélectionnez un comparateur", + "Remove filter" : "Retirer le filtre", "Select a file type" : "Sélectionnez un type de fichier", "e.g. httpd/unix-directory" : "par exemple httpd/unix-directory", "Folder" : "Dossier", @@ -70,6 +71,7 @@ OC.L10N.register( "Add new flow" : "Ajouter un nouveau flux", "When" : "Quand", "and" : "et", + "Add a new filter" : "Ajouter un filtre", "Cancel" : "Annuler", "Delete" : "Supprimer", "The configuration is invalid" : "Configuration non valide", diff --git a/apps/workflowengine/l10n/fr.json b/apps/workflowengine/l10n/fr.json index f49121be709..69e1488b8b2 100644 --- a/apps/workflowengine/l10n/fr.json +++ b/apps/workflowengine/l10n/fr.json @@ -46,6 +46,7 @@ "Nextcloud workflow engine" : "Moteur de workflow Nextcloud", "Select a filter" : "Sélectionner un filtre", "Select a comparator" : "Sélectionnez un comparateur", + "Remove filter" : "Retirer le filtre", "Select a file type" : "Sélectionnez un type de fichier", "e.g. httpd/unix-directory" : "par exemple httpd/unix-directory", "Folder" : "Dossier", @@ -68,6 +69,7 @@ "Add new flow" : "Ajouter un nouveau flux", "When" : "Quand", "and" : "et", + "Add a new filter" : "Ajouter un filtre", "Cancel" : "Annuler", "Delete" : "Supprimer", "The configuration is invalid" : "Configuration non valide", diff --git a/apps/workflowengine/l10n/hu.js b/apps/workflowengine/l10n/hu.js index ab7ab9959a6..e1029aba989 100644 --- a/apps/workflowengine/l10n/hu.js +++ b/apps/workflowengine/l10n/hu.js @@ -48,6 +48,7 @@ OC.L10N.register( "Nextcloud workflow engine" : "Nextcloud munkafolyamat-motor", "Select a filter" : "Válasszon szűrőt", "Select a comparator" : "Válasszon összehasonlítót", + "Remove filter" : "Szűrő eltávolítása", "Select a file type" : "Válasszon fájltípust", "e.g. httpd/unix-directory" : "például httpd/unix-directory", "Folder" : "Mappa", @@ -70,6 +71,7 @@ OC.L10N.register( "Add new flow" : "Új folyamat hozzáadása", "When" : "Mikor", "and" : "és", + "Add a new filter" : "Új szűrő hozzáadása", "Cancel" : "Mégse", "Delete" : "Törlés", "The configuration is invalid" : "A konfiguráció érvénytelen", diff --git a/apps/workflowengine/l10n/hu.json b/apps/workflowengine/l10n/hu.json index 2fe17250463..5992bd74052 100644 --- a/apps/workflowengine/l10n/hu.json +++ b/apps/workflowengine/l10n/hu.json @@ -46,6 +46,7 @@ "Nextcloud workflow engine" : "Nextcloud munkafolyamat-motor", "Select a filter" : "Válasszon szűrőt", "Select a comparator" : "Válasszon összehasonlítót", + "Remove filter" : "Szűrő eltávolítása", "Select a file type" : "Válasszon fájltípust", "e.g. httpd/unix-directory" : "például httpd/unix-directory", "Folder" : "Mappa", @@ -68,6 +69,7 @@ "Add new flow" : "Új folyamat hozzáadása", "When" : "Mikor", "and" : "és", + "Add a new filter" : "Új szűrő hozzáadása", "Cancel" : "Mégse", "Delete" : "Törlés", "The configuration is invalid" : "A konfiguráció érvénytelen", |