diff options
Diffstat (limited to 'apps')
128 files changed, 1136 insertions, 149 deletions
diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php index a085b74585d..59f7e3987a1 100644 --- a/apps/admin_audit/appinfo/app.php +++ b/apps/admin_audit/appinfo/app.php @@ -1,6 +1,7 @@ <?php /** - + * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org> + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> * * @author Bjoern Schiessle <bjoern@schiessle.org> * @author Lukas Reschke <lukas@statuscode.ch> @@ -25,6 +26,12 @@ $logger = \OC::$server->getLogger(); $userSession = \OC::$server->getUserSession(); $groupManager = \OC::$server->getGroupManager(); +$eventDispatcher = \OC::$server->getEventDispatcher(); -$auditLogger = new \OCA\Admin_Audit\AuditLogger($logger, $userSession, $groupManager); +$auditLogger = new \OCA\Admin_Audit\AuditLogger( + $logger, + $userSession, + $groupManager, + $eventDispatcher +); $auditLogger->registerHooks(); diff --git a/apps/admin_audit/lib/actions/files.php b/apps/admin_audit/lib/actions/files.php index d7b35aa2d3e..d0a030d892a 100644 --- a/apps/admin_audit/lib/actions/files.php +++ b/apps/admin_audit/lib/actions/files.php @@ -134,4 +134,23 @@ class Files extends Action { ] ); } + + /** + * Logs preview access to a file + * + * @param array $params + */ + public function preview(array $params) { + $this->log( + 'Preview accessed: "%s" (width: "%s", height: "%s" crop: "%s", mode: "%s")', + $params, + [ + 'path', + 'width', + 'height', + 'crop', + 'mode' + ] + ); + } } diff --git a/apps/admin_audit/lib/auditlogger.php b/apps/admin_audit/lib/auditlogger.php index 674282b5fe2..20d34655507 100644 --- a/apps/admin_audit/lib/auditlogger.php +++ b/apps/admin_audit/lib/auditlogger.php @@ -1,8 +1,10 @@ <?php /** * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org> + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> * * @author Bjoern Schiessle <bjoern@schiessle.org> + * @author Lukas Reschke <lukas@statuscode.ch> * * @license GNU AGPL version 3 or any later version * @@ -21,11 +23,10 @@ * */ - namespace OCA\Admin_Audit; - use OC\Files\Filesystem; +use OC\Files\Node\File; use OCA\Admin_Audit\Actions\Auth; use OCA\Admin_Audit\Actions\Files; use OCA\Admin_Audit\Actions\GroupManagement; @@ -35,17 +36,17 @@ use OCA\Admin_Audit\Actions\UserManagement; use OCA\Admin_Audit\Actions\Versions; use OCP\IGroupManager; use OCP\ILogger; +use OCP\IPreview; use OCP\IUserSession; use OCP\Util; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class AuditLogger { - /** @var ILogger */ private $logger; - /** @var IUserSession */ private $userSession; - /** @var IGroupManager */ private $groupManager; @@ -55,17 +56,20 @@ class AuditLogger { * @param ILogger $logger * @param IUserSession $userSession * @param IGroupManager $groupManager + * @param EventDispatcherInterface $eventDispatcher */ public function __construct(ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager) { + IGroupManager $groupManager, + EventDispatcherInterface $eventDispatcher) { $this->logger = $logger; $this->userSession = $userSession; $this->groupManager = $groupManager; + $this->eventDispatcher = $eventDispatcher; } /** - * register hooks in order to log them + * Register hooks in order to log them */ public function registerHooks() { $this->userManagementHooks(); @@ -78,7 +82,7 @@ class AuditLogger { } /** - * connect to user management hooks + * Connect to user management hooks */ private function userManagementHooks() { $userActions = new UserManagement($this->logger); @@ -119,12 +123,25 @@ class AuditLogger { Util::connectHook('OC_User', 'logout', $authActions, 'logout'); } - /** - * connect to file hooks + * Connect to file hooks */ private function fileHooks() { $fileActions = new Files($this->logger); + $this->eventDispatcher->addListener( + IPreview::EVENT, + function(GenericEvent $event) use ($fileActions) { + /** @var File $file */ + $file = $event->getSubject(); + $fileActions->preview([ + 'path' => substr($file->getInternalPath(), 5), + 'width' => $event->getArguments()['width'], + 'height' => $event->getArguments()['height'], + 'crop' => $event->getArguments()['crop'], + 'mode' => $event->getArguments()['mode'] + ]); + } + ); Util::connectHook( Filesystem::CLASSNAME, @@ -177,7 +194,7 @@ class AuditLogger { } /** - * connect to trash bin hooks + * Connect to trash bin hooks */ private function trashbinHooks() { $trashActions = new Trashbin($this->logger); diff --git a/apps/dav/l10n/lt_LT.js b/apps/dav/l10n/lt_LT.js index c4e6e55c074..7fc97309154 100644 --- a/apps/dav/l10n/lt_LT.js +++ b/apps/dav/l10n/lt_LT.js @@ -1,11 +1,49 @@ OC.L10N.register( "dav", { + "Calendar" : "Kalendorius", + "Todos" : "Užduotys", + "{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}", + "You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}", + "You deleted calendar {calendar}" : "Jūs ištrynėte kalendorių {calendar}", + "{actor} updated calendar {calendar}" : "{actor} atnaujino kalendorių {calendar}", + "You updated calendar {calendar}" : "Jūs atnaujinote kalendorių {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} pradėjo bendrinti su jumis kalendorių {calendar}", + "You shared calendar {calendar} with {user}" : "Jūs pradėjote bendrinti kalendorių {calendar} su {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} pradėjo bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} nustojo bendrinti su jumis kalendorių {calendar}", + "You unshared calendar {calendar} from {user}" : "Jūs nustojote bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} nustojo bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} nustojo bendrinti su savimi kalendorių {calendar}", + "You shared calendar {calendar} with group {group}" : "Jūs pradėjote bendrinti kalendorių {calendar} su grupe {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} pradėjo bendrinti kalendorių {calendar} su grupe {group}", + "You unshared calendar {calendar} from group {group}" : "Jūs nustojote bendrinti kalendorių {calendar} su grupe {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} nustojo bendrinti kalendorių {calendar} su grupe {group}", + "{actor} created event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", + "You created event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} sukūrėte įvykį {event}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} ištrynė įvykį {event} iš kalendoriaus {calendar}", + "You deleted event {event} from calendar {calendar}" : "Jūs ištrynėte įvykį {event} iš kalendoriaus {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} atnaujino įvykį {event}", + "You updated event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} atnaujinote įvykį {event}", + "{actor} created todo {todo} in list {calendar}" : "{actor} sąraše {calendar} sukūrė užduotį {todo}", + "You created todo {todo} in list {calendar}" : "Jūs sąraše {calendar} sukūrėte užduotį {todo}", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} iš sąrašo {calendar} ištrynė užduotį {todo}", + "You deleted todo {todo} from list {calendar}" : "Jūs iš sąrašo {calendar} ištrynėte užduotį {todo}", + "{actor} updated todo {todo} in list {calendar}" : "{actor} sąraše {calendar} atnaujino užduotį {todo}", + "You updated todo {todo} in list {calendar}" : "Jūs sąraše {calendar} atnaujinote užduotį {todo}", + "{actor} solved todo {todo} in list {calendar}" : "{actor} sąraše {calendar} išsprendė užduotį {todo}", + "You solved todo {todo} in list {calendar}" : "Jūs sąraše {calendar} išsprendėte užduotį {todo}", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} sąraše {calendar} vėl pradėjo užduotį {todo}", + "You reopened todo {todo} in list {calendar}" : "Jūs sąraše {calendar} vėl pradėjote užduotį {todo}", + "A <strong>calendar</strong> was modified" : "<strong>Kalendorius</strong> buvo pakeistas", + "A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas", + "A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista", "Contact birthdays" : "Kontaktų gimtadieniai", "Personal" : "Asmeniniai", "Contacts" : "Kontaktai", - "Technical details" : "Techninės detalės", - "Remote Address: %s" : "Nutolęs adresas: %s", + "Technical details" : "Techninė informacija", + "Remote Address: %s" : "Nuotolinis adresas: %s", "Request ID: %s" : "Užklausos ID: %s" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/dav/l10n/lt_LT.json b/apps/dav/l10n/lt_LT.json index ec0749c1cef..e328eef4362 100644 --- a/apps/dav/l10n/lt_LT.json +++ b/apps/dav/l10n/lt_LT.json @@ -1,9 +1,47 @@ { "translations": { + "Calendar" : "Kalendorius", + "Todos" : "Užduotys", + "{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}", + "You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}", + "You deleted calendar {calendar}" : "Jūs ištrynėte kalendorių {calendar}", + "{actor} updated calendar {calendar}" : "{actor} atnaujino kalendorių {calendar}", + "You updated calendar {calendar}" : "Jūs atnaujinote kalendorių {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} pradėjo bendrinti su jumis kalendorių {calendar}", + "You shared calendar {calendar} with {user}" : "Jūs pradėjote bendrinti kalendorių {calendar} su {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} pradėjo bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} nustojo bendrinti su jumis kalendorių {calendar}", + "You unshared calendar {calendar} from {user}" : "Jūs nustojote bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} nustojo bendrinti kalendorių {calendar} su {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} nustojo bendrinti su savimi kalendorių {calendar}", + "You shared calendar {calendar} with group {group}" : "Jūs pradėjote bendrinti kalendorių {calendar} su grupe {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} pradėjo bendrinti kalendorių {calendar} su grupe {group}", + "You unshared calendar {calendar} from group {group}" : "Jūs nustojote bendrinti kalendorių {calendar} su grupe {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} nustojo bendrinti kalendorių {calendar} su grupe {group}", + "{actor} created event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", + "You created event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} sukūrėte įvykį {event}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} ištrynė įvykį {event} iš kalendoriaus {calendar}", + "You deleted event {event} from calendar {calendar}" : "Jūs ištrynėte įvykį {event} iš kalendoriaus {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} atnaujino įvykį {event}", + "You updated event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} atnaujinote įvykį {event}", + "{actor} created todo {todo} in list {calendar}" : "{actor} sąraše {calendar} sukūrė užduotį {todo}", + "You created todo {todo} in list {calendar}" : "Jūs sąraše {calendar} sukūrėte užduotį {todo}", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} iš sąrašo {calendar} ištrynė užduotį {todo}", + "You deleted todo {todo} from list {calendar}" : "Jūs iš sąrašo {calendar} ištrynėte užduotį {todo}", + "{actor} updated todo {todo} in list {calendar}" : "{actor} sąraše {calendar} atnaujino užduotį {todo}", + "You updated todo {todo} in list {calendar}" : "Jūs sąraše {calendar} atnaujinote užduotį {todo}", + "{actor} solved todo {todo} in list {calendar}" : "{actor} sąraše {calendar} išsprendė užduotį {todo}", + "You solved todo {todo} in list {calendar}" : "Jūs sąraše {calendar} išsprendėte užduotį {todo}", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} sąraše {calendar} vėl pradėjo užduotį {todo}", + "You reopened todo {todo} in list {calendar}" : "Jūs sąraše {calendar} vėl pradėjote užduotį {todo}", + "A <strong>calendar</strong> was modified" : "<strong>Kalendorius</strong> buvo pakeistas", + "A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas", + "A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista", "Contact birthdays" : "Kontaktų gimtadieniai", "Personal" : "Asmeniniai", "Contacts" : "Kontaktai", - "Technical details" : "Techninės detalės", - "Remote Address: %s" : "Nutolęs adresas: %s", + "Technical details" : "Techninė informacija", + "Remote Address: %s" : "Nuotolinis adresas: %s", "Request ID: %s" : "Užklausos ID: %s" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php index 999326463a1..31344b36463 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FileTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FileTest.php @@ -48,6 +48,9 @@ class FileTest extends \Test\TestCase { public function setUp() { parent::setUp(); + unset($_SERVER['HTTP_OC_CHUNKED']); + unset($_SERVER['CONTENT_LENGTH']); + unset($_SERVER['REQUEST_METHOD']); \OC_Hook::clear(); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php index 8b06678407b..10cd73baf63 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php @@ -57,6 +57,8 @@ abstract class RequestTest extends TestCase { protected function setUp() { parent::setUp(); + unset($_SERVER['HTTP_OC_CHUNKED']); + $this->serverFactory = new ServerFactory( \OC::$server->getConfig(), \OC::$server->getLogger(), diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js index 0e1608c80bb..2452a4af8d7 100644 --- a/apps/encryption/l10n/lt_LT.js +++ b/apps/encryption/l10n/lt_LT.js @@ -22,12 +22,15 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis buvo neteisingas, prašome bandyti dar kartą.", "Private key password successfully updated." : "Privačiojo rakto slaptažodis sėkmingai atnaujintas.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Jūs turite perkelti savo šifravimo raktus iš senojo šifravimo (ownCloud <= 8.0) į naująjį. Prašome vykdyti \"occ encryption:migrate\" arba susisiekti su savo administratoriumi", + "Bad Signature" : "Blogas parašas", + "Missing Signature" : "Trūksta parašo", "one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nepavyksta iššifruoti šio failo, tikriausiai, tai yra bendrinamas failas. Paprašykite failo savininko iš naujo pradėti bendrinti su jumis šį failą.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nepavyksta perskaityti šio failo, tikriausiai, tai yra bendrinamas failas. Paprašykite failo savininko iš naujo pradėti bendrinti su jumis šį failą.", "The share will expire on %s." : "Bendrinimo laikas pasibaigs %s.", "Cheers!" : "Sveikinimai!", "Default encryption module" : "Numatytasis šifravimo modulis", + "Encrypt the home storage" : "Šifruoti namų saugyklą", "Enable recovery key" : "Įjungti atstatymo raktą", "Disable recovery key" : "Išjungti atstatymo raktą", "Recovery key password" : "Atkūrimo rakto slaptažodis", @@ -37,6 +40,7 @@ OC.L10N.register( "New recovery key password" : "Naujas atstatymo rakto slaptažodis", "Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį", "Change Password" : "Pakeisti slaptažodį", + "Basic encryption module" : "Pagrindinis šifravimo modulis", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programėlė yra įjungta, tačiau jūsų raktai nėra inicijuoti. Prašome atsijungti ir vėl prisijungti", "Your private key password no longer matches your log-in password." : "Jūsų privačiojo rakto slaptažodis daugiau nebesutampa su jūsų prisijungimo slaptažodžiu.", "Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.", diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json index 55164e72a1c..49bfe1108b5 100644 --- a/apps/encryption/l10n/lt_LT.json +++ b/apps/encryption/l10n/lt_LT.json @@ -20,12 +20,15 @@ "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis buvo neteisingas, prašome bandyti dar kartą.", "Private key password successfully updated." : "Privačiojo rakto slaptažodis sėkmingai atnaujintas.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Jūs turite perkelti savo šifravimo raktus iš senojo šifravimo (ownCloud <= 8.0) į naująjį. Prašome vykdyti \"occ encryption:migrate\" arba susisiekti su savo administratoriumi", + "Bad Signature" : "Blogas parašas", + "Missing Signature" : "Trūksta parašo", "one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nepavyksta iššifruoti šio failo, tikriausiai, tai yra bendrinamas failas. Paprašykite failo savininko iš naujo pradėti bendrinti su jumis šį failą.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nepavyksta perskaityti šio failo, tikriausiai, tai yra bendrinamas failas. Paprašykite failo savininko iš naujo pradėti bendrinti su jumis šį failą.", "The share will expire on %s." : "Bendrinimo laikas pasibaigs %s.", "Cheers!" : "Sveikinimai!", "Default encryption module" : "Numatytasis šifravimo modulis", + "Encrypt the home storage" : "Šifruoti namų saugyklą", "Enable recovery key" : "Įjungti atstatymo raktą", "Disable recovery key" : "Išjungti atstatymo raktą", "Recovery key password" : "Atkūrimo rakto slaptažodis", @@ -35,6 +38,7 @@ "New recovery key password" : "Naujas atstatymo rakto slaptažodis", "Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį", "Change Password" : "Pakeisti slaptažodį", + "Basic encryption module" : "Pagrindinis šifravimo modulis", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programėlė yra įjungta, tačiau jūsų raktai nėra inicijuoti. Prašome atsijungti ir vėl prisijungti", "Your private key password no longer matches your log-in password." : "Jūsų privačiojo rakto slaptažodis daugiau nebesutampa su jūsų prisijungimo slaptažodžiu.", "Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.", diff --git a/apps/encryption/lib/Controller/StatusController.php b/apps/encryption/lib/Controller/StatusController.php index 6882475e972..0776a84ceb4 100644 --- a/apps/encryption/lib/Controller/StatusController.php +++ b/apps/encryption/lib/Controller/StatusController.php @@ -79,7 +79,7 @@ class StatusController extends Controller { case Session::NOT_INITIALIZED: $status = 'interactionNeeded'; $message = (string)$this->l->t( - 'Encryption app is enabled but your keys are not initialized, please log-out and log-in again' + 'Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again.' ); break; case Session::INIT_SUCCESSFUL: diff --git a/apps/encryption/templates/settings-personal.php b/apps/encryption/templates/settings-personal.php index 2ea55e15c80..6ab4bf6f5f4 100644 --- a/apps/encryption/templates/settings-personal.php +++ b/apps/encryption/templates/settings-personal.php @@ -9,7 +9,7 @@ script('core', 'multiselect'); <?php if ($_["initialized"] === \OCA\Encryption\Session::NOT_INITIALIZED ): ?> - <?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?> + <?php p($l->t("Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again.")); ?> <?php elseif ( $_["initialized"] === \OCA\Encryption\Session::INIT_EXECUTED ): ?> <p> diff --git a/apps/federatedfilesharing/l10n/nb.js b/apps/federatedfilesharing/l10n/nb.js index a2a0bcbdc0c..4a08fca28ba 100644 --- a/apps/federatedfilesharing/l10n/nb.js +++ b/apps/federatedfilesharing/l10n/nb.js @@ -27,7 +27,11 @@ OC.L10N.register( "Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s", "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren", "File is already shared with %s" : "Filen er allerede delt med %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Deling %s feilet, kunne ikke finne %s, kanskje tjeneren foreøyeblikket er utilgjengelig eller bruker selv-signert sertifikat.", "Could not find share" : "Kunne ikke finne ressurs", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du har mottatt \"%3$s\" som en ekstern deling fra %1$s (på vegne av %2$s)", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Du har mottatt {share} som en ekstern deling fra {user} (på vegne av {behalf})", + "You received \"%3$s\" as a remote share from %1$s" : "Du har mottatt \"%3$s\" som en ekstern deling fra %1$s", "You received {share} as a remote share from {user}" : "Du mottok {share} som en fjerndeling fra {user}", "Accept" : "Aksepter", "Decline" : "Avslå", @@ -37,6 +41,7 @@ OC.L10N.register( "Open documentation" : "Åpne dokumentasjonen", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere", + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", diff --git a/apps/federatedfilesharing/l10n/nb.json b/apps/federatedfilesharing/l10n/nb.json index ab5cfe57fbf..9978ec26636 100644 --- a/apps/federatedfilesharing/l10n/nb.json +++ b/apps/federatedfilesharing/l10n/nb.json @@ -25,7 +25,11 @@ "Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s", "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren", "File is already shared with %s" : "Filen er allerede delt med %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Deling %s feilet, kunne ikke finne %s, kanskje tjeneren foreøyeblikket er utilgjengelig eller bruker selv-signert sertifikat.", "Could not find share" : "Kunne ikke finne ressurs", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du har mottatt \"%3$s\" som en ekstern deling fra %1$s (på vegne av %2$s)", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Du har mottatt {share} som en ekstern deling fra {user} (på vegne av {behalf})", + "You received \"%3$s\" as a remote share from %1$s" : "Du har mottatt \"%3$s\" som en ekstern deling fra %1$s", "You received {share} as a remote share from {user}" : "Du mottok {share} som en fjerndeling fra {user}", "Accept" : "Aksepter", "Decline" : "Avslå", @@ -35,6 +39,7 @@ "Open documentation" : "Åpne dokumentasjonen", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere", + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", diff --git a/apps/federation/l10n/nb.js b/apps/federation/l10n/nb.js index 6400c199bee..02f9e339b9b 100644 --- a/apps/federation/l10n/nb.js +++ b/apps/federation/l10n/nb.js @@ -6,6 +6,7 @@ OC.L10N.register( "No server to federate with found" : "Ingen tjener å forene med ble funnet", "Could not add server" : "Kunne ikke legge til tjener", "Federation" : "Sammenknytting", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Føderasjon tillater deg å koble sammen andre betrodde tjenere for utviksling av bruker kataloger. For eksempel vil det bli brukt for autofullføring av eksterne brukere for føderal deling.", "Add server automatically once a federated share was created successfully" : "Legg til server automatisk når en sammenknyttet deling er blitt opprettet", "Trusted servers" : "Klarerte tjenere", "+ Add trusted server" : "+ Legg til klarert tjener", diff --git a/apps/federation/l10n/nb.json b/apps/federation/l10n/nb.json index cdd62ad35f2..3a047793ae8 100644 --- a/apps/federation/l10n/nb.json +++ b/apps/federation/l10n/nb.json @@ -4,6 +4,7 @@ "No server to federate with found" : "Ingen tjener å forene med ble funnet", "Could not add server" : "Kunne ikke legge til tjener", "Federation" : "Sammenknytting", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Føderasjon tillater deg å koble sammen andre betrodde tjenere for utviksling av bruker kataloger. For eksempel vil det bli brukt for autofullføring av eksterne brukere for føderal deling.", "Add server automatically once a federated share was created successfully" : "Legg til server automatisk når en sammenknyttet deling er blitt opprettet", "Trusted servers" : "Klarerte tjenere", "+ Add trusted server" : "+ Legg til klarert tjener", diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index 2bb4d98c158..8b5678b331a 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -6,7 +6,7 @@ <licence>AGPL</licence> <author>Robin Appelman, Vincent Petry</author> <default_enable/> - <version>1.7.0</version> + <version>1.7.2</version> <types> <filesystem/> </types> @@ -52,6 +52,7 @@ <command>OCA\Files\Command\Scan</command> <command>OCA\Files\Command\DeleteOrphanedFiles</command> <command>OCA\Files\Command\TransferOwnership</command> + <command>OCA\Files\Command\ScanAppData</command> </commands> <navigation> diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.scss index cab6a684042..cab6a684042 100644 --- a/apps/files/css/detailsView.css +++ b/apps/files/css/detailsView.scss diff --git a/apps/files/css/files.css b/apps/files/css/files.scss index 54ed05385fa..54ed05385fa 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.scss diff --git a/apps/files/css/merged.scss b/apps/files/css/merged.scss new file mode 100644 index 00000000000..d65bac512f1 --- /dev/null +++ b/apps/files/css/merged.scss @@ -0,0 +1,4 @@ +@import 'files.scss'; +@import 'upload.scss'; +@import 'mobile.scss'; +@import 'detailsView.scss'; diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.scss index 4a5abd2b73c..4a5abd2b73c 100644 --- a/apps/files/css/mobile.css +++ b/apps/files/css/mobile.scss diff --git a/apps/files/css/upload.css b/apps/files/css/upload.scss index 6f337a27578..6f337a27578 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.scss diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 99f888ce0f7..5b345a45b67 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -101,7 +101,10 @@ throw t('files', '"{name}" is an invalid file name.', {name: name}); } else if (trimmedName.length === 0) { throw t('files', 'File name cannot be empty.'); + } else if (OC.fileIsBlacklisted(trimmedName)) { + throw t('files', '"{name}" is not an allowed filetype', {name: name}); } + return true; }, displayStorageWarnings: function() { diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 2f1da81d6ff..db71fc8b33e 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Neu", "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "\"{name}\" is not an allowed filetype" : "„{name}“ ist kein erlaubter Dateityp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index a25d4bf47ac..39b928097ae 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -56,6 +56,7 @@ "New" : "Neu", "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "\"{name}\" is not an allowed filetype" : "„{name}“ ist kein erlaubter Dateityp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 88d1f3545f5..21e08bab11d 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Neu", "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "\"{name}\" is not an allowed filetype" : "„{name}“ ist kein erlaubter Dateityp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 5f24b4b319b..0f22fd2ca7e 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -56,6 +56,7 @@ "New" : "Neu", "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", + "\"{name}\" is not an allowed filetype" : "„{name}“ ist kein erlaubter Dateityp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", "Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 32833c62af0..7115a21570d 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -45,6 +45,7 @@ OC.L10N.register( "Could not create file \"{file}\" because it already exists" : "No se pudo crear archivo \"{file}\" porque ya existe", "Could not create folder \"{dir}\" because it already exists" : "No se pudo crear la carpeta \"{dir}\" porque ya existe", "Error deleting file \"{fileName}\"." : "Error al borrar el archivo \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados de búsqueda en otras carpetas para {tag}{filter}{endtag}", "Name" : "Nombre", "Size" : "Tamaño", "Modified" : "Modificado", @@ -57,6 +58,7 @@ OC.L10N.register( "New" : "Nuevo", "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" no es un tipo de archivo permitido", "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 91807b49f1f..bd3f12be08b 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -43,6 +43,7 @@ "Could not create file \"{file}\" because it already exists" : "No se pudo crear archivo \"{file}\" porque ya existe", "Could not create folder \"{dir}\" because it already exists" : "No se pudo crear la carpeta \"{dir}\" porque ya existe", "Error deleting file \"{fileName}\"." : "Error al borrar el archivo \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados de búsqueda en otras carpetas para {tag}{filter}{endtag}", "Name" : "Nombre", "Size" : "Tamaño", "Modified" : "Modificado", @@ -55,6 +56,7 @@ "New" : "Nuevo", "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" no es un tipo de archivo permitido", "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)", diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js index 557b4e9ff1c..ae678bb4c89 100644 --- a/apps/files/l10n/fi.js +++ b/apps/files/l10n/fi.js @@ -88,6 +88,8 @@ OC.L10N.register( "{user} restored {file}" : "{user} palautti tiedoston {file}", "You renamed {oldfile} to {newfile}" : "Uudelleennimesit tiedoston {oldfile} tiedostoksi {newfile}", "{user} renamed {oldfile} to {newfile}" : "{user} uudelleennimesi tiedoston {oldfile} tiedostoksi {newfile}", + "You moved {oldfile} to {newfile}" : "Siirsit tiedoston {oldfile} tiedostoksi {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} siirsi tiedoston {oldfile} tiedostoksi {newfile}", "A file has been added to or removed from your <strong>favorites</strong>" : "Tiedosto on lisätty tai poistettu <strong>suosikeista</strong>", "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong> tai se on <strong>uudelleennimetty</strong>", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json index 2224ca4ac24..cef9ff0b63d 100644 --- a/apps/files/l10n/fi.json +++ b/apps/files/l10n/fi.json @@ -86,6 +86,8 @@ "{user} restored {file}" : "{user} palautti tiedoston {file}", "You renamed {oldfile} to {newfile}" : "Uudelleennimesit tiedoston {oldfile} tiedostoksi {newfile}", "{user} renamed {oldfile} to {newfile}" : "{user} uudelleennimesi tiedoston {oldfile} tiedostoksi {newfile}", + "You moved {oldfile} to {newfile}" : "Siirsit tiedoston {oldfile} tiedostoksi {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} siirsi tiedoston {oldfile} tiedostoksi {newfile}", "A file has been added to or removed from your <strong>favorites</strong>" : "Tiedosto on lisätty tai poistettu <strong>suosikeista</strong>", "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong> tai se on <strong>uudelleennimetty</strong>", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index de31b6b4174..af9889ed706 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" n'est pas un nom de fichier autorisé.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 156fe4656ec..0ad6ef46491 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -56,6 +56,7 @@ "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" n'est pas un nom de fichier autorisé.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 745235de08d..4edf2cdbc66 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -45,6 +45,7 @@ OC.L10N.register( "Could not create file \"{file}\" because it already exists" : "Gat ekki búið til skrána \"{file}\" vegna þess að hún er þegar til", "Could not create folder \"{dir}\" because it already exists" : "Gat ekki búið til möppuna \"{dir}\" vegna þess að hún er þegar til", "Error deleting file \"{fileName}\"." : "Villa við að eyða skránni \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Engar leitarniðurstöður í öðrum möppum fyrir {tag}{filter}{endtag}", "Name" : "Heiti", "Size" : "Stærð", "Modified" : "Breytt", @@ -57,6 +58,7 @@ OC.L10N.register( "New" : "Nýtt", "\"{name}\" is an invalid file name." : "\"{name}\" er ógilt skráarheiti.", "File name cannot be empty." : "Heiti skráar má ekki vera tómt", + "\"{name}\" is not an allowed filetype" : "\"{name}\" er ógild skráartegund", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Geymslupláss {owner} er fullt, ekki er lengur hægt að uppfæra eða samstilla skrár!", "Your storage is full, files can not be updated or synced anymore!" : "Geymsluplássið þitt er fullt, ekki er lengur hægt að uppfæra eða samstilla skrár!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Geymslupláss {owner} er næstum fullt ({usedSpacePercent}%)", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 578732b6505..c07bae1d0f8 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -43,6 +43,7 @@ "Could not create file \"{file}\" because it already exists" : "Gat ekki búið til skrána \"{file}\" vegna þess að hún er þegar til", "Could not create folder \"{dir}\" because it already exists" : "Gat ekki búið til möppuna \"{dir}\" vegna þess að hún er þegar til", "Error deleting file \"{fileName}\"." : "Villa við að eyða skránni \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Engar leitarniðurstöður í öðrum möppum fyrir {tag}{filter}{endtag}", "Name" : "Heiti", "Size" : "Stærð", "Modified" : "Breytt", @@ -55,6 +56,7 @@ "New" : "Nýtt", "\"{name}\" is an invalid file name." : "\"{name}\" er ógilt skráarheiti.", "File name cannot be empty." : "Heiti skráar má ekki vera tómt", + "\"{name}\" is not an allowed filetype" : "\"{name}\" er ógild skráartegund", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Geymslupláss {owner} er fullt, ekki er lengur hægt að uppfæra eða samstilla skrár!", "Your storage is full, files can not be updated or synced anymore!" : "Geymsluplássið þitt er fullt, ekki er lengur hægt að uppfæra eða samstilla skrár!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Geymslupláss {owner} er næstum fullt ({usedSpacePercent}%)", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index dc6c0705804..6e48f5abf8a 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "新規作成", "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", + "\"{name}\" is not an allowed filetype" : "\"{name}\" は無効なファイル形式です", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", "Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 13a84e3772f..e0f148d15bf 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -56,6 +56,7 @@ "New" : "新規作成", "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", + "\"{name}\" is not an allowed filetype" : "\"{name}\" は無効なファイル形式です", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", "Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 8fb0e2ae97a..23944a41e60 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -45,6 +45,7 @@ OC.L10N.register( "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja", "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja", "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Kituose aplankuose nėra paieškos rezultatų, skirtų {tag}{filter}{endtag}", "Name" : "Pavadinimas", "Size" : "Dydis", "Modified" : "Pakeista", @@ -57,6 +58,7 @@ OC.L10N.register( "New" : "Naujas", "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" nėra leidžiamas failo tipas", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų saugykla pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index 9e352bf98ab..cf8b5e007b9 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -43,6 +43,7 @@ "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja", "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja", "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Kituose aplankuose nėra paieškos rezultatų, skirtų {tag}{filter}{endtag}", "Name" : "Pavadinimas", "Size" : "Dydis", "Modified" : "Pakeista", @@ -55,6 +56,7 @@ "New" : "Naujas", "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" nėra leidžiamas failo tipas", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų saugykla pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)", diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js index 4726bc8be27..cc86386d9c8 100644 --- a/apps/files/l10n/nb.js +++ b/apps/files/l10n/nb.js @@ -45,6 +45,7 @@ OC.L10N.register( "Could not create file \"{file}\" because it already exists" : "Klarte ikke å opprette fil \"{file}\" fordi den finnes allerede", "Could not create folder \"{dir}\" because it already exists" : "Klarete ikke å opprette mappe \"{dir}\" fordi den finnes allerede", "Error deleting file \"{fileName}\"." : "Feil ved sletting av fil \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Ingen søkeresultater i andre mapper etter {tag}{filter}{endtag}", "Name" : "Navn", "Size" : "Størrelse", "Modified" : "Endret", @@ -57,6 +58,7 @@ OC.L10N.register( "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" er ikke en tillatt filtype", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)", @@ -173,6 +175,9 @@ OC.L10N.register( "%2$s restored %1$s" : "%2$s gjenopprettet %1$s", "Changed by %2$s" : "Endret av %2$s", "Deleted by %2$s" : "Slettet av %2$s", - "Restored by %2$s" : "Gjenopprettet av %2$s" + "Restored by %2$s" : "Gjenopprettet av %2$s", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} time igjen","{hours}:{minutes}:{seconds} timer igjen"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutt igjen","{minutes}:{seconds} minutter igjen"], + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekund igjen","{seconds} sekunder igjen"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json index 0fb4e6bdd7f..7057a26fc8a 100644 --- a/apps/files/l10n/nb.json +++ b/apps/files/l10n/nb.json @@ -43,6 +43,7 @@ "Could not create file \"{file}\" because it already exists" : "Klarte ikke å opprette fil \"{file}\" fordi den finnes allerede", "Could not create folder \"{dir}\" because it already exists" : "Klarete ikke å opprette mappe \"{dir}\" fordi den finnes allerede", "Error deleting file \"{fileName}\"." : "Feil ved sletting av fil \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Ingen søkeresultater i andre mapper etter {tag}{filter}{endtag}", "Name" : "Navn", "Size" : "Størrelse", "Modified" : "Endret", @@ -55,6 +56,7 @@ "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" er ikke en tillatt filtype", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)", @@ -171,6 +173,9 @@ "%2$s restored %1$s" : "%2$s gjenopprettet %1$s", "Changed by %2$s" : "Endret av %2$s", "Deleted by %2$s" : "Slettet av %2$s", - "Restored by %2$s" : "Gjenopprettet av %2$s" + "Restored by %2$s" : "Gjenopprettet av %2$s", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} time igjen","{hours}:{minutes}:{seconds} timer igjen"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutt igjen","{minutes}:{seconds} minutter igjen"], + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekund igjen","{seconds} sekunder igjen"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 2327b33efa1..f8c3fb7b5d8 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" bestandstype is een niet toegestaande", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", "Your storage is full, files can not be updated or synced anymore!" : "Je opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)", @@ -104,18 +105,18 @@ OC.L10N.register( "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan je <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A new file or folder has been <strong>restored</strong>" : "Een nieuw bestand of een nieuwe map is <strong>hersteld</strong>", "Upload (max. %s)" : "Upload (max. %s)", - "File handling" : "Bestand", + "File handling" : "Bestand afhandeling", "Maximum upload size" : "Maximale bestandsgrootte voor uploads", "max. possible: " : "max. mogelijk: ", "Save" : "Bewaren", "With PHP-FPM it might take 5 minutes for changes to be applied." : "Met PHP-FPM kan het 5 minuten duren voordat wijzigingen zijn doorgevoerd.", "Missing permissions to edit from here." : "Ontbrekende rechten om vanaf hier te bewerken.", "Settings" : "Instellingen", - "Show hidden files" : "Tonen verborgen bestanden", + "Show hidden files" : "Verborgen bestanden tonen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>", "No files in here" : "Hier geen bestanden", - "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met je apparaten!", + "Upload some content or sync with your devices!" : "Upload je inhoud of synchroniseer met je apparaten!", "No entries found in this folder" : "Niets", "Select all" : "Alles selecteren", "Upload too large" : "Upload is te groot", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index d127eeecd11..4aa72e2d7d4 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -56,6 +56,7 @@ "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" bestandstype is een niet toegestaande", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", "Your storage is full, files can not be updated or synced anymore!" : "Je opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)", @@ -102,18 +103,18 @@ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan je <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A new file or folder has been <strong>restored</strong>" : "Een nieuw bestand of een nieuwe map is <strong>hersteld</strong>", "Upload (max. %s)" : "Upload (max. %s)", - "File handling" : "Bestand", + "File handling" : "Bestand afhandeling", "Maximum upload size" : "Maximale bestandsgrootte voor uploads", "max. possible: " : "max. mogelijk: ", "Save" : "Bewaren", "With PHP-FPM it might take 5 minutes for changes to be applied." : "Met PHP-FPM kan het 5 minuten duren voordat wijzigingen zijn doorgevoerd.", "Missing permissions to edit from here." : "Ontbrekende rechten om vanaf hier te bewerken.", "Settings" : "Instellingen", - "Show hidden files" : "Tonen verborgen bestanden", + "Show hidden files" : "Verborgen bestanden tonen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>", "No files in here" : "Hier geen bestanden", - "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met je apparaten!", + "Upload some content or sync with your devices!" : "Upload je inhoud of synchroniseer met je apparaten!", "No entries found in this folder" : "Niets", "Select all" : "Alles selecteren", "Upload too large" : "Upload is te groot", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index fa75ce7248e..28ed359aae8 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Nowy", "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", + "\"{name}\" is not an allowed filetype" : "typ pliku \"{name}\" nie jest dozwolony", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 14c4d352c64..a44b5634182 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -56,6 +56,7 @@ "New" : "Nowy", "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", + "\"{name}\" is not an allowed filetype" : "typ pliku \"{name}\" nie jest dozwolony", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index dd108c24dfd..cfe2ab52080 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -45,6 +45,7 @@ OC.L10N.register( "Could not create file \"{file}\" because it already exists" : "Невозможно создать файл \"{file}\" потому что уже имеется", "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать каталог \"{dir}\" потому что он уже имеется", "Error deleting file \"{fileName}\"." : "Ошибка удаления файла \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Нет результатов поиска в других папках для {tag}{filter}{endtag}", "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён", @@ -57,6 +58,7 @@ OC.L10N.register( "New" : "Новый", "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", + "\"{name}\" is not an allowed filetype" : "«{name}» - недопустимый тип файла.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 337bde714a1..3ac19f96699 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -43,6 +43,7 @@ "Could not create file \"{file}\" because it already exists" : "Невозможно создать файл \"{file}\" потому что уже имеется", "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать каталог \"{dir}\" потому что он уже имеется", "Error deleting file \"{fileName}\"." : "Ошибка удаления файла \"{fileName}\".", + "No search results in other folders for {tag}{filter}{endtag}" : "Нет результатов поиска в других папках для {tag}{filter}{endtag}", "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён", @@ -55,6 +56,7 @@ "New" : "Новый", "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", + "\"{name}\" is not an allowed filetype" : "«{name}» - недопустимый тип файла.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", "Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)", diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js index ae4a98ce84c..98227338b35 100644 --- a/apps/files/l10n/sk.js +++ b/apps/files/l10n/sk.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", "File name cannot be empty." : "Meno súboru nemôže byť prázdne", + "\"{name}\" is not an allowed filetype" : "\"{name}\" nie je povolený typ súboru", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložisko používateľa {owner} je plné, súbory sa viac nedajú aktualizovať ani synchronizovať.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úloisko používateľa {owner} je takmer plné ({usedSpacePercent}%)", diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json index de5d4e0457a..88bd0953c5f 100644 --- a/apps/files/l10n/sk.json +++ b/apps/files/l10n/sk.json @@ -56,6 +56,7 @@ "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", "File name cannot be empty." : "Meno súboru nemôže byť prázdne", + "\"{name}\" is not an allowed filetype" : "\"{name}\" nie je povolený typ súboru", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložisko používateľa {owner} je plné, súbory sa viac nedajú aktualizovať ani synchronizovať.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úloisko používateľa {owner} je takmer plné ({usedSpacePercent}%)", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index 2dc8deaea71..6a516d86e39 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" dosya türüne izin verilmiyor", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} için boş depolama alanı kalmadı. Artık dosyalar güncellenmeyecek ya da eşitlenmeyecek!", "Your storage is full, files can not be updated or synced anymore!" : "Boş depolama alanınız kalmadı. Artık dosyalar güncellenmeyecek ya da eşitlenmeyecek!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} boş depolama alanı bitmek üzere ({usedSpacePercent}%)", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index 44b53b4221f..96a0665245a 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -56,6 +56,7 @@ "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" dosya türüne izin verilmiyor", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} için boş depolama alanı kalmadı. Artık dosyalar güncellenmeyecek ya da eşitlenmeyecek!", "Your storage is full, files can not be updated or synced anymore!" : "Boş depolama alanınız kalmadı. Artık dosyalar güncellenmeyecek ya da eşitlenmeyecek!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} boş depolama alanı bitmek üzere ({usedSpacePercent}%)", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index bb24bf6bb88..5f8e2c88d1f 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "新建", "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名", "File name cannot be empty." : "文件名不能为空.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" 不是允许的文件类型", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!", "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index a0a6955e819..487d3bf29e1 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -56,6 +56,7 @@ "New" : "新建", "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名", "File name cannot be empty." : "文件名不能为空.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" 不是允许的文件类型", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!", "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", diff --git a/apps/files/lib/Command/Scan.php b/apps/files/lib/Command/Scan.php index 0234fb435a7..24b47aca9a4 100644 --- a/apps/files/lib/Command/Scan.php +++ b/apps/files/lib/Command/Scan.php @@ -30,6 +30,7 @@ namespace OCA\Files\Command; use Doctrine\DBAL\Connection; use OC\Core\Command\Base; +use OC\Core\Command\InterruptedException; use OC\ForbiddenException; use OCP\Files\StorageNotAvailableException; use OCP\IDBConnection; @@ -117,14 +118,14 @@ class Scan extends Base { $output->writeln("\tFile <info>$path</info>"); $this->filesCounter += 1; if ($this->hasBeenInterrupted()) { - throw new \Exception('ctrl-c'); + throw new InterruptedException(); } }); $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) { $output->writeln("\tFolder <info>$path</info>"); $this->foldersCounter += 1; if ($this->hasBeenInterrupted()) { - throw new \Exception('ctrl-c'); + throw new InterruptedException(); } }); $scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) { @@ -135,13 +136,13 @@ class Scan extends Base { $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function () use ($output) { $this->filesCounter += 1; if ($this->hasBeenInterrupted()) { - throw new \Exception('ctrl-c'); + throw new InterruptedException(); } }); $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function () use ($output) { $this->foldersCounter += 1; if ($this->hasBeenInterrupted()) { - throw new \Exception('ctrl-c'); + throw new InterruptedException(); } }); } @@ -161,11 +162,12 @@ class Scan extends Base { } catch (ForbiddenException $e) { $output->writeln("<error>Home storage for user $user not writable</error>"); $output->writeln("Make sure you're running the scan command only as the user the web server runs as"); + } catch (InterruptedException $e) { + # exit the function if ctrl-c has been pressed + $output->writeln('Interrupted by user'); } catch (\Exception $e) { - if ($e->getMessage() !== 'ctrl-c') { - $output->writeln('<error>Exception while scanning: ' . $e->getMessage() . "\n" . $e->getTraceAsString() . '</error>'); - } - return; + $output->writeln('<error>Exception during scan: ' . $e->getMessage() . '</error>'); + $output->writeln('<error>' . $e->getTraceAsString() . '</error>'); } } diff --git a/apps/files/lib/Command/ScanAppData.php b/apps/files/lib/Command/ScanAppData.php new file mode 100644 index 00000000000..365e2e3cb2e --- /dev/null +++ b/apps/files/lib/Command/ScanAppData.php @@ -0,0 +1,284 @@ +<?php + + +namespace OCA\Files\Command; + +use Doctrine\DBAL\Connection; +use OC\Core\Command\Base; +use OC\Core\Command\InterruptedException; +use OC\ForbiddenException; +use OCP\Files\IRootFolder; +use OCP\Files\NotFoundException; +use OCP\Files\StorageNotAvailableException; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IUserManager; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Helper\Table; + +class ScanAppData extends Base { + + /** @var IRootFolder */ + protected $root; + /** @var IConfig */ + protected $config; + /** @var float */ + protected $execTime = 0; + /** @var int */ + protected $foldersCounter = 0; + /** @var int */ + protected $filesCounter = 0; + + public function __construct(IRootFolder $rootFolder, IConfig $config) { + parent::__construct(); + + $this->root = $rootFolder; + $this->config = $config; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('files:scan-app-data') + ->setDescription('rescan the AppData folder') + ->addOption( + 'quiet', + 'q', + InputOption::VALUE_NONE, + 'suppress any output' + ) + ->addOption( + 'verbose', + '-v|vv|vvv', + InputOption::VALUE_NONE, + 'verbose the output' + ); + } + + public function checkScanWarning($fullPath, OutputInterface $output) { + $normalizedPath = basename(\OC\Files\Filesystem::normalizePath($fullPath)); + $path = basename($fullPath); + + if ($normalizedPath !== $path) { + $output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>'); + } + } + + protected function scanFiles($verbose, OutputInterface $output) { + try { + $appData = $this->getAppDataFolder(); + } catch (NotFoundException $e) { + $output->writeln('NoAppData folder found'); + return; + } + + $connection = $this->reconnectToDatabase($output); + $scanner = new \OC\Files\Utils\Scanner(null, $connection, \OC::$server->getLogger()); + # check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception + # printout and count + if ($verbose) { + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) { + $output->writeln("\tFile <info>$path</info>"); + $this->filesCounter += 1; + if ($this->hasBeenInterrupted()) { + throw new InterruptedException(); + } + }); + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) { + $output->writeln("\tFolder <info>$path</info>"); + $this->foldersCounter += 1; + if ($this->hasBeenInterrupted()) { + throw new InterruptedException(); + } + }); + $scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) { + $output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")"); + }); + # count only + } else { + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function () use ($output) { + $this->filesCounter += 1; + if ($this->hasBeenInterrupted()) { + throw new InterruptedException(); + } + }); + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function () use ($output) { + $this->foldersCounter += 1; + if ($this->hasBeenInterrupted()) { + throw new InterruptedException(); + } + }); + } + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) { + $this->checkScanWarning($path, $output); + }); + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) { + $this->checkScanWarning($path, $output); + }); + + try { + $scanner->scan($appData->getPath()); + } catch (ForbiddenException $e) { + $output->writeln("<error>Storage not writable</error>"); + $output->writeln("Make sure you're running the scan command only as the user the web server runs as"); + } catch (InterruptedException $e) { + # exit the function if ctrl-c has been pressed + $output->writeln('Interrupted by user'); + } catch (\Exception $e) { + $output->writeln('<error>Exception during scan: ' . $e->getMessage() . '</error>'); + $output->writeln('<error>' . $e->getTraceAsString() . '</error>'); + } + } + + + protected function execute(InputInterface $input, OutputInterface $output) { + # no messaging level option means: no full printout but statistics + # $quiet means no print at all + # $verbose means full printout including statistics + # -q -v full stat + # 0 0 no yes + # 0 1 yes yes + # 1 -- no no (quiet overrules verbose) + $verbose = $input->getOption('verbose'); + $quiet = $input->getOption('quiet'); + # restrict the verbosity level to VERBOSITY_VERBOSE + if ($output->getVerbosity() > OutputInterface::VERBOSITY_VERBOSE) { + $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); + } + if ($quiet) { + $verbose = false; + } + + $output->writeln("\nScanning AppData for files"); + + $this->initTools(); + + $this->scanFiles($verbose, $output); + + # stat: printout statistics if $quiet was not set + if (!$quiet) { + $this->presentStats($output); + } + } + + /** + * Initialises some useful tools for the Command + */ + protected function initTools() { + // Start the timer + $this->execTime = -microtime(true); + // Convert PHP errors to exceptions + set_error_handler([$this, 'exceptionErrorHandler'], E_ALL); + } + + /** + * Processes PHP errors as exceptions in order to be able to keep track of problems + * + * @see https://secure.php.net/manual/en/function.set-error-handler.php + * + * @param int $severity the level of the error raised + * @param string $message + * @param string $file the filename that the error was raised in + * @param int $line the line number the error was raised + * + * @throws \ErrorException + */ + public function exceptionErrorHandler($severity, $message, $file, $line) { + if (!(error_reporting() & $severity)) { + // This error code is not included in error_reporting + return; + } + throw new \ErrorException($message, 0, $severity, $file, $line); + } + + /** + * @param OutputInterface $output + */ + protected function presentStats(OutputInterface $output) { + // Stop the timer + $this->execTime += microtime(true); + $output->writeln(""); + + $headers = [ + 'Folders', 'Files', 'Elapsed time' + ]; + + $this->showSummary($headers, null, $output); + } + + /** + * Shows a summary of operations + * + * @param string[] $headers + * @param string[] $rows + * @param OutputInterface $output + */ + protected function showSummary($headers, $rows, OutputInterface $output) { + $niceDate = $this->formatExecTime(); + if (!$rows) { + $rows = [ + $this->foldersCounter, + $this->filesCounter, + $niceDate, + ]; + } + $table = new Table($output); + $table + ->setHeaders($headers) + ->setRows([$rows]); + $table->render(); + } + + + /** + * Formats microtime into a human readable format + * + * @return string + */ + protected function formatExecTime() { + list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime))); + + # if you want to have microseconds add this: . '.' . $tens; + return date('H:i:s', $secs); + } + + /** + * @return \OCP\IDBConnection + */ + protected function reconnectToDatabase(OutputInterface $output) { + /** @var Connection | IDBConnection $connection*/ + $connection = \OC::$server->getDatabaseConnection(); + try { + $connection->close(); + } catch (\Exception $ex) { + $output->writeln("<info>Error while disconnecting from database: {$ex->getMessage()}</info>"); + } + while (!$connection->isConnected()) { + try { + $connection->connect(); + } catch (\Exception $ex) { + $output->writeln("<info>Error while re-connecting to database: {$ex->getMessage()}</info>"); + sleep(60); + } + } + return $connection; + } + + /** + * @return \OCP\Files\Folder + * @throws NotFoundException + */ + private function getAppDataFolder() { + $instanceId = $this->config->getSystemValue('instanceid', null); + + if ($instanceId === null) { + throw new NotFoundException(); + } + + return $this->root->get('appdata_'.$instanceId); + } +} diff --git a/apps/files/lib/Command/TransferOwnership.php b/apps/files/lib/Command/TransferOwnership.php index 96281b5226c..aa07cf9de91 100644 --- a/apps/files/lib/Command/TransferOwnership.php +++ b/apps/files/lib/Command/TransferOwnership.php @@ -34,6 +34,7 @@ use OCP\IUserManager; use OCP\Share\IManager; use OCP\Share\IShare; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -66,6 +67,9 @@ class TransferOwnership extends Command { private $destinationUser; /** @var string */ + private $sourcePath; + + /** @var string */ private $finalTarget; public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) { @@ -88,6 +92,13 @@ class TransferOwnership extends Command { 'destination-user', InputArgument::REQUIRED, 'user who will be the new owner of the files' + ) + ->addOption( + 'path', + null, + InputOption::VALUE_REQUIRED, + 'selectively provide the path to transfer. For example --path="folder_name"', + '' ); } @@ -107,6 +118,8 @@ class TransferOwnership extends Command { $this->sourceUser = $sourceUserObject->getUID(); $this->destinationUser = $destinationUserObject->getUID(); + $sourcePathOption = ltrim($input->getOption('path'), '/'); + $this->sourcePath = rtrim($this->sourceUser . '/files/' . $sourcePathOption, '/'); // target user has to be ready if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) { @@ -121,6 +134,12 @@ class TransferOwnership extends Command { Filesystem::initMountPoints($this->sourceUser); Filesystem::initMountPoints($this->destinationUser); + $view = new View(); + if (!$view->is_dir($this->sourcePath)) { + $output->writeln("<error>Unknown path provided: $sourcePathOption</error>"); + return 1; + } + // analyse source folder $this->analyse($output); @@ -155,7 +174,8 @@ class TransferOwnership extends Command { $progress = new ProgressBar($output); $progress->start(); $self = $this; - $this->walkFiles($view, "$this->sourceUser/files", + + $this->walkFiles($view, $this->sourcePath, function (FileInfo $fileInfo) use ($progress, $self) { if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) { // only analyze into folders from main storage, @@ -216,9 +236,18 @@ class TransferOwnership extends Command { protected function transfer(OutputInterface $output) { $view = new View(); $output->writeln("Transferring files to $this->finalTarget ..."); - $view->rename("$this->sourceUser/files", $this->finalTarget); - // because the files folder is moved away we need to recreate it - $view->mkdir("$this->sourceUser/files"); + + // This change will help user to transfer the folder specified using --path option. + // Else only the content inside folder is transferred which is not correct. + if($this->sourcePath !== "$this->sourceUser/files") { + $view->mkdir($this->finalTarget); + $this->finalTarget = $this->finalTarget . '/' . basename($this->sourcePath); + } + $view->rename($this->sourcePath, $this->finalTarget); + if (!is_dir("$this->sourceUser/files")) { + // because the files folder is moved away we need to recreate it + $view->mkdir("$this->sourceUser/files"); + } } /** diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 788840ff1cc..a1f01cb8a38 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -152,9 +152,6 @@ class ViewController extends Controller { $nav = new \OCP\Template('files', 'appnavigation', ''); // Load the files we need - \OCP\Util::addStyle('files', 'files'); - \OCP\Util::addStyle('files', 'upload'); - \OCP\Util::addStyle('files', 'mobile'); \OCP\Util::addScript('files', 'app'); \OCP\Util::addScript('files', 'file-upload'); \OCP\Util::addScript('files', 'newfilemenu'); @@ -179,7 +176,7 @@ class ViewController extends Controller { \OCP\Util::addScript('files', 'detailtabview'); \OCP\Util::addScript('files', 'mainfileinfodetailview'); \OCP\Util::addScript('files', 'detailsview'); - \OCP\Util::addStyle('files', 'detailsView'); + \OCP\Util::addStyle('files', 'merged'); \OC_Util::addVendorScript('core', 'handlebars/handlebars'); diff --git a/apps/files/tests/js/filesSpec.js b/apps/files/tests/js/filesSpec.js index b7627d59fdf..5c3f68b2ba4 100644 --- a/apps/files/tests/js/filesSpec.js +++ b/apps/files/tests/js/filesSpec.js @@ -58,7 +58,9 @@ describe('OCA.Files.Files tests', function() { ' ..', '.. ', '. ', - ' .' + ' .', + 'foo.part', + 'bar.filepart' ]; for ( var i = 0; i < fileNames.length; i++ ) { var threwException = false; diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 0270b7a6957..976c0c00b89 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -719,6 +719,10 @@ MountConfigListView.prototype = _.extend({ self.deleteStorageConfig($(this).closest('tr')); }); + this.$el.on('click', 'td.save>img', function () { + self.saveStorageConfig($(this).closest('tr')); + }); + this.$el.on('click', 'td.mountOptionsToggle>img', function() { self._showMountOptionsDropdown($(this).closest('tr')); }); @@ -737,13 +741,6 @@ MountConfigListView.prototype = _.extend({ highlightInput($target); var $tr = $target.closest('tr'); this.updateStatus($tr, null); - - var timer = $tr.data('save-timer'); - clearTimeout(timer); - timer = setTimeout(function() { - self.saveStorageConfig($tr, null, timer); - }, 2000); - $tr.data('save-timer', timer); }, _onSelectBackend: function(event) { @@ -813,8 +810,7 @@ MountConfigListView.prototype = _.extend({ $tr.data('storageConfig', storageConfig); $tr.show(); - $tr.find('td').last().attr('class', 'remove'); - $tr.find('td.mountOptionsToggle').removeClass('hidden'); + $tr.find('td.mountOptionsToggle, td.save, td.remove').removeClass('hidden'); $tr.find('td').last().removeAttr('style'); $tr.removeAttr('id'); $tr.find('select#selectBackend'); diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 3b1839bb4fb..4f1fadc253e 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -126,6 +126,6 @@ OC.L10N.register( "Delete" : "Verwijder", "Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen", "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen", - "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}" + "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de Nextcloud server krijgen: {code} {type}" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index 5ffd6fcd4e3..e744f0b9bf3 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -124,6 +124,6 @@ "Delete" : "Verwijder", "Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen", "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen", - "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}" + "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de Nextcloud server krijgen: {code} {type}" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/sk.js b/apps/files_external/l10n/sk.js new file mode 100644 index 00000000000..a288544ce45 --- /dev/null +++ b/apps/files_external/l10n/sk.js @@ -0,0 +1,100 @@ +OC.L10N.register( + "files_external", + { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.", + "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).", + "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s", + "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s", + "External storage" : "Externé úložisko", + "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie", + "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie", + "Personal" : "Osobné", + "System" : "Systém", + "Grant access" : "Povoliť prístup", + "Error configuring OAuth1" : "Chyba konfigurovania OAuth1", + "Error configuring OAuth2" : "Chyba konfigurovania OAuth2", + "Generate keys" : "Vytvoriť kľúče", + "Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov", + "All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.", + "(group)" : "(skupina)", + "Saved" : "Uložené", + "Save" : "Uložiť", + "Username" : "Používateľské meno", + "Password" : "Heslo", + "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo", + "Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie", + "Invalid mount point" : "Chybný prípojný bod", + "Objectstore forbidden" : "Objectstore je zakáazaný", + "Invalid storage backend \"%s\"" : "Neplatný backend úložiska \"%s\"", + "Not permitted to use backend \"%s\"" : "Nie je povolené použiť backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"", + "Unsatisfied backend parameters" : "Nedostatočné parametre backendu", + "Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu", + "Access key" : "Prístupový kľúč", + "Secret key" : "Tajný kľúč", + "Builtin" : "Vstavaný", + "None" : "Žiadny", + "OAuth1" : "OAuth1", + "App key" : "Kľúč aplikácie", + "App secret" : "Heslo aplikácie", + "OAuth2" : "OAuth2", + "Client ID" : "Client ID", + "Client secret" : "Heslo klienta", + "OpenStack" : "OpenStack", + "Tenant name" : "Meno nájomcu", + "Identity endpoint URL" : "Endpoint URL identita", + "Rackspace" : "Rackspace", + "API key" : "API kľúč", + "Global credentials" : "Globálne oprávnenia", + "Username and password" : "Meno a heslo", + "RSA public key" : "RSA verejný kľúč", + "Public key" : "Verejný kľúč", + "Amazon S3" : "Amazon S3", + "Bucket" : "Sektor", + "Hostname" : "Hostname", + "Port" : "Port", + "Region" : "Región", + "Enable SSL" : "Povoliť SSL", + "Enable Path Style" : "Povoliť štýl cesty", + "WebDAV" : "WebDAV", + "URL" : "URL", + "Remote subfolder" : "Vzdialený podpriečinok", + "Secure https://" : "Zabezpečené https://", + "Dropbox" : "Dropbox", + "FTP" : "FTP", + "Host" : "Hostiteľ", + "Secure ftps://" : "Zabezpečené ftps://", + "Google Drive" : "Google Drive", + "Local" : "Lokálny", + "Location" : "Umiestnenie", + "SFTP" : "SFTP", + "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", + "Share" : "Sprístupniť", + "Domain" : "Doména", + "SMB / CIFS using OC login" : "SMB / CIFS s použitím OC prihlásenia", + "Username as share" : "Používateľské meno ako sprístupnený priečinok", + "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Názov služby", + "Request timeout (seconds)" : "Timeout požiadavky (s)", + "No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované", + "You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach", + "Name" : "Názov", + "Storage type" : "Typ úložiska", + "Scope" : "Rozsah", + "Enable encryption" : "Povoliť šifrovanie", + "Enable previews" : "Povoliť náhľady", + "Check for changes" : "Zisťovať zmeny", + "Never" : "Nikdy", + "Once every direct access" : "S každým priamym prístupom", + "Folder name" : "Názov priečinka", + "Authentication" : "Autentifikácia", + "Configuration" : "Nastavenia", + "Available for" : "K dispozícii pre", + "Add storage" : "Pridať úložisko", + "Advanced settings" : "Rozšírené nastavenia", + "Delete" : "Zmazať", + "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská" +}, +"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files_external/l10n/sk.json b/apps/files_external/l10n/sk.json new file mode 100644 index 00000000000..24592565e8e --- /dev/null +++ b/apps/files_external/l10n/sk.json @@ -0,0 +1,98 @@ +{ "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.", + "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).", + "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s", + "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s", + "External storage" : "Externé úložisko", + "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie", + "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie", + "Personal" : "Osobné", + "System" : "Systém", + "Grant access" : "Povoliť prístup", + "Error configuring OAuth1" : "Chyba konfigurovania OAuth1", + "Error configuring OAuth2" : "Chyba konfigurovania OAuth2", + "Generate keys" : "Vytvoriť kľúče", + "Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov", + "All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.", + "(group)" : "(skupina)", + "Saved" : "Uložené", + "Save" : "Uložiť", + "Username" : "Používateľské meno", + "Password" : "Heslo", + "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo", + "Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie", + "Invalid mount point" : "Chybný prípojný bod", + "Objectstore forbidden" : "Objectstore je zakáazaný", + "Invalid storage backend \"%s\"" : "Neplatný backend úložiska \"%s\"", + "Not permitted to use backend \"%s\"" : "Nie je povolené použiť backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"", + "Unsatisfied backend parameters" : "Nedostatočné parametre backendu", + "Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu", + "Access key" : "Prístupový kľúč", + "Secret key" : "Tajný kľúč", + "Builtin" : "Vstavaný", + "None" : "Žiadny", + "OAuth1" : "OAuth1", + "App key" : "Kľúč aplikácie", + "App secret" : "Heslo aplikácie", + "OAuth2" : "OAuth2", + "Client ID" : "Client ID", + "Client secret" : "Heslo klienta", + "OpenStack" : "OpenStack", + "Tenant name" : "Meno nájomcu", + "Identity endpoint URL" : "Endpoint URL identita", + "Rackspace" : "Rackspace", + "API key" : "API kľúč", + "Global credentials" : "Globálne oprávnenia", + "Username and password" : "Meno a heslo", + "RSA public key" : "RSA verejný kľúč", + "Public key" : "Verejný kľúč", + "Amazon S3" : "Amazon S3", + "Bucket" : "Sektor", + "Hostname" : "Hostname", + "Port" : "Port", + "Region" : "Región", + "Enable SSL" : "Povoliť SSL", + "Enable Path Style" : "Povoliť štýl cesty", + "WebDAV" : "WebDAV", + "URL" : "URL", + "Remote subfolder" : "Vzdialený podpriečinok", + "Secure https://" : "Zabezpečené https://", + "Dropbox" : "Dropbox", + "FTP" : "FTP", + "Host" : "Hostiteľ", + "Secure ftps://" : "Zabezpečené ftps://", + "Google Drive" : "Google Drive", + "Local" : "Lokálny", + "Location" : "Umiestnenie", + "SFTP" : "SFTP", + "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", + "Share" : "Sprístupniť", + "Domain" : "Doména", + "SMB / CIFS using OC login" : "SMB / CIFS s použitím OC prihlásenia", + "Username as share" : "Používateľské meno ako sprístupnený priečinok", + "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Názov služby", + "Request timeout (seconds)" : "Timeout požiadavky (s)", + "No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované", + "You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach", + "Name" : "Názov", + "Storage type" : "Typ úložiska", + "Scope" : "Rozsah", + "Enable encryption" : "Povoliť šifrovanie", + "Enable previews" : "Povoliť náhľady", + "Check for changes" : "Zisťovať zmeny", + "Never" : "Nikdy", + "Once every direct access" : "S každým priamym prístupom", + "Folder name" : "Názov priečinka", + "Authentication" : "Autentifikácia", + "Configuration" : "Nastavenia", + "Available for" : "K dispozícii pre", + "Add storage" : "Pridať úložisko", + "Advanced settings" : "Rozšírené nastavenia", + "Delete" : "Zmazať", + "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská" +},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/files_external/lib/Controller/AjaxController.php b/apps/files_external/lib/Controller/AjaxController.php index 0bee1ce9778..f12f8450973 100644 --- a/apps/files_external/lib/Controller/AjaxController.php +++ b/apps/files_external/lib/Controller/AjaxController.php @@ -73,7 +73,7 @@ class AjaxController extends Controller { private function generateSshKeys() { $key = $this->rsaMechanism->createKey(); // Replace the placeholder label with a more meaningful one - $key['publicKey'] = str_replace('phpseclib-generated-key', gethostname(), $key['publickey']); + $key['publickey'] = str_replace('phpseclib-generated-key', gethostname(), $key['publickey']); return $key; } diff --git a/apps/files_external/lib/Lib/Storage/OwnCloud.php b/apps/files_external/lib/Lib/Storage/OwnCloud.php index 4a10844a770..427b55a4a54 100644 --- a/apps/files_external/lib/Lib/Storage/OwnCloud.php +++ b/apps/files_external/lib/Lib/Storage/OwnCloud.php @@ -23,6 +23,7 @@ */ namespace OCA\Files_External\Lib\Storage; +use Sabre\DAV\Client; /** * ownCloud backend for external storage based on DAV backend. @@ -69,6 +70,7 @@ class OwnCloud extends \OC\Files\Storage\DAV{ $params['host'] = $host; $params['root'] = $contextPath . self::OC_URL_SUFFIX . $root; + $params['authType'] = Client::AUTH_BASIC; parent::__construct($params); } diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 53d2412425c..9d8c179dd32 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -150,13 +150,19 @@ /> <input type="hidden" class="mountOptions" value="" /> </td> - <td class="hidden"> + <td class="remove hidden"> <img class="svg" alt="<?php p($l->t('Delete')); ?>" title="<?php p($l->t('Delete')); ?>" src="<?php print_unescaped(image_path('core', 'actions/delete.svg')); ?>" /> </td> + <td class="save hidden"> + <img alt="<?php p($l->t('Save')); ?>" + title="<?php p($l->t('Save')); ?>" + src="<?php print_unescaped(image_path('core', 'actions/checkmark.svg')); ?>" + /> + </td> </tr> </tbody> </table> diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js index 8f01c16b38c..2639f634b26 100644 --- a/apps/files_external/tests/js/settingsSpec.js +++ b/apps/files_external/tests/js/settingsSpec.js @@ -46,7 +46,8 @@ describe('OCA.External.Settings tests', function() { '<input type="hidden" class="applicableUsers">' + '</td>' + '<td class="mountOptionsToggle"><input type="hidden" class="mountOptions"/><img class="svg action"/></td>' + - '<td><img alt="Delete" title="Delete" class="svg action"/></td>' + + '<td class="remove"><img alt="Delete" title="Delete" class="svg action"/></td>' + + '<td class="save"><img alt="Save" title="Save" class="svg action"/></td>' + '</tr>' + '</tbody>' + '</table>' @@ -195,7 +196,7 @@ describe('OCA.External.Settings tests', function() { $tr = view.$el.find('tr:first'); selectBackend('\\OC\\TestBackend'); }); - it('saves storage after editing config', function() { + it('saves storage after clicking the save button', function() { var $field1 = $tr.find('input[data-parameter=field1]'); expect($field1.length).toEqual(1); $field1.val('test'); @@ -205,7 +206,8 @@ describe('OCA.External.Settings tests', function() { expect($mountOptionsField.length).toEqual(1); $mountOptionsField.val(JSON.stringify({previews:true})); - clock.tick(4000); + var $saveButton = $tr.find('td.save img'); + $saveButton.click(); expect(fakeServer.requests.length).toEqual(1); var request = fakeServer.requests[0]; @@ -242,11 +244,6 @@ describe('OCA.External.Settings tests', function() { // but after closing the dropdown expect(fakeServer.requests.length).toEqual(1); }); - // TODO: tests with "applicableUsers" and "applicableGroups" - // TODO: test with missing mount point value - // TODO: test with personal mounts (no applicable fields) - // TODO: test save triggers: paste, keyup, checkbox - // TODO: test "custom" field with addScript // TODO: status indicator }); describe('validate storage configuration', function() { diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 8228e761592..fdaf3d1ec6c 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -41,13 +41,10 @@ $eventDispatcher->addListener( \OCP\Util::addScript('files_sharing', 'share'); \OCP\Util::addScript('files_sharing', 'sharetabview'); \OCP\Util::addScript('files_sharing', 'sharebreadcrumbview'); - \OCP\Util::addStyle('files_sharing', 'sharetabview'); - \OCP\Util::addStyle('files_sharing', 'sharebreadcrumb'); + \OCP\Util::addStyle('files_sharing', 'mergedAdditionalStyles'); } ); -// \OCP\Util::addStyle('files_sharing', 'sharetabview'); - $config = \OC::$server->getConfig(); if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') { \OCA\Files\App::getNavigationManager()->add(function () { diff --git a/apps/files_sharing/css/mergedAdditionalStyles.scss b/apps/files_sharing/css/mergedAdditionalStyles.scss new file mode 100644 index 00000000000..a95ad59967f --- /dev/null +++ b/apps/files_sharing/css/mergedAdditionalStyles.scss @@ -0,0 +1,2 @@ +@import 'sharetabview.scss'; +@import 'sharebreadcrumb.scss'; diff --git a/apps/files_sharing/css/mobile.css b/apps/files_sharing/css/mobile.scss index f24ada1898a..f24ada1898a 100644 --- a/apps/files_sharing/css/mobile.css +++ b/apps/files_sharing/css/mobile.scss diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.scss index 9c8c4a66630..9c8c4a66630 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.scss diff --git a/apps/files_sharing/css/publicView.scss b/apps/files_sharing/css/publicView.scss new file mode 100644 index 00000000000..398fd1b0a37 --- /dev/null +++ b/apps/files_sharing/css/publicView.scss @@ -0,0 +1,2 @@ +@import 'public.scss'; +@import 'mobile.scss'; diff --git a/apps/files_sharing/css/sharebreadcrumb.css b/apps/files_sharing/css/sharebreadcrumb.scss index 792c8a31b7c..792c8a31b7c 100644 --- a/apps/files_sharing/css/sharebreadcrumb.css +++ b/apps/files_sharing/css/sharebreadcrumb.scss diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.scss index 6fd2b9b3165..6fd2b9b3165 100644 --- a/apps/files_sharing/css/sharetabview.css +++ b/apps/files_sharing/css/sharetabview.scss diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 6964eb5eabc..8a9f8ab4ead 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} odebral(a) sdílení", "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}", "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}", + "{actor} shared {file} with {user}" : "{actor} s {user} sdílel(a) {file}", "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}", "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}", "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Veřejné nahrávání je možné pouze do veřejně sdílených adresářů", "Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, formát data musí být YYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %s", + "You cannot share to a Circle if the app is not enabled" : "Do kruhu nemůžete sdílet, pokud není aplikace povolena", + "Please specify a valid circle" : "Prosím, specifikujte platný kruh", "Unknown share type" : "Neznámý typ sdílení", "Not a directory" : "Žádný adresář", "Could not lock path" : "Nepodařilo se uzamknout cestu", diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index 2ee5d1fc0eb..774672122f6 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} odebral(a) sdílení", "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}", "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}", + "{actor} shared {file} with {user}" : "{actor} s {user} sdílel(a) {file}", "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}", "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}", "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Veřejné nahrávání je možné pouze do veřejně sdílených adresářů", "Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, formát data musí být YYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %s", + "You cannot share to a Circle if the app is not enabled" : "Do kruhu nemůžete sdílet, pokud není aplikace povolena", + "Please specify a valid circle" : "Prosím, specifikujte platný kruh", "Unknown share type" : "Neznámý typ sdílení", "Not a directory" : "Žádný adresář", "Could not lock path" : "Nepodařilo se uzamknout cestu", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 9ccced34f83..78f8edcce09 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -48,7 +48,7 @@ OC.L10N.register( "You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten", "{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert", "{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt", - "{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit dir", + "{user} unshared {file} from you" : "{user} hat die Freigabe für {file} entfernt", "Shared with {user}" : "Geteilt mit {user}", "Removed share for {user}" : "Freigabe für {user} entfernt", "{actor} shared with {user}" : "{actor} hat mit {user} geteilt", @@ -56,7 +56,8 @@ OC.L10N.register( "Shared by {actor}" : "Geteilt von {actor}", "{actor} removed share" : "{actor} hat die Freigabe entfernt", "You shared {file} with {user}" : "Du hast {file} mit {user} geteilt", - "You removed {user} from {file}" : "Sie haben die {user} von {file} entfernt", + "You removed {user} from {file}" : "Du hast {user} von {file} entfernt", + "{actor} shared {file} with {user}" : "{actor} hat {file} mit {user} geteilt", "{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt", "{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt", "{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Das öffentliche Hochladen ist nur für öffentlich freigegebene Ordner erlaubt", "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, das Datumsformat muss JJJJ-MM-TT sein", "Sharing %s failed because the back end does not allow shares from type %s" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %s nicht erlaubt.", + "You cannot share to a Circle if the app is not enabled" : "Sie können nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist", + "Please specify a valid circle" : "Bitte einen gültigen Kreis angeben", "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 3c361220227..1c3e07c50c2 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -46,7 +46,7 @@ "You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten", "{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert", "{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt", - "{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit dir", + "{user} unshared {file} from you" : "{user} hat die Freigabe für {file} entfernt", "Shared with {user}" : "Geteilt mit {user}", "Removed share for {user}" : "Freigabe für {user} entfernt", "{actor} shared with {user}" : "{actor} hat mit {user} geteilt", @@ -54,7 +54,8 @@ "Shared by {actor}" : "Geteilt von {actor}", "{actor} removed share" : "{actor} hat die Freigabe entfernt", "You shared {file} with {user}" : "Du hast {file} mit {user} geteilt", - "You removed {user} from {file}" : "Sie haben die {user} von {file} entfernt", + "You removed {user} from {file}" : "Du hast {user} von {file} entfernt", + "{actor} shared {file} with {user}" : "{actor} hat {file} mit {user} geteilt", "{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt", "{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt", "{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Das öffentliche Hochladen ist nur für öffentlich freigegebene Ordner erlaubt", "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, das Datumsformat muss JJJJ-MM-TT sein", "Sharing %s failed because the back end does not allow shares from type %s" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %s nicht erlaubt.", + "You cannot share to a Circle if the app is not enabled" : "Sie können nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist", + "Please specify a valid circle" : "Bitte einen gültigen Kreis angeben", "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index ed3e31dc2d9..f65c3f4f6b8 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -48,7 +48,7 @@ OC.L10N.register( "You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten", "{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert", "{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt", - "{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit Ihnen", + "{user} unshared {file} from you" : "{user} hat die Freigabe für {file} entfernt", "Shared with {user}" : "Geteilt mit {user}", "Removed share for {user}" : "Freigabe für {user} entfernt", "{actor} shared with {user}" : "{actor} hat mit {user} geteilt", @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} hat die Freigabe entfernt", "You shared {file} with {user}" : "Sie haben {file} mit {user} geteilt", "You removed {user} from {file}" : "Sie haben {user} von {file} entfernt", + "{actor} shared {file} with {user}" : "{actor} hat {file} mit {user} geteilt", "{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt", "{actor} shared {file} with you" : "{actor} hat {file} mit Ihnen geteilt", "{actor} removed you from {file}" : "Sie wurden durch {actor} von {file} entfernt", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Das öffentliche Hochladen ist nur für öffentlich freigegebene Ordner erlaubt", "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, das Datumsformat muss JJJJ-MM-TT sein", "Sharing %s failed because the back end does not allow shares from type %s" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %s nicht erlaubt.", + "You cannot share to a Circle if the app is not enabled" : "Sie können nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist", + "Please specify a valid circle" : "Bitte einen gültigen Kreis angeben", "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 7a638223db7..c8b87450a02 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -46,7 +46,7 @@ "You received a new remote share {file} from {user}" : "Du hast eine neue Remotefreigabe {file} von {user} erhalten", "{user} accepted the remote share of {file}" : "{user} hat die Remotefreigabe von {file} akzeptiert", "{user} declined the remote share of {file}" : "{user} hat die Remotefreigabe von {file} abgelehnt", - "{user} unshared {file} from you" : "{user} teilt {file} nicht mehr mit Ihnen", + "{user} unshared {file} from you" : "{user} hat die Freigabe für {file} entfernt", "Shared with {user}" : "Geteilt mit {user}", "Removed share for {user}" : "Freigabe für {user} entfernt", "{actor} shared with {user}" : "{actor} hat mit {user} geteilt", @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} hat die Freigabe entfernt", "You shared {file} with {user}" : "Sie haben {file} mit {user} geteilt", "You removed {user} from {file}" : "Sie haben {user} von {file} entfernt", + "{actor} shared {file} with {user}" : "{actor} hat {file} mit {user} geteilt", "{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt", "{actor} shared {file} with you" : "{actor} hat {file} mit Ihnen geteilt", "{actor} removed you from {file}" : "Sie wurden durch {actor} von {file} entfernt", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Das öffentliche Hochladen ist nur für öffentlich freigegebene Ordner erlaubt", "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, das Datumsformat muss JJJJ-MM-TT sein", "Sharing %s failed because the back end does not allow shares from type %s" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe vom Typ %s nicht erlaubt.", + "You cannot share to a Circle if the app is not enabled" : "Sie können nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist", + "Please specify a valid circle" : "Bitte einen gültigen Kreis angeben", "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index a2727d9ba33..478c91aa96e 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} eliminó el recurso compartido", "You shared {file} with {user}" : "Ha compartido {file} con {user}", "You removed {user} from {file}" : "Ha eliminado {user} de {file}", + "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}", "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}", "{actor} shared {file} with you" : "{actor} compartió {file} contigo", "{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "La subida publica solo es posible poara las carpetas publicas compartidas", "Invalid date, date format must be YYYY-MM-DD" : "Fecha inválida, el formato de las fechas debe ser YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Compartir %s ha fallado porque el repositorio no admite compartidos del tipo %s", + "You cannot share to a Circle if the app is not enabled" : "No puede compartir a un Circulo si la aplicación no esta activada", + "Please specify a valid circle" : "Por favor especifique un circulo valido", "Unknown share type" : "Tipo desconocido de recurso compartido", "Not a directory" : "No es un directorio", "Could not lock path" : "No se ha podido bloquear la ruta", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 3abfab23c05..d794ec806df 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} eliminó el recurso compartido", "You shared {file} with {user}" : "Ha compartido {file} con {user}", "You removed {user} from {file}" : "Ha eliminado {user} de {file}", + "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}", "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}", "{actor} shared {file} with you" : "{actor} compartió {file} contigo", "{actor} removed you from {file}" : "{actor} lo ha eliminado de {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "La subida publica solo es posible poara las carpetas publicas compartidas", "Invalid date, date format must be YYYY-MM-DD" : "Fecha inválida, el formato de las fechas debe ser YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Compartir %s ha fallado porque el repositorio no admite compartidos del tipo %s", + "You cannot share to a Circle if the app is not enabled" : "No puede compartir a un Circulo si la aplicación no esta activada", + "Please specify a valid circle" : "Por favor especifique un circulo valido", "Unknown share type" : "Tipo desconocido de recurso compartido", "Not a directory" : "No es un directorio", "Could not lock path" : "No se ha podido bloquear la ruta", diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index e8cc78564de..f01506bd9ae 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -78,6 +78,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Julkinen lähettäminen on mahdollista vain julkisesti jaetuille kansioille", "Invalid date, date format must be YYYY-MM-DD" : "Virheellinen päiväys, päivämäärän muodon tulee olla YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Kohteen %s jakaminen epäonnistui, koska tietovarasto ei salli %s tyyppisiä jakoja", + "You cannot share to a Circle if the app is not enabled" : "Et voi jakaa piiriin, jos sovellusta ei ole aktivoitu", + "Please specify a valid circle" : "Määritä kelvollinen piiri", "Unknown share type" : "Tuntematon jaon tyyppi", "Not a directory" : "Ei hakemisto", "Could not lock path" : "Polun lukitseminen ei onnistunut", diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index 79844b4ec40..46adb12ec20 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -76,6 +76,8 @@ "Public upload is only possible for publicly shared folders" : "Julkinen lähettäminen on mahdollista vain julkisesti jaetuille kansioille", "Invalid date, date format must be YYYY-MM-DD" : "Virheellinen päiväys, päivämäärän muodon tulee olla YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Kohteen %s jakaminen epäonnistui, koska tietovarasto ei salli %s tyyppisiä jakoja", + "You cannot share to a Circle if the app is not enabled" : "Et voi jakaa piiriin, jos sovellusta ei ole aktivoitu", + "Please specify a valid circle" : "Määritä kelvollinen piiri", "Unknown share type" : "Tuntematon jaon tyyppi", "Not a directory" : "Ei hakemisto", "Could not lock path" : "Polun lukitseminen ei onnistunut", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 12b86dc8596..8f2d9699e17 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} a supprimé le partage", "You shared {file} with {user}" : "Vous avez partagé {file} avec {user}", "You removed {user} from {file}" : "Vous avez supprimé {user} de {file}", + "{actor} shared {file} with {user}" : "{actor} a partagé {file} avec {user}", "{actor} removed {user} from {file}" : "{actor} a supprimé {user} de {file}", "{actor} shared {file} with you" : "{actor} a partagé {file} avec vous", "{actor} removed you from {file}" : "{actor} vous a supprimé de {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Le téléversement public est possible uniquement pour les dossiers partagés publiquement", "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format doit être YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Le partage %s a échoué parce que l'infrastructure n'autorise pas les partages du type %s", + "You cannot share to a Circle if the app is not enabled" : "Vous ne pouvez pas partager au Cercle si l'application n'est pas activée", + "Please specify a valid circle" : "Veuillez entrer un cercle valide", "Unknown share type" : "Type de partage inconnu", "Not a directory" : "N'est pas un répertoire", "Could not lock path" : "Impossible de verrouiller le chemin", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index b2b5d6df901..4a12f746f95 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} a supprimé le partage", "You shared {file} with {user}" : "Vous avez partagé {file} avec {user}", "You removed {user} from {file}" : "Vous avez supprimé {user} de {file}", + "{actor} shared {file} with {user}" : "{actor} a partagé {file} avec {user}", "{actor} removed {user} from {file}" : "{actor} a supprimé {user} de {file}", "{actor} shared {file} with you" : "{actor} a partagé {file} avec vous", "{actor} removed you from {file}" : "{actor} vous a supprimé de {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Le téléversement public est possible uniquement pour les dossiers partagés publiquement", "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format doit être YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Le partage %s a échoué parce que l'infrastructure n'autorise pas les partages du type %s", + "You cannot share to a Circle if the app is not enabled" : "Vous ne pouvez pas partager au Cercle si l'application n'est pas activée", + "Please specify a valid circle" : "Veuillez entrer un cercle valide", "Unknown share type" : "Type de partage inconnu", "Not a directory" : "N'est pas un répertoire", "Could not lock path" : "Impossible de verrouiller le chemin", diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index d0e5a00b4cc..39721fd93ee 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} fjarlægði deilingu", "You shared {file} with {user}" : "Þú deildir {file} með {user}", "You removed {user} from {file}" : "Þú fjarlægðir {user} af {file}", + "{actor} shared {file} with {user}" : "{actor} deildi {file} með {user}", "{actor} removed {user} from {file}" : "{actor} fjarlægði {user} af {file}", "{actor} shared {file} with you" : "{actor} deildi {file} með þér", "{actor} removed you from {file}" : "{actor} fjarlægði þig af {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Opinber innsending er einungis möguleg í möppur sem er deilt opinberlega", "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %s", + "You cannot share to a Circle if the app is not enabled" : "Þú getur ekki deilt með hring ef forritið er ekki virkt", + "Please specify a valid circle" : "Settu inn gildan hring", "Unknown share type" : "Óþekkt tegund sameignar", "Not a directory" : "Er ekki mappa", "Could not lock path" : "Gat ekki læst slóð", diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index 8f2e238b46d..a6fac5df562 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} fjarlægði deilingu", "You shared {file} with {user}" : "Þú deildir {file} með {user}", "You removed {user} from {file}" : "Þú fjarlægðir {user} af {file}", + "{actor} shared {file} with {user}" : "{actor} deildi {file} með {user}", "{actor} removed {user} from {file}" : "{actor} fjarlægði {user} af {file}", "{actor} shared {file} with you" : "{actor} deildi {file} með þér", "{actor} removed you from {file}" : "{actor} fjarlægði þig af {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Opinber innsending er einungis möguleg í möppur sem er deilt opinberlega", "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %s", + "You cannot share to a Circle if the app is not enabled" : "Þú getur ekki deilt með hring ef forritið er ekki virkt", + "Please specify a valid circle" : "Settu inn gildan hring", "Unknown share type" : "Óþekkt tegund sameignar", "Not a directory" : "Er ekki mappa", "Could not lock path" : "Gat ekki læst slóð", diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js index 54c8dbc5b0f..6cbd38db9a6 100644 --- a/apps/files_sharing/l10n/nb.js +++ b/apps/files_sharing/l10n/nb.js @@ -36,10 +36,13 @@ OC.L10N.register( "Public link expired" : "Offentlig lenke er utløpt", "{actor} shared as public link" : "{actor} delte som offentlig lenke", "{actor} removed public link" : "{actor} fjernet offentlig lenke", + "Public link of {actor} expired" : "Offentlig lenke av {actor} er utløpt", "You shared {file} as public link" : "Du delte {file} som offentlig lenke", "You removed public link for {file}" : "Du fjernet offentlig lenke for {file}", + "Public link expired for {file}" : "Offentlig lenke er utløprt for {file}", "{actor} shared {file} as public link" : "{actor} delte {file} som offentlig lenke", "{actor} removed public link for {file}" : "{actor} fjernet offentlig lenke for {file}", + "Public link of {actor} for {file} expired" : "Offentlig lenke av {actor} for {file} har utløpt", "{user} accepted the remote share" : "{user} godtok fjerndelingen", "{user} declined the remote share" : "{user} avslo fjerndelingen", "You received a new remote share {file} from {user}" : "Du har mottatt en ny fjerndeling {file} fra {user}", @@ -54,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} fjernet deling", "You shared {file} with {user}" : "Du delte {file} med {user}", "You removed {user} from {file}" : "Du fjernet {user} fra {file}", + "{actor} shared {file} with {user}" : "{actor} delete {file} med {user}", "{actor} removed {user} from {file}" : "{actor} fjernet {user} fra {file}", "{actor} shared {file} with you" : "{actor} delte {file} med deg", "{actor} removed you from {file}" : "{actor} fjernet deg fra {file}", @@ -75,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Offentlig opplasting er kun mulig i offentlig delte mapper", "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Deling av %s feilet på grunn av at tjeneren ikke tillater deling av filtypen %s", + "You cannot share to a Circle if the app is not enabled" : "Du kan ikke dele til en sirkel så lenge appn ikke er aktivert", + "Please specify a valid circle" : "Vennligst angi en gyldig sirkel", "Unknown share type" : "Ukjent ressurstype", "Not a directory" : "Ikke en mappe", "Could not lock path" : "Kunne ikke låse sti", diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json index 2aec2b9b48e..42d6763dcde 100644 --- a/apps/files_sharing/l10n/nb.json +++ b/apps/files_sharing/l10n/nb.json @@ -34,10 +34,13 @@ "Public link expired" : "Offentlig lenke er utløpt", "{actor} shared as public link" : "{actor} delte som offentlig lenke", "{actor} removed public link" : "{actor} fjernet offentlig lenke", + "Public link of {actor} expired" : "Offentlig lenke av {actor} er utløpt", "You shared {file} as public link" : "Du delte {file} som offentlig lenke", "You removed public link for {file}" : "Du fjernet offentlig lenke for {file}", + "Public link expired for {file}" : "Offentlig lenke er utløprt for {file}", "{actor} shared {file} as public link" : "{actor} delte {file} som offentlig lenke", "{actor} removed public link for {file}" : "{actor} fjernet offentlig lenke for {file}", + "Public link of {actor} for {file} expired" : "Offentlig lenke av {actor} for {file} har utløpt", "{user} accepted the remote share" : "{user} godtok fjerndelingen", "{user} declined the remote share" : "{user} avslo fjerndelingen", "You received a new remote share {file} from {user}" : "Du har mottatt en ny fjerndeling {file} fra {user}", @@ -52,6 +55,7 @@ "{actor} removed share" : "{actor} fjernet deling", "You shared {file} with {user}" : "Du delte {file} med {user}", "You removed {user} from {file}" : "Du fjernet {user} fra {file}", + "{actor} shared {file} with {user}" : "{actor} delete {file} med {user}", "{actor} removed {user} from {file}" : "{actor} fjernet {user} fra {file}", "{actor} shared {file} with you" : "{actor} delte {file} med deg", "{actor} removed you from {file}" : "{actor} fjernet deg fra {file}", @@ -73,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Offentlig opplasting er kun mulig i offentlig delte mapper", "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Deling av %s feilet på grunn av at tjeneren ikke tillater deling av filtypen %s", + "You cannot share to a Circle if the app is not enabled" : "Du kan ikke dele til en sirkel så lenge appn ikke er aktivert", + "Please specify a valid circle" : "Vennligst angi en gyldig sirkel", "Unknown share type" : "Ukjent ressurstype", "Not a directory" : "Ikke en mappe", "Could not lock path" : "Kunne ikke låse sti", diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index f7a536df547..ef423765e86 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -78,6 +78,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Publieke upload is alleen mogelijk voor publiek gedeelde mappen", "Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, datumnotatie moet in de vorm YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Delen van %s mislukte omdat de backend het delen van type %s niet ondersteunt", + "You cannot share to a Circle if the app is not enabled" : "Je kunt niets met een cirkel delen als de app aan staat.", + "Please specify a valid circle" : "Geef een geldige circel op", "Unknown share type" : "Onbekend type share", "Not a directory" : "Geen directory", "Could not lock path" : "Kon pad niet blokkeren", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 1ad55cd928e..918e8506218 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -76,6 +76,8 @@ "Public upload is only possible for publicly shared folders" : "Publieke upload is alleen mogelijk voor publiek gedeelde mappen", "Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, datumnotatie moet in de vorm YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Delen van %s mislukte omdat de backend het delen van type %s niet ondersteunt", + "You cannot share to a Circle if the app is not enabled" : "Je kunt niets met een cirkel delen als de app aan staat.", + "Please specify a valid circle" : "Geef een geldige circel op", "Unknown share type" : "Onbekend type share", "Not a directory" : "Geen directory", "Could not lock path" : "Kon pad niet blokkeren", diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index 1287c28ac6c..699deb6d01e 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} usunął udostępnienie", "You shared {file} with {user}" : "Współdzielisz {file} z {user}", "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}", + "{actor} shared {file} with {user}" : "{actor} współdzieli {file} z {user}", "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}", "{actor} shared {file} with you" : "{actor} udostępnił ci {file}", "{actor} removed you from {file}" : "{actor} usunął cie z {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych", "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s", + "You cannot share to a Circle if the app is not enabled" : "Nie możesz udostępnić do Kręgów jeśli aplikacja jest wyłączona", + "Please specify a valid circle" : "Proszę podać właściwy krąg", "Unknown share type" : "Nieznany typ udziału", "Not a directory" : "Nie jest katalogiem", "Could not lock path" : "Nie udało się zablokować ścieżki", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index b5ee6a7b37c..d7c0461e8e2 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} usunął udostępnienie", "You shared {file} with {user}" : "Współdzielisz {file} z {user}", "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}", + "{actor} shared {file} with {user}" : "{actor} współdzieli {file} z {user}", "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}", "{actor} shared {file} with you" : "{actor} udostępnił ci {file}", "{actor} removed you from {file}" : "{actor} usunął cie z {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych", "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s", + "You cannot share to a Circle if the app is not enabled" : "Nie możesz udostępnić do Kręgów jeśli aplikacja jest wyłączona", + "Please specify a valid circle" : "Proszę podać właściwy krąg", "Unknown share type" : "Nieznany typ udziału", "Not a directory" : "Nie jest katalogiem", "Could not lock path" : "Nie udało się zablokować ścieżki", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 91a5b2ab8c7..43fed6a4e81 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} закрыл общий доступ", "You shared {file} with {user}" : "Вы поделились {file} с {user}", "You removed {user} from {file}" : "Вы удалили {user} из {file}", + "{actor} shared {file} with {user}" : "{actor} поделился {file} с {user}", "{actor} removed {user} from {file}" : "{actor} удалил {user} из {file}", "{actor} shared {file} with you" : "{actor} поделился {file} с вами", "{actor} removed you from {file}" : "{actor} удалил вас из {file}", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Общедоступная загрузка возможна только в папки с общим доступом", "Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, формат даты должен быть ГГГГ-ММ-ДД", "Sharing %s failed because the back end does not allow shares from type %s" : "Не удалось поделиться %s, поскольку механизм удалённого обмена не разрешает публикации типа %s", + "You cannot share to a Circle if the app is not enabled" : "Вы не можите поделиться через приложение Круг, если это приложение не включено", + "Please specify a valid circle" : "Укажите правильный круг", "Unknown share type" : "Предоставление доступа неизвестного типа", "Not a directory" : "Это не каталог", "Could not lock path" : "Не удалось заблокировать путь", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index fe21215d8ad..f1521dfddfb 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} закрыл общий доступ", "You shared {file} with {user}" : "Вы поделились {file} с {user}", "You removed {user} from {file}" : "Вы удалили {user} из {file}", + "{actor} shared {file} with {user}" : "{actor} поделился {file} с {user}", "{actor} removed {user} from {file}" : "{actor} удалил {user} из {file}", "{actor} shared {file} with you" : "{actor} поделился {file} с вами", "{actor} removed you from {file}" : "{actor} удалил вас из {file}", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Общедоступная загрузка возможна только в папки с общим доступом", "Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, формат даты должен быть ГГГГ-ММ-ДД", "Sharing %s failed because the back end does not allow shares from type %s" : "Не удалось поделиться %s, поскольку механизм удалённого обмена не разрешает публикации типа %s", + "You cannot share to a Circle if the app is not enabled" : "Вы не можите поделиться через приложение Круг, если это приложение не включено", + "Please specify a valid circle" : "Укажите правильный круг", "Unknown share type" : "Предоставление доступа неизвестного типа", "Not a directory" : "Это не каталог", "Could not lock path" : "Не удалось заблокировать путь", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index 13e7f368818..d35dbbbc032 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} paylaşımı kaldırdı", "You shared {file} with {user}" : "{file} dosyasını {user} kullanıcısıyla paylaştınız", "You removed {user} from {file}" : "{file} dosyasının {user} kullanıcısıyla paylaşımını kaldırdınız", + "{actor} shared {file} with {user}" : "{actor} {file} dosyasını {user} kullanıcısı ile paylaştı", "{actor} removed {user} from {file}" : "{actor} {file} dosyasının {user} kullanıcısıyla paylaşımını kaldırdı", "{actor} shared {file} with you" : "{actor} {file} dosyasını sizinle paylaştı", "{actor} removed you from {file}" : "{actor} {file} dosyasının sizinle paylaşımını kaldırdı", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "Herkese açık yükleme ancak herkese açık paylaşılmış klasörlere yapılabilir", "Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır", "Sharing %s failed because the back end does not allow shares from type %s" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşılamadı", + "You cannot share to a Circle if the app is not enabled" : "Uygulama etkinleştirilmemiş ise bir Çevre ile paylaşamazsınız", + "Please specify a valid circle" : "Lütfen geçerli bir çevre belirtin", "Unknown share type" : "Paylaşım türü bilinmiyor", "Not a directory" : "Bir klasör değil", "Could not lock path" : "Yol kilitlenemedi", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index 5ab885517bb..5e55943c9be 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} paylaşımı kaldırdı", "You shared {file} with {user}" : "{file} dosyasını {user} kullanıcısıyla paylaştınız", "You removed {user} from {file}" : "{file} dosyasının {user} kullanıcısıyla paylaşımını kaldırdınız", + "{actor} shared {file} with {user}" : "{actor} {file} dosyasını {user} kullanıcısı ile paylaştı", "{actor} removed {user} from {file}" : "{actor} {file} dosyasının {user} kullanıcısıyla paylaşımını kaldırdı", "{actor} shared {file} with you" : "{actor} {file} dosyasını sizinle paylaştı", "{actor} removed you from {file}" : "{actor} {file} dosyasının sizinle paylaşımını kaldırdı", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "Herkese açık yükleme ancak herkese açık paylaşılmış klasörlere yapılabilir", "Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır", "Sharing %s failed because the back end does not allow shares from type %s" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşılamadı", + "You cannot share to a Circle if the app is not enabled" : "Uygulama etkinleştirilmemiş ise bir Çevre ile paylaşamazsınız", + "Please specify a valid circle" : "Lütfen geçerli bir çevre belirtin", "Unknown share type" : "Paylaşım türü bilinmiyor", "Not a directory" : "Bir klasör değil", "Could not lock path" : "Yol kilitlenemedi", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 8a51fd65abc..49d09aaa66a 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -57,6 +57,7 @@ OC.L10N.register( "{actor} removed share" : "{actor} 移除共享", "You shared {file} with {user}" : "您与 {user} 分享了 {file} ", "You removed {user} from {file}" : "您从 {file} 移除了 {user} ", + "{actor} shared {file} with {user}" : "{actor} 共享 {file} 与 {user}", "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}", "{actor} shared {file} with you" : "{actor} 与您共享了 {file} ", "{actor} removed you from {file}" : "{actor} 将您从 {file} 移除", @@ -78,6 +79,8 @@ OC.L10N.register( "Public upload is only possible for publicly shared folders" : "公共上传仅适用于公共共享文件夹", "Invalid date, date format must be YYYY-MM-DD" : "无效的日期,日期格式必须是 YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "共享 %s 失败,后端不允许共享 %s 类型", + "You cannot share to a Circle if the app is not enabled" : "如果这个应用程序不可用,你不能分享到圈子", + "Please specify a valid circle" : "请指明一个可用圈子", "Unknown share type" : "未知共享类型", "Not a directory" : "不是一个目录", "Could not lock path" : "无法锁定路径", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 1dfebb078d6..e6c56ac9938 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -55,6 +55,7 @@ "{actor} removed share" : "{actor} 移除共享", "You shared {file} with {user}" : "您与 {user} 分享了 {file} ", "You removed {user} from {file}" : "您从 {file} 移除了 {user} ", + "{actor} shared {file} with {user}" : "{actor} 共享 {file} 与 {user}", "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}", "{actor} shared {file} with you" : "{actor} 与您共享了 {file} ", "{actor} removed you from {file}" : "{actor} 将您从 {file} 移除", @@ -76,6 +77,8 @@ "Public upload is only possible for publicly shared folders" : "公共上传仅适用于公共共享文件夹", "Invalid date, date format must be YYYY-MM-DD" : "无效的日期,日期格式必须是 YYYY-MM-DD", "Sharing %s failed because the back end does not allow shares from type %s" : "共享 %s 失败,后端不允许共享 %s 类型", + "You cannot share to a Circle if the app is not enabled" : "如果这个应用程序不可用,你不能分享到圈子", + "Please specify a valid circle" : "请指明一个可用圈子", "Unknown share type" : "未知共享类型", "Not a directory" : "不是一个目录", "Could not lock path" : "无法锁定路径", diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php index f5cd4e8bfe3..eaab35bba9d 100644 --- a/apps/files_sharing/lib/Activity/Providers/Users.php +++ b/apps/files_sharing/lib/Activity/Providers/Users.php @@ -80,7 +80,7 @@ class Users extends Base { } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) { $subject = $this->l->t('You removed {user} from {file}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) { - $subject = $this->l->t('{actor} removed {user} from {file}'); + $subject = $this->l->t('{actor} shared {file} with {user}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) { $subject = $this->l->t('{actor} removed {user} from {file}'); } else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) { diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 711970d0c84..78eef6c26bb 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -804,7 +804,7 @@ class ShareAPIController extends OCSController { if ($checkGroups && $share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { $sharedWith = $this->groupManager->get($share->getSharedWith()); $user = $this->userManager->get($this->currentUser); - if ($user !== null && $sharedWith->inGroup($user)) { + if ($user !== null && $sharedWith !== null && $sharedWith->inGroup($user)) { return true; } } diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index 6f9d4ca032a..bf3b6c77f94 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -379,8 +379,7 @@ class ShareController extends Controller { // Load files we need \OCP\Util::addScript('files', 'file-upload'); - \OCP\Util::addStyle('files_sharing', 'public'); - \OCP\Util::addStyle('files_sharing', 'mobile'); + \OCP\Util::addStyle('files_sharing', 'publicView'); \OCP\Util::addScript('files_sharing', 'public'); \OCP\Util::addScript('files', 'fileactions'); \OCP\Util::addScript('files', 'fileactionsmenu'); @@ -389,8 +388,7 @@ class ShareController extends Controller { if (isset($shareTmpl['folder'])) { // JS required for folders - \OCP\Util::addStyle('files', 'files'); - \OCP\Util::addStyle('files', 'upload'); + \OCP\Util::addStyle('files', 'merged'); \OCP\Util::addScript('files', 'filesummary'); \OCP\Util::addScript('files', 'breadcrumb'); \OCP\Util::addScript('files', 'fileinfomodel'); diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index f474190fc98..a02d6350499 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -173,7 +173,23 @@ class MountProvider implements IMountProvider { if ($share->getTarget() !== $superShare->getTarget()) { // adjust target, for database consistency $share->setTarget($superShare->getTarget()); - $this->shareManager->moveShare($share, $user->getUID()); + try { + $this->shareManager->moveShare($share, $user->getUID()); + } catch (\InvalidArgumentException $e) { + // ignore as it is not important and we don't want to + // block FS setup + + // the subsequent code anyway only uses the target of the + // super share + + // such issue can usually happen when dealing with + // null groups which usually appear with group backend + // caching inconsistencies + $this->logger->debug( + 'Could not adjust share target for share ' . $share->getId() . ' to make it consistent: ' . $e->getMessage(), + ['app' => 'files_sharing'] + ); + } } if (!is_null($share->getNodeCacheEntry())) { $superShare->setNodeCacheEntry($share->getNodeCacheEntry()); diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index dd2ea855b0b..123a5cb4f53 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -120,7 +120,7 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size); <input type="hidden" name="dir" id="dir" value="" /> <div class="hiddenuploadfield"> <input type="file" id="file_upload_start" class="hiddenuploadfield" name="files[]" - data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" /> + data-url="<?php p(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" /> </div> <?php endif; ?> <footer> diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php index 97774081b6a..6dfa8ec6c77 100644 --- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php @@ -38,6 +38,7 @@ use OCP\Files\IRootFolder; use OCP\Lock\LockedException; use OCP\Share\IManager; use OCP\Share; +use Test\TestCase; /** * Class ShareAPIControllerTest @@ -45,7 +46,7 @@ use OCP\Share; * @package OCA\Files_Sharing\Tests\Controller * @group DB */ -class ShareAPIControllerTest extends \Test\TestCase { +class ShareAPIControllerTest extends TestCase { /** @var string */ private $appName = 'files_sharing'; @@ -544,14 +545,19 @@ class ShareAPIControllerTest extends \Test\TestCase { $this->groupManager->method('get')->will($this->returnValueMap([ ['group', $group], ['group2', $group2], + ['groupnull', null], ])); $this->assertTrue($this->invokePrivate($this->ocs, 'canAccessShare', [$share])); $share = $this->getMockBuilder('OCP\Share\IShare')->getMock(); $share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_GROUP); $share->method('getSharedWith')->willReturn('group2'); + $this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share])); - $this->groupManager->method('get')->with('group2')->willReturn($group); + // null group + $share = $this->getMock('OCP\Share\IShare'); + $share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_GROUP); + $share->method('getSharedWith')->willReturn('groupnull'); $this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share])); $share = $this->getMockBuilder('OCP\Share\IShare')->getMock(); diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php index 1c83d91d08f..b700d417ad4 100644 --- a/apps/files_sharing/tests/MountProviderTest.php +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -269,6 +269,20 @@ class MountProviderTest extends \Test\TestCase { ['1', 100, 'user2', '/share2-renamed', 31], ], ], + // #9: share as outsider with "nullgroup" and "user1" where recipient renamed in between + [ + [ + [2, 100, 'user2', '/share2', 31], + ], + [ + [1, 100, 'nullgroup', '/share2-renamed', 31], + ], + [ + // use target of least recent share + ['1', 100, 'nullgroup', '/share2-renamed', 31], + ], + true + ], ]; } @@ -284,7 +298,7 @@ class MountProviderTest extends \Test\TestCase { * @param array $groupShares array of group share specs * @param array $expectedShares array of expected supershare specs */ - public function testMergeShares($userShares, $groupShares, $expectedShares) { + public function testMergeShares($userShares, $groupShares, $expectedShares, $moveFails = false) { $rootFolder = $this->createMock(IRootFolder::class); $userManager = $this->createMock(IUserManager::class); @@ -319,6 +333,12 @@ class MountProviderTest extends \Test\TestCase { return new \OC\Share20\Share($rootFolder, $userManager); })); + if ($moveFails) { + $this->shareManager->expects($this->any()) + ->method('moveShare') + ->will($this->throwException(new \InvalidArgumentException())); + } + $mounts = $this->provider->getMountsForUser($this->user, $this->loader); $this->assertCount(count($expectedShares), $mounts); diff --git a/apps/files_sharing/tests/js/publicAppSpec.js b/apps/files_sharing/tests/js/publicAppSpec.js index e8ec9899ecc..8ea339fd9de 100644 --- a/apps/files_sharing/tests/js/publicAppSpec.js +++ b/apps/files_sharing/tests/js/publicAppSpec.js @@ -125,6 +125,10 @@ describe('OCA.Sharing.PublicApp tests', function() { expect(fileList.getAjaxUrl('test', {a:1, b:'x y'})) .toEqual(OC.webroot + '/index.php/apps/files_sharing/ajax/test.php?a=1&b=x%20y&t=sh4tok'); }); + it('returns correct download URL for downloading everything', function() { + expect(fileList.getDownloadUrl()) + .toEqual(OC.webroot + '/index.php/s/sh4tok/download?path=%2Fsubdir'); + }); }); describe('Upload Url', function() { var fileList; diff --git a/apps/files_trashbin/lib/Helper.php b/apps/files_trashbin/lib/Helper.php index 9c312443164..a309d533e54 100644 --- a/apps/files_trashbin/lib/Helper.php +++ b/apps/files_trashbin/lib/Helper.php @@ -72,8 +72,9 @@ class Helper { $timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1); } $originalPath = ''; - if (isset($originalLocations[$id][$timestamp])) { - $originalPath = $originalLocations[$id][$timestamp]; + $originalName = substr($entryName, 0, -strlen($timestamp)-2); + if (isset($originalLocations[$originalName][$timestamp])) { + $originalPath = $originalLocations[$originalName][$timestamp]; if (substr($originalPath, -1) === '/') { $originalPath = substr($originalPath, 0, -1); } @@ -90,7 +91,11 @@ class Helper { 'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE ); if ($originalPath) { - $i['extraData'] = $originalPath . '/' . $id; + if ($originalPath !== '.') { + $i['extraData'] = $originalPath . '/' . $originalName; + } else { + $i['extraData'] = $originalName; + } } $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i, $mount); } diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php index 2e66a6b96e1..78f0c9212f9 100644 --- a/apps/files_trashbin/lib/Trashbin.php +++ b/apps/files_trashbin/lib/Trashbin.php @@ -256,7 +256,11 @@ class Trashbin { } if ($sourceStorage->file_exists($sourceInternalPath)) { // failed to delete the original file, abort - $sourceStorage->unlink($sourceInternalPath); + if ($sourceStorage->is_dir($sourceInternalPath)) { + $sourceStorage->rmdir($sourceInternalPath); + } else { + $sourceStorage->unlink($sourceInternalPath); + } return false; } diff --git a/apps/provisioning_api/lib/Controller/AppsController.php b/apps/provisioning_api/lib/Controller/AppsController.php index e384d5af907..1165c7b8564 100644 --- a/apps/provisioning_api/lib/Controller/AppsController.php +++ b/apps/provisioning_api/lib/Controller/AppsController.php @@ -26,7 +26,9 @@ namespace OCA\Provisioning_API\Controller; use \OC_App; +use OCP\App\AppPathNotFoundException; use OCP\App\IAppManager; +use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCSController; @@ -99,9 +101,14 @@ class AppsController extends OCSController { * @PasswordConfirmationRequired * @param string $app * @return DataResponse + * @throws OCSException */ public function enable($app) { - $this->appManager->enableApp($app); + try { + $this->appManager->enableApp($app); + } catch (AppPathNotFoundException $e) { + throw new OCSException('The request app was not found', \OCP\API::RESPOND_NOT_FOUND); + } return new DataResponse(); } diff --git a/apps/systemtags/l10n/zh_CN.js b/apps/systemtags/l10n/zh_CN.js index 08e33655812..7f1d197bf32 100644 --- a/apps/systemtags/l10n/zh_CN.js +++ b/apps/systemtags/l10n/zh_CN.js @@ -31,9 +31,17 @@ OC.L10N.register( "%1$s updated system tag %3$s to %2$s" : "%1$s 更新了系统标签 %3$s 为 %2$s", "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor}更新系统标签{oldsystemtag}到{newsystemtag}", "You added system tag %2$s to %1$s" : "你填加系统标签%2$s到%1$s", + "You added system tag {systemtag} to {file}" : "你添加了系统标记 {systemtag} 到 {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s 添加系统标记 %3$s 到 %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} 添加系统标记 {systemtag} 到 {file}", + "You removed system tag %2$s from %1$s" : "你移除的系统标记 %2$s 于 %1$s", + "You removed system tag {systemtag} from {file}" : "你移除了系统标记 {systemtag} 从 {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s 移除了系统标记 %3$s 从 %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} 移除了系统标记 {systemtag} 从 {file}", "%s (restricted)" : "%s (受限)", "%s (invisible)" : "%s (不可见)", "<strong>System tags</strong> for a file have been modified" : "已更改的文件的<strong>系统标签</strong> ", + "Collaborative tags" : "协同标记", "Name" : "名称", "Delete" : "删除", "Public" : "公开", @@ -44,11 +52,16 @@ OC.L10N.register( "No entries found in this folder" : "此文件夹中无项目", "Size" : "大小", "Modified" : "修改日期", + "You assigned system tag %3$s" : "你指定的系统标记 %3$s", "%1$s assigned system tag %3$s" : "%1$s 分配了系统标签 %3$s", "You unassigned system tag %3$s" : "未赋值系统标签 %3$s", "%1$s unassigned system tag %3$s" : "%1$s 取消分配了系统标签 %3$s", + "You created system tag %2$s" : "你创建了系统标记 %2$s", "You deleted system tag %2$s" : "删除了系统标识 %2$s", + "You updated system tag %3$s to %2$s" : "你更新了系统标记 %3$s 到 %2$s", + "You assigned system tag %3$s to %2$s" : "你指定了系统标记 %3$s 到 %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s 分配了系统标签 %3$s 到 %2$s", + "You unassigned system tag %3$s from %2$s" : "你未指定系统标记 %3$s 于 %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s 取消分配系统标签 %3$s 从 %2$s" }, "nplurals=1; plural=0;"); diff --git a/apps/systemtags/l10n/zh_CN.json b/apps/systemtags/l10n/zh_CN.json index 55bb4f9b2cf..2bea499ff6a 100644 --- a/apps/systemtags/l10n/zh_CN.json +++ b/apps/systemtags/l10n/zh_CN.json @@ -29,9 +29,17 @@ "%1$s updated system tag %3$s to %2$s" : "%1$s 更新了系统标签 %3$s 为 %2$s", "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor}更新系统标签{oldsystemtag}到{newsystemtag}", "You added system tag %2$s to %1$s" : "你填加系统标签%2$s到%1$s", + "You added system tag {systemtag} to {file}" : "你添加了系统标记 {systemtag} 到 {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s 添加系统标记 %3$s 到 %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} 添加系统标记 {systemtag} 到 {file}", + "You removed system tag %2$s from %1$s" : "你移除的系统标记 %2$s 于 %1$s", + "You removed system tag {systemtag} from {file}" : "你移除了系统标记 {systemtag} 从 {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s 移除了系统标记 %3$s 从 %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} 移除了系统标记 {systemtag} 从 {file}", "%s (restricted)" : "%s (受限)", "%s (invisible)" : "%s (不可见)", "<strong>System tags</strong> for a file have been modified" : "已更改的文件的<strong>系统标签</strong> ", + "Collaborative tags" : "协同标记", "Name" : "名称", "Delete" : "删除", "Public" : "公开", @@ -42,11 +50,16 @@ "No entries found in this folder" : "此文件夹中无项目", "Size" : "大小", "Modified" : "修改日期", + "You assigned system tag %3$s" : "你指定的系统标记 %3$s", "%1$s assigned system tag %3$s" : "%1$s 分配了系统标签 %3$s", "You unassigned system tag %3$s" : "未赋值系统标签 %3$s", "%1$s unassigned system tag %3$s" : "%1$s 取消分配了系统标签 %3$s", + "You created system tag %2$s" : "你创建了系统标记 %2$s", "You deleted system tag %2$s" : "删除了系统标识 %2$s", + "You updated system tag %3$s to %2$s" : "你更新了系统标记 %3$s 到 %2$s", + "You assigned system tag %3$s to %2$s" : "你指定了系统标记 %3$s 到 %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s 分配了系统标签 %3$s 到 %2$s", + "You unassigned system tag %3$s from %2$s" : "你未指定系统标记 %3$s 于 %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s 取消分配系统标签 %3$s 从 %2$s" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/theming/l10n/fi.js b/apps/theming/l10n/fi.js new file mode 100644 index 00000000000..cd9b98d29d7 --- /dev/null +++ b/apps/theming/l10n/fi.js @@ -0,0 +1,27 @@ +OC.L10N.register( + "theming", + { + "Admin" : "Ylläpito", + "a safe home for all your data" : "turvallinen koti kaikille tiedostoillesi", + "The given name is too long" : "Nimi on liian pitkä", + "The given web address is too long" : "Verkko-osoite on liian pitkä", + "The given slogan is too long" : "Slogani on liian pitkä", + "The given color is invalid" : "Väri on virheellinen", + "Saved" : "Tallennettu", + "No file uploaded" : "Ei tiedostoa lähetetty", + "Unsupported image type" : "Ei-tuettu kuvatiedostomuoto", + "You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua", + "Theming" : "Ulkoasu", + "Name" : "Nimi", + "reset to default" : "palauta oletukseksi", + "Web address" : "Verkko-osoite", + "Web address https://…" : "Verkko-osoite https://...", + "Slogan" : "Slogani", + "Color" : "Väri", + "Logo" : "Logo", + "Upload new logo" : "Lähetä uusi logo", + "Login image" : "Kirjautumissivun kuva", + "Upload new login background" : "Lähetä uusi kirjautumissivun taustakuva", + "Log in image" : "Kirjautumissivun kuva" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/theming/l10n/fi.json b/apps/theming/l10n/fi.json new file mode 100644 index 00000000000..d4577c727dd --- /dev/null +++ b/apps/theming/l10n/fi.json @@ -0,0 +1,25 @@ +{ "translations": { + "Admin" : "Ylläpito", + "a safe home for all your data" : "turvallinen koti kaikille tiedostoillesi", + "The given name is too long" : "Nimi on liian pitkä", + "The given web address is too long" : "Verkko-osoite on liian pitkä", + "The given slogan is too long" : "Slogani on liian pitkä", + "The given color is invalid" : "Väri on virheellinen", + "Saved" : "Tallennettu", + "No file uploaded" : "Ei tiedostoa lähetetty", + "Unsupported image type" : "Ei-tuettu kuvatiedostomuoto", + "You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua", + "Theming" : "Ulkoasu", + "Name" : "Nimi", + "reset to default" : "palauta oletukseksi", + "Web address" : "Verkko-osoite", + "Web address https://…" : "Verkko-osoite https://...", + "Slogan" : "Slogani", + "Color" : "Väri", + "Logo" : "Logo", + "Upload new logo" : "Lähetä uusi logo", + "Login image" : "Kirjautumissivun kuva", + "Upload new login background" : "Lähetä uusi kirjautumissivun taustakuva", + "Log in image" : "Kirjautumissivun kuva" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/theming/l10n/tr.js b/apps/theming/l10n/tr.js new file mode 100644 index 00000000000..a48fd2327d0 --- /dev/null +++ b/apps/theming/l10n/tr.js @@ -0,0 +1,27 @@ +OC.L10N.register( + "theming", + { + "Admin" : "Yönetici", + "a safe home for all your data" : "verileriniz için güvenli bir barınak", + "The given name is too long" : "Belirtilen ad çok uzun", + "The given web address is too long" : "Belirtilen web adresi çok uzun", + "The given slogan is too long" : "Belirtilen slogan çok uzun", + "The given color is invalid" : "Belirtilen renk geçersiz", + "Saved" : "Kaydedildi", + "No file uploaded" : "Herhangi bir dosya yüklenmemiş", + "Unsupported image type" : "Görsel türü desteklenmiyor", + "You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz", + "Theming" : "Tema", + "Name" : "Ad", + "reset to default" : "varsayılana dön", + "Web address" : "Web adresi", + "Web address https://…" : "Web adresi https://...", + "Slogan" : "Slogan", + "Color" : "Renk", + "Logo" : "Logo", + "Upload new logo" : "Yeni logo yükle", + "Login image" : "Oturum açma görseli", + "Upload new login background" : "Yeni oturum açma art alanı yükle", + "Log in image" : "Oturum açma görseli" +}, +"nplurals=2; plural=(n > 1);"); diff --git a/apps/theming/l10n/tr.json b/apps/theming/l10n/tr.json new file mode 100644 index 00000000000..4e2071a0cf9 --- /dev/null +++ b/apps/theming/l10n/tr.json @@ -0,0 +1,25 @@ +{ "translations": { + "Admin" : "Yönetici", + "a safe home for all your data" : "verileriniz için güvenli bir barınak", + "The given name is too long" : "Belirtilen ad çok uzun", + "The given web address is too long" : "Belirtilen web adresi çok uzun", + "The given slogan is too long" : "Belirtilen slogan çok uzun", + "The given color is invalid" : "Belirtilen renk geçersiz", + "Saved" : "Kaydedildi", + "No file uploaded" : "Herhangi bir dosya yüklenmemiş", + "Unsupported image type" : "Görsel türü desteklenmiyor", + "You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz", + "Theming" : "Tema", + "Name" : "Ad", + "reset to default" : "varsayılana dön", + "Web address" : "Web adresi", + "Web address https://…" : "Web adresi https://...", + "Slogan" : "Slogan", + "Color" : "Renk", + "Logo" : "Logo", + "Upload new logo" : "Yeni logo yükle", + "Login image" : "Oturum açma görseli", + "Upload new login background" : "Yeni oturum açma art alanı yükle", + "Log in image" : "Oturum açma görseli" +},"pluralForm" :"nplurals=2; plural=(n > 1);" +}
\ No newline at end of file diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 36f19157637..20625116213 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -28,6 +28,7 @@ use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; use OCP\Files\IRootFolder; +use OCP\Util; class ThemingDefaults extends \OC_Defaults { @@ -81,7 +82,7 @@ class ThemingDefaults extends \OC_Defaults { } public function getName() { - return $this->config->getAppValue('theming', 'name', $this->name); + return strip_tags($this->config->getAppValue('theming', 'name', $this->name)); } public function getHTMLName() { @@ -89,11 +90,11 @@ class ThemingDefaults extends \OC_Defaults { } public function getTitle() { - return $this->config->getAppValue('theming', 'name', $this->name); + return $this->getName(); } public function getEntity() { - return $this->config->getAppValue('theming', 'name', $this->name); + return $this->getName(); } public function getBaseUrl() { @@ -101,7 +102,7 @@ class ThemingDefaults extends \OC_Defaults { } public function getSlogan() { - return $this->config->getAppValue('theming', 'slogan', $this->slogan); + return Util::sanitizeHTML($this->config->getAppValue('theming', 'slogan', $this->slogan)); } public function getShortFooter() { diff --git a/apps/twofactor_backupcodes/l10n/de_DE.js b/apps/twofactor_backupcodes/l10n/de_DE.js index 5fad4c9d00a..0764ef3b7a4 100644 --- a/apps/twofactor_backupcodes/l10n/de_DE.js +++ b/apps/twofactor_backupcodes/l10n/de_DE.js @@ -1,13 +1,13 @@ OC.L10N.register( "twofactor_backupcodes", { - "Generate backup codes" : "Backup-Codes erstellen", + "Generate backup codes" : "Backup-Codes erzeugen", "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden verwandt.", "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können", "Save backup codes" : "Backup-Codes speichern", "Print backup codes" : "Backup-Codes drucken", "Regenerate backup codes" : "Backup-Codes erneuern", - "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.", + "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.", "An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten", "Nextcloud backup codes" : "Nextcloud Backup-Codes", "Two-factor authentication" : "Zwei-Faktor Authentifizierung", diff --git a/apps/twofactor_backupcodes/l10n/de_DE.json b/apps/twofactor_backupcodes/l10n/de_DE.json index a30433935d3..43f36e49cb3 100644 --- a/apps/twofactor_backupcodes/l10n/de_DE.json +++ b/apps/twofactor_backupcodes/l10n/de_DE.json @@ -1,11 +1,11 @@ { "translations": { - "Generate backup codes" : "Backup-Codes erstellen", + "Generate backup codes" : "Backup-Codes erzeugen", "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden verwandt.", "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können", "Save backup codes" : "Backup-Codes speichern", "Print backup codes" : "Backup-Codes drucken", "Regenerate backup codes" : "Backup-Codes erneuern", - "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.", + "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.", "An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten", "Nextcloud backup codes" : "Nextcloud Backup-Codes", "Two-factor authentication" : "Zwei-Faktor Authentifizierung", diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml index d920e866f1c..3ddde656be7 100644 --- a/apps/updatenotification/appinfo/info.xml +++ b/apps/updatenotification/appinfo/info.xml @@ -2,7 +2,7 @@ <info> <id>updatenotification</id> <name>Update notification</name> - <description>Displays update notifications for ownCloud and provides the SSO for the updater.</description> + <description>Displays update notifications for Nextcloud and provides the SSO for the updater.</description> <licence>AGPL</licence> <author>Lukas Reschke</author> <version>1.2.0</version> diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index 3c1e8483b68..3b7ba60278a 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -157,11 +157,11 @@ OC.L10N.register( "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", "Override UUID detection" : "Negeren UUID detectie", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard wordt het UUID-attribuut automatisch herkend. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Gebruikersnamen worden gebruikt om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de gebruikersnaam naar een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne gebruikersnaam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling", "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter." diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index a7dbe6a9afb..7c4acecdf8f 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -155,11 +155,11 @@ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", "Override UUID detection" : "Negeren UUID detectie", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard wordt het UUID-attribuut automatisch herkend. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Gebruikersnamen worden gebruikt om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de gebruikersnaam naar een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne gebruikersnaam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling", "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter." diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index 0273227fa28..1c96aca2175 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -1,31 +1,31 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Eşleştirmeler temizlenirken hata oluştu.", - "Failed to delete the server configuration" : "Sunucu yapılandırmasını silme başarısız oldu", - "The configuration is invalid: anonymous bind is not allowed." : "Yapılandırma geçersiz: anonim atamaya izin verilmiyor.", - "The configuration is valid and the connection could be established!" : "Yapılandırma geçerli ve bağlantı kuruldu!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Yapılandırma geçerli fakat bağlama (bind) başarısız. Lütfen sunucu ayarları ve kimlik bilgilerini kontrol edin.", - "The configuration is invalid. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılar için günlüklere bakın.", - "No action specified" : "Eylem belirtilmedi", - "No configuration specified" : "Yapılandırma belirtilmemiş", - "No data specified" : "Veri belirtilmemiş", + "Failed to clear the mappings." : "Eşleştirmeler temizlenemedi.", + "Failed to delete the server configuration" : "Sunucu yapılandırması silinemedi", + "The configuration is invalid: anonymous bind is not allowed." : "Yapılandırma geçersiz: anonim bağlamaya izin verilmiyor.", + "The configuration is valid and the connection could be established!" : "Yapılandırma geçerli. Bağlanabilir!", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Yapılandırma geçerli ancak bağlanamadı. Lütfen sunucu ayarları ve kimlik doğrulama bilgilerini denetleyin.", + "The configuration is invalid. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlüklere bakın.", + "No action specified" : "Hehrangi bir işlem belirtilmemiş", + "No configuration specified" : "Herhangi bir yapılandırma belirtilmemiş", + "No data specified" : "Herhangi bir veri belirtilmemiş", " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", - "Action does not exist" : "Eylem mevcut değil", - "The Base DN appears to be wrong" : "Base DN yanlış gibi görünüyor", + "Action does not exist" : "İşlem bulunamadı", + "The Base DN appears to be wrong" : "Base DN hatalı gibi görünüyor", "Testing configuration…" : "Yapılandırma sınanıyor...", - "Configuration incorrect" : "Yapılandırma geçersiz", + "Configuration incorrect" : "Yapılandırma hatalı", "Configuration incomplete" : "Yapılandırma tamamlanmamış", - "Configuration OK" : "Yapılandırma tamam", - "Select groups" : "Grupları seç", - "Select object classes" : "Nesne sınıflarını seç", - "Please check the credentials, they seem to be wrong." : "Lütfen kimlik bilgilerini kontrol edin, yanlış görünüyorlar.", - "Please specify the port, it could not be auto-detected." : "Lütfen bağlantı noktası belirtin, otomatik olarak algılanamadı.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak tespit edilemedi, lütfen kimlik bilgilerini, sunucuyu ve bağlantı noktasını gözden geçirin.", - "Could not detect Base DN, please enter it manually." : "Base DN tespit edilemedi, lütfen elle girin.", + "Configuration OK" : "Yapılandırma tamamlanmış", + "Select groups" : "Grupları seçin", + "Select object classes" : "Nesne sınıflarını seçin", + "Please check the credentials, they seem to be wrong." : "Lütfen kimlik doğrulama bilgilerini denetleyin, hatalı görünüyor.", + "Please specify the port, it could not be auto-detected." : "Lütfen kapı numarasını belirtin. Otomatik olarak algılanamadı.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve kapı numarasını gözden geçirin.", + "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", "{nthServer}. Server" : "{nthServer}. Sunucu", - "No object found in the given Base DN. Please revise." : "Girilen Base DN içerisinde nesne bulunamadı. Lütfen gözden geçirin.", - "More than 1,000 directory entries available." : "1000'den fazla dizin şu an müsait durumdadır.", + "No object found in the given Base DN. Please revise." : "Belirtilen Base DN içerisinde herhangi bir nesne bulunamadı. Lütfen gözden geçirin.", + "More than 1,000 directory entries available." : "Kullanılabilecek 1000'den fazla dizin kaydı var.", " entries available within the provided Base DN" : " girdi sağlanan Base DN içerisinde mevcut", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Bir hata oluştu. Lütfen Base DN ile birlikte bağlantı ayarlarını ve kimlik bilgilerini denetleyin.", "Do you really want to delete the current Server Configuration?" : "Şu anki sunucu yapılandırmasını silmek istediğinizden emin misiniz?", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index fabe190acc1..2be5857938a 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -1,29 +1,29 @@ { "translations": { - "Failed to clear the mappings." : "Eşleştirmeler temizlenirken hata oluştu.", - "Failed to delete the server configuration" : "Sunucu yapılandırmasını silme başarısız oldu", - "The configuration is invalid: anonymous bind is not allowed." : "Yapılandırma geçersiz: anonim atamaya izin verilmiyor.", - "The configuration is valid and the connection could be established!" : "Yapılandırma geçerli ve bağlantı kuruldu!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Yapılandırma geçerli fakat bağlama (bind) başarısız. Lütfen sunucu ayarları ve kimlik bilgilerini kontrol edin.", - "The configuration is invalid. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılar için günlüklere bakın.", - "No action specified" : "Eylem belirtilmedi", - "No configuration specified" : "Yapılandırma belirtilmemiş", - "No data specified" : "Veri belirtilmemiş", + "Failed to clear the mappings." : "Eşleştirmeler temizlenemedi.", + "Failed to delete the server configuration" : "Sunucu yapılandırması silinemedi", + "The configuration is invalid: anonymous bind is not allowed." : "Yapılandırma geçersiz: anonim bağlamaya izin verilmiyor.", + "The configuration is valid and the connection could be established!" : "Yapılandırma geçerli. Bağlanabilir!", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Yapılandırma geçerli ancak bağlanamadı. Lütfen sunucu ayarları ve kimlik doğrulama bilgilerini denetleyin.", + "The configuration is invalid. Please have a look at the logs for further details." : "Yapılandırma geçersiz. Lütfen ayrıntılı bilgi almak için günlüklere bakın.", + "No action specified" : "Hehrangi bir işlem belirtilmemiş", + "No configuration specified" : "Herhangi bir yapılandırma belirtilmemiş", + "No data specified" : "Herhangi bir veri belirtilmemiş", " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", - "Action does not exist" : "Eylem mevcut değil", - "The Base DN appears to be wrong" : "Base DN yanlış gibi görünüyor", + "Action does not exist" : "İşlem bulunamadı", + "The Base DN appears to be wrong" : "Base DN hatalı gibi görünüyor", "Testing configuration…" : "Yapılandırma sınanıyor...", - "Configuration incorrect" : "Yapılandırma geçersiz", + "Configuration incorrect" : "Yapılandırma hatalı", "Configuration incomplete" : "Yapılandırma tamamlanmamış", - "Configuration OK" : "Yapılandırma tamam", - "Select groups" : "Grupları seç", - "Select object classes" : "Nesne sınıflarını seç", - "Please check the credentials, they seem to be wrong." : "Lütfen kimlik bilgilerini kontrol edin, yanlış görünüyorlar.", - "Please specify the port, it could not be auto-detected." : "Lütfen bağlantı noktası belirtin, otomatik olarak algılanamadı.", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak tespit edilemedi, lütfen kimlik bilgilerini, sunucuyu ve bağlantı noktasını gözden geçirin.", - "Could not detect Base DN, please enter it manually." : "Base DN tespit edilemedi, lütfen elle girin.", + "Configuration OK" : "Yapılandırma tamamlanmış", + "Select groups" : "Grupları seçin", + "Select object classes" : "Nesne sınıflarını seçin", + "Please check the credentials, they seem to be wrong." : "Lütfen kimlik doğrulama bilgilerini denetleyin, hatalı görünüyor.", + "Please specify the port, it could not be auto-detected." : "Lütfen kapı numarasını belirtin. Otomatik olarak algılanamadı.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN otomatik olarak algılanamadı. Lütfen kimlik doğrulama bilgilerini, sunucu ve kapı numarasını gözden geçirin.", + "Could not detect Base DN, please enter it manually." : "Base DN algılanamadı. Lütfen el ile yazın.", "{nthServer}. Server" : "{nthServer}. Sunucu", - "No object found in the given Base DN. Please revise." : "Girilen Base DN içerisinde nesne bulunamadı. Lütfen gözden geçirin.", - "More than 1,000 directory entries available." : "1000'den fazla dizin şu an müsait durumdadır.", + "No object found in the given Base DN. Please revise." : "Belirtilen Base DN içerisinde herhangi bir nesne bulunamadı. Lütfen gözden geçirin.", + "More than 1,000 directory entries available." : "Kullanılabilecek 1000'den fazla dizin kaydı var.", " entries available within the provided Base DN" : " girdi sağlanan Base DN içerisinde mevcut", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Bir hata oluştu. Lütfen Base DN ile birlikte bağlantı ayarlarını ve kimlik bilgilerini denetleyin.", "Do you really want to delete the current Server Configuration?" : "Şu anki sunucu yapılandırmasını silmek istediğinizden emin misiniz?", diff --git a/apps/workflowengine/l10n/de_DE.js b/apps/workflowengine/l10n/de_DE.js index 55e23518b64..e5c0d65a45f 100644 --- a/apps/workflowengine/l10n/de_DE.js +++ b/apps/workflowengine/l10n/de_DE.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Successfully saved" : "Erfolgreich gespeichert", "Saving failed:" : "Speichern fehlgeschlagen:", - "File mime type" : "Datei Mime-Typ", + "File mime type" : "Datei MIME-Typ", "is" : "ist", "is not" : "ist nicht", "matches" : "passt zu", diff --git a/apps/workflowengine/l10n/de_DE.json b/apps/workflowengine/l10n/de_DE.json index 4e44958cf39..6c4b954f282 100644 --- a/apps/workflowengine/l10n/de_DE.json +++ b/apps/workflowengine/l10n/de_DE.json @@ -1,7 +1,7 @@ { "translations": { "Successfully saved" : "Erfolgreich gespeichert", "Saving failed:" : "Speichern fehlgeschlagen:", - "File mime type" : "Datei Mime-Typ", + "File mime type" : "Datei MIME-Typ", "is" : "ist", "is not" : "ist nicht", "matches" : "passt zu", diff --git a/apps/workflowengine/l10n/sk.js b/apps/workflowengine/l10n/sk.js index b524bd9d956..795f6e96783 100644 --- a/apps/workflowengine/l10n/sk.js +++ b/apps/workflowengine/l10n/sk.js @@ -8,6 +8,7 @@ OC.L10N.register( "is not" : "nie je", "matches" : "súhlasí", "does not match" : "nesúhlasí", + "Example: {placeholder}" : "Napríklad: {placeholder}", "File size (upload)" : "Veľkosť súboru (upload)", "less" : "menej", "less or equals" : "menej alebo rovné", diff --git a/apps/workflowengine/l10n/sk.json b/apps/workflowengine/l10n/sk.json index 4cad6608288..8840484f806 100644 --- a/apps/workflowengine/l10n/sk.json +++ b/apps/workflowengine/l10n/sk.json @@ -6,6 +6,7 @@ "is not" : "nie je", "matches" : "súhlasí", "does not match" : "nesúhlasí", + "Example: {placeholder}" : "Napríklad: {placeholder}", "File size (upload)" : "Veľkosť súboru (upload)", "less" : "menej", "less or equals" : "menej alebo rovné", |