mirror of https://github.com/nextcloud/server
Merge branch 'master' into bugfix/fixed-get-filename-in-fileinfo
This commit is contained in:
commit
fefa3382e7
|
@ -4,4 +4,4 @@ OC.L10N.register(
|
|||
"Auditing / Logging" : "פיקוח / תיעוד",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "מספק יכולות תיעוד ל־Nextcloud כגון תיעוד גישה ליומן התיעוד או פעולות רגישות אחרות."
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");
|
||||
"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ "translations": {
|
||||
"Auditing / Logging" : "פיקוח / תיעוד",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "מספק יכולות תיעוד ל־Nextcloud כגון תיעוד גישה ליומן התיעוד או פעולות רגישות אחרות."
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"
|
||||
}
|
|
@ -9,6 +9,7 @@ OC.L10N.register(
|
|||
"%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김",
|
||||
"{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김",
|
||||
"<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "삭제된 계정이 게시한 “{file}”의 댓글에서 나를 언급함",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 님이 “{file}”에 남긴 댓글에서 나를 언급함",
|
||||
"Files app plugin to add comments to files" : "파일에 댓글을 남기는 파일 앱 플러그인",
|
||||
"Edit comment" : "댓글 편집",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김",
|
||||
"{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김",
|
||||
"<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "삭제된 계정이 게시한 “{file}”의 댓글에서 나를 언급함",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 님이 “{file}”에 남긴 댓글에서 나를 언급함",
|
||||
"Files app plugin to add comments to files" : "파일에 댓글을 남기는 파일 앱 플러그인",
|
||||
"Edit comment" : "댓글 편집",
|
||||
|
|
|
@ -22,16 +22,23 @@
|
|||
|
||||
import { createClient } from 'webdav'
|
||||
import { getRootPath } from '../utils/davUtils.js'
|
||||
import { getRequestToken } from '@nextcloud/auth'
|
||||
import { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'
|
||||
|
||||
// init webdav client
|
||||
const client = createClient(getRootPath(), {
|
||||
headers: {
|
||||
// Add this so the server knows it is an request from the browser
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
// Inject user auth
|
||||
requesttoken: getRequestToken() ?? '',
|
||||
},
|
||||
})
|
||||
const client = createClient(getRootPath())
|
||||
|
||||
// set CSRF token header
|
||||
const setHeaders = (token) => {
|
||||
client.setHeaders({
|
||||
// Add this so the server knows it is an request from the browser
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
// Inject user auth
|
||||
requesttoken: token ?? '',
|
||||
})
|
||||
}
|
||||
|
||||
// refresh headers when request token changes
|
||||
onRequestTokenUpdate(setHeaders)
|
||||
setHeaders(getRequestToken())
|
||||
|
||||
export default client
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
import { parseXML, type DAVResult, type FileStat, type ResponseDataDetailed } from 'webdav'
|
||||
|
||||
// https://github.com/perry-mitchell/webdav-client/issues/339
|
||||
import { processResponsePayload } from '../../../../node_modules/webdav/dist/node/response.js'
|
||||
import { prepareFileFromProps } from '../../../../node_modules/webdav/dist/node/tools/dav.js'
|
||||
import { processResponsePayload } from 'webdav/dist/node/response.js'
|
||||
import { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js'
|
||||
import client from './DavClient.js'
|
||||
|
||||
export const DEFAULT_LIMIT = 20
|
||||
|
@ -77,10 +77,8 @@ const getDirectoryFiles = function(
|
|||
// Map all items to a consistent output structure (results)
|
||||
return responseItems.map(item => {
|
||||
// Each item should contain a stat object
|
||||
const {
|
||||
propstat: { prop: props },
|
||||
} = item
|
||||
const props = item.propstat!.prop!;
|
||||
|
||||
return prepareFileFromProps(props, props.id.toString(), isDetailed)
|
||||
return prepareFileFromProps(props, props.id!.toString(), isDetailed)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -21,4 +21,4 @@ OC.L10N.register(
|
|||
"Hello" : "שלום",
|
||||
"Hello, {name}" : "שלום, {name}"
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");
|
||||
"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;");
|
||||
|
|
|
@ -18,5 +18,5 @@
|
|||
"Good evening, {name}" : "ערב טוב, {name}",
|
||||
"Hello" : "שלום",
|
||||
"Hello, {name}" : "שלום, {name}"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"
|
||||
}
|
|
@ -54,25 +54,14 @@ use OCP\IRequest;
|
|||
*/
|
||||
class DashboardApiController extends OCSController {
|
||||
|
||||
/** @var IManager */
|
||||
private $dashboardManager;
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var string|null */
|
||||
private $userId;
|
||||
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
IManager $dashboardManager,
|
||||
IConfig $config,
|
||||
?string $userId
|
||||
private IManager $dashboardManager,
|
||||
private IConfig $config,
|
||||
private ?string $userId,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
$this->dashboardManager = $dashboardManager;
|
||||
$this->config = $config;
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -46,37 +46,17 @@ use OCP\IRequest;
|
|||
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
|
||||
class DashboardController extends Controller {
|
||||
|
||||
/** @var IInitialState */
|
||||
private $initialState;
|
||||
/** @var IEventDispatcher */
|
||||
private $eventDispatcher;
|
||||
/** @var IManager */
|
||||
private $dashboardManager;
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
/** @var string */
|
||||
private $userId;
|
||||
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
IInitialState $initialState,
|
||||
IEventDispatcher $eventDispatcher,
|
||||
IManager $dashboardManager,
|
||||
IConfig $config,
|
||||
IL10N $l10n,
|
||||
$userId
|
||||
private IInitialState $initialState,
|
||||
private IEventDispatcher $eventDispatcher,
|
||||
private IManager $dashboardManager,
|
||||
private IConfig $config,
|
||||
private IL10N $l10n,
|
||||
private ?string $userId
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
$this->initialState = $initialState;
|
||||
$this->eventDispatcher = $eventDispatcher;
|
||||
$this->dashboardManager = $dashboardManager;
|
||||
$this->config = $config;
|
||||
$this->l10n = $l10n;
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -31,21 +31,15 @@ use OCP\IConfig;
|
|||
use OCP\IRequest;
|
||||
|
||||
class LayoutApiController extends OCSController {
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var string */
|
||||
private $userId;
|
||||
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
IConfig $config,
|
||||
$userId
|
||||
private IConfig $config,
|
||||
private ?string $userId,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
$this->config = $config;
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -95,6 +95,13 @@ class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
|
|||
$server->on('propFind', [$this, 'propFindDefaultCalendarUrl'], 90);
|
||||
$server->on('afterWriteContent', [$this, 'dispatchSchedulingResponses']);
|
||||
$server->on('afterCreateFile', [$this, 'dispatchSchedulingResponses']);
|
||||
|
||||
// We allow mutating the default calendar URL through the CustomPropertiesBackend
|
||||
// (oc_properties table)
|
||||
$server->protectedProperties = array_filter(
|
||||
$server->protectedProperties,
|
||||
static fn (string $property) => $property !== self::SCHEDULE_DEFAULT_CALENDAR_URL,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -260,6 +260,7 @@ class Principal implements BackendInterface {
|
|||
* @return int
|
||||
*/
|
||||
public function updatePrincipal($path, PropPatch $propPatch) {
|
||||
// Updating schedule-default-calendar-URL is handled in CustomPropertiesBackend
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -188,6 +188,7 @@ class ServerFactory {
|
|||
$server->addPlugin(
|
||||
new \Sabre\DAV\PropertyStorage\Plugin(
|
||||
new \OCA\DAV\DAV\CustomPropertiesBackend(
|
||||
$server,
|
||||
$objectTree,
|
||||
$this->databaseConnection,
|
||||
$this->userSession->getUser()
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* @author Georg Ehrke <oc.list@georgehrke.com>
|
||||
* @author Robin Appelman <robin@icewind.nl>
|
||||
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
||||
* @author Richard Steinmetz <richard@steinmetz.cloud>
|
||||
*
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
|
@ -31,11 +32,19 @@ use OCA\DAV\Connector\Sabre\FilesPlugin;
|
|||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use Sabre\CalDAV\ICalendar;
|
||||
use Sabre\DAV\Exception as DavException;
|
||||
use Sabre\DAV\PropertyStorage\Backend\BackendInterface;
|
||||
use Sabre\DAV\PropFind;
|
||||
use Sabre\DAV\PropPatch;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\Tree;
|
||||
use Sabre\DAV\Xml\Property\Complex;
|
||||
use Sabre\DAV\Xml\Property\Href;
|
||||
use Sabre\DAV\Xml\Property\LocalHref;
|
||||
use Sabre\Xml\ParseException;
|
||||
use Sabre\Xml\Service as XmlService;
|
||||
|
||||
use function array_intersect;
|
||||
|
||||
class CustomPropertiesBackend implements BackendInterface {
|
||||
|
@ -58,6 +67,11 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
*/
|
||||
public const PROPERTY_TYPE_OBJECT = 3;
|
||||
|
||||
/**
|
||||
* Value is stored as a {DAV:}href string.
|
||||
*/
|
||||
public const PROPERTY_TYPE_HREF = 4;
|
||||
|
||||
/**
|
||||
* Ignored properties
|
||||
*
|
||||
|
@ -105,6 +119,15 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
*/
|
||||
private const PUBLISHED_READ_ONLY_PROPERTIES = [
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-availability',
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL',
|
||||
];
|
||||
|
||||
/**
|
||||
* Map of custom XML elements to parse when trying to deserialize an instance of
|
||||
* \Sabre\DAV\Xml\Property\Complex to find a more specialized PROPERTY_TYPE_*
|
||||
*/
|
||||
private const COMPLEX_XML_ELEMENT_MAP = [
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => Href::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
@ -129,19 +152,29 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
*/
|
||||
private $userCache = [];
|
||||
|
||||
private Server $server;
|
||||
private XmlService $xmlService;
|
||||
|
||||
/**
|
||||
* @param Tree $tree node tree
|
||||
* @param IDBConnection $connection database connection
|
||||
* @param IUser $user owner of the tree and properties
|
||||
*/
|
||||
public function __construct(
|
||||
Server $server,
|
||||
Tree $tree,
|
||||
IDBConnection $connection,
|
||||
IUser $user,
|
||||
) {
|
||||
$this->server = $server;
|
||||
$this->tree = $tree;
|
||||
$this->connection = $connection;
|
||||
$this->user = $user;
|
||||
$this->xmlService = new XmlService();
|
||||
$this->xmlService->elementMap = array_merge(
|
||||
$this->xmlService->elementMap,
|
||||
self::COMPLEX_XML_ELEMENT_MAP,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -199,6 +232,21 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
}
|
||||
}
|
||||
|
||||
// substr of principals/users/ => path is a user principal
|
||||
// two '/' => this a principal collection (and not some child object)
|
||||
if (str_starts_with($path, 'principals/users/') && substr_count($path, '/') === 2) {
|
||||
$allRequestedProps = $propFind->getRequestedProperties();
|
||||
$customProperties = [
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL',
|
||||
];
|
||||
|
||||
foreach ($customProperties as $customProperty) {
|
||||
if (in_array($customProperty, $allRequestedProps, true)) {
|
||||
$requestedProps[] = $customProperty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($requestedProps)) {
|
||||
return;
|
||||
}
|
||||
|
@ -211,9 +259,19 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
// First fetch the published properties (set by another user), then get the ones set by
|
||||
// the current user. If both are set then the latter as priority.
|
||||
foreach ($this->getPublishedProperties($path, $requestedProps) as $propName => $propValue) {
|
||||
try {
|
||||
$this->validateProperty($path, $propName, $propValue);
|
||||
} catch (DavException $e) {
|
||||
continue;
|
||||
}
|
||||
$propFind->set($propName, $propValue);
|
||||
}
|
||||
foreach ($this->getUserProperties($path, $requestedProps) as $propName => $propValue) {
|
||||
try {
|
||||
$this->validateProperty($path, $propName, $propValue);
|
||||
} catch (DavException $e) {
|
||||
continue;
|
||||
}
|
||||
$propFind->set($propName, $propValue);
|
||||
}
|
||||
}
|
||||
|
@ -264,6 +322,30 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
$statement->closeCursor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the value of a property. Will throw if a value is invalid.
|
||||
*
|
||||
* @throws DavException The value of the property is invalid
|
||||
*/
|
||||
private function validateProperty(string $path, string $propName, mixed $propValue): void {
|
||||
switch ($propName) {
|
||||
case '{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL':
|
||||
/** @var Href $propValue */
|
||||
$href = $propValue->getHref();
|
||||
if ($href === null) {
|
||||
throw new DavException('Href is empty');
|
||||
}
|
||||
|
||||
// $path is the principal here as this prop is only set on principals
|
||||
$node = $this->tree->getNodeForPath($href);
|
||||
if (!($node instanceof ICalendar) || $node->getOwner() !== $path) {
|
||||
throw new DavException('No such calendar');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
* @param string[] $requestedProperties
|
||||
|
@ -393,7 +475,11 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
->executeStatement();
|
||||
}
|
||||
} else {
|
||||
[$value, $valueType] = $this->encodeValueForDatabase($propertyValue);
|
||||
[$value, $valueType] = $this->encodeValueForDatabase(
|
||||
$path,
|
||||
$propertyName,
|
||||
$propertyValue,
|
||||
);
|
||||
$dbParameters['propertyValue'] = $value;
|
||||
$dbParameters['valueType'] = $valueType;
|
||||
|
||||
|
@ -436,15 +522,38 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @return array
|
||||
* @throws ParseException If parsing a \Sabre\DAV\Xml\Property\Complex value fails
|
||||
* @throws DavException If the property value is invalid
|
||||
*/
|
||||
private function encodeValueForDatabase($value): array {
|
||||
private function encodeValueForDatabase(string $path, string $name, mixed $value): array {
|
||||
// Try to parse a more specialized property type first
|
||||
if ($value instanceof Complex) {
|
||||
$xml = $this->xmlService->write($name, [$value], $this->server->getBaseUri());
|
||||
$value = $this->xmlService->parse($xml, $this->server->getBaseUri()) ?? $value;
|
||||
}
|
||||
|
||||
if ($name === '{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL') {
|
||||
$value = $this->encodeDefaultCalendarUrl($value);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->validateProperty($path, $name, $value);
|
||||
} catch (DavException $e) {
|
||||
throw new DavException(
|
||||
"Property \"$name\" has an invalid value: " . $e->getMessage(),
|
||||
0,
|
||||
$e,
|
||||
);
|
||||
}
|
||||
|
||||
if (is_scalar($value)) {
|
||||
$valueType = self::PROPERTY_TYPE_STRING;
|
||||
} elseif ($value instanceof Complex) {
|
||||
$valueType = self::PROPERTY_TYPE_XML;
|
||||
$value = $value->getXml();
|
||||
} elseif ($value instanceof Href) {
|
||||
$valueType = self::PROPERTY_TYPE_HREF;
|
||||
$value = $value->getHref();
|
||||
} else {
|
||||
$valueType = self::PROPERTY_TYPE_OBJECT;
|
||||
$value = serialize($value);
|
||||
|
@ -459,6 +568,8 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
switch ($valueType) {
|
||||
case self::PROPERTY_TYPE_XML:
|
||||
return new Complex($value);
|
||||
case self::PROPERTY_TYPE_HREF:
|
||||
return new Href($value);
|
||||
case self::PROPERTY_TYPE_OBJECT:
|
||||
return unserialize($value);
|
||||
case self::PROPERTY_TYPE_STRING:
|
||||
|
@ -467,6 +578,26 @@ class CustomPropertiesBackend implements BackendInterface {
|
|||
}
|
||||
}
|
||||
|
||||
private function encodeDefaultCalendarUrl(Href $value): Href {
|
||||
$href = $value->getHref();
|
||||
if ($href === null) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (!str_starts_with($href, '/')) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
try {
|
||||
// Build path relative to the dav base URI to be used later to find the node
|
||||
$value = new LocalHref($this->server->calculateUri($href) . '/');
|
||||
} catch (DavException\Forbidden) {
|
||||
// Not existing calendars will be handled later when the value is validated
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
private function createDeleteQuery(): IQueryBuilder {
|
||||
$deleteQuery = $this->connection->getQueryBuilder();
|
||||
$deleteQuery->delete('properties')
|
||||
|
|
|
@ -276,6 +276,7 @@ class Server {
|
|||
$this->server->addPlugin(
|
||||
new \Sabre\DAV\PropertyStorage\Plugin(
|
||||
new CustomPropertiesBackend(
|
||||
$this->server,
|
||||
$this->server->tree,
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
\OC::$server->getUserSession()->getUser()
|
||||
|
|
|
@ -19,21 +19,29 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import * as webdav from 'webdav'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { createClient } from 'webdav'
|
||||
import memoize from 'lodash/fp/memoize.js'
|
||||
import { generateRemoteUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'
|
||||
|
||||
export const getClient = memoize((service) => {
|
||||
// Add this so the server knows it is an request from the browser
|
||||
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
|
||||
// init webdav client
|
||||
const remote = generateRemoteUrl(`dav/${service}/${getCurrentUser().uid}`)
|
||||
const client = createClient(remote)
|
||||
|
||||
// force our axios
|
||||
const patcher = webdav.getPatcher()
|
||||
patcher.patch('request', axios)
|
||||
// set CSRF token header
|
||||
const setHeaders = (token) => {
|
||||
client.setHeaders({
|
||||
// Add this so the server knows it is an request from the browser
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
// Inject user auth
|
||||
requesttoken: token ?? '',
|
||||
})
|
||||
}
|
||||
|
||||
return webdav.createClient(
|
||||
generateRemoteUrl(`dav/${service}/${getCurrentUser().uid}`)
|
||||
)
|
||||
// refresh headers when request token changes
|
||||
onRequestTokenUpdate(setHeaders)
|
||||
setHeaders(getRequestToken())
|
||||
|
||||
return client;
|
||||
})
|
||||
|
|
|
@ -87,6 +87,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase {
|
|||
->willReturn($userId);
|
||||
|
||||
$this->plugin = new \OCA\DAV\DAV\CustomPropertiesBackend(
|
||||
$this->server,
|
||||
$this->tree,
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
$this->user
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
* @author Morris Jobke <hey@morrisjobke.de>
|
||||
* @author Robin Appelman <robin@icewind.nl>
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
* @author Richard Steinmetz <richard@steinmetz.cloud>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
|
@ -28,17 +29,29 @@
|
|||
namespace OCA\DAV\Tests\DAV;
|
||||
|
||||
use OCA\DAV\DAV\CustomPropertiesBackend;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use Sabre\CalDAV\ICalendar;
|
||||
use Sabre\DAV\Exception\NotFound;
|
||||
use Sabre\DAV\PropFind;
|
||||
use Sabre\DAV\PropPatch;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\Tree;
|
||||
use Sabre\DAV\Xml\Property\Href;
|
||||
use Sabre\DAVACL\IACL;
|
||||
use Sabre\DAVACL\IPrincipal;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class CustomPropertiesBackendTest extends TestCase {
|
||||
private const BASE_URI = '/remote.php/dav/';
|
||||
|
||||
/** @var Server | \PHPUnit\Framework\MockObject\MockObject */
|
||||
private $server;
|
||||
|
||||
/** @var Tree | \PHPUnit\Framework\MockObject\MockObject */
|
||||
private $tree;
|
||||
|
||||
|
@ -54,6 +67,9 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->server = $this->createMock(Server::class);
|
||||
$this->server->method('getBaseUri')
|
||||
->willReturn(self::BASE_URI);
|
||||
$this->tree = $this->createMock(Tree::class);
|
||||
$this->user = $this->createMock(IUser::class);
|
||||
$this->user->method('getUID')
|
||||
|
@ -62,9 +78,10 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
$this->dbConnection = \OC::$server->getDatabaseConnection();
|
||||
|
||||
$this->backend = new CustomPropertiesBackend(
|
||||
$this->server,
|
||||
$this->tree,
|
||||
$this->dbConnection,
|
||||
$this->user
|
||||
$this->user,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -90,7 +107,13 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
}
|
||||
}
|
||||
|
||||
protected function insertProp(string $user, string $path, string $name, string $value) {
|
||||
protected function insertProp(string $user, string $path, string $name, mixed $value) {
|
||||
$type = CustomPropertiesBackend::PROPERTY_TYPE_STRING;
|
||||
if ($value instanceof Href) {
|
||||
$value = $value->getHref();
|
||||
$type = CustomPropertiesBackend::PROPERTY_TYPE_HREF;
|
||||
}
|
||||
|
||||
$query = $this->dbConnection->getQueryBuilder();
|
||||
$query->insert('properties')
|
||||
->values([
|
||||
|
@ -98,13 +121,14 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
'propertypath' => $query->createNamedParameter($this->formatPath($path)),
|
||||
'propertyname' => $query->createNamedParameter($name),
|
||||
'propertyvalue' => $query->createNamedParameter($value),
|
||||
'valuetype' => $query->createNamedParameter($type, IQueryBuilder::PARAM_INT)
|
||||
]);
|
||||
$query->execute();
|
||||
}
|
||||
|
||||
protected function getProps(string $user, string $path) {
|
||||
$query = $this->dbConnection->getQueryBuilder();
|
||||
$query->select('propertyname', 'propertyvalue')
|
||||
$query->select('propertyname', 'propertyvalue', 'valuetype')
|
||||
->from('properties')
|
||||
->where($query->expr()->eq('userid', $query->createNamedParameter($user)))
|
||||
->andWhere($query->expr()->eq('propertypath', $query->createNamedParameter($this->formatPath($path))));
|
||||
|
@ -112,7 +136,11 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
$result = $query->execute();
|
||||
$data = [];
|
||||
while ($row = $result->fetch()) {
|
||||
$data[$row['propertyname']] = $row['propertyvalue'];
|
||||
$value = $row['propertyvalue'];
|
||||
if ((int)$row['valuetype'] === CustomPropertiesBackend::PROPERTY_TYPE_HREF) {
|
||||
$value = new Href($value);
|
||||
}
|
||||
$data[$row['propertyname']] = $value;
|
||||
}
|
||||
$result->closeCursor();
|
||||
|
||||
|
@ -122,9 +150,10 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
public function testPropFindNoDbCalls(): void {
|
||||
$db = $this->createMock(IDBConnection::class);
|
||||
$backend = new CustomPropertiesBackend(
|
||||
$this->server,
|
||||
$this->tree,
|
||||
$db,
|
||||
$this->user
|
||||
$this->user,
|
||||
);
|
||||
|
||||
$propFind = $this->createMock(PropFind::class);
|
||||
|
@ -186,10 +215,169 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
$this->assertEquals($props, $setProps);
|
||||
}
|
||||
|
||||
public function testPropFindPrincipalCall(): void {
|
||||
$this->tree->method('getNodeForPath')
|
||||
->willReturnCallback(function ($uri) {
|
||||
$node = $this->createMock(ICalendar::class);
|
||||
$node->method('getOwner')
|
||||
->willReturn('principals/users/dummy_user_42');
|
||||
return $node;
|
||||
});
|
||||
|
||||
$propFind = $this->createMock(PropFind::class);
|
||||
$propFind->method('get404Properties')
|
||||
->with()
|
||||
->willReturn([
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}getcontenttype',
|
||||
'{DAV:}getetag',
|
||||
'{abc}def',
|
||||
]);
|
||||
|
||||
$propFind->method('getRequestedProperties')
|
||||
->with()
|
||||
->willReturn([
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}getcontenttype',
|
||||
'{DAV:}getetag',
|
||||
'{abc}def',
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL',
|
||||
]);
|
||||
|
||||
$props = [
|
||||
'{abc}def' => 'a',
|
||||
'{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('calendars/admin/personal'),
|
||||
];
|
||||
$this->insertProps('dummy_user_42', 'principals/users/dummy_user_42', $props);
|
||||
|
||||
$setProps = [];
|
||||
$propFind->method('set')
|
||||
->willReturnCallback(function ($name, $value, $status) use (&$setProps): void {
|
||||
$setProps[$name] = $value;
|
||||
});
|
||||
|
||||
$this->backend->propFind('principals/users/dummy_user_42', $propFind);
|
||||
$this->assertEquals($props, $setProps);
|
||||
}
|
||||
|
||||
public function propFindPrincipalScheduleDefaultCalendarProviderUrlProvider(): array {
|
||||
// [ user, nodes, existingProps, requestedProps, returnedProps ]
|
||||
return [
|
||||
[ // Exists
|
||||
'dummy_user_42',
|
||||
['calendars/dummy_user_42/foo/' => ICalendar::class],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('calendars/dummy_user_42/foo/')],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL'],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('calendars/dummy_user_42/foo/')],
|
||||
],
|
||||
[ // Doesn't exist
|
||||
'dummy_user_42',
|
||||
['calendars/dummy_user_42/foo/' => ICalendar::class],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('calendars/dummy_user_42/bar/')],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL'],
|
||||
[],
|
||||
],
|
||||
[ // No privilege
|
||||
'dummy_user_42',
|
||||
['calendars/user2/baz/' => ICalendar::class],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('calendars/user2/baz/')],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL'],
|
||||
[],
|
||||
],
|
||||
[ // Not a calendar
|
||||
'dummy_user_42',
|
||||
['foo/dummy_user_42/bar/' => IACL::class],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('foo/dummy_user_42/bar/')],
|
||||
['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL'],
|
||||
[],
|
||||
],
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider propFindPrincipalScheduleDefaultCalendarProviderUrlProvider
|
||||
*/
|
||||
public function testPropFindPrincipalScheduleDefaultCalendarUrl(
|
||||
string $user,
|
||||
array $nodes,
|
||||
array $existingProps,
|
||||
array $requestedProps,
|
||||
array $returnedProps,
|
||||
): void {
|
||||
$propFind = $this->createMock(PropFind::class);
|
||||
$propFind->method('get404Properties')
|
||||
->with()
|
||||
->willReturn([
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}getcontenttype',
|
||||
'{DAV:}getetag',
|
||||
]);
|
||||
|
||||
$propFind->method('getRequestedProperties')
|
||||
->with()
|
||||
->willReturn(array_merge([
|
||||
'{DAV:}getcontentlength',
|
||||
'{DAV:}getcontenttype',
|
||||
'{DAV:}getetag',
|
||||
'{abc}def',
|
||||
],
|
||||
$requestedProps,
|
||||
));
|
||||
|
||||
$this->server->method('calculateUri')
|
||||
->willReturnCallback(function ($uri) {
|
||||
if (!str_starts_with($uri, self::BASE_URI)) {
|
||||
return trim(substr($uri, strlen(self::BASE_URI)), '/');
|
||||
}
|
||||
return null;
|
||||
});
|
||||
$this->tree->method('getNodeForPath')
|
||||
->willReturnCallback(function ($uri) use ($nodes) {
|
||||
if (str_starts_with($uri, 'principals/')) {
|
||||
return $this->createMock(IPrincipal::class);
|
||||
}
|
||||
if (array_key_exists($uri, $nodes)) {
|
||||
$owner = explode('/', $uri)[1];
|
||||
$node = $this->createMock($nodes[$uri]);
|
||||
$node->method('getOwner')
|
||||
->willReturn("principals/users/$owner");
|
||||
return $node;
|
||||
}
|
||||
throw new NotFound('Node not found');
|
||||
});
|
||||
|
||||
$this->insertProps($user, "principals/users/$user", $existingProps);
|
||||
|
||||
$setProps = [];
|
||||
$propFind->method('set')
|
||||
->willReturnCallback(function ($name, $value, $status) use (&$setProps): void {
|
||||
$setProps[$name] = $value;
|
||||
});
|
||||
|
||||
$this->backend->propFind("principals/users/$user", $propFind);
|
||||
$this->assertEquals($returnedProps, $setProps);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider propPatchProvider
|
||||
*/
|
||||
public function testPropPatch(string $path, array $existing, array $props, array $result): void {
|
||||
$this->server->method('calculateUri')
|
||||
->willReturnCallback(function ($uri) {
|
||||
if (str_starts_with($uri, self::BASE_URI)) {
|
||||
return trim(substr($uri, strlen(self::BASE_URI)), '/');
|
||||
}
|
||||
return null;
|
||||
});
|
||||
$this->tree->method('getNodeForPath')
|
||||
->willReturnCallback(function ($uri) {
|
||||
$node = $this->createMock(ICalendar::class);
|
||||
$node->method('getOwner')
|
||||
->willReturn('principals/users/' . $this->user->getUID());
|
||||
return $node;
|
||||
});
|
||||
|
||||
$this->insertProps($this->user->getUID(), $path, $existing);
|
||||
$propPatch = new PropPatch($props);
|
||||
|
||||
|
@ -207,6 +395,8 @@ class CustomPropertiesBackendTest extends TestCase {
|
|||
['foo_bar_path_1337', ['{DAV:}displayname' => 'foo'], ['{DAV:}displayname' => 'anything'], ['{DAV:}displayname' => 'anything']],
|
||||
['foo_bar_path_1337', ['{DAV:}displayname' => 'foo'], ['{DAV:}displayname' => null], []],
|
||||
[$longPath, [], ['{DAV:}displayname' => 'anything'], ['{DAV:}displayname' => 'anything']],
|
||||
['principals/users/dummy_user_42', [], ['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('foo/bar/')], ['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('foo/bar/')]],
|
||||
['principals/users/dummy_user_42', [], ['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href(self::BASE_URI . 'foo/bar/')], ['{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL' => new Href('foo/bar/')]],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ OC.L10N.register(
|
|||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "이 옵션을 사용하면 주 저장소에 있는 모드 파일을 암호화하며, 사용하지 않으면 외부 저장소의 파일만 암호화합니다",
|
||||
"Enable recovery key" : "복구 키 활성화",
|
||||
"Disable 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:" : "복구 키 암호 변경:",
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "이 옵션을 사용하면 주 저장소에 있는 모드 파일을 암호화하며, 사용하지 않으면 외부 저장소의 파일만 암호화합니다",
|
||||
"Enable recovery key" : "복구 키 활성화",
|
||||
"Disable 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:" : "복구 키 암호 변경:",
|
||||
|
|
|
@ -13,6 +13,7 @@ OC.L10N.register(
|
|||
"Federated Share request sent, you will receive an invitation. Check your notifications." : "クラウド共有リクエストが送信されました。招待が受信できます。通知を確認してください。",
|
||||
"Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "フェデレーション共有を確立できませんでした。連合するサーバーが古すぎます(Nextcloud <= 9)。",
|
||||
"It is not allowed to send federated group shares from this server." : "このサーバーからフェデレーショングループ共有を送信することはできません。",
|
||||
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "このアイテム %1$sはすでにアカウント %2$sと共有されているため、共有に失敗しました",
|
||||
"Federated shares require read permissions" : "フェデレーション共有には読み取り権限が必要です",
|
||||
"File is already shared with %s" : "ファイルはすでに %s と共有されています。",
|
||||
"Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "%1$s の共有に失敗しました。%2$s が見つかりませんでした。おそらくサーバーに接続できないか、自己証明書を使用しています。",
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
"Federated Share request sent, you will receive an invitation. Check your notifications." : "クラウド共有リクエストが送信されました。招待が受信できます。通知を確認してください。",
|
||||
"Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "フェデレーション共有を確立できませんでした。連合するサーバーが古すぎます(Nextcloud <= 9)。",
|
||||
"It is not allowed to send federated group shares from this server." : "このサーバーからフェデレーショングループ共有を送信することはできません。",
|
||||
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "このアイテム %1$sはすでにアカウント %2$sと共有されているため、共有に失敗しました",
|
||||
"Federated shares require read permissions" : "フェデレーション共有には読み取り権限が必要です",
|
||||
"File is already shared with %s" : "ファイルはすでに %s と共有されています。",
|
||||
"Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "%1$s の共有に失敗しました。%2$s が見つかりませんでした。おそらくサーバーに接続できないか、自己証明書を使用しています。",
|
||||
|
|
|
@ -13,6 +13,8 @@ OC.L10N.register(
|
|||
"Federated Share request sent, you will receive an invitation. Check your notifications." : "연합 공유 요청을 보냈으며 초대장을 받을 것입니다. 알림을 확인하십시오.",
|
||||
"Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "연합 공유를 설정할 수 없습니다. 연합하려고 하는 서버가 너무 오래되었습니다(Nextcloud 9 이하).",
|
||||
"It is not allowed to send federated group shares from this server." : "이 서버에서 연합 공유를 보낼 수 없습니다.",
|
||||
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s을(를) 공유할 수 없습니다. 이 항목을 이미 %2$s 계정과 공유하고 있습니다",
|
||||
"Not allowed to create a federated share to the same account" : "같은 계정과 연합 공유를 만들 수 없음",
|
||||
"Federated shares require read permissions" : "연합 공유는 읽기 권한이 필요합니다",
|
||||
"File is already shared with %s" : "파일이 %s와(과) 이미 공유됨",
|
||||
"Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "%1$s 공유 실패. %2$s을(를) 찾을 수 없습니다. 서버에 접근할 수 없거나 자가 서명된 인증서를 사용하고 있을 수도 있습니다.",
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
"Federated Share request sent, you will receive an invitation. Check your notifications." : "연합 공유 요청을 보냈으며 초대장을 받을 것입니다. 알림을 확인하십시오.",
|
||||
"Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "연합 공유를 설정할 수 없습니다. 연합하려고 하는 서버가 너무 오래되었습니다(Nextcloud 9 이하).",
|
||||
"It is not allowed to send federated group shares from this server." : "이 서버에서 연합 공유를 보낼 수 없습니다.",
|
||||
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s을(를) 공유할 수 없습니다. 이 항목을 이미 %2$s 계정과 공유하고 있습니다",
|
||||
"Not allowed to create a federated share to the same account" : "같은 계정과 연합 공유를 만들 수 없음",
|
||||
"Federated shares require read permissions" : "연합 공유는 읽기 권한이 필요합니다",
|
||||
"File is already shared with %s" : "파일이 %s와(과) 이미 공유됨",
|
||||
"Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "%1$s 공유 실패. %2$s을(를) 찾을 수 없습니다. 서버에 접근할 수 없거나 자가 서명된 인증서를 사용하고 있을 수도 있습니다.",
|
||||
|
|
|
@ -7,6 +7,9 @@ OC.L10N.register(
|
|||
"Could not add server" : "서버를 추가할 수 없음",
|
||||
"Trusted servers" : "신뢰할 수 있는 서버",
|
||||
"Federation" : "연합",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다.",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유 시 외부 계정을 자동 완성하는 데 사용할 수 있습니다.",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정의 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유시 외부 계정을 자동 완성하는 데에 사용될 수 있습니다. 연합 공유를 생성하기 위해 특정 서버를 신뢰할 수 있는 서버에 반드시 추가할 필요는 없습니다.",
|
||||
"+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가",
|
||||
"Trusted server" : "신뢰할 수 있는 서버",
|
||||
"Add" : "추가",
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
"Could not add server" : "서버를 추가할 수 없음",
|
||||
"Trusted servers" : "신뢰할 수 있는 서버",
|
||||
"Federation" : "연합",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다.",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유 시 외부 계정을 자동 완성하는 데 사용할 수 있습니다.",
|
||||
"Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정의 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유시 외부 계정을 자동 완성하는 데에 사용될 수 있습니다. 연합 공유를 생성하기 위해 특정 서버를 신뢰할 수 있는 서버에 반드시 추가할 필요는 없습니다.",
|
||||
"+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가",
|
||||
"Trusted server" : "신뢰할 수 있는 서버",
|
||||
"Add" : "추가",
|
||||
|
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(نسخ %n)",
|
||||
"Move cancelled" : "تمّ إلغاء النقل",
|
||||
"A file or folder with that name already exists in this folder" : "ملف أو مجلد بنفس ذاك الاسم موجود سلفاً في هذا المجلد",
|
||||
"The files is locked" : "الملفات مقفله",
|
||||
"The file does not exist anymore" : "الملف لم يعد موجوداً",
|
||||
"Choose destination" : "إختَر المَقصِد",
|
||||
"Copy to {target}" : "أُنسُخ إلى {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "البحث عن حساب",
|
||||
"Choose" : "إختَر",
|
||||
"No files or folders have been deleted yet" : "لم يتم حذف أي ملفات أو مجلدات بعدُ",
|
||||
"Add" : "أضِف"
|
||||
"Add" : "أضِف",
|
||||
"The files is locked" : "الملفات مقفله"
|
||||
},
|
||||
"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;");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(نسخ %n)",
|
||||
"Move cancelled" : "تمّ إلغاء النقل",
|
||||
"A file or folder with that name already exists in this folder" : "ملف أو مجلد بنفس ذاك الاسم موجود سلفاً في هذا المجلد",
|
||||
"The files is locked" : "الملفات مقفله",
|
||||
"The file does not exist anymore" : "الملف لم يعد موجوداً",
|
||||
"Choose destination" : "إختَر المَقصِد",
|
||||
"Copy to {target}" : "أُنسُخ إلى {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "البحث عن حساب",
|
||||
"Choose" : "إختَر",
|
||||
"No files or folders have been deleted yet" : "لم يتم حذف أي ملفات أو مجلدات بعدُ",
|
||||
"Add" : "أضِف"
|
||||
"Add" : "أضِف",
|
||||
"The files is locked" : "الملفات مقفله"
|
||||
},"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;"
|
||||
}
|
|
@ -91,9 +91,11 @@ OC.L10N.register(
|
|||
"\"/\" is not allowed inside a file name." : "«/» ye un caráuter que nun ta permitíu nel nome del ficheru.",
|
||||
"\"{name}\" is not an allowed filetype" : "«{name}» nun ye un tipu de ficheru permitíu",
|
||||
"Storage of {owner} is full, files cannot be updated or synced anymore!" : "L'almacenamientu del usuariu «{owner}» ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "La carpeta del grupu «{mountPoint}» ta enllena, ¡yá nun se puen xubir nin sincronizar ficheros!",
|
||||
"External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "L'almacenamientu esternu «{mountPoint}» ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Your storage is full, files cannot be updated or synced anymore!" : "El to almacenamientu ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Storage of {owner} is almost full ({usedSpacePercent}%)." : "L'almacenamientu del usuariu «{owner}» ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "La carpeta del grupu «{mountPoint}» ta cuasi enllena ({usedSpacePercent}%).",
|
||||
"External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "L'almacenamientu esternu «{mountPoint}» ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"Your storage is almost full ({usedSpacePercent}%)." : "El to almacenamientu ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["concasa con «{filter}»","concasen con «{filter}»"],
|
||||
|
@ -117,6 +119,7 @@ OC.L10N.register(
|
|||
"You added {file} to your favorites" : "Metiesti'l ficheru «{ficheru}» en Favoritos",
|
||||
"You removed {file} from your favorites" : "Quitesti'l ficheru «{file}» de Favoritos",
|
||||
"Favorites" : "Favoritos",
|
||||
"File changes" : "Cambeos del ficheru",
|
||||
"Created by {user}" : "Elementu creáu por {user}",
|
||||
"Changed by {user}" : "Elementu camudáu por {user}",
|
||||
"Deleted by {user}" : "Elementu desaniciáu por {user}",
|
||||
|
@ -139,7 +142,17 @@ OC.L10N.register(
|
|||
"{user} deleted an encrypted file in {file}" : "«{user}» desanició un ficheru cifráu de: {file}",
|
||||
"You restored {file}" : "Restauresti {file}",
|
||||
"{user} restored {file}" : "{user} restauró {file}",
|
||||
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Renomesti «{oldfile}» (elementu anubríu) a «{newfile}» (elementu anubríu)",
|
||||
"You renamed {oldfile} (hidden) to {newfile}" : "Renomesti «{oldfile}» (elementu anubríu) a «{newfile}»",
|
||||
"You renamed {oldfile} to {newfile} (hidden)" : "Renomesti «{oldfile}» a «{newfile}» (elementu anubríu)",
|
||||
"You renamed {oldfile} to {newfile}" : "Renomesti «{oldfile}» a «{newfile}»",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renomó «{oldfile}» (elementu anubríu) a {newfile} (elementu anubríu)",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renomó {oldfile} (elementu anubríu) a {newfile}",
|
||||
"{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renomó {oldfile} a {newfile} (elementu anubríu)",
|
||||
"{user} renamed {oldfile} to {newfile}" : "{user} renomó {oldfile} a {newfile}",
|
||||
"You moved {oldfile} to {newfile}" : "Moviesti {oldfile} a {newfile}",
|
||||
"A file or folder has been <strong>changed</strong>" : "Hai un ficheru o una carpeta que <strong>camudó</strong>",
|
||||
"A favorite file or folder has been <strong>changed</strong>" : "Hai un ficheru o una carpeta de Favoritos que <strong>camudó</strong>",
|
||||
"Accept" : "Aceptar",
|
||||
"Reject" : "Refugar",
|
||||
"Incoming ownership transfer from {user}" : "Recibióse una tresferencia de propiedá de: {user}",
|
||||
|
@ -175,6 +188,8 @@ OC.L10N.register(
|
|||
"Another entry with the same name already exists" : "Yá esiste otra entrada col mesmu nome",
|
||||
"Renamed \"{oldName}\" to \"{newName}\"" : "Renomóse «{oldName}» a «{newName}»",
|
||||
"Could not rename \"{oldName}\", it does not exist any more" : "Nun se pue renomar «{oldName}». Yá nun esiste",
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nome «{newName}» yá ta n'usu na carpeta «{dir}». Escueyi otru nome.",
|
||||
"Could not rename \"{oldName}\"" : "Nun se pudo renomar «{oldName}»",
|
||||
"Total rows summary" : "Resume total de fieleres",
|
||||
"Toggle selection for all files and folders" : "Alternar la seleición de tolos ficheros y toles carpetes",
|
||||
"\"{displayName}\" failed on some elements " : "«{displauName}» falló con dalgún elementu",
|
||||
|
@ -252,7 +267,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(copia %n)",
|
||||
"Move cancelled" : "Anulóse la operación de mover",
|
||||
"A file or folder with that name already exists in this folder" : "Nesta carpeta, yá estie un ficheru o una carpeta con esi nome",
|
||||
"The files is locked" : "El ficheru ta bloquiáu",
|
||||
"The file does not exist anymore" : "El ficheru yá nun esiste",
|
||||
"Choose destination" : "Escoyer el destín",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -322,6 +336,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Escoyer",
|
||||
"No files or folders have been deleted yet" : "Entá nun se desanició nengún ficheru nin carpeta",
|
||||
"Add" : "Amestar"
|
||||
"Add" : "Amestar",
|
||||
"The files is locked" : "El ficheru ta bloquiáu"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -89,9 +89,11 @@
|
|||
"\"/\" is not allowed inside a file name." : "«/» ye un caráuter que nun ta permitíu nel nome del ficheru.",
|
||||
"\"{name}\" is not an allowed filetype" : "«{name}» nun ye un tipu de ficheru permitíu",
|
||||
"Storage of {owner} is full, files cannot be updated or synced anymore!" : "L'almacenamientu del usuariu «{owner}» ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "La carpeta del grupu «{mountPoint}» ta enllena, ¡yá nun se puen xubir nin sincronizar ficheros!",
|
||||
"External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "L'almacenamientu esternu «{mountPoint}» ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Your storage is full, files cannot be updated or synced anymore!" : "El to almacenamientu ta enllén. ¡Yá nun se puen xubir o sincronizar ficheros!",
|
||||
"Storage of {owner} is almost full ({usedSpacePercent}%)." : "L'almacenamientu del usuariu «{owner}» ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "La carpeta del grupu «{mountPoint}» ta cuasi enllena ({usedSpacePercent}%).",
|
||||
"External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "L'almacenamientu esternu «{mountPoint}» ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"Your storage is almost full ({usedSpacePercent}%)." : "El to almacenamientu ta cuasi enllén ({usedSpacePercent}%).",
|
||||
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["concasa con «{filter}»","concasen con «{filter}»"],
|
||||
|
@ -115,6 +117,7 @@
|
|||
"You added {file} to your favorites" : "Metiesti'l ficheru «{ficheru}» en Favoritos",
|
||||
"You removed {file} from your favorites" : "Quitesti'l ficheru «{file}» de Favoritos",
|
||||
"Favorites" : "Favoritos",
|
||||
"File changes" : "Cambeos del ficheru",
|
||||
"Created by {user}" : "Elementu creáu por {user}",
|
||||
"Changed by {user}" : "Elementu camudáu por {user}",
|
||||
"Deleted by {user}" : "Elementu desaniciáu por {user}",
|
||||
|
@ -137,7 +140,17 @@
|
|||
"{user} deleted an encrypted file in {file}" : "«{user}» desanició un ficheru cifráu de: {file}",
|
||||
"You restored {file}" : "Restauresti {file}",
|
||||
"{user} restored {file}" : "{user} restauró {file}",
|
||||
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Renomesti «{oldfile}» (elementu anubríu) a «{newfile}» (elementu anubríu)",
|
||||
"You renamed {oldfile} (hidden) to {newfile}" : "Renomesti «{oldfile}» (elementu anubríu) a «{newfile}»",
|
||||
"You renamed {oldfile} to {newfile} (hidden)" : "Renomesti «{oldfile}» a «{newfile}» (elementu anubríu)",
|
||||
"You renamed {oldfile} to {newfile}" : "Renomesti «{oldfile}» a «{newfile}»",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renomó «{oldfile}» (elementu anubríu) a {newfile} (elementu anubríu)",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renomó {oldfile} (elementu anubríu) a {newfile}",
|
||||
"{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renomó {oldfile} a {newfile} (elementu anubríu)",
|
||||
"{user} renamed {oldfile} to {newfile}" : "{user} renomó {oldfile} a {newfile}",
|
||||
"You moved {oldfile} to {newfile}" : "Moviesti {oldfile} a {newfile}",
|
||||
"A file or folder has been <strong>changed</strong>" : "Hai un ficheru o una carpeta que <strong>camudó</strong>",
|
||||
"A favorite file or folder has been <strong>changed</strong>" : "Hai un ficheru o una carpeta de Favoritos que <strong>camudó</strong>",
|
||||
"Accept" : "Aceptar",
|
||||
"Reject" : "Refugar",
|
||||
"Incoming ownership transfer from {user}" : "Recibióse una tresferencia de propiedá de: {user}",
|
||||
|
@ -173,6 +186,8 @@
|
|||
"Another entry with the same name already exists" : "Yá esiste otra entrada col mesmu nome",
|
||||
"Renamed \"{oldName}\" to \"{newName}\"" : "Renomóse «{oldName}» a «{newName}»",
|
||||
"Could not rename \"{oldName}\", it does not exist any more" : "Nun se pue renomar «{oldName}». Yá nun esiste",
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nome «{newName}» yá ta n'usu na carpeta «{dir}». Escueyi otru nome.",
|
||||
"Could not rename \"{oldName}\"" : "Nun se pudo renomar «{oldName}»",
|
||||
"Total rows summary" : "Resume total de fieleres",
|
||||
"Toggle selection for all files and folders" : "Alternar la seleición de tolos ficheros y toles carpetes",
|
||||
"\"{displayName}\" failed on some elements " : "«{displauName}» falló con dalgún elementu",
|
||||
|
@ -250,7 +265,6 @@
|
|||
"(copy %n)" : "(copia %n)",
|
||||
"Move cancelled" : "Anulóse la operación de mover",
|
||||
"A file or folder with that name already exists in this folder" : "Nesta carpeta, yá estie un ficheru o una carpeta con esi nome",
|
||||
"The files is locked" : "El ficheru ta bloquiáu",
|
||||
"The file does not exist anymore" : "El ficheru yá nun esiste",
|
||||
"Choose destination" : "Escoyer el destín",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -320,6 +334,7 @@
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Escoyer",
|
||||
"No files or folders have been deleted yet" : "Entá nun se desanició nengún ficheru nin carpeta",
|
||||
"Add" : "Amestar"
|
||||
"Add" : "Amestar",
|
||||
"The files is locked" : "El ficheru ta bloquiáu"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(còpia %n)",
|
||||
"Move cancelled" : "S'ha cancel·lat el desplaçament",
|
||||
"A file or folder with that name already exists in this folder" : "Ja existeix un fitxer o carpeta amb aquest nom en aquesta carpeta",
|
||||
"The files is locked" : "El fitxer està blocat",
|
||||
"The file does not exist anymore" : "El fitxer ja no existeix",
|
||||
"Choose destination" : "Trieu una destinació",
|
||||
"Copy to {target}" : "Copia a {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Cerqueu un compte",
|
||||
"Choose" : "Tria",
|
||||
"No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta",
|
||||
"Add" : "Afegeix"
|
||||
"Add" : "Afegeix",
|
||||
"The files is locked" : "El fitxer està blocat"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(còpia %n)",
|
||||
"Move cancelled" : "S'ha cancel·lat el desplaçament",
|
||||
"A file or folder with that name already exists in this folder" : "Ja existeix un fitxer o carpeta amb aquest nom en aquesta carpeta",
|
||||
"The files is locked" : "El fitxer està blocat",
|
||||
"The file does not exist anymore" : "El fitxer ja no existeix",
|
||||
"Choose destination" : "Trieu una destinació",
|
||||
"Copy to {target}" : "Copia a {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Cerqueu un compte",
|
||||
"Choose" : "Tria",
|
||||
"No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta",
|
||||
"Add" : "Afegeix"
|
||||
"Add" : "Afegeix",
|
||||
"The files is locked" : "El fitxer està blocat"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -255,7 +255,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "V oné složce se už daný soubor/složka nachází",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Není možné přesunout soubor/složku do sebe samé nebo do své vlastní podložky",
|
||||
"A file or folder with that name already exists in this folder" : "V této složce už existuje stejnojmenný soubor či složka",
|
||||
"The files is locked" : "Soubory jsou uzamčené",
|
||||
"The file does not exist anymore" : "Soubor už neexistuje",
|
||||
"Choose destination" : "Vyberte cíl",
|
||||
"Copy to {target}" : "Zkopírovat do {target}",
|
||||
|
@ -319,6 +318,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Hledat účet",
|
||||
"Choose" : "Vybrat",
|
||||
"No files or folders have been deleted yet" : "Zatím nebyly smazány žádné soubory či složky",
|
||||
"Add" : "Přidat"
|
||||
"Add" : "Přidat",
|
||||
"The files is locked" : "Soubory jsou uzamčené"
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
|
||||
|
|
|
@ -253,7 +253,6 @@
|
|||
"This file/folder is already in that directory" : "V oné složce se už daný soubor/složka nachází",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Není možné přesunout soubor/složku do sebe samé nebo do své vlastní podložky",
|
||||
"A file or folder with that name already exists in this folder" : "V této složce už existuje stejnojmenný soubor či složka",
|
||||
"The files is locked" : "Soubory jsou uzamčené",
|
||||
"The file does not exist anymore" : "Soubor už neexistuje",
|
||||
"Choose destination" : "Vyberte cíl",
|
||||
"Copy to {target}" : "Zkopírovat do {target}",
|
||||
|
@ -317,6 +316,7 @@
|
|||
"Search for an account" : "Hledat účet",
|
||||
"Choose" : "Vybrat",
|
||||
"No files or folders have been deleted yet" : "Zatím nebyly smazány žádné soubory či složky",
|
||||
"Add" : "Přidat"
|
||||
"Add" : "Přidat",
|
||||
"The files is locked" : "Soubory jsou uzamčené"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
}
|
|
@ -244,7 +244,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Filen/mappen er allerede i denne mappe",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan ikke flytte en fil/mappe ind i sig selv, eller til en mappe inden i sig selv",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navn findes allerede i denne mappe",
|
||||
"The files is locked" : "Filerne er låste",
|
||||
"The file does not exist anymore" : "Filen findes ikke længere",
|
||||
"Copy to {target}" : "Kopiér til {target}",
|
||||
"Move to {target}" : "Flyt til {target}",
|
||||
|
@ -305,6 +304,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Søg efter en konto",
|
||||
"Choose" : "Vælg",
|
||||
"No files or folders have been deleted yet" : "Ingen filer eller mappe er slettet endnu",
|
||||
"Add" : "Tilføj"
|
||||
"Add" : "Tilføj",
|
||||
"The files is locked" : "Filerne er låste"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -242,7 +242,6 @@
|
|||
"This file/folder is already in that directory" : "Filen/mappen er allerede i denne mappe",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan ikke flytte en fil/mappe ind i sig selv, eller til en mappe inden i sig selv",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navn findes allerede i denne mappe",
|
||||
"The files is locked" : "Filerne er låste",
|
||||
"The file does not exist anymore" : "Filen findes ikke længere",
|
||||
"Copy to {target}" : "Kopiér til {target}",
|
||||
"Move to {target}" : "Flyt til {target}",
|
||||
|
@ -303,6 +302,7 @@
|
|||
"Search for an account" : "Søg efter en konto",
|
||||
"Choose" : "Vælg",
|
||||
"No files or folders have been deleted yet" : "Ingen filer eller mappe er slettet endnu",
|
||||
"Add" : "Tilføj"
|
||||
"Add" : "Tilføj",
|
||||
"The files is locked" : "Filerne er låste"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -251,7 +251,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Diese Datei oder Ordner ist bereits in diesem Verzeichnis vorhanden",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Eine Datei oder ein Ordner kann nicht auf sich selbst oder in einen Unterordner von sich selbst verschoben werden.",
|
||||
"A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
|
||||
"The files is locked" : "Die Datei ist gesperrt",
|
||||
"The file does not exist anymore" : "Die Datei existiert nicht mehr",
|
||||
"Copy to {target}" : "Nach {target} kopieren",
|
||||
"Move to {target}" : "Nach {target} verschieben",
|
||||
|
@ -314,6 +313,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Nach einem Konto suchen",
|
||||
"Choose" : "Auswählen",
|
||||
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
|
||||
"Add" : "Hinzufügen"
|
||||
"Add" : "Hinzufügen",
|
||||
"The files is locked" : "Die Datei ist gesperrt"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -249,7 +249,6 @@
|
|||
"This file/folder is already in that directory" : "Diese Datei oder Ordner ist bereits in diesem Verzeichnis vorhanden",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Eine Datei oder ein Ordner kann nicht auf sich selbst oder in einen Unterordner von sich selbst verschoben werden.",
|
||||
"A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
|
||||
"The files is locked" : "Die Datei ist gesperrt",
|
||||
"The file does not exist anymore" : "Die Datei existiert nicht mehr",
|
||||
"Copy to {target}" : "Nach {target} kopieren",
|
||||
"Move to {target}" : "Nach {target} verschieben",
|
||||
|
@ -312,6 +311,7 @@
|
|||
"Search for an account" : "Nach einem Konto suchen",
|
||||
"Choose" : "Auswählen",
|
||||
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
|
||||
"Add" : "Hinzufügen"
|
||||
"Add" : "Hinzufügen",
|
||||
"The files is locked" : "Die Datei ist gesperrt"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(%n kopieren)",
|
||||
"Move cancelled" : "Verschieben abgebrochen",
|
||||
"A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
|
||||
"The files is locked" : "Die Datei ist gesperrt",
|
||||
"The file does not exist anymore" : "Diese Datei existiert nicht mehr",
|
||||
"Choose destination" : "Ziel wählen",
|
||||
"Copy to {target}" : "Nach {target} kopieren",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Nach einem Konto suchen",
|
||||
"Choose" : "Auswählen",
|
||||
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
|
||||
"Add" : "Hinzufügen"
|
||||
"Add" : "Hinzufügen",
|
||||
"The files is locked" : "Die Datei ist gesperrt"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(%n kopieren)",
|
||||
"Move cancelled" : "Verschieben abgebrochen",
|
||||
"A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
|
||||
"The files is locked" : "Die Datei ist gesperrt",
|
||||
"The file does not exist anymore" : "Diese Datei existiert nicht mehr",
|
||||
"Choose destination" : "Ziel wählen",
|
||||
"Copy to {target}" : "Nach {target} kopieren",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Nach einem Konto suchen",
|
||||
"Choose" : "Auswählen",
|
||||
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
|
||||
"Add" : "Hinzufügen"
|
||||
"Add" : "Hinzufügen",
|
||||
"The files is locked" : "Die Datei ist gesperrt"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -250,7 +250,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Αυτό το αρχείο/φάκελος βρίσκεται ήδη σε αυτόν τον κατάλογο",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Δεν μπορείτε να μετακινήσετε ένα αρχείο/φάκελο στον εαυτό του ή σε έναν υποφάκελο του ίδιου του φακέλου.",
|
||||
"A file or folder with that name already exists in this folder" : "Ένα αρχείο ή ένας φάκελος με αυτό το όνομα υπάρχει ήδη σε αυτόν το φάκελο",
|
||||
"The files is locked" : "Το αρχείο είναι κλειδωμένο",
|
||||
"The file does not exist anymore" : "Το αρχείο δεν υπάρχει πλέον",
|
||||
"Choose destination" : "Επιλέξτε προορισμό",
|
||||
"Copy to {target}" : "Αντιγραφή σε {target}",
|
||||
|
@ -312,6 +311,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Αναζήτηση για λογαριασμό",
|
||||
"Choose" : "Επιλογή",
|
||||
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα",
|
||||
"Add" : "Προσθήκη"
|
||||
"Add" : "Προσθήκη",
|
||||
"The files is locked" : "Το αρχείο είναι κλειδωμένο"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -248,7 +248,6 @@
|
|||
"This file/folder is already in that directory" : "Αυτό το αρχείο/φάκελος βρίσκεται ήδη σε αυτόν τον κατάλογο",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Δεν μπορείτε να μετακινήσετε ένα αρχείο/φάκελο στον εαυτό του ή σε έναν υποφάκελο του ίδιου του φακέλου.",
|
||||
"A file or folder with that name already exists in this folder" : "Ένα αρχείο ή ένας φάκελος με αυτό το όνομα υπάρχει ήδη σε αυτόν το φάκελο",
|
||||
"The files is locked" : "Το αρχείο είναι κλειδωμένο",
|
||||
"The file does not exist anymore" : "Το αρχείο δεν υπάρχει πλέον",
|
||||
"Choose destination" : "Επιλέξτε προορισμό",
|
||||
"Copy to {target}" : "Αντιγραφή σε {target}",
|
||||
|
@ -310,6 +309,7 @@
|
|||
"Search for an account" : "Αναζήτηση για λογαριασμό",
|
||||
"Choose" : "Επιλογή",
|
||||
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα",
|
||||
"Add" : "Προσθήκη"
|
||||
"Add" : "Προσθήκη",
|
||||
"The files is locked" : "Το αρχείο είναι κλειδωμένο"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(copy %n)",
|
||||
"Move cancelled" : "Move cancelled",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The files is locked" : "The files is locked",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Search for an account",
|
||||
"Choose" : "Choose",
|
||||
"No files or folders have been deleted yet" : "No files or folders have been deleted yet",
|
||||
"Add" : "Add"
|
||||
"Add" : "Add",
|
||||
"The files is locked" : "The files is locked"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(copy %n)",
|
||||
"Move cancelled" : "Move cancelled",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The files is locked" : "The files is locked",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Search for an account",
|
||||
"Choose" : "Choose",
|
||||
"No files or folders have been deleted yet" : "No files or folders have been deleted yet",
|
||||
"Add" : "Add"
|
||||
"Add" : "Add",
|
||||
"The files is locked" : "The files is locked"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -38,6 +38,9 @@ OC.L10N.register(
|
|||
"Edit locally" : "Editar localmente",
|
||||
"Open" : "Abrir",
|
||||
"_Delete file_::_Delete files_" : ["Eliminar archivo","Eliminar archivos","Eliminar archivos"],
|
||||
"_Delete folder_::_Delete folders_" : ["Eliminar carpeta","Eliminar carpetas","Eliminar carpetas"],
|
||||
"_Disconnect storage_::_Disconnect storages_" : ["Desconectar almacenamiento","Desconectar almacenamientos","Desconectar almacenamientos"],
|
||||
"_Leave this share_::_Leave these shares_" : ["Abandonar este recurso compartido","Abandonar estos recursos compartidos","Abandonar estos recursos compartidos"],
|
||||
"Could not load info for file \"{file}\"" : "No se ha podido cargar información para el archivo \"{file}\"",
|
||||
"Files" : "Archivos",
|
||||
"Details" : "Detalles",
|
||||
|
@ -98,10 +101,12 @@ OC.L10N.register(
|
|||
"Your storage is almost full ({usedSpacePercent}%)." : "Tu almacenamiento está casi lleno ({usedSpacePercent}%).",
|
||||
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["coinciden \"{filter}\"","coincide \"{filter}\"","coincide \"{filter}\""],
|
||||
"View in folder" : "Ver en carpeta",
|
||||
"Direct link was copied (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
|
||||
"Path" : "Ruta",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
|
||||
"Favorited" : "Agregado a favoritos",
|
||||
"Favorite" : "Favorito",
|
||||
"Copy direct link (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
|
||||
"New folder" : "Nueva carpeta",
|
||||
"Create new folder" : "Crear carpeta nueva",
|
||||
"Upload file" : "Subir archivo",
|
||||
|
@ -122,6 +127,7 @@ OC.L10N.register(
|
|||
"Restored by {user}" : "Restaurado por {user}",
|
||||
"Renamed by {user}" : "Renombrado por {user}",
|
||||
"Moved by {user}" : "Movido por {user}",
|
||||
"\"remote account\"" : "\"cuenta remota\"",
|
||||
"You created {file}" : "Ha creado {file}",
|
||||
"You created an encrypted file in {file}" : "Has creado un archivo cifrado en {file}",
|
||||
"{user} created {file}" : "{user} ha creado {file}",
|
||||
|
@ -169,6 +175,8 @@ OC.L10N.register(
|
|||
"Drag and drop files here to upload" : "Arrastre y suelte archivos aquí para subirlos",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Ha utilizado su cuota de espacio y ya no puede subir más archivos",
|
||||
"You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí",
|
||||
"Some files could not be uploaded" : "No se pudieron subir algunos archivos",
|
||||
"Files uploaded successfully" : "Se subieron los archivos exitosamente",
|
||||
"\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
|
||||
"\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
|
||||
"Toggle selection for file \"{displayName}\"" : "Alternar selección para archivo \"{displayName}\"",
|
||||
|
@ -201,6 +209,7 @@ OC.L10N.register(
|
|||
"Could not refresh storage stats" : "No fue posible refrescar las estadísticas de almacenamiento",
|
||||
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡Ya no se pueden subir ni sincronizarse más archivos!",
|
||||
"Create" : "Crear",
|
||||
"A file or folder with that name already exists." : "Un archivo o carpeta con ese nombre ya existe.",
|
||||
"Transfer ownership of a file or folder" : "Transferir la propiedad de un archivo o carpeta",
|
||||
"Choose file or folder to transfer" : "Elegir archivo o carpeta para transferir",
|
||||
"Change" : "Cambiar",
|
||||
|
@ -254,15 +263,17 @@ OC.L10N.register(
|
|||
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
|
||||
"Delete permanently" : "Eliminar de forma permanente",
|
||||
"Delete and unshare" : "Eliminar y dejar de compartir",
|
||||
"You are about to delete {count} items." : "Está a punto de eliminar {count} ítems.",
|
||||
"Confirm deletion" : "Confirmar eliminación",
|
||||
"Cancel" : "Cancelar",
|
||||
"Deletion cancelled" : "Eliminación cancelada",
|
||||
"Destination is not a folder" : "El destino no es una carpeta",
|
||||
"This file/folder is already in that directory" : "Este archivo/carpeta ya está en ese directorio",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "No puede mover un archivo/carpeta a sí mismo o a una sub-carpeta de sí mismo",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"Move cancelled" : "Se canceló la movida",
|
||||
"A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
|
||||
"The files is locked" : "El archivo está bloqueado",
|
||||
"The file does not exist anymore" : "El archivo ya no existe",
|
||||
"Choose destination" : "Elegir destino",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -272,6 +283,7 @@ OC.L10N.register(
|
|||
"Open folder {displayName}" : "Abrir carpeta {displayName}",
|
||||
"Open in Files" : "Abrir en Archivos",
|
||||
"Open details" : "Abrir detalles",
|
||||
"An error occurred while uploading. Please try again later." : "Ocurrió un error mientras se hacía la subida. Por favor, inténtelo de nuevo más tarde.",
|
||||
"Could not copy {file}. {message}" : "No se pudo copiar {file}. {message}",
|
||||
"Could not move {file}. {message}" : "No se pudo mover {file}. {message}",
|
||||
"Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
|
||||
|
@ -279,6 +291,7 @@ OC.L10N.register(
|
|||
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
|
||||
"Create new templates folder" : "Crear nueva carpeta de plantillas",
|
||||
"Templates" : "Plantillas",
|
||||
"New template folder" : "Nueva carpeta de plantillas",
|
||||
"One of the dropped files could not be processed" : "Uno de los archivos arrastrados no puede ser procesado",
|
||||
"Uploading \"{filename}\" failed" : "La subida de \"{filename}\" falló",
|
||||
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetas","{folderCount} carpetas"],
|
||||
|
@ -291,6 +304,10 @@ OC.L10N.register(
|
|||
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
|
||||
"All files" : "Todos los archivos",
|
||||
"List of your files and folders." : "Lista de sus archivos y carpetas.",
|
||||
"Personal Files" : "Archivos Personales",
|
||||
"List of your files and folders that are not shared." : "Lista de sus archivos y carpetas que no están compartidos.",
|
||||
"No personal files found" : "No se encontraron archivos personales",
|
||||
"Files that are not shared will show up here." : "Los archivos y carpetas que no ha compartido aparecerán aquí.",
|
||||
"List of recently modified files and folders." : "Lista de archivos y carpetas modificados recientemente.",
|
||||
"No recently modified files" : "No hay archivos modificados recientemente.",
|
||||
"Files and folders you recently modified will show up here." : "Los archivos y carpetas que ha modificado recientemente aparecerán aquí.",
|
||||
|
@ -327,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Seleccione",
|
||||
"No files or folders have been deleted yet" : "No se han borrado archivos o carpetas todavía",
|
||||
"Add" : "Añadir"
|
||||
"Add" : "Añadir",
|
||||
"The files is locked" : "El archivo está bloqueado"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
"Edit locally" : "Editar localmente",
|
||||
"Open" : "Abrir",
|
||||
"_Delete file_::_Delete files_" : ["Eliminar archivo","Eliminar archivos","Eliminar archivos"],
|
||||
"_Delete folder_::_Delete folders_" : ["Eliminar carpeta","Eliminar carpetas","Eliminar carpetas"],
|
||||
"_Disconnect storage_::_Disconnect storages_" : ["Desconectar almacenamiento","Desconectar almacenamientos","Desconectar almacenamientos"],
|
||||
"_Leave this share_::_Leave these shares_" : ["Abandonar este recurso compartido","Abandonar estos recursos compartidos","Abandonar estos recursos compartidos"],
|
||||
"Could not load info for file \"{file}\"" : "No se ha podido cargar información para el archivo \"{file}\"",
|
||||
"Files" : "Archivos",
|
||||
"Details" : "Detalles",
|
||||
|
@ -96,10 +99,12 @@
|
|||
"Your storage is almost full ({usedSpacePercent}%)." : "Tu almacenamiento está casi lleno ({usedSpacePercent}%).",
|
||||
"_matches \"{filter}\"_::_match \"{filter}\"_" : ["coinciden \"{filter}\"","coincide \"{filter}\"","coincide \"{filter}\""],
|
||||
"View in folder" : "Ver en carpeta",
|
||||
"Direct link was copied (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
|
||||
"Path" : "Ruta",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
|
||||
"Favorited" : "Agregado a favoritos",
|
||||
"Favorite" : "Favorito",
|
||||
"Copy direct link (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
|
||||
"New folder" : "Nueva carpeta",
|
||||
"Create new folder" : "Crear carpeta nueva",
|
||||
"Upload file" : "Subir archivo",
|
||||
|
@ -120,6 +125,7 @@
|
|||
"Restored by {user}" : "Restaurado por {user}",
|
||||
"Renamed by {user}" : "Renombrado por {user}",
|
||||
"Moved by {user}" : "Movido por {user}",
|
||||
"\"remote account\"" : "\"cuenta remota\"",
|
||||
"You created {file}" : "Ha creado {file}",
|
||||
"You created an encrypted file in {file}" : "Has creado un archivo cifrado en {file}",
|
||||
"{user} created {file}" : "{user} ha creado {file}",
|
||||
|
@ -167,6 +173,8 @@
|
|||
"Drag and drop files here to upload" : "Arrastre y suelte archivos aquí para subirlos",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Ha utilizado su cuota de espacio y ya no puede subir más archivos",
|
||||
"You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí",
|
||||
"Some files could not be uploaded" : "No se pudieron subir algunos archivos",
|
||||
"Files uploaded successfully" : "Se subieron los archivos exitosamente",
|
||||
"\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
|
||||
"\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
|
||||
"Toggle selection for file \"{displayName}\"" : "Alternar selección para archivo \"{displayName}\"",
|
||||
|
@ -199,6 +207,7 @@
|
|||
"Could not refresh storage stats" : "No fue posible refrescar las estadísticas de almacenamiento",
|
||||
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡Ya no se pueden subir ni sincronizarse más archivos!",
|
||||
"Create" : "Crear",
|
||||
"A file or folder with that name already exists." : "Un archivo o carpeta con ese nombre ya existe.",
|
||||
"Transfer ownership of a file or folder" : "Transferir la propiedad de un archivo o carpeta",
|
||||
"Choose file or folder to transfer" : "Elegir archivo o carpeta para transferir",
|
||||
"Change" : "Cambiar",
|
||||
|
@ -252,15 +261,17 @@
|
|||
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
|
||||
"Delete permanently" : "Eliminar de forma permanente",
|
||||
"Delete and unshare" : "Eliminar y dejar de compartir",
|
||||
"You are about to delete {count} items." : "Está a punto de eliminar {count} ítems.",
|
||||
"Confirm deletion" : "Confirmar eliminación",
|
||||
"Cancel" : "Cancelar",
|
||||
"Deletion cancelled" : "Eliminación cancelada",
|
||||
"Destination is not a folder" : "El destino no es una carpeta",
|
||||
"This file/folder is already in that directory" : "Este archivo/carpeta ya está en ese directorio",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "No puede mover un archivo/carpeta a sí mismo o a una sub-carpeta de sí mismo",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"Move cancelled" : "Se canceló la movida",
|
||||
"A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
|
||||
"The files is locked" : "El archivo está bloqueado",
|
||||
"The file does not exist anymore" : "El archivo ya no existe",
|
||||
"Choose destination" : "Elegir destino",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -270,6 +281,7 @@
|
|||
"Open folder {displayName}" : "Abrir carpeta {displayName}",
|
||||
"Open in Files" : "Abrir en Archivos",
|
||||
"Open details" : "Abrir detalles",
|
||||
"An error occurred while uploading. Please try again later." : "Ocurrió un error mientras se hacía la subida. Por favor, inténtelo de nuevo más tarde.",
|
||||
"Could not copy {file}. {message}" : "No se pudo copiar {file}. {message}",
|
||||
"Could not move {file}. {message}" : "No se pudo mover {file}. {message}",
|
||||
"Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
|
||||
|
@ -277,6 +289,7 @@
|
|||
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
|
||||
"Create new templates folder" : "Crear nueva carpeta de plantillas",
|
||||
"Templates" : "Plantillas",
|
||||
"New template folder" : "Nueva carpeta de plantillas",
|
||||
"One of the dropped files could not be processed" : "Uno de los archivos arrastrados no puede ser procesado",
|
||||
"Uploading \"{filename}\" failed" : "La subida de \"{filename}\" falló",
|
||||
"_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetas","{folderCount} carpetas"],
|
||||
|
@ -289,6 +302,10 @@
|
|||
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
|
||||
"All files" : "Todos los archivos",
|
||||
"List of your files and folders." : "Lista de sus archivos y carpetas.",
|
||||
"Personal Files" : "Archivos Personales",
|
||||
"List of your files and folders that are not shared." : "Lista de sus archivos y carpetas que no están compartidos.",
|
||||
"No personal files found" : "No se encontraron archivos personales",
|
||||
"Files that are not shared will show up here." : "Los archivos y carpetas que no ha compartido aparecerán aquí.",
|
||||
"List of recently modified files and folders." : "Lista de archivos y carpetas modificados recientemente.",
|
||||
"No recently modified files" : "No hay archivos modificados recientemente.",
|
||||
"Files and folders you recently modified will show up here." : "Los archivos y carpetas que ha modificado recientemente aparecerán aquí.",
|
||||
|
@ -325,6 +342,7 @@
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Seleccione",
|
||||
"No files or folders have been deleted yet" : "No se han borrado archivos o carpetas todavía",
|
||||
"Add" : "Añadir"
|
||||
"Add" : "Añadir",
|
||||
"The files is locked" : "El archivo está bloqueado"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
|
@ -273,7 +273,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
|
||||
"The files is locked" : "El archivo está bloqueado",
|
||||
"The file does not exist anymore" : "El archivo ya no existe",
|
||||
"Choose destination" : "Elegir destino",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -344,6 +343,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Seleccionar",
|
||||
"No files or folders have been deleted yet" : "No se han eliminado archivos o carpetas todavía",
|
||||
"Add" : "Guardar"
|
||||
"Add" : "Guardar",
|
||||
"The files is locked" : "El archivo está bloqueado"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
|
|
@ -271,7 +271,6 @@
|
|||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
|
||||
"The files is locked" : "El archivo está bloqueado",
|
||||
"The file does not exist anymore" : "El archivo ya no existe",
|
||||
"Choose destination" : "Elegir destino",
|
||||
"Copy to {target}" : "Copiar a {target}",
|
||||
|
@ -342,6 +341,7 @@
|
|||
"Search for an account" : "Buscar una cuenta",
|
||||
"Choose" : "Seleccionar",
|
||||
"No files or folders have been deleted yet" : "No se han eliminado archivos o carpetas todavía",
|
||||
"Add" : "Guardar"
|
||||
"Add" : "Guardar",
|
||||
"The files is locked" : "El archivo está bloqueado"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
|
@ -269,7 +269,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(kopiatu)",
|
||||
"(copy %n)" : "(kopiatu %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Izen hori duen fitxategi edo karpeta bat dago karpena honetan",
|
||||
"The files is locked" : "Fixategiak blokeatuta dago",
|
||||
"The file does not exist anymore" : "Fitxategia ez da existizen dagoeneko",
|
||||
"Choose destination" : "Aukeratu helburua",
|
||||
"Copy to {target}" : "Kopiatu hona: {target}",
|
||||
|
@ -334,6 +333,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Bilatu kontu bat",
|
||||
"Choose" : "Aukeratu",
|
||||
"No files or folders have been deleted yet" : "Oraindik ez da ezabatu fitxategirik edo karpetarik",
|
||||
"Add" : "Gehitu"
|
||||
"Add" : "Gehitu",
|
||||
"The files is locked" : "Fixategiak blokeatuta dago"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -267,7 +267,6 @@
|
|||
"(copy)" : "(kopiatu)",
|
||||
"(copy %n)" : "(kopiatu %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Izen hori duen fitxategi edo karpeta bat dago karpena honetan",
|
||||
"The files is locked" : "Fixategiak blokeatuta dago",
|
||||
"The file does not exist anymore" : "Fitxategia ez da existizen dagoeneko",
|
||||
"Choose destination" : "Aukeratu helburua",
|
||||
"Copy to {target}" : "Kopiatu hona: {target}",
|
||||
|
@ -332,6 +331,7 @@
|
|||
"Search for an account" : "Bilatu kontu bat",
|
||||
"Choose" : "Aukeratu",
|
||||
"No files or folders have been deleted yet" : "Oraindik ez da ezabatu fitxategirik edo karpetarik",
|
||||
"Add" : "Gehitu"
|
||||
"Add" : "Gehitu",
|
||||
"The files is locked" : "Fixategiak blokeatuta dago"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(copier %n)",
|
||||
"Move cancelled" : "Déplacement annulé",
|
||||
"A file or folder with that name already exists in this folder" : "Un fichier ou un dossier portant ce nom existe déjà dans ce dossier",
|
||||
"The files is locked" : "Le fichier est verrouillé",
|
||||
"The file does not exist anymore" : "Le fichier n'existe plus",
|
||||
"Choose destination" : "Choisir la destination",
|
||||
"Copy to {target}" : "Copier vers {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Chercher un compte",
|
||||
"Choose" : "Choisir",
|
||||
"No files or folders have been deleted yet" : "Aucun fichier ou dossier n'a encore été supprimé",
|
||||
"Add" : "Ajouter"
|
||||
"Add" : "Ajouter",
|
||||
"The files is locked" : "Le fichier est verrouillé"
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(copier %n)",
|
||||
"Move cancelled" : "Déplacement annulé",
|
||||
"A file or folder with that name already exists in this folder" : "Un fichier ou un dossier portant ce nom existe déjà dans ce dossier",
|
||||
"The files is locked" : "Le fichier est verrouillé",
|
||||
"The file does not exist anymore" : "Le fichier n'existe plus",
|
||||
"Choose destination" : "Choisir la destination",
|
||||
"Copy to {target}" : "Copier vers {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Chercher un compte",
|
||||
"Choose" : "Choisir",
|
||||
"No files or folders have been deleted yet" : "Aucun fichier ou dossier n'a encore été supprimé",
|
||||
"Add" : "Ajouter"
|
||||
"Add" : "Ajouter",
|
||||
"The files is locked" : "Le fichier est verrouillé"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
|
@ -252,7 +252,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Este ficheiro/cartafol xa está nese directorio",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Non é posíbel mover un ficheiro/cartafol sobre si mesmo ou a un subcartafol de si mesmo",
|
||||
"A file or folder with that name already exists in this folder" : "Neste cartafol xa existe un ficheiro ou cartafol con ese nome",
|
||||
"The files is locked" : "Os ficheiros están bloqueados",
|
||||
"The file does not exist anymore" : "O ficheiro xa non existe",
|
||||
"Copy to {target}" : "Copiar en {target}",
|
||||
"Move to {target}" : "Mover a {target}",
|
||||
|
@ -315,6 +314,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Buscar por unha conta",
|
||||
"Choose" : "Escoller",
|
||||
"No files or folders have been deleted yet" : "Aínda non se eliminou ningún ficheiro nin cartafol",
|
||||
"Add" : "Engadir"
|
||||
"Add" : "Engadir",
|
||||
"The files is locked" : "Os ficheiros están bloqueados"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -250,7 +250,6 @@
|
|||
"This file/folder is already in that directory" : "Este ficheiro/cartafol xa está nese directorio",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Non é posíbel mover un ficheiro/cartafol sobre si mesmo ou a un subcartafol de si mesmo",
|
||||
"A file or folder with that name already exists in this folder" : "Neste cartafol xa existe un ficheiro ou cartafol con ese nome",
|
||||
"The files is locked" : "Os ficheiros están bloqueados",
|
||||
"The file does not exist anymore" : "O ficheiro xa non existe",
|
||||
"Copy to {target}" : "Copiar en {target}",
|
||||
"Move to {target}" : "Mover a {target}",
|
||||
|
@ -313,6 +312,7 @@
|
|||
"Search for an account" : "Buscar por unha conta",
|
||||
"Choose" : "Escoller",
|
||||
"No files or folders have been deleted yet" : "Aínda non se eliminou ningún ficheiro nin cartafol",
|
||||
"Add" : "Engadir"
|
||||
"Add" : "Engadir",
|
||||
"The files is locked" : "Os ficheiros están bloqueados"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -251,7 +251,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
|
||||
"A file or folder with that name already exists in this folder" : "Már létezik ilyen nevű fájl vagy mappa ebben a mappában",
|
||||
"The files is locked" : "Ez a fájl zárolva van",
|
||||
"The file does not exist anymore" : "Ez a fájl már nem létezik",
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
|
@ -314,6 +313,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Fiók keresése",
|
||||
"Choose" : "Válasszon",
|
||||
"No files or folders have been deleted yet" : "Még nem lettek fájlok vagy mappák törölve",
|
||||
"Add" : "Hozzáadás"
|
||||
"Add" : "Hozzáadás",
|
||||
"The files is locked" : "Ez a fájl zárolva van"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -249,7 +249,6 @@
|
|||
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
|
||||
"A file or folder with that name already exists in this folder" : "Már létezik ilyen nevű fájl vagy mappa ebben a mappában",
|
||||
"The files is locked" : "Ez a fájl zárolva van",
|
||||
"The file does not exist anymore" : "Ez a fájl már nem létezik",
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
|
@ -312,6 +311,7 @@
|
|||
"Search for an account" : "Fiók keresése",
|
||||
"Choose" : "Válasszon",
|
||||
"No files or folders have been deleted yet" : "Még nem lettek fájlok vagy mappák törölve",
|
||||
"Add" : "Hozzáadás"
|
||||
"Add" : "Hozzáadás",
|
||||
"The files is locked" : "Ez a fájl zárolva van"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -250,7 +250,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Þessi skrá/mappa er þegar í þessari möppu",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Þú getur ekki flutt skrá/möppu inn í sjálfa sig eða inni í undirmöppu af sjálfri sér",
|
||||
"A file or folder with that name already exists in this folder" : "Skrá eða mappa með þessu heiti er þegar til staðar í þessari möppu",
|
||||
"The files is locked" : "Skráin er læst",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
|
@ -313,6 +312,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Leita að notandaaðgangi",
|
||||
"Choose" : "Velja",
|
||||
"No files or folders have been deleted yet" : "Engum skrám eða möppum hefur enn verið eytt",
|
||||
"Add" : "Bæta við"
|
||||
"Add" : "Bæta við",
|
||||
"The files is locked" : "Skráin er læst"
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
|
||||
|
|
|
@ -248,7 +248,6 @@
|
|||
"This file/folder is already in that directory" : "Þessi skrá/mappa er þegar í þessari möppu",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Þú getur ekki flutt skrá/möppu inn í sjálfa sig eða inni í undirmöppu af sjálfri sér",
|
||||
"A file or folder with that name already exists in this folder" : "Skrá eða mappa með þessu heiti er þegar til staðar í þessari möppu",
|
||||
"The files is locked" : "Skráin er læst",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
|
@ -311,6 +310,7 @@
|
|||
"Search for an account" : "Leita að notandaaðgangi",
|
||||
"Choose" : "Velja",
|
||||
"No files or folders have been deleted yet" : "Engum skrám eða möppum hefur enn verið eytt",
|
||||
"Add" : "Bæta við"
|
||||
"Add" : "Bæta við",
|
||||
"The files is locked" : "Skráin er læst"
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
|
||||
}
|
|
@ -255,7 +255,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
|
||||
"The files is locked" : "Il file è bloccato",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Choose destination" : "Scegli la destinazione",
|
||||
"Copy to {target}" : "Copia in {target}",
|
||||
|
@ -319,6 +318,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Cerca un account",
|
||||
"Choose" : "Scegli",
|
||||
"No files or folders have been deleted yet" : "Nessun file o cartella è stato ancora eliminato",
|
||||
"Add" : "Aggiungi"
|
||||
"Add" : "Aggiungi",
|
||||
"The files is locked" : "Il file è bloccato"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
|
|
@ -253,7 +253,6 @@
|
|||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
|
||||
"The files is locked" : "Il file è bloccato",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Choose destination" : "Scegli la destinazione",
|
||||
"Copy to {target}" : "Copia in {target}",
|
||||
|
@ -317,6 +316,7 @@
|
|||
"Search for an account" : "Cerca un account",
|
||||
"Choose" : "Scegli",
|
||||
"No files or folders have been deleted yet" : "Nessun file o cartella è stato ancora eliminato",
|
||||
"Add" : "Aggiungi"
|
||||
"Add" : "Aggiungi",
|
||||
"The files is locked" : "Il file è bloccato"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
|
@ -273,7 +273,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)",
|
||||
"A file or folder with that name already exists in this folder" : "その名前のファイルまたはフォルダが、このフォルダに既に存在します",
|
||||
"The files is locked" : "ファイルはロックされています",
|
||||
"The file does not exist anymore" : "ファイルはもう存在しません",
|
||||
"Choose destination" : "移動先を選択",
|
||||
"Copy to {target}" : "{target} にコピー",
|
||||
|
@ -344,6 +343,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "アカウントを検索",
|
||||
"Choose" : "選択",
|
||||
"No files or folders have been deleted yet" : "まだ削除されたファイルやフォルダはありません",
|
||||
"Add" : "追加"
|
||||
"Add" : "追加",
|
||||
"The files is locked" : "ファイルはロックされています"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -271,7 +271,6 @@
|
|||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)",
|
||||
"A file or folder with that name already exists in this folder" : "その名前のファイルまたはフォルダが、このフォルダに既に存在します",
|
||||
"The files is locked" : "ファイルはロックされています",
|
||||
"The file does not exist anymore" : "ファイルはもう存在しません",
|
||||
"Choose destination" : "移動先を選択",
|
||||
"Copy to {target}" : "{target} にコピー",
|
||||
|
@ -342,6 +341,7 @@
|
|||
"Search for an account" : "アカウントを検索",
|
||||
"Choose" : "選択",
|
||||
"No files or folders have been deleted yet" : "まだ削除されたファイルやフォルダはありません",
|
||||
"Add" : "追加"
|
||||
"Add" : "追加",
|
||||
"The files is locked" : "ファイルはロックされています"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -251,7 +251,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "This file/folder is already in that directory",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The files is locked" : "The files is locked",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -315,6 +314,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Search for an account",
|
||||
"Choose" : "Choose",
|
||||
"No files or folders have been deleted yet" : "No files or folders have been deleted yet",
|
||||
"Add" : "Add"
|
||||
"Add" : "Add",
|
||||
"The files is locked" : "The files is locked"
|
||||
},
|
||||
"nplurals=2; plural=(n!=1);");
|
||||
|
|
|
@ -249,7 +249,6 @@
|
|||
"This file/folder is already in that directory" : "This file/folder is already in that directory",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The files is locked" : "The files is locked",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -313,6 +312,7 @@
|
|||
"Search for an account" : "Search for an account",
|
||||
"Choose" : "Choose",
|
||||
"No files or folders have been deleted yet" : "No files or folders have been deleted yet",
|
||||
"Add" : "Add"
|
||||
"Add" : "Add",
|
||||
"The files is locked" : "The files is locked"
|
||||
},"pluralForm" :"nplurals=2; plural=(n!=1);"
|
||||
}
|
|
@ -272,8 +272,8 @@ OC.L10N.register(
|
|||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "파일/폴더를 그 안이나 그 안의 폴더로 이동할 수 없습니다.",
|
||||
"(copy)" : "(복사)",
|
||||
"(copy %n)" : "(%n 복사)",
|
||||
"Move cancelled" : "이동이 취소됨",
|
||||
"A file or folder with that name already exists in this folder" : "같은 이름을 사용하는 파일 또는 폴더가 이미 이 폴더에 있습니다.",
|
||||
"The files is locked" : "이 파일은 잠겼습니다.",
|
||||
"The file does not exist anymore" : "파일이 더이상 존재하지 않습니다.",
|
||||
"Choose destination" : "목적지 선택",
|
||||
"Copy to {target}" : "{target}에 복사",
|
||||
|
@ -344,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "계정 검색",
|
||||
"Choose" : "선택",
|
||||
"No files or folders have been deleted yet" : "아직 삭제된 파일이나 폴더가 없습니다.",
|
||||
"Add" : "추가"
|
||||
"Add" : "추가",
|
||||
"The files is locked" : "이 파일은 잠겼습니다."
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -270,8 +270,8 @@
|
|||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "파일/폴더를 그 안이나 그 안의 폴더로 이동할 수 없습니다.",
|
||||
"(copy)" : "(복사)",
|
||||
"(copy %n)" : "(%n 복사)",
|
||||
"Move cancelled" : "이동이 취소됨",
|
||||
"A file or folder with that name already exists in this folder" : "같은 이름을 사용하는 파일 또는 폴더가 이미 이 폴더에 있습니다.",
|
||||
"The files is locked" : "이 파일은 잠겼습니다.",
|
||||
"The file does not exist anymore" : "파일이 더이상 존재하지 않습니다.",
|
||||
"Choose destination" : "목적지 선택",
|
||||
"Copy to {target}" : "{target}에 복사",
|
||||
|
@ -342,6 +342,7 @@
|
|||
"Search for an account" : "계정 검색",
|
||||
"Choose" : "선택",
|
||||
"No files or folders have been deleted yet" : "아직 삭제된 파일이나 폴더가 없습니다.",
|
||||
"Add" : "추가"
|
||||
"Add" : "추가",
|
||||
"The files is locked" : "이 파일은 잠겼습니다."
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -251,7 +251,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Оваа папка/датотека се наоѓа веќе во таа папка",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Неможете да преместите датотека/папка во себеси или во подпапка во себеси",
|
||||
"A file or folder with that name already exists in this folder" : "Датотека или папка со тоа име веќе постои во оваа папка",
|
||||
"The files is locked" : "Датотекатите се заклучени",
|
||||
"The file does not exist anymore" : "Датотеката не постои",
|
||||
"Choose destination" : "Избери дестинација",
|
||||
"Copy to {target}" : "Копирај во {target}",
|
||||
|
@ -315,6 +314,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Пребарај сметка",
|
||||
"Choose" : "Избери",
|
||||
"No files or folders have been deleted yet" : "Нема датотеки или папки што се избришани",
|
||||
"Add" : "Додади"
|
||||
"Add" : "Додади",
|
||||
"The files is locked" : "Датотекатите се заклучени"
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
|
||||
|
|
|
@ -249,7 +249,6 @@
|
|||
"This file/folder is already in that directory" : "Оваа папка/датотека се наоѓа веќе во таа папка",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Неможете да преместите датотека/папка во себеси или во подпапка во себеси",
|
||||
"A file or folder with that name already exists in this folder" : "Датотека или папка со тоа име веќе постои во оваа папка",
|
||||
"The files is locked" : "Датотекатите се заклучени",
|
||||
"The file does not exist anymore" : "Датотеката не постои",
|
||||
"Choose destination" : "Избери дестинација",
|
||||
"Copy to {target}" : "Копирај во {target}",
|
||||
|
@ -313,6 +312,7 @@
|
|||
"Search for an account" : "Пребарај сметка",
|
||||
"Choose" : "Избери",
|
||||
"No files or folders have been deleted yet" : "Нема датотеки или папки што се избришани",
|
||||
"Add" : "Додади"
|
||||
"Add" : "Додади",
|
||||
"The files is locked" : "Датотекатите се заклучени"
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(kopier %n)",
|
||||
"Move cancelled" : "Flytt avbrutt",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navnet finnes allerede i denne mappen",
|
||||
"The files is locked" : "Filene er låst",
|
||||
"The file does not exist anymore" : "Filen finnes ikke lenger",
|
||||
"Choose destination" : "Velg målplassering",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Søk etter en konto",
|
||||
"Choose" : "Velg",
|
||||
"No files or folders have been deleted yet" : "Ingen filer eller mapper er slettet enda",
|
||||
"Add" : "Legg til"
|
||||
"Add" : "Legg til",
|
||||
"The files is locked" : "Filene er låst"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(kopier %n)",
|
||||
"Move cancelled" : "Flytt avbrutt",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mappe med det navnet finnes allerede i denne mappen",
|
||||
"The files is locked" : "Filene er låst",
|
||||
"The file does not exist anymore" : "Filen finnes ikke lenger",
|
||||
"Choose destination" : "Velg målplassering",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Søk etter en konto",
|
||||
"Choose" : "Velg",
|
||||
"No files or folders have been deleted yet" : "Ingen filer eller mapper er slettet enda",
|
||||
"Add" : "Legg til"
|
||||
"Add" : "Legg til",
|
||||
"The files is locked" : "Filene er låst"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -244,7 +244,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Ten plik/katalog znajduje się już w tym katalogu",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nie można przenieść pliku/katalogu do tego samego katalogu lub do własnego podkatalogu",
|
||||
"A file or folder with that name already exists in this folder" : "Plik lub katalog o tej nazwie już istnieje w tym katalogu",
|
||||
"The files is locked" : "Pliki są zablokowane",
|
||||
"The file does not exist anymore" : "Plik już nie istnieje",
|
||||
"Copy to {target}" : "Skopiuj do {target}",
|
||||
"Move to {target}" : "Przenieś do {target}",
|
||||
|
@ -305,6 +304,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Wyszukaj konto",
|
||||
"Choose" : "Wybierz",
|
||||
"No files or folders have been deleted yet" : "Żadne pliki ani katalogi nie zostały jeszcze usunięte",
|
||||
"Add" : "Dodaj"
|
||||
"Add" : "Dodaj",
|
||||
"The files is locked" : "Pliki są zablokowane"
|
||||
},
|
||||
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
|
||||
|
|
|
@ -242,7 +242,6 @@
|
|||
"This file/folder is already in that directory" : "Ten plik/katalog znajduje się już w tym katalogu",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nie można przenieść pliku/katalogu do tego samego katalogu lub do własnego podkatalogu",
|
||||
"A file or folder with that name already exists in this folder" : "Plik lub katalog o tej nazwie już istnieje w tym katalogu",
|
||||
"The files is locked" : "Pliki są zablokowane",
|
||||
"The file does not exist anymore" : "Plik już nie istnieje",
|
||||
"Copy to {target}" : "Skopiuj do {target}",
|
||||
"Move to {target}" : "Przenieś do {target}",
|
||||
|
@ -303,6 +302,7 @@
|
|||
"Search for an account" : "Wyszukaj konto",
|
||||
"Choose" : "Wybierz",
|
||||
"No files or folders have been deleted yet" : "Żadne pliki ani katalogi nie zostały jeszcze usunięte",
|
||||
"Add" : "Dodaj"
|
||||
"Add" : "Dodaj",
|
||||
"The files is locked" : "Pliki są zablokowane"
|
||||
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
|
||||
}
|
|
@ -261,7 +261,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(cópia)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Já existe um arquivo ou pasta com esse nome nesta pasta",
|
||||
"The files is locked" : "Os arquivos estão bloqueados",
|
||||
"The file does not exist anymore" : "O arquivo não existe mais",
|
||||
"Choose destination" : "Escolha o destino",
|
||||
"Copy to {target}" : "Copiar para {target}",
|
||||
|
@ -326,6 +325,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Pesquisar uma conta",
|
||||
"Choose" : "Escolher",
|
||||
"No files or folders have been deleted yet" : "Nenhum arquivo ou pasta foi excluído ainda",
|
||||
"Add" : "Adicionar"
|
||||
"Add" : "Adicionar",
|
||||
"The files is locked" : "Os arquivos estão bloqueados"
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
|
|
@ -259,7 +259,6 @@
|
|||
"(copy)" : "(cópia)",
|
||||
"(copy %n)" : "(copiar %n)",
|
||||
"A file or folder with that name already exists in this folder" : "Já existe um arquivo ou pasta com esse nome nesta pasta",
|
||||
"The files is locked" : "Os arquivos estão bloqueados",
|
||||
"The file does not exist anymore" : "O arquivo não existe mais",
|
||||
"Choose destination" : "Escolha o destino",
|
||||
"Copy to {target}" : "Copiar para {target}",
|
||||
|
@ -324,6 +323,7 @@
|
|||
"Search for an account" : "Pesquisar uma conta",
|
||||
"Choose" : "Escolher",
|
||||
"No files or folders have been deleted yet" : "Nenhum arquivo ou pasta foi excluído ainda",
|
||||
"Add" : "Adicionar"
|
||||
"Add" : "Adicionar",
|
||||
"The files is locked" : "Os arquivos estão bloqueados"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
|
@ -242,7 +242,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Acest fișier/folder există în acel dosar",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nu se poate muta/redenumi un fișier/folder în el însuși sau într-un subfolder al său",
|
||||
"A file or folder with that name already exists in this folder" : "Un fișier sau folder cu acest nume există deja în acest folder",
|
||||
"The files is locked" : "Fișierul este blocat",
|
||||
"The file does not exist anymore" : "Fișierul nu mai există",
|
||||
"Copy to {target}" : "Copiază la {target}",
|
||||
"Move to {target}" : "Mută la {target}",
|
||||
|
@ -303,6 +302,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Căutați un cont",
|
||||
"Choose" : "Alege",
|
||||
"No files or folders have been deleted yet" : "Niciun fișier sau folder nu a fost șters încă",
|
||||
"Add" : "Adaugă"
|
||||
"Add" : "Adaugă",
|
||||
"The files is locked" : "Fișierul este blocat"
|
||||
},
|
||||
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
|
||||
|
|
|
@ -240,7 +240,6 @@
|
|||
"This file/folder is already in that directory" : "Acest fișier/folder există în acel dosar",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nu se poate muta/redenumi un fișier/folder în el însuși sau într-un subfolder al său",
|
||||
"A file or folder with that name already exists in this folder" : "Un fișier sau folder cu acest nume există deja în acest folder",
|
||||
"The files is locked" : "Fișierul este blocat",
|
||||
"The file does not exist anymore" : "Fișierul nu mai există",
|
||||
"Copy to {target}" : "Copiază la {target}",
|
||||
"Move to {target}" : "Mută la {target}",
|
||||
|
@ -301,6 +300,7 @@
|
|||
"Search for an account" : "Căutați un cont",
|
||||
"Choose" : "Alege",
|
||||
"No files or folders have been deleted yet" : "Niciun fișier sau folder nu a fost șters încă",
|
||||
"Add" : "Adaugă"
|
||||
"Add" : "Adaugă",
|
||||
"The files is locked" : "Fișierul este blocat"
|
||||
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
|
||||
}
|
|
@ -273,7 +273,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(копия)",
|
||||
"(copy %n)" : "(копия %n)",
|
||||
"A file or folder with that name already exists in this folder" : "В этой папке уже есть файл или папка с этим именем",
|
||||
"The files is locked" : "Файлы заблокированы",
|
||||
"The file does not exist anymore" : "Файл больше не существует",
|
||||
"Choose destination" : "Выберите место назначения",
|
||||
"Copy to {target}" : "Скопировать в «{target}»",
|
||||
|
@ -344,6 +343,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Поиск по учетной записи",
|
||||
"Choose" : "Выберите",
|
||||
"No files or folders have been deleted yet" : "Файлы или папки еще не удалены",
|
||||
"Add" : "Добавить"
|
||||
"Add" : "Добавить",
|
||||
"The files is locked" : "Файлы заблокированы"
|
||||
},
|
||||
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
|
||||
|
|
|
@ -271,7 +271,6 @@
|
|||
"(copy)" : "(копия)",
|
||||
"(copy %n)" : "(копия %n)",
|
||||
"A file or folder with that name already exists in this folder" : "В этой папке уже есть файл или папка с этим именем",
|
||||
"The files is locked" : "Файлы заблокированы",
|
||||
"The file does not exist anymore" : "Файл больше не существует",
|
||||
"Choose destination" : "Выберите место назначения",
|
||||
"Copy to {target}" : "Скопировать в «{target}»",
|
||||
|
@ -342,6 +341,7 @@
|
|||
"Search for an account" : "Поиск по учетной записи",
|
||||
"Choose" : "Выберите",
|
||||
"No files or folders have been deleted yet" : "Файлы или папки еще не удалены",
|
||||
"Add" : "Добавить"
|
||||
"Add" : "Добавить",
|
||||
"The files is locked" : "Файлы заблокированы"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
|
||||
}
|
|
@ -248,7 +248,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Tento súbor/priečinok sa už v danom adresári nachádza",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nemôžete presunúť súbor/priečinok do seba alebo do jeho podpriečinka.",
|
||||
"A file or folder with that name already exists in this folder" : "Súbor alebo priečinok s týmto názvom už existuje v tomto priečinku",
|
||||
"The files is locked" : "Súbory sú uzamknuté",
|
||||
"The file does not exist anymore" : "Súbor už neexistuje",
|
||||
"Copy to {target}" : "Kopírovať do {target}",
|
||||
"Move to {target}" : "Presunúť do {target}",
|
||||
|
@ -310,6 +309,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Vyhľadať účet",
|
||||
"Choose" : "Vybrať",
|
||||
"No files or folders have been deleted yet" : "Žiadne súbory alebo priečinky neboli ešte vymazané",
|
||||
"Add" : "Pridať"
|
||||
"Add" : "Pridať",
|
||||
"The files is locked" : "Súbory sú uzamknuté"
|
||||
},
|
||||
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
|
||||
|
|
|
@ -246,7 +246,6 @@
|
|||
"This file/folder is already in that directory" : "Tento súbor/priečinok sa už v danom adresári nachádza",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Nemôžete presunúť súbor/priečinok do seba alebo do jeho podpriečinka.",
|
||||
"A file or folder with that name already exists in this folder" : "Súbor alebo priečinok s týmto názvom už existuje v tomto priečinku",
|
||||
"The files is locked" : "Súbory sú uzamknuté",
|
||||
"The file does not exist anymore" : "Súbor už neexistuje",
|
||||
"Copy to {target}" : "Kopírovať do {target}",
|
||||
"Move to {target}" : "Presunúť do {target}",
|
||||
|
@ -308,6 +307,7 @@
|
|||
"Search for an account" : "Vyhľadať účet",
|
||||
"Choose" : "Vybrať",
|
||||
"No files or folders have been deleted yet" : "Žiadne súbory alebo priečinky neboli ešte vymazané",
|
||||
"Add" : "Pridať"
|
||||
"Add" : "Pridať",
|
||||
"The files is locked" : "Súbory sú uzamknuté"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
|
||||
}
|
|
@ -245,7 +245,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Ta datoteka oziroma mapa je že v določeni mapi",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Mape ali datoteke ni mogoče premakniti samo vase oziroma v podmapo same sebe",
|
||||
"A file or folder with that name already exists in this folder" : "Datoteka oziroma mapa s tem imenom v tej mapi že obstaja",
|
||||
"The files is locked" : "Datoteka je zaklenjena",
|
||||
"The file does not exist anymore" : "Datoteka ne obstaja več",
|
||||
"Copy to {target}" : "Kopiraj na {target}",
|
||||
"Move to {target}" : "Premakni na {target}",
|
||||
|
@ -306,6 +305,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Poišči račun",
|
||||
"Choose" : "Izbor",
|
||||
"No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map",
|
||||
"Add" : "Dodaj"
|
||||
"Add" : "Dodaj",
|
||||
"The files is locked" : "Datoteka je zaklenjena"
|
||||
},
|
||||
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
|
||||
|
|
|
@ -243,7 +243,6 @@
|
|||
"This file/folder is already in that directory" : "Ta datoteka oziroma mapa je že v določeni mapi",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Mape ali datoteke ni mogoče premakniti samo vase oziroma v podmapo same sebe",
|
||||
"A file or folder with that name already exists in this folder" : "Datoteka oziroma mapa s tem imenom v tej mapi že obstaja",
|
||||
"The files is locked" : "Datoteka je zaklenjena",
|
||||
"The file does not exist anymore" : "Datoteka ne obstaja več",
|
||||
"Copy to {target}" : "Kopiraj na {target}",
|
||||
"Move to {target}" : "Premakni na {target}",
|
||||
|
@ -304,6 +303,7 @@
|
|||
"Search for an account" : "Poišči račun",
|
||||
"Choose" : "Izbor",
|
||||
"No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map",
|
||||
"Add" : "Dodaj"
|
||||
"Add" : "Dodaj",
|
||||
"The files is locked" : "Datoteka je zaklenjena"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(копирано %n)",
|
||||
"Move cancelled" : "Премештање је отказано",
|
||||
"A file or folder with that name already exists in this folder" : "У овом фолдеру већ постоји фајл или фолдер са тим именом",
|
||||
"The files is locked" : "Фајл је закључан",
|
||||
"The file does not exist anymore" : "Фајл више не постоји",
|
||||
"Choose destination" : "Изаберите одредиште",
|
||||
"Copy to {target}" : "Копирај у {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Претражите налог",
|
||||
"Choose" : "Изаберите",
|
||||
"No files or folders have been deleted yet" : "Још увек није обрисан ниједан фајл или фолдер",
|
||||
"Add" : "Додај"
|
||||
"Add" : "Додај",
|
||||
"The files is locked" : "Фајл је закључан"
|
||||
},
|
||||
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(копирано %n)",
|
||||
"Move cancelled" : "Премештање је отказано",
|
||||
"A file or folder with that name already exists in this folder" : "У овом фолдеру већ постоји фајл или фолдер са тим именом",
|
||||
"The files is locked" : "Фајл је закључан",
|
||||
"The file does not exist anymore" : "Фајл више не постоји",
|
||||
"Choose destination" : "Изаберите одредиште",
|
||||
"Copy to {target}" : "Копирај у {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Претражите налог",
|
||||
"Choose" : "Изаберите",
|
||||
"No files or folders have been deleted yet" : "Још увек није обрисан ниједан фајл или фолдер",
|
||||
"Add" : "Додај"
|
||||
"Add" : "Додај",
|
||||
"The files is locked" : "Фајл је закључан"
|
||||
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(kopia %n)",
|
||||
"Move cancelled" : "Flytt avbruten",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mapp med det namnet finns redan i den här mappen",
|
||||
"The files is locked" : "Filerna är låsta",
|
||||
"The file does not exist anymore" : "Filen finns inte längre",
|
||||
"Choose destination" : "Välj destination",
|
||||
"Copy to {target}" : "Kopiera till {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Sök efter ett konto",
|
||||
"Choose" : "Välj",
|
||||
"No files or folders have been deleted yet" : "Inga filer eller mappar har tagits bort än",
|
||||
"Add" : "Lägg till"
|
||||
"Add" : "Lägg till",
|
||||
"The files is locked" : "Filerna är låsta"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(kopia %n)",
|
||||
"Move cancelled" : "Flytt avbruten",
|
||||
"A file or folder with that name already exists in this folder" : "En fil eller mapp med det namnet finns redan i den här mappen",
|
||||
"The files is locked" : "Filerna är låsta",
|
||||
"The file does not exist anymore" : "Filen finns inte längre",
|
||||
"Choose destination" : "Välj destination",
|
||||
"Copy to {target}" : "Kopiera till {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Sök efter ett konto",
|
||||
"Choose" : "Välj",
|
||||
"No files or folders have been deleted yet" : "Inga filer eller mappar har tagits bort än",
|
||||
"Add" : "Lägg till"
|
||||
"Add" : "Lägg till",
|
||||
"The files is locked" : "Filerna är låsta"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
|
@ -273,7 +273,6 @@ OC.L10N.register(
|
|||
"(copy)" : "(kopya)",
|
||||
"(copy %n)" : "(%n kopyası)",
|
||||
"A file or folder with that name already exists in this folder" : "Bu klasörde aynı adlı bir dosya ya da klasör zaten var",
|
||||
"The files is locked" : "Dosyalar kilitli",
|
||||
"The file does not exist anymore" : "Dosya artık yok",
|
||||
"Choose destination" : "Hedefi seçin",
|
||||
"Copy to {target}" : "{target} içine kopyala",
|
||||
|
@ -344,6 +343,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Hesap ara",
|
||||
"Choose" : "Seçin",
|
||||
"No files or folders have been deleted yet" : "Henüz silinmiş bir dosya ya da klasör yok",
|
||||
"Add" : "Ekle"
|
||||
"Add" : "Ekle",
|
||||
"The files is locked" : "Dosyalar kilitli"
|
||||
},
|
||||
"nplurals=2; plural=(n > 1);");
|
||||
|
|
|
@ -271,7 +271,6 @@
|
|||
"(copy)" : "(kopya)",
|
||||
"(copy %n)" : "(%n kopyası)",
|
||||
"A file or folder with that name already exists in this folder" : "Bu klasörde aynı adlı bir dosya ya da klasör zaten var",
|
||||
"The files is locked" : "Dosyalar kilitli",
|
||||
"The file does not exist anymore" : "Dosya artık yok",
|
||||
"Choose destination" : "Hedefi seçin",
|
||||
"Copy to {target}" : "{target} içine kopyala",
|
||||
|
@ -342,6 +341,7 @@
|
|||
"Search for an account" : "Hesap ara",
|
||||
"Choose" : "Seçin",
|
||||
"No files or folders have been deleted yet" : "Henüz silinmiş bir dosya ya da klasör yok",
|
||||
"Add" : "Ekle"
|
||||
"Add" : "Ekle",
|
||||
"The files is locked" : "Dosyalar kilitli"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(копія %n)",
|
||||
"Move cancelled" : "Переміщення скасовано",
|
||||
"A file or folder with that name already exists in this folder" : "Файл чи каталог з таким ім'ям вже присутній в цьому каталозі",
|
||||
"The files is locked" : "Файл заблоковано",
|
||||
"The file does not exist anymore" : "Цей файл більше недоступний",
|
||||
"Choose destination" : "Виберіть каталог призначення",
|
||||
"Copy to {target}" : "Копіювати до {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Пошук облікового запису",
|
||||
"Choose" : "Вибрати",
|
||||
"No files or folders have been deleted yet" : "Поки жодного каталогу чи файлу не було вилучено",
|
||||
"Add" : "Додати"
|
||||
"Add" : "Додати",
|
||||
"The files is locked" : "Файл заблоковано"
|
||||
},
|
||||
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(копія %n)",
|
||||
"Move cancelled" : "Переміщення скасовано",
|
||||
"A file or folder with that name already exists in this folder" : "Файл чи каталог з таким ім'ям вже присутній в цьому каталозі",
|
||||
"The files is locked" : "Файл заблоковано",
|
||||
"The file does not exist anymore" : "Цей файл більше недоступний",
|
||||
"Choose destination" : "Виберіть каталог призначення",
|
||||
"Copy to {target}" : "Копіювати до {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "Пошук облікового запису",
|
||||
"Choose" : "Вибрати",
|
||||
"No files or folders have been deleted yet" : "Поки жодного каталогу чи файлу не було вилучено",
|
||||
"Add" : "Додати"
|
||||
"Add" : "Додати",
|
||||
"The files is locked" : "Файл заблоковано"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
|
||||
}
|
|
@ -244,7 +244,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "Tệp/thư mục này đã có trong thư mục đó",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Bạn không thể di chuyển một tập tin/thư mục vào chính nó hoặc vào một thư mục con của chính nó",
|
||||
"A file or folder with that name already exists in this folder" : "Tệp hoặc thư mục có tên đó đã tồn tại trong thư mục này",
|
||||
"The files is locked" : "Các tập tin bị khóa",
|
||||
"The file does not exist anymore" : "Tập tin không tồn tại nữa",
|
||||
"Copy to {target}" : "Copy to {mục tiêu}",
|
||||
"Move to {target}" : "Di chuyển đến {mục tiêu}",
|
||||
|
@ -305,6 +304,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "Tìm kiếm tài khoản",
|
||||
"Choose" : "Chọn",
|
||||
"No files or folders have been deleted yet" : "Chưa có tập tin hoặc thư mục nào bị xóa",
|
||||
"Add" : "Thêm"
|
||||
"Add" : "Thêm",
|
||||
"The files is locked" : "Các tập tin bị khóa"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -242,7 +242,6 @@
|
|||
"This file/folder is already in that directory" : "Tệp/thư mục này đã có trong thư mục đó",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Bạn không thể di chuyển một tập tin/thư mục vào chính nó hoặc vào một thư mục con của chính nó",
|
||||
"A file or folder with that name already exists in this folder" : "Tệp hoặc thư mục có tên đó đã tồn tại trong thư mục này",
|
||||
"The files is locked" : "Các tập tin bị khóa",
|
||||
"The file does not exist anymore" : "Tập tin không tồn tại nữa",
|
||||
"Copy to {target}" : "Copy to {mục tiêu}",
|
||||
"Move to {target}" : "Di chuyển đến {mục tiêu}",
|
||||
|
@ -303,6 +302,7 @@
|
|||
"Search for an account" : "Tìm kiếm tài khoản",
|
||||
"Choose" : "Chọn",
|
||||
"No files or folders have been deleted yet" : "Chưa có tập tin hoặc thư mục nào bị xóa",
|
||||
"Add" : "Thêm"
|
||||
"Add" : "Thêm",
|
||||
"The files is locked" : "Các tập tin bị khóa"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -247,7 +247,6 @@ OC.L10N.register(
|
|||
"This file/folder is already in that directory" : "该文件/文件夹已经存在与该目录中",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "你无法将文件/文件夹移动至其自身或子文件夹中",
|
||||
"A file or folder with that name already exists in this folder" : "相同的文件/文件夹已存在于该文件夹中",
|
||||
"The files is locked" : "文件已锁定",
|
||||
"The file does not exist anymore" : "文件不存在",
|
||||
"Copy to {target}" : "复制到 {target}",
|
||||
"Move to {target}" : "移动到 {target}",
|
||||
|
@ -309,6 +308,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "搜索一个账户",
|
||||
"Choose" : "选择",
|
||||
"No files or folders have been deleted yet" : "尚未删除任何文件或文件夹",
|
||||
"Add" : "添加"
|
||||
"Add" : "添加",
|
||||
"The files is locked" : "文件已锁定"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -245,7 +245,6 @@
|
|||
"This file/folder is already in that directory" : "该文件/文件夹已经存在与该目录中",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "你无法将文件/文件夹移动至其自身或子文件夹中",
|
||||
"A file or folder with that name already exists in this folder" : "相同的文件/文件夹已存在于该文件夹中",
|
||||
"The files is locked" : "文件已锁定",
|
||||
"The file does not exist anymore" : "文件不存在",
|
||||
"Copy to {target}" : "复制到 {target}",
|
||||
"Move to {target}" : "移动到 {target}",
|
||||
|
@ -307,6 +306,7 @@
|
|||
"Search for an account" : "搜索一个账户",
|
||||
"Choose" : "选择",
|
||||
"No files or folders have been deleted yet" : "尚未删除任何文件或文件夹",
|
||||
"Add" : "添加"
|
||||
"Add" : "添加",
|
||||
"The files is locked" : "文件已锁定"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(複本 %n)",
|
||||
"Move cancelled" : "移動已取消",
|
||||
"A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
|
||||
"The files is locked" : "檔案已被上鎖",
|
||||
"The file does not exist anymore" : "檔案已不存在",
|
||||
"Choose destination" : "選擇目標地",
|
||||
"Copy to {target}" : "複製到 {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "搜尋賬號",
|
||||
"Choose" : "選擇",
|
||||
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾",
|
||||
"Add" : "添加"
|
||||
"Add" : "添加",
|
||||
"The files is locked" : "檔案已被上鎖"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(複本 %n)",
|
||||
"Move cancelled" : "移動已取消",
|
||||
"A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
|
||||
"The files is locked" : "檔案已被上鎖",
|
||||
"The file does not exist anymore" : "檔案已不存在",
|
||||
"Choose destination" : "選擇目標地",
|
||||
"Copy to {target}" : "複製到 {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "搜尋賬號",
|
||||
"Choose" : "選擇",
|
||||
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾",
|
||||
"Add" : "添加"
|
||||
"Add" : "添加",
|
||||
"The files is locked" : "檔案已被上鎖"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -274,7 +274,6 @@ OC.L10N.register(
|
|||
"(copy %n)" : "(副本 %n)",
|
||||
"Move cancelled" : "移動已取消",
|
||||
"A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
|
||||
"The files is locked" : "檔案已鎖定",
|
||||
"The file does not exist anymore" : "檔案已不存在",
|
||||
"Choose destination" : "選擇目的地",
|
||||
"Copy to {target}" : "複製到 {target}",
|
||||
|
@ -345,6 +344,7 @@ OC.L10N.register(
|
|||
"Search for an account" : "搜尋帳號",
|
||||
"Choose" : "選擇",
|
||||
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾",
|
||||
"Add" : "新增"
|
||||
"Add" : "新增",
|
||||
"The files is locked" : "檔案已鎖定"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
"(copy %n)" : "(副本 %n)",
|
||||
"Move cancelled" : "移動已取消",
|
||||
"A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
|
||||
"The files is locked" : "檔案已鎖定",
|
||||
"The file does not exist anymore" : "檔案已不存在",
|
||||
"Choose destination" : "選擇目的地",
|
||||
"Copy to {target}" : "複製到 {target}",
|
||||
|
@ -343,6 +342,7 @@
|
|||
"Search for an account" : "搜尋帳號",
|
||||
"Choose" : "選擇",
|
||||
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾",
|
||||
"Add" : "新增"
|
||||
"Add" : "新增",
|
||||
"The files is locked" : "檔案已鎖定"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -39,13 +39,14 @@ class Capabilities implements ICapability {
|
|||
/**
|
||||
* Return this classes capabilities
|
||||
*
|
||||
* @return array{files: array{bigfilechunking: bool, blacklisted_files: array<mixed>}}
|
||||
* @return array{files: array{bigfilechunking: bool, blacklisted_files: array<mixed>, forbidden_filename_characters: array<string>}}
|
||||
*/
|
||||
public function getCapabilities() {
|
||||
return [
|
||||
'files' => [
|
||||
'bigfilechunking' => true,
|
||||
'blacklisted_files' => (array)$this->config->getSystemValue('blacklisted_files', ['.htaccess'])
|
||||
'blacklisted_files' => (array)$this->config->getSystemValue('blacklisted_files', ['.htaccess']),
|
||||
'forbidden_filename_characters' => \OCP\Util::getForbiddenFileNameChars(),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue