Currently new shares are added to beginning of the share list in the UI
messing up the ordering with the original (first) looking like the most
recent and the most recent looking like the original share. This error
disappears on refresh.
Resolves : https://github.com/nextcloud/server/issues/48415
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
If there is already a password, there is no need to require the password
in the setting ('newPassword'). It is only required for new shares.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit fixes the issue #47856. When you upload a file into a group folder and when you use a single S3 bucket as primary storage, the final move operation hangs for a long time. In the background, Nextcloud initiates a copy-delete sequence from the bucket into the bucket, with causes a lot unnecessary overhead. Nextcloud thinks that the file must be imported to another storage and does not recognize that everything is done on the same object bucket. In that case, the import step can be completely skipped, which saves time, network bandwidth and reduces the load on the object storage.
The behavior improves a lot with https://github.com/nextcloud/server/pull/46013. However, there are still some put messages that are being sent to the object storage when you use an object storage as primary storage and upload files into a group folder.
Co-authored-by: Kate <26026535+provokateurin@users.noreply.github.com>
Signed-off-by: Christoph Fiehe <c.fiehe@eurodata.de>
When copying or moving between two local storages the source path (on
disk) to copy or move from is got from the unjailed path of the source
storage. However, if the source storage has more than one jail getting
the unjailed path resolves the most external jail, but the source path
needs to be got from the most internal jail instead (the one closer to
the local storage).
This can happen, for example, with a shared groupfolder: in that case
there is an external jail for the shared storage, and one internal jail
for the groupfolder storage wrapped by the shared storage.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
* Resolves https://github.com/nextcloud/server/issues/47904
We need to make sure that we only add one source (unique!) once as a child,
this is ensured by simply use a native `Set`.
Also we need to remove children on from folders when the `files:node:deleted`
event is emitted.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
* Resolves: https://github.com/nextcloud/server/issues/48629
While the database supports NULL, the typing has always said it only returns *string*.
So to not break any apps that might trust the typings we should return `''` if the database is set to `NULL`.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Currently there is a problem if an exception is thrown in `User::delete`,
because at that point the user is already removed from the backend,
but not all data is deleted.
There is no way to recover from this state, as the user is gone no information is available anymore.
This means the data is still available on the server but can not removed by any API anymore.
The solution here is to first set a flag and backup the user home,
this can be used to recover failed user deletions in a way the delete can be re-tried.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
We basically mock the way `URLGenerator::getAbsoluteURL` works,
so we must make sure that the URL might already contain the webroot.
Because `baseURL` and `cliURL` also contain the webroot we need to remove
the webroot from the URL first.
Co-authored-by: Ferdinand Thiessen <opensource@fthiessen.de>
Co-authored-by: Daniel <mail@danielkesselberg.de>
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
`GET` should be allowed even without Ajax header to allow downloading files,
or show files in the viewer. All other requests could be guarded, but this should not.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This fixes transfering an email share from a user to another one when using
objectstore as primary storage.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Client.preventLocalAddress expects an absolute URL, which means the base_uri option cannot be used.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
- check for token collisions and retry up to three times.
- throw after 3 attempts without finding a unique token.
Signed-off-by: ernolf <raphael.gradenwitz@googlemail.com>
SMB#getFileInfo used to throw an icewind/smb exception, but nowadays throws \OCP\Files\ForbiddenException. This fixes downstream methods to catch the new exception.
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
NC_ env variable overrides were not appearing in
the output of `occ config:list system` nor `occ
config:system:get xxx`. This was creating nearly
impossible to diagnose configuration/ behavior
disprepancies.
- Refactored readData() so that we aren't saving
the entire environment in the envCache anymore
(only those prefixed "NC_") and so that we save
NC_ provided config values under their real
key.
- Refactored getValue() to accommodate readData()
refactor
- Fixed getKeys() to properly return
envCache keys too
Environment provided config variables now appear
in `occ config:list system` as expected.
Environment provided config variables now appear
when queried via `occ config:system:get KEY`
envCache is now free of non-NC stuff.
Signed-off-by: Josh Richards <josh.t.richards@gmail.com>
This crash was mostly happening when using external storages and for example the command "occ memories:migrate-google-takeout"
Signed-off-by: Vincent FarZz <farcry69@live.fr>
When the viewer or the sidebar is opened, we add the fileid to the route.
When both of them are closed, we do not remove the fileid from the route.
This means that, upon reload, the sidebar will be opened even though it was closed previously.
This PR ensure that the fileid is removed from the route when both the Sidebar and the Viewer are closed.
Signed-off-by: Louis Chemineau <louis@chmn.me>
This avoids a PHP warning in the logs about trying to set the response
code while the output already started. It’s useless to try to print an
error page anyway in this situation because the connection was closed
already.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Previously even when the precondition did not match, the call "passed"
when the after value was the expected one. This however can lead to
race conditions, duplicate code excutions and other things.
Signed-off-by: Joas Schilling <coding@schilljs.com>
The `<?xml` tag is interpreted as PHP short tags, so this causes errors.
Instead just print that part of the template.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
For E2EE encrypted files, we abort the transfer.
For SSE encrypted files, we abort only if not using master key.
Also fixed the check for when the path to a single file is used.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This is to prevent collision as we are sometime hashing user input, yet using that hash to target the background job in the database.
Signed-off-by: Louis Chemineau <louis@chmn.me>
1) The checks for well-known urls should always run against the root domain and therefore the option to remove the webroot.
2) For trusted domains, the available protocol is unknown, and thus some guesswork would be needed to make that work. I've decided for now to not consider them anymore to reduce false-positives.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
The row to add a new mount point is cloned when a new mountpoint is
added, so it is expected that it includes a status span. However, it
should not be displayed in that row, only in the cloned row when its
status is updated.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
When updating global storages and user storages a property is not
updated by "StoragesService::updateStorage()" if the value matches the
unmodified placeholder. However, userglobal storages are not updated
through the "StoragesService"; as only the authentication mechanism is
updated it is directly done with "saveBackendOptions()" in
"IUserProvided" or "UserGlobalAuth". Due to this the unmodified
placeholder value needs to be explicitly checked in those cases and
replaced by the actual value (note that in this case it is not possible
to just skip updating a specific property).
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
As the external storage uses the Nextcloud server itself the number of
workers of the PHP process running the Nextcloud server had to be
increased. Otherwise if a request is sent for the external storage while
handling a request from the integration tests a deadlock would occur.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
As a new storage is added by selecting a backend the selected backend
needs to be reset. Otherwise it is not possible to add another storage
with the same backend.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
If the status is updated but no explicit message is provided (for
example, if the status check succeeded) the default tooltip (from the
template) is now set to prevent a mismatch between the status and the
tooltip (for example, if the configuration is fixed after a failed
status check).
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
When saving, updating and rechecking an storage fails (which is
different to the soft-fail when the action itself succeeds but the
status check does not) further details are provided in the error message
of the response, which is now set as the tooltip.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
When a storage is saved the status check can fail even if saving the
storage succeeds. In those cases further details are provided in the
status message of the storage, which is now set as the tooltip,
similarly to how it is done when rechecking the storage.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Setting a null status was supposed to remove the status check, but
nothing was changed in that case. Now the status check is properly
removed, and doing that by hiding the element rather than just turning
it invisible also prevents that clicking on the invisible status
triggers a check, as until the new configuration is saved the check will
still be performed with the old configuration, which could be misleading
for the user.
Additionally, an explicit width is set to the parent of the span element
to prevent its width from changing when the span is shown and hidden.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Userglobal storages are now automatically recheck when loaded, similarly
to how it is done for global storages.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
1. The "recent" accounts API only works for admin and delegated admin -> hide for group managers
2. Group managers can not create new groups -> Hide the UI to add a new group for them
3. Accounts created by group managers require one of the groups, which is managed by the group manager, assigned.
So if the group manager only manageres a single group, we should preselect that group.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
* Resolves https://github.com/nextcloud/server/issues/34476
There is no maximum length defined in the standard,
most common the length is between 128 and 200 characters,
but as we store it not in plain data but base64 encoded the length can grow about 1/3.
We had a regression with 'Nitrokey 3' which created IDs with 196 byte length -> 262 bytes encoded base64.
So to be save we increase the size to 512 bytes.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The initial state is no longer used, it was only used in legacy UI and in the f2v rewrite
it was only used for the `id` which can be loaded just from the URL.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
On firefox there is an old bug where when you move a dragged file outside
the window the `dragleave` event is never emitted.
So we just use a timeout to reset the drag over state.
Also a small change: Use the ID of the main container instead of relying on tag name and class.
(The ID is guranteed as other APIs rely on it, while the class is just used internally).
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Previously if a server status got set to failure, it stayed that way
until an addressbook-sync found changes. Now the server status is set to
OK after each successful sync check (if that's not the case already),
regardless of addressbook changes.
This change also includes two new logging statements, which could help
next time someone debugs this.
Signed-off-by: Pablo Zimdahl <pablo@nextcloud.com>
This fixes non reactive default action text of the name component.
Also use download action as default action so that only one place
is needed to define how to download a file.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The recent search works on a different remote URL so the source of the files were wrong,
because the remote url was included twice in the source.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
There is no strong requirement to have only one mount for a given
storage id. Also the error in this case would be misleading.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Requires temporary `loglevel` adjustment "99%" (made up statistic) of the time as currently implemented.
Signed-off-by: Josh <josh.t.richards@gmail.com>
Fixes#30029 and #37263
libgd handles animated WEBP images poorly and generates a meaningless error message as a result. We were returning a 500 error for these preview requests (web) and a fatal error at the command-line (occ). Now we bypass libgd if the we detect an animated WEBP image (and simply don't generate the preview). No more 500 error. Should fix occ too.
Signed-off-by: Josh Richards <josh.t.richards@gmail.com>
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
* Resolves https://github.com/nextcloud/server/issues/45409
This includes two fixes:
1. The name in the "new node" dialog is correctly selected (e.g. `file.txt` only `file` is selected by default), to allow quick naming
2. `@nextcloud/files` functions for filename validation are used, this allows to use new Nextcloud 30 capabilities (e.g. reserved names)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The owner was not set on the file info causing e.g. webdav searches to never return the known owner.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This will enable showing more details what exactly is wrong with the filename.
Especially with the new capabilities introduced with Nextcloud 30.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
If a mountpoint is returned from a `View` the name must match the view scoped name
and not the global name.
For example group folders have a name like `1` or `2` (the ID),
but the name of the FileInfo returned fro mthe View should be the mount point name,
like `First groupfolder` or similar.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Reject calendars that
- are subscriptions
- are not writable
- are shared with a user
- are deleted
- don't support VEVENTs
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
Storages that do not have a dedicated owner (e.g. groupfolders, external
storages) currently always assume the current session user as the owner.
This leads to several issues when there is no user session but a node is
obtained through a user folder.
In order to have the correct user available we need to pass the user
that is used to setup a mountpoint along to the storage layer as we
generally assume that an owner is available for those.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
- re-stablishes old behaviour with cache to return null instead of throwing
an InvalidTokenException when the token is cached as non-existing
- token invalidation and re-generation are bundled in a DB transaction now
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
By default there is a Pragma: no-cache header set due to the default
value `no-cache` of session.cache-limiter, which will cause Chrome and
iOS to not cache even with a different Cache-Control header set on the
response.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
* Update `@nextcloud/dialogs` to 5.3.5
* Update `@nextcloud/capabilities` to 1.2.0
* Update `@nextcloud/sharing` to 0.2.0
`@vueuse/*` is updated to reduce duplicated dependencies as the newer libraries need newer vueuse versions,
but it is compatible so nothing breaking.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
When connecting to a SFTP server from a SFTP storage the host key is
checked against the known host keys stored in a file in the data
directory of the logged in Nextcloud user. The path to the file is
(indirectly) got using "OC_App::getStorage", which logs an error if
called when there is no logged in user; this can happen, for example, if
the storage is used from a background job or a command.
Not being able to read or write the file just causes the host key check
to be skipped, but it has no other consequence. Moreover, even with
logged in users it is likely that the file can not be read either and
the check is also skipped, as the file needs to have been manually
created by an admin.
Due to all that now the path to the file is directly created using a
View rather than relying on "OC_App::getStorage" to prevent the unneeded
error from being logged.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
#43939 moved the CalDAV/CardDAV redirect checks from the frontend to a new backend API.
Since the backend does not send an authentication header, checking for the expected response code 207 of the DAV endpoint does not work anymore, hence the URL of the last redirect is checked instead.
This URL is expected to contain a trailing slash, which was not required before, since the DAV endpoint works properly without it (when authenticated).
While a trailing slash in the redirect does no harm, it causes many setups to throw an admin panel warning, while in fact the redirects work properly. Furthermore, the proposed "/.well-known/carddav" => "/remote.php/dav/" redirect leads to double slashes, when doing a request to "/.well-known/carddav/", which seems more wrong then right.
This change makes the trailing slash optional, hence old and adjusted setups won't throw the warning anymore, and the DAV endpoint works well in both cases.
Signed-off-by: MichaIng <micha@dietpi.com>
If there are no cached results the current implementation was also returning an empty array,
but this was the same as when there was a successful run.
So to distinguish this we return `null` if there are *no* results.
In this case we need to rerun the integrity checker.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The new sharing flow since NC27 requires that users open the sharing details tab and
customize their share before creating it.
In https://github.com/nextcloud/server/pull/39472 the work of `addShare` was handed down to
`openSharingDetails` that opens the sharing details tab for the user to customize and manually
creat their share.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
The new sharing flow requires or implies that users should edit share before creating.
External sources should not created the share IF we would upon sharing details tab on first request.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
There was a regression that for the default theme the image was not set as the background.
Also the background was not always an absolut URL, only for custom images it was absolut,
for default images / shipped images it was relative.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
`UseSession` isn’t used in theses controllers.
Not using it should avoid a few session locks.
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
The request method is available since 29 and thus we can finally use the modern http client to send the report request for the addressbook sync.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
The scope design requires scopes to be either not specified, or
specified explicitely. Therefore, when setting the
skip-password-validation scope for user authentication from mechanisms
like SAML, we also have to set the filesystem scope, otherwise they will
lack access to the filesystem.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Address book and calendar sync tokens have a created_at column in 26+
and we need to assign a current timestamp to the existing data at
upgrade so the data isn't cleaned up immediately. Updating the full
table is expensive and fails on clustered setups that limit transaction
size. We don't need a timestamp for the oldest rows so we can skip
updating them.
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
The files store was importing the client, but this is only on current master
on stableX we still need to import the getter function.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
When the receiver denies the transfer the notification handler was missing,
so no notification was created for the transfer owner.
But also the internal notification was created two times:
1. When rejecting the transfer
2. By the reject function when dismissing the notification
This is fixed by only relying on the dismiss function.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
These changes fixes the issue of having the refresh the UI after share creation, as the share is not
immediately removed from the UI list.
Important changes
- The basis of checking wether a password/expire date is no longer based on config values alone
because the config is not expected in a share creation circle. Hence we check the configs and check
if the share object (this.share) has the expected values set. This way, once the required properties
are set, code control does not enter the block meant to handle the setting of required properties
unneccessarily.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
Fixes#45637
The support for s3-accelerate added in #44496 introduced a regression in AWS S3 environments when `hostname` is blank (which is a valid configuration w/ AWS since the hostname gets auto-generated).
Signed-off-by: Josh <josh.t.richards@gmail.com>
SSO backends like SAML and OIDC tried a trick to suppress password
confirmations as they are not possible by design. At least for SAML it was
not reliable when existing user backends where used as user repositories.
Now we are setting a special scope with the token, and also make sure that
the scope is taken over when tokens are regenerated.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
When using Apache with `DirectorySlash` it will respond with 301 and the URL with trailing slash.
But when using traefik as the reverse proxy it can not rewrite redirects, this leads to the problem
that the Apache response is using HTTP in the redirect but the real server (traefik) is only listening on HTTPS.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Ensure the correct file is scrolled if the content changes,
this also sets a minimal height to the virtual scrolling area
so that the `scrollTop` can be set.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
* We filter the array in `enabledSubmenuActions` so we can be sure the action does have a parent
* Node attributes must be accessed using the `attributes` getter not the private `_attributes` property
* Cast action ref to correct component interface to make TypeScript happy
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
We do not change the view to the trash bin but stay in the current view,
so we need to update the current fileid on the route if that was deleted.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Some files do not have a default action (can not be viewed and only downloaded).
If the `openfile` query is set on them the `handleOpenFile` will throw an error.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Sorting the events by the start date leads to more predictable results for the search API consumers.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Event recurrences are evaluated at runtime because the database only knows the first and last occurrence.
Given, a user created 8 events with a yearly reoccurrence and two for events tomorrow.
The upcoming event widget asks the CalDAV backend for 7 events within the next 14 days.
If limit 7 is applied to the SQL query, we find the 7 events with a yearly reoccurrence and discard the events after evaluating the reoccurrence rules because they are not due within the next 14 days and end up with an empty result even if there are two events to show.
The workaround for search requests with a limit and time range is asking for more row than requested and retrying if we have not reached the limit.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
- Verify that explicitly sending empty `expireDate` param to server overwrite default
and sets not expiry date, if non is enforced.
- Update tests to avoid converting empty string to date.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
When the comments tab is used instead of the merged activity+comments, then some issues are throws due to prop altering and duplicated names (resourceId as prop and data).
This is fixed as well as some other vue related errors in the sidebar
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The previously used library was parsing strings to try to detect dates,
but for filenames it makes no sense to parse them as dates.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
When disabled users where moved to their own endpoint we overlooked
search, so adding it back.
The search is done case-insensitive in uid and display name.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Add the filename restrictions to our JS config so we can create a common frontend library
function to check filename validity (de-duplicate code).
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
When multiple files are deleted at once, all the requests bombard the server
simultaneously, causing performance issues.
This commit adds queuing that limits the concurrency of these requests to 5
at a time.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
This prevents one HTTP request for most situations (301 from `apps/files` to `apps/files/`)
and helps users with faulty reverse-proxy configuration.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Avoid future collisions for not yet created updater and audit log files (at least using default names).
Signed-off-by: Josh <josh.t.richards@gmail.com>
This was broken by last codestyle update, maybe even before because of
operator precedence. Now using vars to make it readable and correct at
the same time.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Needs to be adapted on each branch to reflect the used PHP version and
help with baseline updating.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
The share details page should show the target email or user/server to which
the user is creating the share.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
[skip ci]
When a file is moved between different storages then the file id is not (always) preserved.
This means the file id has to be adjusted for all shares.
So in case the file id does not exist anymore we try to find the new file id based on the
target path of the transfer and the path suffix of the share.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
[EA] New value type (\DateTime) is not matching the resolved parameter type and might introduce types-related false-positives.
Signed-off-by: Joas Schilling <coding@schilljs.com>
Needed to adjust the store creation to be able to inject pinia before the vue app is initialized.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
`expireDate` can be set once and used anywhere needed, the current implementation,
duplicates this behavior which leads to `parseDate` receiving an a date object it
parsed and returend earlier in the createShare method.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
- when this background job runs, while the current server was not being
added as trusted_server in the other instance, yet, the secret sharing
would not be attempted again, without visual feedback.
- the change allows 5 attempts, which gives more than 20minutes to
complete. More do not really help as the endpoint is brute force
protected.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
the DN has to be escaped differently when used as a base and we were
missing it here in the search method call in the check-user command.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
We're already checking return value to determine if the format is unrecognized. There's no reason to let imagecreatefromstring() generate it's own E_WARNING when the format is unrecognized.
Fixes#44702
Signed-off-by: Josh <josh.t.richards@gmail.com>
Prevent browsers - as good as possible - from filling in user credentials as share label and password.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"تُوفِّر إمكانيات تسجيل و مراجعة سجل الحركات على نكست كلاود."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"تُوفِّر إمكانيات تسجيل و مراجعة سجل الحركات على نكست كلاود."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Bidrager med lognings funktionalitet til Nextcloud, såsom logning af fil tilgang eller andre sensitive handlinger"
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Bidrager med lognings funktionalitet til Nextcloud, såsom logning af fil tilgang eller andre sensitive handlinger"
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Habilita las opciones de bitácora de Nextcloud tales como registro de acceso a archivos o de acciones delicadas."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Proporciona capacidades de registro para Nextcloud, tales como el registro de accesos a archivos o de acciones delicadas."
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Habilita las opciones de bitácora de Nextcloud tales como registro de acceso a archivos o de acciones delicadas."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Proporciona capacidades de registro para Nextcloud, tales como el registro de accesos a archivos o de acciones delicadas."
},"pluralForm":"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Soláthraíonn sé cumais logála do Nextcloud, cosúil le rochtain ar chomhaid nó gníomhartha íogaire eile a logáil."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Soláthraíonn sé cumais logála do Nextcloud, cosúil le rochtain ar chomhaid nó gníomhartha íogaire eile a logáil."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
"Auditing / Logging":"Kiểm tra / Nhật ký",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
"Auditing / Logging":"Kiểm tra / Nhật ký",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.":"Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
"Enable clouds to communicate with each other and exchange data":"Permettre aux clouds de communiquer entre eux et d'échanger des données",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"L’API Cloud Federation permet à diverses instances Nextcloud de communiquer entre elles et d’échanger des données."
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"L’API de fédération cloud permet à différentes instances de Nextcloud de communiquer entre elles et d’échanger des données."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
"Enable clouds to communicate with each other and exchange data":"Permettre aux clouds de communiquer entre eux et d'échanger des données",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"L’API Cloud Federation permet à diverses instances Nextcloud de communiquer entre elles et d’échanger des données."
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"L’API de fédération cloud permet à différentes instances de Nextcloud de communiquer entre elles et d’échanger des données."
},"pluralForm":"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
"Cloud Federation API":"Ligeann API Comhdhéanta na Scamaill",
"Enable clouds to communicate with each other and exchange data":"Cumasaigh scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"Cuireann API Cloud Federation ar chumas cásanna éagsúla Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
"Cloud Federation API":"Ligeann API Comhdhéanta na Scamaill",
"Enable clouds to communicate with each other and exchange data":"Cumasaigh scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"Cuireann API Cloud Federation ar chumas cásanna éagsúla Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
"Enable clouds to communicate with each other and exchange data":"بۇلۇتلارنىڭ ئۆز-ئارا ئالاقە قىلىشى ۋە سانلىق مەلۇمات ئالماشتۇرۇشىنى قوزغىتىڭ",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"بۇلۇت فېدېراتسىيەسى API ھەر خىل Nextcloud مىساللىرىنى ئۆز-ئارا ئالاقە قىلىش ۋە سانلىق مەلۇمات ئالماشتۇرۇش ئىمكانىيىتىگە ئىگە قىلىدۇ."
"Enable clouds to communicate with each other and exchange data":"بۇلۇتلارنىڭ ئۆز-ئارا ئالاقە قىلىشى ۋە سانلىق مەلۇمات ئالماشتۇرۇشىنى قوزغىتىڭ",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"بۇلۇت فېدېراتسىيەسى API ھەر خىل Nextcloud مىساللىرىنى ئۆز-ئارا ئالاقە قىلىش ۋە سانلىق مەلۇمات ئالماشتۇرۇش ئىمكانىيىتىگە ئىگە قىلىدۇ."
"Enable clouds to communicate with each other and exchange data":"讓雲端可互相通訊並交換資料",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"雲端聯盟 API 讓多個 Nextcloud 站台可以互相通訊並交換資料。"
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"雲端聯邦 API 能讓多個 Nextcloud 實體之間,可以互相通訊並交換資料。"
"Enable clouds to communicate with each other and exchange data":"讓雲端可互相通訊並交換資料",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"雲端聯盟 API 讓多個 Nextcloud 站台可以互相通訊並交換資料。"
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.":"雲端聯邦 API 能讓多個 Nextcloud 實體之間,可以互相通訊並交換資料。"
"%1$s commented on %2$s":"%1$s كتب تعليق على %2$s",
"{author} commented on {file}":"{author} علّق على {file}",
"<strong>Comments</strong> for files":"<strong>تعليقات</strong> على الملفات",
"Files":"الملفّات",
"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":"تعديل التعليق",
"Delete comment":"حذف التعليق",
"Cancel edit":"إلغاء التعديل",
"New comment":"ملاحظة جديدة",
"Write a comment …":"أكتُب ملاحظةً ...",
"New comment":"تعليق جديد",
"Write a comment …":"أكتُب تعليق ...",
"Post comment":"أضف تعليق",
"@ for mentions, : for emoji, / for smart picker":"@ للإشارات، : للإيموجي، / للاقط الذكي",
"Could not reload comments":"تعذّرت إعادة تحميل الملاحظات",
"No comments yet, start the conversation!":"لا يوجد تعليقات, ابدأ النقاش الآن!",
"@ for mentions, : for emoji, / for smart picker":"@ للإشارات : للإيموجي / للاقط الذكي",
"Could not reload comments":"تعذّرت إعادة تحميل التعليقات",
"No comments yet, start the conversation!":"لا توجد تعليقات, ابدأ النقاش الآن!",
"No more messages":"لامزيد من الرسائل",
"Retry":"أعد المحاولة",
"Failed to mark comments as read":"إخفاق في تعيين ملاحظات كمقرؤة",
"Failed to mark comments as read":"فشل في تعيين ملاحظات كمقرؤة",
"Unable to load the comments list":"تعذر تحميل قائمة التعليقات",
"_1 new comment_::_{unread} new comments_":["1 تعليق جديد","1 تعليق جديد","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة"],
"Comment":"تعليق",
"An error occurred while trying to edit the comment":"حدث خطأ أثناء محاولة تعديل التعليق",
"Comment deleted":"التعليق حُذف",
"Comment deleted":"التعليق محذوف",
"An error occurred while trying to delete the comment":"حدث خطأ أثناء محاولة حذف التعليق",
"An error occurred while trying to create the comment":"حدث خطأ أثناء محاولة إنشاء التعليق",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"تمت الإشارة إليك في \"{file}\" في تعليق لمستخدم. لكن هذا المستخدم تم حذف حسابه بعدها",
"_%n unread comment_::_%n unread comments_":["%n تعليق غير مقروء","%n تعليق غير مقروء","تعليقان غير مقروءة","%n تعليقات غير مقروء","%n تعليق غير مقروء","%n تعليق غير مقروء"],
"Write a message …":"أكتُب رسالةً ...",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" للإشارات, \":\" للإيموجي, \"/\" للاقط الذكي"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"تمت الإشارة إليك في \"{file}\" في تعليق لمستخدم. لكن هذا المستخدم تم حذف حسابه بعدها"
"%1$s commented on %2$s":"%1$s كتب تعليق على %2$s",
"{author} commented on {file}":"{author} علّق على {file}",
"<strong>Comments</strong> for files":"<strong>تعليقات</strong> على الملفات",
"Files":"الملفّات",
"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":"تعديل التعليق",
"Delete comment":"حذف التعليق",
"Cancel edit":"إلغاء التعديل",
"New comment":"ملاحظة جديدة",
"Write a comment …":"أكتُب ملاحظةً ...",
"New comment":"تعليق جديد",
"Write a comment …":"أكتُب تعليق ...",
"Post comment":"أضف تعليق",
"@ for mentions, : for emoji, / for smart picker":"@ للإشارات، : للإيموجي، / للاقط الذكي",
"Could not reload comments":"تعذّرت إعادة تحميل الملاحظات",
"No comments yet, start the conversation!":"لا يوجد تعليقات, ابدأ النقاش الآن!",
"@ for mentions, : for emoji, / for smart picker":"@ للإشارات : للإيموجي / للاقط الذكي",
"Could not reload comments":"تعذّرت إعادة تحميل التعليقات",
"No comments yet, start the conversation!":"لا توجد تعليقات, ابدأ النقاش الآن!",
"No more messages":"لامزيد من الرسائل",
"Retry":"أعد المحاولة",
"Failed to mark comments as read":"إخفاق في تعيين ملاحظات كمقرؤة",
"Failed to mark comments as read":"فشل في تعيين ملاحظات كمقرؤة",
"Unable to load the comments list":"تعذر تحميل قائمة التعليقات",
"_1 new comment_::_{unread} new comments_":["1 تعليق جديد","1 تعليق جديد","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة"],
"Comment":"تعليق",
"An error occurred while trying to edit the comment":"حدث خطأ أثناء محاولة تعديل التعليق",
"Comment deleted":"التعليق حُذف",
"Comment deleted":"التعليق محذوف",
"An error occurred while trying to delete the comment":"حدث خطأ أثناء محاولة حذف التعليق",
"An error occurred while trying to create the comment":"حدث خطأ أثناء محاولة إنشاء التعليق",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"تمت الإشارة إليك في \"{file}\" في تعليق لمستخدم. لكن هذا المستخدم تم حذف حسابه بعدها",
"_%n unread comment_::_%n unread comments_":["%n تعليق غير مقروء","%n تعليق غير مقروء","تعليقان غير مقروءة","%n تعليقات غير مقروء","%n تعليق غير مقروء","%n تعليق غير مقروء"],
"Write a message …":"أكتُب رسالةً ...",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" للإشارات, \":\" للإيموجي, \"/\" للاقط الذكي"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"تمت الإشارة إليك في \"{file}\" في تعليق لمستخدم. لكن هذا المستخدم تم حذف حسابه بعدها"
"{author} commented on {file}":"{author} comentó en: {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> pa ficheros",
"Files":"Ficheros",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Mentáronte en «{file}», nun comentariu d'una cuenta que ta desaniciada",
"{user} mentioned you in a comment on \"{file}\"":"{user} mentóte nun comentariu de: «{file}»",
"Files app plugin to add comments to files":"Plugin de l'aplicación Ficheros p'amestar comentarios a los ficheros",
"Edit comment":"Editar el comentariu",
@@ -30,7 +32,6 @@ OC.L10N.register(
"Comment deleted":"Desanicióse'l comentariu",
"An error occurred while trying to delete the comment":"Prodúxose un error mentanto se tentaba de desaniciar el comentariu",
"An error occurred while trying to create the comment":"Prodúxose un error mentanto se tentaba de crear el comentariu",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Un usuariu que ta desaniciáu mentóte nun comentariu de: {file}",
"_%n unread comment_::_%n unread comments_":["%n comentariu ensin lleer","%n comentarios ensin lleer"]
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Un usuariu que ta desaniciáu mentóte nun comentariu de: {file}"
"{author} commented on {file}":"{author} comentó en: {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> pa ficheros",
"Files":"Ficheros",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Mentáronte en «{file}», nun comentariu d'una cuenta que ta desaniciada",
"{user} mentioned you in a comment on \"{file}\"":"{user} mentóte nun comentariu de: «{file}»",
"Files app plugin to add comments to files":"Plugin de l'aplicación Ficheros p'amestar comentarios a los ficheros",
"Edit comment":"Editar el comentariu",
@@ -28,7 +30,6 @@
"Comment deleted":"Desanicióse'l comentariu",
"An error occurred while trying to delete the comment":"Prodúxose un error mentanto se tentaba de desaniciar el comentariu",
"An error occurred while trying to create the comment":"Prodúxose un error mentanto se tentaba de crear el comentariu",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Un usuariu que ta desaniciáu mentóte nun comentariu de: {file}",
"_%n unread comment_::_%n unread comments_":["%n comentariu ensin lleer","%n comentarios ensin lleer"]
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Un usuariu que ta desaniciáu mentóte nun comentariu de: {file}"
"%1$s commented on %2$s":"%1$s коментиран за %2$s",
"{author} commented on {file}":"{author} коментира за {file}",
"<strong>Comments</strong> for files":"<strong>Коментари</strong> за файлове",
"Files":"Файлове",
"{user} mentioned you in a comment on \"{file}\"":"{user} ви спомена в коментар за “{file}”",
"Files app plugin to add comments to files":"Добавка на приложението Файлове за добавяне на коментари към файловете",
"Edit comment":"Редактирай коментра",
@@ -25,7 +26,6 @@ OC.L10N.register(
"Comment deleted":" Изтрит е коментар",
"An error occurred while trying to delete the comment":"Възникна грешка при опит за изтриване на коментара",
"An error occurred while trying to create the comment":"Възникна грешка при опит за създаване на коментар",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит"
"%1$s commented on %2$s":"%1$s коментиран за %2$s",
"{author} commented on {file}":"{author} коментира за {file}",
"<strong>Comments</strong> for files":"<strong>Коментари</strong> за файлове",
"Files":"Файлове",
"{user} mentioned you in a comment on \"{file}\"":"{user} ви спомена в коментар за “{file}”",
"Files app plugin to add comments to files":"Добавка на приложението Файлове за добавяне на коментари към файловете",
"Edit comment":"Редактирай коментра",
@@ -23,7 +24,6 @@
"Comment deleted":" Изтрит е коментар",
"An error occurred while trying to delete the comment":"Възникна грешка при опит за изтриване на коментара",
"An error occurred while trying to create the comment":"Възникна грешка при опит за създаване на коментар",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит"
"%1$s commented on %2$s":"%1$s ha escrit un comentari a %2$s",
"{author} commented on {file}":"{author} ha escrit un comentari a {file}",
"<strong>Comments</strong> for files":"<strong>Comentaris</strong> per a fitxers",
"Files":"Fitxers",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un compte que s'ha suprimit",
"{user} mentioned you in a comment on \"{file}\"":"{user} us ha esmentat en un comentari a «{file}»",
"Files app plugin to add comments to files":"Connector de l'aplicació Fitxers per a afegir comentaris als fitxers",
@@ -31,9 +32,6 @@ OC.L10N.register(
"Comment deleted":"S'ha suprimit el comentari",
"An error occurred while trying to delete the comment":"S'ha produït un error en intentar suprimir el comentari",
"An error occurred while trying to create the comment":"S'ha produït un error en intentar crear el comentari",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un usuari que s'ha suprimit",
"_%n unread comment_::_%n unread comments_":["%n comentari sense llegir","%n comentaris sense llegir"],
"Write a message …":"Escriviu un missatge…",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"«@» per a mencions, «:» per a emojis, «/» per al selector intel·ligent"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un usuari que s'ha suprimit"
"%1$s commented on %2$s":"%1$s ha escrit un comentari a %2$s",
"{author} commented on {file}":"{author} ha escrit un comentari a {file}",
"<strong>Comments</strong> for files":"<strong>Comentaris</strong> per a fitxers",
"Files":"Fitxers",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un compte que s'ha suprimit",
"{user} mentioned you in a comment on \"{file}\"":"{user} us ha esmentat en un comentari a «{file}»",
"Files app plugin to add comments to files":"Connector de l'aplicació Fitxers per a afegir comentaris als fitxers",
@@ -29,9 +30,6 @@
"Comment deleted":"S'ha suprimit el comentari",
"An error occurred while trying to delete the comment":"S'ha produït un error en intentar suprimir el comentari",
"An error occurred while trying to create the comment":"S'ha produït un error en intentar crear el comentari",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un usuari que s'ha suprimit",
"_%n unread comment_::_%n unread comments_":["%n comentari sense llegir","%n comentaris sense llegir"],
"Write a message …":"Escriviu un missatge…",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"«@» per a mencions, «:» per a emojis, «/» per al selector intel·ligent"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Se us ha esmentat a «{file}» en un comentari d'un usuari que s'ha suprimit"
"%1$s commented on %2$s":"%1$s okomentoval(a) %2$s",
"{author} commented on {file}":"{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files":"<strong>Komentáře</strong> k souborům",
"Files":"Soubory",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
"{user} mentioned you in a comment on \"{file}\"":"{user} vás zmínil(a) v komentáři u „{file}“",
"Files app plugin to add comments to files":"Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
"Edit comment":"Upravit komentář",
@@ -30,8 +32,6 @@ OC.L10N.register(
"Comment deleted":"Komentář smazán",
"An error occurred while trying to delete the comment":"Došlo k chybě při pokusu o smazání komentáře",
"An error occurred while trying to create the comment":"Došlo k chybě při pokusu o vytvoření komentáře",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od uživatele, který byl později smazán",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"„@“ pro zmínění, „:“ pro emotikony, „/“ pro inteligentní výběr"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od uživatele, který byl později smazán"
"%1$s commented on %2$s":"%1$s okomentoval(a) %2$s",
"{author} commented on {file}":"{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files":"<strong>Komentáře</strong> k souborům",
"Files":"Soubory",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
"{user} mentioned you in a comment on \"{file}\"":"{user} vás zmínil(a) v komentáři u „{file}“",
"Files app plugin to add comments to files":"Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
"Edit comment":"Upravit komentář",
@@ -28,8 +30,6 @@
"Comment deleted":"Komentář smazán",
"An error occurred while trying to delete the comment":"Došlo k chybě při pokusu o smazání komentáře",
"An error occurred while trying to create the comment":"Došlo k chybě při pokusu o vytvoření komentáře",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od uživatele, který byl později smazán",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"„@“ pro zmínění, „:“ pro emotikony, „/“ pro inteligentní výběr"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Byli jste zmíněni u souboru „{file}“, v komentáři od uživatele, který byl později smazán"
"%1$s commented on %2$s":"%1$s kommenterede %2$s",
"{author} commented on {file}":"{author} kommenterede {file}",
"<strong>Comments</strong> for files":"<strong>Kommentarer</strong> for filer",
"Files":"Filer",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en konto, som siden er blevet slettet",
"{user} mentioned you in a comment on \"{file}\"":"{user} nævnte dig i en kommentar til \"{file}\"",
"Files app plugin to add comments to files":"Files app plugin til at tilføje kommentarer til filer",
"Edit comment":"Rediger kommentar",
"Delete comment":"Slet kommentar",
"Cancel edit":"Annuller redigering",
"New comment":"Ny kommentar",
"Write a comment …":"Skriv kommentar…",
"Post comment":"Skriv kommentar",
"@ for mentions, : for emoji, / for smart picker":"\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger",
"Could not reload comments":"Kunne ikke indlæse kommentarer",
"No comments yet, start the conversation!":"Ingen kommentarer endnu, start samtalen!",
"No more messages":"Ikke flere beskeder",
"Retry":"Prøv igen",
@@ -26,8 +32,6 @@ OC.L10N.register(
"Comment deleted":"Kommentar slettet",
"An error occurred while trying to delete the comment":"Der opstod en fejl under forsøget på at slette kommentaren",
"An error occurred while trying to create the comment":"Der opstod en fejl under forsøget på at oprette kommentaren",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en bruger, som siden er blevet slettet",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en bruger, som siden er blevet slettet"
"%1$s commented on %2$s":"%1$s kommenterede %2$s",
"{author} commented on {file}":"{author} kommenterede {file}",
"<strong>Comments</strong> for files":"<strong>Kommentarer</strong> for filer",
"Files":"Filer",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en konto, som siden er blevet slettet",
"{user} mentioned you in a comment on \"{file}\"":"{user} nævnte dig i en kommentar til \"{file}\"",
"Files app plugin to add comments to files":"Files app plugin til at tilføje kommentarer til filer",
"Edit comment":"Rediger kommentar",
"Delete comment":"Slet kommentar",
"Cancel edit":"Annuller redigering",
"New comment":"Ny kommentar",
"Write a comment …":"Skriv kommentar…",
"Post comment":"Skriv kommentar",
"@ for mentions, : for emoji, / for smart picker":"\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger",
"Could not reload comments":"Kunne ikke indlæse kommentarer",
"No comments yet, start the conversation!":"Ingen kommentarer endnu, start samtalen!",
"No more messages":"Ikke flere beskeder",
"Retry":"Prøv igen",
@@ -24,8 +30,6 @@
"Comment deleted":"Kommentar slettet",
"An error occurred while trying to delete the comment":"Der opstod en fejl under forsøget på at slette kommentaren",
"An error occurred while trying to create the comment":"Der opstod en fejl under forsøget på at oprette kommentaren",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en bruger, som siden er blevet slettet",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" for at nævne, \":\" for emojis, \"/\" for Smart Vælger"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du blev nævnt på \"{file}\", i en kommentar af en bruger, som siden er blevet slettet"
"%1$s commented on %2$s":"%1$s kommentierte %2$s",
"{author} commented on {file}":"{author} hat {file} kommentiert",
"<strong>Comments</strong> for files":"<strong>Kommentare</strong> für Dateien",
"Files":"Dateien",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Du wurdest in einem Kommentar zu \"{file}\" von einem Konto erwähnt, das inzwischen gelöscht wurde.",
"{user} mentioned you in a comment on \"{file}\"":"{user} hat dich in einem Kommentar zu \"{file}\" erwähnt",
"Files app plugin to add comments to files":"Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Edit comment":"Kommentar bearbeiten",
"Delete comment":"Kommentar löschen",
"Cancel edit":"Bearbeiten abbrechen",
"New comment":"Neuer Kommentar",
"Write a comment …":"Schreibe einen Kommentar …",
"Post comment":"Kommentar veröffentlichen",
"@ for mentions, : for emoji, / for smart picker":"@ für Erwähnungen, : für Emoji, / für Smart Picker",
"Could not reload comments":"Kommentare konnten nicht erneut geladen werden",
@@ -29,7 +32,6 @@ OC.L10N.register(
"Comment deleted":"Kommentar gelöscht",
"An error occurred while trying to delete the comment":"Es ist ein Fehler beim Löschen des Kommentars aufgetreten",
"An error occurred while trying to create the comment":"Es ist ein Fehler beim Erstellen des Kommentars aufgetreten",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt"
"%1$s commented on %2$s":"%1$s kommentierte %2$s",
"{author} commented on {file}":"{author} hat {file} kommentiert",
"<strong>Comments</strong> for files":"<strong>Kommentare</strong> für Dateien",
"Files":"Dateien",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Du wurdest in einem Kommentar zu \"{file}\" von einem Konto erwähnt, das inzwischen gelöscht wurde.",
"{user} mentioned you in a comment on \"{file}\"":"{user} hat dich in einem Kommentar zu \"{file}\" erwähnt",
"Files app plugin to add comments to files":"Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Edit comment":"Kommentar bearbeiten",
"Delete comment":"Kommentar löschen",
"Cancel edit":"Bearbeiten abbrechen",
"New comment":"Neuer Kommentar",
"Write a comment …":"Schreibe einen Kommentar …",
"Post comment":"Kommentar veröffentlichen",
"@ for mentions, : for emoji, / for smart picker":"@ für Erwähnungen, : für Emoji, / für Smart Picker",
"Could not reload comments":"Kommentare konnten nicht erneut geladen werden",
@@ -27,7 +30,6 @@
"Comment deleted":"Kommentar gelöscht",
"An error occurred while trying to delete the comment":"Es ist ein Fehler beim Löschen des Kommentars aufgetreten",
"An error occurred while trying to create the comment":"Es ist ein Fehler beim Erstellen des Kommentars aufgetreten",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt"
"%1$s commented on %2$s":"%1$s kommentierte %2$s",
"{author} commented on {file}":"{author} hat {file} kommentiert",
"<strong>Comments</strong> for files":"<strong>Kommentare</strong> für Dateien",
"Files":"Dateien",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Sie wurden in einem Kommentar zu \"{file}\" von einem Konto erwähnt, das inzwischen gelöscht wurde.",
"{user} mentioned you in a comment on \"{file}\"":"{user} hat Sie in einem Kommentar zu \"{file}\" erwähnt",
"Files app plugin to add comments to files":"Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
@@ -31,9 +32,6 @@ OC.L10N.register(
"Comment deleted":"Kommentar gelöscht",
"An error occurred while trying to delete the comment":"Es ist ein Fehler beim Löschen des Kommentars aufgetreten",
"An error occurred while trying to create the comment":"Es ist ein Fehler beim Erstellen des Kommentars aufgetreten",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" für Erwähnungen, \":\" für Emoji, \"/\" für Smart Picker"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt"
"%1$s commented on %2$s":"%1$s kommentierte %2$s",
"{author} commented on {file}":"{author} hat {file} kommentiert",
"<strong>Comments</strong> for files":"<strong>Kommentare</strong> für Dateien",
"Files":"Dateien",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Sie wurden in einem Kommentar zu \"{file}\" von einem Konto erwähnt, das inzwischen gelöscht wurde.",
"{user} mentioned you in a comment on \"{file}\"":"{user} hat Sie in einem Kommentar zu \"{file}\" erwähnt",
"Files app plugin to add comments to files":"Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
@@ -29,9 +30,6 @@
"Comment deleted":"Kommentar gelöscht",
"An error occurred while trying to delete the comment":"Es ist ein Fehler beim Löschen des Kommentars aufgetreten",
"An error occurred while trying to create the comment":"Es ist ein Fehler beim Erstellen des Kommentars aufgetreten",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" für Erwähnungen, \":\" für Emoji, \"/\" für Smart Picker"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Benutzer erwähnt"
"%1$s commented on %2$s":"%1$s σχολίασε στο %2$s",
"{author} commented on {file}":"Ο {author} σχολίασε στο {file}",
"<strong>Comments</strong> for files":"<strong>Σχόλια</strong> για αρχεία",
"Files":"Αρχεία",
"{user} mentioned you in a comment on \"{file}\"":"Ο/η {user} σας ανέφερε σε σχόλιο στο “{file}”",
"Files app plugin to add comments to files":"Επέκταση της εφαρμογής Αρχεία που επιτρέπει την προσθήκη σχολίων σε αρχεία",
"Edit comment":"Επεξεργασία σχολίου",
@@ -26,7 +27,6 @@ OC.L10N.register(
"Comment deleted":"Το σχόλιο διαγράφηκε",
"An error occurred while trying to delete the comment":"Παρουσιάστηκε σφάλμα κατά την προσπάθεια διαγραφής του σχολίου",
"An error occurred while trying to create the comment":"Παρουσιάστηκε σφάλμα κατά την προσπάθεια δημιουργίας του σχολίου",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Το όνομά σας αναφέρθηκε στο “{file}”, σε σχόλιο ενός χρήστη ο οποίος έχει πλέον διαγραφεί",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Το όνομά σας αναφέρθηκε στο “{file}”, σε σχόλιο ενός χρήστη ο οποίος έχει πλέον διαγραφεί"
"%1$s commented on %2$s":"%1$s σχολίασε στο %2$s",
"{author} commented on {file}":"Ο {author} σχολίασε στο {file}",
"<strong>Comments</strong> for files":"<strong>Σχόλια</strong> για αρχεία",
"Files":"Αρχεία",
"{user} mentioned you in a comment on \"{file}\"":"Ο/η {user} σας ανέφερε σε σχόλιο στο “{file}”",
"Files app plugin to add comments to files":"Επέκταση της εφαρμογής Αρχεία που επιτρέπει την προσθήκη σχολίων σε αρχεία",
"Edit comment":"Επεξεργασία σχολίου",
@@ -24,7 +25,6 @@
"Comment deleted":"Το σχόλιο διαγράφηκε",
"An error occurred while trying to delete the comment":"Παρουσιάστηκε σφάλμα κατά την προσπάθεια διαγραφής του σχολίου",
"An error occurred while trying to create the comment":"Παρουσιάστηκε σφάλμα κατά την προσπάθεια δημιουργίας του σχολίου",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Το όνομά σας αναφέρθηκε στο “{file}”, σε σχόλιο ενός χρήστη ο οποίος έχει πλέον διαγραφεί",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Το όνομά σας αναφέρθηκε στο “{file}”, σε σχόλιο ενός χρήστη ο οποίος έχει πλέον διαγραφεί"
"%1$s commented on %2$s":"%1$s commented on %2$s",
"{author} commented on {file}":"{author} commented on {file}",
"<strong>Comments</strong> for files":"<strong>Comments</strong> for files",
"Files":"Files",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"You were mentioned on \"{file}\", in a comment by an account that has since been deleted",
"{user} mentioned you in a comment on \"{file}\"":"{user} mentioned you in a comment on \"{file}\"",
"Files app plugin to add comments to files":"Files app plugin to add comments to files",
@@ -31,9 +32,6 @@ OC.L10N.register(
"Comment deleted":"Comment deleted",
"An error occurred while trying to delete the comment":"An error occurred while trying to delete the comment",
"An error occurred while trying to create the comment":"An error occurred while trying to create the comment",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"You were mentioned on \"{file}\", in a comment by a user that has since been deleted",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"You were mentioned on \"{file}\", in a comment by a user that has since been deleted"
"%1$s commented on %2$s":"%1$s commented on %2$s",
"{author} commented on {file}":"{author} commented on {file}",
"<strong>Comments</strong> for files":"<strong>Comments</strong> for files",
"Files":"Files",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"You were mentioned on \"{file}\", in a comment by an account that has since been deleted",
"{user} mentioned you in a comment on \"{file}\"":"{user} mentioned you in a comment on \"{file}\"",
"Files app plugin to add comments to files":"Files app plugin to add comments to files",
@@ -29,9 +30,6 @@
"Comment deleted":"Comment deleted",
"An error occurred while trying to delete the comment":"An error occurred while trying to delete the comment",
"An error occurred while trying to create the comment":"An error occurred while trying to create the comment",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"You were mentioned on \"{file}\", in a comment by a user that has since been deleted",
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"You were mentioned on \"{file}\", in a comment by a user that has since been deleted"
"%1$s commented on %2$s":"%1$s comentados en %2$s",
"{author} commented on {file}":"{author} comentó en {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> para archivos",
"{user} mentioned you in a comment on \"{file}\"":"{user} te mencionó en un comentario en “{file}”",
"Files":"Archivos",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Fue mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
"{user} mentioned you in a comment on \"{file}\"":"{user} le mencionó en un comentario en “{file}”",
"Files app plugin to add comments to files":"Plugin de la app de Archivos para añadir comentarios a archivos.",
"Edit comment":"Editar comentario",
"Delete comment":"Borrar comentario",
@@ -30,8 +32,6 @@ OC.L10N.register(
"Comment deleted":"Comentario borrado",
"An error occurred while trying to delete the comment":"Ocurrió un error intentando borrar el comentario",
"An error occurred while trying to create the comment":"Ocurrió un error intentando crear el comentario",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Te han mencionado en \"{file}\", en un comentario de un usuario que después ha sido eliminado",
"_%n unread comment_::_%n unread comments_":["%n comentario sin leer","%n comentarios no leídos","%n comentarios no leídos"],
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" para menciones, \":\" para emojis, \"/\" para selector inteligente"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Le han mencionado en \"{file}\", en un comentario de un usuario que ha sido eliminado desde entonces"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
"%1$s commented on %2$s":"%1$s comentados en %2$s",
"{author} commented on {file}":"{author} comentó en {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> para archivos",
"{user} mentioned you in a comment on \"{file}\"":"{user} te mencionó en un comentario en “{file}”",
"Files":"Archivos",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted":"Fue mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
"{user} mentioned you in a comment on \"{file}\"":"{user} le mencionó en un comentario en “{file}”",
"Files app plugin to add comments to files":"Plugin de la app de Archivos para añadir comentarios a archivos.",
"Edit comment":"Editar comentario",
"Delete comment":"Borrar comentario",
@@ -28,8 +30,6 @@
"Comment deleted":"Comentario borrado",
"An error occurred while trying to delete the comment":"Ocurrió un error intentando borrar el comentario",
"An error occurred while trying to create the comment":"Ocurrió un error intentando crear el comentario",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Te han mencionado en \"{file}\", en un comentario de un usuario que después ha sido eliminado",
"_%n unread comment_::_%n unread comments_":["%n comentario sin leer","%n comentarios no leídos","%n comentarios no leídos"],
"\"@\" for mentions, \":\" for emoji, \"/\" for smart picker":"\"@\" para menciones, \":\" para emojis, \"/\" para selector inteligente"
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Le han mencionado en \"{file}\", en un comentario de un usuario que ha sido eliminado desde entonces"
},"pluralForm":"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
"{author} commented on {file}":"{author} comentó en {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> de los archivos",
"Files":"Archivo",
"{user} mentioned you in a comment on \"{file}\"":"{user} te mencionó en un comentario en \"{file}\"",
"Files app plugin to add comments to files":"Plugin de la aplicación de archivos para agregar comentarios a los archivos",
"Edit comment":"Editar comentario",
@@ -26,7 +27,6 @@ OC.L10N.register(
"Comment deleted":"Comentario eliminado",
"An error occurred while trying to delete the comment":"Ocurrió un error al intentar eliminar el comentario",
"An error occurred while trying to create the comment":"Ocurrió un error al intentar crear el comentario",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Fuiste mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
"_%n unread comment_::_%n unread comments_":["%n comentarios sin leer","%n comentarios sin leer","%n comentarios sin leer"]
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Fuiste mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
"{author} commented on {file}":"{author} comentó en {file}",
"<strong>Comments</strong> for files":"<strong>Comentarios</strong> de los archivos",
"Files":"Archivo",
"{user} mentioned you in a comment on \"{file}\"":"{user} te mencionó en un comentario en \"{file}\"",
"Files app plugin to add comments to files":"Plugin de la aplicación de archivos para agregar comentarios a los archivos",
"Edit comment":"Editar comentario",
@@ -24,7 +25,6 @@
"Comment deleted":"Comentario eliminado",
"An error occurred while trying to delete the comment":"Ocurrió un error al intentar eliminar el comentario",
"An error occurred while trying to create the comment":"Ocurrió un error al intentar crear el comentario",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Fuiste mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
"_%n unread comment_::_%n unread comments_":["%n comentarios sin leer","%n comentarios sin leer","%n comentarios sin leer"]
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted":"Fuiste mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado"
},"pluralForm":"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.