Compare commits
312 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 573099c47d | |||
| ab40d76c99 | |||
| 62d7165124 | |||
| 47530ef95f | |||
| 22ebf79e90 | |||
| 9fde2523e6 | |||
| ad8576f02d | |||
| e5497c7731 | |||
| 6eb8e8d6fd | |||
| a4cf7145cd | |||
| 7d1b1de155 | |||
| fb2716ab4b | |||
| a623bffb00 | |||
| f0b90e6378 | |||
| 8ac1602402 | |||
| 5f6a777c5b | |||
| dac8fe4034 | |||
| 891d0fc481 | |||
| 172698e61a | |||
| 942a92f072 | |||
| d26ec02aa1 | |||
| a8369cdbee | |||
| 038d940df1 | |||
| a2d0d8b26b | |||
| 108858daef | |||
| ab8e4e60ea | |||
| c59ad1f847 | |||
| fa535d0e20 | |||
| 41e1a995a9 | |||
| 6248afe544 | |||
| e3f951b804 | |||
| 467487ecd8 | |||
| ae74dbef2b | |||
| 663f6822c7 | |||
| 5924a2e3ec | |||
| bd664cb8fd | |||
| 805805767f | |||
| 0fa396d0b8 | |||
| 5acb93a5be | |||
| 048037b629 | |||
| f31f4eba7f | |||
| dc843f6d0a | |||
| 3c80b7f2b3 | |||
| a1979c9cd1 | |||
| c1dd559965 | |||
| 166febb940 | |||
| 408f9e8256 | |||
| 0461301597 | |||
| 08d4ccb36f | |||
| 31957add33 | |||
| e76f9284ce | |||
| a05c285979 | |||
| 1ec308a9dd | |||
| 0e22ae1efe | |||
| 5ed7c4fd97 | |||
| 545c72becb | |||
| e1133ec926 | |||
| d4674060dc | |||
| 38ed0a8283 | |||
| 4c8b9deca0 | |||
| 5c652484e3 | |||
| a5225bdf99 | |||
| ac3d09d817 | |||
| 2c3872f325 | |||
| bad5531860 | |||
| 29e31ffdb1 | |||
| bdd379e82e | |||
| 8c93d4a9e1 | |||
| 5f33fee58f | |||
| 258b30606f | |||
| 1182b6d4f0 | |||
| a45978789b | |||
| 42d745e17b | |||
| 4dcd4223de | |||
| 43727cb72c | |||
| 89166cbf9a | |||
| 6bdda55733 | |||
| f0e020f97d | |||
| 0e99c60da1 | |||
| 98619ca6fb | |||
| 8b4491ae1c | |||
| 2a2cd291d5 | |||
| 835d507d64 | |||
| 954945a26b | |||
| f4acd8a7ab | |||
| bd90e7c122 | |||
| 8d50027e78 | |||
| 29488d6a78 | |||
| 716513164f | |||
| e0e5cdf3e1 | |||
| 9e2058d199 | |||
| a1503481f3 | |||
| b9c3e47b82 | |||
| 18a7369bb9 | |||
| f89613b507 | |||
| 252956d6b2 | |||
| 3e9d2fe208 | |||
| 7335927bed | |||
| 6ce24383c2 | |||
| a17a4f4958 | |||
| 2b97afa829 | |||
| d341c2011f | |||
| 7eea3b7742 | |||
| 7c526b4de3 | |||
| 327d691c23 | |||
| 635e26dfdc | |||
| 80f6856ce7 | |||
| 2510020b33 | |||
| 927bea2b4d | |||
| 3713f40d5b | |||
| a82827dff5 | |||
| 6c20e3e103 | |||
| bacb4323de | |||
| e7d0ed2020 | |||
| 6b121c37da | |||
| 3b9ec2d119 | |||
| c2cd236411 | |||
| f870041943 | |||
| acfec22652 | |||
| 272d6141ca | |||
| be3bbf22e0 | |||
| c14948f629 | |||
| fa61c4c57d | |||
| 6dd6d06606 | |||
| 9dffca2f07 | |||
| 73e84f9bf5 | |||
| d64f7eb939 | |||
| 5565cdb390 | |||
| 765d1af2a6 | |||
| c80c980e29 | |||
| e3551e576c | |||
| 198d500ac6 | |||
| 328a4608aa | |||
| 7e188433a1 | |||
| acb3e68a93 | |||
| fbb551311e | |||
| 81a21fb718 | |||
| c2ae99a668 | |||
| 8265e4b489 | |||
| 932523e844 | |||
| 6fd76bfa0e | |||
| 510c203dfe | |||
| 0514ecfb96 | |||
| 91a544ef45 | |||
| a0c922cc7f | |||
| 2da078f258 | |||
| 36b0d7c189 | |||
| fe34ea5ec7 | |||
| ae250777fd | |||
| 17aa77e29f | |||
| 43f2470f90 | |||
| d5eab95414 | |||
| 7e4c4f2f3c | |||
| de286709f8 | |||
| d86975e9fa | |||
| 03adb7e184 | |||
| 8eb24155c4 | |||
| 377de23bf5 | |||
| 73dd45be4f | |||
| adf7ea5f0b | |||
| cc89a2a2b8 | |||
| 5403284b23 | |||
| f56f747f46 | |||
| 7a2606b894 | |||
| eb91d8671d | |||
| 1a5ad32063 | |||
| a1fbd55992 | |||
| a6a320498b | |||
| 3e4e544096 | |||
| 1a7f2f878e | |||
| f6a783e07b | |||
| 7436340f4c | |||
| 58c6a8387b | |||
| 6af64a5495 | |||
| 66c8f9c4dc | |||
| 52cfd57af9 | |||
| 6a75cd9454 | |||
| 8e5ae53e02 | |||
| ab122ac15d | |||
| f2e2e4ea21 | |||
| 534632334c | |||
| 15b45975e2 | |||
| 2d22c4f654 | |||
| 07eef5eaf4 | |||
| 09e0f06678 | |||
| 47acb66b9c | |||
| 6b3d3fd2d3 | |||
| f42493bf1e | |||
| fe393c5dbf | |||
| bd815595d4 | |||
| 86c90221f1 | |||
| 0cdd19271d | |||
| 513b37916f | |||
| 9e516beb85 | |||
| 6b6deefee9 | |||
| 8d55b13641 | |||
| 2bd2cc71e5 | |||
| 40b79f5af8 | |||
| 6eb1609b35 | |||
| 58de51160c | |||
| a430702caa | |||
| 351351a832 | |||
| 944341543e | |||
| e5c989066f | |||
| 62513dfd92 | |||
| 649e042568 | |||
| 71fa5937b2 | |||
| 6ee8325b3e | |||
| 47de164946 | |||
| c57c4843e8 | |||
| 7c64394617 | |||
| c09168e911 | |||
| 9f7d4d055e | |||
| c3be0b8814 | |||
| 1432c97584 | |||
| 178fb77be8 | |||
| 86fe44d9f4 | |||
| fdfaf6b363 | |||
| ad13a8acc7 | |||
| 693a2263cc | |||
| 65d44b0007 | |||
| ec9cac90e0 | |||
| e63c4afdab | |||
| e1d19b2c24 | |||
| 72ad2edcd7 | |||
| 72632faaf1 | |||
| ebab99ec9a | |||
| e6ac79d570 | |||
| 7c1a8a4060 | |||
| 5f797ebc32 | |||
| a100ede789 | |||
| f546daada7 | |||
| c32009fd32 | |||
| 72be2f41b3 | |||
| 758a9c26db | |||
| 0c6565ea44 | |||
| 33e5f2d345 | |||
| 16d8cc065a | |||
| 0a3cc4dd6f | |||
| c6b095234e | |||
| f9d4bb2ba8 | |||
| ad61aa7a30 | |||
| 8cc588fc42 | |||
| 35bfa1d2f0 | |||
| 5d3e1f70b2 | |||
| 8a05a3e01b | |||
| afa23291d6 | |||
| c50c5a9e6b | |||
| eb0369705a | |||
| fe0c56a1d7 | |||
| 98a4b959ec | |||
| fd96a32dda | |||
| 3726596ad0 | |||
| f9a137ea87 | |||
| 7077685bf8 | |||
| 34511e9036 | |||
| 493c371a22 | |||
| 4a9cdeb01f | |||
| 7abd46fb53 | |||
| fb18804192 | |||
| 513c0cceb6 | |||
| 867a8d1088 | |||
| 56658fc3ef | |||
| dc5d199e3a | |||
| 41c739d370 | |||
| 68149e01cb | |||
| 44216b36e4 | |||
| 68b8e2662d | |||
| 24ec0e85e5 | |||
| eafbb5a23c | |||
| 8cfb49012d | |||
| 39c8141f0c | |||
| 5c51b42d3f | |||
| 80caedb050 | |||
| 853db93601 | |||
| 355d6637ff | |||
| 183136d166 | |||
| b872208285 | |||
| 9ed9a317f5 | |||
| 674381e8c1 | |||
| bbbbc4de22 | |||
| b28176458d | |||
| 69249a3ce3 | |||
| 3555e00754 | |||
| 6111ecefbc | |||
| c11cc64470 | |||
| a6184661bd | |||
| 981e987bd0 | |||
| f9157c85c2 | |||
| fbe2023d39 | |||
| d59d8db1d6 | |||
| 694651de3a | |||
| 70ed393b34 | |||
| 3de06a2b33 | |||
| d3432482cc | |||
| e456f116b8 | |||
| b6ea2bc0f5 | |||
| 65aa731ef3 | |||
| 812f12ecc4 | |||
| 2ba3766bef | |||
| fbd99cef8f | |||
| a9b17a1a16 | |||
| 5f5bb77bf3 | |||
| fbe5238d7f | |||
| cc96a16df5 | |||
| 04f30cad62 | |||
| 23546013e1 | |||
| 45eb87ba6e | |||
| 01e0ca7298 | |||
| 3bb5ed502a | |||
| 13bfd8b292 | |||
| 4914b4aff3 |
@@ -53,7 +53,13 @@ jobs:
|
||||
|
||||
services:
|
||||
samba:
|
||||
image: ghcr.io/nextcloud/continuous-integration-samba:latest # zizmor: ignore[unpinned-images]
|
||||
image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0
|
||||
env:
|
||||
ACCOUNT_test: test
|
||||
UID_test: 1000
|
||||
SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes"
|
||||
options: >-
|
||||
--health-cmd=true
|
||||
ports:
|
||||
- 445:445
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ on:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
concurrency:
|
||||
group: static-code-analysis-${{ github.head_ref || github.run_id }}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Files removed at build time
|
||||
|
||||
# Global exclude
|
||||
.editorconfig
|
||||
.git
|
||||
.git-blame-ignore-revs
|
||||
.gitattributes
|
||||
.github
|
||||
.gitignore
|
||||
.gitmodules
|
||||
.idea
|
||||
.l10nignore
|
||||
.nextcloudignore
|
||||
.noopenapi
|
||||
.tx
|
||||
cypress
|
||||
tests
|
||||
|
||||
# Server specific
|
||||
/.devcontainer
|
||||
/__mocks__
|
||||
/__tests__
|
||||
/autotest*.sh
|
||||
/build
|
||||
/config/config.php
|
||||
/contribute
|
||||
/data
|
||||
+1
-1
Submodule 3rdparty updated: 086aa0783e...c62b6ed5cd
@@ -18,7 +18,7 @@ class TagManagement extends Action {
|
||||
$this->log('System tag "%s" (%s, %s) created',
|
||||
[
|
||||
'name' => $tag->getName(),
|
||||
'visbility' => $tag->isUserVisible() ? 'visible' : 'invisible',
|
||||
'visibility' => $tag->isUserVisible() ? 'visible' : 'invisible',
|
||||
'assignable' => $tag->isUserAssignable() ? 'user assignable' : 'system only',
|
||||
],
|
||||
['name', 'visibility', 'assignable']
|
||||
|
||||
@@ -25,6 +25,15 @@ return [
|
||||
'url' => '/invite-accepted',
|
||||
'verb' => 'POST',
|
||||
'root' => '/ocm',
|
||||
]
|
||||
],
|
||||
|
||||
// needs to be kept at the bottom of the list
|
||||
[
|
||||
'name' => 'OCMRequest#manageOCMRequests',
|
||||
'url' => '/{ocmPath}',
|
||||
'requirements' => ['ocmPath' => '.*'],
|
||||
'verb' => ['GET', 'POST', 'PUT', 'DELETE'],
|
||||
'root' => '/ocm',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -10,6 +10,7 @@ return array(
|
||||
'OCA\\CloudFederationAPI\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\CloudFederationAPI\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
|
||||
'OCA\\CloudFederationAPI\\Config' => $baseDir . '/../lib/Config.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\OCMRequestController' => $baseDir . '/../lib/Controller/OCMRequestController.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => $baseDir . '/../lib/Controller/RequestHandlerController.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => $baseDir . '/../lib/Db/FederatedInvite.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => $baseDir . '/../lib/Db/FederatedInviteMapper.php',
|
||||
|
||||
@@ -25,6 +25,7 @@ class ComposerStaticInitCloudFederationAPI
|
||||
'OCA\\CloudFederationAPI\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\CloudFederationAPI\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
|
||||
'OCA\\CloudFederationAPI\\Config' => __DIR__ . '/..' . '/../lib/Config.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\OCMRequestController' => __DIR__ . '/..' . '/../lib/Controller/OCMRequestController.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => __DIR__ . '/..' . '/../lib/Controller/RequestHandlerController.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => __DIR__ . '/..' . '/../lib/Db/FederatedInvite.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => __DIR__ . '/..' . '/../lib/Db/FederatedInviteMapper.php',
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Controller;
|
||||
|
||||
use JsonException;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\BruteForceProtection;
|
||||
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
|
||||
use OCP\AppFramework\Http\Attribute\PublicPage;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IRequest;
|
||||
use OCP\OCM\Events\OCMEndpointRequestEvent;
|
||||
use OCP\OCM\Exceptions\OCMArgumentException;
|
||||
use OCP\OCM\IOCMDiscoveryService;
|
||||
use OCP\Security\Signature\Exceptions\IncomingRequestException;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class OCMRequestController extends Controller {
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
private readonly IEventDispatcher $eventDispatcher,
|
||||
private readonly IOCMDiscoveryService $ocmDiscoveryService,
|
||||
private readonly LoggerInterface $logger,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method will catch any request done to /ocm/[...] and will broadcast an event.
|
||||
* The first parameter of the remaining subpath (post-/ocm/) is defined as
|
||||
* capability and should be used by listeners to filter incoming requests.
|
||||
*
|
||||
* @see OCMEndpointRequestEvent
|
||||
* @see OCMEndpointRequestEvent::getArgs
|
||||
*
|
||||
* @param string $ocmPath
|
||||
* @return Response
|
||||
* @throws OCMArgumentException
|
||||
*/
|
||||
#[NoCSRFRequired]
|
||||
#[PublicPage]
|
||||
#[BruteForceProtection(action: 'receiveOcmRequest')]
|
||||
public function manageOCMRequests(string $ocmPath): Response {
|
||||
if (!mb_check_encoding($ocmPath, 'UTF-8')) {
|
||||
throw new OCMArgumentException('path is not UTF-8');
|
||||
}
|
||||
|
||||
try {
|
||||
// if request is signed and well signed, no exceptions are thrown
|
||||
// if request is not signed and host is known for not supporting signed request, no exceptions are thrown
|
||||
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
|
||||
} catch (IncomingRequestException $e) {
|
||||
$this->logger->warning('incoming ocm request exception', ['exception' => $e]);
|
||||
return new JSONResponse(['message' => $e->getMessage(), 'validationErrors' => []], Http::STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
// assuming that ocm request contains a json array
|
||||
$payload = $signedRequest?->getBody() ?? file_get_contents('php://input');
|
||||
try {
|
||||
$payload = ($payload) ? json_decode($payload, true, 512, JSON_THROW_ON_ERROR) : null;
|
||||
} catch (JsonException $e) {
|
||||
$this->logger->debug('json decode error', ['exception' => $e]);
|
||||
$payload = null;
|
||||
}
|
||||
|
||||
$event = new OCMEndpointRequestEvent(
|
||||
$this->request->getMethod(),
|
||||
preg_replace('@/+@', '/', $ocmPath),
|
||||
$payload,
|
||||
$signedRequest?->getOrigin()
|
||||
);
|
||||
$this->eventDispatcher->dispatchTyped($event);
|
||||
|
||||
return $event->getResponse() ?? new Response(Http::STATUS_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
@@ -7,14 +7,6 @@
|
||||
|
||||
namespace OCA\CloudFederationAPI\Controller;
|
||||
|
||||
use NCU\Federation\ISignedCloudFederationProvider;
|
||||
use NCU\Security\Signature\Exceptions\IdentityNotFoundException;
|
||||
use NCU\Security\Signature\Exceptions\IncomingRequestException;
|
||||
use NCU\Security\Signature\Exceptions\SignatoryNotFoundException;
|
||||
use NCU\Security\Signature\Exceptions\SignatureException;
|
||||
use NCU\Security\Signature\Exceptions\SignatureNotFoundException;
|
||||
use NCU\Security\Signature\IIncomingSignedRequest;
|
||||
use NCU\Security\Signature\ISignatureManager;
|
||||
use OC\OCM\OCMSignatoryManager;
|
||||
use OCA\CloudFederationAPI\Config;
|
||||
use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
|
||||
@@ -39,11 +31,18 @@ use OCP\Federation\Exceptions\ProviderDoesNotExistsException;
|
||||
use OCP\Federation\ICloudFederationFactory;
|
||||
use OCP\Federation\ICloudFederationProviderManager;
|
||||
use OCP\Federation\ICloudIdManager;
|
||||
use OCP\Federation\ISignedCloudFederationProvider;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUserManager;
|
||||
use OCP\OCM\IOCMDiscoveryService;
|
||||
use OCP\Security\Signature\Exceptions\IdentityNotFoundException;
|
||||
use OCP\Security\Signature\Exceptions\IncomingRequestException;
|
||||
use OCP\Security\Signature\Exceptions\SignatoryNotFoundException;
|
||||
use OCP\Security\Signature\IIncomingSignedRequest;
|
||||
use OCP\Security\Signature\ISignatureManager;
|
||||
use OCP\Share\Exceptions\ShareNotFound;
|
||||
use OCP\Util;
|
||||
use Psr\Log\LoggerInterface;
|
||||
@@ -74,8 +73,8 @@ class RequestHandlerController extends Controller {
|
||||
private readonly IAppConfig $appConfig,
|
||||
private ICloudFederationFactory $factory,
|
||||
private ICloudIdManager $cloudIdManager,
|
||||
private readonly IOCMDiscoveryService $ocmDiscoveryService,
|
||||
private readonly ISignatureManager $signatureManager,
|
||||
private readonly OCMSignatoryManager $signatoryManager,
|
||||
private ITimeFactory $timeFactory,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
@@ -108,9 +107,9 @@ class RequestHandlerController extends Controller {
|
||||
public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
|
||||
if (!$this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_DISABLED, lazy: true)) {
|
||||
try {
|
||||
// if request is signed and well signed, no exception are thrown
|
||||
// if request is signed and well signed, no exceptions are thrown
|
||||
// if request is not signed and host is known for not supporting signed request, no exception are thrown
|
||||
$signedRequest = $this->getSignedRequest();
|
||||
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
|
||||
$this->confirmSignedOrigin($signedRequest, 'owner', $owner);
|
||||
} catch (IncomingRequestException $e) {
|
||||
$this->logger->warning('incoming request exception', ['exception' => $e]);
|
||||
@@ -360,7 +359,7 @@ class RequestHandlerController extends Controller {
|
||||
try {
|
||||
// if request is signed and well signed, no exception are thrown
|
||||
// if request is not signed and host is known for not supporting signed request, no exception are thrown
|
||||
$signedRequest = $this->getSignedRequest();
|
||||
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
|
||||
$this->confirmNotificationIdentity($signedRequest, $resourceType, $notification);
|
||||
} catch (IncomingRequestException $e) {
|
||||
$this->logger->warning('incoming request exception', ['exception' => $e]);
|
||||
@@ -434,37 +433,6 @@ class RequestHandlerController extends Controller {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* returns signed request if available.
|
||||
* throw an exception:
|
||||
* - if request is signed, but wrongly signed
|
||||
* - if request is not signed but instance is configured to only accept signed ocm request
|
||||
*
|
||||
* @return IIncomingSignedRequest|null null if remote does not (and never did) support signed request
|
||||
* @throws IncomingRequestException
|
||||
*/
|
||||
private function getSignedRequest(): ?IIncomingSignedRequest {
|
||||
try {
|
||||
$signedRequest = $this->signatureManager->getIncomingSignedRequest($this->signatoryManager);
|
||||
$this->logger->debug('signed request available', ['signedRequest' => $signedRequest]);
|
||||
return $signedRequest;
|
||||
} catch (SignatureNotFoundException|SignatoryNotFoundException $e) {
|
||||
$this->logger->debug('remote does not support signed request', ['exception' => $e]);
|
||||
// remote does not support signed request.
|
||||
// currently we still accept unsigned request until lazy appconfig
|
||||
// core.enforce_signed_ocm_request is set to true (default: false)
|
||||
if ($this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_ENFORCED, lazy: true)) {
|
||||
$this->logger->notice('ignored unsigned request', ['exception' => $e]);
|
||||
throw new IncomingRequestException('Unsigned request');
|
||||
}
|
||||
} catch (SignatureException $e) {
|
||||
$this->logger->warning('wrongly signed request', ['exception' => $e]);
|
||||
throw new IncomingRequestException('Invalid signature');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* confirm that the value related to $key entry from the payload is in format userid@hostname
|
||||
* and compare hostname with the origin of the signed request.
|
||||
|
||||
@@ -9,8 +9,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace OCA\CloudFederationApi\Tests;
|
||||
|
||||
use NCU\Security\Signature\ISignatureManager;
|
||||
use OC\OCM\OCMSignatoryManager;
|
||||
use OCA\CloudFederationAPI\Config;
|
||||
use OCA\CloudFederationAPI\Controller\RequestHandlerController;
|
||||
use OCA\CloudFederationAPI\Db\FederatedInvite;
|
||||
@@ -29,6 +27,8 @@ use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\OCM\IOCMDiscoveryService;
|
||||
use OCP\Security\Signature\ISignatureManager;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\TestCase;
|
||||
@@ -45,10 +45,11 @@ class RequestHandlerControllerTest extends TestCase {
|
||||
private FederatedInviteMapper&MockObject $federatedInviteMapper;
|
||||
private AddressHandler&MockObject $addressHandler;
|
||||
private IAppConfig&MockObject $appConfig;
|
||||
|
||||
private ICloudFederationFactory&MockObject $cloudFederationFactory;
|
||||
private ICloudIdManager&MockObject $cloudIdManager;
|
||||
private IOCMDiscoveryService&MockObject $discoveryService;
|
||||
private ISignatureManager&MockObject $signatureManager;
|
||||
private OCMSignatoryManager&MockObject $signatoryManager;
|
||||
private ITimeFactory&MockObject $timeFactory;
|
||||
|
||||
private RequestHandlerController $requestHandlerController;
|
||||
@@ -69,8 +70,8 @@ class RequestHandlerControllerTest extends TestCase {
|
||||
$this->appConfig = $this->createMock(IAppConfig::class);
|
||||
$this->cloudFederationFactory = $this->createMock(ICloudFederationFactory::class);
|
||||
$this->cloudIdManager = $this->createMock(ICloudIdManager::class);
|
||||
$this->discoveryService = $this->createMock(IOCMDiscoveryService::class);
|
||||
$this->signatureManager = $this->createMock(ISignatureManager::class);
|
||||
$this->signatoryManager = $this->createMock(OCMSignatoryManager::class);
|
||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||
|
||||
$this->requestHandlerController = new RequestHandlerController(
|
||||
@@ -88,8 +89,8 @@ class RequestHandlerControllerTest extends TestCase {
|
||||
$this->appConfig,
|
||||
$this->cloudFederationFactory,
|
||||
$this->cloudIdManager,
|
||||
$this->discoveryService,
|
||||
$this->signatureManager,
|
||||
$this->signatoryManager,
|
||||
$this->timeFactory,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@
|
||||
</providers>
|
||||
</activity>
|
||||
|
||||
<openmetrics>
|
||||
<exporter>OCA\Comments\OpenMetrics\CommentsCountMetric</exporter>
|
||||
</openmetrics>
|
||||
|
||||
<collaboration>
|
||||
<plugins>
|
||||
<plugin type="autocomplete-sort">OCA\Comments\Collaboration\CommentersSorter</plugin>
|
||||
|
||||
@@ -22,5 +22,6 @@ return array(
|
||||
'OCA\\Comments\\MaxAutoCompleteResultsInitialState' => $baseDir . '/../lib/MaxAutoCompleteResultsInitialState.php',
|
||||
'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
|
||||
'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
|
||||
'OCA\\Comments\\OpenMetrics\\CommentsCountMetric' => $baseDir . '/../lib/OpenMetrics/CommentsCountMetric.php',
|
||||
'OCA\\Comments\\Search\\CommentsSearchProvider' => $baseDir . '/../lib/Search/CommentsSearchProvider.php',
|
||||
);
|
||||
|
||||
@@ -37,6 +37,7 @@ class ComposerStaticInitComments
|
||||
'OCA\\Comments\\MaxAutoCompleteResultsInitialState' => __DIR__ . '/..' . '/../lib/MaxAutoCompleteResultsInitialState.php',
|
||||
'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
|
||||
'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
|
||||
'OCA\\Comments\\OpenMetrics\\CommentsCountMetric' => __DIR__ . '/..' . '/../lib/OpenMetrics/CommentsCountMetric.php',
|
||||
'OCA\\Comments\\Search\\CommentsSearchProvider' => __DIR__ . '/..' . '/../lib/Search/CommentsSearchProvider.php',
|
||||
);
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ OC.L10N.register(
|
||||
"Delete comment" : "Ezabatu iruzkina",
|
||||
"Cancel edit" : "Utzi editatzeari",
|
||||
"New comment" : "Iruzkin berria",
|
||||
"Write a comment …" : "Idatzi iruzkin bat …",
|
||||
"Post comment" : "Argitaratu iruzkina",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ aipamenetarako, : emojientzako, / hautatzaile adimentsurako",
|
||||
"Could not reload comments" : "Ezin izan dira iruzkinak freskatu",
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"Delete comment" : "Ezabatu iruzkina",
|
||||
"Cancel edit" : "Utzi editatzeari",
|
||||
"New comment" : "Iruzkin berria",
|
||||
"Write a comment …" : "Idatzi iruzkin bat …",
|
||||
"Post comment" : "Argitaratu iruzkina",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ aipamenetarako, : emojientzako, / hautatzaile adimentsurako",
|
||||
"Could not reload comments" : "Ezin izan dira iruzkinak freskatu",
|
||||
|
||||
@@ -9,12 +9,19 @@ OC.L10N.register(
|
||||
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
|
||||
"{author} commented on {file}" : "{author} berkomentar pada {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
|
||||
"Files" : "File",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
|
||||
"Edit comment" : "Sunting komentar",
|
||||
"Delete comment" : "Hapus komentar",
|
||||
"Cancel edit" : "Batal sunting",
|
||||
"New comment" : "Komentar baru",
|
||||
"Write a comment …" : "Tulis komentar …",
|
||||
"Post comment" : "Posting komentar",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
|
||||
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
|
||||
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
|
||||
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
|
||||
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
|
||||
"No more messages" : "Tidak ada pesan lagi",
|
||||
@@ -23,6 +30,7 @@ OC.L10N.register(
|
||||
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
|
||||
"Comment deleted" : "Komentar dihapus",
|
||||
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
|
||||
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
|
||||
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
|
||||
"Write a comment …" : "Tulis komentar …"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -7,12 +7,19 @@
|
||||
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
|
||||
"{author} commented on {file}" : "{author} berkomentar pada {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
|
||||
"Files" : "File",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
|
||||
"Edit comment" : "Sunting komentar",
|
||||
"Delete comment" : "Hapus komentar",
|
||||
"Cancel edit" : "Batal sunting",
|
||||
"New comment" : "Komentar baru",
|
||||
"Write a comment …" : "Tulis komentar …",
|
||||
"Post comment" : "Posting komentar",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
|
||||
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
|
||||
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
|
||||
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
|
||||
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
|
||||
"No more messages" : "Tidak ada pesan lagi",
|
||||
@@ -21,6 +28,7 @@
|
||||
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
|
||||
"Comment deleted" : "Komentar dihapus",
|
||||
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
|
||||
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
|
||||
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
|
||||
"Write a comment …" : "Tulis komentar …"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Comments\OpenMetrics;
|
||||
|
||||
use Generator;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\OpenMetrics\IMetricFamily;
|
||||
use OCP\OpenMetrics\Metric;
|
||||
use OCP\OpenMetrics\MetricType;
|
||||
use Override;
|
||||
|
||||
class CommentsCountMetric implements IMetricFamily {
|
||||
public function __construct(
|
||||
private IDBConnection $connection,
|
||||
) {
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function name(): string {
|
||||
return 'comments';
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function type(): MetricType {
|
||||
return MetricType::gauge;
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function unit(): string {
|
||||
return 'comments';
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function help(): string {
|
||||
return 'Number of comments';
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function metrics(): Generator {
|
||||
$qb = $this->connection->getQueryBuilder();
|
||||
$result = $qb->select($qb->func()->count())
|
||||
->from('comments')
|
||||
->where($qb->expr()->eq('verb', $qb->expr()->literal('comment')))
|
||||
->executeQuery();
|
||||
|
||||
yield new Metric($result->fetchOne(), [], time());
|
||||
}
|
||||
}
|
||||
@@ -180,14 +180,12 @@ describe('Inline unread comments action enabled tests', () => {
|
||||
describe('Inline unread comments action execute tests', () => {
|
||||
test('Action opens sidebar', async () => {
|
||||
const openMock = vi.fn()
|
||||
const setActiveTabMock = vi.fn()
|
||||
window.OCA = {
|
||||
Files: {
|
||||
// @ts-expect-error Mocking for testing
|
||||
Sidebar: {
|
||||
_sidebar: () => ({
|
||||
open: openMock,
|
||||
setActiveTab: setActiveTabMock,
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -211,22 +209,19 @@ describe('Inline unread comments action execute tests', () => {
|
||||
})
|
||||
|
||||
expect(result).toBe(null)
|
||||
expect(setActiveTabMock).toBeCalledWith('comments')
|
||||
expect(openMock).toBeCalledWith('/foobar.txt')
|
||||
expect(openMock).toBeCalledWith(file, 'comments')
|
||||
})
|
||||
|
||||
test('Action handles sidebar open failure', async () => {
|
||||
const openMock = vi.fn(() => {
|
||||
throw new Error('Mock error')
|
||||
})
|
||||
const setActiveTabMock = vi.fn()
|
||||
window.OCA = {
|
||||
Files: {
|
||||
// @ts-expect-error Mocking for testing
|
||||
Sidebar: {
|
||||
_sidebar: () => ({
|
||||
open: openMock,
|
||||
setActiveTab: setActiveTabMock,
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
vi.spyOn(logger, 'error').mockImplementation(() => vi.fn())
|
||||
@@ -251,8 +246,7 @@ describe('Inline unread comments action execute tests', () => {
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
expect(setActiveTabMock).toBeCalledWith('comments')
|
||||
expect(openMock).toBeCalledWith('/foobar.txt')
|
||||
expect(openMock).toBeCalledWith(file, 'comments')
|
||||
expect(logger.error).toBeCalledTimes(1)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
/**
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import CommentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw'
|
||||
import { FileAction } from '@nextcloud/files'
|
||||
import { FileAction, getSidebar } from '@nextcloud/files'
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import logger from '../logger.js'
|
||||
|
||||
@@ -34,8 +35,8 @@ export const action = new FileAction({
|
||||
}
|
||||
|
||||
try {
|
||||
window.OCA.Files.Sidebar.setActiveTab('comments')
|
||||
await window.OCA.Files.Sidebar.open(nodes[0].path)
|
||||
const sidebar = getSidebar()
|
||||
sidebar.open(nodes[0], 'comments')
|
||||
return null
|
||||
} catch (error) {
|
||||
logger.error('Error while opening sidebar', { error })
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/**
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import type { INode } from '@nextcloud/files'
|
||||
|
||||
import moment from '@nextcloud/moment'
|
||||
import { createPinia, PiniaVuePlugin } from 'pinia'
|
||||
import Vue, { type ComponentPublicInstance } from 'vue'
|
||||
@@ -19,7 +21,7 @@ let ActivityTabPluginInstance
|
||||
*/
|
||||
export function registerCommentsPlugins() {
|
||||
window.OCA.Activity.registerSidebarAction({
|
||||
mount: async (el, { fileInfo, reload }) => {
|
||||
mount: async (el: HTMLElement, { node, reload }: { node: INode, reload: () => void }) => {
|
||||
const pinia = createPinia()
|
||||
|
||||
if (!ActivityTabPluginView) {
|
||||
@@ -32,10 +34,10 @@ export function registerCommentsPlugins() {
|
||||
pinia,
|
||||
propsData: {
|
||||
reloadCallback: reload,
|
||||
resourceId: fileInfo.id,
|
||||
resourceId: node.fileid,
|
||||
},
|
||||
})
|
||||
logger.info('Comments plugin mounted in Activity sidebar action', { fileInfo })
|
||||
logger.info('Comments plugin mounted in Activity sidebar action', { node })
|
||||
},
|
||||
unmount: () => {
|
||||
// destroy previous instance if available
|
||||
@@ -45,9 +47,15 @@ export function registerCommentsPlugins() {
|
||||
},
|
||||
})
|
||||
|
||||
window.OCA.Activity.registerSidebarEntries(async ({ fileInfo, limit, offset }) => {
|
||||
const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset })
|
||||
logger.debug('Loaded comments', { fileInfo, comments })
|
||||
window.OCA.Activity.registerSidebarEntries(async ({ node, limit, offset }: { node: INode, limit?: number, offset?: number }) => {
|
||||
const { data: comments } = await getComments(
|
||||
{ resourceType: 'files', resourceId: node.fileid },
|
||||
{
|
||||
limit,
|
||||
offset: offset ?? 0,
|
||||
},
|
||||
)
|
||||
logger.debug('Loaded comments', { node, comments })
|
||||
const { default: CommentView } = await import('./views/ActivityCommentEntry.vue')
|
||||
// @ts-expect-error Types are broken for Vue2
|
||||
const CommentsViewObject = Vue.extend(CommentView)
|
||||
@@ -62,7 +70,7 @@ export function registerCommentsPlugins() {
|
||||
el: element,
|
||||
propsData: {
|
||||
comment,
|
||||
resourceId: fileInfo.id,
|
||||
resourceId: node.fileid,
|
||||
reloadCallback: reload,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { registerCommentsPlugins } from './comments-activity-tab.ts'
|
||||
|
||||
// @ts-expect-error __webpack_nonce__ is injected by webpack
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {
|
||||
// Do not mount own tab but mount into activity
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
registerCommentsPlugins()
|
||||
})
|
||||
} else {
|
||||
// Init Comments tab component
|
||||
let TabInstance = null
|
||||
const commentTab = new OCA.Files.Sidebar.Tab({
|
||||
id: 'comments',
|
||||
name: t('comments', 'Comments'),
|
||||
iconSvg: MessageReplyText,
|
||||
|
||||
async mount(el, fileInfo, context) {
|
||||
if (TabInstance) {
|
||||
TabInstance.$destroy()
|
||||
}
|
||||
TabInstance = new OCA.Comments.View('files', {
|
||||
// Better integration with vue parent component
|
||||
parent: context,
|
||||
propsData: {
|
||||
resourceId: fileInfo.id,
|
||||
},
|
||||
})
|
||||
// Only mount after we have all the info we need
|
||||
await TabInstance.update(fileInfo.id)
|
||||
TabInstance.$mount(el)
|
||||
},
|
||||
update(fileInfo) {
|
||||
TabInstance.update(fileInfo.id)
|
||||
},
|
||||
destroy() {
|
||||
TabInstance.$destroy()
|
||||
TabInstance = null
|
||||
},
|
||||
scrollBottomReached() {
|
||||
TabInstance.onScrollBottomReached()
|
||||
},
|
||||
})
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
if (OCA.Files && OCA.Files.Sidebar) {
|
||||
OCA.Files.Sidebar.registerTab(commentTab)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import { registerSidebarTab } from '@nextcloud/files'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import wrap from '@vue/web-component-wrapper'
|
||||
import { createPinia, PiniaVuePlugin } from 'pinia'
|
||||
import Vue from 'vue'
|
||||
import FilesSidebarTab from './views/FilesSidebarTab.vue'
|
||||
import { registerCommentsPlugins } from './comments-activity-tab.ts'
|
||||
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
const tagName = 'comments_files-sidebar-tab'
|
||||
|
||||
if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {
|
||||
// Do not mount own tab but mount into activity
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
registerCommentsPlugins()
|
||||
})
|
||||
} else {
|
||||
registerSidebarTab({
|
||||
id: 'comments',
|
||||
displayName: t('comments', 'Comments'),
|
||||
iconSvgInline: MessageReplyText,
|
||||
order: 50,
|
||||
tagName,
|
||||
enabled() {
|
||||
if (!window.customElements.get(tagName)) {
|
||||
setupSidebarTab()
|
||||
}
|
||||
return true
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the sidebar tab as a web component
|
||||
*/
|
||||
function setupSidebarTab() {
|
||||
Vue.use(PiniaVuePlugin)
|
||||
Vue.mixin({ pinia: createPinia() })
|
||||
const webComponent = wrap(Vue, FilesSidebarTab)
|
||||
// In Vue 2, wrap doesn't support disabling shadow. Disable with a hack
|
||||
Object.defineProperty(webComponent.prototype, 'attachShadow', {
|
||||
value() { return this },
|
||||
})
|
||||
Object.defineProperty(webComponent.prototype, 'shadowRoot', {
|
||||
get() { return this },
|
||||
})
|
||||
window.customElements.define(tagName, webComponent)
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
/**
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
@@ -32,7 +33,7 @@ export default defineComponent({
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* Autocomplete @mentions
|
||||
* Autocomplete `@mentions`
|
||||
*
|
||||
* @param search the query
|
||||
* @param callback the callback to process the results with
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { IFolder, INode, IView } from '@nextcloud/files'
|
||||
|
||||
import { computed } from 'vue'
|
||||
import Comments from './Comments.vue'
|
||||
|
||||
const props = defineProps<{
|
||||
node?: INode
|
||||
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
|
||||
folder?: IFolder
|
||||
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
|
||||
view?: IView
|
||||
}>()
|
||||
|
||||
defineExpose({ setActive })
|
||||
|
||||
const resourceId = computed(() => props.node?.fileid)
|
||||
|
||||
/**
|
||||
* Set this tab as active
|
||||
*
|
||||
* @param active - The active state
|
||||
*/
|
||||
function setActive(active: boolean) {
|
||||
return active
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Comments
|
||||
v-if="resourceId !== undefined"
|
||||
:key="resourceId"
|
||||
:resource-id="resourceId"
|
||||
resource-type="files" />
|
||||
</template>
|
||||
@@ -3,6 +3,7 @@ OC.L10N.register(
|
||||
{
|
||||
"Dashboard" : "Dasbor",
|
||||
"Dashboard app" : "Aplikasi dasbor",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
|
||||
"Weather" : "Cuaca",
|
||||
"Status" : "Status",
|
||||
"Good morning" : "Selamat pagi",
|
||||
@@ -13,10 +14,13 @@ OC.L10N.register(
|
||||
"Good evening, {name}" : "Selamat malam, {name}",
|
||||
"Hello" : "Halo",
|
||||
"Hello, {name}" : "Halo, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
|
||||
"Customize" : "Sesuaikan",
|
||||
"Edit widgets" : "Edit widget",
|
||||
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
|
||||
"Weather service" : "Layanan cuaca",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
|
||||
"Weather data from Met.no" : "Data cuaca dari Met.no",
|
||||
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
|
||||
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{ "translations": {
|
||||
"Dashboard" : "Dasbor",
|
||||
"Dashboard app" : "Aplikasi dasbor",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
|
||||
"Weather" : "Cuaca",
|
||||
"Status" : "Status",
|
||||
"Good morning" : "Selamat pagi",
|
||||
@@ -11,10 +12,13 @@
|
||||
"Good evening, {name}" : "Selamat malam, {name}",
|
||||
"Hello" : "Halo",
|
||||
"Hello, {name}" : "Halo, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
|
||||
"Customize" : "Sesuaikan",
|
||||
"Edit widgets" : "Edit widget",
|
||||
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
|
||||
"Weather service" : "Layanan cuaca",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
|
||||
"Weather data from Met.no" : "Data cuaca dari Met.no",
|
||||
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
|
||||
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
|
||||
|
||||
@@ -18,6 +18,7 @@ use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\Config\IUserConfig;
|
||||
use OCP\Dashboard\IAPIWidget;
|
||||
use OCP\Dashboard\IAPIWidgetV2;
|
||||
use OCP\Dashboard\IButtonWidget;
|
||||
@@ -30,7 +31,6 @@ use OCP\Dashboard\Model\WidgetButton;
|
||||
use OCP\Dashboard\Model\WidgetItem;
|
||||
|
||||
use OCP\Dashboard\Model\WidgetOptions;
|
||||
use OCP\IConfig;
|
||||
use OCP\IRequest;
|
||||
|
||||
/**
|
||||
@@ -45,7 +45,7 @@ class DashboardApiController extends OCSController {
|
||||
IRequest $request,
|
||||
private IManager $dashboardManager,
|
||||
private IAppConfig $appConfig,
|
||||
private IConfig $config,
|
||||
private IUserConfig $userConfig,
|
||||
private ?string $userId,
|
||||
private DashboardService $service,
|
||||
) {
|
||||
@@ -59,7 +59,7 @@ class DashboardApiController extends OCSController {
|
||||
private function getShownWidgets(array $widgetIds): array {
|
||||
if (empty($widgetIds)) {
|
||||
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
|
||||
$widgetIds = explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault));
|
||||
$widgetIds = explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault));
|
||||
}
|
||||
|
||||
return array_filter(
|
||||
@@ -202,7 +202,7 @@ class DashboardApiController extends OCSController {
|
||||
#[NoAdminRequired]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
|
||||
public function updateLayout(array $layout): DataResponse {
|
||||
$this->config->setUserValue($this->userId, 'dashboard', 'layout', implode(',', $layout));
|
||||
$this->userConfig->setValueString($this->userId, 'dashboard', 'layout', implode(',', $layout));
|
||||
return new DataResponse(['layout' => $layout]);
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ class DashboardApiController extends OCSController {
|
||||
#[NoAdminRequired]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/v3/statuses')]
|
||||
public function updateStatuses(array $statuses): DataResponse {
|
||||
$this->config->setUserValue($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
|
||||
$this->userConfig->setValueString($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
|
||||
return new DataResponse(['statuses' => $statuses]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
|
||||
use OCP\AppFramework\Http\FeaturePolicy;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\Config\IUserConfig;
|
||||
use OCP\Dashboard\IIconWidget;
|
||||
use OCP\Dashboard\IManager;
|
||||
use OCP\Dashboard\IWidget;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\IRequest;
|
||||
@@ -33,9 +33,9 @@ class DashboardController extends Controller {
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
private IInitialState $initialState,
|
||||
private IEventDispatcher $eventDispatcher,
|
||||
private IManager $dashboardManager,
|
||||
private IConfig $config,
|
||||
private IUserConfig $userConfig,
|
||||
private IL10N $l10n,
|
||||
private ?string $userId,
|
||||
private DashboardService $service,
|
||||
@@ -67,9 +67,9 @@ class DashboardController extends Controller {
|
||||
$this->initialState->provideInitialState('statuses', $this->service->getStatuses());
|
||||
$this->initialState->provideInitialState('layout', $this->service->getLayout());
|
||||
$this->initialState->provideInitialState('appStoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
|
||||
$this->initialState->provideInitialState('firstRun', $this->config->getUserValue($this->userId, 'dashboard', 'firstRun', '1') === '1');
|
||||
$this->initialState->provideInitialState('firstRun', $this->userConfig->getValueBool($this->userId, 'dashboard', 'firstRun', true));
|
||||
$this->initialState->provideInitialState('birthdate', $this->service->getBirthdate());
|
||||
$this->config->setUserValue($this->userId, 'dashboard', 'firstRun', '0');
|
||||
$this->userConfig->setValueBool($this->userId, 'dashboard', 'firstRun', false);
|
||||
|
||||
$response = new TemplateResponse('dashboard', 'index', [
|
||||
'id-app-content' => '#app-dashboard',
|
||||
|
||||
@@ -12,12 +12,12 @@ use JsonException;
|
||||
use OCP\Accounts\IAccountManager;
|
||||
use OCP\Accounts\PropertyDoesNotExistException;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\Config\IUserConfig;
|
||||
use OCP\IUserManager;
|
||||
|
||||
class DashboardService {
|
||||
public function __construct(
|
||||
private IConfig $config,
|
||||
private IUserConfig $userConfig,
|
||||
private IAppConfig $appConfig,
|
||||
private ?string $userId,
|
||||
private IUserManager $userManager,
|
||||
@@ -31,21 +31,24 @@ class DashboardService {
|
||||
*/
|
||||
public function getLayout(): array {
|
||||
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
|
||||
return array_values(array_filter(explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault)), fn (string $value) => $value !== ''));
|
||||
return array_values(array_filter(
|
||||
explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault)),
|
||||
fn (string $value) => $value !== '')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getStatuses() {
|
||||
$configStatuses = $this->config->getUserValue($this->userId, 'dashboard', 'statuses', '');
|
||||
public function getStatuses(): array {
|
||||
$configStatuses = $this->userConfig->getValueString($this->userId, 'dashboard', 'statuses');
|
||||
try {
|
||||
// Parse the old format
|
||||
/** @var array<string, bool> $statuses */
|
||||
$statuses = json_decode($configStatuses, true, 512, JSON_THROW_ON_ERROR);
|
||||
// We avoid getting an empty array as it will not produce an object in UI's JS
|
||||
return array_keys(array_filter($statuses, static fn (bool $value) => $value));
|
||||
} catch (JsonException $e) {
|
||||
} catch (JsonException) {
|
||||
return array_values(array_filter(explode(',', $configStatuses), fn (string $value) => $value !== ''));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ use OC\Accounts\Account;
|
||||
use OCA\Dashboard\Service\DashboardService;
|
||||
use OCP\Accounts\IAccountManager;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\Config\IUserConfig;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
@@ -21,7 +21,7 @@ use Test\TestCase;
|
||||
|
||||
class DashboardServiceTest extends TestCase {
|
||||
|
||||
private IConfig&MockObject $config;
|
||||
private IUserConfig&MockObject $userConfig;
|
||||
private IAppConfig&MockObject $appConfig;
|
||||
private IUserManager&MockObject $userManager;
|
||||
private IAccountManager&MockObject $accountManager;
|
||||
@@ -30,13 +30,13 @@ class DashboardServiceTest extends TestCase {
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->userConfig = $this->createMock(IUserConfig::class);
|
||||
$this->appConfig = $this->createMock(IAppConfig::class);
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->accountManager = $this->createMock(IAccountManager::class);
|
||||
|
||||
$this->service = new DashboardService(
|
||||
$this->config,
|
||||
$this->userConfig,
|
||||
$this->appConfig,
|
||||
'alice',
|
||||
$this->userManager,
|
||||
@@ -90,7 +90,7 @@ class DashboardServiceTest extends TestCase {
|
||||
|
||||
public function testGetBirthdateNoUserId(): void {
|
||||
$service = new DashboardService(
|
||||
$this->config,
|
||||
$this->userConfig,
|
||||
$this->appConfig,
|
||||
null,
|
||||
$this->userManager,
|
||||
|
||||
@@ -24,6 +24,7 @@ use OCA\DAV\Connector\Sabre\Principal;
|
||||
use OCP\Accounts\IAccountManager;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
@@ -56,7 +57,7 @@ $principalBackend = new Principal(
|
||||
Server::get(ProxyMapper::class),
|
||||
Server::get(KnownUserService::class),
|
||||
Server::get(IConfig::class),
|
||||
\OC::$server->getL10NFactory(),
|
||||
Server::get(IL10NFactory::class),
|
||||
'principals/'
|
||||
);
|
||||
$db = Server::get(IDBConnection::class);
|
||||
@@ -84,7 +85,7 @@ $calDavBackend = new CalDavBackend(
|
||||
);
|
||||
|
||||
$debugging = Server::get(IConfig::class)->getSystemValue('debug', false);
|
||||
$sendInvitations = Server::get(IConfig::class)->getAppValue('dav', 'sendInvitations', 'yes') === 'yes';
|
||||
$sendInvitations = Server::get(IAppConfig::class)->getValueBool('dav', 'sendInvitations', true);
|
||||
|
||||
// Root nodes
|
||||
$principalCollection = new \Sabre\CalDAV\Principal\Collection($principalBackend);
|
||||
@@ -102,6 +103,7 @@ $nodes = [
|
||||
$server = new \Sabre\DAV\Server($nodes);
|
||||
$server::$exposeVersion = false;
|
||||
$server->httpRequest->setUrl(Server::get(IRequest::class)->getRequestUri());
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server->setBaseUri($baseuri);
|
||||
|
||||
// Add plugins
|
||||
@@ -126,4 +128,4 @@ $server->addPlugin(Server::get(RateLimitingPlugin::class));
|
||||
$server->addPlugin(Server::get(CalDavValidatePlugin::class));
|
||||
|
||||
// And off we go!
|
||||
$server->exec();
|
||||
$server->start();
|
||||
|
||||
@@ -30,6 +30,7 @@ use OCP\IRequest;
|
||||
use OCP\ISession;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory as IL10nFactory;
|
||||
use OCP\Security\Bruteforce\IThrottler;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
@@ -53,7 +54,7 @@ $principalBackend = new Principal(
|
||||
Server::get(ProxyMapper::class),
|
||||
Server::get(KnownUserService::class),
|
||||
Server::get(IConfig::class),
|
||||
\OC::$server->getL10NFactory(),
|
||||
Server::get(IL10nFactory::class),
|
||||
'principals/'
|
||||
);
|
||||
$db = Server::get(IDBConnection::class);
|
||||
@@ -85,9 +86,10 @@ $nodes = [
|
||||
$server = new \Sabre\DAV\Server($nodes);
|
||||
$server::$exposeVersion = false;
|
||||
$server->httpRequest->setUrl(Server::get(IRequest::class)->getRequestUri());
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server->setBaseUri($baseuri);
|
||||
// Add plugins
|
||||
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), \OC::$server->getL10N('dav')));
|
||||
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), \OCP\Server::get(IL10nFactory::class)->get('dav')));
|
||||
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend));
|
||||
$server->addPlugin(new Plugin());
|
||||
|
||||
@@ -104,4 +106,4 @@ $server->addPlugin(Server::get(CardDavRateLimitingPlugin::class));
|
||||
$server->addPlugin(Server::get(CardDavValidatePlugin::class));
|
||||
|
||||
// And off we go!
|
||||
$server->exec();
|
||||
$server->start();
|
||||
|
||||
@@ -14,6 +14,7 @@ use OCA\DAV\Files\Sharing\FilesDropPlugin;
|
||||
use OCA\DAV\Files\Sharing\PublicLinkCheckPlugin;
|
||||
use OCA\DAV\Storage\PublicOwnerWrapper;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\BeforeSabrePubliclyLoadedEvent;
|
||||
use OCP\Constants;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
@@ -26,16 +27,19 @@ use OCP\IRequest;
|
||||
use OCP\ISession;
|
||||
use OCP\ITagManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory as IL10nFactory;
|
||||
use OCP\Security\Bruteforce\IThrottler;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
// load needed apps
|
||||
$RUNTIME_APPTYPES = ['filesystem', 'authentication', 'logging'];
|
||||
Server::get(IAppManager::class)->loadApps($RUNTIME_APPTYPES);
|
||||
|
||||
OC_App::loadApps($RUNTIME_APPTYPES);
|
||||
|
||||
OC_Util::obEnd();
|
||||
// Turn off output buffering to prevent memory problems
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
Server::get(ISession::class)->close();
|
||||
|
||||
// Backends
|
||||
@@ -60,7 +64,7 @@ $serverFactory = new ServerFactory(
|
||||
Server::get(IRequest::class),
|
||||
Server::get(IPreview::class),
|
||||
$eventDispatcher,
|
||||
\OC::$server->getL10N('dav')
|
||||
Server::get(IL10nFactory::class)->get('dav')
|
||||
);
|
||||
|
||||
$requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
@@ -68,6 +72,7 @@ $requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
$linkCheckPlugin = new PublicLinkCheckPlugin();
|
||||
$filesDropPlugin = new FilesDropPlugin();
|
||||
|
||||
/** @var string $baseuri defined in public.php */
|
||||
$server = $serverFactory->createServer(
|
||||
true,
|
||||
$baseuri,
|
||||
@@ -125,4 +130,4 @@ $event = new BeforeSabrePubliclyLoadedEvent($server);
|
||||
$eventDispatcher->dispatchTyped($event);
|
||||
|
||||
// And off we go!
|
||||
$server->exec();
|
||||
$server->start();
|
||||
|
||||
@@ -19,6 +19,7 @@ use OCP\IRequest;
|
||||
use OCP\ISession;
|
||||
use OCP\ITagManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory as IL10nFactory;
|
||||
use OCP\SabrePluginEvent;
|
||||
use OCP\Security\Bruteforce\IThrottler;
|
||||
use OCP\Server;
|
||||
@@ -31,7 +32,9 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
|
||||
ignore_user_abort(true);
|
||||
|
||||
// Turn off output buffering to prevent memory problems
|
||||
\OC_Util::obEnd();
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
$dispatcher = Server::get(IEventDispatcher::class);
|
||||
|
||||
@@ -45,7 +48,7 @@ $serverFactory = new ServerFactory(
|
||||
Server::get(IRequest::class),
|
||||
Server::get(IPreview::class),
|
||||
$dispatcher,
|
||||
\OC::$server->getL10N('dav')
|
||||
Server::get(IL10nFactory::class)->get('dav')
|
||||
);
|
||||
|
||||
// Backends
|
||||
@@ -68,6 +71,7 @@ $authPlugin->addBackend($bearerAuthPlugin);
|
||||
|
||||
$requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function () {
|
||||
// use the view for the logged in user
|
||||
return Filesystem::getView();
|
||||
@@ -80,4 +84,4 @@ $event = new SabrePluginAddEvent($server);
|
||||
$dispatcher->dispatchTyped($event);
|
||||
|
||||
// And off we go!
|
||||
$server->exec();
|
||||
$server->start();
|
||||
|
||||
@@ -21,12 +21,15 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
|
||||
ignore_user_abort(true);
|
||||
|
||||
// Turn off output buffering to prevent memory problems
|
||||
\OC_Util::obEnd();
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
$requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
|
||||
/** @var ServerFactory $serverFactory */
|
||||
$serverFactory = Server::get(ServerFactory::class);
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server = $serverFactory->createServer(
|
||||
$baseuri,
|
||||
$requestUri,
|
||||
@@ -37,4 +40,4 @@ $server = $serverFactory->createServer(
|
||||
Server::get(IRequest::class)
|
||||
);
|
||||
|
||||
$server->exec();
|
||||
$server->start();
|
||||
|
||||
@@ -17,6 +17,7 @@ use OCA\DAV\Storage\PublicShareWrapper;
|
||||
use OCA\DAV\Upload\ChunkingPlugin;
|
||||
use OCA\DAV\Upload\ChunkingV2Plugin;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\BeforeSabrePubliclyLoadedEvent;
|
||||
use OCP\Constants;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
@@ -41,8 +42,12 @@ use Sabre\DAV\Exception\NotFound;
|
||||
|
||||
// load needed apps
|
||||
$RUNTIME_APPTYPES = ['filesystem', 'authentication', 'logging'];
|
||||
OC_App::loadApps($RUNTIME_APPTYPES);
|
||||
OC_Util::obEnd();
|
||||
Server::get(IAppManager::class)->loadApps($RUNTIME_APPTYPES);
|
||||
|
||||
// Turn off output buffering to prevent memory problems
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
$session = Server::get(ISession::class);
|
||||
$request = Server::get(IRequest::class);
|
||||
|
||||
@@ -15,8 +15,11 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
|
||||
ignore_user_abort(true);
|
||||
|
||||
// Turn off output buffering to prevent memory problems
|
||||
\OC_Util::obEnd();
|
||||
while (ob_get_level()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
$request = \OCP\Server::get(IRequest::class);
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server = new Server($request, $baseuri);
|
||||
$server->exec();
|
||||
|
||||
@@ -254,6 +254,7 @@ return array(
|
||||
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => $baseDir . '/../lib/Connector/Sabre/SharesPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagList' => $baseDir . '/../lib/Connector/Sabre/TagList.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => $baseDir . '/../lib/Connector/Sabre/TagsPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\UserIdHeaderPlugin' => $baseDir . '/../lib/Connector/Sabre/UserIdHeaderPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => $baseDir . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => $baseDir . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => $baseDir . '/../lib/Controller/DirectController.php',
|
||||
|
||||
@@ -269,6 +269,7 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/SharesPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagList.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagsPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\UserIdHeaderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/UserIdHeaderPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => __DIR__ . '/..' . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => __DIR__ . '/..' . '/../lib/Controller/DirectController.php',
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen, wurde durch einen Hook abgebrochen",
|
||||
"Could not rename part file to final file" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen",
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen, wurde durch einen Hook abgebrochen",
|
||||
"Could not rename part file to final file" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen",
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Konnte Teildatei nicht in endgültige Datei umbenennen, wurde durch Hook abgebrochen.",
|
||||
"Could not rename part file to final file" : "Konnte Teildatei nicht in endgültige Datei umbenennen",
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Konnte Teildatei nicht in endgültige Datei umbenennen, wurde durch Hook abgebrochen.",
|
||||
"Could not rename part file to final file" : "Konnte Teildatei nicht in endgültige Datei umbenennen",
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Could not rename part file to final file, cancelled by hook",
|
||||
"Could not rename part file to final file" : "Could not rename part file to final file",
|
||||
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
|
||||
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
|
||||
"Failed to open file: %1$s" : "Failed to open file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Could not rename part file to final file, cancelled by hook",
|
||||
"Could not rename part file to final file" : "Could not rename part file to final file",
|
||||
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
|
||||
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
|
||||
"Failed to open file: %1$s" : "Failed to open file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
|
||||
|
||||
@@ -73,7 +73,19 @@ OC.L10N.register(
|
||||
"Where: %s" : "Kus: %s",
|
||||
"%1$s via %2$s" : "%1$s %2$s kaudu",
|
||||
"In the past on %1$s for the entire day" : "Minevikus kogu päeva: %1$s",
|
||||
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["%n minuti pärast %1$s kogu päeva kestel","%n minuti pärast %1$s kogu päeva kestel"],
|
||||
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["%n tunni pärast %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
|
||||
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["%n tunni päeva %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
|
||||
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["%n nädala pärast %1$s kogu päeva kestel","%n nädala pärast %1$s kogu päeva kestel"],
|
||||
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["%n kuu pärast %1$s kogu päeva kestel","%n kuu pärast %1$s kogu päeva kestel"],
|
||||
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["%n aasta pärast %1$s kogu päeva kestel","%n aasta pärast %1$s kogu päeva kestel"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "Minevikus: %1$s ajavahemikus %2$s - %3$s",
|
||||
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s","%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s","%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s","%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s","%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s","%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s","%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"Could not generate when statement" : "Ei õnnestunud koostada tingimuslikku „when“ lausendit",
|
||||
"Every Day for the entire day" : "Iga päev kogu päeva jooksul",
|
||||
"Every Day for the entire day until %1$s" : "Iga päev kogu päeva jooksul kuni %1$s",
|
||||
@@ -111,8 +123,26 @@ OC.L10N.register(
|
||||
"On specific dates for the entire day until %1$s" : "Kindlatel päevadel kogu päeva jooksul kuni %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Kindlatel päevadel ajavahemikus %1$s - %2$s kuni %3$s",
|
||||
"In the past on %1$s" : "Minevikus %1$s",
|
||||
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["%n minuti pärast %1$s","%n minuti pärast %1$s"],
|
||||
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["%n tunni pärast %1$s","%n tunni pärast %1$s"],
|
||||
"_In %n day on %1$s_::_In %n days on %1$s_" : ["%n päeva pärast %1$s","%n päeva pärast %1$s"],
|
||||
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["%n nädala pärast %1$s","%n nädala pärast %1$s"],
|
||||
"_In %n month on %1$s_::_In %n months on %1$s_" : ["%n kuu pärast %1$s","%n kuu pärast %1$s"],
|
||||
"_In %n year on %1$s_::_In %n years on %1$s_" : ["%n aasta pärast %1$s","%n aasta pärast %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "Minevikus: %1$s ja siis %2$s",
|
||||
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["%n minuti pärast %1$s, seejärel %2$s","%n minuti pärast %1$s, seejärel %2$s"],
|
||||
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["%n tunni pärast %1$s, seejärel %2$s","%n tunni pärast %1$s, seejärel %2$s"],
|
||||
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["%n päeva pärast %1$s, seejärel %2$s","%n päeva pärast %1$s, seejärel %2$s"],
|
||||
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["%n nädala pärast %1$s, seejärel %2$s","%n nädala pärast %1$s, seejärel %2$s"],
|
||||
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["%n kuu pärast %1$s, seejärel %2$s","%n kuu pärast %1$s, seejärel %2$s"],
|
||||
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["%n aasta pärast %1$s, seejärel %2$s","%n aasta pärast %1$s, seejärel %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Minevikus: %1$s ja siis %2$s ning %3$s",
|
||||
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["%n minuti pärast %1$s, seejärel %2$s ja %3$s","%n minuti pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["%n tunni pärast %1$s, seejärel %2$s ja %3$s","%n tunni pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["%n päeva pärast %1$s, seejärel %2$s ja %3$s","%n päeva pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["%n nädala pärast %1$s, seejärel %2$s ja %3$s","%n nädala pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["%n kuu pärast %1$s, seejärel %2$s ja %3$s","%n kuu pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["%n aasta pärast %1$s, seejärel %2$s ja %3$s","%n aasta pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"Could not generate next recurrence statement" : "Ei õnnestunud koostada korduva ürituse järgmise toimumise lausendit",
|
||||
"Cancelled: %1$s" : "Tühistatud: %1$s",
|
||||
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
|
||||
@@ -204,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud, selle katkestas programmi haak",
|
||||
"Could not rename part file to final file" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud",
|
||||
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, aga tundub, et ta on olemas",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, tundub, et teda pole olemas",
|
||||
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
|
||||
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
|
||||
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
|
||||
|
||||
@@ -71,7 +71,19 @@
|
||||
"Where: %s" : "Kus: %s",
|
||||
"%1$s via %2$s" : "%1$s %2$s kaudu",
|
||||
"In the past on %1$s for the entire day" : "Minevikus kogu päeva: %1$s",
|
||||
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["%n minuti pärast %1$s kogu päeva kestel","%n minuti pärast %1$s kogu päeva kestel"],
|
||||
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["%n tunni pärast %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
|
||||
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["%n tunni päeva %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
|
||||
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["%n nädala pärast %1$s kogu päeva kestel","%n nädala pärast %1$s kogu päeva kestel"],
|
||||
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["%n kuu pärast %1$s kogu päeva kestel","%n kuu pärast %1$s kogu päeva kestel"],
|
||||
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["%n aasta pärast %1$s kogu päeva kestel","%n aasta pärast %1$s kogu päeva kestel"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "Minevikus: %1$s ajavahemikus %2$s - %3$s",
|
||||
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s","%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s","%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s","%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s","%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s","%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s","%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s"],
|
||||
"Could not generate when statement" : "Ei õnnestunud koostada tingimuslikku „when“ lausendit",
|
||||
"Every Day for the entire day" : "Iga päev kogu päeva jooksul",
|
||||
"Every Day for the entire day until %1$s" : "Iga päev kogu päeva jooksul kuni %1$s",
|
||||
@@ -109,8 +121,26 @@
|
||||
"On specific dates for the entire day until %1$s" : "Kindlatel päevadel kogu päeva jooksul kuni %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Kindlatel päevadel ajavahemikus %1$s - %2$s kuni %3$s",
|
||||
"In the past on %1$s" : "Minevikus %1$s",
|
||||
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["%n minuti pärast %1$s","%n minuti pärast %1$s"],
|
||||
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["%n tunni pärast %1$s","%n tunni pärast %1$s"],
|
||||
"_In %n day on %1$s_::_In %n days on %1$s_" : ["%n päeva pärast %1$s","%n päeva pärast %1$s"],
|
||||
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["%n nädala pärast %1$s","%n nädala pärast %1$s"],
|
||||
"_In %n month on %1$s_::_In %n months on %1$s_" : ["%n kuu pärast %1$s","%n kuu pärast %1$s"],
|
||||
"_In %n year on %1$s_::_In %n years on %1$s_" : ["%n aasta pärast %1$s","%n aasta pärast %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "Minevikus: %1$s ja siis %2$s",
|
||||
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["%n minuti pärast %1$s, seejärel %2$s","%n minuti pärast %1$s, seejärel %2$s"],
|
||||
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["%n tunni pärast %1$s, seejärel %2$s","%n tunni pärast %1$s, seejärel %2$s"],
|
||||
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["%n päeva pärast %1$s, seejärel %2$s","%n päeva pärast %1$s, seejärel %2$s"],
|
||||
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["%n nädala pärast %1$s, seejärel %2$s","%n nädala pärast %1$s, seejärel %2$s"],
|
||||
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["%n kuu pärast %1$s, seejärel %2$s","%n kuu pärast %1$s, seejärel %2$s"],
|
||||
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["%n aasta pärast %1$s, seejärel %2$s","%n aasta pärast %1$s, seejärel %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Minevikus: %1$s ja siis %2$s ning %3$s",
|
||||
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["%n minuti pärast %1$s, seejärel %2$s ja %3$s","%n minuti pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["%n tunni pärast %1$s, seejärel %2$s ja %3$s","%n tunni pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["%n päeva pärast %1$s, seejärel %2$s ja %3$s","%n päeva pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["%n nädala pärast %1$s, seejärel %2$s ja %3$s","%n nädala pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["%n kuu pärast %1$s, seejärel %2$s ja %3$s","%n kuu pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["%n aasta pärast %1$s, seejärel %2$s ja %3$s","%n aasta pärast %1$s, seejärel %2$s ja %3$s"],
|
||||
"Could not generate next recurrence statement" : "Ei õnnestunud koostada korduva ürituse järgmise toimumise lausendit",
|
||||
"Cancelled: %1$s" : "Tühistatud: %1$s",
|
||||
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
|
||||
@@ -202,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud, selle katkestas programmi haak",
|
||||
"Could not rename part file to final file" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud",
|
||||
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, aga tundub, et ta on olemas",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, tundub, et teda pole olemas",
|
||||
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
|
||||
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
|
||||
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Níorbh fhéidir páirtchomhad a athainmniú go comhad deiridh, curtha ar ceal le hook",
|
||||
"Could not rename part file to final file" : "Níorbh fhéidir páirtchomhad a athainmniú go dtí an comhad deiridh",
|
||||
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
|
||||
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
|
||||
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
|
||||
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Níorbh fhéidir páirtchomhad a athainmniú go comhad deiridh, curtha ar ceal le hook",
|
||||
"Could not rename part file to final file" : "Níorbh fhéidir páirtchomhad a athainmniú go dtí an comhad deiridh",
|
||||
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
|
||||
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
|
||||
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
|
||||
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema",
|
||||
"Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final",
|
||||
"Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro existe",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro non existe",
|
||||
"Encryption not ready: %1$s" : "A cifraxe non está preparada: %1$s",
|
||||
"Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s",
|
||||
"Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema",
|
||||
"Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final",
|
||||
"Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro existe",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro non existe",
|
||||
"Encryption not ready: %1$s" : "A cifraxe non está preparada: %1$s",
|
||||
"Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s",
|
||||
"Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s",
|
||||
|
||||
@@ -0,0 +1,312 @@
|
||||
OC.L10N.register(
|
||||
"dav",
|
||||
{
|
||||
"Calendar" : "Kalender",
|
||||
"Tasks" : "Tugas",
|
||||
"Personal" : "Pribadi",
|
||||
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
|
||||
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
|
||||
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
|
||||
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
|
||||
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
|
||||
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
|
||||
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
|
||||
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
|
||||
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
|
||||
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
|
||||
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
|
||||
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
|
||||
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
|
||||
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
|
||||
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
|
||||
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
|
||||
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
|
||||
"Untitled event" : "Acara tanpa judul",
|
||||
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
|
||||
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
|
||||
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
|
||||
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
|
||||
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
|
||||
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
|
||||
"Busy" : "Sibuk",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
|
||||
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
|
||||
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
|
||||
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
|
||||
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
|
||||
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
|
||||
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
|
||||
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
|
||||
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
|
||||
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
|
||||
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
|
||||
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
|
||||
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
|
||||
"Contact birthdays" : "Ulang tahun kontak",
|
||||
"Death of %s" : "Wafatnya %s",
|
||||
"Untitled calendar" : "Kalender tanpa judul",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Tanggal:",
|
||||
"Where:" : "Tempat:",
|
||||
"Description:" : "Deskripsi:",
|
||||
"_%n hour_::_%n hours_" : ["%n jam"],
|
||||
"_%n minute_::_%n minutes_" : ["%n menit"],
|
||||
"%s (in %s)" : "%s (dalam %s)",
|
||||
"%s (%s ago)" : "%s (%s yang lalu)",
|
||||
"Calendar: %s" : "Kalender: %s",
|
||||
"Date: %s" : "Tanggal: %s",
|
||||
"Description: %s" : "Deskripsi: %s",
|
||||
"Where: %s" : "Di mana: %s",
|
||||
"%1$s via %2$s" : "%1$s melalui %2$s",
|
||||
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
|
||||
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
|
||||
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
|
||||
"Every Day for the entire day" : "Setiap hari sepanjang hari",
|
||||
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
|
||||
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
|
||||
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
|
||||
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
|
||||
"In the past on %1$s" : "Di masa lalu pada %1$s",
|
||||
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
|
||||
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
|
||||
"Cancelled: %1$s" : "Dibatalkan: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
|
||||
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
|
||||
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
|
||||
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
|
||||
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
|
||||
"Invitation: %1$s" : "Undangan: %1$s",
|
||||
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
|
||||
"Organizer:" : "Penyelenggara:",
|
||||
"Attendees:" : "Peserta:",
|
||||
"Title:" : "Judul:",
|
||||
"When:" : "Kapan:",
|
||||
"Location:" : "Lokasi:",
|
||||
"Link:" : "Tautan:",
|
||||
"Occurring:" : "Berlangsung:",
|
||||
"Accept" : "Terima",
|
||||
"Decline" : "Tolak",
|
||||
"More options …" : "Opsi lainnya …",
|
||||
"More options at %s" : "Opsi lainnya di %s",
|
||||
"Monday" : "Senin",
|
||||
"Tuesday" : "Selasa",
|
||||
"Wednesday" : "Rabu",
|
||||
"Thursday" : "Kamis",
|
||||
"Friday" : "Jumat",
|
||||
"Saturday" : "Sabtu",
|
||||
"Sunday" : "Minggu",
|
||||
"January" : "Januari",
|
||||
"February" : "Februari",
|
||||
"March" : "Maret",
|
||||
"April" : "April",
|
||||
"May" : "Mei",
|
||||
"June" : "Juni",
|
||||
"July" : "Juli",
|
||||
"August" : "Agustus",
|
||||
"September" : "September",
|
||||
"October" : "Oktober",
|
||||
"November" : "November",
|
||||
"December" : "Desember",
|
||||
"First" : "Pertama",
|
||||
"Second" : "Kedua",
|
||||
"Third" : "Ketiga",
|
||||
"Fourth" : "Keempat",
|
||||
"Fifth" : "Kelima",
|
||||
"Last" : "Terakhir",
|
||||
"Second Last" : "Kedua terakhir",
|
||||
"Third Last" : "Ketiga terakhir",
|
||||
"Fourth Last" : "Keempat terakhir",
|
||||
"Fifth Last" : "Kelima terakhir",
|
||||
"Contacts" : "Kontak",
|
||||
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
|
||||
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
|
||||
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
|
||||
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
|
||||
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
|
||||
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
|
||||
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
|
||||
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
|
||||
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
|
||||
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
|
||||
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
|
||||
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
|
||||
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
|
||||
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
|
||||
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
|
||||
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
|
||||
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
|
||||
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
|
||||
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
|
||||
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
|
||||
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
|
||||
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
|
||||
"Accounts" : "Accounts",
|
||||
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
|
||||
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
|
||||
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
|
||||
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
|
||||
"Could not write file contents" : "Tidak dapat menulis konten file",
|
||||
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %2$s)",
|
||||
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
|
||||
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
|
||||
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
|
||||
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
|
||||
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
|
||||
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
|
||||
"File not found: %1$s" : "File tidak ditemukan: %1$s",
|
||||
"Invalid target path" : "Jalur tujuan tidak valid",
|
||||
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
|
||||
"Upgrade needed" : "Perlu peningkatan",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
|
||||
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
|
||||
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
|
||||
"Events" : "Acara",
|
||||
"Untitled task" : "Tugas tanpa judul",
|
||||
"Completed on %s" : "Selesai pada %s",
|
||||
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
|
||||
"Due on %s" : "Jatuh tempo pada %s",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
|
||||
"Example event - open me!" : "Acara contoh - buka saya!",
|
||||
"System Address Book" : "Buku Alamat Sistem",
|
||||
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
|
||||
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
|
||||
"DAV system address book" : "Buku alamat sistem DAV",
|
||||
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
|
||||
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
|
||||
"WebDAV endpoint" : "Endpoint WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
|
||||
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
|
||||
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
|
||||
"Contacts and groups" : "Kontak dan grup",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Absence saved" : "Ketidakhadiran disimpan",
|
||||
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
|
||||
"Absence cleared" : "Ketidakhadiran dihapus",
|
||||
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
|
||||
"First day" : "Hari pertama",
|
||||
"Last day (inclusive)" : "Hari terakhir (termasuk)",
|
||||
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
|
||||
"Name of the replacement" : "Nama pengganti",
|
||||
"Short absence status" : "Status ketidakhadiran singkat",
|
||||
"Long absence Message" : "Pesan ketidakhadiran panjang",
|
||||
"Save" : "Simpan",
|
||||
"Disable absence" : "Nonaktifkan ketidakhadiran",
|
||||
"Failed to load availability" : "Gagal memuat ketersediaan",
|
||||
"Saved availability" : "Ketersediaan disimpan",
|
||||
"Failed to save availability" : "Gagal menyimpan ketersediaan",
|
||||
"to" : "untuk",
|
||||
"Delete slot" : "Hapus slot",
|
||||
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
|
||||
"Add slot" : "Tambahkan slot",
|
||||
"Weekdays" : "Hari kerja",
|
||||
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
|
||||
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
|
||||
"Cancel" : "Batal",
|
||||
"Import" : "Impor",
|
||||
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
|
||||
"Contact reset successfully" : "Kontak berhasil direset",
|
||||
"Error while resetting contact" : "Kesalahan saat mereset kontak",
|
||||
"Contact imported successfully" : "Kontak berhasil diimpor",
|
||||
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
|
||||
"Import contact" : "Impor kontak",
|
||||
"Reset to default" : "Reset ke default",
|
||||
"Import contacts" : "Impor kontak",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
|
||||
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
|
||||
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
|
||||
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
|
||||
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
|
||||
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
|
||||
"Import calendar event" : "Impor acara kalender",
|
||||
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
|
||||
"Upload event" : "Unggah acara",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
|
||||
"Calendar server" : "Server kalender",
|
||||
"Send invitations to attendees" : "Kirim undangan kepada peserta",
|
||||
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
|
||||
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
|
||||
"Send notifications for events" : "Kirim notifikasi untuk acara",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
|
||||
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
|
||||
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
|
||||
"Example content" : "Konten contoh",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
|
||||
"Availability" : "Ketersediaan",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
|
||||
"Absence" : "Ketidakhadiran",
|
||||
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
|
||||
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
|
||||
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
|
||||
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
|
||||
"Tentative" : "Tentatif",
|
||||
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
|
||||
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
|
||||
"No results." : "Tidak ada hasil.",
|
||||
"Start typing." : "Mulai mengetik.",
|
||||
"Time zone:" : "Zona waktu:"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
@@ -0,0 +1,310 @@
|
||||
{ "translations": {
|
||||
"Calendar" : "Kalender",
|
||||
"Tasks" : "Tugas",
|
||||
"Personal" : "Pribadi",
|
||||
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
|
||||
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
|
||||
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
|
||||
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
|
||||
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
|
||||
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
|
||||
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
|
||||
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
|
||||
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
|
||||
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
|
||||
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
|
||||
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
|
||||
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
|
||||
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
|
||||
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
|
||||
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
|
||||
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
|
||||
"Untitled event" : "Acara tanpa judul",
|
||||
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
|
||||
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
|
||||
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
|
||||
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
|
||||
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
|
||||
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
|
||||
"Busy" : "Sibuk",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
|
||||
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
|
||||
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
|
||||
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
|
||||
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
|
||||
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
|
||||
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
|
||||
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
|
||||
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
|
||||
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
|
||||
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
|
||||
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
|
||||
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
|
||||
"Contact birthdays" : "Ulang tahun kontak",
|
||||
"Death of %s" : "Wafatnya %s",
|
||||
"Untitled calendar" : "Kalender tanpa judul",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Tanggal:",
|
||||
"Where:" : "Tempat:",
|
||||
"Description:" : "Deskripsi:",
|
||||
"_%n hour_::_%n hours_" : ["%n jam"],
|
||||
"_%n minute_::_%n minutes_" : ["%n menit"],
|
||||
"%s (in %s)" : "%s (dalam %s)",
|
||||
"%s (%s ago)" : "%s (%s yang lalu)",
|
||||
"Calendar: %s" : "Kalender: %s",
|
||||
"Date: %s" : "Tanggal: %s",
|
||||
"Description: %s" : "Deskripsi: %s",
|
||||
"Where: %s" : "Di mana: %s",
|
||||
"%1$s via %2$s" : "%1$s melalui %2$s",
|
||||
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
|
||||
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
|
||||
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
|
||||
"Every Day for the entire day" : "Setiap hari sepanjang hari",
|
||||
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
|
||||
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
|
||||
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
|
||||
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
|
||||
"In the past on %1$s" : "Di masa lalu pada %1$s",
|
||||
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
|
||||
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
|
||||
"Cancelled: %1$s" : "Dibatalkan: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
|
||||
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
|
||||
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
|
||||
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
|
||||
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
|
||||
"Invitation: %1$s" : "Undangan: %1$s",
|
||||
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
|
||||
"Organizer:" : "Penyelenggara:",
|
||||
"Attendees:" : "Peserta:",
|
||||
"Title:" : "Judul:",
|
||||
"When:" : "Kapan:",
|
||||
"Location:" : "Lokasi:",
|
||||
"Link:" : "Tautan:",
|
||||
"Occurring:" : "Berlangsung:",
|
||||
"Accept" : "Terima",
|
||||
"Decline" : "Tolak",
|
||||
"More options …" : "Opsi lainnya …",
|
||||
"More options at %s" : "Opsi lainnya di %s",
|
||||
"Monday" : "Senin",
|
||||
"Tuesday" : "Selasa",
|
||||
"Wednesday" : "Rabu",
|
||||
"Thursday" : "Kamis",
|
||||
"Friday" : "Jumat",
|
||||
"Saturday" : "Sabtu",
|
||||
"Sunday" : "Minggu",
|
||||
"January" : "Januari",
|
||||
"February" : "Februari",
|
||||
"March" : "Maret",
|
||||
"April" : "April",
|
||||
"May" : "Mei",
|
||||
"June" : "Juni",
|
||||
"July" : "Juli",
|
||||
"August" : "Agustus",
|
||||
"September" : "September",
|
||||
"October" : "Oktober",
|
||||
"November" : "November",
|
||||
"December" : "Desember",
|
||||
"First" : "Pertama",
|
||||
"Second" : "Kedua",
|
||||
"Third" : "Ketiga",
|
||||
"Fourth" : "Keempat",
|
||||
"Fifth" : "Kelima",
|
||||
"Last" : "Terakhir",
|
||||
"Second Last" : "Kedua terakhir",
|
||||
"Third Last" : "Ketiga terakhir",
|
||||
"Fourth Last" : "Keempat terakhir",
|
||||
"Fifth Last" : "Kelima terakhir",
|
||||
"Contacts" : "Kontak",
|
||||
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
|
||||
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
|
||||
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
|
||||
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
|
||||
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
|
||||
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
|
||||
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
|
||||
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
|
||||
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
|
||||
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
|
||||
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
|
||||
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
|
||||
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
|
||||
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
|
||||
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
|
||||
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
|
||||
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
|
||||
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
|
||||
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
|
||||
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
|
||||
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
|
||||
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
|
||||
"Accounts" : "Accounts",
|
||||
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
|
||||
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
|
||||
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
|
||||
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
|
||||
"Could not write file contents" : "Tidak dapat menulis konten file",
|
||||
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %2$s)",
|
||||
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
|
||||
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
|
||||
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
|
||||
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
|
||||
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
|
||||
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
|
||||
"File not found: %1$s" : "File tidak ditemukan: %1$s",
|
||||
"Invalid target path" : "Jalur tujuan tidak valid",
|
||||
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
|
||||
"Upgrade needed" : "Perlu peningkatan",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
|
||||
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
|
||||
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
|
||||
"Events" : "Acara",
|
||||
"Untitled task" : "Tugas tanpa judul",
|
||||
"Completed on %s" : "Selesai pada %s",
|
||||
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
|
||||
"Due on %s" : "Jatuh tempo pada %s",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
|
||||
"Example event - open me!" : "Acara contoh - buka saya!",
|
||||
"System Address Book" : "Buku Alamat Sistem",
|
||||
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
|
||||
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
|
||||
"DAV system address book" : "Buku alamat sistem DAV",
|
||||
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
|
||||
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
|
||||
"WebDAV endpoint" : "Endpoint WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
|
||||
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
|
||||
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
|
||||
"Contacts and groups" : "Kontak dan grup",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Absence saved" : "Ketidakhadiran disimpan",
|
||||
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
|
||||
"Absence cleared" : "Ketidakhadiran dihapus",
|
||||
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
|
||||
"First day" : "Hari pertama",
|
||||
"Last day (inclusive)" : "Hari terakhir (termasuk)",
|
||||
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
|
||||
"Name of the replacement" : "Nama pengganti",
|
||||
"Short absence status" : "Status ketidakhadiran singkat",
|
||||
"Long absence Message" : "Pesan ketidakhadiran panjang",
|
||||
"Save" : "Simpan",
|
||||
"Disable absence" : "Nonaktifkan ketidakhadiran",
|
||||
"Failed to load availability" : "Gagal memuat ketersediaan",
|
||||
"Saved availability" : "Ketersediaan disimpan",
|
||||
"Failed to save availability" : "Gagal menyimpan ketersediaan",
|
||||
"to" : "untuk",
|
||||
"Delete slot" : "Hapus slot",
|
||||
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
|
||||
"Add slot" : "Tambahkan slot",
|
||||
"Weekdays" : "Hari kerja",
|
||||
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
|
||||
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
|
||||
"Cancel" : "Batal",
|
||||
"Import" : "Impor",
|
||||
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
|
||||
"Contact reset successfully" : "Kontak berhasil direset",
|
||||
"Error while resetting contact" : "Kesalahan saat mereset kontak",
|
||||
"Contact imported successfully" : "Kontak berhasil diimpor",
|
||||
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
|
||||
"Import contact" : "Impor kontak",
|
||||
"Reset to default" : "Reset ke default",
|
||||
"Import contacts" : "Impor kontak",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
|
||||
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
|
||||
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
|
||||
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
|
||||
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
|
||||
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
|
||||
"Import calendar event" : "Impor acara kalender",
|
||||
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
|
||||
"Upload event" : "Unggah acara",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
|
||||
"Calendar server" : "Server kalender",
|
||||
"Send invitations to attendees" : "Kirim undangan kepada peserta",
|
||||
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
|
||||
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
|
||||
"Send notifications for events" : "Kirim notifikasi untuk acara",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
|
||||
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
|
||||
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
|
||||
"Example content" : "Konten contoh",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
|
||||
"Availability" : "Ketersediaan",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
|
||||
"Absence" : "Ketidakhadiran",
|
||||
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
|
||||
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
|
||||
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
|
||||
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
|
||||
"Tentative" : "Tentatif",
|
||||
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
|
||||
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
|
||||
"No results." : "Tidak ada hasil.",
|
||||
"Start typing." : "Mulai mengetik.",
|
||||
"Time zone:" : "Zona waktu:"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de peça para o arquivo final, cancelado pelo hook",
|
||||
"Could not rename part file to final file" : "Não foi possível renomear o arquivo de peça para o arquivo final",
|
||||
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
|
||||
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
|
||||
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de peça para o arquivo final, cancelado pelo hook",
|
||||
"Could not rename part file to final file" : "Não foi possível renomear o arquivo de peça para o arquivo final",
|
||||
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
|
||||
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
|
||||
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "无法将部分文件重命名为最终文件,操作被插件取消",
|
||||
"Could not rename part file to final file" : "无法将部分文件重命名为最终文件",
|
||||
"Failed to check file size: %1$s" : "检查文件大小失败:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "无法打开文件:%1$s(%2$d),文件似乎不存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "无法打开文件:%1$s(%2$d),文件似乎不存在",
|
||||
"Encryption not ready: %1$s" : "加密不可用:%1$s",
|
||||
"Failed to open file: %1$s" : "打开文件失败:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除链接失败:%1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "无法将部分文件重命名为最终文件,操作被插件取消",
|
||||
"Could not rename part file to final file" : "无法将部分文件重命名为最终文件",
|
||||
"Failed to check file size: %1$s" : "检查文件大小失败:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "无法打开文件:%1$s(%2$d),文件似乎不存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "无法打开文件:%1$s(%2$d),文件似乎不存在",
|
||||
"Encryption not ready: %1$s" : "加密不可用:%1$s",
|
||||
"Failed to open file: %1$s" : "打开文件失败:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除链接失败:%1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被掛勾取消",
|
||||
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被掛勾取消",
|
||||
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -234,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被連動取消",
|
||||
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -232,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被連動取消",
|
||||
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -217,7 +217,7 @@ class BirthdayService {
|
||||
$vEvent->DTSTART['VALUE'] = 'DATE';
|
||||
$vEvent->add('DTEND');
|
||||
|
||||
$dtEndDate = (new \DateTime())->setTimestamp($date->getTimeStamp());
|
||||
$dtEndDate = \DateTime::createFromInterface($date);
|
||||
$dtEndDate->add(new \DateInterval('P1D'));
|
||||
$vEvent->DTEND->setDateTime(
|
||||
$dtEndDate
|
||||
|
||||
@@ -126,6 +126,18 @@ class IMipPlugin extends SabreIMipPlugin {
|
||||
$iTipMessage->scheduleStatus = '5.0; EMail delivery failed';
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if external attendees are disabled
|
||||
$externalAttendeesDisabled = $this->config->getValueBool('dav', 'caldav_external_attendees_disabled', false);
|
||||
if ($externalAttendeesDisabled && !$this->imipService->isSystemUser($recipient)) {
|
||||
$this->logger->debug('Invitation not sent to external attendee (external attendees disabled)', [
|
||||
'uid' => $iTipMessage->uid,
|
||||
'attendee' => $recipient,
|
||||
]);
|
||||
$iTipMessage->scheduleStatus = '5.0; External attendees are disabled';
|
||||
return;
|
||||
}
|
||||
|
||||
$recipientName = $iTipMessage->recipientName ? (string)$iTipMessage->recipientName : null;
|
||||
|
||||
$newEvents = $iTipMessage->message;
|
||||
|
||||
@@ -875,6 +875,16 @@ class IMipService {
|
||||
return $dtStart->getDateTime()->getTimeStamp();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an email address belongs to a system user
|
||||
*
|
||||
* @param string $email
|
||||
* @return bool True if the email belongs to a system user, false otherwise
|
||||
*/
|
||||
public function isSystemUser(string $email): bool {
|
||||
return !empty($this->userManager->getByEmail($email));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Property $attendee
|
||||
*/
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
* SPDX-FileCopyrightText: 2012 entreCables S.L. All rights reserved
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
* SPDX-FileContributor: Sergio Cambra
|
||||
* SPDX-License-Identifier: AGPL-3.0-only AND BSD-3-Clause
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\Connector\Sabre;
|
||||
|
||||
use OC\Files\View;
|
||||
use OCA\DAV\Upload\UploadFolder;
|
||||
use OCP\Files\StorageNotAvailableException;
|
||||
use OCP\Util;
|
||||
use Sabre\DAV\Exception\InsufficientStorage;
|
||||
use Sabre\DAV\Exception\ServiceUnavailable;
|
||||
use Sabre\DAV\IFile;
|
||||
@@ -19,42 +23,41 @@ use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\HTTP\ResponseInterface;
|
||||
|
||||
/**
|
||||
* This plugin check user quota and deny creating files when they exceeds the quota.
|
||||
* This plugin enforces user storage quotas by preventing file operations that would
|
||||
* exceed the user’s allotted quota.
|
||||
*
|
||||
* @author Sergio Cambra
|
||||
* @copyright Copyright (C) 2012 entreCables S.L. All rights reserved.
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
* @property-read View $view The Nextcloud file view for quota operations.
|
||||
*/
|
||||
class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
/**
|
||||
* Reference to main server object
|
||||
* The Sabre\DAV server instance (set during initialize()).
|
||||
*
|
||||
* @var \Sabre\DAV\Server
|
||||
* @var \Sabre\DAV\Server|null
|
||||
*/
|
||||
private $server;
|
||||
private ?\Sabre\DAV\Server $server = null;
|
||||
|
||||
/**
|
||||
* @param View $view
|
||||
* QuotaPlugin constructor.
|
||||
*
|
||||
* @param View $view The Nextcloud Files View instance.
|
||||
*/
|
||||
public function __construct(
|
||||
private $view,
|
||||
private View $view,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* This initializes the plugin.
|
||||
* Initializes the quota plugin and subscribes to relevant Sabre\DAV server events.
|
||||
*
|
||||
* This function is called by \Sabre\DAV\Server, after
|
||||
* addPlugin is called.
|
||||
* @link https://sabre.io/dav/writing-plugins/#events
|
||||
*
|
||||
* This method should set up the requires event subscriptions.
|
||||
*
|
||||
* @param \Sabre\DAV\Server $server
|
||||
* @param \Sabre\DAV\Server $server The Sabre\DAV server instance.
|
||||
* @return void
|
||||
*/
|
||||
public function initialize(\Sabre\DAV\Server $server) {
|
||||
public function initialize(\Sabre\DAV\Server $server): void {
|
||||
$this->server = $server;
|
||||
|
||||
// Register event handlers for quota checks on various file operations
|
||||
$server->on('beforeWriteContent', [$this, 'beforeWriteContent'], 10);
|
||||
$server->on('beforeCreateFile', [$this, 'beforeCreateFile'], 10);
|
||||
$server->on('method:MKCOL', [$this, 'onCreateCollection'], 30);
|
||||
@@ -63,78 +66,91 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check quota before creating file
|
||||
* Checks quota before creating a new file.
|
||||
* For chunked uploads (with 'Destination' and 'OC-Total-Length'), checks quota for the destination folder.
|
||||
* Otherwise, checks quota for the parent node plus the new filename.
|
||||
*
|
||||
* @param string $uri target file URI
|
||||
* @param resource $data data
|
||||
* @param INode $parent Sabre Node
|
||||
* @param bool $modified modified
|
||||
* @param string $uri Target file URI (unused).
|
||||
* @param resource $data The data to write (unused).
|
||||
* @param INode $parent Parent Sabre node.
|
||||
* @param bool $modified Whether the node is modified (unused).
|
||||
* @return bool True if quota is sufficient, otherwise throws InsufficientStorage.
|
||||
*/
|
||||
public function beforeCreateFile($uri, $data, INode $parent, $modified) {
|
||||
public function beforeCreateFile(string $uri, $data, INode $parent, bool $modified): bool {
|
||||
$request = $this->server->httpRequest;
|
||||
|
||||
// Check quota during chunked uploads
|
||||
if ($parent instanceof UploadFolder && $request->getHeader('Destination')) {
|
||||
// If chunked upload and Total-Length header is set, use that
|
||||
// value for quota check. This allows us to also check quota while
|
||||
// uploading chunks and not only when the file is assembled.
|
||||
$length = $request->getHeader('OC-Total-Length');
|
||||
$destinationPath = $this->server->calculateUri($request->getHeader('Destination'));
|
||||
$totalLength = $request->getHeader('OC-Total-Length');
|
||||
$destinationUri = $request->getHeader('Destination');
|
||||
$destinationPath = $this->server->calculateUri($destinationUri);
|
||||
$quotaPath = $this->getPathForDestination($destinationPath);
|
||||
if ($quotaPath && is_numeric($length)) {
|
||||
return $this->checkQuota($quotaPath, (int)$length);
|
||||
|
||||
if ($quotaPath && is_numeric($totalLength)) {
|
||||
return $this->checkQuota($quotaPath, Util::numericToNumber($totalLength));
|
||||
}
|
||||
// If quota cannot be checked, allow by default
|
||||
// NOTE: We can still check during assembly.
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!$parent instanceof Node) {
|
||||
return;
|
||||
// No quota check for non-Node parents
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->checkQuota($parent->getPath() . '/' . basename($uri));
|
||||
$filePath = $parent->getPath() . '/' . basename($uri);
|
||||
return $this->checkQuota($filePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check quota before creating directory
|
||||
* Checks quota before creating a new collection (directory) via MKCOL.
|
||||
* Assumes a fixed size (4096 bytes) for quota check as MKCOL lacks a Content-Length header.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
* @return bool
|
||||
* @throws InsufficientStorage
|
||||
* @throws \Sabre\DAV\Exception\Forbidden
|
||||
* @param RequestInterface $request The HTTP request for the MKCOL operation.
|
||||
* @param ResponseInterface $response The HTTP response object.
|
||||
* @return bool True if there is enough quota, otherwise throws InsufficientStorage or \Sabre\DAV\Exception\Forbidden (?).
|
||||
*/
|
||||
public function onCreateCollection(RequestInterface $request, ResponseInterface $response): bool {
|
||||
try {
|
||||
$destinationPath = $this->server->calculateUri($request->getUrl());
|
||||
$quotaPath = $this->getPathForDestination($destinationPath);
|
||||
$collectionPath = $this->getPathForDestination($destinationPath);
|
||||
} catch (\Exception $e) {
|
||||
return true;
|
||||
// Optionally log: e.g. ('Quota check failed during onCreateCollection: ' . $e->getMessage());
|
||||
return true; // Quota cannot be checked, allow by default
|
||||
}
|
||||
if ($quotaPath) {
|
||||
// MKCOL does not have a Content-Length header, so we can use
|
||||
// a fixed value for the quota check.
|
||||
return $this->checkQuota($quotaPath, 4096, true);
|
||||
if ($collectionPath) {
|
||||
// Default directory size for quota check since MKCOL doesn't specify one
|
||||
return $this->checkQuota($collectionPath, 4096, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true; // No path to check, allow by default
|
||||
}
|
||||
|
||||
/**
|
||||
* Check quota before writing content
|
||||
* Checks quota before writing content to a node.
|
||||
*
|
||||
* @param string $uri target file URI
|
||||
* @param INode $node Sabre Node
|
||||
* @param resource $data data
|
||||
* @param bool $modified modified
|
||||
* @param string $uri Target file URI (unused).
|
||||
* @param INode $node Sabre node to which content will be written.
|
||||
* @param resource $data Content data (unused).
|
||||
* @param bool $modified Whether the node is modified (unused).
|
||||
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
|
||||
*/
|
||||
public function beforeWriteContent($uri, INode $node, $data, $modified) {
|
||||
public function beforeWriteContent(string $uri, INode $node, $data, bool $modified): bool {
|
||||
if (!$node instanceof Node) {
|
||||
return;
|
||||
// No quota check for non-Node objects
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->checkQuota($node->getPath());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if we're moving a FutureFile in which case we need to check
|
||||
* the quota on the target destination.
|
||||
* Checks quota before moving a FutureFile node to a new destination.
|
||||
*
|
||||
* @param string $sourcePath Path to the source node.
|
||||
* @param string $destinationPath Path where the node will be moved to.
|
||||
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
|
||||
*/
|
||||
public function beforeMove(string $sourcePath, string $destinationPath): bool {
|
||||
$sourceNode = $this->server->tree->getNodeForPath($sourcePath);
|
||||
@@ -143,17 +159,22 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
}
|
||||
|
||||
try {
|
||||
// The final path is not known yet, we check the quota on the parent
|
||||
$path = $this->getPathForDestination($destinationPath);
|
||||
// The final path is not known yet, check quota on the parent of the destination
|
||||
$quotaPath = $this->getPathForDestination($destinationPath);
|
||||
} catch (\Exception $e) {
|
||||
// Optionally log: e.g. ('Quota check failed during beforeMove: ' . $e->getMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->checkQuota($path, $sourceNode->getSize());
|
||||
return $this->checkQuota($quotaPath, $sourceNode->getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check quota on the target destination before a copy.
|
||||
* Checks quota before allowing a file copy operation.
|
||||
*
|
||||
* @param string $sourcePath Path to the source node.
|
||||
* @param string $destinationPath Path where the node will be copied to.
|
||||
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
|
||||
*/
|
||||
public function beforeCopy(string $sourcePath, string $destinationPath): bool {
|
||||
$sourceNode = $this->server->tree->getNodeForPath($sourcePath);
|
||||
@@ -162,101 +183,132 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
}
|
||||
|
||||
try {
|
||||
$path = $this->getPathForDestination($destinationPath);
|
||||
$quotaPath = $this->getPathForDestination($destinationPath);
|
||||
} catch (\Exception $e) {
|
||||
// Optionally log: e.g. ('Quota check failed during beforeCopy: ' . $e->getMessage());
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->checkQuota($path, $sourceNode->getSize());
|
||||
return $this->checkQuota($quotaPath, $sourceNode->getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the path for quota checking, given a destination path.
|
||||
*
|
||||
* If the destination node exists, returns its internal path.
|
||||
* If it does not exist, returns the internal path of its parent node.
|
||||
* Throws an exception if the relevant node is not a valid Node instance.
|
||||
*
|
||||
* @param string $destinationPath Destination path within the virtual file tree.
|
||||
* @return string Internal path to use for quota checking.
|
||||
* @throws \Exception If the destination or parent node is not a valid Node.
|
||||
*/
|
||||
private function getPathForDestination(string $destinationPath): string {
|
||||
// get target node for proper path conversion
|
||||
// If the node exists, return its actual path
|
||||
if ($this->server->tree->nodeExists($destinationPath)) {
|
||||
$destinationNode = $this->server->tree->getNodeForPath($destinationPath);
|
||||
if (!$destinationNode instanceof Node) {
|
||||
throw new \Exception('Invalid destination node');
|
||||
throw new \Exception("Destination node at '$destinationPath' is not a valid Node instance.");
|
||||
}
|
||||
return $destinationNode->getPath();
|
||||
}
|
||||
|
||||
// Otherwise, use the parent directory's path
|
||||
$parent = dirname($destinationPath);
|
||||
if ($parent === '.') {
|
||||
$parent = '';
|
||||
}
|
||||
$parent = ($parent === '.') ? '' : $parent;
|
||||
|
||||
$parentNode = $this->server->tree->getNodeForPath($parent);
|
||||
if (!$parentNode instanceof Node) {
|
||||
throw new \Exception('Invalid destination node');
|
||||
throw new \Exception("Parent node at '$parent' is not a valid Node instance.");
|
||||
}
|
||||
|
||||
return $parentNode->getPath();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is called before any HTTP method and validates there is enough free space to store the file
|
||||
* Validates there is enough free space to store the file at the given path.
|
||||
*
|
||||
* @param string $path relative to the users home
|
||||
* @param int|float|null $length
|
||||
* Called before relevant HTTP DAV events (when there is an associated View).
|
||||
* @see initialize() for specific events we're registered for.
|
||||
*
|
||||
* @internal
|
||||
* @param string $path Path relative to the user's home.
|
||||
* @param int|float|null $length Size to check for, or null to auto-detect.
|
||||
* @param bool $isDir Whether the target is a directory.
|
||||
* @throws InsufficientStorage
|
||||
* @return bool
|
||||
* @return bool True if there is enough space, otherwise throws.
|
||||
*/
|
||||
public function checkQuota(string $path, $length = null, $isDir = false) {
|
||||
public function checkQuota(string $path, int|float|null $length = null, bool $isDir = false): bool {
|
||||
// Auto-detect length if not provided
|
||||
if ($length === null) {
|
||||
$length = $this->getLength();
|
||||
}
|
||||
if (empty($length)) {
|
||||
return true; // No length to check, assume okay
|
||||
}
|
||||
|
||||
if ($length) {
|
||||
[$parentPath, $newName] = \Sabre\Uri\split($path);
|
||||
if (is_null($parentPath)) {
|
||||
$parentPath = '';
|
||||
}
|
||||
$req = $this->server->httpRequest;
|
||||
$normalizedPath = str_replace('//', '/', $path);
|
||||
$freeSpace = $this->getFreeSpace($normalizedPath);
|
||||
|
||||
// Strip any duplicate slashes
|
||||
$path = str_replace('//', '/', $path);
|
||||
// Explicitly handle unknown/invalid free space
|
||||
if ($freeSpace === false || $freeSpace < 0) {
|
||||
// You might log here; currently allows the operation
|
||||
return true;
|
||||
}
|
||||
|
||||
$freeSpace = $this->getFreeSpace($path);
|
||||
if ($freeSpace >= 0 && $length > $freeSpace) {
|
||||
if ($isDir) {
|
||||
throw new InsufficientStorage("Insufficient space in $path. $freeSpace available. Cannot create directory");
|
||||
}
|
||||
|
||||
throw new InsufficientStorage("Insufficient space in $path, $length required, $freeSpace available");
|
||||
}
|
||||
if ($length > $freeSpace) {
|
||||
$msg = $isDir
|
||||
? "Insufficient space in $normalizedPath. $freeSpace available. Cannot create directory"
|
||||
: "Insufficient space in $normalizedPath, $length required, $freeSpace available";
|
||||
throw new InsufficientStorage($msg);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getLength() {
|
||||
$req = $this->server->httpRequest;
|
||||
$length = $req->getHeader('X-Expected-Entity-Length');
|
||||
if (!is_numeric($length)) {
|
||||
$length = $req->getHeader('Content-Length');
|
||||
$length = is_numeric($length) ? $length : null;
|
||||
}
|
||||
/**
|
||||
* Returns the largest valid content length found in any of the following HTTP headers:
|
||||
* - X-Expected-Entity-Length
|
||||
* - Content-Length
|
||||
* - OC-Total-Length
|
||||
*
|
||||
* Only numeric values are considered. If none of the headers contain a valid numeric value,
|
||||
* returns null.
|
||||
*
|
||||
* @internal
|
||||
* @return int|float|null The largest valid content length, or null if none is found.
|
||||
*/
|
||||
public function getLength(): int|float|null {
|
||||
$request = $this->server->httpRequest;
|
||||
|
||||
$ocLength = $req->getHeader('OC-Total-Length');
|
||||
if (!is_numeric($ocLength)) {
|
||||
return $length;
|
||||
}
|
||||
if (!is_numeric($length)) {
|
||||
return $ocLength;
|
||||
}
|
||||
return max($length, $ocLength);
|
||||
// Get headers as strings
|
||||
$expectedLength = $request->getHeader('X-Expected-Entity-Length');
|
||||
$contentLength = $request->getHeader('Content-Length');
|
||||
$ocTotalLength = $request->getHeader('OC-Total-Length');
|
||||
|
||||
// Filter out non-numeric values, use Util::numericToNumber for safe conversion
|
||||
$lengths = array_filter([
|
||||
is_numeric($expectedLength) ? Util::numericToNumber($expectedLength) : null,
|
||||
is_numeric($contentLength) ? Util::numericToNumber($contentLength) : null,
|
||||
is_numeric($ocTotalLength) ? Util::numericToNumber($ocTotalLength) : null,
|
||||
], fn ($v) => $v !== null);
|
||||
|
||||
// Return the largest valid length, or null if none
|
||||
return !empty($lengths) ? max($lengths) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uri
|
||||
* @return mixed
|
||||
* @throws ServiceUnavailable
|
||||
* Returns the available free space for the given URI.
|
||||
*
|
||||
* TODO: `false` can probably be dropped here, if not now when free_space is cleaned up.
|
||||
*
|
||||
* @param string $uri The resource URI whose free space is being queried.
|
||||
* @return int|float|false The amount of free space in bytes,
|
||||
* @throws ServiceUnavailable If the underlying storage is not available.
|
||||
*/
|
||||
public function getFreeSpace($uri) {
|
||||
private function getFreeSpace(string $uri): int|float|false {
|
||||
try {
|
||||
$freeSpace = $this->view->free_space(ltrim($uri, '/'));
|
||||
return $freeSpace;
|
||||
return $this->view->free_space(ltrim($uri, '/'));
|
||||
} catch (StorageNotAvailableException $e) {
|
||||
throw new ServiceUnavailable($e->getMessage());
|
||||
}
|
||||
|
||||
@@ -150,12 +150,13 @@ class Server extends \Sabre\DAV\Server {
|
||||
string $pluginName,
|
||||
string $eventName,
|
||||
): callable {
|
||||
$connection = \OCP\Server::get(Connection::class);
|
||||
return function (PropFind $propFind, INode $node) use (
|
||||
$callBack,
|
||||
$pluginName,
|
||||
$eventName,
|
||||
$connection,
|
||||
): bool {
|
||||
$connection = \OCP\Server::get(Connection::class);
|
||||
$queriesBefore = $connection->getStats()['executed'];
|
||||
$result = $callBack($propFind, $node);
|
||||
$queriesAfter = $connection->getStats()['executed'];
|
||||
|
||||
@@ -103,6 +103,7 @@ class ServerFactory {
|
||||
$server->addPlugin(new LockPlugin());
|
||||
|
||||
$server->addPlugin(new RequestIdHeaderPlugin($this->request));
|
||||
$server->addPlugin(new UserIdHeaderPlugin($this->userSession));
|
||||
|
||||
$server->addPlugin(new ZipFolderPlugin(
|
||||
$tree,
|
||||
|
||||
@@ -261,6 +261,14 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// if the share recipient is allow to delete from the share, they are allowed to move the file out of the share
|
||||
// the user moving the file out of the share to their home storage would give them share permissions and allow moving into the share
|
||||
//
|
||||
// since the 2-step move is allowed, we also allow both steps at once
|
||||
if ($sourceNode->isDeletable()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Forbidden('You cannot move a non-shareable node into a share');
|
||||
|
||||
@@ -123,7 +123,7 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
$isFav = false;
|
||||
$tags = $this->getTags($fileId);
|
||||
if ($tags) {
|
||||
$favPos = array_search(self::TAG_FAVORITE, $tags);
|
||||
$favPos = array_search(self::TAG_FAVORITE, $tags, true);
|
||||
if ($favPos !== false) {
|
||||
$isFav = true;
|
||||
unset($tags[$favPos]);
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\Connector\Sabre;
|
||||
|
||||
use OCP\IUserSession;
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\HTTP\ResponseInterface;
|
||||
|
||||
class UserIdHeaderPlugin extends \Sabre\DAV\ServerPlugin {
|
||||
public function __construct(
|
||||
private readonly IUserSession $userSession,
|
||||
) {
|
||||
}
|
||||
|
||||
public function initialize(\Sabre\DAV\Server $server): void {
|
||||
$server->on('afterMethod:*', [$this, 'afterMethod']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the request id as a header in the response
|
||||
*
|
||||
* @param RequestInterface $request request
|
||||
* @param ResponseInterface $response response
|
||||
*/
|
||||
public function afterMethod(RequestInterface $request, ResponseInterface $response): void {
|
||||
if ($user = $this->userSession->getUser()) {
|
||||
$response->setHeader('X-User-Id', $user->getUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,7 @@ use OCA\DAV\Connector\Sabre\QuotaPlugin;
|
||||
use OCA\DAV\Connector\Sabre\RequestIdHeaderPlugin;
|
||||
use OCA\DAV\Connector\Sabre\SharesPlugin;
|
||||
use OCA\DAV\Connector\Sabre\TagsPlugin;
|
||||
use OCA\DAV\Connector\Sabre\UserIdHeaderPlugin;
|
||||
use OCA\DAV\Connector\Sabre\ZipFolderPlugin;
|
||||
use OCA\DAV\DAV\CustomPropertiesBackend;
|
||||
use OCA\DAV\DAV\PublicAuth;
|
||||
@@ -244,6 +245,7 @@ class Server {
|
||||
// performance improvement plugins
|
||||
$this->server->addPlugin(new CopyEtagHeaderPlugin());
|
||||
$this->server->addPlugin(new RequestIdHeaderPlugin(\OCP\Server::get(IRequest::class)));
|
||||
$this->server->addPlugin(new UserIdHeaderPlugin(\OCP\Server::get(IUserSession::class)));
|
||||
$this->server->addPlugin(new UploadAutoMkcolPlugin());
|
||||
$this->server->addPlugin(new ChunkingV2Plugin(\OCP\Server::get(ICacheFactory::class)));
|
||||
$this->server->addPlugin(new ChunkingPlugin());
|
||||
|
||||
@@ -18,7 +18,9 @@ class ExternalCalendarTest extends TestCase {
|
||||
parent::setUp();
|
||||
|
||||
$this->abstractExternalCalendar
|
||||
= $this->getMockForAbstractClass(ExternalCalendar::class, ['example-app-id', 'calendar-uri-in-backend']);
|
||||
= $this->getMockBuilder(ExternalCalendar::class)
|
||||
->setConstructorArgs(['example-app-id', 'calendar-uri-in-backend'])
|
||||
->getMock();
|
||||
}
|
||||
|
||||
public function testGetName():void {
|
||||
|
||||
@@ -130,6 +130,10 @@ class IMipPluginTest extends TestCase {
|
||||
$message->senderName = 'Mr. Wizard';
|
||||
$message->recipient = 'mailto:' . 'frodo@hobb.it';
|
||||
$message->significantChange = false;
|
||||
|
||||
$this->config->expects(self::never())
|
||||
->method('getValueBool');
|
||||
|
||||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('1.0', $message->getScheduleStatus());
|
||||
}
|
||||
@@ -177,6 +181,12 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
|
||||
@@ -280,6 +290,10 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::once())
|
||||
->method('getValueBool')
|
||||
->with('dav', 'caldav_external_attendees_disabled', false)
|
||||
->willReturn(false);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
|
||||
@@ -354,6 +368,10 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::once())
|
||||
->method('getValueBool')
|
||||
->with('dav', 'caldav_external_attendees_disabled', false)
|
||||
->willReturn(false);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->willReturn(['new' => [$newVevent], 'old' => null]);
|
||||
@@ -455,6 +473,12 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->willReturn(['old' => [] ,'new' => [$newVevent]]);
|
||||
@@ -695,6 +719,12 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, true],
|
||||
]);
|
||||
$this->service->expects(self::once())
|
||||
->method('getCurrentAttendee')
|
||||
->with($message)
|
||||
@@ -837,10 +867,12 @@ class IMipPluginTest extends TestCase {
|
||||
->method('getValueString')
|
||||
->with('dav', 'invitation_link_recipients', 'yes')
|
||||
->willReturn('yes');
|
||||
$this->config->expects(self::once())
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->with('core', 'mail_providers_enabled', true)
|
||||
->willReturn(false);
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->service->expects(self::once())
|
||||
->method('createInvitationToken')
|
||||
->with($message, $newVevent, 1496912700)
|
||||
@@ -888,6 +920,12 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->with($newVCalendar, null)
|
||||
@@ -981,6 +1019,12 @@ class IMipPluginTest extends TestCase {
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, false],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->with($newVCalendar, null)
|
||||
@@ -1040,4 +1084,156 @@ class IMipPluginTest extends TestCase {
|
||||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('1.1', $message->getScheduleStatus());
|
||||
}
|
||||
|
||||
public function testExternalAttendeesDisabledForExternalUser(): void {
|
||||
$message = new Message();
|
||||
$message->method = 'REQUEST';
|
||||
$newVCalendar = new VCalendar();
|
||||
$newVevent = new VEvent($newVCalendar, 'one', array_merge([
|
||||
'UID' => 'uid-1234',
|
||||
'SEQUENCE' => 1,
|
||||
'SUMMARY' => 'Fellowship meeting',
|
||||
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
|
||||
], []));
|
||||
$newVevent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
|
||||
$newVevent->add('ATTENDEE', 'mailto:external@example.com', ['RSVP' => 'TRUE', 'CN' => 'External User']);
|
||||
$message->message = $newVCalendar;
|
||||
$message->sender = 'mailto:gandalf@wiz.ard';
|
||||
$message->senderName = 'Mr. Wizard';
|
||||
$message->recipient = 'mailto:external@example.com';
|
||||
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::once())
|
||||
->method('getValueBool')
|
||||
->with('dav', 'caldav_external_attendees_disabled', false)
|
||||
->willReturn(true);
|
||||
$this->service->expects(self::once())
|
||||
->method('isSystemUser')
|
||||
->with('external@example.com')
|
||||
->willReturn(false);
|
||||
$this->eventComparisonService->expects(self::never())
|
||||
->method('findModified');
|
||||
$this->service->expects(self::never())
|
||||
->method('getCurrentAttendee');
|
||||
$this->mailer->expects(self::never())
|
||||
->method('send');
|
||||
|
||||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('5.0', $message->getScheduleStatus());
|
||||
}
|
||||
|
||||
public function testExternalAttendeesDisabledForSystemUser(): void {
|
||||
$message = new Message();
|
||||
$message->method = 'REQUEST';
|
||||
$newVCalendar = new VCalendar();
|
||||
$newVevent = new VEvent($newVCalendar, 'one', array_merge([
|
||||
'UID' => 'uid-1234',
|
||||
'SEQUENCE' => 1,
|
||||
'SUMMARY' => 'Fellowship meeting',
|
||||
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
|
||||
], []));
|
||||
$newVevent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
|
||||
$newVevent->add('ATTENDEE', 'mailto:frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']);
|
||||
$message->message = $newVCalendar;
|
||||
$message->sender = 'mailto:gandalf@wiz.ard';
|
||||
$message->senderName = 'Mr. Wizard';
|
||||
$message->recipient = 'mailto:frodo@hobb.it';
|
||||
|
||||
$oldVCalendar = new VCalendar();
|
||||
$oldVEvent = new VEvent($oldVCalendar, 'one', [
|
||||
'UID' => 'uid-1234',
|
||||
'SEQUENCE' => 0,
|
||||
'SUMMARY' => 'Fellowship meeting',
|
||||
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
|
||||
]);
|
||||
$oldVEvent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
|
||||
$oldVEvent->add('ATTENDEE', 'mailto:frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']);
|
||||
$oldVCalendar->add($oldVEvent);
|
||||
|
||||
$data = ['invitee_name' => 'Mr. Wizard',
|
||||
'meeting_title' => 'Fellowship meeting',
|
||||
'attendee_name' => 'frodo@hobb.it'
|
||||
];
|
||||
$attendees = $newVevent->select('ATTENDEE');
|
||||
$atnd = '';
|
||||
foreach ($attendees as $attendee) {
|
||||
if (strcasecmp($attendee->getValue(), $message->recipient) === 0) {
|
||||
$atnd = $attendee;
|
||||
}
|
||||
}
|
||||
$this->plugin->setVCalendar($oldVCalendar);
|
||||
$this->service->expects(self::once())
|
||||
->method('getLastOccurrence')
|
||||
->willReturn(1496912700);
|
||||
$this->config->expects(self::exactly(2))
|
||||
->method('getValueBool')
|
||||
->willReturnMap([
|
||||
['dav', 'caldav_external_attendees_disabled', false, true],
|
||||
['core', 'mail_providers_enabled', true, false],
|
||||
]);
|
||||
$this->service->expects(self::once())
|
||||
->method('isSystemUser')
|
||||
->with('frodo@hobb.it')
|
||||
->willReturn(true);
|
||||
$this->eventComparisonService->expects(self::once())
|
||||
->method('findModified')
|
||||
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
|
||||
$this->service->expects(self::once())
|
||||
->method('getCurrentAttendee')
|
||||
->with($message)
|
||||
->willReturn($atnd);
|
||||
$this->service->expects(self::once())
|
||||
->method('isRoomOrResource')
|
||||
->with($atnd)
|
||||
->willReturn(false);
|
||||
$this->service->expects(self::once())
|
||||
->method('isCircle')
|
||||
->with($atnd)
|
||||
->willReturn(false);
|
||||
$this->service->expects(self::once())
|
||||
->method('buildBodyData')
|
||||
->with($newVevent, $oldVEvent)
|
||||
->willReturn($data);
|
||||
$this->user->expects(self::any())
|
||||
->method('getUID')
|
||||
->willReturn('user1');
|
||||
$this->user->expects(self::any())
|
||||
->method('getDisplayName')
|
||||
->willReturn('Mr. Wizard');
|
||||
$this->userSession->expects(self::any())
|
||||
->method('getUser')
|
||||
->willReturn($this->user);
|
||||
$this->service->expects(self::once())
|
||||
->method('getFrom');
|
||||
$this->service->expects(self::once())
|
||||
->method('addSubjectAndHeading')
|
||||
->with($this->emailTemplate, 'request', 'Mr. Wizard', 'Fellowship meeting', true);
|
||||
$this->service->expects(self::once())
|
||||
->method('addBulletList')
|
||||
->with($this->emailTemplate, $newVevent, $data);
|
||||
$this->service->expects(self::once())
|
||||
->method('getAttendeeRsvpOrReqForParticipant')
|
||||
->willReturn(true);
|
||||
$this->config->expects(self::once())
|
||||
->method('getValueString')
|
||||
->with('dav', 'invitation_link_recipients', 'yes')
|
||||
->willReturn('yes');
|
||||
$this->service->expects(self::once())
|
||||
->method('createInvitationToken')
|
||||
->with($message, $newVevent, 1496912700)
|
||||
->willReturn('token');
|
||||
$this->service->expects(self::once())
|
||||
->method('addResponseButtons')
|
||||
->with($this->emailTemplate, 'token');
|
||||
$this->service->expects(self::once())
|
||||
->method('addMoreOptionsButton')
|
||||
->with($this->emailTemplate, 'token');
|
||||
$this->mailer->expects(self::once())
|
||||
->method('send')
|
||||
->willReturn([]);
|
||||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('1.1', $message->getScheduleStatus());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,6 +161,31 @@ class IMipServiceTest extends TestCase {
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
public function testIsSystemUserWhenUserExists(): void {
|
||||
$email = 'user@example.com';
|
||||
$user = $this->createMock(\OCP\IUser::class);
|
||||
|
||||
$this->userManager->expects(self::once())
|
||||
->method('getByEmail')
|
||||
->with($email)
|
||||
->willReturn([$user]);
|
||||
|
||||
$result = $this->service->isSystemUser($email);
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testIsSystemUserWhenUserDoesNotExist(): void {
|
||||
$email = 'external@example.com';
|
||||
|
||||
$this->userManager->expects(self::once())
|
||||
->method('getByEmail')
|
||||
->with($email)
|
||||
->willReturn([]);
|
||||
|
||||
$result = $this->service->isSystemUser($email);
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
public function testBuildBodyDataCreated(): void {
|
||||
|
||||
// construct l10n return(s)
|
||||
|
||||
@@ -19,7 +19,7 @@ class QuotaPluginTest extends TestCase {
|
||||
private QuotaPlugin $plugin;
|
||||
|
||||
private function init(int $quota, string $checkedPath = ''): void {
|
||||
$view = $this->buildFileViewMock((string)$quota, $checkedPath);
|
||||
$view = $this->buildFileViewMock($quota, $checkedPath);
|
||||
$this->server = new \Sabre\DAV\Server();
|
||||
$this->plugin = new QuotaPlugin($view);
|
||||
$this->plugin->initialize($this->server);
|
||||
@@ -136,7 +136,14 @@ class QuotaPluginTest extends TestCase {
|
||||
];
|
||||
}
|
||||
|
||||
private function buildFileViewMock(string $quota, string $checkedPath): View {
|
||||
/**
|
||||
* Build a mock for the View class with a controlled free_space() response.
|
||||
*
|
||||
* @param int|float|false $quota The quota value to return from free_space().
|
||||
* @param string $checkedPath The path expected as a parameter to free_space().
|
||||
* @return View&\PHPUnit\Framework\MockObject\MockObject
|
||||
*/
|
||||
private function buildFileViewMock(int|float|false $quota, string $checkedPath): View {
|
||||
// mock filesystem
|
||||
$view = $this->getMockBuilder(View::class)
|
||||
->onlyMethods(['free_space'])
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2014-2015 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* @namespace OC
|
||||
*/
|
||||
OC.Encryption = _.extend(OC.Encryption || {}, {
|
||||
displayEncryptionWarning: function() {
|
||||
if (!OC.currentUser || !OC.Notification.isHidden()) {
|
||||
return
|
||||
}
|
||||
|
||||
$.get(
|
||||
OC.generateUrl('/apps/encryption/ajax/getStatus'),
|
||||
function(result) {
|
||||
if (result.status === 'interactionNeeded') {
|
||||
OC.Notification.show(result.data.message)
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
})
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
// wait for other apps/extensions to register their event handlers and file actions
|
||||
// in the "ready" clause
|
||||
_.defer(function() {
|
||||
OC.Encryption.displayEncryptionWarning()
|
||||
})
|
||||
})
|
||||
@@ -1,80 +0,0 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
$('input:button[name="enableRecoveryKey"]').click(function() {
|
||||
const recoveryStatus = $(this).attr('status')
|
||||
const newRecoveryStatus = (1 + parseInt(recoveryStatus)) % 2
|
||||
const buttonValue = $(this).attr('value')
|
||||
|
||||
const recoveryPassword = $('#encryptionRecoveryPassword').val()
|
||||
const confirmPassword = $('#repeatEncryptionRecoveryPassword').val()
|
||||
OC.msg.startSaving('#encryptionSetRecoveryKey .msg')
|
||||
$.post(
|
||||
OC.generateUrl('/apps/encryption/ajax/adminRecovery'),
|
||||
{
|
||||
adminEnableRecovery: newRecoveryStatus,
|
||||
recoveryPassword,
|
||||
confirmPassword,
|
||||
},
|
||||
).done(function(data) {
|
||||
OC.msg.finishedSuccess('#encryptionSetRecoveryKey .msg', data.data.message)
|
||||
|
||||
if (newRecoveryStatus === 0) {
|
||||
$('p[name="changeRecoveryPasswordBlock"]').addClass('hidden')
|
||||
$('input:button[name="enableRecoveryKey"]').attr('value', 'Enable recovery key')
|
||||
$('input:button[name="enableRecoveryKey"]').attr('status', '0')
|
||||
} else {
|
||||
$('input:password[name="changeRecoveryPassword"]').val('')
|
||||
$('p[name="changeRecoveryPasswordBlock"]').removeClass('hidden')
|
||||
$('input:button[name="enableRecoveryKey"]').attr('value', 'Disable recovery key')
|
||||
$('input:button[name="enableRecoveryKey"]').attr('status', '1')
|
||||
}
|
||||
})
|
||||
.fail(function(jqXHR) {
|
||||
$('input:button[name="enableRecoveryKey"]').attr('value', buttonValue)
|
||||
$('input:button[name="enableRecoveryKey"]').attr('status', recoveryStatus)
|
||||
OC.msg.finishedError('#encryptionSetRecoveryKey .msg', JSON.parse(jqXHR.responseText).data.message)
|
||||
})
|
||||
})
|
||||
|
||||
$('#repeatEncryptionRecoveryPassword').keyup(function(event) {
|
||||
if (event.keyCode == 13) {
|
||||
$('#enableRecoveryKey').click()
|
||||
}
|
||||
})
|
||||
|
||||
// change recovery password
|
||||
|
||||
$('button:button[name="submitChangeRecoveryKey"]').click(function() {
|
||||
const oldRecoveryPassword = $('#oldEncryptionRecoveryPassword').val()
|
||||
const newRecoveryPassword = $('#newEncryptionRecoveryPassword').val()
|
||||
const confirmNewPassword = $('#repeatedNewEncryptionRecoveryPassword').val()
|
||||
OC.msg.startSaving('#encryptionChangeRecoveryKey .msg')
|
||||
$.post(
|
||||
OC.generateUrl('/apps/encryption/ajax/changeRecoveryPassword'),
|
||||
{
|
||||
oldPassword: oldRecoveryPassword,
|
||||
newPassword: newRecoveryPassword,
|
||||
confirmPassword: confirmNewPassword,
|
||||
},
|
||||
).done(function(data) {
|
||||
OC.msg.finishedSuccess('#encryptionChangeRecoveryKey .msg', data.data.message)
|
||||
})
|
||||
.fail(function(jqXHR) {
|
||||
OC.msg.finishedError('#encryptionChangeRecoveryKey .msg', JSON.parse(jqXHR.responseText).data.message)
|
||||
})
|
||||
})
|
||||
|
||||
$('#encryptHomeStorage').change(function() {
|
||||
$.post(
|
||||
OC.generateUrl('/apps/encryption/ajax/setEncryptHomeStorage'),
|
||||
{
|
||||
encryptHomeStorage: this.checked,
|
||||
},
|
||||
)
|
||||
})
|
||||
})
|
||||
@@ -1,64 +0,0 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
OC.Encryption = _.extend(OC.Encryption || {}, {
|
||||
updatePrivateKeyPassword: function() {
|
||||
const oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val()
|
||||
const newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val()
|
||||
OC.msg.startSaving('#ocDefaultEncryptionModule .msg')
|
||||
$.post(
|
||||
OC.generateUrl('/apps/encryption/ajax/updatePrivateKeyPassword'),
|
||||
{
|
||||
oldPassword: oldPrivateKeyPassword,
|
||||
newPassword: newPrivateKeyPassword,
|
||||
},
|
||||
).done(function(data) {
|
||||
OC.msg.finishedSuccess('#ocDefaultEncryptionModule .msg', data.message)
|
||||
}).fail(function(jqXHR) {
|
||||
OC.msg.finishedError('#ocDefaultEncryptionModule .msg', JSON.parse(jqXHR.responseText).message)
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
// Trigger ajax on recoveryAdmin status change
|
||||
$('input:radio[name="userEnableRecovery"]').change(function() {
|
||||
const recoveryStatus = $(this).val()
|
||||
OC.msg.startAction('#userEnableRecovery .msg', 'Updating recovery keys. This can take some time...')
|
||||
$.post(
|
||||
OC.generateUrl('/apps/encryption/ajax/userSetRecovery'),
|
||||
{
|
||||
userEnableRecovery: recoveryStatus,
|
||||
},
|
||||
).done(function(data) {
|
||||
OC.msg.finishedSuccess('#userEnableRecovery .msg', data.data.message)
|
||||
})
|
||||
.fail(function(jqXHR) {
|
||||
OC.msg.finishedError('#userEnableRecovery .msg', JSON.parse(jqXHR.responseText).data.message)
|
||||
})
|
||||
// Ensure page is not reloaded on form submit
|
||||
return false
|
||||
})
|
||||
|
||||
// update private key password
|
||||
|
||||
$('input:password[name="changePrivateKeyPassword"]').keyup(function(event) {
|
||||
const oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val()
|
||||
const newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val()
|
||||
if (newPrivateKeyPassword !== '' && oldPrivateKeyPassword !== '') {
|
||||
$('button:button[name="submitChangePrivateKeyPassword"]').removeAttr('disabled')
|
||||
if (event.which === 13) {
|
||||
OC.Encryption.updatePrivateKeyPassword()
|
||||
}
|
||||
} else {
|
||||
$('button:button[name="submitChangePrivateKeyPassword"]').attr('disabled', 'true')
|
||||
}
|
||||
})
|
||||
|
||||
$('button:button[name="submitChangePrivateKeyPassword"]').click(function() {
|
||||
OC.Encryption.updatePrivateKeyPassword()
|
||||
})
|
||||
})
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "لم يُمكن تفعيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
|
||||
"Recovery key successfully disabled" : "تمّ بنجاح تعطيل مفتاح الاستعادة ",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "لم يُمكن تعطيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
|
||||
"Missing parameters" : "المعاملات ناقصة",
|
||||
"Please provide the old recovery password" : "يرجى إعطاء كلمة مرور الاستعادة القديمة",
|
||||
"Please provide a new recovery password" : "يرجى إعطاء كلمة مرور جديدة للاستعادة",
|
||||
"Please repeat the new recovery password" : "يرجى تكرار كلمة مرور الاستعادة الجديدة",
|
||||
@@ -34,32 +33,34 @@ OC.L10N.register(
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "يرجى تسجيل الدخول إلى واجهة الويب، و الانتقال إلى قسم \"الأمان\" Security في إعداداتك الشخصية وتحديث كلمة مرور التشفير الخاصة بك عن طريق إدخال كلمة المرور هذه في حقل \"كلمة مرور تسجيل الدخول القديمة\" Old login password،و كلمة مرور تسجيل الدخول الحالية.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
|
||||
"Default encryption module" : "وحدة التشفير الافتراضية",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
|
||||
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
|
||||
"Enable recovery key" : "تمكين مفتاح الاستعادة",
|
||||
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
|
||||
"Disable recovery key" : "تعطيل مفتاح الاستعادة",
|
||||
"Enable recovery key" : "تمكين مفتاح الاستعادة",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "مفتاح الاسترداد هو مفتاح تشفير إضافي يستخدم لتشفير الملفات. يتم استخدامه لاستعادة الملفات من الحساب في حالة نسيان كلمة المرور.",
|
||||
"Recovery key password" : "استعادة كلمة مرور المفتاح",
|
||||
"Repeat recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة",
|
||||
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
|
||||
"Old recovery key password" : "كلمة مرور مفتاح الاستعادة القديمة",
|
||||
"New recovery key password" : "كلمة مرور جديدة لمفتاح الاستعادة",
|
||||
"Repeat new recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة الجديدة",
|
||||
"Change Password" : "تعديل كلمة المرور",
|
||||
"Basic encryption module" : "وحدة التشفير الأساسية",
|
||||
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
|
||||
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "إذا كنت لا تتذكر كلمة مرورك القديمة، فيمكنك أن تطلب من المشرف استرداد ملفاتك.",
|
||||
"Old log-in password" : "كلمة المرور القديمة الخاصة بالدخول",
|
||||
"Current log-in password" : "كلمة المرور الحالية الخاصة بالدخول",
|
||||
"Update" : "تحديث",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
|
||||
"Default encryption module" : "وحدة التشفير الافتراضية",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
|
||||
"Basic encryption module" : "وحدة التشفير الأساسية",
|
||||
"Missing parameters" : "المعاملات ناقصة",
|
||||
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
|
||||
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
|
||||
"Change Password" : "تعديل كلمة المرور",
|
||||
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
|
||||
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
|
||||
"Update Private Key Password" : "تحديث كلمة المرور لـ المفتاح الخاص",
|
||||
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
|
||||
"Enabled" : "مفعلة",
|
||||
"Disabled" : "معطلة",
|
||||
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
|
||||
"Disabled" : "معطلة"
|
||||
},
|
||||
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "لم يُمكن تفعيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
|
||||
"Recovery key successfully disabled" : "تمّ بنجاح تعطيل مفتاح الاستعادة ",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "لم يُمكن تعطيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
|
||||
"Missing parameters" : "المعاملات ناقصة",
|
||||
"Please provide the old recovery password" : "يرجى إعطاء كلمة مرور الاستعادة القديمة",
|
||||
"Please provide a new recovery password" : "يرجى إعطاء كلمة مرور جديدة للاستعادة",
|
||||
"Please repeat the new recovery password" : "يرجى تكرار كلمة مرور الاستعادة الجديدة",
|
||||
@@ -32,32 +31,34 @@
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "يرجى تسجيل الدخول إلى واجهة الويب، و الانتقال إلى قسم \"الأمان\" Security في إعداداتك الشخصية وتحديث كلمة مرور التشفير الخاصة بك عن طريق إدخال كلمة المرور هذه في حقل \"كلمة مرور تسجيل الدخول القديمة\" Old login password،و كلمة مرور تسجيل الدخول الحالية.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
|
||||
"Default encryption module" : "وحدة التشفير الافتراضية",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
|
||||
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
|
||||
"Enable recovery key" : "تمكين مفتاح الاستعادة",
|
||||
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
|
||||
"Disable recovery key" : "تعطيل مفتاح الاستعادة",
|
||||
"Enable recovery key" : "تمكين مفتاح الاستعادة",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "مفتاح الاسترداد هو مفتاح تشفير إضافي يستخدم لتشفير الملفات. يتم استخدامه لاستعادة الملفات من الحساب في حالة نسيان كلمة المرور.",
|
||||
"Recovery key password" : "استعادة كلمة مرور المفتاح",
|
||||
"Repeat recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة",
|
||||
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
|
||||
"Old recovery key password" : "كلمة مرور مفتاح الاستعادة القديمة",
|
||||
"New recovery key password" : "كلمة مرور جديدة لمفتاح الاستعادة",
|
||||
"Repeat new recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة الجديدة",
|
||||
"Change Password" : "تعديل كلمة المرور",
|
||||
"Basic encryption module" : "وحدة التشفير الأساسية",
|
||||
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
|
||||
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "إذا كنت لا تتذكر كلمة مرورك القديمة، فيمكنك أن تطلب من المشرف استرداد ملفاتك.",
|
||||
"Old log-in password" : "كلمة المرور القديمة الخاصة بالدخول",
|
||||
"Current log-in password" : "كلمة المرور الحالية الخاصة بالدخول",
|
||||
"Update" : "تحديث",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
|
||||
"Default encryption module" : "وحدة التشفير الافتراضية",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
|
||||
"Basic encryption module" : "وحدة التشفير الأساسية",
|
||||
"Missing parameters" : "المعاملات ناقصة",
|
||||
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
|
||||
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
|
||||
"Change Password" : "تعديل كلمة المرور",
|
||||
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
|
||||
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
|
||||
"Update Private Key Password" : "تحديث كلمة المرور لـ المفتاح الخاص",
|
||||
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
|
||||
"Enabled" : "مفعلة",
|
||||
"Disabled" : "معطلة",
|
||||
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
|
||||
"Disabled" : "معطلة"
|
||||
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
|
||||
}
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Неуспешно включване на опцията ключ за възстановяване. Моля, провери паролата за ключа за възстановяване.",
|
||||
"Recovery key successfully disabled" : "Успешно изключване на ключа за възстановяване.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Неуспешно изключване на ключа за възстановяване. Моля, провери паролата за ключа за възстановяване!",
|
||||
"Missing parameters" : "Липсващи параметри",
|
||||
"Please provide the old recovery password" : "Моля, въведете старата парола за възстановяване",
|
||||
"Please provide a new recovery password" : "Моля, задай нова парола за възстановяване",
|
||||
"Please repeat the new recovery password" : "Моля, въведете новата парола за възстановяване отново",
|
||||
@@ -33,30 +32,32 @@ OC.L10N.register(
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Администрацията е активирала криптирането от страна на сървъра. Файловете ви са били криптирани с помощта на паролата „%s“",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
|
||||
"Default encryption module" : "Модул за криптиране по подразбиране:",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
|
||||
"Encrypt the home storage" : "Шифровайте домашното хранилище",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
|
||||
"Enable recovery key" : "Активиране на ключа за въстановяване:",
|
||||
"Encrypt the home storage" : "Шифровайте домашното хранилище",
|
||||
"Disable recovery key" : "Изключване на въстановяването на ключа:",
|
||||
"Enable recovery key" : "Активиране на ключа за въстановяване:",
|
||||
"Recovery key password" : "Парола за възстановяане на ключа",
|
||||
"Repeat recovery key password" : "Повторение на паролата за възстановяане на ключа",
|
||||
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
|
||||
"Old recovery key password" : "Стара парола за възстановяане на ключа",
|
||||
"New recovery key password" : "Нова парола за възстановяане на ключа",
|
||||
"Repeat new recovery key password" : "Повторение на новата парола за възстановяане на ключа",
|
||||
"Change Password" : "Промени Паролата",
|
||||
"Basic encryption module" : "Основен модул за криптиране",
|
||||
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
|
||||
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
|
||||
"Old log-in password" : "Стара парола за вписване",
|
||||
"Current log-in password" : "Текуща парола за вписване",
|
||||
"Update" : "Обновяване",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
|
||||
"Default encryption module" : "Модул за криптиране по подразбиране:",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
|
||||
"Basic encryption module" : "Основен модул за криптиране",
|
||||
"Missing parameters" : "Липсващи параметри",
|
||||
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
|
||||
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
|
||||
"Change Password" : "Промени Паролата",
|
||||
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
|
||||
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
|
||||
"Update Private Key Password" : "Промени Тайната Парола за Ключа",
|
||||
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
|
||||
"Enabled" : "Включено",
|
||||
"Disabled" : "Изключено",
|
||||
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
|
||||
"Disabled" : "Изключено"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Неуспешно включване на опцията ключ за възстановяване. Моля, провери паролата за ключа за възстановяване.",
|
||||
"Recovery key successfully disabled" : "Успешно изключване на ключа за възстановяване.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Неуспешно изключване на ключа за възстановяване. Моля, провери паролата за ключа за възстановяване!",
|
||||
"Missing parameters" : "Липсващи параметри",
|
||||
"Please provide the old recovery password" : "Моля, въведете старата парола за възстановяване",
|
||||
"Please provide a new recovery password" : "Моля, задай нова парола за възстановяване",
|
||||
"Please repeat the new recovery password" : "Моля, въведете новата парола за възстановяване отново",
|
||||
@@ -31,30 +30,32 @@
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Администрацията е активирала криптирането от страна на сървъра. Файловете ви са били криптирани с помощта на паролата „%s“",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
|
||||
"Default encryption module" : "Модул за криптиране по подразбиране:",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
|
||||
"Encrypt the home storage" : "Шифровайте домашното хранилище",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
|
||||
"Enable recovery key" : "Активиране на ключа за въстановяване:",
|
||||
"Encrypt the home storage" : "Шифровайте домашното хранилище",
|
||||
"Disable recovery key" : "Изключване на въстановяването на ключа:",
|
||||
"Enable recovery key" : "Активиране на ключа за въстановяване:",
|
||||
"Recovery key password" : "Парола за възстановяане на ключа",
|
||||
"Repeat recovery key password" : "Повторение на паролата за възстановяане на ключа",
|
||||
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
|
||||
"Old recovery key password" : "Стара парола за възстановяане на ключа",
|
||||
"New recovery key password" : "Нова парола за възстановяане на ключа",
|
||||
"Repeat new recovery key password" : "Повторение на новата парола за възстановяане на ключа",
|
||||
"Change Password" : "Промени Паролата",
|
||||
"Basic encryption module" : "Основен модул за криптиране",
|
||||
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
|
||||
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
|
||||
"Old log-in password" : "Стара парола за вписване",
|
||||
"Current log-in password" : "Текуща парола за вписване",
|
||||
"Update" : "Обновяване",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
|
||||
"Default encryption module" : "Модул за криптиране по подразбиране:",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
|
||||
"Basic encryption module" : "Основен модул за криптиране",
|
||||
"Missing parameters" : "Липсващи параметри",
|
||||
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
|
||||
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
|
||||
"Change Password" : "Промени Паролата",
|
||||
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
|
||||
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
|
||||
"Update Private Key Password" : "Промени Тайната Парола за Ключа",
|
||||
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
|
||||
"Enabled" : "Включено",
|
||||
"Disabled" : "Изключено",
|
||||
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
|
||||
"Disabled" : "Изключено"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+14
-13
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut habilitar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!",
|
||||
"Recovery key successfully disabled" : "La clau de recuperació s'ha inhabilitat",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut inhabilitar la clau de recuperació. Comproveu la contrasenya de la clau de recuperació!",
|
||||
"Missing parameters" : "Falten paràmetres",
|
||||
"Please provide the old recovery password" : "Si us plau, proporcioneu la contrasenya de recuperació antiga",
|
||||
"Please provide a new recovery password" : "Si us plau, proporcioneu una nova contrasenya de recuperació",
|
||||
"Please repeat the new recovery password" : "Si us plau, repetiu la nova contrasenya de recuperació",
|
||||
@@ -30,29 +29,31 @@ OC.L10N.register(
|
||||
"one-time password for server-side-encryption" : "contrasenya única per al xifratge en el servidor",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
|
||||
"Default encryption module" : "Mòdul de xifratge per defecte",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
|
||||
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a l’emmagatzematge principal; en cas contrari, només es xifraran els fitxers d’emmagatzematge extern",
|
||||
"Enable recovery key" : "Habilita la clau de recuperació",
|
||||
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
|
||||
"Disable recovery key" : "Inhabilita la clau de recuperació",
|
||||
"Enable recovery key" : "Habilita la clau de recuperació",
|
||||
"Recovery key password" : "Clau de recuperació de la contrasenya",
|
||||
"Repeat recovery key password" : "Repetiu la contrasenya de la clau de recuperació",
|
||||
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
|
||||
"Old recovery key password" : "Contrasenya antiga de clau de recuperació",
|
||||
"New recovery key password" : "Nova contrasenya de clau de recuperació",
|
||||
"Repeat new recovery key password" : "Repetiu la contrasenya de la clau de recuperació nova",
|
||||
"Change Password" : "Canvia la contrasenya",
|
||||
"Basic encryption module" : "Mòdul de xifratge bàsic",
|
||||
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
|
||||
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
|
||||
"Old log-in password" : "Contrasenya antiga d’inici de sessió",
|
||||
"Current log-in password" : "Contrasenya actual d’inici de sessió",
|
||||
"Update" : "Actualitza",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
|
||||
"Default encryption module" : "Mòdul de xifratge per defecte",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
|
||||
"Basic encryption module" : "Mòdul de xifratge bàsic",
|
||||
"Missing parameters" : "Falten paràmetres",
|
||||
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
|
||||
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
|
||||
"Change Password" : "Canvia la contrasenya",
|
||||
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
|
||||
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
|
||||
"Update Private Key Password" : "Actualitza la contrasenya de clau privada",
|
||||
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
|
||||
"Enabled" : "Habilitat",
|
||||
"Disabled" : "Inhabilitat",
|
||||
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
|
||||
"Disabled" : "Inhabilitat"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut habilitar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!",
|
||||
"Recovery key successfully disabled" : "La clau de recuperació s'ha inhabilitat",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut inhabilitar la clau de recuperació. Comproveu la contrasenya de la clau de recuperació!",
|
||||
"Missing parameters" : "Falten paràmetres",
|
||||
"Please provide the old recovery password" : "Si us plau, proporcioneu la contrasenya de recuperació antiga",
|
||||
"Please provide a new recovery password" : "Si us plau, proporcioneu una nova contrasenya de recuperació",
|
||||
"Please repeat the new recovery password" : "Si us plau, repetiu la nova contrasenya de recuperació",
|
||||
@@ -28,29 +27,31 @@
|
||||
"one-time password for server-side-encryption" : "contrasenya única per al xifratge en el servidor",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
|
||||
"Default encryption module" : "Mòdul de xifratge per defecte",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
|
||||
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a l’emmagatzematge principal; en cas contrari, només es xifraran els fitxers d’emmagatzematge extern",
|
||||
"Enable recovery key" : "Habilita la clau de recuperació",
|
||||
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
|
||||
"Disable recovery key" : "Inhabilita la clau de recuperació",
|
||||
"Enable recovery key" : "Habilita la clau de recuperació",
|
||||
"Recovery key password" : "Clau de recuperació de la contrasenya",
|
||||
"Repeat recovery key password" : "Repetiu la contrasenya de la clau de recuperació",
|
||||
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
|
||||
"Old recovery key password" : "Contrasenya antiga de clau de recuperació",
|
||||
"New recovery key password" : "Nova contrasenya de clau de recuperació",
|
||||
"Repeat new recovery key password" : "Repetiu la contrasenya de la clau de recuperació nova",
|
||||
"Change Password" : "Canvia la contrasenya",
|
||||
"Basic encryption module" : "Mòdul de xifratge bàsic",
|
||||
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
|
||||
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
|
||||
"Old log-in password" : "Contrasenya antiga d’inici de sessió",
|
||||
"Current log-in password" : "Contrasenya actual d’inici de sessió",
|
||||
"Update" : "Actualitza",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
|
||||
"Default encryption module" : "Mòdul de xifratge per defecte",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
|
||||
"Basic encryption module" : "Mòdul de xifratge bàsic",
|
||||
"Missing parameters" : "Falten paràmetres",
|
||||
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
|
||||
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
|
||||
"Change Password" : "Canvia la contrasenya",
|
||||
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
|
||||
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
|
||||
"Update Private Key Password" : "Actualitza la contrasenya de clau privada",
|
||||
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
|
||||
"Enabled" : "Habilitat",
|
||||
"Disabled" : "Inhabilitat",
|
||||
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
|
||||
"Disabled" : "Inhabilitat"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Nepodařilo se povolit záchranný klíč. Zkontrolujte své heslo k záchrannému klíči!",
|
||||
"Recovery key successfully disabled" : "Záchranný klíč úspěšně zakázán",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Nedaří se zakázat záchranný klíč. Zkontrolujte zadání hesla k němu.",
|
||||
"Missing parameters" : "Chybějící parametry",
|
||||
"Please provide the old recovery password" : "Zadejte původní heslo pro obnovu",
|
||||
"Please provide a new recovery password" : "Zadejte nové heslo pro obnovu",
|
||||
"Please repeat the new recovery password" : "Zopakujte zadání nového hesla pro obnovu",
|
||||
@@ -36,32 +35,34 @@ OC.L10N.register(
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst – pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
|
||||
"Default Encryption Module" : "Výchozí šifrovací modul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Výchozí modul pro šifrování na straně Nextcloud serveru (SSE)",
|
||||
"Default encryption module" : "Výchozí šifrovací modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
|
||||
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
|
||||
"Enable recovery key" : "Povolit záchranný klíč",
|
||||
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
|
||||
"Disable recovery key" : "Vypnout záchranný klíč",
|
||||
"Enable recovery key" : "Povolit záchranný klíč",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Záchranný klíč je dodatečný šifrovací klíč sloužící pro šifrování souborů. Slouží k obnovení souborů z účtu, pokud dojde k zapomenutí hesla.",
|
||||
"Recovery key password" : "Heslo ke klíči pro obnovu",
|
||||
"Repeat recovery key password" : "Zopakovat heslo záchranného klíče",
|
||||
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
|
||||
"Old recovery key password" : "Staré heslo záchranného klíče",
|
||||
"New recovery key password" : "Nové heslo k záchrannému klíči",
|
||||
"Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče",
|
||||
"Change Password" : "Změnit heslo",
|
||||
"Basic encryption module" : "Základní šifrovací modul",
|
||||
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
|
||||
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.",
|
||||
"Old log-in password" : "Původní přihlašovací heslo",
|
||||
"Current log-in password" : "Stávající přihlašovací heslo",
|
||||
"Update" : "Aktualizovat",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
|
||||
"Default encryption module" : "Výchozí šifrovací modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
|
||||
"Basic encryption module" : "Základní šifrovací modul",
|
||||
"Missing parameters" : "Chybějící parametry",
|
||||
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
|
||||
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
|
||||
"Change Password" : "Změnit heslo",
|
||||
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
|
||||
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
|
||||
"Update Private Key Password" : "Změnit heslo k soukromé části klíče",
|
||||
"Enable password recovery:" : "Povolit obnovu hesla:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
|
||||
"Enabled" : "Povoleno",
|
||||
"Disabled" : "Zakázáno",
|
||||
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
|
||||
"Disabled" : "Zakázáno"
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Nepodařilo se povolit záchranný klíč. Zkontrolujte své heslo k záchrannému klíči!",
|
||||
"Recovery key successfully disabled" : "Záchranný klíč úspěšně zakázán",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Nedaří se zakázat záchranný klíč. Zkontrolujte zadání hesla k němu.",
|
||||
"Missing parameters" : "Chybějící parametry",
|
||||
"Please provide the old recovery password" : "Zadejte původní heslo pro obnovu",
|
||||
"Please provide a new recovery password" : "Zadejte nové heslo pro obnovu",
|
||||
"Please repeat the new recovery password" : "Zopakujte zadání nového hesla pro obnovu",
|
||||
@@ -34,32 +33,34 @@
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst – pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
|
||||
"Default Encryption Module" : "Výchozí šifrovací modul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Výchozí modul pro šifrování na straně Nextcloud serveru (SSE)",
|
||||
"Default encryption module" : "Výchozí šifrovací modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
|
||||
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
|
||||
"Enable recovery key" : "Povolit záchranný klíč",
|
||||
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
|
||||
"Disable recovery key" : "Vypnout záchranný klíč",
|
||||
"Enable recovery key" : "Povolit záchranný klíč",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Záchranný klíč je dodatečný šifrovací klíč sloužící pro šifrování souborů. Slouží k obnovení souborů z účtu, pokud dojde k zapomenutí hesla.",
|
||||
"Recovery key password" : "Heslo ke klíči pro obnovu",
|
||||
"Repeat recovery key password" : "Zopakovat heslo záchranného klíče",
|
||||
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
|
||||
"Old recovery key password" : "Staré heslo záchranného klíče",
|
||||
"New recovery key password" : "Nové heslo k záchrannému klíči",
|
||||
"Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče",
|
||||
"Change Password" : "Změnit heslo",
|
||||
"Basic encryption module" : "Základní šifrovací modul",
|
||||
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
|
||||
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.",
|
||||
"Old log-in password" : "Původní přihlašovací heslo",
|
||||
"Current log-in password" : "Stávající přihlašovací heslo",
|
||||
"Update" : "Aktualizovat",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
|
||||
"Default encryption module" : "Výchozí šifrovací modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
|
||||
"Basic encryption module" : "Základní šifrovací modul",
|
||||
"Missing parameters" : "Chybějící parametry",
|
||||
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
|
||||
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
|
||||
"Change Password" : "Změnit heslo",
|
||||
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
|
||||
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
|
||||
"Update Private Key Password" : "Změnit heslo k soukromé části klíče",
|
||||
"Enable password recovery:" : "Povolit obnovu hesla:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
|
||||
"Enabled" : "Povoleno",
|
||||
"Disabled" : "Zakázáno",
|
||||
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
|
||||
"Disabled" : "Zakázáno"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
}
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Kunne ikke aktivere gendannelsesnøgle. Kontroller venligst dit gendannelsesnøgle kodeord!",
|
||||
"Recovery key successfully disabled" : "Gendannelsesnøgle deaktiveret succesfuldt",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Kunne ikke deaktivere gendannelsesnøgle. Kontroller din gendannelsesnøgle kodeord!",
|
||||
"Missing parameters" : "Manglende parametre",
|
||||
"Please provide the old recovery password" : "Angiv venligst det gamle kodeord for gendannelsesnøglen",
|
||||
"Please provide a new recovery password" : "Angiv venligst et nyt kodeord til gendannelse",
|
||||
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
|
||||
@@ -35,32 +34,34 @@ OC.L10N.register(
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
|
||||
"Default Encryption Module" : "Standard krypteringsmodul",
|
||||
"Default encryption module" : "Standard krypterings modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
|
||||
"Encrypt the home storage" : "Krypter hjemmelageret",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
|
||||
"Enable recovery key" : "Aktiver gendannelsesnøgle",
|
||||
"Encrypt the home storage" : "Krypter hjemmelageret",
|
||||
"Disable recovery key" : "Deaktiver gendannelsesnøgle",
|
||||
"Enable recovery key" : "Aktiver gendannelsesnøgle",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Det bruges til at gendanne filer fra en konto, hvis adgangskoden er glemt.",
|
||||
"Recovery key password" : "Gendannelsesnøgle kodeord",
|
||||
"Repeat recovery key password" : "Gentag adgangskode for gendannelsesnøgle",
|
||||
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
|
||||
"Old recovery key password" : "Gammel adgangskode for gendannelsesnøgle",
|
||||
"New recovery key password" : "Ny adgangskode for gendannelsesnøgle",
|
||||
"Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle",
|
||||
"Change Password" : "Skift Kodeord",
|
||||
"Basic encryption module" : "Basis krypterings modul",
|
||||
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
|
||||
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske din gamle adgangskode, så kan du bede din administrator om at redde dine filer.",
|
||||
"Old log-in password" : "Gammel adgangskode",
|
||||
"Current log-in password" : "Nuværende adgangskode",
|
||||
"Update" : "Opdatér",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
|
||||
"Default encryption module" : "Standard krypterings modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
|
||||
"Basic encryption module" : "Basis krypterings modul",
|
||||
"Missing parameters" : "Manglende parametre",
|
||||
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
|
||||
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
|
||||
"Change Password" : "Skift Kodeord",
|
||||
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
|
||||
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
|
||||
"Update Private Key Password" : "Opdater Privat Nøgle Kodeord",
|
||||
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
|
||||
"Enabled" : "Aktiveret",
|
||||
"Disabled" : "Deaktiveret",
|
||||
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
|
||||
"Disabled" : "Deaktiveret"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Kunne ikke aktivere gendannelsesnøgle. Kontroller venligst dit gendannelsesnøgle kodeord!",
|
||||
"Recovery key successfully disabled" : "Gendannelsesnøgle deaktiveret succesfuldt",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Kunne ikke deaktivere gendannelsesnøgle. Kontroller din gendannelsesnøgle kodeord!",
|
||||
"Missing parameters" : "Manglende parametre",
|
||||
"Please provide the old recovery password" : "Angiv venligst det gamle kodeord for gendannelsesnøglen",
|
||||
"Please provide a new recovery password" : "Angiv venligst et nyt kodeord til gendannelse",
|
||||
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
|
||||
@@ -33,32 +32,34 @@
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
|
||||
"Default Encryption Module" : "Standard krypteringsmodul",
|
||||
"Default encryption module" : "Standard krypterings modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
|
||||
"Encrypt the home storage" : "Krypter hjemmelageret",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
|
||||
"Enable recovery key" : "Aktiver gendannelsesnøgle",
|
||||
"Encrypt the home storage" : "Krypter hjemmelageret",
|
||||
"Disable recovery key" : "Deaktiver gendannelsesnøgle",
|
||||
"Enable recovery key" : "Aktiver gendannelsesnøgle",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Det bruges til at gendanne filer fra en konto, hvis adgangskoden er glemt.",
|
||||
"Recovery key password" : "Gendannelsesnøgle kodeord",
|
||||
"Repeat recovery key password" : "Gentag adgangskode for gendannelsesnøgle",
|
||||
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
|
||||
"Old recovery key password" : "Gammel adgangskode for gendannelsesnøgle",
|
||||
"New recovery key password" : "Ny adgangskode for gendannelsesnøgle",
|
||||
"Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle",
|
||||
"Change Password" : "Skift Kodeord",
|
||||
"Basic encryption module" : "Basis krypterings modul",
|
||||
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
|
||||
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske din gamle adgangskode, så kan du bede din administrator om at redde dine filer.",
|
||||
"Old log-in password" : "Gammel adgangskode",
|
||||
"Current log-in password" : "Nuværende adgangskode",
|
||||
"Update" : "Opdatér",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
|
||||
"Default encryption module" : "Standard krypterings modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
|
||||
"Basic encryption module" : "Basis krypterings modul",
|
||||
"Missing parameters" : "Manglende parametre",
|
||||
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
|
||||
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
|
||||
"Change Password" : "Skift Kodeord",
|
||||
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
|
||||
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
|
||||
"Update Private Key Password" : "Opdater Privat Nøgle Kodeord",
|
||||
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
|
||||
"Enabled" : "Aktiveret",
|
||||
"Disabled" : "Deaktiveret",
|
||||
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
|
||||
"Disabled" : "Deaktiveret"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
|
||||
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
|
||||
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
|
||||
@@ -37,32 +36,34 @@ OC.L10N.register(
|
||||
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl \"encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
|
||||
"Recovery key password" : "Passwort für den Wiederherstellungsschlüsse",
|
||||
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
|
||||
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
|
||||
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn du dich nicht mehr an dein altes Passwort erinnern kannst, kannst du deine Administration bitten, deine Dateien wiederherzustellen.",
|
||||
"Old log-in password" : "Altes Anmelde-Passwort",
|
||||
"Current log-in password" : "Aktuelles Passwort",
|
||||
"Update" : "Aktualisieren",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
|
||||
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
|
||||
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
|
||||
"Enabled" : "Aktiviert",
|
||||
"Disabled" : "Deaktiviert",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
|
||||
"Disabled" : "Deaktiviert"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
|
||||
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
|
||||
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
|
||||
@@ -35,32 +34,34 @@
|
||||
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl \"encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
|
||||
"Recovery key password" : "Passwort für den Wiederherstellungsschlüsse",
|
||||
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
|
||||
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
|
||||
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn du dich nicht mehr an dein altes Passwort erinnern kannst, kannst du deine Administration bitten, deine Dateien wiederherzustellen.",
|
||||
"Old log-in password" : "Altes Anmelde-Passwort",
|
||||
"Current log-in password" : "Aktuelles Passwort",
|
||||
"Update" : "Aktualisieren",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
|
||||
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
|
||||
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
|
||||
"Enabled" : "Aktiviert",
|
||||
"Disabled" : "Deaktiviert",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
|
||||
"Disabled" : "Deaktiviert"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
|
||||
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
|
||||
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
|
||||
@@ -37,32 +36,34 @@ OC.L10N.register(
|
||||
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl \"occ encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
|
||||
"Recovery key password" : "Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
|
||||
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
|
||||
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn Sie sich nicht mehr an Ihr altes Passwort erinnern, können Sie Ihre Administration bitten, Ihre Dateien wiederherzustellen.",
|
||||
"Old log-in password" : "Altes Anmelde-Passwort",
|
||||
"Current log-in password" : "Aktuelles Anmeldepasswort",
|
||||
"Update" : "Aktualisieren",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
|
||||
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
|
||||
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
|
||||
"Enabled" : "Aktiviert",
|
||||
"Disabled" : "Deaktiviert",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
|
||||
"Disabled" : "Deaktiviert"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
|
||||
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
|
||||
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
|
||||
@@ -35,32 +34,34 @@
|
||||
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl \"occ encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
|
||||
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
|
||||
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
|
||||
"Recovery key password" : "Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
|
||||
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
|
||||
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
|
||||
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn Sie sich nicht mehr an Ihr altes Passwort erinnern, können Sie Ihre Administration bitten, Ihre Dateien wiederherzustellen.",
|
||||
"Old log-in password" : "Altes Anmelde-Passwort",
|
||||
"Current log-in password" : "Aktuelles Anmeldepasswort",
|
||||
"Update" : "Aktualisieren",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
|
||||
"Default encryption module" : "Standard-Verschlüsselungsmodul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
|
||||
"Basic encryption module" : "Basisverschlüsselungsmodul",
|
||||
"Missing parameters" : "Fehlende Parameter",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
|
||||
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
|
||||
"Change Password" : "Passwort ändern",
|
||||
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
|
||||
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
|
||||
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
|
||||
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
|
||||
"Enabled" : "Aktiviert",
|
||||
"Disabled" : "Deaktiviert",
|
||||
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
|
||||
"Disabled" : "Deaktiviert"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+15
-14
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Αποτυχία ενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
|
||||
"Recovery key successfully disabled" : "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
|
||||
"Missing parameters" : "Ελλιπείς παράμετροι",
|
||||
"Please provide the old recovery password" : "Παρακαλούμε παρέχετε τον παλιό κωδικό ανάκτησης",
|
||||
"Please provide a new recovery password" : "Παρακαλούμε παρέχετε ένα νέο κωδικό ανάκτησης",
|
||||
"Please repeat the new recovery password" : "Παρακαλούμε επαναλάβετε το νέο κωδικό ανάκτησης",
|
||||
@@ -34,32 +33,34 @@ OC.L10N.register(
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Παρακαλούμε συνδεθείτε στη διαδικτυακή διεπαφή, μεταβείτε στην ενότητα \"Ασφάλεια\" των προσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησής σας εισάγοντας αυτόν τον κωδικό στο πεδίο \"Παλιός κωδικός σύνδεσης\" και τον τρέχοντα κωδικό σύνδεσής σας.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
|
||||
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
|
||||
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
|
||||
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
|
||||
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Το κλειδί ανάκτησης είναι ένα πρόσθετο κλειδί κρυπτογράφησης που χρησιμοποιείται για την κρυπτογράφηση αρχείων. Χρησιμοποιείται για την ανάκτηση αρχείων από έναν λογαριασμό εάν ξεχαστεί το συνθηματικό.",
|
||||
"Recovery key password" : "Συνθηματικό κλειδιού ανάκτησης",
|
||||
"Repeat recovery key password" : "Επαναλάβετε το συνθηματικό κλειδιού ανάκτησης",
|
||||
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
|
||||
"Old recovery key password" : "Παλιό συνθηματικό κλειδιού ανάκτησης",
|
||||
"New recovery key password" : "Νέο συνθηματικό κλειδιού ανάκτησης",
|
||||
"Repeat new recovery key password" : "Επαναλάβετε το νέο συνθηματικό κλειδιού ανάκτησης",
|
||||
"Change Password" : "Αλλαγή συνθηματικό",
|
||||
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
|
||||
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
|
||||
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας συνθηματικό, μπορείτε να ζητήσετε από το διαχειριστή σας να ανακτήσει τα αρχεία σας.",
|
||||
"Old log-in password" : "Παλαιό συνθηματικό σύνδεσης",
|
||||
"Current log-in password" : "Τρέχων συνθηματικό σύνδεσης",
|
||||
"Update" : "Ενημέρωση",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
|
||||
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
|
||||
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
|
||||
"Missing parameters" : "Ελλιπείς παράμετροι",
|
||||
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
|
||||
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
|
||||
"Change Password" : "Αλλαγή συνθηματικό",
|
||||
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
|
||||
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
|
||||
"Update Private Key Password" : "Ενημέρωση Κωδικού Ιδιωτικού Κλειδιού",
|
||||
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
|
||||
"Enabled" : "Ενεργοποιημένο",
|
||||
"Disabled" : "Απενεργοποιημένο",
|
||||
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
|
||||
"Disabled" : "Απενεργοποιημένο"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Αποτυχία ενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
|
||||
"Recovery key successfully disabled" : "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
|
||||
"Missing parameters" : "Ελλιπείς παράμετροι",
|
||||
"Please provide the old recovery password" : "Παρακαλούμε παρέχετε τον παλιό κωδικό ανάκτησης",
|
||||
"Please provide a new recovery password" : "Παρακαλούμε παρέχετε ένα νέο κωδικό ανάκτησης",
|
||||
"Please repeat the new recovery password" : "Παρακαλούμε επαναλάβετε το νέο κωδικό ανάκτησης",
|
||||
@@ -32,32 +31,34 @@
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Παρακαλούμε συνδεθείτε στη διαδικτυακή διεπαφή, μεταβείτε στην ενότητα \"Ασφάλεια\" των προσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησής σας εισάγοντας αυτόν τον κωδικό στο πεδίο \"Παλιός κωδικός σύνδεσης\" και τον τρέχοντα κωδικό σύνδεσής σας.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
|
||||
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
|
||||
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
|
||||
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
|
||||
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
|
||||
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Το κλειδί ανάκτησης είναι ένα πρόσθετο κλειδί κρυπτογράφησης που χρησιμοποιείται για την κρυπτογράφηση αρχείων. Χρησιμοποιείται για την ανάκτηση αρχείων από έναν λογαριασμό εάν ξεχαστεί το συνθηματικό.",
|
||||
"Recovery key password" : "Συνθηματικό κλειδιού ανάκτησης",
|
||||
"Repeat recovery key password" : "Επαναλάβετε το συνθηματικό κλειδιού ανάκτησης",
|
||||
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
|
||||
"Old recovery key password" : "Παλιό συνθηματικό κλειδιού ανάκτησης",
|
||||
"New recovery key password" : "Νέο συνθηματικό κλειδιού ανάκτησης",
|
||||
"Repeat new recovery key password" : "Επαναλάβετε το νέο συνθηματικό κλειδιού ανάκτησης",
|
||||
"Change Password" : "Αλλαγή συνθηματικό",
|
||||
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
|
||||
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
|
||||
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας συνθηματικό, μπορείτε να ζητήσετε από το διαχειριστή σας να ανακτήσει τα αρχεία σας.",
|
||||
"Old log-in password" : "Παλαιό συνθηματικό σύνδεσης",
|
||||
"Current log-in password" : "Τρέχων συνθηματικό σύνδεσης",
|
||||
"Update" : "Ενημέρωση",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
|
||||
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
|
||||
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
|
||||
"Missing parameters" : "Ελλιπείς παράμετροι",
|
||||
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
|
||||
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
|
||||
"Change Password" : "Αλλαγή συνθηματικό",
|
||||
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
|
||||
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
|
||||
"Update Private Key Password" : "Ενημέρωση Κωδικού Ιδιωτικού Κλειδιού",
|
||||
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
|
||||
"Enabled" : "Ενεργοποιημένο",
|
||||
"Disabled" : "Απενεργοποιημένο",
|
||||
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
|
||||
"Disabled" : "Απενεργοποιημένο"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Could not enable recovery key. Please check your recovery key password!",
|
||||
"Recovery key successfully disabled" : "Recovery key disabled successfully",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Could not disable recovery key. Please check your recovery key password!",
|
||||
"Missing parameters" : "Missing parameters",
|
||||
"Please provide the old recovery password" : "Please provide the old recovery password",
|
||||
"Please provide a new recovery password" : "Please provide a new recovery password",
|
||||
"Please repeat the new recovery password" : "Please repeat the new recovery password",
|
||||
@@ -37,32 +36,34 @@ OC.L10N.register(
|
||||
"Default Encryption Module" : "Default Encryption Module",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Default encryption module for Nextcloud Server-side Encryption (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss.",
|
||||
"Default encryption module" : "Default encryption module",
|
||||
"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 initialised, please log-out and log-in again",
|
||||
"Encrypt the home storage" : "Encrypt the home storage",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted",
|
||||
"Enable recovery key" : "Enable recovery key",
|
||||
"Encrypt the home storage" : "Encrypt the home storage",
|
||||
"Disable recovery key" : "Disable recovery key",
|
||||
"Enable recovery key" : "Enable recovery key",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.",
|
||||
"Recovery key password" : "Recovery key password",
|
||||
"Repeat recovery key password" : "Repeat recovery key password",
|
||||
"Change recovery key password:" : "Change recovery key password:",
|
||||
"Old recovery key password" : "Old recovery key password",
|
||||
"New recovery key password" : "New recovery key password",
|
||||
"Repeat new recovery key password" : "Repeat new recovery key password",
|
||||
"Change Password" : "Change Password",
|
||||
"Basic encryption module" : "Basic encryption module",
|
||||
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
|
||||
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "If you do not remember your old password you can ask your administrator to recover your files.",
|
||||
"Old log-in password" : "Old login password",
|
||||
"Current log-in password" : "Current login password",
|
||||
"Update" : "Update",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
|
||||
"Default encryption module" : "Default encryption module",
|
||||
"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 initialised, please log-out and log-in again",
|
||||
"Basic encryption module" : "Basic encryption module",
|
||||
"Missing parameters" : "Missing parameters",
|
||||
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption.",
|
||||
"Change recovery key password:" : "Change recovery key password:",
|
||||
"Change Password" : "Change Password",
|
||||
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
|
||||
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
|
||||
"Update Private Key Password" : "Update Private Key Password",
|
||||
"Enable password recovery:" : "Enable password recovery:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
|
||||
"Enabled" : "Enabled",
|
||||
"Disabled" : "Disabled",
|
||||
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption."
|
||||
"Disabled" : "Disabled"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Could not enable recovery key. Please check your recovery key password!",
|
||||
"Recovery key successfully disabled" : "Recovery key disabled successfully",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Could not disable recovery key. Please check your recovery key password!",
|
||||
"Missing parameters" : "Missing parameters",
|
||||
"Please provide the old recovery password" : "Please provide the old recovery password",
|
||||
"Please provide a new recovery password" : "Please provide a new recovery password",
|
||||
"Please repeat the new recovery password" : "Please repeat the new recovery password",
|
||||
@@ -35,32 +34,34 @@
|
||||
"Default Encryption Module" : "Default Encryption Module",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Default encryption module for Nextcloud Server-side Encryption (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss.",
|
||||
"Default encryption module" : "Default encryption module",
|
||||
"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 initialised, please log-out and log-in again",
|
||||
"Encrypt the home storage" : "Encrypt the home storage",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted",
|
||||
"Enable recovery key" : "Enable recovery key",
|
||||
"Encrypt the home storage" : "Encrypt the home storage",
|
||||
"Disable recovery key" : "Disable recovery key",
|
||||
"Enable recovery key" : "Enable recovery key",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.",
|
||||
"Recovery key password" : "Recovery key password",
|
||||
"Repeat recovery key password" : "Repeat recovery key password",
|
||||
"Change recovery key password:" : "Change recovery key password:",
|
||||
"Old recovery key password" : "Old recovery key password",
|
||||
"New recovery key password" : "New recovery key password",
|
||||
"Repeat new recovery key password" : "Repeat new recovery key password",
|
||||
"Change Password" : "Change Password",
|
||||
"Basic encryption module" : "Basic encryption module",
|
||||
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
|
||||
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "If you do not remember your old password you can ask your administrator to recover your files.",
|
||||
"Old log-in password" : "Old login password",
|
||||
"Current log-in password" : "Current login password",
|
||||
"Update" : "Update",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
|
||||
"Default encryption module" : "Default encryption module",
|
||||
"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 initialised, please log-out and log-in again",
|
||||
"Basic encryption module" : "Basic encryption module",
|
||||
"Missing parameters" : "Missing parameters",
|
||||
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption.",
|
||||
"Change recovery key password:" : "Change recovery key password:",
|
||||
"Change Password" : "Change Password",
|
||||
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
|
||||
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
|
||||
"Update Private Key Password" : "Update Private Key Password",
|
||||
"Enable password recovery:" : "Enable password recovery:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
|
||||
"Enabled" : "Enabled",
|
||||
"Disabled" : "Disabled",
|
||||
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption."
|
||||
"Disabled" : "Disabled"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+14
-13
@@ -8,7 +8,6 @@ OC.L10N.register(
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti ŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
|
||||
"Recovery key successfully disabled" : "Restaŭroŝlosilo sukcese malŝaltita",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti malŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
|
||||
"Missing parameters" : "Mankas parametroj",
|
||||
"Please provide the old recovery password" : "Bv. doni la malnovan pasvorton de restaŭroŝlosilo",
|
||||
"Please provide a new recovery password" : "Bv. doni la novan pasvorton de restaŭroŝlosilo",
|
||||
"Please repeat the new recovery password" : "Bv. ripeti la novan pasvorton de restaŭroŝlosilo",
|
||||
@@ -28,29 +27,31 @@ OC.L10N.register(
|
||||
"Bad Signature" : "Malbona subskribo",
|
||||
"Missing Signature" : "Mankanta subskribo",
|
||||
"one-time password for server-side-encryption" : "unuuza pasvorto por ĉeservila ĉifrado",
|
||||
"Default encryption module" : "Defaŭlta ĉifra modulo",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
|
||||
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ebligi tiun opcion ĉifras ĉiujn dosierojn de la ĉefkonservejo, alie nur dosieroj en ekstera konservejo ĉifriĝos.",
|
||||
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
|
||||
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
|
||||
"Disable recovery key" : "Malŝalti restaŭroŝlosilon",
|
||||
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
|
||||
"Recovery key password" : "Pasvorto de restaŭroŝlosilo",
|
||||
"Repeat recovery key password" : "Ripetu la pasvorton de restaŭroŝlosilo",
|
||||
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
|
||||
"Old recovery key password" : "Malnova pasvorto de restaŭroŝlosilo",
|
||||
"New recovery key password" : "Nova pasvorto de restaŭroŝlosilo",
|
||||
"Repeat new recovery key password" : "Ripetu la novan pasvorton de restaŭroŝlosilo",
|
||||
"Change Password" : "Ŝanĝi pasvorton",
|
||||
"Basic encryption module" : "Bazĉifrada modulo",
|
||||
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
|
||||
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
|
||||
"Old log-in password" : "Malnova ensaluta pasvorto",
|
||||
"Current log-in password" : "Nuna ensaluta pasvorto",
|
||||
"Update" : "Ĝisdatigi",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
|
||||
"Default encryption module" : "Defaŭlta ĉifra modulo",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
|
||||
"Basic encryption module" : "Bazĉifrada modulo",
|
||||
"Missing parameters" : "Mankas parametroj",
|
||||
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado",
|
||||
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
|
||||
"Change Password" : "Ŝanĝi pasvorton",
|
||||
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
|
||||
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
|
||||
"Update Private Key Password" : "Ĝisdatigi la pasvorton de la malpublika ŝlosilo",
|
||||
"Enable password recovery:" : "Ŝalti restaŭron de pasvorto:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
|
||||
"Enabled" : "Ŝaltita",
|
||||
"Disabled" : "Malŝaltita",
|
||||
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado"
|
||||
"Disabled" : "Malŝaltita"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"Could not enable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti ŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
|
||||
"Recovery key successfully disabled" : "Restaŭroŝlosilo sukcese malŝaltita",
|
||||
"Could not disable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti malŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
|
||||
"Missing parameters" : "Mankas parametroj",
|
||||
"Please provide the old recovery password" : "Bv. doni la malnovan pasvorton de restaŭroŝlosilo",
|
||||
"Please provide a new recovery password" : "Bv. doni la novan pasvorton de restaŭroŝlosilo",
|
||||
"Please repeat the new recovery password" : "Bv. ripeti la novan pasvorton de restaŭroŝlosilo",
|
||||
@@ -26,29 +25,31 @@
|
||||
"Bad Signature" : "Malbona subskribo",
|
||||
"Missing Signature" : "Mankanta subskribo",
|
||||
"one-time password for server-side-encryption" : "unuuza pasvorto por ĉeservila ĉifrado",
|
||||
"Default encryption module" : "Defaŭlta ĉifra modulo",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
|
||||
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ebligi tiun opcion ĉifras ĉiujn dosierojn de la ĉefkonservejo, alie nur dosieroj en ekstera konservejo ĉifriĝos.",
|
||||
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
|
||||
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
|
||||
"Disable recovery key" : "Malŝalti restaŭroŝlosilon",
|
||||
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
|
||||
"Recovery key password" : "Pasvorto de restaŭroŝlosilo",
|
||||
"Repeat recovery key password" : "Ripetu la pasvorton de restaŭroŝlosilo",
|
||||
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
|
||||
"Old recovery key password" : "Malnova pasvorto de restaŭroŝlosilo",
|
||||
"New recovery key password" : "Nova pasvorto de restaŭroŝlosilo",
|
||||
"Repeat new recovery key password" : "Ripetu la novan pasvorton de restaŭroŝlosilo",
|
||||
"Change Password" : "Ŝanĝi pasvorton",
|
||||
"Basic encryption module" : "Bazĉifrada modulo",
|
||||
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
|
||||
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
|
||||
"Old log-in password" : "Malnova ensaluta pasvorto",
|
||||
"Current log-in password" : "Nuna ensaluta pasvorto",
|
||||
"Update" : "Ĝisdatigi",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
|
||||
"Default encryption module" : "Defaŭlta ĉifra modulo",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
|
||||
"Basic encryption module" : "Bazĉifrada modulo",
|
||||
"Missing parameters" : "Mankas parametroj",
|
||||
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado",
|
||||
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
|
||||
"Change Password" : "Ŝanĝi pasvorton",
|
||||
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
|
||||
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
|
||||
"Update Private Key Password" : "Ĝisdatigi la pasvorton de la malpublika ŝlosilo",
|
||||
"Enable password recovery:" : "Ŝalti restaŭron de pasvorto:",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
|
||||
"Enabled" : "Ŝaltita",
|
||||
"Disabled" : "Malŝaltita",
|
||||
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado"
|
||||
"Disabled" : "Malŝaltita"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user