Merge branch 'master' into update/openapi-extractor

pull/41078/head
Julien Veyssier 7 months ago committed by GitHub
commit 5c0e4b701f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1561,36 +1561,6 @@ trigger:
- pull_request
- push
---
kind: pipeline
name: acceptance-access-levels
steps:
- name: submodules
image: ghcr.io/nextcloud/continuous-integration-alpine-git:latest
commands:
- git submodule update --init
- name: acceptance-access-levels
image: ghcr.io/nextcloud/continuous-integration-acceptance-php8.0:latest
commands:
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-access-levels --selenium-server selenium:4444 allow-git-repository-modifications features/access-levels.feature
services:
- name: selenium
image: ghcr.io/nextcloud/continuous-integration-selenium:3.141.59
environment:
# Reduce default log level for Selenium server (INFO) as it is too
# verbose.
JAVA_OPTS: -Dselenium.LOGGER.level=WARNING
trigger:
branch:
- master
- stable*
event:
- pull_request
- push
---
kind: pipeline
name: acceptance-header

@ -101,7 +101,7 @@ jobs:
run: npm i -g npm@"${{ needs.init.outputs.npmVersion }}"
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
uses: cypress-io/github-action@59810ebfa5a5ac6fcfdcfdf036d1cd4d083a88f2 # v6.5.0
uses: cypress-io/github-action@ebe8b24c4428922d0f793a5c4c96853a633180e3 # v6.6.0
with:
component: ${{ matrix.containers == 'component' }}
group: ${{ matrix.use-cypress-cloud && matrix.containers == 'component' && 'Run component' || matrix.use-cypress-cloud && 'Run E2E' || '' }}

@ -16,6 +16,7 @@ OC.L10N.register(
"Delete comment" : "Slet kommentar",
"Cancel edit" : "Annuller redigering",
"Post comment" : "Skriv kommentar",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger",
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"No more messages" : "Ikke flere beskeder",
"Retry" : "Prøv igen",

@ -14,6 +14,7 @@
"Delete comment" : "Slet kommentar",
"Cancel edit" : "Annuller redigering",
"Post comment" : "Skriv kommentar",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger",
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"No more messages" : "Ikke flere beskeder",
"Retry" : "Prøv igen",

@ -168,7 +168,7 @@ OC.L10N.register(
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
"Birthday calendars will be generated by a background job." : "Narodeninové kalendáre budú generované úlohou na pozadí.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Preto nebudú dostupné hneď po povolení, ale zobrazia sa po určitom čase",
"Send notifications for events" : "Zaslať upozornenia na udalosti",
"Send notifications for events" : "Zasielať upozornenia na udalosti",
"Notifications are sent via background jobs, so these must occur often enough." : "Upozornenia sa odosielajú prostredníctvom úloh na pozadí - preto je potrebné, aby tieto prebiehali dostatočne často.",
"Send reminder notifications to calendar sharees as well" : "Posielať upozornenia na pripomienky aj zdieľaným osobám v kalendári",
"Reminders are always sent to organizers and attendees." : "Upozornenia sa vždy posielajú organizátorom a účastníkom.",

@ -166,7 +166,7 @@
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
"Birthday calendars will be generated by a background job." : "Narodeninové kalendáre budú generované úlohou na pozadí.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Preto nebudú dostupné hneď po povolení, ale zobrazia sa po určitom čase",
"Send notifications for events" : "Zaslať upozornenia na udalosti",
"Send notifications for events" : "Zasielať upozornenia na udalosti",
"Notifications are sent via background jobs, so these must occur often enough." : "Upozornenia sa odosielajú prostredníctvom úloh na pozadí - preto je potrebné, aby tieto prebiehali dostatočne často.",
"Send reminder notifications to calendar sharees as well" : "Posielať upozornenia na pripomienky aj zdieľaným osobám v kalendári",
"Reminders are always sent to organizers and attendees." : "Upozornenia sa vždy posielajú organizátorom a účastníkom.",

@ -281,14 +281,15 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->where($qb->expr()->isNotNull('deleted_at'))
->andWhere($qb->expr()->lt('deleted_at', $qb->createNamedParameter($deletedBefore)));
$result = $qb->executeQuery();
$raw = $result->fetchAll();
$result->closeCursor();
return array_map(function ($row) {
return [
$calendars = [];
while (($row = $result->fetch()) !== false) {
$calendars[] = [
'id' => (int) $row['id'],
'deleted_at' => (int) $row['deleted_at'],
];
}, $raw);
}
$result->closeCursor();
return $calendars;
}
/**
@ -1011,7 +1012,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$stmt = $query->executeQuery();
$result = [];
foreach ($stmt->fetchAll() as $row) {
while (($row = $stmt->fetch()) !== false) {
$result[] = [
'id' => $row['id'],
'uri' => $row['uri'],
@ -1038,7 +1039,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$stmt = $query->executeQuery();
$result = [];
foreach ($stmt->fetchAll() as $row) {
while (($row = $stmt->fetch()) !== false) {
$result[] = [
'id' => $row['id'],
'uri' => $row['uri'],
@ -1925,13 +1926,15 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
$result = $outerQuery->executeQuery();
$calendarObjects = array_filter($result->fetchAll(), function (array $row) use ($options) {
$calendarObjects = [];
while (($row = $result->fetch()) !== false) {
$start = $options['timerange']['start'] ?? null;
$end = $options['timerange']['end'] ?? null;
if ($start === null || !($start instanceof DateTimeInterface) || $end === null || !($end instanceof DateTimeInterface)) {
// No filter required
return true;
$calendarObjects[] = $row;
continue;
}
$isValid = $this->validateFilterForObject($row, [
@ -1956,8 +1959,10 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
// Put the stream back to the beginning so it can be read another time
rewind($row['calendardata']);
}
return $isValid;
});
if ($isValid) {
$calendarObjects[] = $row;
}
}
$result->closeCursor();
return array_map(function ($o) use ($options) {
@ -2157,11 +2162,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
$result = $calendarObjectIdQuery->executeQuery();
$matches = $result->fetchAll();
$matches = [];
while (($row = $result->fetch()) !== false) {
$matches[] = (int) $row['objectid'];
}
$result->closeCursor();
$matches = array_map(static function (array $match):int {
return (int) $match['objectid'];
}, $matches);
$query = $this->db->getQueryBuilder();
$query->select('calendardata', 'uri', 'calendarid', 'calendartype')
@ -2169,16 +2174,16 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->where($query->expr()->in('id', $query->createNamedParameter($matches, IQueryBuilder::PARAM_INT_ARRAY)));
$result = $query->executeQuery();
$calendarObjects = $result->fetchAll();
$result->closeCursor();
return array_map(function (array $array): array {
$calendarObjects = [];
while (($array = $result->fetch()) !== false) {
$array['calendarid'] = (int)$array['calendarid'];
$array['calendartype'] = (int)$array['calendartype'];
$array['calendardata'] = $this->readBlob($array['calendardata']);
return $array;
}, $calendarObjects);
$calendarObjects[] = $array;
}
$result->closeCursor();
return $calendarObjects;
}, $this->db);
}
@ -2656,9 +2661,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri)))
->executeQuery();
$result = [];
foreach ($stmt->fetchAll() as $row) {
$result[] = [
$results = [];
while (($row = $stmt->fetch()) !== false) {
$results[] = [
'calendardata' => $row['calendardata'],
'uri' => $row['uri'],
'lastmodified' => $row['lastmodified'],
@ -2668,7 +2673,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
$stmt->closeCursor();
return $result;
return $results;
}
/**
@ -3046,14 +3051,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->where($query->expr()->eq('uri', $query->createNamedParameter(BirthdayService::BIRTHDAY_CALENDAR_URI)))
->executeQuery();
$ids = $result->fetchAll();
$result->closeCursor();
foreach ($ids as $id) {
while (($row = $result->fetch()) !== false) {
$this->deleteCalendar(
$id['id'],
$row['id'],
true // No data to keep in the trashbin, if the user re-enables then we regenerate
);
}
$result->closeCursor();
}, $this->db);
}
@ -3070,7 +3074,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$stmt = $query->executeQuery();
$uris = [];
foreach ($stmt->fetchAll() as $row) {
while (($row = $stmt->fetch()) !== false) {
$uris[] = $row['uri'];
}
$stmt->closeCursor();

@ -28,6 +28,7 @@ OC.L10N.register(
"Bad Signature" : "Tanda salah",
"Missing Signature" : "Tanda hilang",
"one-time password for server-side-encryption" : "Kata sandi sekali pakai untuk server-side-encryption",
"Encryption password" : "Sandi enkripsi",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi file ini, mungkin ini adalah file bersama. Harap minta pemilik file untuk membagikan ulang file dengan Anda.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca file ini, mungkin ini adalah file bersama. Harap minta pemilik file untuk membagikan ulang file dengan Anda.",
"Default encryption module" : "Modul bawaan enkripsi",

@ -26,6 +26,7 @@
"Bad Signature" : "Tanda salah",
"Missing Signature" : "Tanda hilang",
"one-time password for server-side-encryption" : "Kata sandi sekali pakai untuk server-side-encryption",
"Encryption password" : "Sandi enkripsi",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi file ini, mungkin ini adalah file bersama. Harap minta pemilik file untuk membagikan ulang file dengan Anda.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca file ini, mungkin ini adalah file bersama. Harap minta pemilik file untuk membagikan ulang file dengan Anda.",
"Default encryption module" : "Modul bawaan enkripsi",

@ -31,8 +31,8 @@ OC.L10N.register(
"Adjust how people can share between servers. This includes shares between users on this server as well if they are using federated sharing." : "Upravte ako ľudia môžu zdieľať medzi servermi. Toto zahŕňa zdieľania medzi užívateľmi na tomto serveri ako aj používanie združeného zdieľania.",
"Allow users on this server to send shares to other servers (this option also allows WebDAV access to public shares)" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch (to umožňuje WebDAV prístup k verejným zdieľaniam)",
"Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
"Allow users on this server to send shares to groups on other servers" : "Povoliť používateľom na tomto serveri odosielať zdieľania skupinám na iných serveroch",
"Allow users on this server to receive group shares from other servers" : "Povoliť používateľom na tomto serveri prijímať zdieľania skupín z iných serverov",
"Allow users on this server to send shares to groups on other servers" : "Povoliť používateľom na tomto serveri odosielať sprístupnenia skupinám na iné servery",
"Allow users on this server to receive group shares from other servers" : "Povoliť používateľom na tomto serveri prijímať sprístupnenia pre skupiny z iných serverov",
"Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
"Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
"Unable to update federated files sharing config" : "Nedá sa aktualizovať konfigurácia zdieľania združených súborov",

@ -29,8 +29,8 @@
"Adjust how people can share between servers. This includes shares between users on this server as well if they are using federated sharing." : "Upravte ako ľudia môžu zdieľať medzi servermi. Toto zahŕňa zdieľania medzi užívateľmi na tomto serveri ako aj používanie združeného zdieľania.",
"Allow users on this server to send shares to other servers (this option also allows WebDAV access to public shares)" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch (to umožňuje WebDAV prístup k verejným zdieľaniam)",
"Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
"Allow users on this server to send shares to groups on other servers" : "Povoliť používateľom na tomto serveri odosielať zdieľania skupinám na iných serveroch",
"Allow users on this server to receive group shares from other servers" : "Povoliť používateľom na tomto serveri prijímať zdieľania skupín z iných serverov",
"Allow users on this server to send shares to groups on other servers" : "Povoliť používateľom na tomto serveri odosielať sprístupnenia skupinám na iné servery",
"Allow users on this server to receive group shares from other servers" : "Povoliť používateľom na tomto serveri prijímať sprístupnenia pre skupiny z iných serverov",
"Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
"Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
"Unable to update federated files sharing config" : "Nedá sa aktualizovať konfigurácia zdieľania združených súborov",

@ -22,6 +22,8 @@ OC.L10N.register(
"An unknown error has occurred" : "En ukendt fejl er opstået",
"File could not be uploaded" : "Filen kunne ikke uploades",
"Uploading …" : "Uploader ...",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"Uploading … ({currentNumber}/{total})" : "Uploader … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Upload af dette er ikke supporteret",
"Target folder does not exist any more" : "Destinationsmappen findes ikke længere",
@ -169,16 +171,37 @@ OC.L10N.register(
"File Management" : "Filhåndtering",
"Reload current directory" : "Genindlæs den aktuelle mappe",
"Go to the \"{dir}\" directory" : "Gå til mappen \"{dir}\"",
"Drag and drop files here to upload" : "Træk filer hertil for at uploade",
"Upload successful" : "Succesfuld upload",
"\"{displayName}\" action executed successfully" : "\"{displayName}\"-handling blev udført korrekt",
"\"{displayName}\" action failed" : "\"{displayName}\"-handling mislykkedes",
"Select the row for {displayName}" : "Vælg rækken for {displayName}",
"Rename file" : "Omdøb fil",
"File name" : "Filnavn",
"Folder name" : "Mappenavn",
"This node is unavailable" : "Denne node er ikke tilgængelig ",
"Download file {name}" : "Download fil {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" er ikke en tilladt filtype.",
"{newName} already exists." : "{newName} findes allerede.",
"\"{char}\" is not allowed inside a file name." : "\"{char}\" er ikke tilladt i filnavnet",
"Name cannot be empty" : "Navn må ikke være tomt",
"Another entry with the same name already exists" : "Dette navn er allerede i brug",
"Renamed \"{oldName}\" to \"{newName}\"" : "Omdøbte \"{oldName}\" til \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kunne ikke omdøbe \"{oldName}\", da den findes ikke længere",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Navnet \"{newName}\" bruges allerede i mappen \"{dir}\". Vælg et andet navn.",
"Could not rename \"{oldName}\"" : "Kunne ikke omdøbe \"{oldName}\"",
"A long time ago" : "For lang tid siden",
"Could not copy {file}. {message}" : "Kunne ikke kopierer {file}. {message}",
"Could not move {file}. {message}" : "Kunne ikke flytte {file}. {message}",
"Total rows summary" : "Samlet række antal",
"Select all" : "Vælg alle",
"Unselect all" : "Fravælg alle",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" fejlede i nogle aspekter.",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\"-handling blev udført korrekt",
"Sort list by {column}" : "Sortér liste efter {column}",
"List of files and folders." : "Liste med filer og mapper.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} og {summaryFolder}",
"File not found" : "Filen blev ikke fundet",
"_{count} file_::_{count} files_" : ["{count} fil","{count} filer"],
"_{count} folder_::_{count} folders_" : ["{count} mapper","{count} mapper"],
@ -220,6 +243,7 @@ OC.L10N.register(
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopier til udklipsholder",
"Use this address to access your Files via WebDAV" : "Brug denne adresse til at få adgang til dine filer via WebDAV",
"If you have enabled 2FA, you must create and use a new app password by clicking here." : "Hvis du har aktiveret 2-faktor godkendelse, skal du oprette en app-token, ved at følge dette link.",
"Clipboard is not available" : "Udklipsholderen er ikke tilgængelig",
"WebDAV URL copied to clipboard" : "WebDAV URL kopieret til udklipsholder",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
@ -233,24 +257,34 @@ OC.L10N.register(
"Delete permanently" : "Slet permanent",
"Destination is not a folder" : "Destinationen er ikke en mappe",
"This file/folder is already in that directory" : "Filen/mappen er allerede i denne mappe",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan ikke flytte en fil/mappe ind i sig selv, eller til en mappe inden i sig selv",
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navn findes allerede i denne mappe",
"The files is locked" : "Filerne er låste",
"The file does not exist anymore" : "Filen findes ikke længere",
"Chose destination" : "Vælg destionation",
"Copy to {target}" : "Kopiér til {target}",
"Move to {target}" : "Flyt til {target}",
"Cancelled move or copy operation" : "Flytning eller kopiering er annulleret",
"Open folder {displayName}" : "Åben mappe {displayName}",
"Open in Files" : "Åben i Filer",
"Open details" : "Mere information",
"Create new templates folder" : "Opsæt ny skabelonmappe",
"Templates" : "Skabeloner",
"Unable to initialize the templates directory" : "Kan ikke initialisere skabelonmappen",
"Created new folder \"{name}\"" : "Oprettede ny mappe \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mappe","{folderCount} mapper"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil og {folderCount} mapper","1 fil og {folderCount} mapper"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil og 1 mapper","{fileCount} filer og 1 mapper"],
"{fileCount} files and {folderCount} folders" : "{fileCount} filer og {folderCount} mapper",
"List of favorites files and folders." : "Liste med foretrukne filer og mapper.",
"No favorites yet" : "Ingen foretrukne endnu",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her",
"All files" : "Alle filer",
"List of your files and folders." : "Liste med dine filer og mapper.",
"List of recently modified files and folders." : "Liste med nyligt ændrede filer og mapper.",
"No recently modified files" : "Ingen filer er ændret for nyligt",
"Files and folders you recently modified will show up here." : "Filer og mapper som du har ændret for nyligt, vil blive vist her.",
"Toggle %1$s sublist" : "Skift %1$s underliste",
"No entries found in this folder" : "Der blev ikke fundet poster i denne mappe",
"Upload too large" : "Upload er for stor",
@ -281,6 +315,7 @@ OC.L10N.register(
"Sort list by {column} ({direction})" : "Sortér liste efter {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.",
"Search for an account" : "Søg efter en konto",
"Choose" : "Vælg"
"Choose" : "Vælg",
"No files or folders have been deleted yet" : "Ingen filer eller mappe er slettet endnu"
},
"nplurals=2; plural=(n != 1);");

@ -20,6 +20,8 @@
"An unknown error has occurred" : "En ukendt fejl er opstået",
"File could not be uploaded" : "Filen kunne ikke uploades",
"Uploading …" : "Uploader ...",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"Uploading … ({currentNumber}/{total})" : "Uploader … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Upload af dette er ikke supporteret",
"Target folder does not exist any more" : "Destinationsmappen findes ikke længere",
@ -167,16 +169,37 @@
"File Management" : "Filhåndtering",
"Reload current directory" : "Genindlæs den aktuelle mappe",
"Go to the \"{dir}\" directory" : "Gå til mappen \"{dir}\"",
"Drag and drop files here to upload" : "Træk filer hertil for at uploade",
"Upload successful" : "Succesfuld upload",
"\"{displayName}\" action executed successfully" : "\"{displayName}\"-handling blev udført korrekt",
"\"{displayName}\" action failed" : "\"{displayName}\"-handling mislykkedes",
"Select the row for {displayName}" : "Vælg rækken for {displayName}",
"Rename file" : "Omdøb fil",
"File name" : "Filnavn",
"Folder name" : "Mappenavn",
"This node is unavailable" : "Denne node er ikke tilgængelig ",
"Download file {name}" : "Download fil {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" er ikke en tilladt filtype.",
"{newName} already exists." : "{newName} findes allerede.",
"\"{char}\" is not allowed inside a file name." : "\"{char}\" er ikke tilladt i filnavnet",
"Name cannot be empty" : "Navn må ikke være tomt",
"Another entry with the same name already exists" : "Dette navn er allerede i brug",
"Renamed \"{oldName}\" to \"{newName}\"" : "Omdøbte \"{oldName}\" til \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kunne ikke omdøbe \"{oldName}\", da den findes ikke længere",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Navnet \"{newName}\" bruges allerede i mappen \"{dir}\". Vælg et andet navn.",
"Could not rename \"{oldName}\"" : "Kunne ikke omdøbe \"{oldName}\"",
"A long time ago" : "For lang tid siden",
"Could not copy {file}. {message}" : "Kunne ikke kopierer {file}. {message}",
"Could not move {file}. {message}" : "Kunne ikke flytte {file}. {message}",
"Total rows summary" : "Samlet række antal",
"Select all" : "Vælg alle",
"Unselect all" : "Fravælg alle",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" fejlede i nogle aspekter.",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\"-handling blev udført korrekt",
"Sort list by {column}" : "Sortér liste efter {column}",
"List of files and folders." : "Liste med filer og mapper.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} og {summaryFolder}",
"File not found" : "Filen blev ikke fundet",
"_{count} file_::_{count} files_" : ["{count} fil","{count} filer"],
"_{count} folder_::_{count} folders_" : ["{count} mapper","{count} mapper"],
@ -218,6 +241,7 @@
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopier til udklipsholder",
"Use this address to access your Files via WebDAV" : "Brug denne adresse til at få adgang til dine filer via WebDAV",
"If you have enabled 2FA, you must create and use a new app password by clicking here." : "Hvis du har aktiveret 2-faktor godkendelse, skal du oprette en app-token, ved at følge dette link.",
"Clipboard is not available" : "Udklipsholderen er ikke tilgængelig",
"WebDAV URL copied to clipboard" : "WebDAV URL kopieret til udklipsholder",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
@ -231,24 +255,34 @@
"Delete permanently" : "Slet permanent",
"Destination is not a folder" : "Destinationen er ikke en mappe",
"This file/folder is already in that directory" : "Filen/mappen er allerede i denne mappe",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan ikke flytte en fil/mappe ind i sig selv, eller til en mappe inden i sig selv",
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navn findes allerede i denne mappe",
"The files is locked" : "Filerne er låste",
"The file does not exist anymore" : "Filen findes ikke længere",
"Chose destination" : "Vælg destionation",
"Copy to {target}" : "Kopiér til {target}",
"Move to {target}" : "Flyt til {target}",
"Cancelled move or copy operation" : "Flytning eller kopiering er annulleret",
"Open folder {displayName}" : "Åben mappe {displayName}",
"Open in Files" : "Åben i Filer",
"Open details" : "Mere information",
"Create new templates folder" : "Opsæt ny skabelonmappe",
"Templates" : "Skabeloner",
"Unable to initialize the templates directory" : "Kan ikke initialisere skabelonmappen",
"Created new folder \"{name}\"" : "Oprettede ny mappe \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mappe","{folderCount} mapper"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil og {folderCount} mapper","1 fil og {folderCount} mapper"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil og 1 mapper","{fileCount} filer og 1 mapper"],
"{fileCount} files and {folderCount} folders" : "{fileCount} filer og {folderCount} mapper",
"List of favorites files and folders." : "Liste med foretrukne filer og mapper.",
"No favorites yet" : "Ingen foretrukne endnu",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her",
"All files" : "Alle filer",
"List of your files and folders." : "Liste med dine filer og mapper.",
"List of recently modified files and folders." : "Liste med nyligt ændrede filer og mapper.",
"No recently modified files" : "Ingen filer er ændret for nyligt",
"Files and folders you recently modified will show up here." : "Filer og mapper som du har ændret for nyligt, vil blive vist her.",
"Toggle %1$s sublist" : "Skift %1$s underliste",
"No entries found in this folder" : "Der blev ikke fundet poster i denne mappe",
"Upload too large" : "Upload er for stor",
@ -279,6 +313,7 @@
"Sort list by {column} ({direction})" : "Sortér liste efter {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.",
"Search for an account" : "Søg efter en konto",
"Choose" : "Vælg"
"Choose" : "Vælg",
"No files or folders have been deleted yet" : "Ingen filer eller mappe er slettet endnu"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

@ -171,15 +171,44 @@ OC.L10N.register(
"File Management" : "Διαχείριση αρχείων",
"Reload current directory" : "Επαναφόρτωση τρέχοντος καταλόγου",
"Go to the \"{dir}\" directory" : "Μετάβαση στον κατάλογο \"{dir}\"",
"Drag and drop files here to upload" : "Σύρετε και αφήστε αρχεία εδώ για να τα μεταφορτώσετε",
"Upload successful" : "Επιτυχής μεταφόρτωση",
"\"{displayName}\" action executed successfully" : "Η ενέργεια του/της \"{displayName}\" εκτελέστηκε επιτυχώς",
"\"{displayName}\" action failed" : "Η ενέργεια του \"{displayName}\" απέτυχε",
"Select the row for {displayName}" : "Επιλέξτε τη γραμμή για τον/την {displayName}",
"Rename file" : "Μετονομασία αρχείου",
"File name" : "Όνομα αρχείου",
"Folder name" : "Όνομα φακέλου",
"This node is unavailable" : "Αυτός ο κόμβος δεν είναι διαθέσιμος",
"Download file {name}" : "Λήψη αρχείου {name}",
"\"{name}\" is not an allowed filetype." : "Το \"{name}\" δεν είναι ένας επιτρεπόμενος τύπος αρχείου.",
"{newName} already exists." : "Το {newName} υπάρχει ήδη.",
"\"{char}\" is not allowed inside a file name." : "\"{char}\" δεν επιτρέπεται μέσα σε όνομα αρχείου.",
"Name cannot be empty" : "Το όνομα δεν μπορεί να είναι κενό",
"Another entry with the same name already exists" : "Υπάρχει ήδη μια άλλη καταχώρηση με το ίδιο όνομα",
"Renamed \"{oldName}\" to \"{newName}\"" : "Μετονομασία του \"{oldName}\" σε \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Δεν ήταν δυνατή η μετονομασία του \"{oldName}\", δεν υπάρχει πλέον",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Το όνομα \"{newName}\" χρησιμοποιείται ήδη στον φάκελο \"{dir}\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα.",
"Could not rename \"{oldName}\"" : "Δεν ήταν δυνατή η μετονομασία του \"{oldName}\"",
"A long time ago" : "Πριν αρκετό καιρό",
"Could not copy {file}. {message}" : "Δεν ήταν δυνατή η αντιγραφή του {file}. {message}",
"Could not move {file}. {message}" : "Δεν ήταν δυνατή η μετακίνηση του {file}. {message}",
"Total rows summary" : "Συνολική σύνοψη γραμμών",
"Select all" : "Επιλογή όλων",
"Unselect all" : "Αποεπιλογή όλων",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" απέτυχε σε ορισμένα στοιχεία",
"\"{displayName}\" batch action executed successfully" : "Η μαζική ενέργεια του/της \"{displayName}\" εκτελέστηκε επιτυχώς",
"Sort list by {column}" : "Ταξινόμηση λίστας κατά {column}",
"List of files and folders." : "Λίστα αρχείων και φακέλων.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} και {summaryFolder}",
"File not found" : "Δε βρέθηκε το αρχείο",
"_{count} file_::_{count} files_" : ["{count} αρχείο","{count} αρχεία"],
"_{count} folder_::_{count} folders_" : ["{count} φάκελος","{count} φακέλοι"],
"Storage informations" : "Πληροφορίες αποθήκευσης",
"{usedQuotaByte} used" : "{usedQuotaByte} χρησιμοποιείται",
"{relative}% used" : "{relative}% χρησιμοποιείται",
"Could not refresh storage stats" : "Δεν ήταν δυνατή η ανανέωση των στατιστικών αποθήκευσης",
"Transfer ownership of a file or folder" : "Μεταβίβαση κυριότητας αρχείου ή φακέλου",
"Choose file or folder to transfer" : "Επιλέξτε αρχείο ή φάκελο για μεταφορά",
"Change" : "Αλλαγή",
@ -201,16 +230,20 @@ OC.L10N.register(
"Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
"Shared" : "Κοινόχρηστα",
"Switch to list view" : "Αλλαγή σε προβολή λίστας",
"Switch to grid view" : "Εναλλαγή σε προβολή πλέγματος",
"Open the files app settings" : "Ανοίξτε τις ρυθμίσεις της εφαρμογής αρχείων",
"Files settings" : "Ρυθμίσεις αρχείων",
"File cannot be accessed" : "Δεν είναι δυνατή η πρόσβαση στο αρχείο",
"You might not have have permissions to view it, ask the sender to share it" : "Μπορεί να μην έχετε δικαίωμα για να το δείτε. Ζητήστε από τον αποστολέα να το μοιραστεί",
"Sort favorites first" : "Ταξινόμηση των αγαπημένων πρώτα",
"Show hidden files" : "Εμφάνιση κρυφών αρχείων",
"Crop image previews" : "Περικοπή προεπισκόπησης εικόνας",
"Enable the grid view" : "Ενεργοποίηση της προβολής πλέγματος",
"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." : "Εάν έχετε ενεργοποιήσει το 2FA, πρέπει να δημιουργήσετε και να χρησιμοποιήσετε έναν νέο κωδικό πρόσβασης εφαρμογής κάνοντας κλικ εδώ.",
"Clipboard is not available" : "Το πρόχειρο δεν είναι διαθέσιμο",
"WebDAV URL copied to clipboard" : "Ο σύνδεσμος WebDAV αντιγράφηκε στο πρόχειρο",
"Unable to change the favourite state of the file" : "Αδυναμία αλλαγής αγαπημένης κατάστασης αρχείου",
@ -222,16 +255,36 @@ OC.L10N.register(
"Blank" : "Κενό",
"Unable to create new file from template" : "Δεν είναι δυνατή η δημιουργία νέου αρχείου από το πρότυπο",
"Delete permanently" : "Διαγραφή οριστικά",
"Destination is not a folder" : "Ο προορισμός δεν είναι φάκελος",
"This file/folder is already in that directory" : "Αυτό το αρχείο/φάκελος βρίσκεται ήδη σε αυτόν τον κατάλογο",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Δεν μπορείτε να μετακινήσετε ένα αρχείο/φάκελο στον εαυτό του ή σε έναν υποφάκελο του ίδιου του φακέλου.",
"A file or folder with that name already exists in this folder" : "Ένα αρχείο ή ένας φάκελος με αυτό το όνομα υπάρχει ήδη σε αυτόν το φάκελο",
"The files is locked" : "Το αρχείο είναι κλειδωμένο",
"The file does not exist anymore" : "Το αρχείο δεν υπάρχει πλέον",
"Chose destination" : "Επιλέξτε προορισμό",
"Copy to {target}" : "Αντιγραφή σε {target}",
"Move to {target}" : "Μετακίνηση σε {target}",
"Cancelled move or copy operation" : "Ακυρώθηκε η λειτουργία μετακίνησης ή αντιγραφής",
"Open folder {displayName}" : "Άνοιγμα φακέλου {displayName}",
"Open in Files" : "Άνοιγμα στα Αρχεία",
"Open details" : "Άνοιγμα λεπτομερειών",
"Create new templates folder" : "Δημιουργία νέου φακέλου προτύπων",
"Templates" : "Πρότυπα",
"Unable to initialize the templates directory" : "Δεν είναι δυνατή η προετοιμασία του καταλόγου προτύπων",
"Created new folder \"{name}\"" : "Δημιουργήθηκε νέος φάκελος \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} φάκελος","{folderCount} φακέλοι"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} αρχείο","{fileCount} αρχεία"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 αρχείο και {folderCount} φάκελος","1 αρχείο και {folderCount} φακέλοι"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} αρχείο και 1 φάκελος","{fileCount} αρχεία και 1 φάκελος"],
"{fileCount} files and {folderCount} folders" : "{fileCount} αρχεία και {folderCount} φακέλοι",
"List of favorites files and folders." : "Λίστα αγαπημένων αρχείων και φακέλων.",
"No favorites yet" : "Κανένα αγαπημένο ακόμα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ",
"All files" : "Όλα τα αρχεία",
"List of your files and folders." : "Λίστα των αρχείων και φακέλων σας.",
"List of recently modified files and folders." : "Λίστα των πρόσφατα τροποποιημένων αρχείων και φακέλων.",
"No recently modified files" : "Δεν υπάρχουν πρόσφατα τροποποιημένα αρχεία",
"Files and folders you recently modified will show up here." : "Εδώ θα εμφανίζονται τα αρχεία και οι φάκελοι που τροποποιήσατε πρόσφατα.",
"Toggle %1$s sublist" : "Εναλλαγή %1$s σε υπολίστα",
"No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο",
"Upload too large" : "Πολύ μεγάλο αρχείο προς μεταφόρτωση",
@ -260,6 +313,7 @@ OC.L10N.register(
"ascending" : "αύξουσα",
"descending" : "φθίνουσα",
"Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.",
"Search for an account" : "Αναζήτηση για λογαριασμό",
"Choose" : "Επιλογή",
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα"

@ -169,15 +169,44 @@
"File Management" : "Διαχείριση αρχείων",
"Reload current directory" : "Επαναφόρτωση τρέχοντος καταλόγου",
"Go to the \"{dir}\" directory" : "Μετάβαση στον κατάλογο \"{dir}\"",
"Drag and drop files here to upload" : "Σύρετε και αφήστε αρχεία εδώ για να τα μεταφορτώσετε",
"Upload successful" : "Επιτυχής μεταφόρτωση",
"\"{displayName}\" action executed successfully" : "Η ενέργεια του/της \"{displayName}\" εκτελέστηκε επιτυχώς",
"\"{displayName}\" action failed" : "Η ενέργεια του \"{displayName}\" απέτυχε",
"Select the row for {displayName}" : "Επιλέξτε τη γραμμή για τον/την {displayName}",
"Rename file" : "Μετονομασία αρχείου",
"File name" : "Όνομα αρχείου",
"Folder name" : "Όνομα φακέλου",
"This node is unavailable" : "Αυτός ο κόμβος δεν είναι διαθέσιμος",
"Download file {name}" : "Λήψη αρχείου {name}",
"\"{name}\" is not an allowed filetype." : "Το \"{name}\" δεν είναι ένας επιτρεπόμενος τύπος αρχείου.",
"{newName} already exists." : "Το {newName} υπάρχει ήδη.",
"\"{char}\" is not allowed inside a file name." : "\"{char}\" δεν επιτρέπεται μέσα σε όνομα αρχείου.",
"Name cannot be empty" : "Το όνομα δεν μπορεί να είναι κενό",
"Another entry with the same name already exists" : "Υπάρχει ήδη μια άλλη καταχώρηση με το ίδιο όνομα",
"Renamed \"{oldName}\" to \"{newName}\"" : "Μετονομασία του \"{oldName}\" σε \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Δεν ήταν δυνατή η μετονομασία του \"{oldName}\", δεν υπάρχει πλέον",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Το όνομα \"{newName}\" χρησιμοποιείται ήδη στον φάκελο \"{dir}\". Παρακαλώ επιλέξτε ένα διαφορετικό όνομα.",
"Could not rename \"{oldName}\"" : "Δεν ήταν δυνατή η μετονομασία του \"{oldName}\"",
"A long time ago" : "Πριν αρκετό καιρό",
"Could not copy {file}. {message}" : "Δεν ήταν δυνατή η αντιγραφή του {file}. {message}",
"Could not move {file}. {message}" : "Δεν ήταν δυνατή η μετακίνηση του {file}. {message}",
"Total rows summary" : "Συνολική σύνοψη γραμμών",
"Select all" : "Επιλογή όλων",
"Unselect all" : "Αποεπιλογή όλων",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" απέτυχε σε ορισμένα στοιχεία",
"\"{displayName}\" batch action executed successfully" : "Η μαζική ενέργεια του/της \"{displayName}\" εκτελέστηκε επιτυχώς",
"Sort list by {column}" : "Ταξινόμηση λίστας κατά {column}",
"List of files and folders." : "Λίστα αρχείων και φακέλων.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} και {summaryFolder}",
"File not found" : "Δε βρέθηκε το αρχείο",
"_{count} file_::_{count} files_" : ["{count} αρχείο","{count} αρχεία"],
"_{count} folder_::_{count} folders_" : ["{count} φάκελος","{count} φακέλοι"],
"Storage informations" : "Πληροφορίες αποθήκευσης",
"{usedQuotaByte} used" : "{usedQuotaByte} χρησιμοποιείται",
"{relative}% used" : "{relative}% χρησιμοποιείται",
"Could not refresh storage stats" : "Δεν ήταν δυνατή η ανανέωση των στατιστικών αποθήκευσης",
"Transfer ownership of a file or folder" : "Μεταβίβαση κυριότητας αρχείου ή φακέλου",
"Choose file or folder to transfer" : "Επιλέξτε αρχείο ή φάκελο για μεταφορά",
"Change" : "Αλλαγή",
@ -199,16 +228,20 @@
"Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
"Shared" : "Κοινόχρηστα",
"Switch to list view" : "Αλλαγή σε προβολή λίστας",
"Switch to grid view" : "Εναλλαγή σε προβολή πλέγματος",
"Open the files app settings" : "Ανοίξτε τις ρυθμίσεις της εφαρμογής αρχείων",
"Files settings" : "Ρυθμίσεις αρχείων",
"File cannot be accessed" : "Δεν είναι δυνατή η πρόσβαση στο αρχείο",
"You might not have have permissions to view it, ask the sender to share it" : "Μπορεί να μην έχετε δικαίωμα για να το δείτε. Ζητήστε από τον αποστολέα να το μοιραστεί",
"Sort favorites first" : "Ταξινόμηση των αγαπημένων πρώτα",
"Show hidden files" : "Εμφάνιση κρυφών αρχείων",
"Crop image previews" : "Περικοπή προεπισκόπησης εικόνας",
"Enable the grid view" : "Ενεργοποίηση της προβολής πλέγματος",
"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." : "Εάν έχετε ενεργοποιήσει το 2FA, πρέπει να δημιουργήσετε και να χρησιμοποιήσετε έναν νέο κωδικό πρόσβασης εφαρμογής κάνοντας κλικ εδώ.",
"Clipboard is not available" : "Το πρόχειρο δεν είναι διαθέσιμο",
"WebDAV URL copied to clipboard" : "Ο σύνδεσμος WebDAV αντιγράφηκε στο πρόχειρο",
"Unable to change the favourite state of the file" : "Αδυναμία αλλαγής αγαπημένης κατάστασης αρχείου",
@ -220,16 +253,36 @@
"Blank" : "Κενό",
"Unable to create new file from template" : "Δεν είναι δυνατή η δημιουργία νέου αρχείου από το πρότυπο",
"Delete permanently" : "Διαγραφή οριστικά",
"Destination is not a folder" : "Ο προορισμός δεν είναι φάκελος",
"This file/folder is already in that directory" : "Αυτό το αρχείο/φάκελος βρίσκεται ήδη σε αυτόν τον κατάλογο",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Δεν μπορείτε να μετακινήσετε ένα αρχείο/φάκελο στον εαυτό του ή σε έναν υποφάκελο του ίδιου του φακέλου.",
"A file or folder with that name already exists in this folder" : "Ένα αρχείο ή ένας φάκελος με αυτό το όνομα υπάρχει ήδη σε αυτόν το φάκελο",
"The files is locked" : "Το αρχείο είναι κλειδωμένο",
"The file does not exist anymore" : "Το αρχείο δεν υπάρχει πλέον",
"Chose destination" : "Επιλέξτε προορισμό",
"Copy to {target}" : "Αντιγραφή σε {target}",
"Move to {target}" : "Μετακίνηση σε {target}",
"Cancelled move or copy operation" : "Ακυρώθηκε η λειτουργία μετακίνησης ή αντιγραφής",
"Open folder {displayName}" : "Άνοιγμα φακέλου {displayName}",
"Open in Files" : "Άνοιγμα στα Αρχεία",
"Open details" : "Άνοιγμα λεπτομερειών",
"Create new templates folder" : "Δημιουργία νέου φακέλου προτύπων",
"Templates" : "Πρότυπα",
"Unable to initialize the templates directory" : "Δεν είναι δυνατή η προετοιμασία του καταλόγου προτύπων",
"Created new folder \"{name}\"" : "Δημιουργήθηκε νέος φάκελος \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} φάκελος","{folderCount} φακέλοι"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} αρχείο","{fileCount} αρχεία"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 αρχείο και {folderCount} φάκελος","1 αρχείο και {folderCount} φακέλοι"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} αρχείο και 1 φάκελος","{fileCount} αρχεία και 1 φάκελος"],
"{fileCount} files and {folderCount} folders" : "{fileCount} αρχεία και {folderCount} φακέλοι",
"List of favorites files and folders." : "Λίστα αγαπημένων αρχείων και φακέλων.",
"No favorites yet" : "Κανένα αγαπημένο ακόμα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ",
"All files" : "Όλα τα αρχεία",
"List of your files and folders." : "Λίστα των αρχείων και φακέλων σας.",
"List of recently modified files and folders." : "Λίστα των πρόσφατα τροποποιημένων αρχείων και φακέλων.",
"No recently modified files" : "Δεν υπάρχουν πρόσφατα τροποποιημένα αρχεία",
"Files and folders you recently modified will show up here." : "Εδώ θα εμφανίζονται τα αρχεία και οι φάκελοι που τροποποιήσατε πρόσφατα.",
"Toggle %1$s sublist" : "Εναλλαγή %1$s σε υπολίστα",
"No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο",
"Upload too large" : "Πολύ μεγάλο αρχείο προς μεταφόρτωση",
@ -258,6 +311,7 @@
"ascending" : "αύξουσα",
"descending" : "φθίνουσα",
"Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.",
"Search for an account" : "Αναζήτηση για λογαριασμό",
"Choose" : "Επιλογή",
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα"

@ -7,7 +7,7 @@ OC.L10N.register(
"Delete" : "삭제",
"Tags" : "태그",
"Show list view" : "리스트 보기",
"Show grid view" : "그리드 보기",
"Show grid view" : "바둑판식 보기",
"Home" : "홈",
"Close" : "닫기",
"Could not create folder \"{dir}\"" : "폴더 \"{dir}\"을(를) 만들 수 없음",
@ -22,6 +22,7 @@ OC.L10N.register(
"An unknown error has occurred" : "알 수 없는 에러 발생",
"File could not be uploaded" : "파일을 업로드할 수 없음",
"Uploading …" : "업로드 중…",
"Uploading … ({currentNumber}/{total})" : "업로드 중… ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize}({bitrate})",
"Uploading that item is not supported" : "이 항목의 업로드를 지원하지 않습니다.",
"Target folder does not exist any more" : "대상 폴더가 더 이상 존재하지 않습니다",
@ -169,6 +170,8 @@ OC.L10N.register(
"File Management" : "파일 관리",
"Reload current directory" : "이 경로를 새로고침",
"Go to the \"{dir}\" directory" : "\"{dir}\" 경로로 이동",
"Drag and drop files here to upload" : "이곳에 파일을 드래그 앤 드롭해 업로드",
"Upload successful" : "업로드 성공",
"\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
"\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
"Select the row for {displayName}" : "{displayName}을 위한 행을 선택",
@ -179,14 +182,28 @@ OC.L10N.register(
"Download file {name}" : "{name} 파일 다운로드",
"\"{name}\" is not an allowed filetype." : "\"{name}\"은(는) 허용된 파일 형식이 아님.",
"{newName} already exists." : "{newName}이(가) 이미 존재함.",
"\"{char}\" is not allowed inside a file name." : "파일 이름에 \"{char}\"(을)를 넣을 수 없습니다.",
"Name cannot be empty" : "이름이 비어 있을 수 없음",
"Another entry with the same name already exists" : "같은 이름의 항목이 이미 있습니다.",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" 에서 \"{newName}\"(으)로 이름 변경함",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\"(이)가 더이상 존재하지 않아 이름을 바꿀 수 없습니다.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" 이름이 \"{dir}\" 폴더에서 이미 사용 중입니다. 다른 이름을 고르세요.",
"Could not rename \"{oldName}\"" : "\"{oldName}\"의 이름을 바꿀 수 없음",
"A long time ago" : "오래 전",
"Could not copy {file}. {message}" : "{file}(을)를 복사할 수 없음. {message}",
"Could not move {file}. {message}" : "{file}(을)를 이동할 수 없음. {message}",
"Total rows summary" : "총 행 요약",
"Select all" : "모두 선택",
"Unselect all" : "모두 선택 해제",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
"Sort list by {column}" : "{column}(을)를 기준으로 목록 정렬",
"List of files and folders." : "파일과 폴더의 목록",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "성능 상의 이유로 목록을 전부 표시하지 않았습니다. 목록을 탐색하면 파일들이 표시됩니다.",
"{summaryFile} and {summaryFolder}" : "{summaryFile}(과)와 {summaryFolder}",
"File not found" : "파일을 찾을 수 없음",
"_{count} file_::_{count} files_" : ["{count}개 파일"],
"_{count} folder_::_{count} folders_" : ["{count}개 폴더"],
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
"{relative}% used" : "{relative}% 사용",
@ -211,16 +228,21 @@ OC.L10N.register(
"Share" : "공유하기",
"Shared by link" : "링크로 공유됨",
"Shared" : "공유됨",
"Switch to list view" : "목록 보기로 전환",
"Switch to grid view" : "바둑판식 보기로 전환",
"Open the files app settings" : "파일 앱 설정을 열기",
"Files settings" : "파일 설정",
"File cannot be accessed" : "파일에 접근할 수 없음",
"You might not have have permissions to view it, ask the sender to share it" : "이것을 볼 권한이 없는 것 같습니다, 보낸 이에게 공유를 요청하세요.",
"Sort favorites first" : "즐겨찾기를 처음에 나열",
"Show hidden files" : "숨김 파일 보이기",
"Crop image previews" : "이미지 미리보기 확대",
"Enable the grid view" : "바둑판식 보기 활성화",
"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." : "2단계 인증을 활성화했다면, 이곳을 클릭해 새로운 앱 암호를 만들어 사용해야 합니다.",
"Clipboard is not available" : "클립보드를 사용할 수 없습니다.",
"WebDAV URL copied to clipboard" : "WebDAV URL이 클립보드에 복사됨",
"Unable to change the favourite state of the file" : "파일의 즐겨찾기 상태를 변경할 수 없음",
@ -232,17 +254,37 @@ OC.L10N.register(
"Blank" : "여백",
"Unable to create new file from template" : "템플릿으로 새 파일을 만들 수 없음",
"Delete permanently" : "영구히 삭제",
"Destination is not a folder" : "대상이 폴더가 아닙니다.",
"This file/folder is already in that directory" : "이 파일/폴더가 이미 그 경로에 있습니다.",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "파일/폴더를 그 안이나 그 안의 폴더로 이동할 수 없습니다.",
"A file or folder with that name already exists in this folder" : "같은 이름을 사용하는 파일 또는 폴더가 이미 이 폴더에 있습니다.",
"The files is locked" : "이 파일은 잠겼습니다.",
"The file does not exist anymore" : "파일이 더이상 존재하지 않습니다.",
"Chose destination" : "대상 선택",
"Copy to {target}" : "{target}에 복사",
"Move to {target}" : "{target}에 이동",
"Cancelled move or copy operation" : "이동 또는 복사 작업을 취소함",
"Open folder {displayName}" : "{displayName} 폴더 열기",
"Open in Files" : "파일에서 열기",
"Open details" : "자세한 정보 열기",
"Create new templates folder" : "새로운 템플릿 폴더 만들기",
"Templates" : "템플릿",
"Unable to initialize the templates directory" : "템플릿 디렉터리를 설정할 수 없음",
"Created new folder \"{name}\"" : "\"{name}\" 폴더를 새로 만듦",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount}개 폴더"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount}개 파일"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1개 파일과 {folderCount}개 폴더"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount}개 파일과 1개 폴더"],
"{fileCount} files and {folderCount} folders" : "{fileCount}개 파일과 {folderCount}개 폴더",
"List of favorites files and folders." : "즐겨찾는 파일과 폴더의 목록",
"No favorites yet" : "즐겨찾는 항목 없음",
"Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다",
"All files" : "모든 파일",
"List of your files and folders." : "내 폴더와 파일의 목록",
"List of recently modified files and folders." : "최근에 수정된 파일과 폴더의 목록",
"No recently modified files" : "최근에 수정된 파일 없음",
"Files and folders you recently modified will show up here." : "최근에 수정한 파일과 폴더가 이곳에 표시됩니다.",
"Toggle %1$s sublist" : "%1$s 서브리스트 켜기/끄기",
"No entries found in this folder" : "이 폴더에 항목 없음",
"Upload too large" : "업로드한 파일이 너무 큼",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
@ -256,7 +298,7 @@ OC.L10N.register(
"Set up templates folder" : "템플릿 폴더 설정",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
"Toggle grid view" : "모눈 보기 전환",
"Toggle grid view" : "바둑판식 보기 전환",
"Deleted files" : "삭제된 파일",
"Shares" : "공유",
"Shared with others" : "다른 사람과 공유됨",

@ -5,7 +5,7 @@
"Delete" : "삭제",
"Tags" : "태그",
"Show list view" : "리스트 보기",
"Show grid view" : "그리드 보기",
"Show grid view" : "바둑판식 보기",
"Home" : "홈",
"Close" : "닫기",
"Could not create folder \"{dir}\"" : "폴더 \"{dir}\"을(를) 만들 수 없음",
@ -20,6 +20,7 @@
"An unknown error has occurred" : "알 수 없는 에러 발생",
"File could not be uploaded" : "파일을 업로드할 수 없음",
"Uploading …" : "업로드 중…",
"Uploading … ({currentNumber}/{total})" : "업로드 중… ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize}({bitrate})",
"Uploading that item is not supported" : "이 항목의 업로드를 지원하지 않습니다.",
"Target folder does not exist any more" : "대상 폴더가 더 이상 존재하지 않습니다",
@ -167,6 +168,8 @@
"File Management" : "파일 관리",
"Reload current directory" : "이 경로를 새로고침",
"Go to the \"{dir}\" directory" : "\"{dir}\" 경로로 이동",
"Drag and drop files here to upload" : "이곳에 파일을 드래그 앤 드롭해 업로드",
"Upload successful" : "업로드 성공",
"\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
"\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
"Select the row for {displayName}" : "{displayName}을 위한 행을 선택",
@ -177,14 +180,28 @@
"Download file {name}" : "{name} 파일 다운로드",
"\"{name}\" is not an allowed filetype." : "\"{name}\"은(는) 허용된 파일 형식이 아님.",
"{newName} already exists." : "{newName}이(가) 이미 존재함.",
"\"{char}\" is not allowed inside a file name." : "파일 이름에 \"{char}\"(을)를 넣을 수 없습니다.",
"Name cannot be empty" : "이름이 비어 있을 수 없음",
"Another entry with the same name already exists" : "같은 이름의 항목이 이미 있습니다.",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" 에서 \"{newName}\"(으)로 이름 변경함",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\"(이)가 더이상 존재하지 않아 이름을 바꿀 수 없습니다.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" 이름이 \"{dir}\" 폴더에서 이미 사용 중입니다. 다른 이름을 고르세요.",
"Could not rename \"{oldName}\"" : "\"{oldName}\"의 이름을 바꿀 수 없음",
"A long time ago" : "오래 전",
"Could not copy {file}. {message}" : "{file}(을)를 복사할 수 없음. {message}",
"Could not move {file}. {message}" : "{file}(을)를 이동할 수 없음. {message}",
"Total rows summary" : "총 행 요약",
"Select all" : "모두 선택",
"Unselect all" : "모두 선택 해제",
"\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
"Sort list by {column}" : "{column}(을)를 기준으로 목록 정렬",
"List of files and folders." : "파일과 폴더의 목록",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "성능 상의 이유로 목록을 전부 표시하지 않았습니다. 목록을 탐색하면 파일들이 표시됩니다.",
"{summaryFile} and {summaryFolder}" : "{summaryFile}(과)와 {summaryFolder}",
"File not found" : "파일을 찾을 수 없음",
"_{count} file_::_{count} files_" : ["{count}개 파일"],
"_{count} folder_::_{count} folders_" : ["{count}개 폴더"],
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
"{relative}% used" : "{relative}% 사용",
@ -209,16 +226,21 @@
"Share" : "공유하기",
"Shared by link" : "링크로 공유됨",
"Shared" : "공유됨",
"Switch to list view" : "목록 보기로 전환",
"Switch to grid view" : "바둑판식 보기로 전환",
"Open the files app settings" : "파일 앱 설정을 열기",
"Files settings" : "파일 설정",
"File cannot be accessed" : "파일에 접근할 수 없음",
"You might not have have permissions to view it, ask the sender to share it" : "이것을 볼 권한이 없는 것 같습니다, 보낸 이에게 공유를 요청하세요.",
"Sort favorites first" : "즐겨찾기를 처음에 나열",
"Show hidden files" : "숨김 파일 보이기",
"Crop image previews" : "이미지 미리보기 확대",
"Enable the grid view" : "바둑판식 보기 활성화",
"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." : "2단계 인증을 활성화했다면, 이곳을 클릭해 새로운 앱 암호를 만들어 사용해야 합니다.",
"Clipboard is not available" : "클립보드를 사용할 수 없습니다.",
"WebDAV URL copied to clipboard" : "WebDAV URL이 클립보드에 복사됨",
"Unable to change the favourite state of the file" : "파일의 즐겨찾기 상태를 변경할 수 없음",
@ -230,17 +252,37 @@
"Blank" : "여백",
"Unable to create new file from template" : "템플릿으로 새 파일을 만들 수 없음",
"Delete permanently" : "영구히 삭제",
"Destination is not a folder" : "대상이 폴더가 아닙니다.",
"This file/folder is already in that directory" : "이 파일/폴더가 이미 그 경로에 있습니다.",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "파일/폴더를 그 안이나 그 안의 폴더로 이동할 수 없습니다.",
"A file or folder with that name already exists in this folder" : "같은 이름을 사용하는 파일 또는 폴더가 이미 이 폴더에 있습니다.",
"The files is locked" : "이 파일은 잠겼습니다.",
"The file does not exist anymore" : "파일이 더이상 존재하지 않습니다.",
"Chose destination" : "대상 선택",
"Copy to {target}" : "{target}에 복사",
"Move to {target}" : "{target}에 이동",
"Cancelled move or copy operation" : "이동 또는 복사 작업을 취소함",
"Open folder {displayName}" : "{displayName} 폴더 열기",
"Open in Files" : "파일에서 열기",
"Open details" : "자세한 정보 열기",
"Create new templates folder" : "새로운 템플릿 폴더 만들기",
"Templates" : "템플릿",
"Unable to initialize the templates directory" : "템플릿 디렉터리를 설정할 수 없음",
"Created new folder \"{name}\"" : "\"{name}\" 폴더를 새로 만듦",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount}개 폴더"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount}개 파일"],
"_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1개 파일과 {folderCount}개 폴더"],
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount}개 파일과 1개 폴더"],
"{fileCount} files and {folderCount} folders" : "{fileCount}개 파일과 {folderCount}개 폴더",
"List of favorites files and folders." : "즐겨찾는 파일과 폴더의 목록",
"No favorites yet" : "즐겨찾는 항목 없음",
"Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다",
"All files" : "모든 파일",
"List of your files and folders." : "내 폴더와 파일의 목록",
"List of recently modified files and folders." : "최근에 수정된 파일과 폴더의 목록",
"No recently modified files" : "최근에 수정된 파일 없음",
"Files and folders you recently modified will show up here." : "최근에 수정한 파일과 폴더가 이곳에 표시됩니다.",
"Toggle %1$s sublist" : "%1$s 서브리스트 켜기/끄기",
"No entries found in this folder" : "이 폴더에 항목 없음",
"Upload too large" : "업로드한 파일이 너무 큼",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
@ -254,7 +296,7 @@
"Set up templates folder" : "템플릿 폴더 설정",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
"Toggle grid view" : "모눈 보기 전환",
"Toggle grid view" : "바둑판식 보기 전환",
"Deleted files" : "삭제된 파일",
"Shares" : "공유",
"Shared with others" : "다른 사람과 공유됨",

@ -101,7 +101,7 @@ OC.L10N.register(
"Your storage is almost full ({usedSpacePercent}%)." : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["odpovedá \"{filter}\"","odpovedá \"{filter}\"","odpovedá \"{filter}\"","odpovedajú \"{filter}\""],
"View in folder" : "Zobraziť v priečinku",
"Direct link was copied (only works for users who have access to this file/folder)" : "Priamy link bol skopirovaný (funguje iba pre používateľov, ktorí majú prístup k danému súboru/adresáru)",
"Direct link was copied (only works for users who have access to this file/folder)" : "Priamy odkaz bol skopirovaný (funguje iba pre používateľov, ktorí majú prístup k danému súboru/adresáru)",
"Path" : "Cesta",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtov","%n bajtov"],
"Favorited" : "Pridané k obľúbeným",
@ -178,7 +178,7 @@ OC.L10N.register(
"Select the row for {displayName}" : "Vybrať riadok pre {displayName}",
"Rename file" : "Premenovať súbor",
"File name" : "Názov súboru",
"Folder name" : "Názov adresára",
"Folder name" : "Názov priečinka",
"This node is unavailable" : "Uzol nie je k dispozícií",
"Download file {name}" : "Stiahnúť súbor {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie je povolený typ súboru",
@ -188,7 +188,7 @@ OC.L10N.register(
"Another entry with the same name already exists" : "Názov už existuje",
"Renamed \"{oldName}\" to \"{newName}\"" : "Premenované z \"{oldName}\" na \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Nebolo možné premenovať \"{oldName}\". Položka už neexistuje.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v adresári \"{dir}\". Vyberte prosím iný názov.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v priečinku \"{dir}\". Vyberte prosím iný názov.",
"Could not rename \"{oldName}\"" : "Nebolo možné premenovať \"{oldName}\"",
"A long time ago" : "Pred dlhším časom",
"Could not copy {file}. {message}" : "Nepodarilo sa skopírovať {file}. {message}",
@ -197,7 +197,7 @@ OC.L10N.register(
"Select all" : "Vybrať všetko",
"Unselect all" : "Zrušiť výber",
"\"{displayName}\" batch action executed successfully" : "Hromadná operácia \"{displayName}\" bola úspešne vykonaná",
"List of files and folders." : "Zoznam súborov a adresárov.",
"List of files and folders." : "Zoznam súborov a priečinkov.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Súbor nenájdený",
"_{count} file_::_{count} files_" : ["{count} súbor","{count} súbory","{count} súborov","{count} súborov"],
@ -218,10 +218,10 @@ OC.L10N.register(
"Ownership transfer request sent" : "Žiadosť o prevod vlastníctva bola odoslaná",
"Cannot transfer ownership of a file or folder you do not own" : "Nie je možné preniesť vlastníctvo súboru alebo priečinka, ktorý nevlastníte",
"Select file or folder to link to" : "Vyberte súbor alebo priečinok na ktorý odkazovať",
"Loading current folder" : "Načítavanie súčasného adresára",
"Loading current folder" : "Načítavanie súčasného priečinka",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte dáta so svojimi zariadeniami!",
"Go to the previous folder" : "Ísť do predchadzajúceho adresára",
"Go to the previous folder" : "Prejsť do predchádzajúceho priečinka",
"Go back" : "Ísť späť",
"Share" : "Zdieľať",
"Shared by link" : "Sprístupnené odkazom",
@ -258,23 +258,23 @@ OC.L10N.register(
"Copy to {target}" : "Kopírovať do {target}",
"Move to {target}" : "Presunúť do {target}",
"Cancelled move or copy operation" : "Zrušená operácia kopírovania alebo presunu",
"Open folder {displayName}" : "Otvoriť adresár {displayName}",
"Open folder {displayName}" : "Otvoriť priečinok {displayName}",
"Open in Files" : "Otvoriť v súboroch",
"Open details" : "Otvoriť detaily",
"Create new templates folder" : "Vytvoriť nový vzorový priečinok",
"Templates" : "Šablóny",
"Unable to initialize the templates directory" : "Nemôžem inicializovať priečinok so šablónami",
"Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
"Created new folder \"{name}\"" : "Vytvorený nový priečinok \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} priečinok","{folderCount} priečinky","{folderCount} priečinkov","{folderCount} priečinkov"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} súbor","{fileCount} súbory","{fileCount} súborov","{fileCount} súborov"],
"List of favorites files and folders." : "Zoznam obľúbených súborov a adresárov.",
"List of favorites files and folders." : "Zoznam obľúbených súborov a priečinkov.",
"No favorites yet" : "Zatiaľ žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
"All files" : "Všetky súbory",
"List of your files and folders." : "Zoznam vašich súborov a adresárov.",
"List of recently modified files and folders." : "Zoznam nedávno upravených súborov a adresárov.",
"List of your files and folders." : "Zoznam vašich súborov a priečinkov.",
"List of recently modified files and folders." : "Zoznam nedávno upravených súborov a priečinkov.",
"No recently modified files" : "Žiadne nedávno upravené súbory",
"Files and folders you recently modified will show up here." : "Súbory a adresáre, ktoré ste nedávno upravili sa zobrazia tu",
"Files and folders you recently modified will show up here." : "Súbory a priečinky, ktoré ste nedávno upravili sa zobrazia tu",
"Toggle %1$s sublist" : "Prepnúť %1$s podzoznam",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Upload too large" : "Nahrávanie je príliš veľké",
@ -305,6 +305,6 @@ OC.L10N.register(
"Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Search for an account" : "Vyhľadať účet",
"Choose" : "Vybrať",
"No files or folders have been deleted yet" : "Žiadne súbory alebo adresáre neboli ešte vymazané"
"No files or folders have been deleted yet" : "Žiadne súbory alebo priečinky neboli ešte vymazané"
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");

@ -99,7 +99,7 @@
"Your storage is almost full ({usedSpacePercent}%)." : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["odpovedá \"{filter}\"","odpovedá \"{filter}\"","odpovedá \"{filter}\"","odpovedajú \"{filter}\""],
"View in folder" : "Zobraziť v priečinku",
"Direct link was copied (only works for users who have access to this file/folder)" : "Priamy link bol skopirovaný (funguje iba pre používateľov, ktorí majú prístup k danému súboru/adresáru)",
"Direct link was copied (only works for users who have access to this file/folder)" : "Priamy odkaz bol skopirovaný (funguje iba pre používateľov, ktorí majú prístup k danému súboru/adresáru)",
"Path" : "Cesta",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtov","%n bajtov"],
"Favorited" : "Pridané k obľúbeným",
@ -176,7 +176,7 @@
"Select the row for {displayName}" : "Vybrať riadok pre {displayName}",
"Rename file" : "Premenovať súbor",
"File name" : "Názov súboru",
"Folder name" : "Názov adresára",
"Folder name" : "Názov priečinka",
"This node is unavailable" : "Uzol nie je k dispozícií",
"Download file {name}" : "Stiahnúť súbor {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie je povolený typ súboru",
@ -186,7 +186,7 @@
"Another entry with the same name already exists" : "Názov už existuje",
"Renamed \"{oldName}\" to \"{newName}\"" : "Premenované z \"{oldName}\" na \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Nebolo možné premenovať \"{oldName}\". Položka už neexistuje.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v adresári \"{dir}\". Vyberte prosím iný názov.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v priečinku \"{dir}\". Vyberte prosím iný názov.",
"Could not rename \"{oldName}\"" : "Nebolo možné premenovať \"{oldName}\"",
"A long time ago" : "Pred dlhším časom",
"Could not copy {file}. {message}" : "Nepodarilo sa skopírovať {file}. {message}",
@ -195,7 +195,7 @@
"Select all" : "Vybrať všetko",
"Unselect all" : "Zrušiť výber",
"\"{displayName}\" batch action executed successfully" : "Hromadná operácia \"{displayName}\" bola úspešne vykonaná",
"List of files and folders." : "Zoznam súborov a adresárov.",
"List of files and folders." : "Zoznam súborov a priečinkov.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Súbor nenájdený",
"_{count} file_::_{count} files_" : ["{count} súbor","{count} súbory","{count} súborov","{count} súborov"],
@ -216,10 +216,10 @@
"Ownership transfer request sent" : "Žiadosť o prevod vlastníctva bola odoslaná",
"Cannot transfer ownership of a file or folder you do not own" : "Nie je možné preniesť vlastníctvo súboru alebo priečinka, ktorý nevlastníte",
"Select file or folder to link to" : "Vyberte súbor alebo priečinok na ktorý odkazovať",
"Loading current folder" : "Načítavanie súčasného adresára",
"Loading current folder" : "Načítavanie súčasného priečinka",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte dáta so svojimi zariadeniami!",
"Go to the previous folder" : "Ísť do predchadzajúceho adresára",
"Go to the previous folder" : "Prejsť do predchádzajúceho priečinka",
"Go back" : "Ísť späť",
"Share" : "Zdieľať",
"Shared by link" : "Sprístupnené odkazom",
@ -256,23 +256,23 @@
"Copy to {target}" : "Kopírovať do {target}",
"Move to {target}" : "Presunúť do {target}",
"Cancelled move or copy operation" : "Zrušená operácia kopírovania alebo presunu",
"Open folder {displayName}" : "Otvoriť adresár {displayName}",
"Open folder {displayName}" : "Otvoriť priečinok {displayName}",
"Open in Files" : "Otvoriť v súboroch",
"Open details" : "Otvoriť detaily",
"Create new templates folder" : "Vytvoriť nový vzorový priečinok",
"Templates" : "Šablóny",
"Unable to initialize the templates directory" : "Nemôžem inicializovať priečinok so šablónami",
"Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
"Created new folder \"{name}\"" : "Vytvorený nový priečinok \"{name}\"",
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} priečinok","{folderCount} priečinky","{folderCount} priečinkov","{folderCount} priečinkov"],
"_{fileCount} file_::_{fileCount} files_" : ["{fileCount} súbor","{fileCount} súbory","{fileCount} súborov","{fileCount} súborov"],
"List of favorites files and folders." : "Zoznam obľúbených súborov a adresárov.",
"List of favorites files and folders." : "Zoznam obľúbených súborov a priečinkov.",
"No favorites yet" : "Zatiaľ žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
"All files" : "Všetky súbory",
"List of your files and folders." : "Zoznam vašich súborov a adresárov.",
"List of recently modified files and folders." : "Zoznam nedávno upravených súborov a adresárov.",
"List of your files and folders." : "Zoznam vašich súborov a priečinkov.",
"List of recently modified files and folders." : "Zoznam nedávno upravených súborov a priečinkov.",
"No recently modified files" : "Žiadne nedávno upravené súbory",
"Files and folders you recently modified will show up here." : "Súbory a adresáre, ktoré ste nedávno upravili sa zobrazia tu",
"Files and folders you recently modified will show up here." : "Súbory a priečinky, ktoré ste nedávno upravili sa zobrazia tu",
"Toggle %1$s sublist" : "Prepnúť %1$s podzoznam",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Upload too large" : "Nahrávanie je príliš veľké",
@ -303,6 +303,6 @@
"Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Search for an account" : "Vyhľadať účet",
"Choose" : "Vybrať",
"No files or folders have been deleted yet" : "Žiadne súbory alebo adresáre neboli ešte vymazané"
"No files or folders have been deleted yet" : "Žiadne súbory alebo priečinky neboli ešte vymazané"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
}

@ -224,7 +224,7 @@ OC.L10N.register(
"Loading current folder" : "Geçerli klasör yükleniyor",
"No files in here" : "Burada herhangi bir dosya yok",
"Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!",
"Go to the previous folder" : "Önceki klasör git",
"Go to the previous folder" : "Önceki klasöre git",
"Go back" : "Geri dön",
"Share" : "Paylaş",
"Shared by link" : "Bağlantı ile paylaşılmış",

@ -222,7 +222,7 @@
"Loading current folder" : "Geçerli klasör yükleniyor",
"No files in here" : "Burada herhangi bir dosya yok",
"Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!",
"Go to the previous folder" : "Önceki klasör git",
"Go to the previous folder" : "Önceki klasöre git",
"Go back" : "Geri dön",
"Share" : "Paylaş",
"Shared by link" : "Bağlantı ile paylaşılmış",

@ -1,6 +1,7 @@
OC.L10N.register(
"files_external",
{
"Type to select user or group." : "Indtast for at vælge bruger eller gruppe.",
"(Group)" : "(Gruppe)",
"Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD encoding (langsom)",
"Enable encryption" : "Slå kryptering til",
@ -68,6 +69,7 @@ OC.L10N.register(
"Hostname" : "Værtsnavn",
"Port" : "Port",
"Region" : "Region",
"Storage Class" : "Lagringsklassificering",
"Enable SSL" : "Aktivér SSL",
"Enable Path Style" : "Aktivér stil for sti",
"Legacy (v2) authentication" : "Ældre (v2) godkendelse",
@ -87,6 +89,8 @@ OC.L10N.register(
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Del",
"Show hidden files" : "Vis skjulte filer",
"Case sensitive file system" : "Fil system med forskel på store og små bogstaver",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Deaktivering vil tillade at bruge et fil system, der ikke skelner mellem store og små bogstaver, men kan give en reduktion i systemets ydeevne.",
"Verify ACL access when listing files" : "Bekræft ACL-adgang, når du viser filer",
"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" : "Tjek ACL'erne for hver fil eller mappe i en mappe for at bortfiltrere elementer, hvor brugeren ikke har læsetilladelser, kommer med en præstationsstraf",
"Timeout" : "Timeout",
@ -99,16 +103,28 @@ OC.L10N.register(
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
"\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "\"%1$s\" er ikke installeret. Tilslutning af %2$s er ikke muligt. Bed din systemadministrator om at installere det.",
"External storage" : "Eksternt lager",
"External storage support" : "Ekstern lager support",
"External storage support" : "Eksternt lager undersøttelse",
"Adds basic external storage support" : "Tilføjer grundlæggende ekstern lagerunderstøttelse",
"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." : "Denne applikation gør det muligt for administratorer at konfigurere forbindelser til eksterne lagerudbydere, såsom FTP-servere, S3- eller SWIFT-objektlagre, andre Nextcloud-servere, WebDAV-servere og mere. Administratorer kan vælge, hvilke lagertyper der skal aktiveres og kan montere disse lagerplaceringer for en bruger, en gruppe eller hele systemet. Brugere vil se en ny mappe vises i deres rod-Nextcloud-mappe, som de kan få adgang til og bruge som enhver anden Nextcloud-mappe. Ekstern lagring giver også brugere mulighed for at dele filer gemt på disse eksterne steder. I disse tilfælde bruges legitimationsoplysningerne for ejeren af filen, når modtageren anmoder om filen fra eksternt lager, hvorved det sikres, at modtageren kan få adgang til den delte fil.\n\nEksternt lager kan konfigureres ved hjælp af GUI eller på kommandolinjen. Denne anden mulighed giver den avancerede bruger mere fleksibilitet til at konfigurere bulk eksterne lagerbeslag og indstille monteringsprioriteter. Flere oplysninger er tilgængelige i dokumentationen til eksternt lager GUI og dokumentationen til ekstern lagerkonfigurationsfil.",
"Enter missing credentials" : "Indtast manglende oplysninger",
"Unable to update this external storage config. {statusMessage}" : "Er ikke i stand til at opdaterer konfigurationen af dette eksterne lager. {statusMessage}",
"New configuration successfully saved" : "Den nye konfiguration er gemt",
"There was an error with this external storage." : "Der er en fejl med dette eksterne lager.",
"We were unable to check the external storage {basename}" : "Det var ikke muligt at kontrollerer det eksterne lager {basename}",
"Examine this faulty external storage configuration" : "Gennemgå fejl konfiguration af eksternt lager ",
"Open in files" : "Åben i Filer",
"There was an error with this external storage. Do you want to review this mount point config in the settings page?" : "Der er en fejl med dette eksterne lager. Ønsker du at gennemgå konfigurationen?",
"External mount error" : "Ekstern mount fejl",
"List of external storage." : "Liste med eksterne lagre.",
"There is no external storage configured. You can configure them in your Personal settings." : "Intet eksternt lager er konfigureret, du kan konfigurerer et via dine personlige indstillinger.",
"There is no external storage configured and you don't have the permission to configure them." : "Intet eksternt lager er konfigureret, og du har ikke tilladelse til at konfigurerer et.",
"No external storage" : "Intet eksternt lager",
"Storage type" : "Lagertype",
"Unknown" : "Ukendt",
"Scope" : "Anvendelsesområde",
"Personal" : "Personligt",
"System" : "System",
"No external storage configured or you don't have the permission to configure them" : "Der er ikke konfigureret eksternt lager, eller du har ikke tilladelse til at konfigurere dem",
"No external storage configured or you don't have the permission to configure them" : "Intet eksternt lager er konfigureret eller du har ikke tilladelse til at konfigurerer et.",
"Open documentation" : "Åbn dokumentation",
"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." : "Ekstern lagring giver dig mulighed for at montere eksterne lagringstjenester og -enheder som sekundære Nextcloud-lagringsenheder. Du kan også tillade brugere at montere deres egne eksterne lagertjenester.",
"Folder name" : "Mappenavn",
@ -117,6 +133,7 @@ OC.L10N.register(
"Available for" : "Tilgængelig for",
"Click to recheck the configuration" : "Klik for at kontrollere konfigurationen igen",
"Add storage" : "Tilføj lager",
"All users" : "Alle brugere",
"Advanced settings" : "Avancerede indstillinger",
"Allow users to mount external storage" : "Tillad brugere at montere eksternt lager",
"Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Globale legitimationsoplysninger kan bruges til at godkende med flere eksterne lager, der har de samme legitimationsoplysninger.",

@ -1,4 +1,5 @@
{ "translations": {
"Type to select user or group." : "Indtast for at vælge bruger eller gruppe.",
"(Group)" : "(Gruppe)",
"Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD encoding (langsom)",
"Enable encryption" : "Slå kryptering til",
@ -66,6 +67,7 @@
"Hostname" : "Værtsnavn",
"Port" : "Port",
"Region" : "Region",
"Storage Class" : "Lagringsklassificering",
"Enable SSL" : "Aktivér SSL",
"Enable Path Style" : "Aktivér stil for sti",
"Legacy (v2) authentication" : "Ældre (v2) godkendelse",
@ -85,6 +87,8 @@
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Del",
"Show hidden files" : "Vis skjulte filer",
"Case sensitive file system" : "Fil system med forskel på store og små bogstaver",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Deaktivering vil tillade at bruge et fil system, der ikke skelner mellem store og små bogstaver, men kan give en reduktion i systemets ydeevne.",
"Verify ACL access when listing files" : "Bekræft ACL-adgang, når du viser filer",
"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" : "Tjek ACL'erne for hver fil eller mappe i en mappe for at bortfiltrere elementer, hvor brugeren ikke har læsetilladelser, kommer med en præstationsstraf",
"Timeout" : "Timeout",
@ -97,16 +101,28 @@
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
"\"%1$s\" is not installed. Mounting of %2$s is not possible. Please ask your system administrator to install it." : "\"%1$s\" er ikke installeret. Tilslutning af %2$s er ikke muligt. Bed din systemadministrator om at installere det.",
"External storage" : "Eksternt lager",
"External storage support" : "Ekstern lager support",
"External storage support" : "Eksternt lager undersøttelse",
"Adds basic external storage support" : "Tilføjer grundlæggende ekstern lagerunderstøttelse",
"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." : "Denne applikation gør det muligt for administratorer at konfigurere forbindelser til eksterne lagerudbydere, såsom FTP-servere, S3- eller SWIFT-objektlagre, andre Nextcloud-servere, WebDAV-servere og mere. Administratorer kan vælge, hvilke lagertyper der skal aktiveres og kan montere disse lagerplaceringer for en bruger, en gruppe eller hele systemet. Brugere vil se en ny mappe vises i deres rod-Nextcloud-mappe, som de kan få adgang til og bruge som enhver anden Nextcloud-mappe. Ekstern lagring giver også brugere mulighed for at dele filer gemt på disse eksterne steder. I disse tilfælde bruges legitimationsoplysningerne for ejeren af filen, når modtageren anmoder om filen fra eksternt lager, hvorved det sikres, at modtageren kan få adgang til den delte fil.\n\nEksternt lager kan konfigureres ved hjælp af GUI eller på kommandolinjen. Denne anden mulighed giver den avancerede bruger mere fleksibilitet til at konfigurere bulk eksterne lagerbeslag og indstille monteringsprioriteter. Flere oplysninger er tilgængelige i dokumentationen til eksternt lager GUI og dokumentationen til ekstern lagerkonfigurationsfil.",
"Enter missing credentials" : "Indtast manglende oplysninger",
"Unable to update this external storage config. {statusMessage}" : "Er ikke i stand til at opdaterer konfigurationen af dette eksterne lager. {statusMessage}",
"New configuration successfully saved" : "Den nye konfiguration er gemt",
"There was an error with this external storage." : "Der er en fejl med dette eksterne lager.",
"We were unable to check the external storage {basename}" : "Det var ikke muligt at kontrollerer det eksterne lager {basename}",
"Examine this faulty external storage configuration" : "Gennemgå fejl konfiguration af eksternt lager ",
"Open in files" : "Åben i Filer",
"There was an error with this external storage. Do you want to review this mount point config in the settings page?" : "Der er en fejl med dette eksterne lager. Ønsker du at gennemgå konfigurationen?",
"External mount error" : "Ekstern mount fejl",
"List of external storage." : "Liste med eksterne lagre.",
"There is no external storage configured. You can configure them in your Personal settings." : "Intet eksternt lager er konfigureret, du kan konfigurerer et via dine personlige indstillinger.",
"There is no external storage configured and you don't have the permission to configure them." : "Intet eksternt lager er konfigureret, og du har ikke tilladelse til at konfigurerer et.",
"No external storage" : "Intet eksternt lager",
"Storage type" : "Lagertype",
"Unknown" : "Ukendt",
"Scope" : "Anvendelsesområde",
"Personal" : "Personligt",
"System" : "System",
"No external storage configured or you don't have the permission to configure them" : "Der er ikke konfigureret eksternt lager, eller du har ikke tilladelse til at konfigurere dem",
"No external storage configured or you don't have the permission to configure them" : "Intet eksternt lager er konfigureret eller du har ikke tilladelse til at konfigurerer et.",
"Open documentation" : "Åbn dokumentation",
"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." : "Ekstern lagring giver dig mulighed for at montere eksterne lagringstjenester og -enheder som sekundære Nextcloud-lagringsenheder. Du kan også tillade brugere at montere deres egne eksterne lagertjenester.",
"Folder name" : "Mappenavn",
@ -115,6 +131,7 @@
"Available for" : "Tilgængelig for",
"Click to recheck the configuration" : "Klik for at kontrollere konfigurationen igen",
"Add storage" : "Tilføj lager",
"All users" : "Alle brugere",
"Advanced settings" : "Avancerede indstillinger",
"Allow users to mount external storage" : "Tillad brugere at montere eksternt lager",
"Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Globale legitimationsoplysninger kan bruges til at godkende med flere eksterne lager, der har de samme legitimationsoplysninger.",

@ -89,6 +89,8 @@ OC.L10N.register(
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Partage",
"Show hidden files" : "Afficher les fichiers masqués",
"Case sensitive file system" : "Système de fichiers sensible à la casse",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Le désactiver va permettre d'utiliser un système de fichiers insensible à la casse mais cela a un impact sur les performances.",
"Verify ACL access when listing files" : "Vérifier l'accès à l'ACL lors de l'affichage de la liste des fichiers",
"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" : "Contrôler les ACL de chaque fichier ou dossier à l'intérieur d'un répertoire afin de filtrer les éléments pour lesquels l'utilisateur n'a pas d'accès en lecture, ceci engendre une dégradation des performances",
"Timeout" : "Délai d'attente",

@ -87,6 +87,8 @@
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Partage",
"Show hidden files" : "Afficher les fichiers masqués",
"Case sensitive file system" : "Système de fichiers sensible à la casse",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Le désactiver va permettre d'utiliser un système de fichiers insensible à la casse mais cela a un impact sur les performances.",
"Verify ACL access when listing files" : "Vérifier l'accès à l'ACL lors de l'affichage de la liste des fichiers",
"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" : "Contrôler les ACL de chaque fichier ou dossier à l'intérieur d'un répertoire afin de filtrer les éléments pour lesquels l'utilisateur n'a pas d'accès en lecture, ceci engendre une dégradation des performances",
"Timeout" : "Délai d'attente",

@ -89,6 +89,8 @@ OC.L10N.register(
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Compartir",
"Show hidden files" : "Amosar os ficheiros agochados",
"Case sensitive file system" : "Sistema de ficheiros que distingue entre maiúsculas e minúsculas",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "A súa desactivación permitirá usar un sistema de ficheiros que non distinga entre maiúsculas e minúsculas, mais afectará ao rendemento",
"Verify ACL access when listing files" : "Verificar a lista de control de acceso (ACL) ao listar ficheiros",
"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" : "Comprobar as listas de control de acceso (ACL) de cada ficheiro ou cartafol dentro dun directorio para filtrar os elementos onde o usuario non ten permisos de lectura, ten unha penalización de rendemento.",
"Timeout" : "Límite de tempo",

@ -87,6 +87,8 @@
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Compartir",
"Show hidden files" : "Amosar os ficheiros agochados",
"Case sensitive file system" : "Sistema de ficheiros que distingue entre maiúsculas e minúsculas",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "A súa desactivación permitirá usar un sistema de ficheiros que non distinga entre maiúsculas e minúsculas, mais afectará ao rendemento",
"Verify ACL access when listing files" : "Verificar a lista de control de acceso (ACL) ao listar ficheiros",
"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" : "Comprobar as listas de control de acceso (ACL) de cada ficheiro ou cartafol dentro dun directorio para filtrar os elementos onde o usuario non ten permisos de lectura, ten unha penalización de rendemento.",
"Timeout" : "Límite de tempo",

@ -89,6 +89,8 @@ OC.L10N.register(
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Дели",
"Show hidden files" : "Прикажи скривене фајлове",
"Case sensitive file system" : "Фајл систем који разликује величину слова",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Ако се искључи, омогућиће се употреба фајл система који не прави разлику у величини слова, али ће се умањити перформансе",
"Verify ACL access when listing files" : "Провери ACL (листу контроле приступа) приликом излиставања фајлова",
"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" : "Провери ACL (листу контроле приступа) сваког фајла или фасцикле унутар директоријума да исфилтрираш ставке где корисник нема право читања, али уз удар на перформансе",
"Timeout" : "Истек времена",

@ -87,6 +87,8 @@
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Дели",
"Show hidden files" : "Прикажи скривене фајлове",
"Case sensitive file system" : "Фајл систем који разликује величину слова",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Ако се искључи, омогућиће се употреба фајл система који не прави разлику у величини слова, али ће се умањити перформансе",
"Verify ACL access when listing files" : "Провери ACL (листу контроле приступа) приликом излиставања фајлова",
"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" : "Провери ACL (листу контроле приступа) сваког фајла или фасцикле унутар директоријума да исфилтрираш ставке где корисник нема право читања, али уз удар на перформансе",
"Timeout" : "Истек времена",

@ -89,6 +89,8 @@ OC.L10N.register(
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Paylaş",
"Show hidden files" : "Gizli dosyaları görüntüle",
"Case sensitive file system" : "Büyük/küçük harfe duyarlı dosya sistemi",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Bu seçeneği kapatmak, büyük/küçük harfe duyarlı olmayan bir dosya sisteminin kullanılmasını sağlar, ancak başarım kaybına yol açar",
"Verify ACL access when listing files" : "Dosyalar listelenirken EDL denetlensin",
"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" : "Tüm dosya ve klasörler için Erişim Denetimi Listesine bakılarak kullanıcının okuma yetkisi olmayan ögeler görüntülenmez. Bu özelliğin kullanılması başarımı düşürür",
"Timeout" : "Zaman aşımı",

@ -87,6 +87,8 @@
"SMB/CIFS" : "SMB/CIFS",
"Share" : "Paylaş",
"Show hidden files" : "Gizli dosyaları görüntüle",
"Case sensitive file system" : "Büyük/küçük harfe duyarlı dosya sistemi",
"Disabling it will allow to use a case insentive file system, but comes with a performance penalty" : "Bu seçeneği kapatmak, büyük/küçük harfe duyarlı olmayan bir dosya sisteminin kullanılmasını sağlar, ancak başarım kaybına yol açar",
"Verify ACL access when listing files" : "Dosyalar listelenirken EDL denetlensin",
"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" : "Tüm dosya ve klasörler için Erişim Denetimi Listesine bakılarak kullanıcının okuma yetkisi olmayan ögeler görüntülenmez. Bu özelliğin kullanılması başarımı düşürür",
"Timeout" : "Zaman aşımı",

@ -200,6 +200,7 @@ OC.L10N.register(
"Expires {relativetime}" : "Λήγει {relativetime}",
"this share just expired." : "το κοινόχρηστο μόλις έληξε.",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"Open in Files" : "Άνοιγμα στα Αρχεία",
"Shared" : "Κοινόχρηστα",
"Link to a file" : "Σύνδεσμος σε αρχείο",
"Error creating the share: {errorMessage}" : "Σφάλμα κατά τη δημιουργία της κοινής χρήσης: {errorMessage}",

@ -198,6 +198,7 @@
"Expires {relativetime}" : "Λήγει {relativetime}",
"this share just expired." : "το κοινόχρηστο μόλις έληξε.",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"Open in Files" : "Άνοιγμα στα Αρχεία",
"Shared" : "Κοινόχρηστα",
"Link to a file" : "Σύνδεσμος σε αρχείο",
"Error creating the share: {errorMessage}" : "Σφάλμα κατά τη δημιουργία της κοινής χρήσης: {errorMessage}",

@ -126,7 +126,7 @@ OC.L10N.register(
"Unknown error" : "Erreur inconnue",
"Allow editing" : "Autoriser la modification",
"Read only" : "Lecture seule",
"Allow upload and editing" : "Autoriser lajout et la modification",
"Allow upload and editing" : "Autoriser le téléversement et la modification",
"File drop (upload only)" : "Dépôt de fichier (envoi uniquement)",
"Custom permissions" : "Personnaliser les permissions",
"Read" : "Lecture",

@ -124,7 +124,7 @@
"Unknown error" : "Erreur inconnue",
"Allow editing" : "Autoriser la modification",
"Read only" : "Lecture seule",
"Allow upload and editing" : "Autoriser lajout et la modification",
"Allow upload and editing" : "Autoriser le téléversement et la modification",
"File drop (upload only)" : "Dépôt de fichier (envoi uniquement)",
"Custom permissions" : "Personnaliser les permissions",
"Read" : "Lecture",

@ -11,7 +11,7 @@ OC.L10N.register(
"You can upload into this folder" : "이 폴더에 업로드할 수 있습니다",
"Terms of service" : "이용 약관",
"Show list view" : "목록 보기",
"Show grid view" : "그리드 보기",
"Show grid view" : "바둑판식 보기",
"No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음",
"Invalid server URL" : "잘못된 서버 URL",
"Failed to add the public link to your Nextcloud" : "Nextcloud에 공개 링크를 추가할 수 없음",
@ -148,7 +148,7 @@ OC.L10N.register(
"Internal link" : "내부 링크",
"Cannot copy, please copy the link manually" : "복사할 수 없습니다, 링크를 수동으로 복사하세요.",
"Copy internal link to clipboard" : "내부 링크를 클립보드에 복사",
"Only works for users with access to this folder" : "이 폴더에 액세스하는 사용자에게만 해당됩니다.",
"Only works for users with access to this folder" : "이 폴더의 접근 권한이 있는 사용자만 사용 가능",
"Only works for users with access to this file" : "이 파일에 접근할 수 있는 사용자에게만 작동",
"Link copied" : "링크 복사됨",
"Please enter the following required information before creating the share" : "공유를 하기 전에 다음 필수 정보를 입력하세요.",

@ -9,7 +9,7 @@
"You can upload into this folder" : "이 폴더에 업로드할 수 있습니다",
"Terms of service" : "이용 약관",
"Show list view" : "목록 보기",
"Show grid view" : "그리드 보기",
"Show grid view" : "바둑판식 보기",
"No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음",
"Invalid server URL" : "잘못된 서버 URL",
"Failed to add the public link to your Nextcloud" : "Nextcloud에 공개 링크를 추가할 수 없음",
@ -146,7 +146,7 @@
"Internal link" : "내부 링크",
"Cannot copy, please copy the link manually" : "복사할 수 없습니다, 링크를 수동으로 복사하세요.",
"Copy internal link to clipboard" : "내부 링크를 클립보드에 복사",
"Only works for users with access to this folder" : "이 폴더에 액세스하는 사용자에게만 해당됩니다.",
"Only works for users with access to this folder" : "이 폴더의 접근 권한이 있는 사용자만 사용 가능",
"Only works for users with access to this file" : "이 파일에 접근할 수 있는 사용자에게만 작동",
"Link copied" : "링크 복사됨",
"Please enter the following required information before creating the share" : "공유를 하기 전에 다음 필수 정보를 입력하세요.",

@ -208,7 +208,7 @@ OC.L10N.register(
"Update" : "Aktualizovať",
"Share" : "Sprístupniť",
"Delete share" : "Odstrániť zdieľanie",
"Share with " : "Zdieľať s",
"Share with " : "Zdieľať s ",
"Save share" : "Uložiť zdieľanie",
"Others with access" : "Ďalší, ktorí majú prístup",
"No other users with access found" : "Neboli nájdení ďalší používatelia s prístupom",

@ -206,7 +206,7 @@
"Update" : "Aktualizovať",
"Share" : "Sprístupniť",
"Delete share" : "Odstrániť zdieľanie",
"Share with " : "Zdieľať s",
"Share with " : "Zdieľať s ",
"Save share" : "Uložiť zdieľanie",
"Others with access" : "Ďalší, ktorí majú prístup",
"No other users with access found" : "Neboli nájdení ďalší používatelia s prístupom",

@ -7,7 +7,9 @@ OC.L10N.register(
"This application enables users to restore files that were deleted from the system." : "Denne app giver brugere mulighed for at gendanne filer som var slettet fra systemet.",
"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." : "Denne applikation giver brugerne mulighed for at gendanne filer, der blev slettet fra systemet. Det viser en liste over slettede filer i webgrænsefladen og har muligheder for at gendanne de slettede filer tilbage til brugerens filmapper eller fjerne dem permanent fra systemet. Gendannelse af en fil gendanner også relaterede filversioner, hvis versionsprogrammet er aktiveret. Når en fil slettes fra en deling, kan den gendannes på samme måde, selvom den ikke længere deles. Som standard forbliver disse filer i papirkurven i 30 dage. \nFor at forhindre en bruger i at løbe tør for diskplads, bruger appen Slettede filer ikke mere end 50% af den aktuelt tilgængelige gratis kvote for slettede filer. Hvis de slettede filer overskrider denne grænse, sletter appen de ældste filer, indtil den kommer under denne grænse. Flere oplysninger findes i dokumentationen til slettede filer.",
"Restore" : "Gendan",
"List of files that have been deleted." : "Liste med filer der er blevet slettet.",
"No deleted files" : "Ingen slettede filer",
"Files and folders you have deleted will show up here" : "Filer og mapper du har slettet, vil blive listet her",
"Deleted" : "Slettet",
"You will be able to recover deleted files from here" : "Du vil kunne gendanne slettede filer herfra",
"No entries found in this folder" : "Der blev ikke fundet poster i denne mappe",

@ -5,7 +5,9 @@
"This application enables users to restore files that were deleted from the system." : "Denne app giver brugere mulighed for at gendanne filer som var slettet fra systemet.",
"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." : "Denne applikation giver brugerne mulighed for at gendanne filer, der blev slettet fra systemet. Det viser en liste over slettede filer i webgrænsefladen og har muligheder for at gendanne de slettede filer tilbage til brugerens filmapper eller fjerne dem permanent fra systemet. Gendannelse af en fil gendanner også relaterede filversioner, hvis versionsprogrammet er aktiveret. Når en fil slettes fra en deling, kan den gendannes på samme måde, selvom den ikke længere deles. Som standard forbliver disse filer i papirkurven i 30 dage. \nFor at forhindre en bruger i at løbe tør for diskplads, bruger appen Slettede filer ikke mere end 50% af den aktuelt tilgængelige gratis kvote for slettede filer. Hvis de slettede filer overskrider denne grænse, sletter appen de ældste filer, indtil den kommer under denne grænse. Flere oplysninger findes i dokumentationen til slettede filer.",
"Restore" : "Gendan",
"List of files that have been deleted." : "Liste med filer der er blevet slettet.",
"No deleted files" : "Ingen slettede filer",
"Files and folders you have deleted will show up here" : "Filer og mapper du har slettet, vil blive listet her",
"Deleted" : "Slettet",
"You will be able to recover deleted files from here" : "Du vil kunne gendanne slettede filer herfra",
"No entries found in this folder" : "Der blev ikke fundet poster i denne mappe",

@ -592,14 +592,17 @@ class Storage {
throw new DoesNotExistException('Could not find relative path of (' . $info->getPath() . ')');
}
$node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
try {
$node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
$versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
$versionEntities[$info->getId()] = $versionEntity;
if ($versionEntity->getLabel() !== '') {
return false;
}
} catch (NotFoundException $e) {
// Original node not found, delete the version
return true;
} catch (DoesNotExistException $ex) {
// Version on FS can have no equivalent in the DB if they were created before the version naming feature.
// So we ignore DoesNotExistException.

@ -11,7 +11,8 @@ OC.L10N.register(
"Name" : "Nombre",
"Redirection URI" : "URI de redirección",
"Client Identifier" : "Identificador de cliente",
"Secret key" : "Clave secreta",
"Secret key" : "Llave secreta",
"Delete client" : "Eliminar cliente",
"Add client" : "Añadir cliente",
"Add" : "Añadir",
"Show client secret" : "Mostrar secreto del cliente",

@ -9,7 +9,8 @@
"Name" : "Nombre",
"Redirection URI" : "URI de redirección",
"Client Identifier" : "Identificador de cliente",
"Secret key" : "Clave secreta",
"Secret key" : "Llave secreta",
"Delete client" : "Eliminar cliente",
"Add client" : "Añadir cliente",
"Add" : "Añadir",
"Show client secret" : "Mostrar secreto del cliente",

@ -309,6 +309,7 @@ OC.L10N.register(
"Email" : "Email",
"Quota" : "Σύνολο Χώρου",
"Language" : "Γλώσσα",
"Total rows summary" : "Συνολική σύνοψη γραμμών",
"Avatar" : "Εικόνα προφίλ",
"Group admin for" : "Ομαδα διαχειριστή για",
"User backend" : "Σύστημα υποστήριξης χρήστη",

@ -307,6 +307,7 @@
"Email" : "Email",
"Quota" : "Σύνολο Χώρου",
"Language" : "Γλώσσα",
"Total rows summary" : "Συνολική σύνοψη γραμμών",
"Avatar" : "Εικόνα προφίλ",
"Group admin for" : "Ομαδα διαχειριστή για",
"User backend" : "Σύστημα υποστήριξης χρήστη",

@ -380,6 +380,7 @@ OC.L10N.register(
"Show storage path" : "Zobraziť popis umiestnenia úložiska",
"Show last login" : "Zobraziť posledné prihlásenie",
"Send email" : "Odoslať email",
"Send welcome email to new users" : "Odoslať uvítací e-mail novým používateľo",
"Defaults" : "Predvolené hodnoty",
"Default quota" : "Predvolená kvóta",
"Select default quota" : "Vybrať predvolenú kvótu",
@ -469,12 +470,12 @@ OC.L10N.register(
"You need to enable the File sharing App." : "Musíte povoliť Aplikáciu pre zdieľanie súborov.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ako administrátor môžete nastaviť správanie sprístupňovania. Pre viac informácií pozrite dokumentáciu.",
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
"Set default expiration date for shares" : "Nastaviť predvolený dátum expirácie pre zdieľania",
"Set default expiration date for shares" : "Nastaviť predvolený dátum expirácie pre sprístupnenia",
"Expire after" : "Platnosť do",
"day(s)" : "deň (dni)",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Set default expiration date for shares to other servers" : "Nastaviť predvolený dátum vypršania platnosti zdieľaní na iné servery",
"Allow users to share via link and emails" : "Povoliť používateľom zdieľanie obsahu pomocou odkazov",
"Set default expiration date for shares to other servers" : "Nastaviť predvolený dátum vypršania platnosti sprístupnení pre iné servery",
"Allow users to share via link and emails" : "Povoliť používateľom sprístupňovanie obsahu pomocou odkazov",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
"Always ask for a password" : "Vždy vyžadovať heslo",
"Enforce password protection" : "Vynútiť ochranu heslom",

@ -378,6 +378,7 @@
"Show storage path" : "Zobraziť popis umiestnenia úložiska",
"Show last login" : "Zobraziť posledné prihlásenie",
"Send email" : "Odoslať email",
"Send welcome email to new users" : "Odoslať uvítací e-mail novým používateľo",
"Defaults" : "Predvolené hodnoty",
"Default quota" : "Predvolená kvóta",
"Select default quota" : "Vybrať predvolenú kvótu",
@ -467,12 +468,12 @@
"You need to enable the File sharing App." : "Musíte povoliť Aplikáciu pre zdieľanie súborov.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ako administrátor môžete nastaviť správanie sprístupňovania. Pre viac informácií pozrite dokumentáciu.",
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
"Set default expiration date for shares" : "Nastaviť predvolený dátum expirácie pre zdieľania",
"Set default expiration date for shares" : "Nastaviť predvolený dátum expirácie pre sprístupnenia",
"Expire after" : "Platnosť do",
"day(s)" : "deň (dni)",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Set default expiration date for shares to other servers" : "Nastaviť predvolený dátum vypršania platnosti zdieľaní na iné servery",
"Allow users to share via link and emails" : "Povoliť používateľom zdieľanie obsahu pomocou odkazov",
"Set default expiration date for shares to other servers" : "Nastaviť predvolený dátum vypršania platnosti sprístupnení pre iné servery",
"Allow users to share via link and emails" : "Povoliť používateľom sprístupňovanie obsahu pomocou odkazov",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
"Always ask for a password" : "Vždy vyžadovať heslo",
"Enforce password protection" : "Vynútiť ochranu heslom",

@ -57,7 +57,7 @@ OC.L10N.register(
"Failed to delete tag" : "Nepodarilo sa vymazať štítok",
"This file has the tag {tag}" : "Tento súbor má štítok {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento súbor má štítky {firstTags} a {lastTag}",
"List of tags and their associated files and folders." : "Zoznam štítkov a ich priradené súbory a adresáre",
"List of tags and their associated files and folders." : "Zoznam štítkov a ich priradené súbory a priečinky.",
"No tags found" : "Štítky sa nenašli",
"Tags you have created will show up here." : "Štítky, ktoré ste vytvorili sa zobrazia tu.",
"Failed to load last used tags" : "Nepodarilo sa načítať posledné použité štítky",

@ -55,7 +55,7 @@
"Failed to delete tag" : "Nepodarilo sa vymazať štítok",
"This file has the tag {tag}" : "Tento súbor má štítok {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento súbor má štítky {firstTags} a {lastTag}",
"List of tags and their associated files and folders." : "Zoznam štítkov a ich priradené súbory a adresáre",
"List of tags and their associated files and folders." : "Zoznam štítkov a ich priradené súbory a priečinky.",
"No tags found" : "Štítky sa nenašli",
"Tags you have created will show up here." : "Štítky, ktoré ste vytvorili sa zobrazia tu.",
"Failed to load last used tags" : "Nepodarilo sa načítať posledné použité štítky",

@ -79,6 +79,7 @@ OC.L10N.register(
"Disable all keyboard shortcuts" : "Искључи све пречице на тастатури",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзални приступ нам је веома важан. Пратимо веб стандарде и проверавамо да све буде употребљиво и без миша а и са помоћним софтвером попут читача екрана. Циљ нам је да будемо усклађени са документом {guidelines}Смернице приступачности веб садржаја{linkend} 2.1 на АА нивоу а са темом високог контраста и на ААА нивоу.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "У случају да наиђете на било какве проблеме, не оклевајте да их пријавите на {issuetracker}наш пратилац проблема{linkend}. А ако желите да се умешате, слободно се прикључите {designteam}нашем дизајн тиму{linkend}!",
"Current selected app: {app}, position {position} of {total}" : "Тренутно изабрана апликација: {app}, позиција {position} од {total}",
"Move up" : "Помери нагоре",
"Move down" : "Помери надоле",
"Custom background" : "Прилагођена позадина",

@ -77,6 +77,7 @@
"Disable all keyboard shortcuts" : "Искључи све пречице на тастатури",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзални приступ нам је веома важан. Пратимо веб стандарде и проверавамо да све буде употребљиво и без миша а и са помоћним софтвером попут читача екрана. Циљ нам је да будемо усклађени са документом {guidelines}Смернице приступачности веб садржаја{linkend} 2.1 на АА нивоу а са темом високог контраста и на ААА нивоу.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "У случају да наиђете на било какве проблеме, не оклевајте да их пријавите на {issuetracker}наш пратилац проблема{linkend}. А ако желите да се умешате, слободно се прикључите {designteam}нашем дизајн тиму{linkend}!",
"Current selected app: {app}, position {position} of {total}" : "Тренутно изабрана апликација: {app}, позиција {position} од {total}",
"Move up" : "Помери нагоре",
"Move down" : "Помери надоле",
"Custom background" : "Прилагођена позадина",

@ -79,6 +79,7 @@ OC.L10N.register(
"Disable all keyboard shortcuts" : "Tüm klavye kısayolları devre dışı bırakılsın",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Uygulamalarımızı herkesin kullanabilmesini çok önemsiyoruz. internet sitesi standartlarını izleyerek, işlemlerin fare olmadan da yapılabilmesini ve ekran okuyucular gibi yardımcı yazılımların kullanılabilmesini sağlıyoruz. AAA düzeyinde yüksek renk karşıtlığı teması ile AA düzeyinde {guidelines}İnternet Sitesi İçeriği Erişilebilirlik Kuralları{linkend} 2.1 ile uyumlu olmayı amaçladık.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Bir sorunla karşılaşırsanız, bunları {issuetracker}sorun izleyicimiz{linkend} üzerinden bildirmekten çekinmeyin. Katkıda bulunmak istiyorsanız {designteam}tasarım ekibimize{linkend} katılın!",
"Current selected app: {app}, position {position} of {total}" : "Seçilmiş geçerli uygulama: {app}, {position} / {total} konumunda",
"Move up" : "Yukarı taşı",
"Move down" : "Aşağı taşı",
"Custom background" : "Özel arka plan",

@ -77,6 +77,7 @@
"Disable all keyboard shortcuts" : "Tüm klavye kısayolları devre dışı bırakılsın",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Uygulamalarımızı herkesin kullanabilmesini çok önemsiyoruz. internet sitesi standartlarını izleyerek, işlemlerin fare olmadan da yapılabilmesini ve ekran okuyucular gibi yardımcı yazılımların kullanılabilmesini sağlıyoruz. AAA düzeyinde yüksek renk karşıtlığı teması ile AA düzeyinde {guidelines}İnternet Sitesi İçeriği Erişilebilirlik Kuralları{linkend} 2.1 ile uyumlu olmayı amaçladık.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Bir sorunla karşılaşırsanız, bunları {issuetracker}sorun izleyicimiz{linkend} üzerinden bildirmekten çekinmeyin. Katkıda bulunmak istiyorsanız {designteam}tasarım ekibimize{linkend} katılın!",
"Current selected app: {app}, position {position} of {total}" : "Seçilmiş geçerli uygulama: {app}, {position} / {total} konumunda",
"Move up" : "Yukarı taşı",
"Move down" : "Aşağı taşı",
"Custom background" : "Özel arka plan",

@ -27,9 +27,14 @@
*/
namespace OCA\Theming;
use Exception;
use OCA\Theming\AppInfo\Application;
use OCA\Theming\Service\BackgroundService;
use OCP\Capabilities\IPublicCapability;
use OCP\IConfig;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserSession;
/**
* Class Capabilities
@ -50,17 +55,20 @@ class Capabilities implements IPublicCapability {
/** @var IConfig */
protected $config;
protected IUserSession $userSession;
/**
* @param ThemingDefaults $theming
* @param Util $util
* @param IURLGenerator $url
* @param IConfig $config
*/
public function __construct(ThemingDefaults $theming, Util $util, IURLGenerator $url, IConfig $config) {
public function __construct(ThemingDefaults $theming, Util $util, IURLGenerator $url, IConfig $config, IUserSession $userSession) {
$this->theming = $theming;
$this->util = $util;
$this->url = $url;
$this->config = $config;
$this->userSession = $userSession;
}
/**
@ -86,23 +94,49 @@ class Capabilities implements IPublicCapability {
* }
*/
public function getCapabilities() {
$color = $this->theming->getDefaultColorPrimary();
$colorText = $this->theming->getDefaultTextColorPrimary();
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', '');
$color = $this->theming->getColorPrimary();
$backgroundPlain = $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $color !== '#0082c9');
$background = $backgroundPlain ? $color : $this->url->getAbsoluteURL($this->theming->getBackground());
$user = $this->userSession->getUser();
if ($user instanceof IUser) {
/**
* Mimics the logic of generateUserBackgroundVariables() that generates the CSS variables.
* Also needs to be updated if the logic changes.
* @see \OCA\Theming\Themes\CommonThemeTrait::generateUserBackgroundVariables()
*/
$color = $this->theming->getColorPrimary();
$colorText = $this->theming->getTextColorPrimary();
$backgroundImage = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'background_image', BackgroundService::BACKGROUND_DEFAULT);
if ($backgroundImage === BackgroundService::BACKGROUND_CUSTOM) {
$backgroundPlain = false;
$background = $this->url->linkToRouteAbsolute('theming.userTheme.getBackground');
} else if (isset(BackgroundService::SHIPPED_BACKGROUNDS[$backgroundImage])) {
$backgroundPlain = false;
$background = $this->url->linkTo(Application::APP_ID, "img/background/$backgroundImage");
} else if ($backgroundImage !== BackgroundService::BACKGROUND_DEFAULT) {
$backgroundPlain = true;
$background = $color;
}
}
return [
'theming' => [
'name' => $this->theming->getName(),
'url' => $this->theming->getBaseUrl(),
'slogan' => $this->theming->getSlogan(),
'color' => $color,
'color-text' => $this->theming->getTextColorPrimary(),
'color-text' => $colorText,
'color-element' => $this->util->elementColor($color),
'color-element-bright' => $this->util->elementColor($color),
'color-element-dark' => $this->util->elementColor($color, false),
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
'background' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9') ?
$this->theming->getColorPrimary() :
$this->url->getAbsoluteURL($this->theming->getBackground()),
'background-plain' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9'),
'background' => $background,
'background-plain' => $backgroundPlain,
'background-default' => !$this->util->isBackgroundThemed(),
'logoheader' => $this->url->getAbsoluteURL($this->theming->getLogo()),
'favicon' => $this->url->getAbsoluteURL($this->theming->getLogo()),

@ -57,101 +57,120 @@ class BackgroundService {
public const SHIPPED_BACKGROUNDS = [
'hannah-maclean-soft-floral.jpg' => [
'attribution' => 'Soft floral (Hannah MacLean, CC0)',
'description' => 'Abstract background picture in yellow and white color whith a flower on it',
'attribution_url' => 'https://stocksnap.io/photo/soft-floral-XOYWCCW5PA',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#9f652f',
],
'ted-moravec-morning-fog.jpg' => [
'attribution' => 'Morning fog (Ted Moravec, Public Domain)',
'description' => 'Background picture of a forest shrouded in fog',
'attribution_url' => 'https://flickr.com/photos/tmoravec/52392410261',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#114c3b',
],
'stefanus-martanto-setyo-husodo-underwater-ocean.jpg' => [
'attribution' => 'Underwater ocean (Stefanus Martanto Setyo Husodo, CC0)',
'description' => 'Background picture of an underwater ocean',
'attribution_url' => 'https://stocksnap.io/photo/underwater-ocean-TJA9LBH4WS',
'primary_color' => '#04577e',
],
'zoltan-voros-rhythm-and-blues.jpg' => [
'attribution' => 'Rhythm and blues (Zoltán Vörös, CC BY)',
'description' => 'Abstract background picture of sand dunes during night',
'attribution_url' => 'https://flickr.com/photos/v923z/51634409289/',
'primary_color' => '#1c243c',
],
'anatoly-mikhaltsov-butterfly-wing-scale.jpg' => [
'attribution' => 'Butterfly wing scale (Anatoly Mikhaltsov, CC BY-SA)',
'description' => 'Background picture of a red-ish butterfly wing under microscope',
'attribution_url' => 'https://commons.wikimedia.org/wiki/File:%D0%A7%D0%B5%D1%88%D1%83%D0%B9%D0%BA%D0%B8_%D0%BA%D1%80%D1%8B%D0%BB%D0%B0_%D0%B1%D0%B0%D0%B1%D0%BE%D1%87%D0%BA%D0%B8.jpg',
'primary_color' => '#a53c17',
],
'bernie-cetonia-aurata-take-off-composition.jpg' => [
'attribution' => 'Cetonia aurata take off composition (Bernie, Public Domain)',
'description' => 'Montage of a cetonia aurata bug that takes off with white background',
'attribution_url' => 'https://commons.wikimedia.org/wiki/File:Cetonia_aurata_take_off_composition_05172009.jpg',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#56633d',
],
'dejan-krsmanovic-ribbed-red-metal.jpg' => [
'attribution' => 'Ribbed red metal (Dejan Krsmanovic, CC BY)',
'description' => 'Abstract background picture of red ribbed metal with two horizontal white elements on top of it',
'attribution_url' => 'https://www.flickr.com/photos/dejankrsmanovic/42971456774/',
'primary_color' => '#9c4236',
],
'eduardo-neves-pedra-azul.jpg' => [
'attribution' => 'Pedra azul milky way (Eduardo Neves, CC BY-SA)',
'description' => 'Background picture of the milky way during night with a mountain in front of it',
'attribution_url' => 'https://commons.wikimedia.org/wiki/File:Pedra_Azul_Milky_Way.jpg',
'primary_color' => '#4f6071',
],
'european-space-agency-barents-bloom.jpg' => [
'attribution' => 'Barents bloom (European Space Agency, CC BY-SA)',
'description' => 'Abstract background picture of blooming barents in blue and green colors',
'attribution_url' => 'https://www.esa.int/ESA_Multimedia/Images/2016/08/Barents_bloom',
'primary_color' => '#396475',
],
'hannes-fritz-flippity-floppity.jpg' => [
'attribution' => 'Flippity floppity (Hannes Fritz, CC BY-SA)',
'description' => 'Abstract background picture of many pairs of flip flops hanging on a wall in multiple colors',
'attribution_url' => 'http://hannes.photos/flippity-floppity',
'primary_color' => '#98415a',
],
'hannes-fritz-roulette.jpg' => [
'attribution' => 'Roulette (Hannes Fritz, CC BY-SA)',
'description' => 'Background picture of a rotating giant wheel during night',
'attribution_url' => 'http://hannes.photos/roulette',
'primary_color' => '#845334',
],
'hannes-fritz-sea-spray.jpg' => [
'attribution' => 'Sea spray (Hannes Fritz, CC BY-SA)',
'description' => 'Background picture of a stone coast with fog and sea behind it',
'attribution_url' => 'http://hannes.photos/sea-spray',
'primary_color' => '#4f6071',
],
'kamil-porembinski-clouds.jpg' => [
'attribution' => 'Clouds (Kamil Porembiński, CC BY-SA)',
'description' => 'Background picture of white clouds on in front of a blue sky',
'attribution_url' => 'https://www.flickr.com/photos/paszczak000/8715851521/',
'primary_color' => self::DEFAULT_COLOR,
],
'bernard-spragg-new-zealand-fern.jpg' => [
'attribution' => 'New zealand fern (Bernard Spragg, CC0)',
'description' => 'Abstract background picture of fern leafes',
'attribution_url' => 'https://commons.wikimedia.org/wiki/File:NZ_Fern.(Blechnum_chambersii)_(11263534936).jpg',
'primary_color' => '#316b26',
],
'rawpixel-pink-tapioca-bubbles.jpg' => [
'attribution' => 'Pink tapioca bubbles (Rawpixel, CC BY)',
'description' => 'Abstract background picture of pink tapioca bubbles',
'attribution_url' => 'https://www.flickr.com/photos/byrawpixel/27665140298/in/photostream/',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#7b4e7e',
],
'nasa-waxing-crescent-moon.jpg' => [
'attribution' => 'Waxing crescent moon (NASA, Public Domain)',
'description' => 'Background picture of glowing earth in foreground and moon in the background',
'attribution_url' => 'https://www.nasa.gov/image-feature/a-waxing-crescent-moon',
'primary_color' => '#005ac1',
],
'tommy-chau-already.jpg' => [
'attribution' => 'Cityscape (Tommy Chau, CC BY)',
'description' => 'Background picture of a skyscraper city during night',
'attribution_url' => 'https://www.flickr.com/photos/90975693@N05/16910999368',
'primary_color' => '#6a2af4',
],
'tommy-chau-lion-rock-hill.jpg' => [
'attribution' => 'Lion rock hill (Tommy Chau, CC BY)',
'description' => 'Background picture of mountains during sunset or sunrise',
'attribution_url' => 'https://www.flickr.com/photos/90975693@N05/17136440246',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#7f4f70',
],
'lali-masriera-yellow-bricks.jpg' => [
'attribution' => 'Yellow bricks (Lali Masriera, CC BY)',
'description' => 'Background picture of yellow bricks with some yellow tubes',
'attribution_url' => 'https://www.flickr.com/photos/visualpanic/3982464447',
'theming' => self::THEMING_MODE_DARK,
'primary_color' => '#7f5700',

@ -172,11 +172,16 @@ class ThemingDefaults extends \OC_Defaults {
public function getShortFooter() {
$slogan = $this->getSlogan();
$baseUrl = $this->getBaseUrl();
if ($baseUrl !== '') {
$footer = '<a href="' . $baseUrl . '" target="_blank"' .
' rel="noreferrer noopener" class="entity-name">' . $this->getEntity() . '</a>';
} else {
$footer = '<span class="entity-name">' .$this->getEntity() . '</span>';
$entity = $this->getEntity();
$footer = '';
if ($entity !== '') {
if ($baseUrl !== '') {
$footer = '<a href="' . $baseUrl . '" target="_blank"' .
' rel="noreferrer noopener" class="entity-name">' . $entity . '</a>';
} else {
$footer = '<span class="entity-name">' .$entity . '</span>';
}
}
$footer .= ($slogan !== '' ? ' ' . $slogan : '');

@ -87,7 +87,7 @@
<button v-for="shippedBackground in shippedBackgrounds"
:key="shippedBackground.name"
:title="shippedBackground.details.attribution"
:aria-label="shippedBackground.details.attribution"
:aria-label="shippedBackground.details.description"
:aria-pressed="backgroundImage === shippedBackground.name"
:class="{
'background background__shipped': true,

@ -36,6 +36,7 @@ use OCP\App\IAppManager;
use OCP\Files\IAppData;
use OCP\IConfig;
use OCP\IURLGenerator;
use OCP\IUserSession;
use Test\TestCase;
/**
@ -56,6 +57,8 @@ class CapabilitiesTest extends TestCase {
/** @var Util|\PHPUnit\Framework\MockObject\MockObject */
protected $util;
protected IUserSession $userSession;
/** @var Capabilities */
protected $capabilities;
@ -66,7 +69,8 @@ class CapabilitiesTest extends TestCase {
$this->url = $this->getMockBuilder(IURLGenerator::class)->getMock();
$this->config = $this->createMock(IConfig::class);
$this->util = $this->createMock(Util::class);
$this->capabilities = new Capabilities($this->theming, $this->util, $this->url, $this->config);
$this->userSession = $this->createMock(IUserSession::class);
$this->capabilities = new Capabilities($this->theming, $this->util, $this->url, $this->config, $this->userSession);
}
public function dataGetCapabilities() {
@ -165,13 +169,13 @@ class CapabilitiesTest extends TestCase {
->method('getSlogan')
->willReturn($slogan);
$this->theming->expects($this->atLeast(1))
->method('getColorPrimary')
->method('getDefaultColorPrimary')
->willReturn($color);
$this->theming->expects($this->exactly(3))
->method('getLogo')
->willReturn($logo);
$this->theming->expects($this->once())
->method('getTextColorPrimary')
->method('getDefaultTextColorPrimary')
->willReturn($textColor);
$util = new Util($this->config, $this->createMock(IAppManager::class), $this->createMock(IAppData::class), $this->createMock(ImageManager::class));

@ -46,7 +46,7 @@ OC.L10N.register(
"A pre-release version only for testing new features, not for production environments." : "Verzia pred vydaním iba na testovanie nových funkcií, nevhodné pre ostrú prevádzku.",
"_<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> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"],
"Update for %1$s to version %2$s is available." : "Pre %1$s je dostupná aktualizácia na verziu %2$s.",
"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." : "Nižšie môžete zmeniť aktualizačný kanál, ktorý ovplyvní aj stránku správy aplikácií. Napr. po prepnutí na beta kanál sa vám na stránke správy aplikácií ponúknu aktualizácie beta aplikácií.",
"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." : "Nižšie môžete zmeniť aktualizačný kanál, ktorý ovplyvní aj stránku správy aplikácií. Napr. po prepnutí na beta kanál vám budú na stránke správy aplikácií ponúknu aktualizácie na beta verzie aplikácií.",
"Update channel:" : "Aktualizačný kanál:"
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");

@ -44,7 +44,7 @@
"A pre-release version only for testing new features, not for production environments." : "Verzia pred vydaním iba na testovanie nových funkcií, nevhodné pre ostrú prevádzku.",
"_<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> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"],
"Update for %1$s to version %2$s is available." : "Pre %1$s je dostupná aktualizácia na verziu %2$s.",
"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." : "Nižšie môžete zmeniť aktualizačný kanál, ktorý ovplyvní aj stránku správy aplikácií. Napr. po prepnutí na beta kanál sa vám na stránke správy aplikácií ponúknu aktualizácie beta aplikácií.",
"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." : "Nižšie môžete zmeniť aktualizačný kanál, ktorý ovplyvní aj stránku správy aplikácií. Napr. po prepnutí na beta kanál vám budú na stránke správy aplikácií ponúknu aktualizácie na beta verzie aplikácií.",
"Update channel:" : "Aktualizačný kanál:"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
}

@ -3,9 +3,9 @@ OC.L10N.register(
{
"Failed to clear the mappings." : "Non foi posíbel limpar as asignacións.",
"Failed to delete the server configuration" : "Non foi posíbel eliminar a configuración do servidor",
"Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: o vínculo non está permitido.",
"Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: a vinculación non está permitida.",
"Valid configuration, connection established!" : "A configuración é correcta, estabeleceuse a conexión!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais o vínculo fallou. Comprobe os axustes do servidor e as credenciais.",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais fallou a vinculación. Comprobe os axustes do servidor e as credenciais.",
"Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles.",
"No action specified" : "Non se especificou unha acción",
"No configuration specified" : "Non se especificou unha configuración",

@ -1,9 +1,9 @@
{ "translations": {
"Failed to clear the mappings." : "Non foi posíbel limpar as asignacións.",
"Failed to delete the server configuration" : "Non foi posíbel eliminar a configuración do servidor",
"Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: o vínculo non está permitido.",
"Invalid configuration: Anonymous binding is not allowed." : "A configuración non é correcta: a vinculación non está permitida.",
"Valid configuration, connection established!" : "A configuración é correcta, estabeleceuse a conexión!",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais o vínculo fallou. Comprobe os axustes do servidor e as credenciais.",
"Valid configuration, but binding failed. Please check the server settings and credentials." : "A configuración é correcta, mais fallou a vinculación. Comprobe os axustes do servidor e as credenciais.",
"Invalid configuration. Please have a look at the logs for further details." : "A configuración non é correcta. Bótelle unha ollada aos rexistros para obter máis detalles.",
"No action specified" : "Non se especificou unha acción",
"No configuration specified" : "Non se especificou unha configuración",

@ -1,23 +1,46 @@
OC.L10N.register(
"user_status",
{
"Recent statuses" : "Trạng thái gần đây",
"No recent status changes" : "Không có thay đổi trạng thái gần đây",
"In a meeting" : "Trong một cuộc họp",
"Commuting" : "Đang di chuyển",
"Out sick" : "Bị ốm",
"Vacationing" : "Đi nghỉ",
"Working remotely" : "Làm việc từ xa",
"User status" : "Trạng thái người dùng",
"Clear status after" : "Xóa trạng thái sau",
"Emoji for your status message" : "Biểu tượng cảm xúc cho thông báo trạng thái của bạn",
"What is your status?" : "Trạng thái của bạn là gì?",
"Predefined statuses" : "Trạng thái được xác định trước",
"Previously set" : "Đã đặt trước đó",
"Reset status" : "Thiết lập trạng thái",
"Set status" : "Đặt trạng thái",
"Online status" : "Trạng thái trực tuyến",
"Status message" : "Thông báo trạng thái",
"Your status was set automatically" : "Trạng thái của bạn đã được đặt tự động",
"Clear status message" : "Xoá thông báo trạng thái",
"Set status message" : "Đặt thông báo trạng thái",
"Away" : "Tạm vắng",
"Do not disturb" : "Đừng làm phiền",
"Reset status to \"{icon} {message}\"" : "Đặt lại trạng thái thành \"{icon} {message}\"",
"Reset status to \"{message}\"" : "Đặt lại trạng thái thành \"{message}\"",
"Reset status to \"{icon}\"" : "Đặt lại trạng thái thành \"{icon}\"",
"There was an error saving the status" : "Đã xảy ra lỗi khi lưu trạng thái",
"There was an error clearing the status" : "Đã xảy ra lỗi khi xóa trạng thái",
"There was an error reverting the status" : "Đã xảy ra lỗi khi hoàn nguyên trạng thái",
"Don't clear" : "Không xoá",
"Today" : "Hôm nay",
"This week" : "Tuần này",
"Online" : "Trực tuyến",
"Away" : "Tạm vắng",
"Do not disturb" : "Đừng làm phiền",
"Invisible" : "Vô hình",
"Offline" : "Ngoại tuyến",
"There was an error saving the new status" : "Đã xảy ra lỗi khi lưu trạng thái mới",
"30 minutes" : "30 phút",
"1 hour" : "1 tiếng",
"4 hours" : "4 tiếng",
"Clear status message after" : "Xoá thông báo trạng thái sau"
"Mute all notifications" : "Tắt tiếng tất cả thông báo",
"Appear offline" : "Đang offline",
"View profile" : "Xem hồ sơ"
},
"nplurals=1; plural=0;");

@ -1,21 +1,44 @@
{ "translations": {
"Recent statuses" : "Trạng thái gần đây",
"No recent status changes" : "Không có thay đổi trạng thái gần đây",
"In a meeting" : "Trong một cuộc họp",
"Commuting" : "Đang di chuyển",
"Out sick" : "Bị ốm",
"Vacationing" : "Đi nghỉ",
"Working remotely" : "Làm việc từ xa",
"User status" : "Trạng thái người dùng",
"Clear status after" : "Xóa trạng thái sau",
"Emoji for your status message" : "Biểu tượng cảm xúc cho thông báo trạng thái của bạn",
"What is your status?" : "Trạng thái của bạn là gì?",
"Predefined statuses" : "Trạng thái được xác định trước",
"Previously set" : "Đã đặt trước đó",
"Reset status" : "Thiết lập trạng thái",
"Set status" : "Đặt trạng thái",
"Online status" : "Trạng thái trực tuyến",
"Status message" : "Thông báo trạng thái",
"Your status was set automatically" : "Trạng thái của bạn đã được đặt tự động",
"Clear status message" : "Xoá thông báo trạng thái",
"Set status message" : "Đặt thông báo trạng thái",
"Away" : "Tạm vắng",
"Do not disturb" : "Đừng làm phiền",
"Reset status to \"{icon} {message}\"" : "Đặt lại trạng thái thành \"{icon} {message}\"",
"Reset status to \"{message}\"" : "Đặt lại trạng thái thành \"{message}\"",
"Reset status to \"{icon}\"" : "Đặt lại trạng thái thành \"{icon}\"",
"There was an error saving the status" : "Đã xảy ra lỗi khi lưu trạng thái",
"There was an error clearing the status" : "Đã xảy ra lỗi khi xóa trạng thái",
"There was an error reverting the status" : "Đã xảy ra lỗi khi hoàn nguyên trạng thái",
"Don't clear" : "Không xoá",
"Today" : "Hôm nay",
"This week" : "Tuần này",
"Online" : "Trực tuyến",
"Away" : "Tạm vắng",
"Do not disturb" : "Đừng làm phiền",
"Invisible" : "Vô hình",
"Offline" : "Ngoại tuyến",
"There was an error saving the new status" : "Đã xảy ra lỗi khi lưu trạng thái mới",
"30 minutes" : "30 phút",
"1 hour" : "1 tiếng",
"4 hours" : "4 tiếng",
"Clear status message after" : "Xoá thông báo trạng thái sau"
"Mute all notifications" : "Tắt tiếng tất cả thông báo",
"Appear offline" : "Đang offline",
"View profile" : "Xem hồ sơ"
},"pluralForm" :"nplurals=1; plural=0;"
}

@ -3075,14 +3075,7 @@
<file src="lib/private/Preview/Generator.php">
<InvalidArgument>
<code>$maxPreviewImage</code>
<code>$semId</code>
</InvalidArgument>
<InvalidReturnStatement>
<code>$sem</code>
</InvalidReturnStatement>
<InvalidReturnType>
<code>false|resource</code>
</InvalidReturnType>
<LessSpecificReturnType>
<code>null|string</code>
</LessSpecificReturnType>

@ -35,6 +35,7 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Collaboration\AutoComplete\AutoCompleteEvent;
use OCP\Collaboration\AutoComplete\AutoCompleteFilterEvent;
use OCP\Collaboration\AutoComplete\IManager;
use OCP\Collaboration\Collaborators\ISearch;
use OCP\EventDispatcher\IEventDispatcher;
@ -88,6 +89,18 @@ class AutoCompleteController extends OCSController {
$this->dispatcher->dispatch(IManager::class . '::filterResults', $event);
$results = $event->getResults();
$event = new AutoCompleteFilterEvent(
$results,
$search,
$itemType,
$itemId,
$sorter,
$shareTypes,
$limit,
);
$this->dispatcher->dispatchTyped($event);
$results = $event->getResults();
$exactMatches = $results['exact'];
unset($results['exact']);
$results = array_merge_recursive($exactMatches, $results);

File diff suppressed because one or more lines are too long

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["animations.scss","guest.scss"],"names":[],"mappings":"CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBA,0BACC,KACC,+BACA,uBAED,GACC,iCACA,0BAGF,kBACC,KACC,+BACA,uBAED,GACC,iCACA,0BC3BF,wYACA,iBACA,2EACA,qBACA,mEACA,iDACA,kCACA,6DACA,6DACA,mBAEA,KACC,mBAEA,iBACA,kBACA,6NACA,wBACA,kBAEA,8FAMA,2JACG,4BACH,gBACA,YACA,cACA,gBAKA,cACC,gBAGD,qBACC,wBAGD,kEAEC,0BACA,8BAIF,GACC,kBACA,WAID,SAGC,iBAGD,GACC,eACA,mBACA,iBAED,GACC,eACA,cAID,KACC,aACA,sBACA,uBACA,mBAIA,cACC,wEACA,4BACA,wBACA,2BACA,YACA,aACA,cACA,kBACA,WAIF,SACC,WACA,gBACA,gBAID,KACC,kBACA,YACA,UAED,kBACC,gBAGD,4DAEC,WAED,uCACC,YACA,uBACA,SACA,UAGD,wBACC,SAGD,wBACC,iBACA,mBAED,sCACC,mBACA,gBAED,2CAEC,mBAED,qBACC,WAED,2CACC,WAED,sBACC,cACA,SAED,0BACC,mBAID,cACC,aAED,kBACC,sBAID,gBACC,aACA,mBACA,uBACA,iBACA,kBAID,2CACC,SACC,cAMF,gBACC,cAEA,6BACC,kBACA,WACA,mCACA,oBAKD,uMAGC,WAGD,oCACC,kBACA,SACA,WAMF,uDACC,6NAED,yFAKC,eACA,WACA,YACA,aACA,kBACA,wBAGD,gDAEI,iBAGJ,sCACI,2BAGJ,qGAOC,qBACA,WACA,eACA,aACA,8CACA,iBACA,wBACA,YACA,oBACA,eAGD,kCACC,kBACA,UACA,QAGD,yBACC,6DAED,wEAIC,YACA,iBACA,gCACA,YACA,oBACA,mBACA,cACA,eAED,gFACC,YACA,8BAED,YACC,YACA,YACA,sCAED,4FAIC,kBACA,gBACA,uBAID,iDAEC,SAGD,4MAMC,wCAID,8BACC,kBACA,cACA,SACA,UACA,WACA,gBAED,oCACC,iBAED,iGAEC,eAED,2CACC,WACA,qBACA,sBACA,WACA,eACA,sBACA,kBACA,YACA,WACA,2BAED,kDACC,kBAED,6IAEC,kBAED,0DACC,sBACA,kBAED,2DACC,iCACA,6BAED,mEACC,kBACA,sBAED,0DACC,0CACA,6BACA,+DAID,qBACC,qBACA,kBACA,UACA,YACA,0BACA,gBACA,WAED,eACC,iBACA,gBACA,kBAID,yBACC,kBACA,UACA,SACA,aACA,uBACA,WACA,qBACA,aAGD,2CACC,6BACA,UAED,qBACC,YACA,iBACA,WACA,cAED,gBACC,iBAID,8GAKC,kBAGD,uIAGC,mDAGD,iCACC,gBACA,mBAED,qBACC,aACA,kBACA,cACA,+BACA,gBACA,mBACA,gCAEA,kFAGC,sBAED,yBACC,WACA,YACA,eAED,yBACC,cAED,wBACC,SAED,uBACC,mBAGF,iBACC,YACA,cACA,cAED,mBACC,WACA,aACA,iBACA,oBACA,eAED,oBAEC,wBACA,YAED,sBACC,qBACA,aAKD,gBACC,kCAKD,uBACC,gBACA,mBAID,mBACC,kBACA,mBACA,SACA,aACA,yBACC,mBAED,yBACC,YACA,kBACA,eACA,yCACA,6BACA,eACA,qCACA,kBAED,iFAEC,mBACA,0CACA,6BAED,8BACC,aAMF,oCAGC,kBACA,iBAED,uBACC,6BAED,aACC,mBAED,gCACC,2BAED,4BACC,6BACA,wBAKD,sBACC,aACA,sBACA,gBACA,qBACA,mBACA,eACA,sBACA,yBACA,qBACA,iBAGA,gCACC,qBACA,YAGD,2BACC,cAGD,yCACC,mBAMF,WACC,aAED,sBACC,gBAED,OACC,iBACA,yBACA,sBACA,qBACA,iBAID,QACC,wBACA,kBAEA,iBACC,gBACA,gBACA,iBACA,kBAGD,0BACC,WAGD,+BACC,sBAGF,0BACC,gBACA,mBAED,sBACC,aACA,cACA,YAEA,wCACC,qBACA,sBAIF,sBACC,YACA,YACA,qBAKD,iBACC,0DAED,kBACC,2DAED,kBACC,2DAED,cACC,uDAED,oBACC,6DAED,sBACC,+DAKD,eACC,iBACA,iBACA,YACA,aAED,iCACC,4BACA,2BACA,eACA,gBAED,sGACC,kBACA,wCAED,0IACC,UACA,WACA,YACA,WACA,uBACA,kBACA,QACA,SACA,mBACA,6CACA,qCACA,gCACA,4BACA,wBAED,wTACI,uCAEJ,0IACC,sCACA,yBAED,wDACC,sCACA,sBAED,yDACC,YACA,WACA,qBAGD,gLACC,2CAED,wNACC,gDAED,gOACC,iDAED,wQACC,sDAED,0BACC,KACA,+BACA,uBAEA,GACA,iCACA,0BAGD,kBACC,KACA,+BACA,uBAEA,GACA,iCACA,0BAKD,OACC,gBACA,0BACC,iBAGD,iBACC,iBACA,mBAEA,uBACC,SAMH,+BAEC,kBACA,cACA,aACA,UACA,WACA,gBAGD,QACC,kBAGD,UACC,8BACA,wCACA,wCACA,mCACA,cACA,aACA,gBAEA,kBACC,uDACA,mCAGD,gBACC,qDACA,iCAGD,kBACC,uDACA,mCAGD,qBACC,gBAGD,cACC,8CACA,gBACA,kBACA,mCAIF,iCACC,6BACA,mDACA,QA/xByB,KAgyBzB,2CACA,4CACA,qBACA,sDACA,8CAIA,gBACC,cACA,gBAGD,oBACC,aAGD,gBACC,kBAIF,uBACC,+BACA,eACA,YAID,YACC,2BAGD,WACC,2BAGD,QACC","file":"guest.css"}
{"version":3,"sourceRoot":"","sources":["animations.scss","guest.scss"],"names":[],"mappings":"CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBA,0BACC,KACC,+BACA,uBAED,GACC,iCACA,0BAGF,kBACC,KACC,+BACA,uBAED,GACC,iCACA,0BC3BF,wYACA,iBACA,2EACA,qBACA,mEACA,iDACA,kCACA,6DACA,6DACA,mBAEA,KACC,mBAEA,iBACA,kBACA,6NACA,wBACA,kBAEA,8FAMA,2JACG,4BACH,gBACA,YACA,cACA,gBAKA,cACC,gBAGD,qBACC,wBAGD,kEAEC,0BACA,8BAIF,GACC,kBACA,WAID,SAGC,iBAGD,GACC,eACA,mBACA,iBAED,GACC,eACA,cAID,KACC,aACA,sBACA,uBACA,mBAIA,cACC,wEACA,4BACA,wBACA,2BACA,YACA,aACA,cACA,kBACA,WAIF,SACC,WACA,gBACA,uBAID,KACC,kBACA,YACA,UAED,kBACC,gBAGD,4DAEC,WAED,uCACC,YACA,uBACA,SACA,UAGD,wBACC,SAGD,wBACC,iBACA,mBAED,sCACC,mBACA,gBAED,2CAEC,mBAED,qBACC,WAED,2CACC,WAED,sBACC,cACA,SAED,0BACC,mBAID,cACC,aAED,kBACC,sBAID,gBACC,aACA,mBACA,uBACA,iBACA,kBAID,2CACC,SACC,cAMF,gBACC,cAEA,6BACC,kBACA,WACA,mCACA,oBAKD,uMAGC,WAGD,oCACC,kBACA,SACA,WAMF,uDACC,6NAED,yFAKC,eACA,WACA,YACA,aACA,kBACA,wBAGD,gDAEI,iBAGJ,sCACI,2BAGJ,qGAOC,qBACA,WACA,eACA,aACA,8CACA,iBACA,wBACA,YACA,oBACA,eAGD,kCACC,kBACA,UACA,QAGD,yBACC,6DAED,wEAIC,YACA,iBACA,gCACA,YACA,oBACA,mBACA,cACA,eAED,gFACC,YACA,8BAED,YACC,YACA,YACA,sCAED,4FAIC,kBACA,gBACA,uBAID,iDAEC,SAGD,4MAMC,wCAID,8BACC,kBACA,cACA,SACA,UACA,WACA,gBAED,oCACC,iBAED,iGAEC,eAED,2CACC,WACA,qBACA,sBACA,WACA,eACA,sBACA,kBACA,YACA,WACA,2BAED,kDACC,kBAED,6IAEC,kBAED,0DACC,sBACA,kBAED,2DACC,iCACA,6BAED,mEACC,kBACA,sBAED,0DACC,0CACA,6BACA,+DAID,qBACC,qBACA,kBACA,UACA,YACA,0BACA,gBACA,WAED,eACC,iBACA,gBACA,kBAID,yBACC,kBACA,UACA,SACA,aACA,uBACA,WACA,qBACA,aAGD,2CACC,6BACA,UAED,qBACC,YACA,iBACA,WACA,cAED,gBACC,iBAID,8GAKC,kBAGD,uIAGC,mDAGD,iCACC,gBACA,mBAED,qBACC,aACA,kBACA,cACA,+BACA,gBACA,mBACA,gCAEA,kFAGC,sBAED,yBACC,WACA,YACA,eAED,yBACC,cAED,wBACC,SAED,uBACC,mBAGF,iBACC,YACA,cACA,cAED,mBACC,WACA,aACA,iBACA,oBACA,eAED,oBAEC,wBACA,YAED,sBACC,qBACA,aAKD,gBACC,kCAKD,uBACC,gBACA,mBAID,mBACC,kBACA,mBACA,SACA,aACA,yBACC,mBAED,yBACC,YACA,kBACA,eACA,yCACA,6BACA,eACA,qCACA,kBAED,iFAEC,mBACA,0CACA,6BAED,8BACC,aAMF,oCAGC,kBACA,iBAED,uBACC,6BAED,aACC,mBAED,gCACC,2BAED,4BACC,6BACA,wBAKD,sBACC,aACA,sBACA,gBACA,qBACA,mBACA,eACA,sBACA,yBACA,qBACA,iBAGA,gCACC,qBACA,YAGD,2BACC,cAGD,yCACC,mBAMF,WACC,aAED,sBACC,gBAED,OACC,iBACA,yBACA,sBACA,qBACA,iBAID,QACC,wBACA,kBAEA,iBACC,gBACA,gBACA,iBACA,kBAGD,0BACC,WAGD,+BACC,sBAGF,0BACC,gBACA,mBAED,sBACC,aACA,cACA,YAEA,wCACC,qBACA,sBAIF,sBACC,YACA,YACA,qBAKD,iBACC,0DAED,kBACC,2DAED,kBACC,2DAED,cACC,uDAED,oBACC,6DAED,sBACC,+DAKD,eACC,iBACA,iBACA,YACA,aAED,iCACC,4BACA,2BACA,eACA,gBAED,sGACC,kBACA,wCAED,0IACC,UACA,WACA,YACA,WACA,uBACA,kBACA,QACA,SACA,mBACA,6CACA,qCACA,gCACA,4BACA,wBAED,wTACI,uCAEJ,0IACC,sCACA,yBAED,wDACC,sCACA,sBAED,yDACC,YACA,WACA,qBAGD,gLACC,2CAED,wNACC,gDAED,gOACC,iDAED,wQACC,sDAED,0BACC,KACA,+BACA,uBAEA,GACA,iCACA,0BAGD,kBACC,KACA,+BACA,uBAEA,GACA,iCACA,0BAMA,0BACC,iBAGD,iBACC,iBACA,mBAEA,uBACC,SAMH,+BAEC,kBACA,cACA,aACA,UACA,WACA,gBAGD,QACC,kBAGD,UACC,8BACA,wCACA,wCACA,mCACA,cACA,aACA,gBAEA,kBACC,uDACA,mCAGD,gBACC,qDACA,iCAGD,kBACC,uDACA,mCAGD,qBACC,gBAGD,cACC,8CACA,gBACA,kBACA,mCAIF,iCACC,6BACA,mDACA,QA9xByB,KA+xBzB,2CACA,4CACA,qBACA,sDACA,8CAIA,gBACC,cACA,gBAGD,oBACC,aAGD,gBACC,kBAIF,uBACC,+BACA,eACA,YAID,YACC,2BAGD,WACC,2BAGD,QACC","file":"guest.css"}

@ -107,7 +107,7 @@ body {
.wrapper {
width: 100%;
max-width: 700px;
margin-top: 10vh;
margin-block: 10vh auto;
}
/* Default FORM */
@ -736,7 +736,6 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
/* FOOTER */
footer {
margin-top: auto;
.info .entity-name {
font-weight: bold;
}

@ -43,6 +43,7 @@ OC.L10N.register(
"Necessary language model provider is not available" : "Nødvendig sprogmodeludbyder er ikke tilgængelig",
"Task not found" : "Opgaven blev ikke fundet",
"Internal error" : "Intern fejl",
"No text to image provider is available" : "Ingen tilgængelig tekst-til-billede funktionalitet",
"Image not found" : "Billede ikke fundet",
"No translation provider available" : "Ingen tilgængelig oversættelsesudbyder",
"Could not detect language" : "Kunne ikke finde sprog",

@ -41,6 +41,7 @@
"Necessary language model provider is not available" : "Nødvendig sprogmodeludbyder er ikke tilgængelig",
"Task not found" : "Opgaven blev ikke fundet",
"Internal error" : "Intern fejl",
"No text to image provider is available" : "Ingen tilgængelig tekst-til-billede funktionalitet",
"Image not found" : "Billede ikke fundet",
"No translation provider available" : "Ingen tilgængelig oversættelsesudbyder",
"Could not detect language" : "Kunne ikke finde sprog",

@ -193,7 +193,7 @@ OC.L10N.register(
"Search contacts …" : "Kontakte suchen …",
"Could not load your contacts" : "Deine Kontakte konnten nicht geladen werden",
"No contacts found" : "Keine Kontakte gefunden",
"Show all contacts" : "Benötigt keine Übersetzung. Hier wird nur die formelle Übersetzung verwendet (de_DE). ",
"Show all contacts" : "Alle Kontakte anzeigen",
"Install the Contacts app" : "Kontakte-App installieren",
"Loading your contacts …" : "Lade deine Kontakte …",
"Looking for {term} …" : "Suche nach {term} …",

@ -191,7 +191,7 @@
"Search contacts …" : "Kontakte suchen …",
"Could not load your contacts" : "Deine Kontakte konnten nicht geladen werden",
"No contacts found" : "Keine Kontakte gefunden",
"Show all contacts" : "Benötigt keine Übersetzung. Hier wird nur die formelle Übersetzung verwendet (de_DE). ",
"Show all contacts" : "Alle Kontakte anzeigen",
"Install the Contacts app" : "Kontakte-App installieren",
"Loading your contacts …" : "Lade deine Kontakte …",
"Looking for {term} …" : "Suche nach {term} …",

@ -39,8 +39,12 @@ OC.L10N.register(
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Κάντε κλικ στο παρακάτω κουμπί για να επαναφέρετε το συνθηματικό σας. Εάν δεν αιτηθήκατε επαναφορά συνθηματικού, αγνοήστε αυτό το μήνυμα αλληλογραφίας.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Κάντε κλικ στο παρακάτω σύνδεσμο για να επαναφέρετε το συνθηματικό σας. Εάν δεν αιτηθήκατε επαναφορά συνθηματικού, αγνοήστε αυτό το μήνυμα αλληλογραφίας.",
"Reset your password" : "Επαναφορά συνθηματικού",
"Requested task type does not exist" : "Ο ζητούμενος τύπος εργασίας δεν υφίσταται",
"Necessary language model provider is not available" : "Ο απαραίτητος πάροχος γλωσσικού μοντέλου δεν είναι διαθέσιμος",
"Task not found" : "Η εργασία δε βρέθηκε",
"Internal error" : "Εσωτερικό σφάλμα",
"No text to image provider is available" : "Δεν υπάρχει διαθέσιμος πάροχος μετατροπής κειμένου σε εικόνα",
"Image not found" : "Η εικόνα δε βρέθηκε",
"No translation provider available" : "Δεν υπάρχει διαθέσιμος πάροχος μεταφράσεων",
"Could not detect language" : "Δεν ήταν δυνατός ο εντοπισμός της γλώσσας",
"Unable to translate" : "Αδυναμία μετάφρασης",

@ -37,8 +37,12 @@
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Κάντε κλικ στο παρακάτω κουμπί για να επαναφέρετε το συνθηματικό σας. Εάν δεν αιτηθήκατε επαναφορά συνθηματικού, αγνοήστε αυτό το μήνυμα αλληλογραφίας.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Κάντε κλικ στο παρακάτω σύνδεσμο για να επαναφέρετε το συνθηματικό σας. Εάν δεν αιτηθήκατε επαναφορά συνθηματικού, αγνοήστε αυτό το μήνυμα αλληλογραφίας.",
"Reset your password" : "Επαναφορά συνθηματικού",
"Requested task type does not exist" : "Ο ζητούμενος τύπος εργασίας δεν υφίσταται",
"Necessary language model provider is not available" : "Ο απαραίτητος πάροχος γλωσσικού μοντέλου δεν είναι διαθέσιμος",
"Task not found" : "Η εργασία δε βρέθηκε",
"Internal error" : "Εσωτερικό σφάλμα",
"No text to image provider is available" : "Δεν υπάρχει διαθέσιμος πάροχος μετατροπής κειμένου σε εικόνα",
"Image not found" : "Η εικόνα δε βρέθηκε",
"No translation provider available" : "Δεν υπάρχει διαθέσιμος πάροχος μεταφράσεων",
"Could not detect language" : "Δεν ήταν δυνατός ο εντοπισμός της γλώσσας",
"Unable to translate" : "Αδυναμία μετάφρασης",

@ -43,6 +43,8 @@ OC.L10N.register(
"Necessary language model provider is not available" : "El proveedor de modelo de lenguaje necesario no está disponible",
"Task not found" : "Tarea no encontrada",
"Internal error" : "Error interno",
"No text to image provider is available" : "No hay proveedores de texto a imagen disponible",
"Image not found" : "Imagen no encontrada",
"No translation provider available" : "No hay proveedores de traducción disponibles",
"Could not detect language" : "No fue posible detectar el lenguaje",
"Unable to translate" : "No es posible traducir",
@ -145,6 +147,7 @@ OC.L10N.register(
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización ha fallado. Por favor, informa de este problema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.",
"Continue to {productName}" : "Continuar a {productName}",
"_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundo. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. "],
"Applications menu" : "Menú Aplicaciones",
"More apps" : "Más aplicaciones",
"Currently open" : "Actualmente abierto",
"_{count} notification_::_{count} notifications_" : ["{count} notificación","{count} notificaciones","{count} notificaciones"],
@ -226,6 +229,7 @@ OC.L10N.register(
"Supported versions" : "Versiones soportadas",
"{name} version {version} and above" : "{name} versión {version} y superior",
"Settings menu" : "Menú de configuraciones",
"Avatar of {displayName}" : "Avatar de {displayName}",
"Search {types} …" : "Buscar {types}…",
"No" : "No",
"Yes" : "Sí",

@ -41,6 +41,8 @@
"Necessary language model provider is not available" : "El proveedor de modelo de lenguaje necesario no está disponible",
"Task not found" : "Tarea no encontrada",
"Internal error" : "Error interno",
"No text to image provider is available" : "No hay proveedores de texto a imagen disponible",
"Image not found" : "Imagen no encontrada",
"No translation provider available" : "No hay proveedores de traducción disponibles",
"Could not detect language" : "No fue posible detectar el lenguaje",
"Unable to translate" : "No es posible traducir",
@ -143,6 +145,7 @@
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización ha fallado. Por favor, informa de este problema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.",
"Continue to {productName}" : "Continuar a {productName}",
"_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundo. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. "],
"Applications menu" : "Menú Aplicaciones",
"More apps" : "Más aplicaciones",
"Currently open" : "Actualmente abierto",
"_{count} notification_::_{count} notifications_" : ["{count} notificación","{count} notificaciones","{count} notificaciones"],
@ -224,6 +227,7 @@
"Supported versions" : "Versiones soportadas",
"{name} version {version} and above" : "{name} versión {version} y superior",
"Settings menu" : "Menú de configuraciones",
"Avatar of {displayName}" : "Avatar de {displayName}",
"Search {types} …" : "Buscar {types}…",
"No" : "No",
"Yes" : "Sí",

@ -40,6 +40,7 @@ OC.L10N.register(
"Reset your password" : "Palauta salasanasi",
"Task not found" : "Tehtävää ei löydy",
"Internal error" : "Sisäinen virhe",
"Image not found" : "Kuvaa ei löytynyt",
"No translation provider available" : "Käännöksen palveluntarjoaja ei ole saatavilla",
"Could not detect language" : "Kielen havaitseminen ei onnistunut",
"Unable to translate" : "Kääntäminen ei onnistu",
@ -90,6 +91,7 @@ OC.L10N.register(
"To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Tee migraatio toiseen tietokantaan komentorivityökalulla: \"occ db:convert-type\", tai lue {linkstart}dokumentaatio ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "PHP:n muistiraja on asetettu alle suositellun 512 megatavun arvon.",
"The temporary directory of this instance points to an either non-existing or non-writable directory." : "Palvelimen väliaikaistiedostojen hakemiston polku viittaa olemattomaan tai kirjoitussuojattuun hakemistoon.",
"This instance is running in debug mode. Only enable this for local development and not in production environments." : "Tämä instanssi toimii vianjäljitystilassa. Käytä vianjäljitystilaa vain paikalliseen kehitykseen, älä koskaan käytä sitä tuotantoympäristössä.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"For more details see the {linkstart}documentation ↗{linkend}." : "Lue lisätietoja {linkstart}dokumentaatiosta ↗{linkend}.",
"The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP-header \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten on suositeltavaa muuttaa asetuksen arvoa.",

@ -38,6 +38,7 @@
"Reset your password" : "Palauta salasanasi",
"Task not found" : "Tehtävää ei löydy",
"Internal error" : "Sisäinen virhe",
"Image not found" : "Kuvaa ei löytynyt",
"No translation provider available" : "Käännöksen palveluntarjoaja ei ole saatavilla",
"Could not detect language" : "Kielen havaitseminen ei onnistunut",
"Unable to translate" : "Kääntäminen ei onnistu",
@ -88,6 +89,7 @@
"To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Tee migraatio toiseen tietokantaan komentorivityökalulla: \"occ db:convert-type\", tai lue {linkstart}dokumentaatio ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "PHP:n muistiraja on asetettu alle suositellun 512 megatavun arvon.",
"The temporary directory of this instance points to an either non-existing or non-writable directory." : "Palvelimen väliaikaistiedostojen hakemiston polku viittaa olemattomaan tai kirjoitussuojattuun hakemistoon.",
"This instance is running in debug mode. Only enable this for local development and not in production environments." : "Tämä instanssi toimii vianjäljitystilassa. Käytä vianjäljitystilaa vain paikalliseen kehitykseen, älä koskaan käytä sitä tuotantoympäristössä.",
"Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa",
"For more details see the {linkstart}documentation ↗{linkend}." : "Lue lisätietoja {linkstart}dokumentaatiosta ↗{linkend}.",
"The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP-header \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten on suositeltavaa muuttaa asetuksen arvoa.",

@ -420,7 +420,7 @@ OC.L10N.register(
"{newName} already exists" : "{newName}이(가) 이미 존재함",
"Error loading file picker template: {error}" : "파일 선택 템플릿을 불러오는 중 오류 발생: {error}",
"Show list view" : "리스트 보기",
"Show grid view" : "모눈 보기",
"Show grid view" : "바둑판식 보기",
"Pending" : "보류 중",
"Home" : "홈",
"Copy to {folder}" : "{folder}에 복사",

@ -418,7 +418,7 @@
"{newName} already exists" : "{newName}이(가) 이미 존재함",
"Error loading file picker template: {error}" : "파일 선택 템플릿을 불러오는 중 오류 발생: {error}",
"Show list view" : "리스트 보기",
"Show grid view" : "모눈 보기",
"Show grid view" : "바둑판식 보기",
"Pending" : "보류 중",
"Home" : "홈",
"Copy to {folder}" : "{folder}에 복사",

@ -327,8 +327,8 @@ OC.L10N.register(
"Installing …" : "Inštalujem ...",
"Need help?" : "Potrebujete pomoc?",
"See the documentation" : "Pozri dokumentáciu",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Vyzerá, že sa snažíte preinštalovať svoj Nextcloud. Avšak v adresári s konfiguráciou chýba súbor CAN_INSTALL. Ak chcete pokračovať, tak ho vytvorte.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Nie je možné odstrániť súbor CAN_INSTALL z adresára s konfiguráciou. Je potrebné ho odstrániť ručne.",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Vyzerá, že sa snažíte preinštalovať svoj Nextcloud. Avšak v priečinku s konfiguráciou chýba súbor CAN_INSTALL. Ak chcete pokračovať, tak ho vytvorte.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Nie je možné odstrániť súbor CAN_INSTALL z priečinka s konfiguráciou. Je potrebné ho odstrániť ručne.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
"Skip to main content" : "Prejsť na hlavný obsah",
"Skip to navigation of app" : "Preskočiť do navigácie apky",

@ -325,8 +325,8 @@
"Installing …" : "Inštalujem ...",
"Need help?" : "Potrebujete pomoc?",
"See the documentation" : "Pozri dokumentáciu",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Vyzerá, že sa snažíte preinštalovať svoj Nextcloud. Avšak v adresári s konfiguráciou chýba súbor CAN_INSTALL. Ak chcete pokračovať, tak ho vytvorte.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Nie je možné odstrániť súbor CAN_INSTALL z adresára s konfiguráciou. Je potrebné ho odstrániť ručne.",
"It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Vyzerá, že sa snažíte preinštalovať svoj Nextcloud. Avšak v priečinku s konfiguráciou chýba súbor CAN_INSTALL. Ak chcete pokračovať, tak ho vytvorte.",
"Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Nie je možné odstrániť súbor CAN_INSTALL z priečinka s konfiguráciou. Je potrebné ho odstrániť ručne.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
"Skip to main content" : "Prejsť na hlavný obsah",
"Skip to navigation of app" : "Preskočiť do navigácie apky",

@ -43,6 +43,8 @@ OC.L10N.register(
"Necessary language model provider is not available" : "无必要的语言模型提供程序",
"Task not found" : "找不到任务",
"Internal error" : "内部错误",
"No text to image provider is available" : "没有可用的文字转图像提供者",
"Image not found" : "未找到图像",
"No translation provider available" : "没有可用的翻译提供程序",
"Could not detect language" : "无法检测语言",
"Unable to translate" : "无法翻译",

@ -41,6 +41,8 @@
"Necessary language model provider is not available" : "无必要的语言模型提供程序",
"Task not found" : "找不到任务",
"Internal error" : "内部错误",
"No text to image provider is available" : "没有可用的文字转图像提供者",
"Image not found" : "未找到图像",
"No translation provider available" : "没有可用的翻译提供程序",
"Could not detect language" : "无法检测语言",
"Unable to translate" : "无法翻译",

@ -16,7 +16,6 @@
"files_external",
"files_pdfviewer",
"files_reminders",
"files_rightclick",
"files_sharing",
"files_trashbin",
"files_versions",
@ -61,7 +60,6 @@
"files",
"files_pdfviewer",
"files_reminders",
"files_rightclick",
"files_sharing",
"files_trashbin",
"files_versions",

@ -47,9 +47,14 @@ p($theme->getTitle());
</main>
</div>
</div>
<footer class="guest-box">
<?php
$longFooter = $theme->getLongFooter();
?>
<footer class="guest-box <?php if ($longFooter === '') {
p('hidden');
} ?>">
<p class="info">
<?php print_unescaped($theme->getLongFooter()); ?>
<?php print_unescaped($longFooter); ?>
</p>
</footer>
</body>

@ -103,7 +103,7 @@ if (isset($template) && $template->getActionCount() !== 0) {
</h1>
<?php print_unescaped($_['content']); ?>
</main>
<?php if (isset($template) && $template->getFooterVisible()) { ?>
<?php if (isset($template) && $template->getFooterVisible() && ($theme->getLongFooter() !== '' || $_['showSimpleSignUpLink'])) { ?>
<footer>
<p><?php print_unescaped($theme->getLongFooter()); ?></p>
<?php

@ -233,7 +233,15 @@ export const getContainerIP = async function(
// https://github.com/cypress-io/cypress/issues/22676
export const waitOnNextcloud = async function(ip: string) {
console.log('├─ Waiting for Nextcloud to be ready... ⏳')
await waitOn({ resources: [`http://${ip}/index.php`] })
await waitOn({
resources: [`http://${ip}/index.php`],
// wait for nextcloud to be up and return any non error status
validateStatus: (status) => status >= 200 && status < 400,
// timout in ms
timeout: 5 * 60 * 1000,
// timeout for a single HTTP request
httpTimeout: 60 * 1000,
})
console.log('└─ Done')
}

@ -0,0 +1,118 @@
/**
* @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de>
*
* @author Ferdinand Thiessen <opensource@fthiessen.de>
*
* @license AGPL-3.0-or-later
*
* 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/>.
*
*/
import { User } from '@nextcloud/cypress'
import { clearState, getNextcloudUserMenu, getNextcloudUserMenuToggle } from '../../support/commonUtils'
const admin = new User('admin', 'admin')
describe('Header: Ensure regular users do not have admin settings in the Settings menu', { testIsolation: true }, () => {
beforeEach(() => {
clearState()
})
it('Regular users can see basic items in the Settings menu', () => {
// Given I am logged in
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/')
})
// I open the settings menu
getNextcloudUserMenuToggle().click()
getNextcloudUserMenu().find('ul').within(($el) => {
// I see the settings menu is open
cy.wrap($el).should('be.visible')
// I see that the Settings menu has only 6 items
cy.get('li').should('have.length', 6)
// I see that the "View profile" item in the Settings menu is shown
cy.contains('li', 'View profile').should('be.visible')
// I see that the "Set status" item in the Settings menu is shown
cy.contains('li', 'Set status').should('be.visible')
// I see that the "Appearance and accessibility" item in the Settings menu is shown
cy.contains('li', 'Appearance and accessibility').should('be.visible')
// I see that the "Settings" item in the Settings menu is shown
cy.contains('li', 'Settings').should('be.visible')
// I see that the "Help" item in the Settings menu is shown
cy.contains('li', 'Help').should('be.visible')
// I see that the "Log out" item in the Settings menu is shown
cy.contains('li', 'Log out').should('be.visible')
})
})
it('Regular users cannot see admin-level items in the Settings menu', () => {
// Given I am logged in
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/')
})
// I open the settings menu
getNextcloudUserMenuToggle().click()
getNextcloudUserMenu().find('ul').within(($el) => {
// I see the settings menu is open
cy.wrap($el).should('be.visible')
// I see that the "Users" item in the Settings menu is NOT shown
cy.contains('li', 'Users').should('not.exist')
// I see that the "Administration settings" item in the Settings menu is NOT shown
cy.contains('li', 'Administration settings').should('not.exist')
cy.get('#admin_settings').should('not.exist')
})
})
it('Admin users can see admin-level items in the Settings menu', () => {
// Given I am logged in
cy.login(admin)
cy.visit('/')
// I open the settings menu
getNextcloudUserMenuToggle().click()
getNextcloudUserMenu().find('ul').within(($el) => {
// I see the settings menu is open
cy.wrap($el).should('be.visible')
// I see that the Settings menu has only 9 items
cy.get('li').should('have.length', 9)
// I see that the "Set status" item in the Settings menu is shown
cy.contains('li', 'View profile').should('be.visible')
// I see that the "Set status" item in the Settings menu is shown
cy.contains('li', 'Set status').should('be.visible')
// I see that the "Appearance and accessibility" item in the Settings menu is shown
cy.contains('li', 'Appearance and accessibility').should('be.visible')
// I see that the "Personal Settings" item in the Settings menu is shown
cy.contains('li', 'Personal settings').should('be.visible')
// I see that the "Administration settings" item in the Settings menu is shown
cy.contains('li', 'Administration settings').should('be.visible')
// I see that the "Apps" item in the Settings menu is shown
cy.contains('li', 'Apps').should('be.visible')
// I see that the "Users" item in the Settings menu is shown
cy.contains('li', 'Users').should('be.visible')
// I see that the "Help" item in the Settings menu is shown
cy.contains('li', 'Help').should('be.visible')
// I see that the "Log out" item in the Settings menu is shown
cy.contains('li', 'Log out').should('be.visible')
})
})
})

@ -1,4 +1,5 @@
import type { User } from '@nextcloud/cypress'
import { getNextcloudUserMenu, getNextcloudUserMenuToggle } from '../../support/commonUtils'
describe('Login', () => {
let user: User
@ -137,8 +138,8 @@ describe('Login', () => {
cy.url().should('match', /apps\/dashboard(\/|$)/)
// When click logout
cy.get('#user-menu > button').should('exist').click()
cy.get('#logout a').should('contain.text', 'Log out').click()
getNextcloudUserMenuToggle().should('exist').click()
getNextcloudUserMenu().contains('a', 'Log out').click()
// Then I see that the current page is the Login page
cy.url().should('match', /\/login/)

@ -0,0 +1,78 @@
/**
* @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de>
*
* @author Ferdinand Thiessen <opensource@fthiessen.de>
*
* @license AGPL-3.0-or-later
*
* 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/>.
*
*/
import { User } from '@nextcloud/cypress'
import { clearState, getNextcloudUserMenu, getNextcloudUserMenuToggle } from '../../support/commonUtils'
const admin = new User('admin', 'admin')
describe('Settings: Ensure only administrator can see the administration settings section', { testIsolation: true }, () => {
beforeEach(() => {
clearState()
})
it('Regular users cannot see admin-level items on the Settings page', () => {
// Given I am logged in
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/')
})
// I open the settings menu
getNextcloudUserMenuToggle().click()
// I navigate to the settings panel
getNextcloudUserMenu().find('#settings a').click()
cy.url().should('match', /\/settings\/user$/)
cy.get('#app-navigation').should('be.visible').within(() => {
// I see the personal section is NOT shown
cy.get('#app-navigation-caption-personal').should('not.exist')
// I see the admin section is NOT shown
cy.get('#app-navigation-caption-administration').should('not.exist')
// I see that the "Personal info" entry in the settings panel is shown
cy.get('[data-section-id="personal-info"]').should('exist').and('be.visible')
})
})
it('Admin users can see admin-level items on the Settings page', () => {
// Given I am logged in
cy.login(admin)
cy.visit('/')
// I open the settings menu
getNextcloudUserMenuToggle().click()
// I navigate to the settings panel
getNextcloudUserMenu().find('#settings a').click()
cy.url().should('match', /\/settings\/user$/)
cy.get('#app-navigation').should('be.visible').within(() => {
// I see the personal section is shown
cy.get('#app-navigation-caption-personal').should('be.visible')
// I see the admin section is shown
cy.get('#app-navigation-caption-administration').should('be.visible')
// I see that the "Personal info" entry in the settings panel is shown
cy.get('[data-section-id="personal-info"]').should('exist').and('be.visible')
})
})
})

@ -35,22 +35,6 @@ export function assertNotExistOrNotVisible(element: JQuery<HTMLElement>) {
expect(doesNotExist || isNotVisible, 'does not exist or is not visible').to.be.true
}
/**
* Helper function ensure users and groups in this tests have a clean state
*/
export function clearState() {
// cleanup ignoring any failures
cy.runOccCommand('group:list --output=json').then(($result) => {
const groups = Object.keys(JSON.parse($result.stdout)).filter((name) => name !== 'admin')
groups.forEach((groupID) => cy.runOccCommand(`group:delete '${groupID}'`))
})
cy.runOccCommand('user:list --output=json').then(($result) => {
const users = Object.keys(JSON.parse($result.stdout)).filter((name) => name !== 'admin')
users.forEach((userID) => cy.runOccCommand(`user:delete '${userID}'`))
})
}
/**
* Get the settings users list
* @return Cypress chainable object

@ -21,7 +21,8 @@
*/
import { User } from '@nextcloud/cypress'
import { clearState, getUserListRow } from './usersUtils'
import { getUserListRow } from './usersUtils'
import { clearState } from '../../support/commonUtils'
const admin = new User('admin', 'admin')

@ -21,7 +21,8 @@
*/
import { User } from '@nextcloud/cypress'
import { clearState, getUserListRow, handlePasswordConfirmation, toggleEditButton, waitLoading } from './usersUtils'
import { getUserListRow, handlePasswordConfirmation, toggleEditButton, waitLoading } from './usersUtils'
import { clearState } from '../../support/commonUtils'
const admin = new User('admin', 'admin')

@ -0,0 +1,37 @@
/**
* Get the header navigation bar
*/
export function getNextcloudHeader() {
return cy.get('#header')
}
/**
* Get user menu in the header navigation bar
*/
export function getNextcloudUserMenu() {
return getNextcloudHeader().find('#user-menu')
}
/**
* Get the user menu toggle in the header navigation bar
*/
export function getNextcloudUserMenuToggle() {
return getNextcloudUserMenu().find('.header-menu__trigger').should('have.length', 1)
}
/**
* Helper function ensure users and groups in this tests have a clean state
* Deletes all users (except admin) and groups
*/
export function clearState() {
// cleanup ignoring any failures
cy.runOccCommand('group:list --output=json').then(($result) => {
const groups = Object.keys(JSON.parse($result.stdout)).filter((name) => name !== 'admin')
groups.forEach((groupID) => cy.runOccCommand(`group:delete '${groupID}'`))
})
cy.runOccCommand('user:list --output=json').then(($result) => {
const users = Object.keys(JSON.parse($result.stdout)).filter((name) => name !== 'admin')
users.forEach((userID) => cy.runOccCommand(`user:delete '${userID}'`))
})
}

3
dist/4107-4107.js vendored

File diff suppressed because one or more lines are too long

@ -0,0 +1,9 @@
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! moment.js
//! momentjs.com
//! version : 2.29.4

File diff suppressed because one or more lines are too long

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

Loading…
Cancel
Save