Compare commits

..

5 Commits

Author SHA1 Message Date
Marcel Klehr 9eff3be693 fix(settings): Improve TaskProcessingPickupSpeed setup check
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-10-13 14:06:31 +02:00
Marcel Klehr aa296f5f64 fix(TaskProcessing): Update autoloaders
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-10-13 13:23:50 +02:00
Marcel Klehr 7d2a1568e8 fix(TaskProcessing): Update openapi descriptions for user-facing error messages
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-10-13 13:19:47 +02:00
Marcel Klehr aaadbdf765 test(TaskProcessing): Add test for user-facing error messages
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-10-13 13:16:19 +02:00
Marcel Klehr 1152dcc3ea feat(TaskProcessing): user-facing error messages
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-10-13 12:39:02 +02:00
1526 changed files with 29967 additions and 50821 deletions
+44 -46
View File
@@ -4,35 +4,33 @@ ARG DEBIAN_FRONTEND=noninteractive
# PHP
RUN apt-get update -y && \
apt install -y apache2 vim software-properties-common sudo nano gnupg2 wget curl git \
lsb-release ca-certificates apt-transport-https && \
add-apt-repository ppa:ondrej/php -y && \
apt-get update -y
apt install -y apache2 vim software-properties-common sudo nano gnupg2
RUN apt-get install --no-install-recommends -y \
php8.4 \
php8.4-common \
php8.4-gd \
php8.4-zip \
php8.4-curl \
php8.4-xml \
php8.4-xmlrpc \
php8.4-mbstring \
php8.4-sqlite \
php8.4-xdebug \
php8.4-pgsql \
php8.4-intl \
php8.4-imagick \
php8.4-gmp \
php8.4-apcu \
php8.4-bcmath \
php8.4-redis \
php8.4-soap \
php8.4-imap \
php8.4-opcache \
php8.4-cli \
php8.4-dev \
php8.3 \
php8.3-common \
php8.3-gd \
php8.3-zip \
php8.3-curl \
php8.3-xml \
php8.3-xmlrpc \
php8.3-mbstring \
php8.3-sqlite \
php8.3-xdebug \
php8.3-pgsql \
php8.3-intl \
php8.3-imagick \
php8.3-gmp \
php8.3-apcu \
php8.3-bcmath \
php8.3-redis \
php8.3-soap \
php8.3-imap \
php8.3-opcache \
php8.3-cli \
php8.3-dev \
libmagickcore-6.q16-7-extra \
curl \
lsof \
make \
unzip
@@ -44,39 +42,39 @@ RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php && \
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
rm /tmp/composer-setup.php /tmp/composer-setup.sig
RUN echo "xdebug.remote_enable = 1" >> /etc/php/8.4/cli/conf.d/20-xdebug.ini && \
echo "xdebug.remote_autostart = 1" >> /etc/php/8.4/cli/conf.d/20-xdebug.ini && \
echo "apc.enable_cli=1" >> /etc/php/8.4/cli/conf.d/20-apcu.ini
RUN echo "xdebug.remote_enable = 1" >> /etc/php/8.3/cli/conf.d/20-xdebug.ini && \
echo "xdebug.remote_autostart = 1" >> /etc/php/8.3/cli/conf.d/20-xdebug.ini && \
echo "apc.enable_cli=1" >> /etc/php/8.3/cli/conf.d/20-apcu.ini
# Autostart XDebug for apache
RUN { \
echo "xdebug.mode=debug"; \
echo "xdebug.start_with_request=yes"; \
} >> /etc/php/8.4/apache2/conf.d/20-xdebug.ini
} >> /etc/php/8.3/apache2/conf.d/20-xdebug.ini
# Increase PHP memory limit to 512mb
RUN sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.4/apache2/php.ini
RUN sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.3/apache2/php.ini
# Docker CLI only (for controlling host Docker via socket)
RUN install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \
chmod a+r /etc/apt/keyrings/docker.asc && \
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null && \
# Docker
RUN apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" && \
apt-get update -y && \
apt-get install -y docker-ce-cli && \
apt-get install -y docker-ce docker-ce-cli containerd.io && \
ln -s /var/run/docker-host.sock /var/run/docker.sock
# Dedicated DevContainer user runs Apache
ENV APACHE_RUN_USER=devcontainer
ENV APACHE_RUN_GROUP=devcontainer
# Delete any existing user/group with UID/GID 1000 first
RUN (getent passwd 1000 && userdel -r $(getent passwd 1000 | cut -d: -f1)) || true && \
(getent group 1000 && groupdel $(getent group 1000 | cut -d: -f1)) || true && \
groupadd -g 1000 ${APACHE_RUN_GROUP} && \
useradd -u 1000 -g 1000 -ms /bin/bash ${APACHE_RUN_USER} && \
RUN useradd -ms /bin/bash ${APACHE_RUN_USER} && \
adduser ${APACHE_RUN_USER} sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
sed -ri "s/^export APACHE_RUN_USER=.*$/export APACHE_RUN_USER=${APACHE_RUN_USER}/" "/etc/apache2/envvars" && \
@@ -86,6 +84,6 @@ USER devcontainer
# NVM
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
RUN bash --login -i -c 'source /home/devcontainer/.bashrc && nvm install 22'
RUN bash --login -i -c 'source /home/devcontainer/.bashrc && nvm install 16'
WORKDIR /var/www/html
+1
View File
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
version: '3'
services:
nextclouddev:
build: .
+1 -6
View File
@@ -5,9 +5,4 @@
#
# Set git safe.directory
git config --global --add safe.directory /var/www/html
git config --global --add safe.directory /var/www/html/3rdparty
# Ensure devcontainer user has access to docker socket
if [ -S /var/run/docker.sock ]; then
sudo chmod 666 /var/run/docker.sock
fi
git config --global --add safe.directory /var/www/html/3rdparty
-2
View File
@@ -15,8 +15,6 @@
**/js @nextcloud/server-frontend
**/src @nextcloud/server-frontend
*.js @nextcloud/server-frontend
*.cjs @nextcloud/server-frontend
*.mjs @nextcloud/server-frontend
*.ts @nextcloud/server-frontend
# dependency management
+2 -2
View File
@@ -102,8 +102,8 @@ jobs:
matrix:
# Run multiple copies of the current job in parallel
# Please increase the number or runners as your tests suite grows (0 based index for e2e tests)
containers: ['setup', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# Hack as strategy.job-total includes the "setup" and GitHub does not allow math expressions
containers: ['component', 'setup', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# Hack as strategy.job-total includes the component and GitHub does not allow math expressions
# Always align this number with the total of e2e runners (max. index + 1)
total-containers: [10]
+1 -2
View File
@@ -84,10 +84,9 @@ jobs:
ports:
- 6379:6379/tcp
openldap:
image: ghcr.io/nextcloud/continuous-integration-openldap:openldap-8 # zizmor: ignore[unpinned-images]
image: ghcr.io/nextcloud/continuous-integration-openldap:openldap-7 # zizmor: ignore[unpinned-images]
ports:
- 389:389
- 636:636
env:
SLAPD_DOMAIN: nextcloud.ci
SLAPD_ORGANIZATION: Nextcloud
+31 -2
View File
@@ -114,6 +114,35 @@ jobs:
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
jsunit:
runs-on: ubuntu-latest
needs: [versions, changes]
if: ${{ needs.versions.result != 'failure' && needs.changes.outputs.src != 'false' }}
env:
CYPRESS_INSTALL_BINARY: 0
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ needs.versions.outputs.nodeVersion }}
- name: Set up npm ${{ needs.versions.outputs.npmVersion }}
run: npm i -g 'npm@${{ needs.versions.outputs.npmVersion }}'
- name: Install dependencies
run: npm ci
- name: Test
run: npm run test:jsunit
handlebars:
runs-on: ubuntu-latest
needs: [versions, changes]
@@ -148,7 +177,7 @@ jobs:
permissions:
contents: none
runs-on: ubuntu-latest-low
needs: [changes, test, handlebars]
needs: [changes, test, jsunit, handlebars]
if: always()
@@ -156,4 +185,4 @@ jobs:
steps:
- name: Summary status
run: if ${{ needs.changes.outputs.src != 'false' && (needs.test.result != 'success' || needs.handlebars.result != 'success') }}; then exit 1; fi
run: if ${{ needs.changes.outputs.src != 'false' && (needs.test.result != 'success' || needs.jsunit.result != 'success' || needs.handlebars.result != 'success') }}; then exit 1; fi
-1
View File
@@ -2,7 +2,6 @@
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: CC0-1.0
*/
export function setup() {
process.env.TZ = 'UTC'
}
-1
View File
@@ -2,6 +2,5 @@
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: CC0-1.0
*/
import '@testing-library/jest-dom/vitest'
import 'core-js/stable/index.js'
@@ -23,4 +23,6 @@ return array(
'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\Search\\CommentsSearchProvider' => $baseDir . '/../lib/Search/CommentsSearchProvider.php',
'OCA\\Comments\\Search\\LegacyProvider' => $baseDir . '/../lib/Search/LegacyProvider.php',
'OCA\\Comments\\Search\\Result' => $baseDir . '/../lib/Search/Result.php',
);
@@ -38,6 +38,8 @@ class ComposerStaticInitComments
'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\Search\\CommentsSearchProvider' => __DIR__ . '/..' . '/../lib/Search/CommentsSearchProvider.php',
'OCA\\Comments\\Search\\LegacyProvider' => __DIR__ . '/..' . '/../lib/Search/LegacyProvider.php',
'OCA\\Comments\\Search\\Result' => __DIR__ . '/..' . '/../lib/Search/Result.php',
);
public static function getInitializer(ClassLoader $loader)
+1 -1
View File
@@ -19,7 +19,7 @@ OC.L10N.register(
"New comment" : "Новы каментарый",
"Write a comment …" : "Напішыце каментарый …",
"Post comment" : "Апублікаваць каментарый",
"@ for mentions, : for emoji, / for smart picker" : "@ - згадкі, : - эмодзі, / - smart picker",
"@ for mentions, : for emoji, / for smart picker" : "@ - згадкі, : - эмодзі, / - разумны выбар",
"Could not reload comments" : "Не ўдалося перазагрузіць каментарыі",
"Failed to mark comments as read" : "Не атрымалася пазначыць каментарыі як прачытаныя",
"Unable to load the comments list" : "Не ўдалося загрузіць спіс каментарыяў",
+1 -1
View File
@@ -17,7 +17,7 @@
"New comment" : "Новы каментарый",
"Write a comment …" : "Напішыце каментарый …",
"Post comment" : "Апублікаваць каментарый",
"@ for mentions, : for emoji, / for smart picker" : "@ - згадкі, : - эмодзі, / - smart picker",
"@ for mentions, : for emoji, / for smart picker" : "@ - згадкі, : - эмодзі, / - разумны выбар",
"Could not reload comments" : "Не ўдалося перазагрузіць каментарыі",
"Failed to mark comments as read" : "Не атрымалася пазначыць каментарыі як прачытаныя",
"Unable to load the comments list" : "Не ўдалося загрузіць спіс каментарыяў",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Slet kommentar",
"Cancel edit" : "Annullér redigering",
"New comment" : "Ny kommentar",
"Write a comment …" : "Skriv kommentar …",
"Post comment" : "Skriv kommentar",
"@ for mentions, : for emoji, / for smart picker" : "\"@\" for at omtale, \":\" for emojis, \"/\" for Smart Vælger",
"Could not reload comments" : "Kunne ikke indlæse kommentarer",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Slet kommentar",
"Cancel edit" : "Annullér redigering",
"New comment" : "Ny kommentar",
"Write a comment …" : "Skriv kommentar …",
"Post comment" : "Skriv kommentar",
"@ for mentions, : for emoji, / for smart picker" : "\"@\" for at omtale, \":\" for emojis, \"/\" for Smart Vælger",
"Could not reload comments" : "Kunne ikke indlæse kommentarer",
+1 -1
View File
@@ -17,7 +17,7 @@ OC.L10N.register(
"Delete comment" : "Kommentar löschen",
"Cancel edit" : "Bearbeiten abbrechen",
"New comment" : "Neuer Kommentar",
"Write a comment …" : "Einen Kommentar schreiben …",
"Write a comment …" : "Schreiben Sie 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",
+1 -1
View File
@@ -15,7 +15,7 @@
"Delete comment" : "Kommentar löschen",
"Cancel edit" : "Bearbeiten abbrechen",
"New comment" : "Neuer Kommentar",
"Write a comment …" : "Einen Kommentar schreiben …",
"Write a comment …" : "Schreiben Sie 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",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Supprimer le commentaire",
"Cancel edit" : "Annuler les modifications",
"New comment" : "Nouveau commentaire",
"Write a comment …" : "Écrire un commentaire …",
"Post comment" : "Publier le commentaire",
"@ for mentions, : for emoji, / for smart picker" : "@ pour les mentions, : pour les émojis, / pour le sélecteur intelligent",
"Could not reload comments" : "Impossible de recharger les commentaires",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Supprimer le commentaire",
"Cancel edit" : "Annuler les modifications",
"New comment" : "Nouveau commentaire",
"Write a comment …" : "Écrire un commentaire …",
"Post comment" : "Publier le commentaire",
"@ for mentions, : for emoji, / for smart picker" : "@ pour les mentions, : pour les émojis, / pour le sélecteur intelligent",
"Could not reload comments" : "Impossible de recharger les commentaires",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Удалить комментарий",
"Cancel edit" : "Отменить правку",
"New comment" : "Новый комментарий",
"Write a comment …" : "Написать комментарий …",
"Post comment" : "Опубликовать комментарий",
"@ for mentions, : for emoji, / for smart picker" : "@ для упоминаний, : для эмодзи, / для интеллектуального выбора",
"Could not reload comments" : "Не удалось перезагрузить комментарии",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Удалить комментарий",
"Cancel edit" : "Отменить правку",
"New comment" : "Новый комментарий",
"Write a comment …" : "Написать комментарий …",
"Post comment" : "Опубликовать комментарий",
"@ for mentions, : for emoji, / for smart picker" : "@ для упоминаний, : для эмодзи, / для интеллектуального выбора",
"Could not reload comments" : "Не удалось перезагрузить комментарии",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Обриши коментар",
"Cancel edit" : "Поништи измену",
"New comment" : "Нови коментар",
"Write a comment …" : "Напишите коментар …",
"Post comment" : "Објави коментар",
"@ for mentions, : for emoji, / for smart picker" : "@ за помињања, : за емођи, / за паметни бирач",
"Could not reload comments" : "Коментари не могу поново да се учитају",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Обриши коментар",
"Cancel edit" : "Поништи измену",
"New comment" : "Нови коментар",
"Write a comment …" : "Напишите коментар …",
"Post comment" : "Објави коментар",
"@ for mentions, : for emoji, / for smart picker" : "@ за помињања, : за емођи, / за паметни бирач",
"Could not reload comments" : "Коментари не могу поново да се учитају",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Yorumu sil",
"Cancel edit" : "Düzenlemeyi iptal et",
"New comment" : "Yorum ekle",
"Write a comment …" : "Bir yorum yazın…",
"Post comment" : "Yorum gönder",
"@ for mentions, : for emoji, / for smart picker" : "Anmalar için @, emojiler için :, akıllı seçici için /",
"Could not reload comments" : "Yorumlar yeniden yüklenemedi",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Yorumu sil",
"Cancel edit" : "Düzenlemeyi iptal et",
"New comment" : "Yorum ekle",
"Write a comment …" : "Bir yorum yazın…",
"Post comment" : "Yorum gönder",
"@ for mentions, : for emoji, / for smart picker" : "Anmalar için @, emojiler için :, akıllı seçici için /",
"Could not reload comments" : "Yorumlar yeniden yüklenemedi",
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Вилучити коментар",
"Cancel edit" : "Скасувати редагування",
"New comment" : "Новий коментар",
"Write a comment …" : "Додайте коментар …",
"Post comment" : "Опублікувати коментар",
"@ for mentions, : for emoji, / for smart picker" : "@ згадати, : емоційки, / асистент вибору",
"Could not reload comments" : "Не вдалося перезавантажити коментарі",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Вилучити коментар",
"Cancel edit" : "Скасувати редагування",
"New comment" : "Новий коментар",
"Write a comment …" : "Додайте коментар …",
"Post comment" : "Опублікувати коментар",
"@ for mentions, : for emoji, / for smart picker" : "@ згадати, : емоційки, / асистент вибору",
"Could not reload comments" : "Не вдалося перезавантажити коментарі",
@@ -27,10 +27,6 @@ class CommentersSorter implements ISorter {
* @param array $context
*/
public function sort(array &$sortArray, array $context): void {
if (!isset($context['itemType'], $context['itemId'])) {
return;
}
$commenters = $this->retrieveCommentsInformation($context['itemType'], $context['itemId']);
if (count($commenters) === 0) {
return;
@@ -8,13 +8,6 @@ declare(strict_types=1);
*/
namespace OCA\Comments\Search;
use OCP\Comments\IComment;
use OCP\Comments\ICommentsManager;
use OCP\Files\Folder;
use OCP\Files\InvalidPathException;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
@@ -23,14 +16,14 @@ use OCP\Search\IProvider;
use OCP\Search\ISearchQuery;
use OCP\Search\SearchResult;
use OCP\Search\SearchResultEntry;
use function array_map;
class CommentsSearchProvider implements IProvider {
public function __construct(
private IUserManager $userManager,
private IL10N $l10n,
private IURLGenerator $urlGenerator,
private ICommentsManager $commentsManager,
private IRootFolder $rootFolder,
private LegacyProvider $legacyProvider,
) {
}
@@ -51,76 +44,30 @@ class CommentsSearchProvider implements IProvider {
}
public function search(IUser $user, ISearchQuery $query): SearchResult {
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
if ($userFolder === null) {
return SearchResult::complete($this->l10n->t('Comments'), []);
}
$result = [];
$numComments = 50;
$offset = 0;
while (count($result) < $numComments) {
$comments = $this->commentsManager->search($query->getTerm(), 'files', '', 'comment', $offset, $numComments);
foreach ($comments as $comment) {
if ($comment->getActorType() !== 'users') {
continue;
}
$displayName = $this->commentsManager->resolveDisplayName('user', $comment->getActorId());
try {
$file = $this->getFileForComment($userFolder, $comment);
$isUser = $this->userManager->userExists($comment->getActorId());
$avatarUrl = $isUser
? $this->urlGenerator->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => $comment->getActorId(), 'size' => 42])
: $this->urlGenerator->linkToRouteAbsolute('core.GuestAvatar.getAvatar', ['guestName' => $comment->getActorId(), 'size' => 42]);
$link = $this->urlGenerator->linkToRoute(
'files.View.showFile',
['fileid' => $file->getId()]
);
$result[] = new SearchResultEntry(
$avatarUrl,
$displayName,
$file->getPath(),
$link,
'',
true
);
} catch (NotFoundException|InvalidPathException $e) {
continue;
}
}
if (count($comments) < $numComments) {
// Didn't find more comments when we tried to get, so there are no more comments.
break;
}
$offset += $numComments;
$numComments = 50 - count($result);
}
return SearchResult::complete(
$this->l10n->t('Comments'),
$result,
array_map(function (Result $result) {
$path = $result->path;
$isUser = $this->userManager->userExists($result->authorId);
$avatarUrl = $isUser
? $this->urlGenerator->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => $result->authorId, 'size' => 42])
: $this->urlGenerator->linkToRouteAbsolute('core.GuestAvatar.getAvatar', ['guestName' => $result->authorId, 'size' => 42]);
$link = $this->urlGenerator->linkToRoute(
'files.View.showFile',
['fileid' => $result->fileId]
);
$searchResultEntry = new SearchResultEntry(
$avatarUrl,
$result->name,
$path,
$link,
'',
true
);
$searchResultEntry->addAttribute('fileId', (string)$result->fileId);
$searchResultEntry->addAttribute('path', $path);
return $searchResultEntry;
}, $this->legacyProvider->search($query->getTerm()))
);
}
/**
* @throws NotFoundException
*/
protected function getFileForComment(Folder $userFolder, IComment $comment): Node {
$nodes = $userFolder->getById((int)$comment->getObjectId());
if (empty($nodes)) {
throw new NotFoundException('File not found');
}
return array_shift($nodes);
}
}
@@ -0,0 +1,99 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Comments\Search;
use OCP\Comments\IComment;
use OCP\Comments\ICommentsManager;
use OCP\Files\Folder;
use OCP\Files\InvalidPathException;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Search\Provider;
use OCP\Server;
use function count;
class LegacyProvider extends Provider {
/**
* Search for $query
*
* @param string $query
* @return array An array of OCP\Search\Result's
* @since 7.0.0
*/
public function search($query): array {
$cm = Server::get(ICommentsManager::class);
$us = Server::get(IUserSession::class);
$user = $us->getUser();
if (!$user instanceof IUser) {
return [];
}
$uf = \OC::$server->getUserFolder($user->getUID());
if ($uf === null) {
return [];
}
$result = [];
$numComments = 50;
$offset = 0;
while (count($result) < $numComments) {
/** @var IComment[] $comments */
$comments = $cm->search($query, 'files', '', 'comment', $offset, $numComments);
foreach ($comments as $comment) {
if ($comment->getActorType() !== 'users') {
continue;
}
$displayName = $cm->resolveDisplayName('user', $comment->getActorId());
try {
$file = $this->getFileForComment($uf, $comment);
$result[] = new Result($query,
$comment,
$displayName,
$file->getPath(),
$file->getId(),
);
} catch (NotFoundException|InvalidPathException $e) {
continue;
}
}
if (count($comments) < $numComments) {
// Didn't find more comments when we tried to get, so there are no more comments.
return $result;
}
$offset += $numComments;
$numComments = 50 - count($result);
}
return $result;
}
/**
* @param Folder $userFolder
* @param IComment $comment
* @return Node
* @throws NotFoundException
*/
protected function getFileForComment(Folder $userFolder, IComment $comment): Node {
$nodes = $userFolder->getById((int)$comment->getObjectId());
if (empty($nodes)) {
throw new NotFoundException('File not found');
}
return array_shift($nodes);
}
}
+109
View File
@@ -0,0 +1,109 @@
<?php
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Comments\Search;
use OCP\Comments\IComment;
use OCP\Files\NotFoundException;
use OCP\Search\Result as BaseResult;
/**
* @deprecated 20.0.0
*/
class Result extends BaseResult {
/**
* @deprecated 20.0.0
*/
public $type = 'comment';
/**
* @deprecated 20.0.0
*/
public $comment;
/**
* @deprecated 20.0.0
*/
public $authorId;
/**
* @deprecated 20.0.0
*/
public $path;
/**
* @deprecated 20.0.0
*/
public $fileName;
/**
* @throws NotFoundException
* @deprecated 20.0.0
*/
public function __construct(
string $search,
IComment $comment,
/**
* @deprecated 20.0.0
*/
public string $authorName,
string $path,
/**
* @deprecated 20.0.0
*/
public int $fileId,
) {
parent::__construct(
$comment->getId(),
$comment->getMessage()
/* @todo , [link to file] */
);
$this->comment = $this->getRelevantMessagePart($comment->getMessage(), $search);
$this->authorId = $comment->getActorId();
$this->fileName = basename($path);
$this->path = $this->getVisiblePath($path);
}
/**
* @throws NotFoundException
*/
protected function getVisiblePath(string $path): string {
$segments = explode('/', trim($path, '/'), 3);
if (!isset($segments[2])) {
throw new NotFoundException('Path not inside visible section');
}
return $segments[2];
}
/**
* @throws NotFoundException
*/
protected function getRelevantMessagePart(string $message, string $search): string {
$start = mb_stripos($message, $search);
if ($start === false) {
throw new NotFoundException('Comment section not found');
}
$end = $start + mb_strlen($search);
if ($start <= 25) {
$start = 0;
$prefix = '';
} else {
$start -= 25;
$prefix = '…';
}
if ((mb_strlen($message) - $end) <= 25) {
$end = mb_strlen($message);
$suffix = '';
} else {
$end += 25;
$suffix = '…';
}
return $prefix . mb_substr($message, $start, $end - $start) . $suffix;
}
}
+2 -3
View File
@@ -27,7 +27,6 @@ export default defineComponent({
key: 'editor',
},
userData: {},
currentResourceId: this.resourceId,
}
},
methods: {
@@ -41,8 +40,8 @@ export default defineComponent({
const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {
params: {
search,
itemType: this.resourceType,
itemId: this.currentResourceId,
itemType: 'files',
itemId: this.resourceId,
sorter: 'commenters|share-recipients',
limit: loadState('comments', 'maxAutoCompleteResults'),
},
+3 -7
View File
@@ -110,6 +110,7 @@ export default {
loading: false,
done: false,
currentResourceId: this.resourceId,
offset: 0,
comments: [],
@@ -157,7 +158,7 @@ export default {
async update(resourceId) {
this.currentResourceId = resourceId
this.resetState()
await this.getComments()
this.getComments()
},
/**
@@ -205,13 +206,8 @@ export default {
this.done = true
}
// Ensure actor id is a string
for (const comment of comments) {
comment.props.actorId = comment.props.actorId.toString()
}
// Insert results
this.comments = [...this.comments, ...comments]
this.comments.push(...comments)
// Increase offset for next fetch
this.offset += DEFAULT_LIMIT
-9
View File
@@ -1,9 +0,0 @@
OC.L10N.register(
"contactsinteraction",
{
"Recently contacted" : "Yaqinda bog'langan",
"Contacts Interaction" : "Kontaktlar o'zaro ta'siri",
"Manages interaction between accounts and contacts" : "Hisoblar va kontaktlar o'rtasidagi o'zaro aloqani boshqaradi",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Hisoblar va kontaktlarning o'zaro aloqalari haqida ma'lumotlarni to'plang va ma'lumotlar uchun manzillar kitobini taqdim eting"
},
"nplurals=1; plural=0;");
-7
View File
@@ -1,7 +0,0 @@
{ "translations": {
"Recently contacted" : "Yaqinda bog'langan",
"Contacts Interaction" : "Kontaktlar o'zaro ta'siri",
"Manages interaction between accounts and contacts" : "Hisoblar va kontaktlar o'rtasidagi o'zaro aloqani boshqaradi",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Hisoblar va kontaktlarning o'zaro aloqalari haqida ma'lumotlarni to'plang va ma'lumotlar uchun manzillar kitobini taqdim eting"
},"pluralForm" :"nplurals=1; plural=0;"
}
-1
View File
@@ -20,7 +20,6 @@ OC.L10N.register(
"Edit widgets" : "Tilpas widgets",
"Get more widgets from the App Store" : "Få flere widgets fra App Store",
"Weather service" : "Vejret",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv anmoder din {productName} server om vejrdata på dine vegne, så vejrtjenesten ikke modtager personlige oplysninger.",
"Weather data from Met.no" : "Vejr-data leveres af Met.no",
"geocoding with Nominatim" : "Geocoding med Nominatim",
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
-1
View File
@@ -18,7 +18,6 @@
"Edit widgets" : "Tilpas widgets",
"Get more widgets from the App Store" : "Få flere widgets fra App Store",
"Weather service" : "Vejret",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv anmoder din {productName} server om vejrdata på dine vegne, så vejrtjenesten ikke modtager personlige oplysninger.",
"Weather data from Met.no" : "Vejr-data leveres af Met.no",
"geocoding with Nominatim" : "Geocoding med Nominatim",
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
+3 -11
View File
@@ -81,7 +81,7 @@ $linkCheckPlugin = new PublicLinkCheckPlugin();
$filesDropPlugin = new FilesDropPlugin();
/** @var string $baseuri defined in public.php */
$server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($baseuri, $requestUri, $authBackend, $linkCheckPlugin, $filesDropPlugin) {
$server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
// GET must be allowed for e.g. showing images and allowing Zip downloads
if ($server->httpRequest->getMethod() !== 'GET') {
// If this is *not* a GET request we only allow access to public DAV from AJAX or when Server2Server is allowed
@@ -103,16 +103,8 @@ $server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin,
$previousLog = Filesystem::logWarningWhenAddingStorageWrapper(false);
/** @psalm-suppress MissingClosureParamType */
Filesystem::addStorageWrapper('sharePermissions', function ($mountPoint, $storage) use ($requestUri, $baseuri, $share) {
$mask = $share->getPermissions() | Constants::PERMISSION_SHARE;
// For chunked uploads it is necessary to have read and delete permission,
// so the temporary directory, chunks and destination file can be read and delete after the assembly.
if (str_starts_with(substr($requestUri, strlen($baseuri) - 1), '/uploads/')) {
$mask |= Constants::PERMISSION_READ | Constants::PERMISSION_DELETE;
}
return new PermissionsMask(['storage' => $storage, 'mask' => $mask]);
Filesystem::addStorageWrapper('sharePermissions', function ($mountPoint, $storage) use ($share) {
return new PermissionsMask(['storage' => $storage, 'mask' => $share->getPermissions() | Constants::PERMISSION_SHARE]);
});
/** @psalm-suppress MissingClosureParamType */
@@ -206,7 +206,6 @@ return array(
'OCA\\DAV\\Comments\\EntityCollection' => $baseDir . '/../lib/Comments/EntityCollection.php',
'OCA\\DAV\\Comments\\EntityTypeCollection' => $baseDir . '/../lib/Comments/EntityTypeCollection.php',
'OCA\\DAV\\Comments\\RootCollection' => $baseDir . '/../lib/Comments/RootCollection.php',
'OCA\\DAV\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
'OCA\\DAV\\Connector\\LegacyDAVACL' => $baseDir . '/../lib/Connector/LegacyDAVACL.php',
'OCA\\DAV\\Connector\\LegacyPublicAuth' => $baseDir . '/../lib/Connector/LegacyPublicAuth.php',
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => $baseDir . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
@@ -221,7 +221,6 @@ class ComposerStaticInitDAV
'OCA\\DAV\\Comments\\EntityCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityCollection.php',
'OCA\\DAV\\Comments\\EntityTypeCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityTypeCollection.php',
'OCA\\DAV\\Comments\\RootCollection' => __DIR__ . '/..' . '/../lib/Comments/RootCollection.php',
'OCA\\DAV\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
'OCA\\DAV\\Connector\\LegacyDAVACL' => __DIR__ . '/..' . '/../lib/Connector/LegacyDAVACL.php',
'OCA\\DAV\\Connector\\LegacyPublicAuth' => __DIR__ . '/..' . '/../lib/Connector/LegacyPublicAuth.php',
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
-1
View File
@@ -252,7 +252,6 @@ OC.L10N.register(
"Completed on %s" : "Dokončeno %s",
"Due on %s by %s" : "Termín do %s od %s",
"Due on %s" : "Termín do %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Vítejte v Nextcloud Kalendáři!\n\nToto je událost pro ukázku prozkoumejte flexibilitu plánování pomoc Nextcloud Kalendáře upravením čeho chcete!\n\nS Nextcloud Kalendářem je možné:\n- Jednoduše vytvářet, upravovat a spravovat události.\n- Vytvářet vícero kalendářů a sdílet je s kolegy, přáteli či rodinou.\n- Zjišťovat dostupnost a zobrazovat své doby nedostupnosti ostatním.\n- Hladce napojovat na aplikace a zřízení prostřednictvím CalDAV.\n- Přizpůsobit si svůj dojem z používání: plánovat opakující se události, upravovat notifikace a ostatní nastavení.",
"Example event - open me!" : "Událost pro ukázku otevřete ji!",
"System Address Book" : "Systémový adresář kontaktů",
"The system address book contains contact information for all users in your instance." : "Systémový adresář kontaktů obsahuje informace pro všechny uživatele ve vámi využívané instanci.",
-1
View File
@@ -250,7 +250,6 @@
"Completed on %s" : "Dokončeno %s",
"Due on %s by %s" : "Termín do %s od %s",
"Due on %s" : "Termín do %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Vítejte v Nextcloud Kalendáři!\n\nToto je událost pro ukázku prozkoumejte flexibilitu plánování pomoc Nextcloud Kalendáře upravením čeho chcete!\n\nS Nextcloud Kalendářem je možné:\n- Jednoduše vytvářet, upravovat a spravovat události.\n- Vytvářet vícero kalendářů a sdílet je s kolegy, přáteli či rodinou.\n- Zjišťovat dostupnost a zobrazovat své doby nedostupnosti ostatním.\n- Hladce napojovat na aplikace a zřízení prostřednictvím CalDAV.\n- Přizpůsobit si svůj dojem z používání: plánovat opakující se události, upravovat notifikace a ostatní nastavení.",
"Example event - open me!" : "Událost pro ukázku otevřete ji!",
"System Address Book" : "Systémový adresář kontaktů",
"The system address book contains contact information for all users in your instance." : "Systémový adresář kontaktů obsahuje informace pro všechny uživatele ve vámi využívané instanci.",
-6
View File
@@ -220,8 +220,6 @@ OC.L10N.register(
"{actor} updated contact {card} in address book {addressbook}" : "{actor} opdaterede kontakten {card} i adressebog {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Du opdaterede kontakten {card} i adressebog {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "En <strong>kontakt</strong> eller <strong>adressebog</strong> blev ændret",
"System address book disabled" : "Systemadressebog deaktiveret",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Adressebogen for systemkontakter er automatisk blevet deaktiveret under opgraderingen. Det betyder, at adressebogen ikke længere vil være tilgængelig for brugere i kontaktappen eller andre klienter. Adressebogen for systemkontakter blev deaktiveret, fordi antallet af kontakter i adressebogen oversteg det maksimale anbefalede antal kontakter. Denne grænse er indstillet for at forhindre problemer med ydeevnen. Du kan genaktivere systemadressebogen med følgende kommando {command}",
"Accounts" : "Konti",
"System address book which holds all accounts" : "Systemets adressebog, som indeholder alle konti",
"File is not updatable: %1$s" : "Filen kan ikke updateres: %1$s",
@@ -260,10 +258,6 @@ OC.L10N.register(
"DAV system address book" : "DAV system adressebog",
"No outstanding DAV system address book sync." : "Ingen udestående synkronisering af DAV-systemets adressebog.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressebogssynkronisering er ikke kørt endnu, da din instans har mere end 1000 brugere, eller fordi der opstod en fejl. Kør det manuelt ved at kalde \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Størrelse på DAV-systemets adressebog",
"The system address book is disabled" : "Systemets adressebog er deaktiveret",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Systemadressebogen er aktiveret, men indeholder mere end den konfigurerede grænse på %d kontakter",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Systemadressebogen er aktiveret og indeholder mindre end den konfigurerede grænse på %d kontakter",
"WebDAV endpoint" : "WebDAV endpoint",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Kunne ikke kontrollere, at din webserver er korrekt konfigureret til at tillade filsynkronisering over WebDAV. Tjek venligst manuelt.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.",
-6
View File
@@ -218,8 +218,6 @@
"{actor} updated contact {card} in address book {addressbook}" : "{actor} opdaterede kontakten {card} i adressebog {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Du opdaterede kontakten {card} i adressebog {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "En <strong>kontakt</strong> eller <strong>adressebog</strong> blev ændret",
"System address book disabled" : "Systemadressebog deaktiveret",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Adressebogen for systemkontakter er automatisk blevet deaktiveret under opgraderingen. Det betyder, at adressebogen ikke længere vil være tilgængelig for brugere i kontaktappen eller andre klienter. Adressebogen for systemkontakter blev deaktiveret, fordi antallet af kontakter i adressebogen oversteg det maksimale anbefalede antal kontakter. Denne grænse er indstillet for at forhindre problemer med ydeevnen. Du kan genaktivere systemadressebogen med følgende kommando {command}",
"Accounts" : "Konti",
"System address book which holds all accounts" : "Systemets adressebog, som indeholder alle konti",
"File is not updatable: %1$s" : "Filen kan ikke updateres: %1$s",
@@ -258,10 +256,6 @@
"DAV system address book" : "DAV system adressebog",
"No outstanding DAV system address book sync." : "Ingen udestående synkronisering af DAV-systemets adressebog.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressebogssynkronisering er ikke kørt endnu, da din instans har mere end 1000 brugere, eller fordi der opstod en fejl. Kør det manuelt ved at kalde \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Størrelse på DAV-systemets adressebog",
"The system address book is disabled" : "Systemets adressebog er deaktiveret",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Systemadressebogen er aktiveret, men indeholder mere end den konfigurerede grænse på %d kontakter",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Systemadressebogen er aktiveret og indeholder mindre end den konfigurerede grænse på %d kontakter",
"WebDAV endpoint" : "WebDAV endpoint",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Kunne ikke kontrollere, at din webserver er korrekt konfigureret til at tillade filsynkronisering over WebDAV. Tjek venligst manuelt.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.",
+7 -7
View File
@@ -308,14 +308,14 @@ OC.L10N.register(
"Reset to default" : "Auf Standard zurücksetzen ",
"Import contacts" : "Kontakte importieren",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
"Failed to save example event creation setting" : "Einstellung für die Beispiels-Terminerstellung konnte nicht gespeichert werden",
"Failed to upload the example event" : "Der Beispieltermin konnte nicht hochgeladen werden",
"Custom example event was saved successfully" : "Benutzerdefinierter Beispieltermin gespeichert",
"Failed to delete the custom example event" : "Benutzerdefinierter Beispieltermin konnte nicht gelöscht werden",
"Custom example event was deleted successfully" : "Benutzerdefinierter Beispieltermin wurde gelöscht",
"Failed to save example event creation setting" : "Einstellung für die Beispiels-Ereigniserstellung konnte nicht gespeichert werden",
"Failed to upload the example event" : "Das Beispielsereignis konnte nicht hochgeladen werden",
"Custom example event was saved successfully" : "Benutzerdefiniertes Beispielereignis gespeichert",
"Failed to delete the custom example event" : "Benutzerdefiniertes Beispielsereignis konnte nicht gelöscht werden",
"Custom example event was deleted successfully" : "Benutzerdefiniertes Beispielsereignis wurde gelöscht",
"Import calendar event" : "Kalenderereignis importieren",
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.",
"Upload event" : "Termin hochladen",
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Ereignisses wird das bestehende Ereignis überschreiben.",
"Upload event" : "Ereignis hochladen",
"Availability" : "Verfügbarkeit",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.",
"Absence" : "Abwesenheit",
+7 -7
View File
@@ -306,14 +306,14 @@
"Reset to default" : "Auf Standard zurücksetzen ",
"Import contacts" : "Kontakte importieren",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
"Failed to save example event creation setting" : "Einstellung für die Beispiels-Terminerstellung konnte nicht gespeichert werden",
"Failed to upload the example event" : "Der Beispieltermin konnte nicht hochgeladen werden",
"Custom example event was saved successfully" : "Benutzerdefinierter Beispieltermin gespeichert",
"Failed to delete the custom example event" : "Benutzerdefinierter Beispieltermin konnte nicht gelöscht werden",
"Custom example event was deleted successfully" : "Benutzerdefinierter Beispieltermin wurde gelöscht",
"Failed to save example event creation setting" : "Einstellung für die Beispiels-Ereigniserstellung konnte nicht gespeichert werden",
"Failed to upload the example event" : "Das Beispielsereignis konnte nicht hochgeladen werden",
"Custom example event was saved successfully" : "Benutzerdefiniertes Beispielereignis gespeichert",
"Failed to delete the custom example event" : "Benutzerdefiniertes Beispielsereignis konnte nicht gelöscht werden",
"Custom example event was deleted successfully" : "Benutzerdefiniertes Beispielsereignis wurde gelöscht",
"Import calendar event" : "Kalenderereignis importieren",
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.",
"Upload event" : "Termin hochladen",
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Ereignisses wird das bestehende Ereignis überschreiben.",
"Upload event" : "Ereignis hochladen",
"Availability" : "Verfügbarkeit",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.",
"Absence" : "Abwesenheit",
+12 -147
View File
@@ -37,18 +37,18 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} врати настан {event} во календарот {calendar}",
"You restored event {event} of calendar {calendar}" : "Вративте настан {event} во календарот {calendar}",
"Busy" : "Зафатен",
"{actor} created to-do {todo} in list {calendar}" : "{actor} креираше задача {todo} во листата {calendar}",
"You created to-do {todo} in list {calendar}" : "Креиравте задача {todo} во листата {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} избриша задача {todo} од листата {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Избришавте задача {todo} од листата {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} ажурираше задача {todo} во листата {calendar}",
"You updated to-do {todo} in list {calendar}" : "Ажуриравте задача {todo} во листата {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} ја заврши задачата {todo} во листата {calendar}",
"You solved to-do {todo} in list {calendar}" : "Ја завршивте задачата {todo} во листата {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} повторно ја отвори задачата {todo} во листата {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Повторно ја отворивте задачата {todo} во листата {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} премести задача {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Преместивте задача {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"{actor} created to-do {todo} in list {calendar}" : "{actor} креираше задолжение {todo} во листата {calendar}",
"You created to-do {todo} in list {calendar}" : "Креиравте задолжение {todo} во листата {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} избриша задолжение {todo} од листата {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Избришавте задолжение {todo} од листата {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} ажурираше задолжение {todo} во листата {calendar}",
"You updated to-do {todo} in list {calendar}" : "Ажуриравте задолжение {todo} во листата {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} го заврши задолжението {todo} во листата {calendar}",
"You solved to-do {todo} in list {calendar}" : "Го завршивте задолжението {todo} во листата {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} повторно го отвори задолжението {todo} во листата {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Повторно го отворивте задолжението {todo} во листата {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} премести задолжение {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Преместивте задолжение {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"Calendar, contacts and tasks" : "Календар, контакти и задачи",
"A <strong>calendar</strong> was modified" : "<strong>Календарот</strong> е променет",
"A calendar <strong>event</strong> was modified" : "Изменет е <strong>настан</strong> во календарот",
@@ -72,78 +72,6 @@ OC.L10N.register(
"Description: %s" : "Опис: %s",
"Where: %s" : "Каде: %s",
"%1$s via %2$s" : "%1$s преку %2$s",
"In the past on %1$s for the entire day" : "Во минатото, на %1$s цел ден",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["За една минута, на %1$s цел ден","За %n минути, на %1$s цел ден"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["За еден час, на %1$s цел ден","За %n часа, на %1$s цел ден"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["In a day on %1$s for the entire day\nЗа еден ден, на %1$s цел ден","За %n дена, на %1$s цел ден"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["За една недела, на %1$s цел ден","За %n недели, на %1$s цел ден"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["За еден месец, на %1$s цел ден","За %n месеци, на %1$s цел ден"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["За една година, на %1$s цел ден","За %n години, на %1$s цел ден"],
"In the past on %1$s between %2$s - %3$s" : "Во минатото, на %1$s помеѓу %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["За една минута, на %1$s помеѓу %2$s - %3$s","За %n минути, на %1$s помеѓу %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["За еден час, на %1$s помеѓу %2$s - %3$s","За %n часа, на %1$s помеѓу %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["За еден ден, на %1$s помеѓу %2$s - %3$s","За %n дена, на %1$s помеѓу %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["За една недела, на %1$s помеѓу %2$s - %3$s","За %n недели, на %1$s помеѓу %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["За еден месец, на %1$s помеѓу %2$s - %3$s","За %n месеци, на %1$s помеѓу %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["За една година, на %1$s помеѓу %2$s - %3$s","За %n години, на %1$s помеѓу %2$s - %3$s"],
"Could not generate when statement" : "Не може да се генерира временската изјава",
"Every Day for the entire day" : "Секој ден, цел ден",
"Every Day for the entire day until %1$s" : "Секој ден, цел ден до %1$s",
"Every Day between %1$s - %2$s" : "Секој ден помеѓу %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Секој ден помеѓу %1$s - %2$s до %3$s",
"Every %1$d Days for the entire day" : "Секои %1$d дена, цел ден",
"Every %1$d Days for the entire day until %2$s" : "Секои %1$d дена, цел ден до %2$s",
"Every %1$d Days between %2$s - %3$s" : "Секои %1$d дена помеѓу %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Секои %1$d дена помеѓу %2$s - %3$s до %4$s",
"Could not generate event recurrence statement" : "Не може да се генерира изјава за повторување на настанот",
"Every Week on %1$s for the entire day" : "Секоја недела во %1$s, цел ден",
"Every Week on %1$s for the entire day until %2$s" : "Секоја недела во %1$s, цел ден до %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Секоја недела во %1$s помеѓу %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Секоја недела во %1$s помеѓу %2$s - %3$s до %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Секои %1$d недели во %2$s, цел ден",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Секои %1$d недели во %2$s, цел ден до %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Секои %1$d недели во %2$s помеѓу %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Секои %1$d недели во %2$s помеѓу %3$s - %4$s до %5$s",
"Every Month on the %1$s for the entire day" : "Секој месец на %1$s, цел ден",
"Every Month on the %1$s for the entire day until %2$s" : "Секој месец на %1$s, цел ден до %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Секој месец на %1$s помеѓу %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Секој месец на %1$s помеѓу %2$s - %3$s до %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Секои %1$d месеци на %2$s, цел ден",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Секои %1$d месеци на %2$s, цел ден до %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Секои %1$d месеци на %2$s помеѓу %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Секои %1$d месеци на %2$s помеѓу %3$s - %4$s до %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Секоја година во %1$s на %2$s, цел ден",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Секоја година во %1$s на %2$s, цел ден до %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Секоја година во %1$s на %2$s помеѓу %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Секоја година во %1$s на %2$s помеѓу %3$s - %4$s до %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Секои %1$d години во %2$s на %3$s, цел ден",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Секои %1$d години во %2$s на %3$s, цел ден до %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Секои %1$d години во %2$s на %3$s помеѓу %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Секои %1$d години во %2$s на %3$s помеѓу %4$s - %5$s до %6$s",
"On specific dates for the entire day until %1$s" : "На одредени датуми, цел ден до %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "На одредени датуми помеѓу %1$s - %2$s до %3$s",
"In the past on %1$s" : "Во минатото, на %1$s",
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["За една минута, на %1$s","За %n минути, на %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["За еден час, на %1$s","За %n часа, на %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["За еден ден, на %1$s","За %n дена, на %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["За една недела, на %1$s","За %n недели, на %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["За еден месец, на %1$s","За %n месеци, на %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["За една година, на %1$s","За %n години, на %1$s"],
"In the past on %1$s then on %2$s" : "Во минатото, на %1$s, па на %2$s",
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["За една минута, на %1$s, па на %2$s","За %n минути, на %1$s, па на %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["За еден час, на %1$s, па на %2$s","За %n часа, на %1$s, па на %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["За еден ден, на %1$s, па на %2$s","За %n дена, на %1$s, па на %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["За една недела, на %1$s, па на %2$s","За %n недели, на %1$s, па на %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["За еден месец, на %1$s, па на %2$s","За %n месеци, на %1$s, па на %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["За една година, на %1$s, па на %2$s","За %n години, на %1$s, па на %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Во минатото, на %1$s, па на %2$s и %3$s",
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["За една минута, на %1$s, па на %2$s и %3$s","За %n минути, на %1$s, па на %2$s и %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["За еден час, на %1$s, па на %2$s и %3$s","За %n часа, на %1$s, па на %2$s и %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["За еден ден, на %1$s, па на %2$s и %3$s","За %n дена, на %1$s, па на %2$s и %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["За една недела, на %1$s, па на %2$s и %3$s","За %n недели, на %1$s, па на %2$s и %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["За еден месец, на %1$s, па на %2$s и %3$s","За %n месеци, на %1$s, па на %2$s и %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["За една година, на %1$s, па на %2$s и %3$s","За %n години, на %1$s, па на %2$s и %3$s"],
"Could not generate next recurrence statement" : "Не можеше да се генерира изјава за следното повторување",
"Cancelled: %1$s" : "Откажано: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" е отакажана",
"Re: %1$s" : "Одг: %1$s",
@@ -161,7 +89,6 @@ OC.L10N.register(
"When:" : "Кога:",
"Location:" : "Локација:",
"Link:" : "Линк:",
"Occurring:" : "Се случува:",
"Accept" : "Прифати",
"Decline" : "Одбиј",
"More options …" : "Повеќе опции ...",
@@ -186,15 +113,7 @@ OC.L10N.register(
"November" : "Ноември",
"December" : "Декември",
"First" : "Прва",
"Second" : "Втор",
"Third" : "Трета",
"Fourth" : "Четврта",
"Fifth" : "Петта",
"Last" : "Последна",
"Second Last" : "Претпоследно",
"Third Last" : "Трето од крајот",
"Fourth Last" : "Четврто од крајот",
"Fifth Last" : "Петто од крајот",
"Contacts" : "Контакти",
"{actor} created address book {addressbook}" : "{actor} креираше адресар {addressbook}",
"You created address book {addressbook}" : "Креиравте адресар {addressbook}",
@@ -213,35 +132,13 @@ OC.L10N.register(
"{actor} shared address book {addressbook} with group {group}" : "{actor} сподели адресар {addressbook} со група {group}",
"You unshared address book {addressbook} from group {group}" : "Отстранивте од споделување адресар {addressbook} со група{group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} отстрани од споделување адресар {addressbook} од група {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} креираше контакт {card} во адресарот {addressbook}",
"You created contact {card} in address book {addressbook}" : "Ти креираше контакт {card} во адресарот {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} го избриша контактот {card} од адресарот {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Ти го избриша контактот {card} од адресарот {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} го ажурираше контактот {card} во адресарот {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Ти го ажурираше контактот {card} во адресарот {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Контракт</strong> или <strong>адресар</strong> е променет",
"System address book disabled" : "Системскиот адресар е оневозможен",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Системскиот адресар со контакти беше автоматски оневозможен за време на надградбата. Ова значи дека адресарот повеќе нема да биде достапен за корисниците во апликацијата Контакти или во други клиенти. Системскиот адресар беше оневозможен затоа што бројот на контакти го надмина максимално препорачаниот број. Ова ограничување е поставено за да се спречат проблеми со перформансите. Може повторно да го овозможите системскиот адресар со следната команда: {command}",
"Accounts" : "Сметки",
"System address book which holds all accounts" : "Системски адресар кој ги содржи сите сметки",
"File is not updatable: %1$s" : "Датотека што не се ажурира: %1$s",
"Failed to get storage for file" : "Не успеа да се добие складиштето за датотеката",
"Could not write to final file, canceled by hook" : "Не можеше да се запише во финалната датотека, поништено од hook",
"Could not write file contents" : "Не можеше да се запише содржината на датотеката",
"_%n byte_::_%n bytes_" : ["%n бајт","%n бајти"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Грешка при копирање на датотеката во целната локација (копирано: %1$s, очекувана големина: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Очекувана големина на датотеката: %1$s, но беше прочитано (од Nextcloud клиентот) и запишано (во складиштето на серверот) %2$s. Можно е да има проблем со мрежата на страната на испраќачот или со складирањето на серверот.",
"Could not rename part file to final file, canceled by hook" : "Не можеше да се преименува делумната датотека во финална, поништено од hook",
"Could not rename part file to final file" : "Не можеше да се преименува делумната датотека во финална",
"Failed to check file size: %1$s" : "Не успеа да се провери големината на датотеката: %1$s",
"Could not open file: %1$s, file does seem to exist" : "Не може да се отвори датотеката: %1$s, датотеката изгледа дека постои",
"Could not open file: %1$s, file doesn't seem to exist" : "Не може да се отвори датотеката: %1$s, датотеката изгледа дека не постои",
"Encryption not ready: %1$s" : "Шифрирањето не е подготвено: %1$s",
"Failed to open file: %1$s" : "Неуспешно отварање на датотека: %1$s",
"Failed to unlink: %1$s" : "Не успеа да се отстрани врската: %1$s",
"Failed to write file contents: %1$s" : "Не успеа да се запише содржината на датотеката: %1$s",
"File not found: %1$s" : "Датотеката не е пронајдена: %1$s",
"Invalid target path" : "Невалидна целна патека",
"System is in maintenance mode." : "Системот е во мод за одржување.",
"Upgrade needed" : "Потребна е надградба",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Вашиот %s треба да биде конфигуриран за да користи HTTPS за да може да се користи CalDAV и CardDAV на iOS/macOS.",
@@ -252,22 +149,8 @@ OC.L10N.register(
"Completed on %s" : "Завршена на %s",
"Due on %s by %s" : "Истекува на %s од %s",
"Due on %s" : "Истекува на %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Добредојде во Nextcloud Календар!\n\nОва е пример на настан — истражете ја флексибилноста на планирањето во Nextcloud Календар преку уредување по ваша желба!\n\nСо Nextcloud Календар можете да:\n- создавате, уредувате и управувате со настани без напор;\n- креирате повеќе календари и да ги споделувате со соработници, пријатели или семејство;\n- проверувате достапност и да им прикажувате на другите кога сте зафатени;\n- беспрекорно се интегрирате со апликации и уреди преку CalDAV;\n- го прилагодите искуството: закажувајте повторувачки настани, прилагодувајте известувања и други поставки.",
"Example event - open me!" : "Пример настан — отвори ме!",
"System Address Book" : "Системски адресар",
"The system address book contains contact information for all users in your instance." : "Системскиот адресар содржи информации за контактите на сите корисници во вашата инстанца.",
"Enable System Address Book" : "Овозможи системски адресар",
"DAV system address book" : "DAV системски адресар",
"No outstanding DAV system address book sync." : "Нема активна синхронизација на DAV системскиот адресар.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронизацијата на DAV системскиот адресар сè уште не е извршена бидејќи вашата инстанца има повеќе од 1000 корисници или поради грешка. Ве молиме извршете ја рачно со командата \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Големина на DAV системскиот адресар",
"The system address book is disabled" : "Системскиот адресар е оневозможен",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Системскиот адресар е овозможен, но содржи повеќе контакти од дозволениот лимит од %d",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Системскиот адресар е овозможен и содржи помалку контакти од дозволениот лимит од %d",
"WebDAV endpoint" : "WebDAV крајна точка",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Не може да се провери дали вашиот веб-сервер е правилно конфигуриран за дозвола на синхронизација на датотеки преку WebDAV. Ве молиме проверете рачно.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Вашиот веб-сервер е правилно конфигуриран за синхронизација на датотеки преку WebDAV.",
"Migrated calendar (%1$s)" : "мигриран календар (%1$s)",
"Calendars including events, details and attendees" : "Календари вклучувајќи настани, детали и присутни",
"Contacts and groups" : "Контакти и групи",
@@ -299,23 +182,7 @@ OC.L10N.register(
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматско поставување на статус во \"Не вознемирувај\" недостапен за да ги занемите сите известувања.",
"Cancel" : "Откажи",
"Import" : "Увези",
"Error while saving settings" : "Грешка при зачувување на поставките",
"Contact reset successfully" : "Контактот е успешно ресетиран",
"Error while resetting contact" : "Грешка при ресетирање на контактот",
"Contact imported successfully" : "Контактот е успешно увезен",
"Error while importing contact" : "Грешка при увоз на контактот",
"Import contact" : "Увези контакт",
"Reset to default" : "Ресетирај на стандардно",
"Import contacts" : "Увези контакти",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увозот на нова .vcf датотека ќе го избрише постојниот стандарден контакт и ќе го замени со новиот. Дали сакате да продолжите?",
"Failed to save example event creation setting" : "Не успеа да се зачува поставката за креирање пример-настан",
"Failed to upload the example event" : "Не успеа да се прикачи пример-настанот",
"Custom example event was saved successfully" : "Прилагодениот пример-настан е успешно зачуван",
"Failed to delete the custom example event" : "Не успеа да се избрише прилагодениот пример-настан",
"Custom example event was deleted successfully" : "Прилагодениот пример-настан е успешно избришан",
"Import calendar event" : "Увези календарски настан",
"Uploading a new event will overwrite the existing one." : "Прикачувањето нов настан ќе го презапише постојниот.",
"Upload event" : "Прикачи настан",
"Availability" : "Достапност",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако ги поставите работните часови, другите корисници ќе можат да видат кога сте слободни за да можат да закажат состанок.",
"Absence" : "Отсуство",
@@ -332,8 +199,6 @@ OC.L10N.register(
"Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот",
"Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.",
"Enable notifications for events via push" : "Овозможи известувања за настани преку push",
"Example content" : "Пример содржина",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Пример-содржината служи за прикажување на можностите на Nextcloud. Основната содржина се испорачува со Nextcloud и може да се замени со прилагодена содржина.",
"There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.",
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
+12 -147
View File
@@ -35,18 +35,18 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} врати настан {event} во календарот {calendar}",
"You restored event {event} of calendar {calendar}" : "Вративте настан {event} во календарот {calendar}",
"Busy" : "Зафатен",
"{actor} created to-do {todo} in list {calendar}" : "{actor} креираше задача {todo} во листата {calendar}",
"You created to-do {todo} in list {calendar}" : "Креиравте задача {todo} во листата {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} избриша задача {todo} од листата {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Избришавте задача {todo} од листата {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} ажурираше задача {todo} во листата {calendar}",
"You updated to-do {todo} in list {calendar}" : "Ажуриравте задача {todo} во листата {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} ја заврши задачата {todo} во листата {calendar}",
"You solved to-do {todo} in list {calendar}" : "Ја завршивте задачата {todo} во листата {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} повторно ја отвори задачата {todo} во листата {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Повторно ја отворивте задачата {todo} во листата {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} премести задача {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Преместивте задача {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"{actor} created to-do {todo} in list {calendar}" : "{actor} креираше задолжение {todo} во листата {calendar}",
"You created to-do {todo} in list {calendar}" : "Креиравте задолжение {todo} во листата {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} избриша задолжение {todo} од листата {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Избришавте задолжение {todo} од листата {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} ажурираше задолжение {todo} во листата {calendar}",
"You updated to-do {todo} in list {calendar}" : "Ажуриравте задолжение {todo} во листата {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} го заврши задолжението {todo} во листата {calendar}",
"You solved to-do {todo} in list {calendar}" : "Го завршивте задолжението {todo} во листата {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} повторно го отвори задолжението {todo} во листата {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Повторно го отворивте задолжението {todo} во листата {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} премести задолжение {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Преместивте задолжение {todo} од листа {sourceCalendar} во листа {targetCalendar}",
"Calendar, contacts and tasks" : "Календар, контакти и задачи",
"A <strong>calendar</strong> was modified" : "<strong>Календарот</strong> е променет",
"A calendar <strong>event</strong> was modified" : "Изменет е <strong>настан</strong> во календарот",
@@ -70,78 +70,6 @@
"Description: %s" : "Опис: %s",
"Where: %s" : "Каде: %s",
"%1$s via %2$s" : "%1$s преку %2$s",
"In the past on %1$s for the entire day" : "Во минатото, на %1$s цел ден",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["За една минута, на %1$s цел ден","За %n минути, на %1$s цел ден"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["За еден час, на %1$s цел ден","За %n часа, на %1$s цел ден"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["In a day on %1$s for the entire day\nЗа еден ден, на %1$s цел ден","За %n дена, на %1$s цел ден"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["За една недела, на %1$s цел ден","За %n недели, на %1$s цел ден"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["За еден месец, на %1$s цел ден","За %n месеци, на %1$s цел ден"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["За една година, на %1$s цел ден","За %n години, на %1$s цел ден"],
"In the past on %1$s between %2$s - %3$s" : "Во минатото, на %1$s помеѓу %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["За една минута, на %1$s помеѓу %2$s - %3$s","За %n минути, на %1$s помеѓу %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["За еден час, на %1$s помеѓу %2$s - %3$s","За %n часа, на %1$s помеѓу %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["За еден ден, на %1$s помеѓу %2$s - %3$s","За %n дена, на %1$s помеѓу %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["За една недела, на %1$s помеѓу %2$s - %3$s","За %n недели, на %1$s помеѓу %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["За еден месец, на %1$s помеѓу %2$s - %3$s","За %n месеци, на %1$s помеѓу %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["За една година, на %1$s помеѓу %2$s - %3$s","За %n години, на %1$s помеѓу %2$s - %3$s"],
"Could not generate when statement" : "Не може да се генерира временската изјава",
"Every Day for the entire day" : "Секој ден, цел ден",
"Every Day for the entire day until %1$s" : "Секој ден, цел ден до %1$s",
"Every Day between %1$s - %2$s" : "Секој ден помеѓу %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Секој ден помеѓу %1$s - %2$s до %3$s",
"Every %1$d Days for the entire day" : "Секои %1$d дена, цел ден",
"Every %1$d Days for the entire day until %2$s" : "Секои %1$d дена, цел ден до %2$s",
"Every %1$d Days between %2$s - %3$s" : "Секои %1$d дена помеѓу %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Секои %1$d дена помеѓу %2$s - %3$s до %4$s",
"Could not generate event recurrence statement" : "Не може да се генерира изјава за повторување на настанот",
"Every Week on %1$s for the entire day" : "Секоја недела во %1$s, цел ден",
"Every Week on %1$s for the entire day until %2$s" : "Секоја недела во %1$s, цел ден до %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Секоја недела во %1$s помеѓу %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Секоја недела во %1$s помеѓу %2$s - %3$s до %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Секои %1$d недели во %2$s, цел ден",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Секои %1$d недели во %2$s, цел ден до %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Секои %1$d недели во %2$s помеѓу %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Секои %1$d недели во %2$s помеѓу %3$s - %4$s до %5$s",
"Every Month on the %1$s for the entire day" : "Секој месец на %1$s, цел ден",
"Every Month on the %1$s for the entire day until %2$s" : "Секој месец на %1$s, цел ден до %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Секој месец на %1$s помеѓу %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Секој месец на %1$s помеѓу %2$s - %3$s до %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Секои %1$d месеци на %2$s, цел ден",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Секои %1$d месеци на %2$s, цел ден до %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Секои %1$d месеци на %2$s помеѓу %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Секои %1$d месеци на %2$s помеѓу %3$s - %4$s до %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Секоја година во %1$s на %2$s, цел ден",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Секоја година во %1$s на %2$s, цел ден до %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Секоја година во %1$s на %2$s помеѓу %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Секоја година во %1$s на %2$s помеѓу %3$s - %4$s до %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Секои %1$d години во %2$s на %3$s, цел ден",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Секои %1$d години во %2$s на %3$s, цел ден до %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Секои %1$d години во %2$s на %3$s помеѓу %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Секои %1$d години во %2$s на %3$s помеѓу %4$s - %5$s до %6$s",
"On specific dates for the entire day until %1$s" : "На одредени датуми, цел ден до %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "На одредени датуми помеѓу %1$s - %2$s до %3$s",
"In the past on %1$s" : "Во минатото, на %1$s",
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["За една минута, на %1$s","За %n минути, на %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["За еден час, на %1$s","За %n часа, на %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["За еден ден, на %1$s","За %n дена, на %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["За една недела, на %1$s","За %n недели, на %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["За еден месец, на %1$s","За %n месеци, на %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["За една година, на %1$s","За %n години, на %1$s"],
"In the past on %1$s then on %2$s" : "Во минатото, на %1$s, па на %2$s",
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["За една минута, на %1$s, па на %2$s","За %n минути, на %1$s, па на %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["За еден час, на %1$s, па на %2$s","За %n часа, на %1$s, па на %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["За еден ден, на %1$s, па на %2$s","За %n дена, на %1$s, па на %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["За една недела, на %1$s, па на %2$s","За %n недели, на %1$s, па на %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["За еден месец, на %1$s, па на %2$s","За %n месеци, на %1$s, па на %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["За една година, на %1$s, па на %2$s","За %n години, на %1$s, па на %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Во минатото, на %1$s, па на %2$s и %3$s",
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["За една минута, на %1$s, па на %2$s и %3$s","За %n минути, на %1$s, па на %2$s и %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["За еден час, на %1$s, па на %2$s и %3$s","За %n часа, на %1$s, па на %2$s и %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["За еден ден, на %1$s, па на %2$s и %3$s","За %n дена, на %1$s, па на %2$s и %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["За една недела, на %1$s, па на %2$s и %3$s","За %n недели, на %1$s, па на %2$s и %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["За еден месец, на %1$s, па на %2$s и %3$s","За %n месеци, на %1$s, па на %2$s и %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["За една година, на %1$s, па на %2$s и %3$s","За %n години, на %1$s, па на %2$s и %3$s"],
"Could not generate next recurrence statement" : "Не можеше да се генерира изјава за следното повторување",
"Cancelled: %1$s" : "Откажано: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" е отакажана",
"Re: %1$s" : "Одг: %1$s",
@@ -159,7 +87,6 @@
"When:" : "Кога:",
"Location:" : "Локација:",
"Link:" : "Линк:",
"Occurring:" : "Се случува:",
"Accept" : "Прифати",
"Decline" : "Одбиј",
"More options …" : "Повеќе опции ...",
@@ -184,15 +111,7 @@
"November" : "Ноември",
"December" : "Декември",
"First" : "Прва",
"Second" : "Втор",
"Third" : "Трета",
"Fourth" : "Четврта",
"Fifth" : "Петта",
"Last" : "Последна",
"Second Last" : "Претпоследно",
"Third Last" : "Трето од крајот",
"Fourth Last" : "Четврто од крајот",
"Fifth Last" : "Петто од крајот",
"Contacts" : "Контакти",
"{actor} created address book {addressbook}" : "{actor} креираше адресар {addressbook}",
"You created address book {addressbook}" : "Креиравте адресар {addressbook}",
@@ -211,35 +130,13 @@
"{actor} shared address book {addressbook} with group {group}" : "{actor} сподели адресар {addressbook} со група {group}",
"You unshared address book {addressbook} from group {group}" : "Отстранивте од споделување адресар {addressbook} со група{group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} отстрани од споделување адресар {addressbook} од група {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} креираше контакт {card} во адресарот {addressbook}",
"You created contact {card} in address book {addressbook}" : "Ти креираше контакт {card} во адресарот {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} го избриша контактот {card} од адресарот {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Ти го избриша контактот {card} од адресарот {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} го ажурираше контактот {card} во адресарот {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Ти го ажурираше контактот {card} во адресарот {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Контракт</strong> или <strong>адресар</strong> е променет",
"System address book disabled" : "Системскиот адресар е оневозможен",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Системскиот адресар со контакти беше автоматски оневозможен за време на надградбата. Ова значи дека адресарот повеќе нема да биде достапен за корисниците во апликацијата Контакти или во други клиенти. Системскиот адресар беше оневозможен затоа што бројот на контакти го надмина максимално препорачаниот број. Ова ограничување е поставено за да се спречат проблеми со перформансите. Може повторно да го овозможите системскиот адресар со следната команда: {command}",
"Accounts" : "Сметки",
"System address book which holds all accounts" : "Системски адресар кој ги содржи сите сметки",
"File is not updatable: %1$s" : "Датотека што не се ажурира: %1$s",
"Failed to get storage for file" : "Не успеа да се добие складиштето за датотеката",
"Could not write to final file, canceled by hook" : "Не можеше да се запише во финалната датотека, поништено од hook",
"Could not write file contents" : "Не можеше да се запише содржината на датотеката",
"_%n byte_::_%n bytes_" : ["%n бајт","%n бајти"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Грешка при копирање на датотеката во целната локација (копирано: %1$s, очекувана големина: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Очекувана големина на датотеката: %1$s, но беше прочитано (од Nextcloud клиентот) и запишано (во складиштето на серверот) %2$s. Можно е да има проблем со мрежата на страната на испраќачот или со складирањето на серверот.",
"Could not rename part file to final file, canceled by hook" : "Не можеше да се преименува делумната датотека во финална, поништено од hook",
"Could not rename part file to final file" : "Не можеше да се преименува делумната датотека во финална",
"Failed to check file size: %1$s" : "Не успеа да се провери големината на датотеката: %1$s",
"Could not open file: %1$s, file does seem to exist" : "Не може да се отвори датотеката: %1$s, датотеката изгледа дека постои",
"Could not open file: %1$s, file doesn't seem to exist" : "Не може да се отвори датотеката: %1$s, датотеката изгледа дека не постои",
"Encryption not ready: %1$s" : "Шифрирањето не е подготвено: %1$s",
"Failed to open file: %1$s" : "Неуспешно отварање на датотека: %1$s",
"Failed to unlink: %1$s" : "Не успеа да се отстрани врската: %1$s",
"Failed to write file contents: %1$s" : "Не успеа да се запише содржината на датотеката: %1$s",
"File not found: %1$s" : "Датотеката не е пронајдена: %1$s",
"Invalid target path" : "Невалидна целна патека",
"System is in maintenance mode." : "Системот е во мод за одржување.",
"Upgrade needed" : "Потребна е надградба",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Вашиот %s треба да биде конфигуриран за да користи HTTPS за да може да се користи CalDAV и CardDAV на iOS/macOS.",
@@ -250,22 +147,8 @@
"Completed on %s" : "Завршена на %s",
"Due on %s by %s" : "Истекува на %s од %s",
"Due on %s" : "Истекува на %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Добредојде во Nextcloud Календар!\n\nОва е пример на настан — истражете ја флексибилноста на планирањето во Nextcloud Календар преку уредување по ваша желба!\n\nСо Nextcloud Календар можете да:\n- создавате, уредувате и управувате со настани без напор;\n- креирате повеќе календари и да ги споделувате со соработници, пријатели или семејство;\n- проверувате достапност и да им прикажувате на другите кога сте зафатени;\n- беспрекорно се интегрирате со апликации и уреди преку CalDAV;\n- го прилагодите искуството: закажувајте повторувачки настани, прилагодувајте известувања и други поставки.",
"Example event - open me!" : "Пример настан — отвори ме!",
"System Address Book" : "Системски адресар",
"The system address book contains contact information for all users in your instance." : "Системскиот адресар содржи информации за контактите на сите корисници во вашата инстанца.",
"Enable System Address Book" : "Овозможи системски адресар",
"DAV system address book" : "DAV системски адресар",
"No outstanding DAV system address book sync." : "Нема активна синхронизација на DAV системскиот адресар.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронизацијата на DAV системскиот адресар сè уште не е извршена бидејќи вашата инстанца има повеќе од 1000 корисници или поради грешка. Ве молиме извршете ја рачно со командата \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Големина на DAV системскиот адресар",
"The system address book is disabled" : "Системскиот адресар е оневозможен",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Системскиот адресар е овозможен, но содржи повеќе контакти од дозволениот лимит од %d",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Системскиот адресар е овозможен и содржи помалку контакти од дозволениот лимит од %d",
"WebDAV endpoint" : "WebDAV крајна точка",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Не може да се провери дали вашиот веб-сервер е правилно конфигуриран за дозвола на синхронизација на датотеки преку WebDAV. Ве молиме проверете рачно.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Вашиот веб-сервер е правилно конфигуриран за синхронизација на датотеки преку WebDAV.",
"Migrated calendar (%1$s)" : "мигриран календар (%1$s)",
"Calendars including events, details and attendees" : "Календари вклучувајќи настани, детали и присутни",
"Contacts and groups" : "Контакти и групи",
@@ -297,23 +180,7 @@
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматско поставување на статус во \"Не вознемирувај\" недостапен за да ги занемите сите известувања.",
"Cancel" : "Откажи",
"Import" : "Увези",
"Error while saving settings" : "Грешка при зачувување на поставките",
"Contact reset successfully" : "Контактот е успешно ресетиран",
"Error while resetting contact" : "Грешка при ресетирање на контактот",
"Contact imported successfully" : "Контактот е успешно увезен",
"Error while importing contact" : "Грешка при увоз на контактот",
"Import contact" : "Увези контакт",
"Reset to default" : "Ресетирај на стандардно",
"Import contacts" : "Увези контакти",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увозот на нова .vcf датотека ќе го избрише постојниот стандарден контакт и ќе го замени со новиот. Дали сакате да продолжите?",
"Failed to save example event creation setting" : "Не успеа да се зачува поставката за креирање пример-настан",
"Failed to upload the example event" : "Не успеа да се прикачи пример-настанот",
"Custom example event was saved successfully" : "Прилагодениот пример-настан е успешно зачуван",
"Failed to delete the custom example event" : "Не успеа да се избрише прилагодениот пример-настан",
"Custom example event was deleted successfully" : "Прилагодениот пример-настан е успешно избришан",
"Import calendar event" : "Увези календарски настан",
"Uploading a new event will overwrite the existing one." : "Прикачувањето нов настан ќе го презапише постојниот.",
"Upload event" : "Прикачи настан",
"Availability" : "Достапност",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако ги поставите работните часови, другите корисници ќе можат да видат кога сте слободни за да можат да закажат состанок.",
"Absence" : "Отсуство",
@@ -330,8 +197,6 @@
"Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот",
"Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.",
"Enable notifications for events via push" : "Овозможи известувања за настани преку push",
"Example content" : "Пример содржина",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Пример-содржината служи за прикажување на можностите на Nextcloud. Основната содржина се испорачува со Nextcloud и може да се замени со прилагодена содржина.",
"There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.",
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
-6
View File
@@ -220,8 +220,6 @@ OC.L10N.register(
"{actor} updated contact {card} in address book {addressbook}" : "{actor}, {addressbook} adres defterindeki {card} kişi kartını güncelledi",
"You updated contact {card} in address book {addressbook}" : "{addressbook} adres defterindeki {card} kişi kartını güncellediniz",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Bir <strong>kişi</strong> ya da <strong>adres defteri</strong> değiştirildiğinde",
"System address book disabled" : "Sistem adres defteri kapatılmış",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Yükseltme sırasında sistem kişileri adres defteri otomatik olarak kapatıldı. Adres defteri artık kişiler uygulamasındaki kullanıcılar veya diğer istemciler tarafından kullanılamayacak. Adres defterindeki kişi sayısı önerilen en fazla kişi sayısını aştığı için sistem kişileri adres defteri kapatıldı. Bu sınır, başarım sorunlarını önlemek için belirlenmiştir. Şu komutla sistem adres defterini yeniden açabilirsiniz: {command}",
"Accounts" : "Hesaplar",
"System address book which holds all accounts" : "Tüm hesapların bulunduğu sistem adres defteri",
"File is not updatable: %1$s" : "Dosya güncellenebilir değil: %1$s",
@@ -260,10 +258,6 @@ OC.L10N.register(
"DAV system address book" : "DAV sistem adres defteri",
"No outstanding DAV system address book sync." : "Bekleyen bir DAV sistemi adres defteri eşitlemesi yok.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Kopyanızda 1000 üzerinde kullanıcı olduğundan ya da bir sorun çıktığından DAV sistemi adres defteri eşitlemesi henüz yapılmamış. Lütfen \"occ dav:sync-system-addressbook\" komutunu yürüterek el ile eşitleyin.",
"DAV system address book size" : "DAV sistem adres defteri boyutu",
"The system address book is disabled" : "Sistem adres defteri kapatılmış",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Sistem adres defteri açık, ancak yapılandırılmış %d kişi sayısı sınırından daha fazla kişi içeriyor",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Sistem adres defteri açık ve yapılandırılmış %d kişi sayısı sınırından daha az kişi içeriyor",
"WebDAV endpoint" : "WebDAV bağlantı noktası",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Site sunucunuzun WebDAV üzerinden dosya eşitlemesi için doğru şekilde ayarlanıp ayarlanmadığı denetlenemedi. Lütfen el ile denetleyin.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Site sunucunuz dosya eşitlemesi için doğru şekilde ayarlanmamış. WebDAV arabirimi sorunlu görünüyor.",
-6
View File
@@ -218,8 +218,6 @@
"{actor} updated contact {card} in address book {addressbook}" : "{actor}, {addressbook} adres defterindeki {card} kişi kartını güncelledi",
"You updated contact {card} in address book {addressbook}" : "{addressbook} adres defterindeki {card} kişi kartını güncellediniz",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Bir <strong>kişi</strong> ya da <strong>adres defteri</strong> değiştirildiğinde",
"System address book disabled" : "Sistem adres defteri kapatılmış",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Yükseltme sırasında sistem kişileri adres defteri otomatik olarak kapatıldı. Adres defteri artık kişiler uygulamasındaki kullanıcılar veya diğer istemciler tarafından kullanılamayacak. Adres defterindeki kişi sayısı önerilen en fazla kişi sayısını aştığı için sistem kişileri adres defteri kapatıldı. Bu sınır, başarım sorunlarını önlemek için belirlenmiştir. Şu komutla sistem adres defterini yeniden açabilirsiniz: {command}",
"Accounts" : "Hesaplar",
"System address book which holds all accounts" : "Tüm hesapların bulunduğu sistem adres defteri",
"File is not updatable: %1$s" : "Dosya güncellenebilir değil: %1$s",
@@ -258,10 +256,6 @@
"DAV system address book" : "DAV sistem adres defteri",
"No outstanding DAV system address book sync." : "Bekleyen bir DAV sistemi adres defteri eşitlemesi yok.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Kopyanızda 1000 üzerinde kullanıcı olduğundan ya da bir sorun çıktığından DAV sistemi adres defteri eşitlemesi henüz yapılmamış. Lütfen \"occ dav:sync-system-addressbook\" komutunu yürüterek el ile eşitleyin.",
"DAV system address book size" : "DAV sistem adres defteri boyutu",
"The system address book is disabled" : "Sistem adres defteri kapatılmış",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Sistem adres defteri açık, ancak yapılandırılmış %d kişi sayısı sınırından daha fazla kişi içeriyor",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Sistem adres defteri açık ve yapılandırılmış %d kişi sayısı sınırından daha az kişi içeriyor",
"WebDAV endpoint" : "WebDAV bağlantı noktası",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Site sunucunuzun WebDAV üzerinden dosya eşitlemesi için doğru şekilde ayarlanıp ayarlanmadığı denetlenemedi. Lütfen el ile denetleyin.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Site sunucunuz dosya eşitlemesi için doğru şekilde ayarlanmamış. WebDAV arabirimi sorunlu görünüyor.",
-3
View File
@@ -23,7 +23,6 @@ use OCA\DAV\Capabilities;
use OCA\DAV\CardDAV\ContactsManager;
use OCA\DAV\CardDAV\Notification\Notifier as NotifierCardDAV;
use OCA\DAV\CardDAV\SyncService;
use OCA\DAV\ConfigLexicon;
use OCA\DAV\Events\AddressBookCreatedEvent;
use OCA\DAV\Events\AddressBookDeletedEvent;
use OCA\DAV\Events\AddressBookShareUpdatedEvent;
@@ -229,8 +228,6 @@ class Application extends App implements IBootstrap {
$context->registerDeclarativeSettings(SystemAddressBookSettings::class);
$context->registerEventListener(DeclarativeSettingsGetValueEvent::class, DavAdminSettingsListener::class);
$context->registerEventListener(DeclarativeSettingsSetValueEvent::class, DavAdminSettingsListener::class);
$context->registerConfigLexicon(ConfigLexicon::class);
}
public function boot(IBootContext $context): void {
@@ -41,7 +41,7 @@ class OutOfOfficeEventDispatcherJob extends QueuedJob {
try {
$absence = $this->absenceMapper->findById($id);
} catch (DoesNotExistException $e) {
} catch (DoesNotExistException|\OCP\DB\Exception $e) {
$this->logger->error('Failed to dispatch out-of-office event: ' . $e->getMessage(), [
'exception' => $e,
'argument' => $argument,
@@ -16,7 +16,6 @@ use OCP\IUser;
use OCP\L10N\IFactory as L10NFactory;
use OCP\Mail\Headers\AutoSubmitted;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IEmailValidator;
use OCP\Mail\IMailer;
use OCP\Util;
use Psr\Log\LoggerInterface;
@@ -40,7 +39,6 @@ class EmailProvider extends AbstractProvider {
LoggerInterface $logger,
L10NFactory $l10nFactory,
IURLGenerator $urlGenerator,
private IEmailValidator $emailValidator,
) {
parent::__construct($logger, $l10nFactory, $urlGenerator, $config);
}
@@ -98,7 +96,7 @@ class EmailProvider extends AbstractProvider {
$template->addFooter();
foreach ($emailAddresses as $emailAddress) {
if (!$this->emailValidator->isValid($emailAddress)) {
if (!$this->mailer->validateMailAddress($emailAddress)) {
$this->logger->error('Email address {address} for reminder notification is incorrect', ['app' => 'dav', 'address' => $emailAddress]);
continue;
}
@@ -182,7 +180,7 @@ class EmailProvider extends AbstractProvider {
$organizerEMail = substr($organizer->getValue(), 7);
if (!$this->emailValidator->isValid($organizerEMail)) {
if (!$this->mailer->validateMailAddress($organizerEMail)) {
return null;
}
@@ -253,7 +251,7 @@ class EmailProvider extends AbstractProvider {
foreach ($emailAddressesOfDelegates as $addressesOfDelegate) {
if (strcasecmp($addressesOfDelegate, 'mailto:') === 0) {
$delegateEmail = substr($addressesOfDelegate, 7);
if ($this->emailValidator->isValid($delegateEmail)) {
if ($this->mailer->validateMailAddress($delegateEmail)) {
$emailAddresses[$delegateEmail] = [];
}
}
@@ -313,7 +311,7 @@ class EmailProvider extends AbstractProvider {
return null;
}
$attendeeEMail = substr($attendee->getValue(), 7);
if (!$this->emailValidator->isValid($attendeeEMail)) {
if (!$this->mailer->validateMailAddress($attendeeEMail)) {
return null;
}
+1 -3
View File
@@ -14,7 +14,6 @@ use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Defaults;
use OCP\IAppConfig;
use OCP\IUserSession;
use OCP\Mail\IEmailValidator;
use OCP\Mail\IMailer;
use OCP\Mail\Provider\Address;
use OCP\Mail\Provider\Attachment;
@@ -64,7 +63,6 @@ class IMipPlugin extends SabreIMipPlugin {
private IMipService $imipService,
private EventComparisonService $eventComparisonService,
private IMailManager $mailManager,
private IEmailValidator $emailValidator,
) {
parent::__construct('');
}
@@ -121,7 +119,7 @@ class IMipPlugin extends SabreIMipPlugin {
// Strip off mailto:
$recipient = substr($iTipMessage->recipient, 7);
if (!$this->emailValidator->isValid($recipient)) {
if (!$this->mailer->validateMailAddress($recipient)) {
// Nothing to send if the recipient doesn't have a valid email address
$iTipMessage->scheduleStatus = '5.0; EMail delivery failed';
return;
-9
View File
@@ -7,11 +7,8 @@
*/
namespace OCA\DAV\CardDAV;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCA\DAV\Db\PropertyMapper;
use OCP\Contacts\IManager;
use OCP\IAppConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
@@ -26,7 +23,6 @@ class ContactsManager {
private CardDavBackend $backend,
private IL10N $l10n,
private PropertyMapper $propertyMapper,
private IAppConfig $appConfig,
) {
}
@@ -47,11 +43,6 @@ class ContactsManager {
* @param IURLGenerator $urlGenerator
*/
public function setupSystemContactsProvider(IManager $cm, ?string $userId, IURLGenerator $urlGenerator) {
$systemAddressBookExposed = $this->appConfig->getValueBool(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED);
if (!$systemAddressBookExposed) {
return;
}
$addressBooks = $this->backend->getAddressBooksForUser('principals/system/system');
$this->register($cm, $addressBooks, $urlGenerator, $userId);
}
+13 -12
View File
@@ -9,14 +9,11 @@ declare(strict_types=1);
*/
namespace OCA\DAV\CardDAV;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\AppInfo\PluginManager;
use OCA\DAV\CardDAV\Integration\ExternalAddressBook;
use OCA\DAV\CardDAV\Integration\IAddressBookProvider;
use OCA\DAV\ConfigLexicon;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\QueryException;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -24,7 +21,6 @@ use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Server;
use OCP\Util;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Sabre\CardDAV\Backend;
@@ -34,9 +30,11 @@ use Sabre\DAV\MkCol;
use function array_map;
class UserAddressBooks extends \Sabre\CardDAV\AddressBookHome {
protected IL10N $l10n;
protected IConfig $config;
protected IAppConfig $appConfig;
/** @var IL10N */
protected $l10n;
/** @var IConfig */
protected $config;
public function __construct(
Backend\BackendInterface $carddavBackend,
@@ -46,10 +44,6 @@ class UserAddressBooks extends \Sabre\CardDAV\AddressBookHome {
private ?IGroupManager $groupManager,
) {
parent::__construct($carddavBackend, $principalUri);
$this->l10n = Util::getL10N('dav');
$this->config = Server::get(IConfig::class);
$this->appConfig = Server::get(IAppConfig::class);
}
/**
@@ -58,12 +52,19 @@ class UserAddressBooks extends \Sabre\CardDAV\AddressBookHome {
* @return IAddressBook[]
*/
public function getChildren() {
if ($this->l10n === null) {
$this->l10n = \OC::$server->getL10N('dav');
}
if ($this->config === null) {
$this->config = Server::get(IConfig::class);
}
/** @var string|array $principal */
$principal = $this->principalUri;
$addressBooks = $this->carddavBackend->getAddressBooksForUser($this->principalUri);
// add the system address book
$systemAddressBook = null;
$systemAddressBookExposed = $this->appConfig->getValueBool(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED);
$systemAddressBookExposed = $this->config->getAppValue('dav', 'system_addressbook_exposed', 'yes') === 'yes';
if ($systemAddressBookExposed && is_string($principal) && $principal !== 'principals/system/system' && $this->carddavBackend instanceof CardDavBackend) {
$systemAddressBook = $this->carddavBackend->getAddressBooksByUri('principals/system/system', 'system');
if ($systemAddressBook !== null) {
-45
View File
@@ -1,45 +0,0 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\DAV;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
/**
* Config Lexicon for files_sharing.
*
* Please Add & Manage your Config Keys in that file and keep the Lexicon up to date!
*
* {@see ILexicon}
*/
class ConfigLexicon implements ILexicon {
public const SYSTEM_ADDRESSBOOK_EXPOSED = 'system_addressbook_exposed';
public function getStrictness(): Strictness {
return Strictness::NOTICE;
}
public function getAppConfigs(): array {
return [
new Entry(
self::SYSTEM_ADDRESSBOOK_EXPOSED,
ValueType::BOOL,
defaultRaw: true,
definition: 'Whether to not expose the system address book to users',
lazy: true,
),
];
}
public function getUserConfigs(): array {
return [];
}
}
+1 -1
View File
@@ -693,7 +693,7 @@ class FilesPlugin extends ServerPlugin {
private function initFilesMetadataManager(): IFilesMetadataManager {
/** @var IFilesMetadataManager $manager */
$manager = \OCP\Server::get(IFilesMetadataManager::class);
$manager->initMetadata('files-live-photo', IMetadataValueWrapper::TYPE_STRING, false, IMetadataValueWrapper::EDIT_REQ_WRITE_PERMISSION);
$manager->initMetadata('files-live-photo', IMetadataValueWrapper::TYPE_STRING, false, IMetadataValueWrapper::EDIT_REQ_OWNERSHIP);
return $manager;
}
+11
View File
@@ -32,6 +32,13 @@ abstract class Node implements \Sabre\DAV\INode {
*/
protected $path;
/**
* node properties cache
*
* @var array
*/
protected $property_cache = null;
protected FileInfo $info;
/**
@@ -133,6 +140,10 @@ abstract class Node implements \Sabre\DAV\INode {
$this->refreshInfo();
}
public function setPropertyCache($property_cache) {
$this->property_cache = $property_cache;
}
/**
* Returns the last modification time, as a unix timestamp
*
-3
View File
@@ -45,9 +45,6 @@ class PropertyMapper extends QBMapper {
* @throws \OCP\DB\Exception
*/
public function findPropertiesByPathsAndUsers(array $calendars): array {
if (empty($calendars)) {
return [];
}
$selectQb = $this->db->getQueryBuilder();
$selectQb->select('*')
->from(self::TABLE_NAME);
+18 -37
View File
@@ -42,10 +42,6 @@ class FilesDropPlugin extends ServerPlugin {
}
public function onMkcol(RequestInterface $request, ResponseInterface $response) {
if ($this->isChunkedUpload($request)) {
return;
}
if (!$this->enabled || $this->share === null) {
return;
}
@@ -62,18 +58,7 @@ class FilesDropPlugin extends ServerPlugin {
return false;
}
private function isChunkedUpload(RequestInterface $request): bool {
return str_starts_with(substr($request->getUrl(), strlen($request->getBaseUrl()) - 1), '/uploads/');
}
public function beforeMethod(RequestInterface $request, ResponseInterface $response) {
$isChunkedUpload = $this->isChunkedUpload($request);
// For the final MOVE request of a chunked upload it is necessary to modify the Destination header.
if ($isChunkedUpload && $request->getMethod() !== 'MOVE') {
return;
}
if (!$this->enabled || $this->share === null) {
return;
}
@@ -83,8 +68,21 @@ class FilesDropPlugin extends ServerPlugin {
return;
}
if ($request->getMethod() !== 'PUT' && $request->getMethod() !== 'MKCOL' && (!$isChunkedUpload || $request->getMethod() !== 'MOVE')) {
throw new MethodNotAllowed('Only PUT, MKCOL and MOVE are allowed on files drop');
// Retrieve the nickname from the request
$nickname = $request->hasHeader('X-NC-Nickname')
? trim(urldecode($request->getHeader('X-NC-Nickname')))
: null;
if ($request->getMethod() !== 'PUT') {
// If uploading subfolders we need to ensure they get created
// within the nickname folder
if ($request->getMethod() === 'MKCOL') {
if (!$nickname) {
throw new BadRequest('A nickname header is required when uploading subfolders');
}
} else {
throw new MethodNotAllowed('Only PUT is allowed on files drop');
}
}
// If this is a folder creation request
@@ -97,16 +95,8 @@ class FilesDropPlugin extends ServerPlugin {
// full path along the way. We'll only handle conflict
// resolution on file conflicts, but not on folders.
if ($isChunkedUpload) {
$destination = $request->getHeader('destination');
$baseUrl = $request->getBaseUrl();
// e.g files/dCP8yn3N86EK9sL/Folder/image.jpg
$path = substr($destination, strpos($destination, $baseUrl) + strlen($baseUrl));
} else {
// e.g files/dCP8yn3N86EK9sL/Folder/image.jpg
$path = $request->getPath();
}
// e.g files/dCP8yn3N86EK9sL/Folder/image.jpg
$path = $request->getPath();
$token = $this->share->getToken();
// e.g files/dCP8yn3N86EK9sL
@@ -122,11 +112,6 @@ class FilesDropPlugin extends ServerPlugin {
$isFileRequest = $attributes->getAttribute('fileRequest', 'enabled') === true;
}
// Retrieve the nickname from the request
$nickname = $request->hasHeader('X-NC-Nickname')
? trim(urldecode($request->getHeader('X-NC-Nickname')))
: null;
// We need a valid nickname for file requests
if ($isFileRequest && !$nickname) {
throw new BadRequest('A nickname header is required for file requests');
@@ -202,11 +187,7 @@ class FilesDropPlugin extends ServerPlugin {
$relativePath = substr($folder->getPath(), strlen($node->getPath()));
$path = '/files/' . $token . '/' . $relativePath . '/' . $uniqueName;
$url = rtrim($request->getBaseUrl(), '/') . str_replace('//', '/', $path);
if ($isChunkedUpload) {
$request->setHeader('destination', $url);
} else {
$request->setUrl($url);
}
$request->setUrl($url);
}
private function getPathSegments(string $path): array {
@@ -18,7 +18,7 @@ use OCP\EventDispatcher\IEventDispatcher;
use OCP\EventDispatcher\IEventListener;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Mail\IEmailValidator;
use OCP\Mail\IMailer;
use Psr\Log\LoggerInterface;
use Sabre\VObject\Component\VEvent;
use Sabre\VObject\Parameter;
@@ -36,7 +36,7 @@ class CalendarContactInteractionListener implements IEventListener {
private IEventDispatcher $dispatcher,
private IUserSession $userSession,
private Principal $principalConnector,
private IEmailValidator $emailValidator,
private IMailer $mailer,
private LoggerInterface $logger,
) {
}
@@ -129,7 +129,7 @@ class CalendarContactInteractionListener implements IEventListener {
continue;
}
$email = substr($mailTo, strlen('mailto:'));
if (!$this->emailValidator->isValid($email)) {
if (!$this->mailer->validateMailAddress($email)) {
// This really isn't a valid email
continue;
}
@@ -8,7 +8,6 @@ declare(strict_types=1);
namespace OCA\DAV\Listener;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\IAppConfig;
@@ -47,16 +46,20 @@ class DavAdminSettingsListener implements IEventListener {
}
private function handleGetValue(DeclarativeSettingsGetValueEvent $event): void {
if ($event->getFieldId() === 'system_addressbook_enabled') {
$event->setValue((int)$this->config->getValueBool(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED));
$event->setValue((int)$this->config->getValueBool('dav', 'system_addressbook_exposed', true));
}
}
private function handleSetValue(DeclarativeSettingsSetValueEvent $event): void {
if ($event->getFieldId() === 'system_addressbook_enabled') {
$this->config->setValueBool(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED, (bool)$event->getValue());
$this->config->setValueBool('dav', 'system_addressbook_exposed', (bool)$event->getValue());
$event->stopPropagation();
}
}
}
@@ -9,7 +9,6 @@ declare(strict_types=1);
namespace OCA\DAV\Listener;
use OCA\DAV\CalDAV\Federation\CalendarFederationConfig;
use OCA\DAV\CalDAV\Federation\FederatedCalendarAuth;
use OCA\DAV\Events\SabrePluginAuthInitEvent;
use OCP\EventDispatcher\Event;
@@ -21,20 +20,11 @@ use Sabre\DAV\Auth\Plugin;
* @template-implements IEventListener<Event|SabrePluginAuthInitEvent>
*/
class SabrePluginAuthInitListener implements IEventListener {
public function __construct(
private readonly CalendarFederationConfig $calendarFederationConfig,
) {
}
public function handle(Event $event): void {
if (!($event instanceof SabrePluginAuthInitEvent)) {
return;
}
if (!$this->calendarFederationConfig->isFederationEnabled()) {
return;
}
$server = $event->getServer();
$authPlugin = $server->getPlugin('auth');
if ($authPlugin instanceof Plugin) {
@@ -9,7 +9,6 @@ declare(strict_types=1);
namespace OCA\DAV\Migration;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IGroupManager;
use OCP\IUserManager;
@@ -41,7 +40,7 @@ class DisableSystemAddressBook implements IRepairStep {
*/
public function run(IOutput $output) {
// If the system address book exposure was previously set skip the repair step
if ($this->appConfig->hasAppKey(ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED) === true) {
if ($this->appConfig->hasAppKey('system_addressbook_exposed') === true) {
$output->info('Skipping repair step system address book exposed was previously set');
return;
}
@@ -51,7 +50,7 @@ class DisableSystemAddressBook implements IRepairStep {
$output->info("Skipping repair step system address book has less then the threshold $limit of contacts no need to disable");
return;
}
$this->appConfig->setAppValueBool(ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED, false);
$this->appConfig->setAppValueBool('system_addressbook_exposed', false);
$output->warning("System address book disabled because it has more then the threshold of $limit contacts this can be re-enabled later");
// Notify all admin users about the system address book being disabled
foreach ($this->groupManager->get('admin')->getUsers() as $user) {
+1 -1
View File
@@ -199,7 +199,7 @@ class EventsSearchProvider extends ACalendarSearchProvider implements IFiltering
[,, $principalId] = explode('/', $principalUri, 3);
return $this->urlGenerator->linkTo('', 'remote.php') . '/dav/calendars/'
. str_replace(' ', '%20', $principalId) . '/'
. rawurlencode($principalId) . '/'
. $calendarUri . '/'
. $calendarObjectUri;
}
+1 -2
View File
@@ -350,8 +350,7 @@ class Server {
$userSession,
\OCP\Server::get(IMipService::class),
\OCP\Server::get(EventComparisonService::class),
\OCP\Server::get(\OCP\Mail\Provider\IManager::class),
\OCP\Server::get(\OCP\Mail\IEmailValidator::class),
\OCP\Server::get(\OCP\Mail\Provider\IManager::class)
));
}
$this->server->addPlugin(new \OCA\DAV\CalDAV\Search\SearchPlugin());
@@ -10,7 +10,6 @@ declare(strict_types=1);
namespace OCA\DAV\SetupChecks;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCP\IAppConfig;
use OCP\IL10N;
use OCP\IUserManager;
@@ -34,7 +33,7 @@ class SystemAddressBookSize implements ISetupCheck {
}
public function run(): SetupResult {
if (!$this->appConfig->getValueBool(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED)) {
if (!$this->appConfig->getValueBool(Application::APP_ID, 'system_addressbook_exposed', true)) {
return SetupResult::success($this->l10n->t('The system address book is disabled'));
}
+5 -15
View File
@@ -539,24 +539,14 @@ class SystemTagPlugin extends \Sabre\DAV\ServerPlugin {
private function canUpdateTagForFileIds(array $fileIds): bool {
$user = $this->userSession->getUser();
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
foreach ($fileIds as $fileId) {
try {
$nodes = $userFolder->getById((int)$fileId);
if (empty($nodes)) {
return false;
$nodes = $userFolder->getById((int)$fileId);
foreach ($nodes as $node) {
if (($node->getPermissions() & Constants::PERMISSION_UPDATE) === Constants::PERMISSION_UPDATE) {
return true;
}
foreach ($nodes as $node) {
if (($node->getPermissions() & Constants::PERMISSION_UPDATE) !== Constants::PERMISSION_UPDATE) {
return false;
}
}
} catch (\Exception $e) {
return false;
}
}
return true;
return false;
}
}
@@ -98,8 +98,8 @@ export default {
},
{
label: this.$t('dav', 'Import'),
type: 'primary',
icon: IconCheck,
variant: 'primary',
callback: () => { this.clickImportInput() },
},
],
@@ -45,7 +45,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(4, $rows);
@@ -55,7 +55,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(2, $rows);
@@ -65,7 +65,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(4, $rows);
@@ -75,7 +75,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(1, $rows);
@@ -85,7 +85,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(4, $rows);
@@ -95,7 +95,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(3, $rows);
@@ -192,7 +192,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(4, $rows);
@@ -203,7 +203,7 @@ class BackendTest extends TestCase {
$query = self::$realDatabase->getQueryBuilder();
$rows = $query->select('*')
->from('calendar_reminders')
->executeQuery()
->execute()
->fetchAll();
$this->assertCount(5, $rows);
@@ -17,10 +17,8 @@ use OCP\Mail\IMessage;
use OCP\Util;
use PHPUnit\Framework\MockObject\MockObject;
use Sabre\VObject\Component\VCalendar;
use Test\Traits\EmailValidatorTrait;
class EmailProviderTest extends AbstractNotificationProviderTestCase {
use EmailValidatorTrait;
public const USER_EMAIL = 'frodo@hobb.it';
private IMailer&MockObject $mailer;
@@ -34,8 +32,7 @@ class EmailProviderTest extends AbstractNotificationProviderTestCase {
$this->mailer,
$this->logger,
$this->l10nFactory,
$this->urlGenerator,
$this->getEmailValidatorWithStrictEmailCheck(),
$this->urlGenerator
);
}
@@ -96,6 +93,15 @@ class EmailProviderTest extends AbstractNotificationProviderTestCase {
$template2
);
$this->mailer->expects($this->exactly(4))
->method('validateMailAddress')
->willReturnMap([
['uid1@example.com', true],
['uid2@example.com', true],
['uid3@example.com', true],
['invalid', false],
]);
$this->mailer->expects($this->exactly(3))
->method('createMessage')
->with()
@@ -183,6 +189,17 @@ class EmailProviderTest extends AbstractNotificationProviderTestCase {
$template1,
$template2,
);
$this->mailer->expects($this->atLeastOnce())
->method('validateMailAddress')
->willReturnMap([
['foo1@example.org', true],
['foo3@example.org', true],
['foo4@example.org', true],
['uid1@example.com', true],
['uid2@example.com', true],
['uid3@example.com', true],
['invalid', false],
]);
$this->mailer->expects($this->exactly(6))
->method('createMessage')
->with()
@@ -260,6 +277,17 @@ class EmailProviderTest extends AbstractNotificationProviderTestCase {
->willReturnOnConsecutiveCalls(
$template1,
);
$this->mailer->expects($this->atLeastOnce())
->method('validateMailAddress')
->willReturnMap([
['foo1@example.org', true],
['foo3@example.org', true],
['foo4@example.org', true],
['uid1@example.com', true],
['uid2@example.com', true],
['uid3@example.com', true],
['invalid', false],
]);
$this->mailer->expects($this->exactly(2))
->method('createMessage')
->with()
@@ -462,7 +462,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('Beamer1'),
'group_restrictions' => $query->createNamedParameter('[]'),
])
->executeStatement();
->execute();
$query->insert($this->mainDbTable)
->values([
@@ -472,7 +472,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('TV1'),
'group_restrictions' => $query->createNamedParameter('[]'),
])
->executeStatement();
->execute();
$query->insert($this->mainDbTable)
->values([
@@ -482,7 +482,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('Beamer2'),
'group_restrictions' => $query->createNamedParameter('[]'),
])
->executeStatement();
->execute();
$id3 = $query->getLastInsertId();
$query->insert($this->mainDbTable)
@@ -493,7 +493,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('TV2'),
'group_restrictions' => $query->createNamedParameter('[]'),
])
->executeStatement();
->execute();
$id4 = $query->getLastInsertId();
$query->insert($this->mainDbTable)
@@ -504,7 +504,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('Beamer3'),
'group_restrictions' => $query->createNamedParameter('["foo", "bar"]'),
])
->executeStatement();
->execute();
$query->insert($this->mainDbTable)
->values([
@@ -514,7 +514,7 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'displayname' => $query->createNamedParameter('Pointer'),
'group_restrictions' => $query->createNamedParameter('["group1", "bar"]'),
])
->executeStatement();
->execute();
$id6 = $query->getLastInsertId();
$query->insert($this->metadataDbTable)
@@ -523,34 +523,34 @@ abstract class AbstractPrincipalBackendTestCase extends TestCase {
'key' => $query->createNamedParameter('{http://nextcloud.com/ns}foo'),
'value' => $query->createNamedParameter('value1')
])
->executeStatement();
->execute();
$query->insert($this->metadataDbTable)
->values([
$this->foreignKey => $query->createNamedParameter($id3),
'key' => $query->createNamedParameter('{http://nextcloud.com/ns}meta2'),
'value' => $query->createNamedParameter('value2')
])
->executeStatement();
->execute();
$query->insert($this->metadataDbTable)
->values([
$this->foreignKey => $query->createNamedParameter($id4),
'key' => $query->createNamedParameter('{http://nextcloud.com/ns}meta1'),
'value' => $query->createNamedParameter('value1')
])
->executeStatement();
->execute();
$query->insert($this->metadataDbTable)
->values([
$this->foreignKey => $query->createNamedParameter($id4),
'key' => $query->createNamedParameter('{http://nextcloud.com/ns}meta3'),
'value' => $query->createNamedParameter('value3-old')
])
->executeStatement();
->execute();
$query->insert($this->metadataDbTable)
->values([
$this->foreignKey => $query->createNamedParameter($id6),
'key' => $query->createNamedParameter('{http://nextcloud.com/ns}meta99'),
'value' => $query->createNamedParameter('value99')
])
->executeStatement();
->execute();
}
}
@@ -38,10 +38,8 @@ use Sabre\VObject\ITip\Message;
use Sabre\VObject\Property\ICalendar\CalAddress;
use Symfony\Component\Mime\Email;
use Test\TestCase;
use Test\Traits\EmailValidatorTrait;
class IMipPluginCharsetTest extends TestCase {
use EmailValidatorTrait;
// Dependencies
private Defaults&MockObject $defaults;
private IAppConfig&MockObject $appConfig;
@@ -104,6 +102,8 @@ class IMipPluginCharsetTest extends TestCase {
$this->mailer = $this->createMock(IMailer::class);
$this->mailer->method('createMessage')
->willReturn($message);
$this->mailer->method('validateMailAddress')
->willReturn(true);
$this->logger = new NullLogger();
$this->defaults = $this->createMock(Defaults::class);
$this->defaults->method('getName')
@@ -125,7 +125,6 @@ class IMipPluginCharsetTest extends TestCase {
$this->imipService,
$this->eventComparisonService,
$this->mailManager,
$this->getEmailValidatorWithStrictEmailCheck(),
);
// ITipMessage
@@ -30,7 +30,6 @@ use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\Component\VEvent;
use Sabre\VObject\ITip\Message;
use Test\TestCase;
use Test\Traits\EmailValidatorTrait;
use function array_merge;
interface IMailServiceMock extends IMailService, IMailMessageSend {
@@ -39,8 +38,6 @@ interface IMailServiceMock extends IMailService, IMailMessageSend {
}
class IMipPluginTest extends TestCase {
use EmailValidatorTrait;
private IMessage&MockObject $mailMessage;
private IMailer&MockObject $mailer;
private IEMailTemplate&MockObject $emailTemplate;
@@ -110,7 +107,6 @@ class IMipPluginTest extends TestCase {
$this->service,
$this->eventComparisonService,
$this->mailManager,
$this->getEmailValidatorWithStrictEmailCheck(),
);
}
@@ -177,6 +173,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
@@ -280,6 +280,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('the-shire@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
@@ -354,6 +358,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('circle+82utEV1Fle8wvxndZLK5TVAPtxj8IIe@middle.earth')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => null]);
@@ -455,6 +463,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['old' => [] ,'new' => [$newVevent]]);
@@ -529,11 +541,15 @@ class IMipPluginTest extends TestCase {
$message->message->VEVENT->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE']);
$message->sender = 'mailto:gandalf@wiz.ard';
$message->senderName = 'Mr. Wizard';
$message->recipient = 'mailto:' . 'frodo@@hobb.it';
$message->recipient = 'mailto:' . 'frodo@hobb.it';
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(false);
$this->plugin->schedule($message);
$this->assertEquals('5.0', $message->getScheduleStatus());
@@ -582,6 +598,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['old' => [] ,'new' => [$newVevent]]);
@@ -735,6 +755,11 @@ class IMipPluginTest extends TestCase {
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['old' => [] ,'new' => [$event]]);
// construct mail mock returns
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
// construct mail provider mock returns
$this->mailService
->method('initiateMessage')
@@ -794,6 +819,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
@@ -888,6 +917,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->with($newVCalendar, null)
@@ -981,6 +1014,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->mailer->expects(self::once())
->method('validateMailAddress')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->with($newVCalendar, null)
@@ -549,7 +549,7 @@ class CardDavBackendTest extends TestCase {
->from('cards_properties')
->orderBy('name');
$qResult = $query->executeQuery();
$qResult = $query->execute();
$result = $qResult->fetchAll();
$qResult->closeCursor();
@@ -574,7 +574,7 @@ class CardDavBackendTest extends TestCase {
$query->select('*')
->from('cards_properties');
$qResult = $query->executeQuery();
$qResult = $query->execute();
$result = $qResult->fetchAll();
$qResult->closeCursor();
@@ -598,7 +598,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$query = $this->db->getQueryBuilder();
$query->insert('cards_properties')
@@ -611,7 +611,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$this->invokePrivate($this->backend, 'purgeProperties', [1, 1]);
@@ -619,7 +619,7 @@ class CardDavBackendTest extends TestCase {
$query->select('*')
->from('cards_properties');
$qResult = $query->executeQuery();
$qResult = $query->execute();
$result = $qResult->fetchAll();
$qResult->closeCursor();
@@ -642,7 +642,7 @@ class CardDavBackendTest extends TestCase {
'size' => $query->createNamedParameter(120)
]
);
$query->executeStatement();
$query->execute();
$id = $query->getLastInsertId();
$this->assertSame($id,
@@ -686,7 +686,7 @@ class CardDavBackendTest extends TestCase {
'size' => $query->createNamedParameter(120),
]
);
$query->executeStatement();
$query->execute();
$vCardIds[] = $query->getLastInsertId();
}
@@ -701,7 +701,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$query = $this->db->getQueryBuilder();
$query->insert($this->dbCardsPropertiesTable)
->values(
@@ -713,7 +713,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$query = $this->db->getQueryBuilder();
$query->insert($this->dbCardsPropertiesTable)
->values(
@@ -725,7 +725,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$query = $this->db->getQueryBuilder();
$query->insert($this->dbCardsPropertiesTable)
->values(
@@ -737,7 +737,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$query = $this->db->getQueryBuilder();
$query->insert($this->dbCardsPropertiesTable)
->values(
@@ -749,7 +749,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
);
$query->executeStatement();
$query->execute();
$result = $this->backend->search(0, $pattern, $properties, $options);
@@ -795,7 +795,7 @@ class CardDavBackendTest extends TestCase {
'size' => $query->createNamedParameter(120),
]
);
$query->executeStatement();
$query->execute();
$id = $query->getLastInsertId();
@@ -823,7 +823,7 @@ class CardDavBackendTest extends TestCase {
'size' => $query->createNamedParameter(120),
]
);
$query->executeStatement();
$query->execute();
}
$result = $this->backend->getContact(0, 'uri0');
@@ -856,7 +856,7 @@ class CardDavBackendTest extends TestCase {
'preferred' => $query->createNamedParameter(0)
]
)
->executeStatement();
->execute();
$result = $this->backend->collectCardProperties(666, 'FN');
$this->assertEquals(['John Doe'], $result);
@@ -12,7 +12,6 @@ use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\ContactsManager;
use OCA\DAV\Db\PropertyMapper;
use OCP\Contacts\IManager;
use OCP\IAppConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use PHPUnit\Framework\MockObject\MockObject;
@@ -22,8 +21,7 @@ class ContactsManagerTest extends TestCase {
public function test(): void {
/** @var IManager&MockObject $cm */
$cm = $this->createMock(IManager::class);
$cm->expects($this->exactly(1))->method('registerAddressBook');
/** @var IURLGenerator&MockObject $urlGenerator */
$cm->expects($this->exactly(2))->method('registerAddressBook');
$urlGenerator = $this->createMock(IURLGenerator::class);
/** @var CardDavBackend&MockObject $backEnd */
$backEnd = $this->createMock(CardDavBackend::class);
@@ -31,12 +29,9 @@ class ContactsManagerTest extends TestCase {
['{DAV:}displayname' => 'Test address book', 'uri' => 'default'],
]);
$propertyMapper = $this->createMock(PropertyMapper::class);
/** @var IAppConfig&MockObject $appConfig */
$appConfig = $this->createMock(IAppConfig::class);
/** @var IL10N&MockObject $l */
$l = $this->createMock(IL10N::class);
$app = new ContactsManager($backEnd, $l, $propertyMapper, $appConfig);
$app = new ContactsManager($backEnd, $l, $propertyMapper);
$app->setupContactsProvider($cm, 'user01', $urlGenerator);
}
}
@@ -13,6 +13,7 @@ use OCP\Files\NotFoundException;
use OCP\Share\IAttributes;
use OCP\Share\IShare;
use PHPUnit\Framework\MockObject\MockObject;
use Sabre\DAV\Exception\BadRequest;
use Sabre\DAV\Server;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
@@ -55,6 +56,13 @@ class FilesDropPluginTest extends TestCase {
->willReturn('token');
}
public function testNotEnabled(): void {
$this->request->expects($this->never())
->method($this->anything());
$this->plugin->beforeMethod($this->request, $this->response);
}
public function testValid(): void {
$this->plugin->enable();
$this->plugin->setShare($this->share);
@@ -104,13 +112,32 @@ class FilesDropPluginTest extends TestCase {
$this->plugin->beforeMethod($this->request, $this->response);
}
public function testMKCOL(): void {
public function testNoMKCOLWithoutNickname(): void {
$this->plugin->enable();
$this->plugin->setShare($this->share);
$this->request->method('getMethod')
->willReturn('MKCOL');
$this->expectException(BadRequest::class);
$this->plugin->beforeMethod($this->request, $this->response);
}
public function testMKCOLWithNickname(): void {
$this->plugin->enable();
$this->plugin->setShare($this->share);
$this->request->method('getMethod')
->willReturn('MKCOL');
$this->request->method('hasHeader')
->with('X-NC-Nickname')
->willReturn(true);
$this->request->method('getHeader')
->with('X-NC-Nickname')
->willReturn('nickname');
$this->expectNotToPerformAssertions();
$this->plugin->beforeMethod($this->request, $this->response);
@@ -17,18 +17,17 @@ use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Mail\IMailer;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;
use Test\Traits\EmailValidatorTrait;
class CalendarContactInteractionListenerTest extends TestCase {
use EmailValidatorTrait;
private IEventDispatcher&MockObject $eventDispatcher;
private IUserSession&MockObject $userSession;
private Principal&MockObject $principalConnector;
private LoggerInterface&MockObject $logger;
private IMailer&MockObject $mailer;
private CalendarContactInteractionListener $listener;
protected function setUp(): void {
@@ -37,13 +36,14 @@ class CalendarContactInteractionListenerTest extends TestCase {
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->principalConnector = $this->createMock(Principal::class);
$this->mailer = $this->createMock(IMailer::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->listener = new CalendarContactInteractionListener(
$this->eventDispatcher,
$this->userSession,
$this->principalConnector,
$this->getEmailValidatorWithStrictEmailCheck(),
$this->mailer,
$this->logger
);
}
@@ -162,6 +162,7 @@ END:VCALENDAR
EVENT]);
$user = $this->createMock(IUser::class);
$this->userSession->expects(self::once())->method('getUser')->willReturn($user);
$this->mailer->expects(self::once())->method('validateMailAddress')->willReturn(true);
$this->eventDispatcher->expects(self::once())
->method('dispatchTyped')
->with(self::equalTo((new ContactInteractedWithEvent($user))->setEmail('user@domain.tld')));
@@ -404,7 +404,6 @@ class EventsSearchProviderTest extends TestCase {
return [
['principals/users/john.doe', 'bGluay10by1yZW1vdGUucGhwL2Rhdi9jYWxlbmRhcnMvam9obi5kb2UvZm9vL2Jhci5pY3M='],
['principals/users/John Doe', 'bGluay10by1yZW1vdGUucGhwL2Rhdi9jYWxlbmRhcnMvSm9obiUyMERvZS9mb28vYmFyLmljcw=='],
['principals/users/john@doe', 'bGluay10by1yZW1vdGUucGhwL2Rhdi9jYWxlbmRhcnMvam9obkBkb2UvZm9vL2Jhci5pY3M='],
];
}
@@ -10,7 +10,6 @@ declare(strict_types=1);
namespace OCA\DAV\Tests\SetupChecks;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCA\DAV\SetupChecks\SystemAddressBookSize;
use OCP\IAppConfig;
use OCP\IL10N;
@@ -31,7 +30,7 @@ class SystemAddressBookSizeTest extends TestCase {
public function testSystemAddressBookDisabled() {
$this->appConfig->method('getValueBool')
->with(Application::APP_ID, ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED)
->with(Application::APP_ID, 'system_addressbook_exposed', true)
->willReturn(false);
$check = new SystemAddressBookSize($this->appConfig, $this->userManager, $this->l10n);
+5 -24
View File
@@ -7,28 +7,12 @@
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>encryption</id>
<name>Default Encryption Module</name>
<summary>Default encryption module for Nextcloud Server-side Encryption (SSE)</summary>
<name>Default encryption module</name>
<summary>Default encryption module for server-side encryption</summary>
<description>
<![CDATA[
This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.
**Encryption Details**
* **Cipher Mode:** AES-256-CTR (default)
* **Authentication:** HMAC-SHA256
**Important Warnings**
* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).
* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI."
**Notes for Existing Files**
* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.
* To encrypt all existing files, use the command `occ encryption:encrypt-all`.
**Before You Begin**
* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to
read the documentation to understand implications and the appropriate procedures to avoid data loss.
]]>
In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.
The module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.
Please read the documentation to know all implications before you decide to enable server-side encryption.
</description>
<version>2.21.0</version>
<licence>agpl</licence>
@@ -37,15 +21,12 @@
<types>
<filesystem/>
</types>
<documentation>
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
<category>files</category>
<category>security</category>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
+3 -3
View File
@@ -35,6 +35,8 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
@@ -58,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Enabled" : "مفعلة",
"Disabled" : "معطلة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
"Disabled" : "معطلة"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
+3 -3
View File
@@ -33,6 +33,8 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
@@ -56,8 +58,6 @@
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Enabled" : "مفعلة",
"Disabled" : "معطلة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
"Disabled" : "معطلة"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
+3 -3
View File
@@ -34,6 +34,8 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
@@ -55,8 +57,6 @@ OC.L10N.register(
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Enabled" : "Включено",
"Disabled" : "Изключено",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
"Disabled" : "Изключено"
},
"nplurals=2; plural=(n != 1);");
+3 -3
View File
@@ -32,6 +32,8 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
@@ -53,8 +55,6 @@
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Enabled" : "Включено",
"Disabled" : "Изключено",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
"Disabled" : "Изключено"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -2
View File
@@ -31,6 +31,7 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a lemmagatzematge principal; en cas contrari, només es xifraran els fitxers demmagatzematge extern",
@@ -52,7 +53,6 @@ OC.L10N.register(
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Enabled" : "Habilitat",
"Disabled" : "Inhabilitat",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
"Disabled" : "Inhabilitat"
},
"nplurals=2; plural=(n != 1);");
+2 -2
View File
@@ -29,6 +29,7 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a lemmagatzematge principal; en cas contrari, només es xifraran els fitxers demmagatzematge extern",
@@ -50,7 +51,6 @@
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Enabled" : "Habilitat",
"Disabled" : "Inhabilitat",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
"Disabled" : "Inhabilitat"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+3 -3
View File
@@ -35,6 +35,8 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nedaří rozšifrovat pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Default encryption module" : "Výchozí šifrovací modul",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
@@ -58,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
"Disabled" : "Zakázáno"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+3 -3
View File
@@ -33,6 +33,8 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nedaří rozšifrovat pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Default encryption module" : "Výchozí šifrovací modul",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
@@ -56,8 +58,6 @@
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
"Disabled" : "Zakázáno"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+3 -4
View File
@@ -34,8 +34,9 @@ OC.L10N.register(
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Log venligst ind på webgrænsefladen, gå til afsnittet \"Sikkerhed\" i dine personlige indstillinger og opdater din krypteringsadgangskode ved at indtaste denne adgangskode i feltet \"Gammel loginadgangskode\" og din nuværende loginadgangskode.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Default Encryption Module" : "Standard krypteringsmodul",
"Default encryption module" : "Standard krypterings modul",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
@@ -59,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Enabled" : "Aktiveret",
"Disabled" : "Deaktiveret",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
"Disabled" : "Deaktiveret"
},
"nplurals=2; plural=(n != 1);");
+3 -4
View File
@@ -32,8 +32,9 @@
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Log venligst ind på webgrænsefladen, gå til afsnittet \"Sikkerhed\" i dine personlige indstillinger og opdater din krypteringsadgangskode ved at indtaste denne adgangskode i feltet \"Gammel loginadgangskode\" og din nuværende loginadgangskode.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Default Encryption Module" : "Standard krypteringsmodul",
"Default encryption module" : "Standard krypterings modul",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
@@ -57,8 +58,6 @@
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Enabled" : "Aktiveret",
"Disabled" : "Deaktiveret",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
"Disabled" : "Deaktiveret"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+3 -6
View File
@@ -34,10 +34,9 @@ OC.L10N.register(
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Bitte melde dich an der Weboberfläche an, gehe zum Abschnitt \"Sicherheit\" deiner persönlichen Einstellungen und aktualisiere dein Verschlüsselungspasswort, indem du dieses Passwort in das Feld \"Altes Login-Passwort\" sowie dein aktuelles Login-Passwort eingibst.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte den Eigentümer der Datei kontaktieren und ihn darum bitten, die Datei noch einmal zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl „occ encryption:encrypt-all“.\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -61,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
+3 -6
View File
@@ -32,10 +32,9 @@
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Bitte melde dich an der Weboberfläche an, gehe zum Abschnitt \"Sicherheit\" deiner persönlichen Einstellungen und aktualisiere dein Verschlüsselungspasswort, indem du dieses Passwort in das Feld \"Altes Login-Passwort\" sowie dein aktuelles Login-Passwort eingibst.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte den Eigentümer der Datei kontaktieren und ihn darum bitten, die Datei noch einmal zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl „occ encryption:encrypt-all“.\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -59,8 +58,6 @@
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+3 -6
View File
@@ -34,10 +34,9 @@ OC.L10N.register(
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Bitte melden Sie sich an der Weboberfläche an, gehen Sie zum Abschnitt \"Sicherheit\" Ihrer persönlichen Einstellungen und aktualisieren Sie Ihr Verschlüsselungspasswort, indem Sie dieses Passwort in das Feld \"Altes Login-Passwort\" sowie Ihr aktuelles Login-Passwort eingeben.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl „occ encryption:encrypt-all“.\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -61,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
+3 -6
View File
@@ -32,10 +32,9 @@
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Bitte melden Sie sich an der Weboberfläche an, gehen Sie zum Abschnitt \"Sicherheit\" Ihrer persönlichen Einstellungen und aktualisieren Sie Ihr Verschlüsselungspasswort, indem Sie dieses Passwort in das Feld \"Altes Login-Passwort\" sowie Ihr aktuelles Login-Passwort eingeben.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl „occ encryption:encrypt-all“.\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -59,8 +58,6 @@
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+3 -3
View File
@@ -35,6 +35,8 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
@@ -58,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
"Disabled" : "Απενεργοποιημένο"
},
"nplurals=2; plural=(n != 1);");
+3 -3
View File
@@ -33,6 +33,8 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
@@ -56,8 +58,6 @@
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
"Disabled" : "Απενεργοποιημένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+3 -3
View File
@@ -35,6 +35,8 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.",
"Default encryption module" : "Default encryption module",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption app is enabled but your keys are not initialised, please log-out and log-in again",
"Encrypt the home storage" : "Encrypt the home storage",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted",
@@ -58,8 +60,6 @@ OC.L10N.register(
"Enable password recovery:" : "Enable password recovery:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
"Enabled" : "Enabled",
"Disabled" : "Disabled",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption."
"Disabled" : "Disabled"
},
"nplurals=2; plural=(n != 1);");

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